| OLD | NEW | 
|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #ifndef CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_HANDLER_H_ | 5 #ifndef CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_HANDLER_H_ | 
| 6 #define CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_HANDLER_H_ | 6 #define CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_HANDLER_H_ | 
| 7 | 7 | 
| 8 #include <string> | 8 #include <string> | 
| 9 | 9 | 
| 10 #include "chrome/browser/shell_integration.h" | 10 #include "chrome/browser/shell_integration.h" | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 23     BLOCK, | 23     BLOCK, | 
| 24     UNKNOWN, | 24     UNKNOWN, | 
| 25   }; | 25   }; | 
| 26 | 26 | 
| 27   // Delegate to allow unit testing to provide different behavior. | 27   // Delegate to allow unit testing to provide different behavior. | 
| 28   class Delegate { | 28   class Delegate { | 
| 29    public: | 29    public: | 
| 30     virtual ShellIntegration::DefaultProtocolClientWorker* CreateShellWorker( | 30     virtual ShellIntegration::DefaultProtocolClientWorker* CreateShellWorker( | 
| 31         ShellIntegration::DefaultWebClientObserver* observer, | 31         ShellIntegration::DefaultWebClientObserver* observer, | 
| 32         const std::string& protocol) = 0; | 32         const std::string& protocol) = 0; | 
| 33     virtual BlockState GetBlockState(const std::string& scheme) = 0; | 33     virtual BlockState GetBlockState(const std::string& scheme, | 
|  | 34                                      bool initiated_by_user_gesture) = 0; | 
| 34     virtual void BlockRequest() = 0; | 35     virtual void BlockRequest() = 0; | 
| 35     virtual void RunExternalProtocolDialog(const GURL& url, | 36     virtual void RunExternalProtocolDialog(const GURL& url, | 
| 36                                            int render_process_host_id, | 37                                            int render_process_host_id, | 
| 37                                            int routing_id) = 0; | 38                                            int routing_id) = 0; | 
| 38     virtual void LaunchUrlWithoutSecurityCheck(const GURL& url) = 0; | 39     virtual void LaunchUrlWithoutSecurityCheck(const GURL& url) = 0; | 
| 39     virtual void FinishedProcessingCheck() = 0; | 40     virtual void FinishedProcessingCheck() = 0; | 
| 40     virtual ~Delegate() {} | 41     virtual ~Delegate() {} | 
| 41   }; | 42   }; | 
| 42 | 43 | 
| 43   // Returns whether we should block a given scheme. | 44   // Returns whether we should block a given scheme. | 
| 44   static BlockState GetBlockState(const std::string& scheme); | 45   static BlockState GetBlockState(const std::string& scheme, | 
|  | 46                                   bool initiated_by_user_gesture); | 
| 45 | 47 | 
| 46   // Sets whether we should block a given scheme. | 48   // Sets whether we should block a given scheme. | 
| 47   static void SetBlockState(const std::string& scheme, BlockState state); | 49   static void SetBlockState(const std::string& scheme, BlockState state); | 
| 48 | 50 | 
| 49   // Checks to see if the protocol is allowed, if it is whitelisted, |  | 
| 50   // the application associated with the protocol is launched on the io thread, |  | 
| 51   // if it is blacklisted, returns silently. Otherwise, an |  | 
| 52   // ExternalProtocolDialog is created asking the user. If the user accepts, |  | 
| 53   // LaunchUrlWithoutSecurityCheck is called on the io thread and the |  | 
| 54   // application is launched. |  | 
| 55   // Must run on the UI thread. |  | 
| 56   static void LaunchUrl(const GURL& url, int render_process_host_id, |  | 
| 57                         int tab_contents_id) { |  | 
| 58       LaunchUrlWithDelegate(url, render_process_host_id, tab_contents_id, NULL); |  | 
| 59   } |  | 
| 60 |  | 
| 61   // Version of LaunchUrl allowing use of a delegate to facilitate unit | 51   // Version of LaunchUrl allowing use of a delegate to facilitate unit | 
| 62   // testing. | 52   // testing. | 
| 63   static void LaunchUrlWithDelegate(const GURL& url, int render_process_host_id, | 53   static void LaunchUrlWithDelegate(const GURL& url, int render_process_host_id, | 
| 64                                     int tab_contents_id, Delegate* delegate); | 54                                     int tab_contents_id, Delegate* delegate, | 
|  | 55                                     bool initiated_by_user_gesture); | 
| 65 | 56 | 
| 66   // Creates and runs a External Protocol dialog box. | 57   // Creates and runs a External Protocol dialog box. | 
| 67   // |url| - The url of the request. | 58   // |url| - The url of the request. | 
| 68   // |render_process_host_id| and |routing_id| are used by | 59   // |render_process_host_id| and |routing_id| are used by | 
| 69   // tab_util::GetWebContentsByID to aquire the tab contents associated with | 60   // tab_util::GetWebContentsByID to aquire the tab contents associated with | 
| 70   // this dialog. | 61   // this dialog. | 
| 71   // NOTE: There is a race between the Time of Check and the Time Of Use for | 62   // NOTE: There is a race between the Time of Check and the Time Of Use for | 
| 72   //       the command line. Since the caller (web page) does not have access | 63   //       the command line. Since the caller (web page) does not have access | 
| 73   //       to change the command line by itself, we do not do anything special | 64   //       to change the command line by itself, we do not do anything special | 
| 74   //       to protect against this scenario. | 65   //       to protect against this scenario. | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 89   // url you have has been checked against the blacklist, and has been escaped. | 80   // url you have has been checked against the blacklist, and has been escaped. | 
| 90   // All calls to this function should originate in some way from LaunchUrl. | 81   // All calls to this function should originate in some way from LaunchUrl. | 
| 91   static void LaunchUrlWithoutSecurityCheck(const GURL& url, | 82   static void LaunchUrlWithoutSecurityCheck(const GURL& url, | 
| 92                                             int render_process_host_id, | 83                                             int render_process_host_id, | 
| 93                                             int tab_contents_id); | 84                                             int tab_contents_id); | 
| 94 | 85 | 
| 95   // Prepopulates the dictionary with known protocols to deny or allow, if | 86   // Prepopulates the dictionary with known protocols to deny or allow, if | 
| 96   // preferences for them do not already exist. | 87   // preferences for them do not already exist. | 
| 97   static void PrepopulateDictionary(base::DictionaryValue* win_pref); | 88   static void PrepopulateDictionary(base::DictionaryValue* win_pref); | 
| 98 | 89 | 
| 99   // Allows LaunchUrl to proceed with launching an external protocol handler. | 90  private: | 
| 100   // This is typically triggered by a user gesture, but is also called for | 91   DISALLOW_COPY_AND_ASSIGN(ExternalProtocolHandler); | 
| 101   // each extension API function. Note that each call to LaunchUrl resets |  | 
| 102   // the state to false (not allowed). |  | 
| 103   static void PermitLaunchUrl(); |  | 
| 104 }; | 92 }; | 
| 105 | 93 | 
| 106 #endif  // CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_HANDLER_H_ | 94 #endif  // CHROME_BROWSER_EXTERNAL_PROTOCOL_EXTERNAL_PROTOCOL_HANDLER_H_ | 
| OLD | NEW | 
|---|