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

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

Issue 6410115: Adds navigator.registerProtocolHandler. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Responded to comments, simplified file format. Created 9 years, 10 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_REGISTRY_H_
6 #define CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_REGISTRY_H_
7 #pragma once
8
9 #include <string>
10 #include <map>
11
12 #include "base/basictypes.h"
13 #include "base/ref_counted.h"
14 #include "base/values.h"
15 #include "chrome/browser/profiles/profile.h"
16 #include "net/url_request/url_request.h"
17 #include "net/url_request/url_request_job.h"
18
19
20 // ProtocolHandler -------------------------------------------------------------
21
22 // A single tuple of (protocol, url, title) that indicates how URLs of the
23 // given protocol should be rewritten to be handled.
24
25 class ProtocolHandler {
26 public:
27 static ProtocolHandler* CreateProtocolHandler(const std::string& protocol,
28 const GURL& url,
29 const string16& title);
30 static ProtocolHandler* CreateProtocolHandler(const DictionaryValue* value);
31 GURL TranslateUrl(const GURL& url);
32 Value* Encode();
tony 2011/02/14 23:40:07 Nit: Maybe make it clear that the caller should de
koz (OOO until 15th September) 2011/02/15 03:37:27 Done.
33 std::string protocol() const { return protocol_; }
34 GURL url() const { return url_;}
35 string16 title() const { return title_; }
36 bool operator==(const ProtocolHandler &other) const;
37
38 private:
39 ProtocolHandler(const std::string& protocol,
40 const GURL& url,
41 const string16& title);
42 const std::string protocol_;
43 const GURL url_;
44 const string16 title_;
45 };
46
47 typedef std::map<std::string, ProtocolHandler*> ProtocolHandlerMap;
48
49 // ProtocolHandlerRegistry -----------------------------------------------------
50
51 // This is where handlers for protocols registered with
52 // navigator.registerProtocolHandler() are registered. Each Profile owns an
53 // instance of this class, which is initialized on browser start through
54 // Profile::InitRegisteredProtocolHandlers(), and they should be the only
55 // instances of this class.
56
57 class ProtocolHandlerRegistry : public base::RefCounted<ProtocolHandlerRegistry> {
58 public:
59 explicit ProtocolHandlerRegistry(Profile* profile);
60
61 // Called when the user accepts the registration of a given protocol handler.
62 void OnAcceptRegisterProtocolHandler(ProtocolHandler* handler);
63
64 // Called when the user denies the registration of a given protocol handler.
65 void OnDenyRegisterProtocolHandler(ProtocolHandler* handler);
66
67 // Loads a user's registered protocol handlers.
68 void Load();
69
70 // Saves a user's registered protocol handlers.
71 void Save();
72
73 // Returns the handler for this protocol.
74 ProtocolHandler* GetHandlerFor(const std::string& scheme) const;
75
76 bool IsAlreadyRegistered(const ProtocolHandler* handler) const;
77
78 // URLRequestFactory for use with URLRequest::RegisterProtocolFactory().
79 // Redirects any URLRequests for which there is a matching protocol handler.
80 static net::URLRequestJob* Factory(net::URLRequest* request,
81 const std::string& scheme);
82
83 // Registers the preferences that we store registered protocol handlers in.
84 static void RegisterPrefs(PrefService* prefService);
85
86 private:
87 // Returns a JSON dictionary of protocols to protocol handlers. The caller is
88 // responsible for deleting this Value.
89 Value* Encode();
90
91 // Registers a new protocol handler.
92 void RegisterProtocolHandler(ProtocolHandler* handler);
93
94 // Creates a URL request job for the given request if there is a matching
95 // protocol handler, returns NULL otherwise.
96 net::URLRequestJob* CreateJob(net::URLRequest* request,
97 const std::string& scheme) const;
98
99 // Registers a new protocol handler from a JSON dictionary.
100 void RegisterHandlerFromValue(const DictionaryValue* value);
101
102 // Map from protocols (strings) to protocol handlers.
103 ProtocolHandlerMap protocolHandlers_;
104
105 // The Profile that owns this ProtocolHandlerRegistry.
106 Profile* profile_;
107
108 friend class base::RefCounted<ProtocolHandlerRegistry>;
109 ~ProtocolHandlerRegistry() {}
110
111 DISALLOW_COPY_AND_ASSIGN(ProtocolHandlerRegistry);
112 };
113 #endif // CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_REGISTRY_H_
114
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698