diff options
Diffstat (limited to 'indra/newview/llweb.cpp')
-rw-r--r-- | indra/newview/llweb.cpp | 286 |
1 files changed, 143 insertions, 143 deletions
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 9afe332025..6c5313a3ac 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -1,4 +1,4 @@ -/** +/** * @file llweb.cpp * @brief Functions dealing with web browsers * @author James Cook @@ -6,21 +6,21 @@ * $LicenseInfo:firstyear=2006&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -30,7 +30,7 @@ #include "llweb.h" // Library includes -#include "llwindow.h" // spawnWebBrowser() +#include "llwindow.h" // spawnWebBrowser() #include "llagent.h" #include "llappviewer.h" @@ -58,149 +58,149 @@ bool on_load_url_external_response(const LLSD& notification, const LLSD& respons // static void LLWeb::loadURL(const std::string& url, const std::string& target, const std::string& uuid) { - if(target == "_internal") - { - // Force load in the internal browser, as if with a blank target. - loadURLInternal(url, "", uuid); - } - - else if (useExternalBrowser(url) || (target == "_external")) - { - loadURLExternal(url); - } - else - { - loadURLInternal(url, target, uuid); - } + if(target == "_internal") + { + // Force load in the internal browser, as if with a blank target. + loadURLInternal(url, "", uuid); + } + + else if (useExternalBrowser(url) || (target == "_external")) + { + loadURLExternal(url); + } + else + { + loadURLInternal(url, target, uuid); + } } // static // Explicitly open a Web URL using the Web content floater void LLWeb::loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid, bool dev_mode) { - LLFloaterWebContent::Params p; - p.url(url).target(target).id(uuid).dev_mode(dev_mode); - LLFloaterReg::showInstance("web_content", p); + LLFloaterWebContent::Params p; + p.url(url).target(target).id(uuid).dev_mode(dev_mode); + LLFloaterReg::showInstance("web_content", p); } // static void LLWeb::loadURLExternal(const std::string& url, const std::string& uuid) { - loadURLExternal(url, true, uuid); + loadURLExternal(url, true, uuid); } // static void LLWeb::loadURLExternal(const std::string& url, bool async, const std::string& uuid) { - // Act like the proxy window was closed, since we won't be able to track targeted windows in the external browser. - LLViewerMedia::getInstance()->proxyWindowClosed(uuid); - - if(gSavedSettings.getBOOL("DisableExternalBrowser")) - { - // Don't open an external browser under any circumstances. - LL_WARNS() << "Blocked attempt to open external browser." << LL_ENDL; - return; - } - - LLSD payload; - payload["url"] = url; - LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, boost::bind(on_load_url_external_response, _1, _2, async)); + // Act like the proxy window was closed, since we won't be able to track targeted windows in the external browser. + LLViewerMedia::getInstance()->proxyWindowClosed(uuid); + + if(gSavedSettings.getBOOL("DisableExternalBrowser")) + { + // Don't open an external browser under any circumstances. + LL_WARNS() << "Blocked attempt to open external browser." << LL_ENDL; + return; + } + + LLSD payload; + payload["url"] = url; + LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, boost::bind(on_load_url_external_response, _1, _2, async)); } -// static +// static bool on_load_url_external_response(const LLSD& notification, const LLSD& response, bool async ) { - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - if ( 0 == option ) - { - LLSD payload = notification["payload"]; - std::string url = payload["url"].asString(); - std::string escaped_url = LLWeb::escapeURL(url); - if (gViewerWindow) - { - gViewerWindow->getWindow()->spawnWebBrowser(escaped_url, async); - } - } - return false; + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if ( 0 == option ) + { + LLSD payload = notification["payload"]; + std::string url = payload["url"].asString(); + std::string escaped_url = LLWeb::escapeURL(url); + if (gViewerWindow) + { + gViewerWindow->getWindow()->spawnWebBrowser(escaped_url, async); + } + } + return false; } // static std::string LLWeb::escapeURL(const std::string& url) { - // The CURL curl_escape() function escapes colons, slashes, - // and all characters but A-Z and 0-9. Do a cheesy mini-escape. - std::string escaped_url; - S32 len = url.length(); - for (S32 i = 0; i < len; i++) - { - char c = url[i]; - if (c == ' ') - { - escaped_url += "%20"; - } - else if (c == '\\') - { - escaped_url += "%5C"; - } - else - { - escaped_url += c; - } - } - return escaped_url; + // The CURL curl_escape() function escapes colons, slashes, + // and all characters but A-Z and 0-9. Do a cheesy mini-escape. + std::string escaped_url; + S32 len = url.length(); + for (S32 i = 0; i < len; i++) + { + char c = url[i]; + if (c == ' ') + { + escaped_url += "%20"; + } + else if (c == '\\') + { + escaped_url += "%5C"; + } + else + { + escaped_url += c; + } + } + return escaped_url; } //static std::string LLWeb::expandURLSubstitutions(const std::string &url, - const LLSD &default_subs) + const LLSD &default_subs) { - LLSD substitution = default_subs; - substitution["VERSION"] = LLVersionInfo::instance().getVersion(); - substitution["VERSION_MAJOR"] = LLVersionInfo::instance().getMajor(); - substitution["VERSION_MINOR"] = LLVersionInfo::instance().getMinor(); - substitution["VERSION_PATCH"] = LLVersionInfo::instance().getPatch(); - substitution["VERSION_BUILD"] = std::to_string(LLVersionInfo::instance().getBuild()); - substitution["CHANNEL"] = LLVersionInfo::instance().getChannel(); - substitution["GRID"] = LLGridManager::getInstance()->getGridId(); - substitution["GRID_LOWERCASE"] = utf8str_tolower(LLGridManager::getInstance()->getGridId()); - substitution["OS"] = LLOSInfo::instance().getOSStringSimple(); - substitution["SESSION_ID"] = gAgent.getSessionID(); - substitution["FIRST_LOGIN"] = gAgent.isFirstLogin(); - - // work out the current language - std::string lang = LLUI::getLanguage(); - if (lang == "en-us") - { - // *HACK: the correct fix is to change English.lproj/language.txt, - // but we're late in the release cycle and this is a less risky fix - lang = "en"; - } - substitution["LANGUAGE"] = lang; - - // find the region ID - LLUUID region_id; - LLViewerRegion *region = gAgent.getRegion(); - if (region) - { - region_id = region->getRegionID(); - } - substitution["REGION_ID"] = region_id; - - // find the parcel local ID - S32 parcel_id = 0; - LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); - if (parcel) - { - parcel_id = parcel->getLocalID(); - } - substitution["PARCEL_ID"] = llformat("%d", parcel_id); - - // find the grid - std::string current_grid = LLGridManager::getInstance()->getGridId(); - std::transform(current_grid.begin(), current_grid.end(), current_grid.begin(), ::tolower); + LLSD substitution = default_subs; + substitution["VERSION"] = LLVersionInfo::instance().getVersion(); + substitution["VERSION_MAJOR"] = LLVersionInfo::instance().getMajor(); + substitution["VERSION_MINOR"] = LLVersionInfo::instance().getMinor(); + substitution["VERSION_PATCH"] = LLVersionInfo::instance().getPatch(); + substitution["VERSION_BUILD"] = std::to_string(LLVersionInfo::instance().getBuild()); + substitution["CHANNEL"] = LLVersionInfo::instance().getChannel(); + substitution["GRID"] = LLGridManager::getInstance()->getGridId(); + substitution["GRID_LOWERCASE"] = utf8str_tolower(LLGridManager::getInstance()->getGridId()); + substitution["OS"] = LLOSInfo::instance().getOSStringSimple(); + substitution["SESSION_ID"] = gAgent.getSessionID(); + substitution["FIRST_LOGIN"] = gAgent.isFirstLogin(); + + // work out the current language + std::string lang = LLUI::getLanguage(); + if (lang == "en-us") + { + // *HACK: the correct fix is to change English.lproj/language.txt, + // but we're late in the release cycle and this is a less risky fix + lang = "en"; + } + substitution["LANGUAGE"] = lang; + + // find the region ID + LLUUID region_id; + LLViewerRegion *region = gAgent.getRegion(); + if (region) + { + region_id = region->getRegionID(); + } + substitution["REGION_ID"] = region_id; + + // find the parcel local ID + S32 parcel_id = 0; + LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); + if (parcel) + { + parcel_id = parcel->getLocalID(); + } + substitution["PARCEL_ID"] = llformat("%d", parcel_id); + + // find the grid + std::string current_grid = LLGridManager::getInstance()->getGridId(); + std::transform(current_grid.begin(), current_grid.end(), current_grid.begin(), ::tolower); if (current_grid == "damballah") - { + { // Staging grid has its own naming scheme. substitution["GRID"] = "secondlife-staging.com"; } @@ -209,39 +209,39 @@ std::string LLWeb::expandURLSubstitutions(const std::string &url, substitution["GRID"] = "secondlife.com"; } - // expand all of the substitution strings and escape the url - std::string expanded_url = url; - LLStringUtil::format(expanded_url, substitution); + // expand all of the substitution strings and escape the url + std::string expanded_url = url; + LLStringUtil::format(expanded_url, substitution); - return LLWeb::escapeURL(expanded_url); + return LLWeb::escapeURL(expanded_url); } //static bool LLWeb::useExternalBrowser(const std::string &url) { #ifdef EXTERNAL_TOS - return true; + return true; #else - if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_EXTERNAL_ONLY) - { - return true; - } - else if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_INT_LL_EXT_OTHERS) - { - LLUriParser up(url); - up.normalize(); - up.extractParts(); - std::string uri_string = up.host(); - - boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com|secondlife.io)$", boost::regex::perl|boost::regex::icase); - boost::match_results<std::string::const_iterator> matches; - return !(ll_regex_search(uri_string, matches, pattern)); - } - else - { - boost::regex pattern = boost::regex("^mailto:", boost::regex::perl | boost::regex::icase); - boost::match_results<std::string::const_iterator> matches; - return ll_regex_search(url, matches, pattern); - } + if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_EXTERNAL_ONLY) + { + return true; + } + else if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_INT_LL_EXT_OTHERS) + { + LLUriParser up(url); + up.normalize(); + up.extractParts(); + std::string uri_string = up.host(); + + boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com|secondlife.io)$", boost::regex::perl|boost::regex::icase); + boost::match_results<std::string::const_iterator> matches; + return !(ll_regex_search(uri_string, matches, pattern)); + } + else + { + boost::regex pattern = boost::regex("^mailto:", boost::regex::perl | boost::regex::icase); + boost::match_results<std::string::const_iterator> matches; + return ll_regex_search(url, matches, pattern); + } #endif } |