From 65ab91ff46b73855a2134fdc16ee0fbae5ac669f Mon Sep 17 00:00:00 2001 From: callum_linden Date: Wed, 20 Jan 2016 17:11:50 -0800 Subject: MAINT-6004 (Fix) Add non blocking file upload picker support --- indra/media_plugins/cef/media_plugin_cef.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'indra/media_plugins') diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp index 9028f73e30..1bb97f3291 100644 --- a/indra/media_plugins/cef/media_plugin_cef.cpp +++ b/indra/media_plugins/cef/media_plugin_cef.cpp @@ -69,6 +69,7 @@ private: bool onHTTPAuthCallback(const std::string host, const std::string realm, std::string& username, std::string& password); void onCursorChangedCallback(LLCEFLib::ECursorType type, unsigned int handle); void onFileDownloadCallback(std::string filename); + const std::string onFileDialogCallback(); void postDebugMessage(const std::string& msg); void authResponse(LLPluginMessage &message); @@ -95,6 +96,7 @@ private: bool mCanPaste; std::string mCachePath; std::string mCookiePath; + std::string mPickedFile; LLCEFLib* mLLCEFLib; VolumeCatcher mVolumeCatcher; @@ -123,6 +125,7 @@ MediaPluginBase(host_send_func, host_user_data) mCanPaste = false; mCachePath = ""; mCookiePath = ""; + mPickedFile = ""; mLLCEFLib = new LLCEFLib(); } @@ -305,6 +308,20 @@ void MediaPluginCEF::onFileDownloadCallback(const std::string filename) sendMessage(message); } +//////////////////////////////////////////////////////////////////////////////// +// +const std::string MediaPluginCEF::onFileDialogCallback() +{ + mPickedFile.clear(); + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file"); + message.setValueBoolean("blocking_request", true); + + sendMessage(message); + + return mPickedFile; +} + void MediaPluginCEF::onCursorChangedCallback(LLCEFLib::ECursorType type, unsigned int handle) { std::string name = ""; @@ -439,6 +456,7 @@ void MediaPluginCEF::receiveMessage(const char* message_string) mLLCEFLib->setOnNavigateURLCallback(boost::bind(&MediaPluginCEF::onNavigateURLCallback, this, _1, _2)); mLLCEFLib->setOnHTTPAuthCallback(boost::bind(&MediaPluginCEF::onHTTPAuthCallback, this, _1, _2, _3, _4)); mLLCEFLib->setOnFileDownloadCallback(boost::bind(&MediaPluginCEF::onFileDownloadCallback, this, _1)); + mLLCEFLib->setOnFileDialogCallback(boost::bind(&MediaPluginCEF::onFileDialogCallback, this)); mLLCEFLib->setOnCursorChangedCallback(boost::bind(&MediaPluginCEF::onCursorChangedCallback, this, _1, _2)); mLLCEFLib->setOnRequestExitCallback(boost::bind(&MediaPluginCEF::onRequestExitCallback, this)); @@ -648,6 +666,10 @@ void MediaPluginCEF::receiveMessage(const char* message_string) { mEnableMediaPluginDebugging = message_in.getValueBoolean("enable"); } + if (message_name == "pick_file_response") + { + mPickedFile = message_in.getValue("file"); + } if (message_name == "auth_response") { authResponse(message_in); -- cgit v1.3 From 73c0b004d1750a75f37a445be032ba73e0b72ca8 Mon Sep 17 00:00:00 2001 From: callum_linden Date: Wed, 20 Jan 2016 17:13:12 -0800 Subject: Backed out changeset 2e77fb7b61b6 --- autobuild.xml | 10 +++++----- indra/media_plugins/cef/media_plugin_cef.cpp | 22 ---------------------- 2 files changed, 5 insertions(+), 27 deletions(-) (limited to 'indra/media_plugins') diff --git a/autobuild.xml b/autobuild.xml index ff436a7ef8..72f55fce1d 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -1536,11 +1536,11 @@ archive hash - fe4b09930b509d322b10bd27821bd876 + 6b9eaaf83fcf8bfd4bb6966c24df7f29 hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310159/arch/Darwin/installer/llceflib-1.5.3.310159-darwin-310159.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310043/arch/Darwin/installer/llceflib-1.5.1.310043-darwin-310043.tar.bz2 name darwin @@ -1550,18 +1550,18 @@ archive hash - 8fe98baea7ecb950d9611e9f6850cb1f + 578f21be02efc98bbf426529f916fce8 hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310159/arch/CYGWIN/installer/llceflib-1.5.3.310159-windows-310159.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310043/arch/CYGWIN/installer/llceflib-1.5.1.310043-windows-310043.tar.bz2 name windows version - 1.5.3.310159 + 1.5.1.310043 llphysicsextensions_source diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp index 1bb97f3291..9028f73e30 100644 --- a/indra/media_plugins/cef/media_plugin_cef.cpp +++ b/indra/media_plugins/cef/media_plugin_cef.cpp @@ -69,7 +69,6 @@ private: bool onHTTPAuthCallback(const std::string host, const std::string realm, std::string& username, std::string& password); void onCursorChangedCallback(LLCEFLib::ECursorType type, unsigned int handle); void onFileDownloadCallback(std::string filename); - const std::string onFileDialogCallback(); void postDebugMessage(const std::string& msg); void authResponse(LLPluginMessage &message); @@ -96,7 +95,6 @@ private: bool mCanPaste; std::string mCachePath; std::string mCookiePath; - std::string mPickedFile; LLCEFLib* mLLCEFLib; VolumeCatcher mVolumeCatcher; @@ -125,7 +123,6 @@ MediaPluginBase(host_send_func, host_user_data) mCanPaste = false; mCachePath = ""; mCookiePath = ""; - mPickedFile = ""; mLLCEFLib = new LLCEFLib(); } @@ -308,20 +305,6 @@ void MediaPluginCEF::onFileDownloadCallback(const std::string filename) sendMessage(message); } -//////////////////////////////////////////////////////////////////////////////// -// -const std::string MediaPluginCEF::onFileDialogCallback() -{ - mPickedFile.clear(); - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file"); - message.setValueBoolean("blocking_request", true); - - sendMessage(message); - - return mPickedFile; -} - void MediaPluginCEF::onCursorChangedCallback(LLCEFLib::ECursorType type, unsigned int handle) { std::string name = ""; @@ -456,7 +439,6 @@ void MediaPluginCEF::receiveMessage(const char* message_string) mLLCEFLib->setOnNavigateURLCallback(boost::bind(&MediaPluginCEF::onNavigateURLCallback, this, _1, _2)); mLLCEFLib->setOnHTTPAuthCallback(boost::bind(&MediaPluginCEF::onHTTPAuthCallback, this, _1, _2, _3, _4)); mLLCEFLib->setOnFileDownloadCallback(boost::bind(&MediaPluginCEF::onFileDownloadCallback, this, _1)); - mLLCEFLib->setOnFileDialogCallback(boost::bind(&MediaPluginCEF::onFileDialogCallback, this)); mLLCEFLib->setOnCursorChangedCallback(boost::bind(&MediaPluginCEF::onCursorChangedCallback, this, _1, _2)); mLLCEFLib->setOnRequestExitCallback(boost::bind(&MediaPluginCEF::onRequestExitCallback, this)); @@ -666,10 +648,6 @@ void MediaPluginCEF::receiveMessage(const char* message_string) { mEnableMediaPluginDebugging = message_in.getValueBoolean("enable"); } - if (message_name == "pick_file_response") - { - mPickedFile = message_in.getValue("file"); - } if (message_name == "auth_response") { authResponse(message_in); -- cgit v1.3 From 0f265ebf724b3c781afc234875171ed90f45d4e9 Mon Sep 17 00:00:00 2001 From: callum_linden Date: Wed, 20 Jan 2016 17:15:02 -0800 Subject: Backed out changeset 672bd34768c6 --- autobuild.xml | 10 +++++----- indra/media_plugins/cef/media_plugin_cef.cpp | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) (limited to 'indra/media_plugins') diff --git a/autobuild.xml b/autobuild.xml index 72f55fce1d..ff436a7ef8 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -1536,11 +1536,11 @@ archive hash - 6b9eaaf83fcf8bfd4bb6966c24df7f29 + fe4b09930b509d322b10bd27821bd876 hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310043/arch/Darwin/installer/llceflib-1.5.1.310043-darwin-310043.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310159/arch/Darwin/installer/llceflib-1.5.3.310159-darwin-310159.tar.bz2 name darwin @@ -1550,18 +1550,18 @@ archive hash - 578f21be02efc98bbf426529f916fce8 + 8fe98baea7ecb950d9611e9f6850cb1f hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310043/arch/CYGWIN/installer/llceflib-1.5.1.310043-windows-310043.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310159/arch/CYGWIN/installer/llceflib-1.5.3.310159-windows-310159.tar.bz2 name windows version - 1.5.1.310043 + 1.5.3.310159 llphysicsextensions_source diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp index 9028f73e30..1bb97f3291 100644 --- a/indra/media_plugins/cef/media_plugin_cef.cpp +++ b/indra/media_plugins/cef/media_plugin_cef.cpp @@ -69,6 +69,7 @@ private: bool onHTTPAuthCallback(const std::string host, const std::string realm, std::string& username, std::string& password); void onCursorChangedCallback(LLCEFLib::ECursorType type, unsigned int handle); void onFileDownloadCallback(std::string filename); + const std::string onFileDialogCallback(); void postDebugMessage(const std::string& msg); void authResponse(LLPluginMessage &message); @@ -95,6 +96,7 @@ private: bool mCanPaste; std::string mCachePath; std::string mCookiePath; + std::string mPickedFile; LLCEFLib* mLLCEFLib; VolumeCatcher mVolumeCatcher; @@ -123,6 +125,7 @@ MediaPluginBase(host_send_func, host_user_data) mCanPaste = false; mCachePath = ""; mCookiePath = ""; + mPickedFile = ""; mLLCEFLib = new LLCEFLib(); } @@ -305,6 +308,20 @@ void MediaPluginCEF::onFileDownloadCallback(const std::string filename) sendMessage(message); } +//////////////////////////////////////////////////////////////////////////////// +// +const std::string MediaPluginCEF::onFileDialogCallback() +{ + mPickedFile.clear(); + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file"); + message.setValueBoolean("blocking_request", true); + + sendMessage(message); + + return mPickedFile; +} + void MediaPluginCEF::onCursorChangedCallback(LLCEFLib::ECursorType type, unsigned int handle) { std::string name = ""; @@ -439,6 +456,7 @@ void MediaPluginCEF::receiveMessage(const char* message_string) mLLCEFLib->setOnNavigateURLCallback(boost::bind(&MediaPluginCEF::onNavigateURLCallback, this, _1, _2)); mLLCEFLib->setOnHTTPAuthCallback(boost::bind(&MediaPluginCEF::onHTTPAuthCallback, this, _1, _2, _3, _4)); mLLCEFLib->setOnFileDownloadCallback(boost::bind(&MediaPluginCEF::onFileDownloadCallback, this, _1)); + mLLCEFLib->setOnFileDialogCallback(boost::bind(&MediaPluginCEF::onFileDialogCallback, this)); mLLCEFLib->setOnCursorChangedCallback(boost::bind(&MediaPluginCEF::onCursorChangedCallback, this, _1, _2)); mLLCEFLib->setOnRequestExitCallback(boost::bind(&MediaPluginCEF::onRequestExitCallback, this)); @@ -648,6 +666,10 @@ void MediaPluginCEF::receiveMessage(const char* message_string) { mEnableMediaPluginDebugging = message_in.getValueBoolean("enable"); } + if (message_name == "pick_file_response") + { + mPickedFile = message_in.getValue("file"); + } if (message_name == "auth_response") { authResponse(message_in); -- cgit v1.3 From c41b94cd5ea43b5d3e2cc93bb76972c5ea147739 Mon Sep 17 00:00:00 2001 From: callum_linden Date: Thu, 21 Jan 2016 16:20:51 -0800 Subject: Fix @#$@#$$@# windows line endings introduced via Sublime Text copy/paste --- indra/media_plugins/cef/media_plugin_cef.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'indra/media_plugins') diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp index 1bb97f3291..8d9d1dd975 100644 --- a/indra/media_plugins/cef/media_plugin_cef.cpp +++ b/indra/media_plugins/cef/media_plugin_cef.cpp @@ -312,13 +312,13 @@ void MediaPluginCEF::onFileDownloadCallback(const std::string filename) // const std::string MediaPluginCEF::onFileDialogCallback() { - mPickedFile.clear(); - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file"); - message.setValueBoolean("blocking_request", true); - - sendMessage(message); - + mPickedFile.clear(); + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file"); + message.setValueBoolean("blocking_request", true); + + sendMessage(message); + return mPickedFile; } @@ -666,9 +666,9 @@ void MediaPluginCEF::receiveMessage(const char* message_string) { mEnableMediaPluginDebugging = message_in.getValueBoolean("enable"); } - if (message_name == "pick_file_response") - { - mPickedFile = message_in.getValue("file"); + if (message_name == "pick_file_response") + { + mPickedFile = message_in.getValue("file"); } if (message_name == "auth_response") { -- cgit v1.3 From 0c94c3bbf000315869412a1c7ece02f2510d0e64 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Fri, 26 Feb 2016 10:04:47 -0500 Subject: MAINT-5360: restore builds for the EDU package --- BuildParams | 9 +++----- autobuild.xml | 8 +++---- indra/media_plugins/cef/CMakeLists.txt | 8 +++++++ indra/newview/viewer_manifest.py | 41 +++++++++++++++++++++++++--------- 4 files changed, 46 insertions(+), 20 deletions(-) (limited to 'indra/media_plugins') diff --git a/BuildParams b/BuildParams index 15fb56ec17..aeea3b1246 100755 --- a/BuildParams +++ b/BuildParams @@ -70,15 +70,12 @@ additional_packages = "" # the viewer_channel_suffix is prefixed by a blank and then appended to the viewer_channel # for the package in a setting that overrides the compiled-in value ################################################################ -## Removed 2015-07-02 (MAINT-5360) until we fix packaging step in Team City -## additional_packages = "EDU" +additional_packages = "EDU" # The EDU package allows us to create a separate release channel whose expirations # are synchronized as much as possible with the academic year -## Removed 2015-07-02 (MAINT-5360) until we fix packaging step in Team City -## EDU_sourceid = "" -## Removed 2015-07-02 (MAINT-5360) until we fix packaging step in Team City -## EDU_viewer_channel_suffix = "edu" +EDU_sourceid = "" +EDU_viewer_channel_suffix = "edu" # Notifications - to configure email notices, add a setting like this: # _.email = diff --git a/autobuild.xml b/autobuild.xml index 72f55fce1d..91fea28487 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -1536,11 +1536,11 @@ archive hash - 6b9eaaf83fcf8bfd4bb6966c24df7f29 + 29a1f64df46094eda0d681821a98d17e hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310043/arch/Darwin/installer/llceflib-1.5.1.310043-darwin-310043.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/311349/arch/Darwin/installer/llceflib-1.5.3.311349-darwin-311349.tar.bz2 name darwin @@ -1550,11 +1550,11 @@ archive hash - 578f21be02efc98bbf426529f916fce8 + 827b7c339a2cd401d9d23f9ee02cb83f hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310043/arch/CYGWIN/installer/llceflib-1.5.1.310043-windows-310043.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/311349/arch/CYGWIN/installer/llceflib-1.5.3.311349-windows-311349.tar.bz2 name windows diff --git a/indra/media_plugins/cef/CMakeLists.txt b/indra/media_plugins/cef/CMakeLists.txt index 1f6163e41e..388030c979 100644 --- a/indra/media_plugins/cef/CMakeLists.txt +++ b/indra/media_plugins/cef/CMakeLists.txt @@ -114,4 +114,12 @@ if (DARWIN) LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp" ) + add_custom_command(TARGET media_plugin_cef + POST_BUILD COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "@executable_path/Chromium Embedded Framework" + "@executable_path/../../../../Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework" + "$" + VERBATIM + COMMENT "Fixing path to CEF Framework" + ) + endif (DARWIN) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index f7992dba90..ab87f0da35 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -28,6 +28,7 @@ $/LicenseInfo$ """ import sys import os.path +import shutil import errno import re import tarfile @@ -855,14 +856,17 @@ class Darwin_i386_Manifest(ViewerManifest): # This code constructs a relative path from the # target framework folder back to the location of the symlink. # It needs to be relative so that the symlink still works when - # (as is normal) the user moves the app bunlde out of the DMG + # (as is normal) the user moves the app bundle out of the DMG # and into the /Applications folder. Note we also call 'raise' # to terminate the process if we get an error since without # this symlink, Second Life web media can't possibly work. # Real Framework folder: # Second Life.app/Contents/Frameworks/Chromium Embedded Framework.framework/ - # Location of symlink and why it'ds relavie + # Location of symlink and why it'ds relative # Second Life.app/Contents/Resources/SLPlugin.app/Contents/Frameworks/Chromium Embedded Framework.framework/ + # Real Frameworks folder, with the symlink inside the bundled SLPlugin.app (and why it's relative) + # .app/Contents/Frameworks/Chromium Embedded Framework.framework/ + # .app/Contents/Resources/SLPlugin.app/Contents/Frameworks/Chromium Embedded Framework.framework -> frameworkpath = os.path.join(os.pardir, os.pardir, os.pardir, os.pardir, "Frameworks", "Chromium Embedded Framework.framework") try: symlinkf(frameworkpath, pluginframeworkpath) @@ -872,10 +876,6 @@ class Darwin_i386_Manifest(ViewerManifest): self.end_prefix("Contents") - # fix up media_plugin.dylib so it knows where to look for CEF files it needs - self.run_command('install_name_tool -change "@executable_path/Chromium Embedded Framework" "@executable_path/../Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework" "%(config)s/Second Life.app/Contents/Resources/llplugin/media_plugin_cef.dylib"' % - { 'config' : self.args['configuration'] }) - # NOTE: the -S argument to strip causes it to keep enough info for # annotated backtraces (i.e. function names in the crash log). 'strip' with no # arguments yields a slightly smaller binary but makes crash logs mostly useless. @@ -1247,12 +1247,33 @@ def symlinkf(src, dst): # file, but that strategy doesn't work so well if we don't have # permissions to remove it. Check to see if it's already the # symlink we want, which is the usual reason for EEXIST. - if not (os.path.islink(dst) and os.readlink(dst) == src): - # Here either dst isn't a symlink or it's the wrong symlink. - # Remove and recreate. Caller will just have to deal with any - # exceptions at this stage. + elif os.path.islink(dst): + if os.readlink(dst) == src: + # the requested link already exists + pass + else: + # dst is the wrong symlink; attempt to remove and recreate it + os.remove(dst) + os.symlink(src, dst) + elif os.path.isdir(dst): + print "Requested symlink (%s) exists but is a directory; replacing" % dst + shutil.rmtree(dst) + os.symlink(src, dst) + elif os.path.exists(dst): + print "Requested symlink (%s) exists but is a file; replacing" % dst os.remove(dst) os.symlink(src, dst) + else: + # see if the problem is that the parent directory does not exist + # and try to explain what is missing + (parent, tail) = os.path.split(dst) + while not os.path.exists(parent): + (parent, tail) = os.path.split(parent) + if tail: + raise Exception("Requested symlink (%s) cannot be created because %s does not exist" + % os.path.join(parent, tail)) + else: + raise if __name__ == "__main__": main() -- cgit v1.3