Move BrowserURLHandler to content, and keep the Chrome specific ones in Chrome.

BUG=76697
Review URL: http://codereview.chromium.org/7351020

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92427 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index ca40867..6dbe1f6 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -6,6 +6,7 @@
 
 #include "base/command_line.h"
 #include "chrome/app/breakpad_mac.h"
+#include "chrome/browser/browser_about_handler.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/browsing_data_remover.h"
 #include "chrome/browser/character_encoding.h"
@@ -17,6 +18,7 @@
 #include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_message_handler.h"
 #include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_web_ui.h"
 #include "chrome/browser/google/google_util.h"
 #include "chrome/browser/notifications/desktop_notification_service.h"
 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
@@ -45,6 +47,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/common/render_messages.h"
 #include "chrome/common/url_constants.h"
+#include "content/browser/browser_url_handler.h"
 #include "content/browser/browsing_instance.h"
 #include "content/browser/child_process_security_policy.h"
 #include "content/browser/debugger/devtools_handler.h"
@@ -135,6 +138,23 @@
   }
 }
 
+// Handles rewriting Web UI URLs.
+static bool HandleWebUI(GURL* url, Profile* profile) {
+  if (!ChromeWebUIFactory::GetInstance()->UseWebUIForURL(profile, *url))
+    return false;
+
+  // Special case the new tab page. In older versions of Chrome, the new tab
+  // page was hosted at chrome-internal:<blah>. This might be in people's saved
+  // sessions or bookmarks, so we say any URL with that scheme triggers the new
+  // tab page.
+  if (url->SchemeIs(chrome::kChromeInternalScheme)) {
+    // Rewrite it with the proper new tab URL.
+    *url = GURL(chrome::kChromeUINewTabURL);
+  }
+
+  return true;
+}
+
 }  // namespace
 
 namespace chrome {
@@ -653,6 +673,41 @@
       rvh->process()->profile());
 }
 
+void ChromeContentBrowserClient::BrowserURLHandlerCreated(
+    BrowserURLHandler* handler) {
+  // Add the default URL handlers.
+  handler->AddHandlerPair(&ExtensionWebUI::HandleChromeURLOverride,
+                          BrowserURLHandler::null_handler());
+  handler->AddHandlerPair(BrowserURLHandler::null_handler(),
+                          &ExtensionWebUI::HandleChromeURLOverrideReverse);
+
+  // about:
+  handler->AddHandlerPair(&WillHandleBrowserAboutURL,
+                          BrowserURLHandler::null_handler());
+  // chrome: & friends.
+  handler->AddHandlerPair(&HandleWebUI,
+                          BrowserURLHandler::null_handler());
+}
+
+void ChromeContentBrowserClient::ClearCache(RenderViewHost* rvh) {
+  Profile* profile = rvh->site_instance()->GetProcess()->profile();
+  BrowsingDataRemover* remover = new BrowsingDataRemover(profile,
+      BrowsingDataRemover::EVERYTHING,
+      base::Time());
+  remover->Remove(BrowsingDataRemover::REMOVE_CACHE);
+  // BrowsingDataRemover takes care of deleting itself when done.
+}
+
+void ChromeContentBrowserClient::ClearCookies(RenderViewHost* rvh) {
+  Profile* profile = rvh->site_instance()->GetProcess()->profile();
+  BrowsingDataRemover* remover = new BrowsingDataRemover(profile,
+      BrowsingDataRemover::EVERYTHING,
+      base::Time());
+  int remove_mask = BrowsingDataRemover::REMOVE_COOKIES;
+  remover->Remove(remove_mask);
+  // BrowsingDataRemover takes care of deleting itself when done.
+}
+
 #if defined(OS_LINUX)
 int ChromeContentBrowserClient::GetCrashSignalFD(
     const std::string& process_type) {
@@ -687,23 +742,4 @@
 }
 #endif
 
-void ChromeContentBrowserClient::ClearCache(RenderViewHost* rvh) {
-  Profile* profile = rvh->site_instance()->GetProcess()->profile();
-  BrowsingDataRemover* remover = new BrowsingDataRemover(profile,
-      BrowsingDataRemover::EVERYTHING,
-      base::Time());
-  remover->Remove(BrowsingDataRemover::REMOVE_CACHE);
-  // BrowsingDataRemover takes care of deleting itself when done.
-}
-
-void ChromeContentBrowserClient::ClearCookies(RenderViewHost* rvh) {
-  Profile* profile = rvh->site_instance()->GetProcess()->profile();
-  BrowsingDataRemover* remover = new BrowsingDataRemover(profile,
-      BrowsingDataRemover::EVERYTHING,
-      base::Time());
-  int remove_mask = BrowsingDataRemover::REMOVE_COOKIES;
-  remover->Remove(remove_mask);
-  // BrowsingDataRemover takes care of deleting itself when done.
-}
-
 }  // namespace chrome