summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autobuild.xml148
-rw-r--r--indra/media_plugins/cef/media_plugin_cef.cpp71
-rw-r--r--indra/newview/llappviewer.cpp24
-rw-r--r--indra/newview/llappviewer.h1
-rw-r--r--indra/newview/skins/default/xui/en/floater_web_content.xml2
-rwxr-xr-xindra/newview/viewer_manifest.py8
6 files changed, 144 insertions, 110 deletions
diff --git a/autobuild.xml b/autobuild.xml
index 1d75fe5043..ffea5916e9 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -99,16 +99,6 @@
</map>
<key>boost</key>
<map>
- <key>copyright</key>
- <string>(see individual source files)</string>
- <key>description</key>
- <string>Boost C++ Libraries</string>
- <key>license</key>
- <string>boost 1.0</string>
- <key>license_file</key>
- <string>LICENSES/boost.txt</string>
- <key>name</key>
- <string>boost</string>
<key>platforms</key>
<map>
<key>darwin64</key>
@@ -154,8 +144,18 @@
<string>windows64</string>
</map>
</map>
+ <key>license</key>
+ <string>boost 1.0</string>
+ <key>license_file</key>
+ <string>LICENSES/boost.txt</string>
+ <key>copyright</key>
+ <string>(see individual source files)</string>
<key>version</key>
<string>1.86</string>
+ <key>name</key>
+ <string>boost</string>
+ <key>description</key>
+ <string>Boost C++ Libraries</string>
</map>
<key>bugsplat</key>
<map>
@@ -205,14 +205,6 @@
</map>
<key>colladadom</key>
<map>
- <key>copyright</key>
- <string>Copyright 2006 Sony Computer Entertainment Inc.</string>
- <key>license</key>
- <string>SCEA</string>
- <key>license_file</key>
- <string>LICENSES/collada.txt</string>
- <key>name</key>
- <string>colladadom</string>
<key>platforms</key>
<map>
<key>darwin64</key>
@@ -258,8 +250,16 @@
<string>windows64</string>
</map>
</map>
+ <key>license</key>
+ <string>SCEA</string>
+ <key>license_file</key>
+ <string>LICENSES/collada.txt</string>
+ <key>copyright</key>
+ <string>Copyright 2006 Sony Computer Entertainment Inc.</string>
<key>version</key>
<string>2.3.0-r8</string>
+ <key>name</key>
+ <string>colladadom</string>
</map>
<key>cubemaptoequirectangular</key>
<map>
@@ -441,16 +441,6 @@
</map>
<key>dullahan</key>
<map>
- <key>copyright</key>
- <string>Copyright (c) 2017, Linden Research, Inc.</string>
- <key>description</key>
- <string>A headless browser SDK that uses the Chromium Embedded Framework (CEF). It is designed to make it easier to write applications that render modern web content directly to a memory buffer, inject synthesized mouse and keyboard events as well as interact with web based features like JavaScript or cookies.</string>
- <key>license</key>
- <string>MPL</string>
- <key>license_file</key>
- <string>LICENSES/LICENSE.txt</string>
- <key>name</key>
- <string>dullahan</string>
<key>platforms</key>
<map>
<key>darwin64</key>
@@ -458,11 +448,11 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>7fde76e3f0e62d0e0593b6157f4d740ecef2429d</string>
+ <string>67f6df74e64ec7706b59192dbdef1d0da2754127</string>
<key>hash_algorithm</key>
<string>sha1</string>
<key>url</key>
- <string>https://github.com/secondlife/dullahan/releases/download/v1.14.0-r3/dullahan-1.14.0.202408091638_118.4.1_g3dd6078_chromium-118.0.5993.54-darwin64-10322607516.tar.zst</string>
+ <string>https://github.com/secondlife/dullahan/releases/download/v1.20.0-CEF_139.0.28a/dullahan-1.20.0.202508222243_139.0.28_g55ab8a8_chromium-139.0.7258.139-darwin64-17167490569.tar.zst</string>
</map>
<key>name</key>
<string>darwin64</string>
@@ -486,18 +476,28 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>4124c79d8b0e319877ffa4c12581d5c1318b4d93</string>
+ <string>7fe15918eeeb5121b6c5af9427f581a775b88758</string>
<key>hash_algorithm</key>
<string>sha1</string>
<key>url</key>
- <string>https://github.com/secondlife/dullahan/releases/download/v1.14.0-r3/dullahan-1.14.0.202408091639_118.4.1_g3dd6078_chromium-118.0.5993.54-windows64-10322607516.tar.zst</string>
+ <string>https://github.com/secondlife/dullahan/releases/download/v1.20.0-CEF_139.0.28a/dullahan-1.20.0.202508222244_139.0.28_g55ab8a8_chromium-139.0.7258.139-windows64-17167490569.tar.zst</string>
</map>
<key>name</key>
<string>windows64</string>
</map>
</map>
+ <key>license</key>
+ <string>MPL</string>
+ <key>license_file</key>
+ <string>LICENSES/LICENSE.txt</string>
+ <key>copyright</key>
+ <string>Copyright (c) 2017, Linden Research, Inc.</string>
<key>version</key>
- <string>1.14.0.202408091639_118.4.1_g3dd6078_chromium-118.0.5993.54</string>
+ <string>1.20.0.202508222243_139.0.28_g55ab8a8_chromium-139.0.7258.139</string>
+ <key>name</key>
+ <string>dullahan</string>
+ <key>description</key>
+ <string>A headless browser SDK that uses the Chromium Embedded Framework (CEF). It is designed to make it easier to write applications that render modern web content directly to a memory buffer, inject synthesized mouse and keyboard events as well as interact with web based features like JavaScript or cookies.</string>
</map>
<key>emoji_shortcodes</key>
<map>
@@ -625,16 +625,6 @@
</map>
<key>freetype</key>
<map>
- <key>copyright</key>
- <string>Copyright 2006, 2007, 2008, 2009, 2010 by David Turner, Robert Wilhelm, and Werner Lemberg.</string>
- <key>description</key>
- <string>Font rendering library</string>
- <key>license</key>
- <string>FreeType</string>
- <key>license_file</key>
- <string>LICENSES/freetype.txt</string>
- <key>name</key>
- <string>freetype</string>
<key>platforms</key>
<map>
<key>darwin64</key>
@@ -680,8 +670,18 @@
<string>windows64</string>
</map>
</map>
+ <key>license</key>
+ <string>FreeType</string>
+ <key>license_file</key>
+ <string>LICENSES/freetype.txt</string>
+ <key>copyright</key>
+ <string>Copyright 2006, 2007, 2008, 2009, 2010 by David Turner, Robert Wilhelm, and Werner Lemberg.</string>
<key>version</key>
<string>2.13.3-cb2e120</string>
+ <key>name</key>
+ <string>freetype</string>
+ <key>description</key>
+ <string>Font rendering library</string>
</map>
<key>glext</key>
<map>
@@ -1395,15 +1395,6 @@
</map>
<key>llca</key>
<map>
- <key>copyright</key>
- <string>Copyright (c) 2016, Linden Research, Inc.; data provided by the Mozilla NSS Project.
- </string>
- <key>license</key>
- <string>mit</string>
- <key>license_file</key>
- <string>LICENSES/ca-license.txt</string>
- <key>name</key>
- <string>llca</string>
<key>platforms</key>
<map>
<key>common</key>
@@ -1421,8 +1412,17 @@
<string>common</string>
</map>
</map>
+ <key>license</key>
+ <string>mit</string>
+ <key>license_file</key>
+ <string>LICENSES/ca-license.txt</string>
+ <key>copyright</key>
+ <string>Copyright (c) 2016, Linden Research, Inc.; data provided by the Mozilla NSS Project.
+ </string>
<key>version</key>
<string>202407221423.0</string>
+ <key>name</key>
+ <string>llca</string>
</map>
<key>llphysicsextensions_source</key>
<map>
@@ -2594,14 +2594,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
</map>
<key>vlc-bin</key>
<map>
- <key>copyright</key>
- <string>Copyright (C) 1998-2016 VLC authors and VideoLAN</string>
- <key>license</key>
- <string>GPL2</string>
- <key>license_file</key>
- <string>LICENSES/vlc.txt</string>
- <key>name</key>
- <string>vlc-bin</string>
<key>platforms</key>
<map>
<key>darwin64</key>
@@ -2633,8 +2625,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<string>windows64</string>
</map>
</map>
+ <key>license</key>
+ <string>GPL2</string>
+ <key>license_file</key>
+ <string>LICENSES/vlc.txt</string>
+ <key>copyright</key>
+ <string>Copyright (C) 1998-2016 VLC authors and VideoLAN</string>
<key>version</key>
<string>3.0.21.10218721728</string>
+ <key>name</key>
+ <string>vlc-bin</string>
</map>
<key>vulkan_gltf</key>
<map>
@@ -2832,16 +2832,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
</map>
<key>tinyexr</key>
<map>
- <key>copyright</key>
- <string>Copyright (c) 2014 - 2021, Syoyo Fujita and many contributors.</string>
- <key>description</key>
- <string>tinyexr import library</string>
- <key>license</key>
- <string>3-clause BSD</string>
- <key>license_file</key>
- <string>LICENSES/tinyexr_license.txt</string>
- <key>name</key>
- <string>tinyexr</string>
<key>platforms</key>
<map>
<key>common</key>
@@ -2859,16 +2849,26 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<string>common</string>
</map>
</map>
- <key>source_type</key>
- <string>git</string>
+ <key>license</key>
+ <string>3-clause BSD</string>
+ <key>license_file</key>
+ <string>LICENSES/tinyexr_license.txt</string>
+ <key>copyright</key>
+ <string>Copyright (c) 2014 - 2021, Syoyo Fujita and many contributors.</string>
+ <key>version</key>
+ <string>1.0.9-5e8947c</string>
+ <key>name</key>
+ <string>tinyexr</string>
<key>vcs_branch</key>
<string>dependabot/github_actions/secondlife/action-autobuild-4</string>
<key>vcs_revision</key>
<string>4dc4d1d90d82a22843e2adf5130f9ecb5ee5769e</string>
<key>vcs_url</key>
<string>https://github.com/secondlife/3p-tinyexr</string>
- <key>version</key>
- <string>1.0.9-5e8947c</string>
+ <key>description</key>
+ <string>tinyexr import library</string>
+ <key>source_type</key>
+ <string>git</string>
</map>
<key>discord_sdk</key>
<map>
diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp
index 64fc7e452b..52df4a9685 100644
--- a/indra/media_plugins/cef/media_plugin_cef.cpp
+++ b/indra/media_plugins/cef/media_plugin_cef.cpp
@@ -38,6 +38,13 @@
#include "volume_catcher.h"
#include "media_plugin_base.h"
+// _getpid()/getpid()
+#if LL_WINDOWS
+#include <process.h>
+#else
+#include <unistd.h>
+#endif
+
#include "dullahan.h"
////////////////////////////////////////////////////////////////////////////////
@@ -64,7 +71,7 @@ private:
void onLoadStartCallback();
void onRequestExitCallback();
void onLoadEndCallback(int httpStatusCode, std::string url);
- void onLoadError(int status, const std::string error_text);
+ void onLoadError(int status, const std::string error_text, const std::string error_url);
void onAddressChangeCallback(std::string url);
void onOpenPopupCallback(std::string url, std::string target);
bool onHTTPAuthCallback(const std::string host, const std::string realm, std::string& username, std::string& password);
@@ -103,8 +110,6 @@ private:
bool mCanCopy;
bool mCanPaste;
std::string mRootCachePath;
- std::string mCachePath;
- std::string mContextCachePath;
std::string mCefLogFile;
bool mCefLogVerbose;
std::vector<std::string> mPickedFiles;
@@ -142,7 +147,6 @@ MediaPluginBase(host_send_func, host_user_data)
mCanCut = false;
mCanCopy = false;
mCanPaste = false;
- mCachePath = "";
mCefLogFile = "";
mCefLogVerbose = false;
mPickedFiles.clear();
@@ -242,15 +246,17 @@ void MediaPluginCEF::onLoadStartCallback()
/////////////////////////////////////////////////////////////////////////////////
//
-void MediaPluginCEF::onLoadError(int status, const std::string error_text)
+void MediaPluginCEF::onLoadError(int status, const std::string error_text, const std::string error_url)
{
std::stringstream msg;
- msg << "<b>Loading error!</b>";
+ msg << "<b>Loading error</b>";
+ msg << "<p>";
+ msg << "Error message: " << error_text;
msg << "<p>";
- msg << "Message: " << error_text;
- msg << "<br>";
- msg << "Code: " << status;
+ msg << "Error URL: <tt>" << error_url << "</tt>";
+ msg << "<p>";
+ msg << "Error code: " << status;
mCEFLib->showBrowserMessage(msg.str());
}
@@ -607,7 +613,12 @@ void MediaPluginCEF::receiveMessage(const char* message_string)
mCEFLib->setOnTooltipCallback(std::bind(&MediaPluginCEF::onTooltipCallback, this, std::placeholders::_1));
mCEFLib->setOnLoadStartCallback(std::bind(&MediaPluginCEF::onLoadStartCallback, this));
mCEFLib->setOnLoadEndCallback(std::bind(&MediaPluginCEF::onLoadEndCallback, this, std::placeholders::_1, std::placeholders::_2));
- mCEFLib->setOnLoadErrorCallback(std::bind(&MediaPluginCEF::onLoadError, this, std::placeholders::_1, std::placeholders::_2));
+
+ // CEF 139 seems to have introduced a loading failure at the login page (only?) I haven't seen it on
+ // any other page and it only happens about 1 in 8 times. Without this handler for the error page
+ // (red box, error message/code/url) the page load recovers after display a brief built in error.
+ // Not ideal but better than stopping altgoether. Will restore this once I discover the error.
+ //mCEFLib->setOnLoadErrorCallback(std::bind(&MediaPluginCEF::onLoadError, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
mCEFLib->setOnAddressChangeCallback(std::bind(&MediaPluginCEF::onAddressChangeCallback, this, std::placeholders::_1));
mCEFLib->setOnOpenPopupCallback(std::bind(&MediaPluginCEF::onOpenPopupCallback, this, std::placeholders::_1, std::placeholders::_2));
mCEFLib->setOnHTTPAuthCallback(std::bind(&MediaPluginCEF::onHTTPAuthCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
@@ -635,10 +646,7 @@ void MediaPluginCEF::receiveMessage(const char* message_string)
// and set it to white
settings.background_color = 0xffffffff; // white
- settings.cache_enabled = true;
settings.root_cache_path = mRootCachePath;
- settings.cache_path = mCachePath;
- settings.context_cache_path = mContextCachePath;
settings.cookies_enabled = mCookiesEnabled;
// configure proxy argument if enabled and valid
@@ -729,23 +737,32 @@ void MediaPluginCEF::receiveMessage(const char* message_string)
std::string user_data_path_cache = message_in.getValue("cache_path");
std::string subfolder = message_in.getValue("username");
- mRootCachePath = user_data_path_cache + "cef_cache";
- if (!subfolder.empty())
- {
- std::string delim;
+ // media plugin doesn't have access to gDirUtilp
+ std::string path_separator;
#if LL_WINDOWS
- // media plugin doesn't have access to gDirUtilp
- delim = "\\";
+ path_separator = "\\";
#else
- delim = "/";
+ path_separator = "/";
#endif
- mCachePath = mRootCachePath + delim + subfolder;
- }
- else
- {
- mCachePath = mRootCachePath;
- }
- mContextCachePath = ""; // disabled by ""
+
+ mRootCachePath = user_data_path_cache + "cef_cache";
+
+ // Issue #4498 Introduce an additional sub-folder underneath the main cache
+ // folder so that each CEF media instance gets its own (as per the CEF API
+ // official position). These folders will be removed at startup by Viewer code
+ // so that their non-trivial size does not exhaust available disk space. This
+ // begs the question - why turn on the cache at all? There are 2 reasons - firstly
+ // some of the instances will benefit from per Viewer session caching and will
+ // use the injected SL cookie and secondly, it's not clear how having no cache
+ // interacts with the multiple simultaneous paradigm we use.
+ mRootCachePath += path_separator;
+# if LL_WINDOWS
+ mRootCachePath += std::to_string(_getpid());
+# else
+ mRootCachePath += std::to_string(getpid());
+# endif
+
+
mCefLogFile = message_in.getValue("cef_log_file");
mCefLogVerbose = message_in.getValueBoolean("cef_verbose_log");
}
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index ac9464d86e..7a1154a992 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -4426,6 +4426,9 @@ bool LLAppViewer::initCache()
const U32 CACHE_NUMBER_OF_REGIONS_FOR_OBJECTS = 128;
LLVOCache::getInstance()->initCache(LL_PATH_CACHE, CACHE_NUMBER_OF_REGIONS_FOR_OBJECTS, getObjectCacheVersion());
+ // Remove old, stale CEF cache folders
+ purgeCefStaleCaches();
+
return true;
}
@@ -4450,18 +4453,27 @@ void LLAppViewer::loadKeyBindings()
LLUrlRegistry::instance().setKeybindingHandler(&gViewerInput);
}
+// As per GHI #4498, remove old, stale CEF cache folders from previous sessions
+void LLAppViewer::purgeCefStaleCaches()
+{
+ // TODO: we really shouldn't use a hard coded name for the cache folder here...
+ const std::string browser_parent_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "cef_cache");
+ if (LLFile::isdir(browser_parent_cache))
+ {
+ // This is a sledgehammer approach - nukes the cef_cache dir entirely
+ // which is then recreated the first time a CEF instance creates an
+ // individual cache folder. If we ever decide to retain some folders
+ // e.g. Search UI cache - then we will need a more granular approach.
+ gDirUtilp->deleteDirAndContents(browser_parent_cache);
+ }
+}
+
void LLAppViewer::purgeCache()
{
LL_INFOS("AppCache") << "Purging Cache and Texture Cache..." << LL_ENDL;
LLAppViewer::getTextureCache()->purgeCache(LL_PATH_CACHE);
LLVOCache::getInstance()->removeCache(LL_PATH_CACHE);
LLViewerShaderMgr::instance()->clearShaderCache();
- std::string browser_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "cef_cache");
- if (LLFile::isdir(browser_cache))
- {
- // cef does not support clear_cache and clear_cookies, so clear what we can manually.
- gDirUtilp->deleteDirAndContents(browser_cache);
- }
gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE, ""), "*");
}
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index e7de2d9b28..3afde6b9f5 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -220,6 +220,7 @@ public:
void initGeneralThread();
void purgeUserDataOnExit() { mPurgeUserDataOnExit = true; }
+ void purgeCefStaleCaches(); // Remove old, stale CEF cache folders
void purgeCache(); // Clear the local cache.
void purgeCacheImmediate(); //clear local cache immediately.
S32 updateTextureThreads(F32 max_time);
diff --git a/indra/newview/skins/default/xui/en/floater_web_content.xml b/indra/newview/skins/default/xui/en/floater_web_content.xml
index 2e1dfa00c7..53796f0959 100644
--- a/indra/newview/skins/default/xui/en/floater_web_content.xml
+++ b/indra/newview/skins/default/xui/en/floater_web_content.xml
@@ -178,7 +178,7 @@
width="22">
<button.commit_callback
function="WebContent.TestURL"
- parameter="https://sl-viewer-media-system.s3.amazonaws.com/index.html"/>
+ parameter="https://sl-viewer-media-system.s3.amazonaws.com/bookmarks/index.html"/>
</button>
</layout_panel>
<layout_panel
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 6991e0c8f2..1146922d5d 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -623,12 +623,16 @@ class Windows_x86_64_Manifest(ViewerManifest):
with self.prefix(src=os.path.join(pkgdir, 'bin', config)):
self.path("chrome_elf.dll")
self.path("d3dcompiler_47.dll")
+ self.path("dxcompiler.dll")
+ self.path("dxil.dll")
self.path("libcef.dll")
self.path("libEGL.dll")
self.path("libGLESv2.dll")
- self.path("dullahan_host.exe")
- self.path("snapshot_blob.bin")
self.path("v8_context_snapshot.bin")
+ self.path("vk_swiftshader.dll")
+ self.path("vk_swiftshader_icd.json")
+ self.path("vulkan-1.dll")
+ self.path("dullahan_host.exe")
# MSVC DLLs needed for CEF and have to be in same directory as plugin
with self.prefix(src=os.path.join(self.args['build'], os.pardir,