Move external protocol handling from TC.

BUG=71097
TEST=no change

Review URL: http://codereview.chromium.org/7065038

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86613 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/autocomplete/autocomplete.cc b/chrome/browser/autocomplete/autocomplete.cc
index 5d241dc..1f0305c 100644
--- a/chrome/browser/autocomplete/autocomplete.cc
+++ b/chrome/browser/autocomplete/autocomplete.cc
@@ -23,7 +23,7 @@
 #include "chrome/browser/autocomplete/keyword_provider.h"
 #include "chrome/browser/autocomplete/search_provider.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
-#include "chrome/browser/external_protocol_handler.h"
+#include "chrome/browser/external_protocol/external_protocol_handler.h"
 #include "chrome/browser/net/url_fixer_upper.h"
 #include "chrome/browser/prefs/pref_service.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/chromeos/external_protocol_dialog.cc b/chrome/browser/chromeos/external_protocol_dialog.cc
index 446917a4..8ce2264 100644
--- a/chrome/browser/chromeos/external_protocol_dialog.cc
+++ b/chrome/browser/chromeos/external_protocol_dialog.cc
@@ -7,7 +7,7 @@
 #include "base/metrics/histogram.h"
 #include "base/string_util.h"
 #include "base/utf_string_conversions.h"
-#include "chrome/browser/external_protocol_handler.h"
+#include "chrome/browser/external_protocol/external_protocol_handler.h"
 #include "chrome/browser/tab_contents/tab_util.h"
 #include "chrome/browser/ui/views/window.h"
 #include "content/browser/tab_contents/tab_contents.h"
diff --git a/chrome/browser/extensions/extension_function_dispatcher.cc b/chrome/browser/extensions/extension_function_dispatcher.cc
index 62eabd0..2329ae7 100644
--- a/chrome/browser/extensions/extension_function_dispatcher.cc
+++ b/chrome/browser/extensions/extension_function_dispatcher.cc
@@ -43,7 +43,7 @@
 #include "chrome/browser/extensions/extension_webrequest_api.h"
 #include "chrome/browser/extensions/extension_webstore_private_api.h"
 #include "chrome/browser/extensions/extensions_quota_service.h"
-#include "chrome/browser/external_protocol_handler.h"
+#include "chrome/browser/external_protocol/external_protocol_handler.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/browser_window.h"
diff --git a/chrome/browser/external_protocol_handler.cc b/chrome/browser/external_protocol/external_protocol_handler.cc
similarity index 98%
rename from chrome/browser/external_protocol_handler.cc
rename to chrome/browser/external_protocol/external_protocol_handler.cc
index 24b5984..7388dd9 100644
--- a/chrome/browser/external_protocol_handler.cc
+++ b/chrome/browser/external_protocol/external_protocol_handler.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/external_protocol_handler.h"
+#include "chrome/browser/external_protocol/external_protocol_handler.h"
 
 #include <set>
 
diff --git a/chrome/browser/external_protocol_handler.h b/chrome/browser/external_protocol/external_protocol_handler.h
similarity index 91%
rename from chrome/browser/external_protocol_handler.h
rename to chrome/browser/external_protocol/external_protocol_handler.h
index f822cc8..72bcbcf 100644
--- a/chrome/browser/external_protocol_handler.h
+++ b/chrome/browser/external_protocol/external_protocol_handler.h
@@ -1,9 +1,9 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_EXTERNAL_PROTOCOL_HANDLER_H_
-#define CHROME_BROWSER_EXTERNAL_PROTOCOL_HANDLER_H_
+#ifndef CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_HANDLER_H_
+#define CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_HANDLER_H_
 #pragma once
 
 #include <string>
@@ -75,4 +75,4 @@
   static void PermitLaunchUrl();
 };
 
