From bf7494017f5d90624243e5069dea9342c6b1869c Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Mon, 21 Dec 2009 15:49:52 +0000
Subject: [PATCH] EXT-3486: Support SLapps and URLs in the nav bar.

If the user enters a string into the navigation bar that is not
recognized as an SL location, the behavior is now:

- handle any secondlife:// SLapps, or
- open any http: or https: URLs in the media browser, or
- otherwise, send the text to the search floater
---
 indra/llui/llurlregistry.cpp      | 20 ++++++++++++++++++++
 indra/llui/llurlregistry.h        |  4 ++++
 indra/newview/llnavigationbar.cpp | 18 +++++++++++++++++-
 3 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
index afcff0d4090..ad5c0911f8c 100644
--- a/indra/llui/llurlregistry.cpp
+++ b/indra/llui/llurlregistry.cpp
@@ -223,3 +223,23 @@ bool LLUrlRegistry::hasUrl(const LLWString &text)
 	LLUrlMatch match;
 	return findUrl(text, match);
 }
+
+bool LLUrlRegistry::isUrl(const std::string &text)
+{
+	LLUrlMatch match;
+	if (findUrl(text, match))
+	{
+		return (match.getStart() == 0 && match.getEnd() >= text.size()-1);
+	}
+	return false;
+}
+
+bool LLUrlRegistry::isUrl(const LLWString &text)
+{
+	LLUrlMatch match;
+	if (findUrl(text, match))
+	{
+		return (match.getStart() == 0 && match.getEnd() >= text.size()-1);
+	}
+	return false;
+}
diff --git a/indra/llui/llurlregistry.h b/indra/llui/llurlregistry.h
index d7800d8cfc2..399ee0a9887 100644
--- a/indra/llui/llurlregistry.h
+++ b/indra/llui/llurlregistry.h
@@ -85,6 +85,10 @@ class LLUrlRegistry : public LLSingleton<LLUrlRegistry>
 	bool hasUrl(const std::string &text);
 	bool hasUrl(const LLWString &text);
 
+	// return true if the given string is a URL that findUrl would match
+	bool isUrl(const std::string &text);
+	bool isUrl(const LLWString &text);
+
 private:
 	LLUrlRegistry();
 	friend class LLSingleton<LLUrlRegistry>;
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 6210151d1b2..71dc0f90113 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -51,6 +51,8 @@
 #include "llsidetray.h"
 #include "llslurl.h"
 #include "llurlsimstring.h"
+#include "llurlregistry.h"
+#include "llurldispatcher.h"
 #include "llviewerinventory.h"
 #include "llviewermenu.h"
 #include "llviewerparcelmgr.h"
@@ -58,6 +60,7 @@
 #include "llappviewer.h"
 #include "llviewercontrol.h"
 #include "llfloatermediabrowser.h"
+#include "llweb.h"
 
 #include "llinventorymodel.h"
 #include "lllandmarkactions.h"
@@ -543,7 +546,20 @@ void LLNavigationBar::onRegionNameResponse(
 	// Invalid location?
 	if (!region_handle)
 	{
-		invokeSearch(typed_location);
+		// handle any secondlife:// SLapps, or
+		// display http:// URLs in the media browser, or
+		// anything else is sent to the search floater
+		if (LLUrlRegistry::instance().isUrl(typed_location))
+		{
+			if (! LLURLDispatcher::dispatchFromTextEditor(typed_location))
+			{
+				LLWeb::loadURL(typed_location);
+			}
+		}
+		else
+		{
+			invokeSearch(typed_location);
+		}
 		return;
 	}
 
-- 
GitLab