Index: chrome/browser/custom_handlers/protocol_handler_registry.h |
diff --git a/chrome/browser/custom_handlers/protocol_handler_registry.h b/chrome/browser/custom_handlers/protocol_handler_registry.h |
index 523a8226026bfb0c27972fccc42bb179725d050a..f381bd2245e31cac27c95390cc5550cfddab6d3c 100644 |
--- a/chrome/browser/custom_handlers/protocol_handler_registry.h |
+++ b/chrome/browser/custom_handlers/protocol_handler_registry.h |
@@ -36,6 +36,10 @@ class PrefRegistrySyncable; |
class ProtocolHandlerRegistry : public KeyedService { |
public: |
+ enum HandlerSource { |
+ USER, // The handler was installed by user |
+ POLICY, // The handler was installed by policy |
+ }; |
// Provides notification of when the OS level user agent settings |
// are changed. |
class DefaultClientObserver |
@@ -287,7 +291,12 @@ class ProtocolHandlerRegistry : public KeyedService { |
void NotifyChanged(); |
// Registers a new protocol handler. |
- void RegisterProtocolHandler(const ProtocolHandler& handler); |
+ void RegisterProtocolHandler(const ProtocolHandler& handler, |
+ const HandlerSource source); |
+ |
+ // Registers protocol handlers from the preference. |
+ void RegisterProtocolHandlersFromPref(const char* pref_name, |
+ const HandlerSource source); |
// Get the DictionaryValues stored under the given pref name that are valid |
// ProtocolHandler values. |
@@ -295,7 +304,27 @@ class ProtocolHandlerRegistry : public KeyedService { |
const char* pref_name) const; |
// Ignores future requests to register the given protocol handler. |
- void IgnoreProtocolHandler(const ProtocolHandler& handler); |
+ void IgnoreProtocolHandler(const ProtocolHandler& handler, |
+ const HandlerSource source); |
+ |
+ // Ignores protocol handlers from the preference. |
+ void IgnoreProtocolHandlersFromPref(const char* pref_name, |
+ const HandlerSource source); |
+ |
+ // Verifies if the handler exists in the map. |
+ bool HandlerExists(const ProtocolHandler& handler, |
+ ProtocolHandlerMultiMap* map); |
+ |
+ // Verifies if the handler exists in the list. |
+ bool HandlerExists(const ProtocolHandler& handler, |
+ const ProtocolHandlerList& list); |
+ |
+ // Erases the handler that is guaranteed to exist from the map. |
+ void EraseHandler(const ProtocolHandler& handler, |
+ ProtocolHandlerMultiMap* map); |
+ |
+ // Erases the handler that is guaranteed to exist from the list. |
+ void EraseHandler(const ProtocolHandler& handler, ProtocolHandlerList* list); |
// Map from protocols (strings) to protocol handlers. |
ProtocolHandlerMultiMap protocol_handlers_; |
@@ -303,6 +332,20 @@ class ProtocolHandlerRegistry : public KeyedService { |
// Protocol handlers that the user has told us to ignore. |
ProtocolHandlerList ignored_protocol_handlers_; |
+ // These maps track the source of protocol handler registrations for the |
+ // purposes of disallowing the removal of handlers that are registered by |
+ // policy. Every entry in protocol_handlers_ should exist in at least one of |
+ // the user or policy maps. |
+ ProtocolHandlerMultiMap user_protocol_handlers_; |
+ ProtocolHandlerMultiMap policy_protocol_handlers_; |
+ |
+ // These lists track the source of protocol handlers that were ignored, for |
+ // the purposes of disallowing the removal of handlers that are ignored by |
+ // policy. Every entry in ignored_protocol_handlers_ should exist in at least |
+ // one of the user or policy lists. |
+ ProtocolHandlerList user_ignored_protocol_handlers_; |
+ ProtocolHandlerList policy_ignored_protocol_handlers_; |
+ |
// Protocol handlers that are the defaults for a given protocol. |
ProtocolHandlerMap default_handlers_; |