-#endif  // CHROME_BROWSER_EXTERNAL_PROTOCOL_HANDLER_H_
+#endif  // CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_HANDLER_H_
diff --git a/chrome/browser/external_protocol/external_protocol_observer.cc b/chrome/browser/external_protocol/external_protocol_observer.cc
new file mode 100644
index 0000000..c1be1ef
--- /dev/null
+++ b/chrome/browser/external_protocol/external_protocol_observer.cc
@@ -0,0 +1,19 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/external_protocol/external_protocol_observer.h"
+
+#include "chrome/browser/external_protocol/external_protocol_handler.h"
+#include "content/browser/tab_contents/tab_contents.h"
+
+ExternalProtocolObserver::ExternalProtocolObserver(TabContents* tab_contents)
+    : TabContentsObserver(tab_contents) {
+}
+
+ExternalProtocolObserver::~ExternalProtocolObserver() {
+}
+
+void ExternalProtocolObserver::DidGetUserGesture() {
+  ExternalProtocolHandler::PermitLaunchUrl();
+}
diff --git a/chrome/browser/external_protocol/external_protocol_observer.h b/chrome/browser/external_protocol/external_protocol_observer.h
new file mode 100644
index 0000000..dad04b4
--- /dev/null
+++ b/chrome/browser/external_protocol/external_protocol_observer.h
@@ -0,0 +1,26 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_OBSERVER_H_
+#define CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_OBSERVER_H_
+
+#include "content/browser/tab_contents/tab_contents_observer.h"
+
+class TabContents;
+
+// ExternalProtocolObserver is responsible for handling messages from
+// TabContents relating to external protocols.
+class ExternalProtocolObserver : public TabContentsObserver {
+ public:
+  explicit ExternalProtocolObserver(TabContents* tab_contents);
+  virtual ~ExternalProtocolObserver();
+
+  // TabContentsObserver overrides.
+  virtual void DidGetUserGesture() OVERRIDE;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ExternalProtocolObserver);
+};
+
+#endif  // CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_OBSERVER_H_
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 9dcf9a7..d320a1a 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -18,7 +18,7 @@
 #include "chrome/browser/extensions/extension_prefs.h"
 #include "chrome/browser/extensions/extension_web_ui.h"
 #include "chrome/browser/extensions/extensions_ui.h"
-#include "chrome/browser/external_protocol_handler.h"
+#include "chrome/browser/external_protocol/external_protocol_handler.h"
 #include "chrome/browser/geolocation/geolocation_content_settings_map.h"
 #include "chrome/browser/geolocation/geolocation_prefs.h"
 #include "chrome/browser/google/google_url_tracker.h"
diff --git a/chrome/browser/ui/cocoa/external_protocol_dialog.mm b/chrome/browser/ui/cocoa/external_protocol_dialog.mm
index 1fe4783..2b6c2ab 100644
--- a/chrome/browser/ui/cocoa/external_protocol_dialog.mm
+++ b/chrome/browser/ui/cocoa/external_protocol_dialog.mm
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -9,7 +9,7 @@
 #include "base/string_util.h"
 #include "base/sys_string_conversions.h"
 #include "base/utf_string_conversions.h"
-#include "chrome/browser/external_protocol_handler.h"
+#include "chrome/browser/external_protocol/external_protocol_handler.h"
 #include "grit/chromium_strings.h"
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util_mac.h"
diff --git a/chrome/browser/ui/gtk/external_protocol_dialog_gtk.cc b/chrome/browser/ui/gtk/external_protocol_dialog_gtk.cc
index a52eba13..6d26a0b 100644
--- a/chrome/browser/ui/gtk/external_protocol_dialog_gtk.cc
+++ b/chrome/browser/ui/gtk/external_protocol_dialog_gtk.cc
@@ -12,7 +12,7 @@
 #include "base/metrics/histogram.h"
 #include "base/string_util.h"
 #include "base/utf_string_conversions.h"
-#include "chrome/browser/external_protocol_handler.h"
+#include "chrome/browser/external_protocol/external_protocol_handler.h"
 #include "chrome/browser/tab_contents/tab_util.h"
 #include "chrome/browser/ui/gtk/gtk_util.h"
 #include "grit/chromium_strings.h"
diff --git a/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc b/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
index faec87b..9d38983 100644
--- a/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
+++ b/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
@@ -15,6 +15,7 @@
 #include "chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.h"
 #include "chrome/browser/extensions/extension_tab_helper.h"
 #include "chrome/browser/extensions/extension_webnavigation_api.h"
+#include "chrome/browser/external_protocol/external_protocol_observer.h"
 #include "chrome/browser/favicon/favicon_tab_helper.h"
 #include "chrome/browser/file_select_helper.h"
 #include "chrome/browser/history/history_tab_helper.h"
@@ -91,6 +92,7 @@
   print_view_manager_.reset(new printing::PrintViewManager(contents));
 
   // Create the per-tab observers.
+  external_protocol_observer_.reset(new ExternalProtocolObserver(contents));
   file_select_observer_.reset(new FileSelectObserver(contents));
   plugin_observer_.reset(new PluginObserver(this));
   prerender_observer_.reset(new prerender::PrerenderObserver(contents));
diff --git a/chrome/browser/ui/tab_contents/tab_contents_wrapper.h b/chrome/browser/ui/tab_contents/tab_contents_wrapper.h
index 371e142..667f6a5 100644
--- a/chrome/browser/ui/tab_contents/tab_contents_wrapper.h
+++ b/chrome/browser/ui/tab_contents/tab_contents_wrapper.h
@@ -34,6 +34,7 @@
 class Extension;
 class ExtensionTabHelper;
 class ExtensionWebNavigationTabObserver;
