summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2023-04-18 23:33:19 +0300
committerakleshchev <117672381+akleshchev@users.noreply.github.com>2023-04-19 20:06:37 +0300
commitdaca555592f8029df6a3d66d80a6a29fd268143f (patch)
treed0b342cab00c1be377c3d55d65c44ada45dbe97e
parent1742976f4efeed1a7f07cb503ffab782dbf5d97c (diff)
SL-19609 Urls aren't dispatched according to the indicated grid
-rw-r--r--indra/newview/llagentlistener.cpp3
-rw-r--r--indra/newview/llappearancemgr.cpp11
-rw-r--r--indra/newview/llbuycurrencyhtml.cpp2
-rw-r--r--indra/newview/llchathistory.cpp2
-rw-r--r--indra/newview/llchatitemscontainerctrl.cpp2
-rw-r--r--indra/newview/llcommanddispatcherlistener.cpp2
-rw-r--r--indra/newview/llcommandhandler.cpp7
-rw-r--r--indra/newview/llcommandhandler.h4
-rw-r--r--indra/newview/lleventnotifier.cpp6
-rw-r--r--indra/newview/llfloaterexperienceprofile.cpp6
-rw-r--r--indra/newview/llfloaterhandler.cpp2
-rw-r--r--indra/newview/llfloaterhandler.h2
-rw-r--r--indra/newview/llfloaterimnearbychat.cpp6
-rw-r--r--indra/newview/llfloatersearch.cpp2
-rwxr-xr-xindra/newview/llfloaterworldmap.cpp11
-rw-r--r--indra/newview/llgroupactions.cpp6
-rw-r--r--indra/newview/llloginhandler.cpp1
-rw-r--r--indra/newview/llloginhandler.h2
-rw-r--r--indra/newview/llpaneleditwearable.cpp2
-rw-r--r--indra/newview/llpanellogin.cpp2
-rw-r--r--indra/newview/llpanelplaces.cpp6
-rw-r--r--indra/newview/llpanelprofile.cpp12
-rw-r--r--indra/newview/llpanelprofileclassifieds.cpp2
-rw-r--r--indra/newview/llpanelprofilepicks.cpp6
-rw-r--r--indra/newview/llshareavatarhandler.cpp2
-rw-r--r--indra/newview/llstatusbar.cpp2
-rw-r--r--indra/newview/llurldispatcher.cpp69
-rw-r--r--indra/newview/llviewerfloaterreg.cpp1
-rw-r--r--indra/newview/llviewerhelp.cpp2
-rw-r--r--indra/newview/llviewerinventory.cpp6
-rwxr-xr-xindra/newview/llviewerregion.cpp8
-rw-r--r--indra/newview/llvoicecallhandler.cpp2
-rw-r--r--indra/newview/llvoiceclient.cpp2
-rwxr-xr-xindra/newview/llworldmapview.cpp3
34 files changed, 131 insertions, 73 deletions
diff --git a/indra/newview/llagentlistener.cpp b/indra/newview/llagentlistener.cpp
index 7887184a11..5a720af038 100644
--- a/indra/newview/llagentlistener.cpp
+++ b/indra/newview/llagentlistener.cpp
@@ -35,6 +35,7 @@
#include "llcommandhandler.h"
#include "llslurl.h"
#include "llurldispatcher.h"
+#include "llviewernetwork.h"
#include "llviewerobject.h"
#include "llviewerobjectlist.h"
#include "llviewerregion.h"
@@ -148,7 +149,7 @@ void LLAgentListener::requestTeleport(LLSD const & event_data) const
params.append(event_data["x"]);
params.append(event_data["y"]);
params.append(event_data["z"]);
- LLCommandDispatcher::dispatch("teleport", params, LLSD(), NULL, "clicked", true);
+ LLCommandDispatcher::dispatch("teleport", params, LLSD(), LLGridManager::getInstance()->getGrid(), NULL, "clicked", true);
// *TODO - lookup other LLCommandHandlers for "agent", "classified", "event", "group", "floater", "parcel", "login", login_refresh", "balance", "chat"
// should we just compose LLCommandHandler and LLDispatchListener?
}
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 07d6efd2fa..d0fad07f1c 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -147,7 +147,10 @@ public:
// requests will be throttled from a non-trusted browser
LLAppearanceHandler() : LLCommandHandler("appearance", UNTRUSTED_THROTTLE) {}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
// support secondlife:///app/appearance/show, but for now we just
// make all secondlife:///app/appearance SLapps behave this way
@@ -4472,8 +4475,10 @@ public:
// not allowed from outside the app
LLWearFolderHandler() : LLCommandHandler("wear_folder", UNTRUSTED_BLOCK) { }
- bool handle(const LLSD& tokens, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& tokens,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
LLSD::UUID folder_uuid;
diff --git a/indra/newview/llbuycurrencyhtml.cpp b/indra/newview/llbuycurrencyhtml.cpp
index 7ad06f8eaa..37de89a48b 100644
--- a/indra/newview/llbuycurrencyhtml.cpp
+++ b/indra/newview/llbuycurrencyhtml.cpp
@@ -43,7 +43,7 @@ public:
// requests will be throttled from a non-trusted browser
LLBuyCurrencyHTMLHandler() : LLCommandHandler( "buycurrencyhtml", UNTRUSTED_THROTTLE) {}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
std::string action( "" );
if ( params.size() >= 1 )
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 9a608fba8e..43dc10ef5f 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -82,7 +82,7 @@ public:
// requests will be throttled from a non-trusted browser
LLObjectIMHandler() : LLCommandHandler("objectim", UNTRUSTED_THROTTLE) {}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (params.size() < 1)
{
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index 1c22e055bb..dc2cc57f0f 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -57,7 +57,7 @@ class LLObjectHandler : public LLCommandHandler
public:
LLObjectHandler() : LLCommandHandler("object", UNTRUSTED_BLOCK) { }
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (params.size() < 2) return false;
diff --git a/indra/newview/llcommanddispatcherlistener.cpp b/indra/newview/llcommanddispatcherlistener.cpp
index 586f45fd8f..1b85c09071 100644
--- a/indra/newview/llcommanddispatcherlistener.cpp
+++ b/indra/newview/llcommanddispatcherlistener.cpp
@@ -64,7 +64,7 @@ void LLCommandDispatcherListener::dispatch(const LLSD& params) const
// But for testing, allow a caller to specify untrusted.
trusted_browser = params["trusted"].asBoolean();
}
- LLCommandDispatcher::dispatch(params["cmd"], params["params"], params["query"], NULL,
+ LLCommandDispatcher::dispatch(params["cmd"], params["params"], params["query"], "", NULL,
"clicked", trusted_browser);
}
diff --git a/indra/newview/llcommandhandler.cpp b/indra/newview/llcommandhandler.cpp
index 74f37961c7..e774a9390a 100644
--- a/indra/newview/llcommandhandler.cpp
+++ b/indra/newview/llcommandhandler.cpp
@@ -60,6 +60,7 @@ public:
bool dispatch(const std::string& cmd,
const LLSD& params,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web,
const std::string& nav_type,
bool trusted_browser);
@@ -96,6 +97,7 @@ void LLCommandHandlerRegistry::add(const char* cmd,
bool LLCommandHandlerRegistry::dispatch(const std::string& cmd,
const LLSD& params,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web,
const std::string& nav_type,
bool trusted_browser)
@@ -163,7 +165,7 @@ bool LLCommandHandlerRegistry::dispatch(const std::string& cmd,
}
}
if (!info.mHandler) return false;
- return info.mHandler->handle(params, query_map, web);
+ return info.mHandler->handle(params, query_map, grid, web);
}
void LLCommandHandlerRegistry::notifySlurlBlocked()
@@ -218,12 +220,13 @@ LLCommandHandler::~LLCommandHandler()
bool LLCommandDispatcher::dispatch(const std::string& cmd,
const LLSD& params,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web,
const std::string& nav_type,
bool trusted_browser)
{
return LLCommandHandlerRegistry::instance().dispatch(
- cmd, params, query_map, web, nav_type, trusted_browser);
+ cmd, params, query_map, grid, web, nav_type, trusted_browser);
}
static std::string lookup(LLCommandHandler::EUntrustedAccess value);
diff --git a/indra/newview/llcommandhandler.h b/indra/newview/llcommandhandler.h
index 763e3ee51f..c7a7a18c7d 100644
--- a/indra/newview/llcommandhandler.h
+++ b/indra/newview/llcommandhandler.h
@@ -42,7 +42,7 @@ public:
LLFooHandler() : LLCommandHandler("foo", UNTRUSTED_BLOCK) { }
// Your code here
- bool handle(const LLSD& tokens, const LLSD& query_map,
+ bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid,
LLMediaCtrl* web)
{
if (tokens.size() < 1) return false;
@@ -88,6 +88,7 @@ public:
virtual bool handle(const LLSD& params,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web) = 0;
// For URL secondlife:///app/foo/bar/baz?cat=1&dog=2
// @params - array of "bar", "baz", possibly empty
@@ -104,6 +105,7 @@ public:
static bool dispatch(const std::string& cmd,
const LLSD& params,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web,
const std::string& nav_type,
bool trusted_browser);
diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp
index f1a44a68c9..788b61b381 100644
--- a/indra/newview/lleventnotifier.cpp
+++ b/indra/newview/lleventnotifier.cpp
@@ -43,8 +43,10 @@ class LLEventHandler : public LLCommandHandler
public:
// requires trusted browser to trigger
LLEventHandler() : LLCommandHandler("event", UNTRUSTED_THROTTLE) { }
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (params.size() < 2)
{
diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp
index a99a096ea7..f6afdd29fb 100644
--- a/indra/newview/llfloaterexperienceprofile.cpp
+++ b/indra/newview/llfloaterexperienceprofile.cpp
@@ -92,8 +92,10 @@ class LLExperienceHandler : public LLCommandHandler
public:
LLExperienceHandler() : LLCommandHandler("experience", UNTRUSTED_THROTTLE) { }
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if(params.size() != 2 || params[1].asString() != "profile")
return false;
diff --git a/indra/newview/llfloaterhandler.cpp b/indra/newview/llfloaterhandler.cpp
index 8ebb14149c..b66049de7f 100644
--- a/indra/newview/llfloaterhandler.cpp
+++ b/indra/newview/llfloaterhandler.cpp
@@ -49,7 +49,7 @@ LLFloater* get_parent_floater(LLView* view)
}
-bool LLFloaterHandler::handle(const LLSD &params, const LLSD &query_map, LLMediaCtrl *web)
+bool LLFloaterHandler::handle(const LLSD &params, const LLSD &query_map, const std::string& grid, LLMediaCtrl *web)
{
if (params.size() < 1) return false;
LLFloater* floater = NULL;
diff --git a/indra/newview/llfloaterhandler.h b/indra/newview/llfloaterhandler.h
index 5915642d66..959c972275 100644
--- a/indra/newview/llfloaterhandler.h
+++ b/indra/newview/llfloaterhandler.h
@@ -33,7 +33,7 @@ class LLFloaterHandler
{
public:
LLFloaterHandler() : LLCommandHandler("floater", UNTRUSTED_BLOCK) { }
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web);
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web);
};
#endif
diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp
index f1807f1c5b..f63268660c 100644
--- a/indra/newview/llfloaterimnearbychat.cpp
+++ b/indra/newview/llfloaterimnearbychat.cpp
@@ -901,8 +901,10 @@ public:
LLChatCommandHandler() : LLCommandHandler("chat", UNTRUSTED_BLOCK) { }
// Your code here
- bool handle(const LLSD& tokens, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& tokens,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
bool retval = false;
// Need at least 2 tokens to have a valid message.
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index 7e6af45515..37ae80fa8f 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -46,7 +46,7 @@ class LLSearchHandler : public LLCommandHandler
public:
// requires trusted browser to trigger
LLSearchHandler() : LLCommandHandler("search", UNTRUSTED_CLICK_ONLY) { }
- bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableSearch"))
{
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 704abd269f..8f3ec8af05 100755
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -124,8 +124,10 @@ public:
// requires trusted browser to trigger
LLWorldMapHandler() : LLCommandHandler("worldmap", UNTRUSTED_CLICK_ONLY ) { }
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableWorldMap"))
{
@@ -163,7 +165,10 @@ public:
{
}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableWorldMap"))
{
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index be52e280e1..85b8ff0570 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -78,8 +78,10 @@ public:
return true;
}
- bool handle(const LLSD& tokens, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& tokens,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (LLStartUp::getStartupState() < STATE_STARTED)
{
diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp
index 22cedf450e..92e341ce93 100644
--- a/indra/newview/llloginhandler.cpp
+++ b/indra/newview/llloginhandler.cpp
@@ -87,6 +87,7 @@ void LLLoginHandler::parse(const LLSD& queryMap)
bool LLLoginHandler::handle(const LLSD& tokens,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web)
{
// do nothing if we are already logged in
diff --git a/indra/newview/llloginhandler.h b/indra/newview/llloginhandler.h
index 1f2eacd094..2579341dbf 100644
--- a/indra/newview/llloginhandler.h
+++ b/indra/newview/llloginhandler.h
@@ -35,7 +35,7 @@ class LLLoginHandler : public LLCommandHandler
public:
// allow from external browsers
LLLoginHandler() : LLCommandHandler("login", UNTRUSTED_ALLOW) { }
- /*virtual*/ bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web);
+ /*virtual*/ bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web);
// Fill in our internal fields from a SLURL like
// secondlife:///app/login?first=Bob&last=Dobbs
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index 0103bf628a..1b4684d073 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -1665,7 +1665,7 @@ class LLMetricSystemHandler : public LLCommandHandler
public:
LLMetricSystemHandler() : LLCommandHandler("metricsystem", UNTRUSTED_CLICK_ONLY) { }
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
// change height units TRUE for meters and FALSE for feet
BOOL new_value = (gSavedSettings.getBOOL("HeightUnits") == FALSE) ? TRUE : FALSE;
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index b14fdbf38e..8f1e57e44c 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -97,7 +97,7 @@ class LLLoginLocationAutoHandler : public LLCommandHandler
public:
// don't allow from external browsers
LLLoginLocationAutoHandler() : LLCommandHandler("location_login", UNTRUSTED_BLOCK) { }
- bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP)
{
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 0f00231643..1d5ed93c4d 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -91,8 +91,10 @@ class LLParcelHandler : public LLCommandHandler
public:
// requires trusted browser to trigger
LLParcelHandler() : LLCommandHandler("parcel", UNTRUSTED_THROTTLE) { }
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (params.size() < 2)
{
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 708ff26ced..79b7ed8216 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -460,8 +460,10 @@ public:
// requires trusted browser to trigger
LLProfileHandler() : LLCommandHandler("profile", UNTRUSTED_THROTTLE) { }
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (params.size() < 1) return false;
std::string agent_name = params[0];
@@ -508,8 +510,10 @@ public:
return false;
}
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (params.size() < 2) return false;
LLUUID avatar_id;
diff --git a/indra/newview/llpanelprofileclassifieds.cpp b/indra/newview/llpanelprofileclassifieds.cpp
index 1ff12b4f37..dec6cfd83b 100644
--- a/indra/newview/llpanelprofileclassifieds.cpp
+++ b/indra/newview/llpanelprofileclassifieds.cpp
@@ -106,7 +106,7 @@ public:
return true;
}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (LLStartUp::getStartupState() < STATE_STARTED)
{
diff --git a/indra/newview/llpanelprofilepicks.cpp b/indra/newview/llpanelprofilepicks.cpp
index 45d0252e4f..274d42f7eb 100644
--- a/indra/newview/llpanelprofilepicks.cpp
+++ b/indra/newview/llpanelprofilepicks.cpp
@@ -87,8 +87,10 @@ public:
return true;
}
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (LLStartUp::getStartupState() < STATE_STARTED)
{
diff --git a/indra/newview/llshareavatarhandler.cpp b/indra/newview/llshareavatarhandler.cpp
index 142e00c3f7..8c5ebb75ef 100644
--- a/indra/newview/llshareavatarhandler.cpp
+++ b/indra/newview/llshareavatarhandler.cpp
@@ -38,7 +38,7 @@ public:
{
}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableAvatarShare"))
{
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 0a87b14e17..1ef5d1c50b 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -729,7 +729,7 @@ class LLBalanceHandler : public LLCommandHandler
public:
// Requires "trusted" browser/URL source
LLBalanceHandler() : LLCommandHandler("balance", UNTRUSTED_BLOCK) { }
- bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (tokens.size() == 1
&& tokens[0].asString() == "request")
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
index 7c92e7ef98..6fc870f890 100644
--- a/indra/newview/llurldispatcher.cpp
+++ b/indra/newview/llurldispatcher.cpp
@@ -97,6 +97,8 @@ private:
// Called by LLWorldMap when a region name has been resolved to a
// location in-world, used by places-panel display.
+ static bool handleGrid(const LLSLURL& slurl);
+
friend class LLTeleportHandler;
};
@@ -155,7 +157,7 @@ bool LLURLDispatcherImpl::dispatchApp(const LLSLURL& slurl,
LL_INFOS() << "cmd: " << slurl.getAppCmd() << " path: " << slurl.getAppPath() << " query: " << slurl.getAppQuery() << LL_ENDL;
const LLSD& query_map = LLURI::queryMap(slurl.getAppQuery());
bool handled = LLCommandDispatcher::dispatch(
- slurl.getAppCmd(), slurl.getAppPath(), query_map, web, nav_type, trusted_browser);
+ slurl.getAppCmd(), slurl.getAppPath(), query_map, slurl.getGrid(), web, nav_type, trusted_browser);
// alert if we didn't handle this secondlife:///app/ SLURL
// (but still return true because it is a valid app SLURL)
@@ -184,6 +186,11 @@ bool LLURLDispatcherImpl::dispatchRegion(const LLSLURL& slurl, const std::string
return true;
}
+ if (!handleGrid(slurl))
+ {
+ return true;
+ }
+
// Request a region handle by name
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(slurl.getRegion(),
LLURLDispatcherImpl::regionNameCallback,
@@ -202,31 +209,39 @@ void LLURLDispatcherImpl::regionNameCallback(U64 region_handle, const LLSLURL& s
}
}
+bool LLURLDispatcherImpl::handleGrid(const LLSLURL& slurl)
+{
+ if (LLGridManager::getInstance()->getGrid(slurl.getGrid())
+ != LLGridManager::getInstance()->getGrid())
+ {
+ LLSD args;
+ args["SLURL"] = slurl.getLocationString();
+ args["CURRENT_GRID"] = LLGridManager::getInstance()->getGridLabel();
+ std::string grid_label =
+ LLGridManager::getInstance()->getGridLabel(slurl.getGrid());
+
+ if (!grid_label.empty())
+ {
+ args["GRID"] = grid_label;
+ }
+ else
+ {
+ args["GRID"] = slurl.getGrid();
+ }
+ LLNotificationsUtil::add("CantTeleportToGrid", args);
+ return false;
+ }
+ return true;
+}
+
/* static */
void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const LLSLURL& slurl, const LLUUID& snapshot_id, bool teleport)
{
-
- // we can't teleport cross grid at this point
- if( LLGridManager::getInstance()->getGrid(slurl.getGrid())
- != LLGridManager::getInstance()->getGrid())
- {
- LLSD args;
- args["SLURL"] = slurl.getLocationString();
- args["CURRENT_GRID"] = LLGridManager::getInstance()->getGridLabel();
- std::string grid_label =
- LLGridManager::getInstance()->getGridLabel(slurl.getGrid());
-
- if(!grid_label.empty())
- {
- args["GRID"] = grid_label;
- }
- else
- {
- args["GRID"] = slurl.getGrid();
- }
- LLNotificationsUtil::add("CantTeleportToGrid", args);
- return;
- }
+ if (!handleGrid(slurl))
+ {
+ // we can't teleport cross grid at this point
+ return;
+ }
LLVector3d global_pos = from_region_handle(region_handle);
global_pos += LLVector3d(slurl.getPosition());
@@ -274,8 +289,10 @@ public:
&LLTeleportHandler::from_event);
}
- bool handle(const LLSD& tokens, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& tokens,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
// construct a "normal" SLURL, resolve the region to
// a global position, and teleport to it
@@ -297,7 +314,7 @@ public:
LLSD payload;
payload["region_name"] = region_name;
- payload["callback_url"] = LLSLURL(region_name, coords).getSLURLString();
+ payload["callback_url"] = LLSLURL(grid, region_name, coords).getSLURLString();
LLNotificationsUtil::add("TeleportViaSLAPP", args, payload);
return true;
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index c0398372b4..23b7999399 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -270,6 +270,7 @@ public:
bool handle(
const LLSD& params,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web) override
{
if (params.size() != 1)
diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp
index 04c2e27c9d..b03942db9f 100644
--- a/indra/newview/llviewerhelp.cpp
+++ b/indra/newview/llviewerhelp.cpp
@@ -45,7 +45,7 @@ public:
// requests will be throttled from a non-trusted browser
LLHelpHandler() : LLCommandHandler("help", UNTRUSTED_THROTTLE) {}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
LLViewerHelp* vhelp = LLViewerHelp::getInstance();
if (! vhelp)
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 50252556de..793eb56734 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -234,8 +234,10 @@ public:
// requires trusted browser to trigger
LLInventoryHandler() : LLCommandHandler("inventory", UNTRUSTED_CLICK_ONLY) { }
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (params.size() < 1)
{
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index ad7321ca4b..e122baadce 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -131,8 +131,8 @@ class LLRegionHandler : public LLCommandHandler
public:
// requests will be throttled from a non-trusted browser
LLRegionHandler() : LLCommandHandler("region", UNTRUSTED_THROTTLE) {}
-
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
// make sure that we at least have a region name
int num_params = params.size();
@@ -143,6 +143,10 @@ public:
// build a secondlife://{PLACE} SLurl from this SLapp
std::string url = "secondlife://";
+ if (!grid.empty())
+ {
+ url += grid + "/secondlife/";
+ }
boost::regex name_rx("[A-Za-z0-9()_%]+");
boost::regex coord_rx("[0-9]+");
for (int i = 0; i < num_params; i++)
diff --git a/indra/newview/llvoicecallhandler.cpp b/indra/newview/llvoicecallhandler.cpp
index 1e993d1384..95e11abd82 100644
--- a/indra/newview/llvoicecallhandler.cpp
+++ b/indra/newview/llvoicecallhandler.cpp
@@ -38,7 +38,7 @@ public:
{
}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableVoiceCall"))
{
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 6bb987ede4..bf96f0bbb4 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -53,7 +53,7 @@ public:
// requests will be throttled from a non-trusted browser
LLVoiceHandler() : LLCommandHandler("voice", UNTRUSTED_THROTTLE) {}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (params[0].asString() == "effects")
{
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 6e994b4e68..b59bbaaa88 100755
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -50,6 +50,7 @@
#include "lltextureview.h"
#include "lltracker.h"
#include "llviewercamera.h"
+#include "llviewernetwork.h"
#include "llviewertexture.h"
#include "llviewertexturelist.h"
#include "llviewerregion.h"
@@ -1829,7 +1830,7 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
// Invoke the event details floater if someone is clicking on an event.
LLSD params(LLSD::emptyArray());
params.append(event_id);
- LLCommandDispatcher::dispatch("event", params, LLSD(), NULL, "clicked", true);
+ LLCommandDispatcher::dispatch("event", params, LLSD(), LLGridManager::getInstance()->getGrid(), NULL, "clicked", true);
break;
}
case MAP_ITEM_LAND_FOR_SALE: