| 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_
|
|
|