+class ExternalProtocolObserver;
 class FaviconTabHelper;
 class FileSelectObserver;
 class FindTabHelper;
@@ -270,6 +271,7 @@
   // (These provide no API for callers; objects that need to exist 1:1 with tabs
   // and silently do their thing live here.)
 
+  scoped_ptr<ExternalProtocolObserver> external_protocol_observer_;
   scoped_ptr<FileSelectObserver> file_select_observer_;
   scoped_ptr<PluginObserver> plugin_observer_;
   scoped_ptr<prerender::PrerenderObserver> prerender_observer_;
diff --git a/chrome/browser/ui/views/external_protocol_dialog.cc b/chrome/browser/ui/views/external_protocol_dialog.cc
index b3485c31..3a9b63fb 100644
--- a/chrome/browser/ui/views/external_protocol_dialog.cc
+++ b/chrome/browser/ui/views/external_protocol_dialog.cc
@@ -10,7 +10,7 @@
 #include "base/threading/thread_restrictions.h"
 #include "base/utf_string_conversions.h"
 #include "base/win/registry.h"
-#include "chrome/browser/external_protocol_handler.h"
+#include "chrome/browser/external_protocol/external_protocol_handler.h"
 #include "chrome/browser/tab_contents/tab_util.h"
 #include "content/browser/tab_contents/tab_contents.h"
 #include "grit/chromium_strings.h"
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 5d8ceb6..307203b 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -1083,8 +1083,10 @@
         'browser/extensions/user_script_listener.h',
         'browser/extensions/user_script_master.cc',
         'browser/extensions/user_script_master.h',
-        'browser/external_protocol_handler.cc',
-        'browser/external_protocol_handler.h',
+        'browser/external_protocol/external_protocol_handler.cc',
+        'browser/external_protocol/external_protocol_handler.h',
+        'browser/external_protocol/external_protocol_observer.cc',
+        'browser/external_protocol/external_protocol_observer.h',
         'browser/external_tab_container_win.cc',
         'browser/external_tab_container_win.h',
         'browser/favicon/favicon_handler.cc',
diff --git a/content/browser/DEPS b/content/browser/DEPS
index 7abd31307..b3b6dbb 100644
--- a/content/browser/DEPS
+++ b/content/browser/DEPS
@@ -34,7 +34,7 @@
   "+chrome/common/extensions/extension.h",

   "+chrome/common/extensions/user_script.h",

 

-  "+chrome/browser/external_protocol_handler.h",

+  "+chrome/browser/external_protocol/external_protocol_handler.h",

 

   "+chrome/browser/load_from_memory_cache_details.h",

 

diff --git a/content/browser/renderer_host/resource_dispatcher_host.cc b/content/browser/renderer_host/resource_dispatcher_host.cc
index 37e7e8e..35672851 100644
--- a/content/browser/renderer_host/resource_dispatcher_host.cc
+++ b/content/browser/renderer_host/resource_dispatcher_host.cc
@@ -23,7 +23,7 @@
 #include "chrome/browser/download/download_request_limiter.h"
 #include "chrome/browser/download/download_util.h"
 #include "chrome/browser/download/save_file_manager.h"
-#include "chrome/browser/external_protocol_handler.h"
+#include "chrome/browser/external_protocol/external_protocol_handler.h"
 #include "chrome/browser/prerender/prerender_manager.h"
 #include "chrome/browser/prerender/prerender_tracker.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/content/browser/tab_contents/tab_contents.cc b/content/browser/tab_contents/tab_contents.cc
index 19b36c3..51b9623 100644
--- a/content/browser/tab_contents/tab_contents.cc
+++ b/content/browser/tab_contents/tab_contents.cc
@@ -16,7 +16,6 @@
 #include "chrome/browser/browser_shutdown.h"
 #include "chrome/browser/debugger/devtools_manager.h"
 #include "chrome/browser/defaults.h"
-#include "chrome/browser/external_protocol_handler.h"
 #include "chrome/browser/load_from_memory_cache_details.h"
 #include "chrome/browser/notifications/desktop_notification_service.h"
 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
@@ -1737,7 +1736,6 @@
 void TabContents::OnUserGesture() {
   // Notify observers.
   FOR_EACH_OBSERVER(TabContentsObserver, observers_, DidGetUserGesture());
-  ExternalProtocolHandler::PermitLaunchUrl();
 }
 
 void TabContents::OnIgnoredUIEvent() {