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 6780d105a73eec0c9381c86de924658a4bf97dec..7c934c5f7c6db51fe133bc4f5e2ad581836dd512 100644 |
--- a/chrome/browser/external_protocol/external_protocol_handler.h |
+++ b/chrome/browser/external_protocol/external_protocol_handler.h |
@@ -30,8 +30,7 @@ |
virtual ShellIntegration::DefaultProtocolClientWorker* CreateShellWorker( |
ShellIntegration::DefaultWebClientObserver* observer, |
const std::string& protocol) = 0; |
- virtual BlockState GetBlockState(const std::string& scheme, |
- bool initiated_by_user_gesture) = 0; |
+ virtual BlockState GetBlockState(const std::string& scheme) = 0; |
virtual void BlockRequest() = 0; |
virtual void RunExternalProtocolDialog(const GURL& url, |
int render_process_host_id, |
@@ -42,17 +41,27 @@ |
}; |
// Returns whether we should block a given scheme. |
- static BlockState GetBlockState(const std::string& scheme, |
- bool initiated_by_user_gesture); |
+ static BlockState GetBlockState(const std::string& scheme); |
// Sets whether we should block a given scheme. |
static void SetBlockState(const std::string& scheme, BlockState state); |
+ // Checks to see if the protocol is allowed, if it is whitelisted, |
+ // the application associated with the protocol is launched on the io thread, |
+ // if it is blacklisted, returns silently. Otherwise, an |
+ // ExternalProtocolDialog is created asking the user. If the user accepts, |
+ // LaunchUrlWithoutSecurityCheck is called on the io thread and the |
+ // application is launched. |
+ // Must run on the UI thread. |
+ static void LaunchUrl(const GURL& url, int render_process_host_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, |
- bool initiated_by_user_gesture); |
+ int tab_contents_id, Delegate* delegate); |
// Creates and runs a External Protocol dialog box. |
// |url| - The url of the request. |
@@ -87,8 +96,11 @@ |
// preferences for them do not already exist. |
static void PrepopulateDictionary(base::DictionaryValue* win_pref); |
- private: |
- DISALLOW_COPY_AND_ASSIGN(ExternalProtocolHandler); |
+ // Allows LaunchUrl to proceed with launching an external protocol handler. |
+ // This is typically triggered by a user gesture, but is also called for |
+ // each extension API function. Note that each call to LaunchUrl resets |
+ // the state to false (not allowed). |
+ static void PermitLaunchUrl(); |
}; |
#endif // CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_HANDLER_H_ |