From d18b3d2aff6f9f6c7c2ac1a26f5ac8e94fc8d9a8 Mon Sep 17 00:00:00 2001 From: Lynx Linden Date: Thu, 26 Aug 2010 09:27:22 +0100 Subject: EXT-7901 FIXED: Follow up fix to remove short-term hack. As advertized, I have removed the short-term hack that I put in place to make release note URLs work. I have now put in place a more general and correct solution. The key observeration from Roxie is that SLE SLurls should have the same hostname as the grid host. So now, URLs like http://google.com/app are no longer categorized as a SLurl and produce errors when you click on them. --- indra/newview/llslurl.cpp | 21 +++++++++++---------- indra/newview/tests/llslurl_test.cpp | 3 +++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp index 0308f5e632..4cf1df1655 100644 --- a/indra/newview/llslurl.cpp +++ b/indra/newview/llslurl.cpp @@ -44,7 +44,6 @@ const char* LLSLURL::SLURL_COM = "slurl.com"; // version is required also. const char* LLSLURL::WWW_SLURL_COM = "www.slurl.com"; -const char* LLSLURL::SECONDLIFE_COM = "secondlife.com"; const char* LLSLURL::MAPS_SECONDLIFE_COM = "maps.secondlife.com"; const char* LLSLURL::SLURL_X_GRID_LOCATION_INFO_SCHEME = "x-grid-location-info"; const char* LLSLURL::SLURL_APP_PATH = "app"; @@ -183,15 +182,6 @@ LLSLURL::LLSLURL(const std::string& slurl) (slurl_uri.scheme() == LLSLURL::SLURL_HTTPS_SCHEME) || (slurl_uri.scheme() == LLSLURL::SLURL_X_GRID_LOCATION_INFO_SCHEME)) { - // *HACK: ignore http://secondlife.com/ URLs so that we can use - // http://secondlife.com/app/ redirect URLs - // This is only necessary while the server returns Release Note - // urls using this format rather that pointing to the wiki - if ((slurl_uri.scheme() == LLSLURL::SLURL_HTTP_SCHEME || - slurl_uri.scheme() == LLSLURL::SLURL_HTTPS_SCHEME) && - slurl_uri.hostName() == LLSLURL::SECONDLIFE_COM) - return; - // We're dealing with either a Standalone style slurl or slurl.com slurl if ((slurl_uri.hostName() == LLSLURL::SLURL_COM) || (slurl_uri.hostName() == LLSLURL::WWW_SLURL_COM) || @@ -202,6 +192,17 @@ LLSLURL::LLSLURL(const std::string& slurl) } else { + // Don't try to match any old http:/// URL as a SLurl. + // SLE SLurls will have the grid hostname in the URL, so only + // match http URLs if the hostname matches the grid hostname + // (or its a slurl.com or maps.secondlife.com URL). + if ((slurl_uri.scheme() == LLSLURL::SLURL_HTTP_SCHEME || + slurl_uri.scheme() == LLSLURL::SLURL_HTTPS_SCHEME) && + slurl_uri.hostName() != LLGridManager::getInstance()->getGrid()) + { + return; + } + // As it's a Standalone grid/open, we will always have a hostname, as Standalone/open style // urls are properly formed, unlike the stinky maingrid style mGrid = slurl_uri.hostName(); diff --git a/indra/newview/tests/llslurl_test.cpp b/indra/newview/tests/llslurl_test.cpp index 753151bdd8..91f316666c 100644 --- a/indra/newview/tests/llslurl_test.cpp +++ b/indra/newview/tests/llslurl_test.cpp @@ -145,6 +145,7 @@ namespace tut ensure_equals(" slurl, region + coords", slurl.getSLURLString(), "http://maps.secondlife.com/secondlife/my%20region/1/2/3"); + LLGridManager::getInstance()->setGridChoice("my.grid.com"); slurl = LLSLURL("https://my.grid.com/region/my%20region/1/2/3"); ensure_equals("grid slurl, region + coords - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals("grid slurl, region + coords", slurl.getSLURLString(), @@ -201,6 +202,7 @@ namespace tut ensure_equals("region" , "myregion", slurl.getRegion()); ensure_equals("grid4", "util.aditi.lindenlab.com", slurl.getGrid()); + LLGridManager::getInstance()->setGridChoice("my.grid.com"); slurl = LLSLURL("https://my.grid.com/app/foo/bar?12345"); ensure_equals("app", slurl.getType(), LLSLURL::APP); ensure_equals("appcmd", slurl.getAppCmd(), "foo"); @@ -241,6 +243,7 @@ namespace tut template<> template<> void slurlTestObject::test<3>() { + LLGridManager::getInstance()->setGridChoice("my.grid.com"); LLSLURL slurl = LLSLURL("https://my.grid.com/region/my%20region/1/2/3"); ensure_equals("login string", slurl.getLoginString(), "uri:my region&1&2&3"); ensure_equals("location string", slurl.getLocationString(), "my region/1/2/3"); -- cgit v1.2.3