Index: chrome/browser/external_protocol/external_protocol_handler.h |
diff --git a/chrome/browser/external_protocol/external_protocol_handler.h b/chrome/browser/external_protocol/external_protocol_handler.h |
index 002b0c8e8b4b8565c58196f5b0259395739e3e30..780861c273af53421f0cb2d24ccc248ceb303b7e 100644 |
--- a/chrome/browser/external_protocol/external_protocol_handler.h |
+++ b/chrome/browser/external_protocol/external_protocol_handler.h |
@@ -8,6 +8,8 @@ |
#include <string> |
+#include "chrome/browser/shell_integration.h" |
+ |
class GURL; |
class PrefService; |
@@ -23,6 +25,22 @@ class ExternalProtocolHandler { |
UNKNOWN, |
}; |
+ // Delegate to allow unit testing to provide different behavior. |
+ class Delegate { |
+ public: |
+ virtual ShellIntegration::DefaultProtocolClientWorker* CreateShellWorker( |
+ ShellIntegration::DefaultWebClientObserver* observer, |
+ const std::string& protocol) = 0; |
+ virtual BlockState GetBlockState(const std::string& scheme) = 0; |
+ virtual void BlockRequest() = 0; |
+ virtual void RunExternalProtocolDialog(const GURL& url, |
+ int render_process_host_id, |
+ int routing_id) = 0; |
+ virtual void LaunchUrlWithoutSecurityCheck(const GURL& url) = 0; |
+ virtual void FinishedProcessingCheck() = 0; |
+ virtual ~Delegate() {} |
+ }; |
+ |
// Returns whether we should block a given scheme. |
static BlockState GetBlockState(const std::string& scheme); |
@@ -37,7 +55,14 @@ class ExternalProtocolHandler { |
// application is launched. |
// Must run on the UI thread. |
static void LaunchUrl(const GURL& url, int render_process_host_id, |
- int tab_contents_id); |
+ int tab_contents_id) { |
+ LaunchUrlWithDelegate(url, render_process_host_id, tab_contents_id, NULL); |
+ } |
+ |
+ // Version of LaunchUrl allowing use of a delegate to facilitate unit |
+ // testing. |
+ static void LaunchUrlWithDelegate(const GURL& url, int render_process_host_id, |
+ int tab_contents_id, Delegate* delegate); |
// Creates and runs a External Protocol dialog box. |
// |url| - The url of the request. |