Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1057)

Side by Side Diff: chrome/browser/custom_handlers/protocol_handler_registry.h

Issue 7033018: Handler settings page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove in_unit_test_ Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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_CUSTOM_HANDLERS_PROTOCOL_HANDLER_REGISTRY_H_ 5 #ifndef CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_REGISTRY_H_
6 #define CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_REGISTRY_H_ 6 #define CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_REGISTRY_H_
7 #pragma once 7 #pragma once
8 8
9 #include <map> 9 #include <map>
10 #include <string> 10 #include <string>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/basictypes.h" 13 #include "base/basictypes.h"
14 #include "base/memory/ref_counted.h" 14 #include "base/memory/ref_counted.h"
15 #include "base/values.h" 15 #include "base/values.h"
16 #include "chrome/browser/custom_handlers/protocol_handler.h" 16 #include "chrome/browser/custom_handlers/protocol_handler.h"
17 #include "chrome/browser/profiles/profile.h" 17 #include "chrome/browser/profiles/profile.h"
18 #include "content/common/notification_service.h"
18 #include "net/url_request/url_request.h" 19 #include "net/url_request/url_request.h"
19 #include "net/url_request/url_request_job.h" 20 #include "net/url_request/url_request_job.h"
20 21
21 // This is where handlers for protocols registered with 22 // This is where handlers for protocols registered with
22 // navigator.registerProtocolHandler() are registered. Each Profile owns an 23 // navigator.registerProtocolHandler() are registered. Each Profile owns an
23 // instance of this class, which is initialized on browser start through 24 // instance of this class, which is initialized on browser start through
24 // Profile::InitRegisteredProtocolHandlers(), and they should be the only 25 // Profile::InitRegisteredProtocolHandlers(), and they should be the only
25 // instances of this class. 26 // instances of this class.
26 27
27 class ProtocolHandlerRegistry 28 class ProtocolHandlerRegistry
28 : public base::RefCountedThreadSafe<ProtocolHandlerRegistry> { 29 : public base::RefCountedThreadSafe<ProtocolHandlerRegistry> {
29 public: 30 public:
30 // TODO(koz): Refactor this to eliminate the unnecessary virtuals. All that 31 // TODO(koz): Refactor this to eliminate the unnecessary virtuals. All that
31 // should be needed is a way to ensure that the list of websafe protocols is 32 // should be needed is a way to ensure that the list of websafe protocols is
32 // updated. 33 // updated.
33 class Delegate { 34 class Delegate {
34 public: 35 public:
35 virtual ~Delegate(); 36 virtual ~Delegate();
36 virtual void RegisterExternalHandler(const std::string& protocol); 37 virtual void RegisterExternalHandler(const std::string& protocol);
37 virtual void DeregisterExternalHandler(const std::string& protocol); 38 virtual void DeregisterExternalHandler(const std::string& protocol);
38 virtual bool IsExternalHandlerRegistered(const std::string& protocol); 39 virtual bool IsExternalHandlerRegistered(const std::string& protocol);
39 }; 40 };
40 41
42 typedef std::map<std::string, ProtocolHandler> ProtocolHandlerMap;
43 typedef std::vector<ProtocolHandler> ProtocolHandlerList;
44 typedef std::map<std::string, ProtocolHandlerList> ProtocolHandlerMultiMap;
45
41 ProtocolHandlerRegistry(Profile* profile, Delegate* delegate); 46 ProtocolHandlerRegistry(Profile* profile, Delegate* delegate);
42 ~ProtocolHandlerRegistry(); 47 ~ProtocolHandlerRegistry();
43 48
44 // Called when the user accepts the registration of a given protocol handler. 49 // Called when the user accepts the registration of a given protocol handler.
45 void OnAcceptRegisterProtocolHandler(const ProtocolHandler& handler); 50 void OnAcceptRegisterProtocolHandler(const ProtocolHandler& handler);
46 51
47 // Called when the user denies the registration of a given protocol handler. 52 // Called when the user denies the registration of a given protocol handler.
48 void OnDenyRegisterProtocolHandler(const ProtocolHandler& handler); 53 void OnDenyRegisterProtocolHandler(const ProtocolHandler& handler);
49 54
50 // Called when the user indicates that they don't want to be asked about the 55 // Called when the user indicates that they don't want to be asked about the
51 // given protocol handler again. 56 // given protocol handler again.
52 void OnIgnoreRegisterProtocolHandler(const ProtocolHandler& handler); 57 void OnIgnoreRegisterProtocolHandler(const ProtocolHandler& handler);
53 58
54 // Makes this ProtocolHandler the default handler for its protocol. 59 // Makes this ProtocolHandler the default handler for its protocol.
55 void SetDefault(const ProtocolHandler& handler); 60 void SetDefault(const ProtocolHandler& handler);
56 61
57 // Clears the default for the provided protocol. 62 // Clears the default for the provided protocol.
58 void ClearDefault(const std::string& scheme); 63 void ClearDefault(const std::string& scheme);
59 64
60 // Returns true if this handler is the default handler for its protocol. 65 // Returns true if this handler is the default handler for its protocol.
61 bool IsDefault(const ProtocolHandler& handler) const; 66 bool IsDefault(const ProtocolHandler& handler) const;
62 67
63 // Returns true if the given protocol has a default handler associated with 68 // Returns true if the given protocol has a default handler associated with
64 // it. 69 // it.
65 bool HasDefault(const std::string& scheme) const; 70 bool HasDefault(const std::string& scheme) const;
66 71
67 // Returns true if there is a handler registered for the given protocol.
68 bool HasHandler(const std::string& scheme);
69
70 // Loads a user's registered protocol handlers. 72 // Loads a user's registered protocol handlers.
71 void Load(); 73 void Load();
72 74
73 // Saves a user's registered protocol handlers. 75 // Saves a user's registered protocol handlers.
74 void Save(); 76 void Save();
75 77
76 // Returns the default handler for this protocol, or an empty handler if none 78 // Returns the default handler for this protocol, or an empty handler if none
77 // exists. 79 // exists.
78 const ProtocolHandler& GetHandlerFor(const std::string& scheme) const; 80 const ProtocolHandler& GetHandlerFor(const std::string& scheme) const;
79 81
82 // Returns the offset in the list of handlers for a protocol of the default
83 // handler for that protocol.
84 int GetHandlerIndex(const std::string& scheme) const;
85
86 // Get the list of protocol handlers for the given scheme.
87 const ProtocolHandlerList* GetHandlersFor(const std::string& scheme) const;
88
80 // Yields a list of the protocols handled by this registry. 89 // Yields a list of the protocols handled by this registry.
81 void GetHandledProtocols(std::vector<std::string>* output) const; 90 void GetHandledProtocols(std::vector<std::string>* output) const;
82 91
83 // Returns true if we allow websites to register handlers for the given 92 // Returns true if we allow websites to register handlers for the given
84 // scheme. 93 // scheme.
85 bool CanSchemeBeOverridden(const std::string& scheme) const; 94 bool CanSchemeBeOverridden(const std::string& scheme) const;
86 95
87 // Returns true if an identical protocol handler has already been registered. 96 // Returns true if an identical protocol handler has already been registered.
88 bool IsRegistered(const ProtocolHandler& handler); 97 bool IsRegistered(const ProtocolHandler& handler) const;
89 98
90 // Returns true if the protocol handler is being ignored. 99 // Returns true if the protocol handler is being ignored.
91 bool IsIgnored(const ProtocolHandler& handler) const; 100 bool IsIgnored(const ProtocolHandler& handler) const;
92 101
93 // Returns true if the protocol has a registered protocol handler. 102 // Returns true if the protocol has a registered protocol handler.
94 bool IsHandledProtocol(const std::string& scheme) const; 103 bool IsHandledProtocol(const std::string& scheme) const;
95 104
96 // Removes the given protocol handler from the registry. 105 // Removes the given protocol handler from the registry.
97 void RemoveHandler(const ProtocolHandler& handler); 106 void RemoveHandler(const ProtocolHandler& handler);
98 107
(...skipping 13 matching lines...) Expand all
112 121
113 // Puts this registry in the disabled state - registered protocol handlers 122 // Puts this registry in the disabled state - registered protocol handlers
114 // will not handle requests. 123 // will not handle requests.
115 void Disable(); 124 void Disable();
116 125
117 bool enabled() const { return enabled_; } 126 bool enabled() const { return enabled_; }
118 127
119 private: 128 private:
120 friend class base::RefCountedThreadSafe<ProtocolHandlerRegistry>; 129 friend class base::RefCountedThreadSafe<ProtocolHandlerRegistry>;
121 130
122 typedef std::map<std::string, ProtocolHandler> ProtocolHandlerMap; 131 // Insert the given ProtocolHandler into the registry.
123 typedef std::vector<ProtocolHandler> ProtocolHandlerList; 132 void InsertHandler(const ProtocolHandler& handler);
124 typedef std::map<std::string, ProtocolHandlerList> ProtocolHandlerMultiMap;
125 133
126 // Returns a JSON list of protocol handlers. The caller is responsible for 134 // Returns a JSON list of protocol handlers. The caller is responsible for
127 // deleting this Value. 135 // deleting this Value.
128 Value* EncodeRegisteredHandlers(); 136 Value* EncodeRegisteredHandlers();
129 137
130 // Returns a JSON list of ignored protocol handlers. The caller is 138 // Returns a JSON list of ignored protocol handlers. The caller is
131 // responsible for deleting this Value. 139 // responsible for deleting this Value.
132 Value* EncodeIgnoredHandlers(); 140 Value* EncodeIgnoredHandlers();
133 141
142 // Sends a notification of the given type to the NotificationService.
143 void NotifyChanged();
144
134 // Registers a new protocol handler. 145 // Registers a new protocol handler.
135 void RegisterProtocolHandler(const ProtocolHandler& handler); 146 void RegisterProtocolHandler(const ProtocolHandler& handler);
136 147
137 // Get the DictionaryValues stored under the given pref name that are valid 148 // Get the DictionaryValues stored under the given pref name that are valid
138 // ProtocolHandler values. 149 // ProtocolHandler values.
139 std::vector<const DictionaryValue*> GetHandlersFromPref( 150 std::vector<const DictionaryValue*> GetHandlersFromPref(
140 const char* pref_name) const; 151 const char* pref_name) const;
141 152
142 // Ignores future requests to register the given protocol handler. 153 // Ignores future requests to register the given protocol handler.
143 void IgnoreProtocolHandler(const ProtocolHandler& handler); 154 void IgnoreProtocolHandler(const ProtocolHandler& handler);
144 155
145 // Registers a new protocol handler from a JSON dictionary. 156 // Registers a new protocol handler from a JSON dictionary.
146 void RegisterHandlerFromValue(const DictionaryValue* value); 157 void RegisterHandlerFromValue(const DictionaryValue* value);
147 158
148 // Register 159 // Register
149 void IgnoreHandlerFromValue(const DictionaryValue* value); 160 void IgnoreHandlerFromValue(const DictionaryValue* value);
150 161
151 ProtocolHandlerList& GetHandlerListFor(const std::string& scheme);
152
153 // Map from protocols (strings) to protocol handlers. 162 // Map from protocols (strings) to protocol handlers.
154 ProtocolHandlerMultiMap protocol_handlers_; 163 ProtocolHandlerMultiMap protocol_handlers_;
155 164
156 // Protocol handlers that the user has told us to ignore. 165 // Protocol handlers that the user has told us to ignore.
157 ProtocolHandlerList ignored_protocol_handlers_; 166 ProtocolHandlerList ignored_protocol_handlers_;
158 167
159 // Protocol handlers that are the defaults for a given protocol. 168 // Protocol handlers that are the defaults for a given protocol.
160 ProtocolHandlerMap default_handlers_; 169 ProtocolHandlerMap default_handlers_;
161 170
162 // The Profile that owns this ProtocolHandlerRegistry. 171 // The Profile that owns this ProtocolHandlerRegistry.
163 Profile* profile_; 172 Profile* profile_;
164 173
165 // The Delegate that registers / deregisters external handlers on our behalf. 174 // The Delegate that registers / deregisters external handlers on our behalf.
166 scoped_ptr<Delegate> delegate_; 175 scoped_ptr<Delegate> delegate_;
167 176
168 // If false then registered protocol handlers will not be used to handle 177 // If false then registered protocol handlers will not be used to handle
169 // requests. 178 // requests.
170 bool enabled_; 179 bool enabled_;
171 180
172 // Whether or not we are loading. 181 // Whether or not we are loading.
173 bool is_loading_; 182 bool is_loading_;
174 183
175 DISALLOW_COPY_AND_ASSIGN(ProtocolHandlerRegistry); 184 DISALLOW_COPY_AND_ASSIGN(ProtocolHandlerRegistry);
176 }; 185 };
177 #endif // CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_REGISTRY_H_ 186 #endif // CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_REGISTRY_H_
OLDNEW
« no previous file with comments | « chrome/app/generated_resources.grd ('k') | chrome/browser/custom_handlers/protocol_handler_registry.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698