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

Side by Side Diff: chrome/browser/net/chrome_extensions_network_delegate.cc

Issue 346493002: Android: Remove web_request extension API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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
(Empty)
1 // Copyright 2014 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 #include "chrome/browser/net/chrome_extensions_network_delegate.h"
6
7 #include "net/base/net_errors.h"
8
9 #if defined(ENABLE_EXTENSIONS)
10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/extensions/api/proxy/proxy_api.h"
12 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
13 #include "chrome/browser/extensions/event_router_forwarder.h"
14 #include "chrome/browser/profiles/profile_manager.h"
15 #include "content/public/browser/browser_thread.h"
16 #include "content/public/browser/render_frame_host.h"
17 #include "content/public/browser/resource_request_info.h"
18 #include "extensions/browser/extension_system.h"
19 #include "extensions/browser/info_map.h"
20 #include "extensions/browser/process_manager.h"
21 #include "net/url_request/url_request.h"
22
23 using content::BrowserThread;
24 using content::ResourceRequestInfo;
25
26 namespace {
27
28 enum RequestStatus { REQUEST_STARTED, REQUEST_DONE };
29
30 // Notifies the extensions::ProcessManager that a request has started or stopped
31 // for a particular RenderFrame.
32 void NotifyEPMRequestStatus(RequestStatus status,
33 void* profile_id,
34 int process_id,
35 int render_frame_id) {
36 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
37 Profile* profile = reinterpret_cast<Profile*>(profile_id);
38 if (!g_browser_process->profile_manager()->IsValidProfile(profile))
39 return;
40
41 extensions::ProcessManager* process_manager =
42 extensions::ExtensionSystem::Get(profile)->process_manager();
43 // This may be NULL in unit tests.
44 if (!process_manager)
45 return;
46
47 // Will be NULL if the request was not issued on behalf of a renderer (e.g. a
48 // system-level request).
49 content::RenderFrameHost* render_frame_host =
50 content::RenderFrameHost::FromID(process_id, render_frame_id);
51 if (render_frame_host) {
52 if (status == REQUEST_STARTED) {
53 process_manager->OnNetworkRequestStarted(render_frame_host);
54 } else if (status == REQUEST_DONE) {
55 process_manager->OnNetworkRequestDone(render_frame_host);
56 } else {
57 NOTREACHED();
58 }
59 }
60 }
61
62 void ForwardRequestStatus(
63 RequestStatus status, net::URLRequest* request, void* profile_id) {
64 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
65 if (!info)
66 return;
67
68 int process_id, render_frame_id;
69 if (info->GetAssociatedRenderFrame(&process_id, &render_frame_id)) {
70 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
71 base::Bind(&NotifyEPMRequestStatus,
72 status, profile_id, process_id, render_frame_id));
73 }
74 }
75
76 class ChromeExtensionsNetworkDelegateImpl
77 : public ChromeExtensionsNetworkDelegate {
78 public:
79 explicit ChromeExtensionsNetworkDelegateImpl(
80 extensions::EventRouterForwarder* event_router);
81 virtual ~ChromeExtensionsNetworkDelegateImpl();
82
83 private:
84 // ChromeExtensionsNetworkDelegate implementation.
85 virtual void ForwardProxyErrors(net::URLRequest* request) OVERRIDE;
86 virtual void ForwardStartRequestStatus(net::URLRequest* request) OVERRIDE;
87 virtual void ForwardDoneRequestStatus(net::URLRequest* request) OVERRIDE;
88 virtual int OnBeforeURLRequest(net::URLRequest* request,
89 const net::CompletionCallback& callback,
90 GURL* new_url) OVERRIDE;
91 virtual int OnBeforeSendHeaders(net::URLRequest* request,
92 const net::CompletionCallback& callback,
93 net::HttpRequestHeaders* headers) OVERRIDE;
94 virtual void OnSendHeaders(net::URLRequest* request,
95 const net::HttpRequestHeaders& headers) OVERRIDE;
96 virtual int OnHeadersReceived(
97 net::URLRequest* request,
98 const net::CompletionCallback& callback,
99 const net::HttpResponseHeaders* original_response_headers,
100 scoped_refptr<net::HttpResponseHeaders>* override_response_headers,
101 GURL* allowed_unsafe_redirect_url) OVERRIDE;
102 virtual void OnBeforeRedirect(net::URLRequest* request,
103 const GURL& new_location) OVERRIDE;
104 virtual void OnResponseStarted(net::URLRequest* request) OVERRIDE;
105 virtual void OnCompleted(net::URLRequest* request, bool started) OVERRIDE;
106 virtual void OnURLRequestDestroyed(net::URLRequest* request) OVERRIDE;
107 virtual void OnPACScriptError(int line_number,
108 const base::string16& error) OVERRIDE;
109 virtual net::NetworkDelegate::AuthRequiredResponse OnAuthRequired(
110 net::URLRequest* request,
111 const net::AuthChallengeInfo& auth_info,
112 const AuthCallback& callback,
113 net::AuthCredentials* credentials) OVERRIDE;
114
115 scoped_refptr<extensions::EventRouterForwarder> event_router_;
116
117 DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsNetworkDelegateImpl);
118 };
119
120 ChromeExtensionsNetworkDelegateImpl::ChromeExtensionsNetworkDelegateImpl(
121 extensions::EventRouterForwarder* event_router) {
122 DCHECK(event_router);
123 event_router_ = event_router;
124 }
125
126 ChromeExtensionsNetworkDelegateImpl::~ChromeExtensionsNetworkDelegateImpl() {}
127
128 void ChromeExtensionsNetworkDelegateImpl::ForwardProxyErrors(
129 net::URLRequest* request) {
130 if (request->status().status() == net::URLRequestStatus::FAILED) {
131 switch (request->status().error()) {
132 case net::ERR_PROXY_AUTH_UNSUPPORTED:
133 case net::ERR_PROXY_CONNECTION_FAILED:
134 case net::ERR_TUNNEL_CONNECTION_FAILED:
135 extensions::ProxyEventRouter::GetInstance()->OnProxyError(
136 event_router_.get(), profile_, request->status().error());
137 }
138 }
139 }
140
141 void ChromeExtensionsNetworkDelegateImpl::ForwardStartRequestStatus(
142 net::URLRequest* request) {
143 ForwardRequestStatus(REQUEST_STARTED, request, profile_);
144 }
145
146 void ChromeExtensionsNetworkDelegateImpl::ForwardDoneRequestStatus(
147 net::URLRequest* request) {
148 ForwardRequestStatus(REQUEST_DONE, request, profile_);
149 }
150
151 int ChromeExtensionsNetworkDelegateImpl::OnBeforeURLRequest(
152 net::URLRequest* request,
153 const net::CompletionCallback& callback,
154 GURL* new_url) {
155 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest(
156 profile_, extension_info_map_.get(), request, callback, new_url);
157 }
158
159 int ChromeExtensionsNetworkDelegateImpl::OnBeforeSendHeaders(
160 net::URLRequest* request,
161 const net::CompletionCallback& callback,
162 net::HttpRequestHeaders* headers) {
163 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeSendHeaders(
164 profile_, extension_info_map_.get(), request, callback, headers);
165 }
166
167 void ChromeExtensionsNetworkDelegateImpl::OnSendHeaders(
168 net::URLRequest* request,
169 const net::HttpRequestHeaders& headers) {
170 ExtensionWebRequestEventRouter::GetInstance()->OnSendHeaders(
171 profile_, extension_info_map_.get(), request, headers);
172 }
173
174 int ChromeExtensionsNetworkDelegateImpl::OnHeadersReceived(
175 net::URLRequest* request,
176 const net::CompletionCallback& callback,
177 const net::HttpResponseHeaders* original_response_headers,
178 scoped_refptr<net::HttpResponseHeaders>* override_response_headers,
179 GURL* allowed_unsafe_redirect_url) {
180 return ExtensionWebRequestEventRouter::GetInstance()->OnHeadersReceived(
181 profile_,
182 extension_info_map_.get(),
183 request,
184 callback,
185 original_response_headers,
186 override_response_headers,
187 allowed_unsafe_redirect_url);
188 }
189
190 void ChromeExtensionsNetworkDelegateImpl::OnBeforeRedirect(
191 net::URLRequest* request,
192 const GURL& new_location) {
193 ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRedirect(
194 profile_, extension_info_map_.get(), request, new_location);
195 }
196
197
198 void ChromeExtensionsNetworkDelegateImpl::OnResponseStarted(
199 net::URLRequest* request) {
200 ExtensionWebRequestEventRouter::GetInstance()->OnResponseStarted(
201 profile_, extension_info_map_.get(), request);
202 ForwardProxyErrors(request);
203 }
204
205 void ChromeExtensionsNetworkDelegateImpl::OnCompleted(
206 net::URLRequest* request,
207 bool started) {
208 if (request->status().status() == net::URLRequestStatus::SUCCESS) {
209 bool is_redirect = request->response_headers() &&
210 net::HttpResponseHeaders::IsRedirectResponseCode(
211 request->response_headers()->response_code());
212 if (!is_redirect) {
213 ExtensionWebRequestEventRouter::GetInstance()->OnCompleted(
214 profile_, extension_info_map_.get(), request);
215 }
216 return;
217 }
218
219 if (request->status().status() == net::URLRequestStatus::FAILED ||
220 request->status().status() == net::URLRequestStatus::CANCELED) {
221 ExtensionWebRequestEventRouter::GetInstance()->OnErrorOccurred(
222 profile_, extension_info_map_.get(), request, started);
223 return;
224 }
225
226 NOTREACHED();
227 }
228
229 void ChromeExtensionsNetworkDelegateImpl::OnURLRequestDestroyed(
230 net::URLRequest* request) {
231 ExtensionWebRequestEventRouter::GetInstance()->OnURLRequestDestroyed(
232 profile_, request);
233 }
234
235 void ChromeExtensionsNetworkDelegateImpl::OnPACScriptError(
236 int line_number,
237 const base::string16& error) {
238 extensions::ProxyEventRouter::GetInstance()->OnPACScriptError(
239 event_router_.get(), profile_, line_number, error);
240 }
241
242 net::NetworkDelegate::AuthRequiredResponse
243 ChromeExtensionsNetworkDelegateImpl::OnAuthRequired(
244 net::URLRequest* request,
245 const net::AuthChallengeInfo& auth_info,
246 const AuthCallback& callback,
247 net::AuthCredentials* credentials) {
248 return ExtensionWebRequestEventRouter::GetInstance()->OnAuthRequired(
249 profile_, extension_info_map_.get(), request, auth_info, callback,
250 credentials);
251 }
252
253 } // namespace
254
255 #endif // defined(ENABLE_EXTENSIONS)
256
257 // static
258 ChromeExtensionsNetworkDelegate* ChromeExtensionsNetworkDelegate::Create(
259 extensions::EventRouterForwarder* event_router) {
260 #if defined(ENABLE_EXTENSIONS)
261 return new ChromeExtensionsNetworkDelegateImpl(event_router);
262 #else
263 return new ChromeExtensionsNetworkDelegate();
264 #endif
265 }
266
267 ChromeExtensionsNetworkDelegate::ChromeExtensionsNetworkDelegate()
268 : profile_(NULL) {
269 }
270
271 ChromeExtensionsNetworkDelegate::~ChromeExtensionsNetworkDelegate() {}
272
273 void ChromeExtensionsNetworkDelegate::set_extension_info_map(
274 extensions::InfoMap* extension_info_map) {
275 #if defined(ENABLE_EXTENSIONS)
276 extension_info_map_ = extension_info_map;
277 #endif
278 }
279
280 void ChromeExtensionsNetworkDelegate::ForwardProxyErrors(
Yoyo Zhou 2014/06/18 23:38:54 Is it necessary to override these?
Lei Zhang 2014/06/18 23:44:27 I could add #ifdefs for these three. Did you have
Yoyo Zhou 2014/06/18 23:55:25 The NetworkDelegate implementation does nothing he
281 net::URLRequest* request) {
282 }
283
284 void ChromeExtensionsNetworkDelegate::ForwardStartRequestStatus(
285 net::URLRequest* request) {
286 }
287
288 void ChromeExtensionsNetworkDelegate::ForwardDoneRequestStatus(
289 net::URLRequest* request) {
290 }
291
292 int ChromeExtensionsNetworkDelegate::OnBeforeURLRequest(
293 net::URLRequest* request,
294 const net::CompletionCallback& callback,
295 GURL* new_url) {
296 return net::OK;
297 }
298
299 int ChromeExtensionsNetworkDelegate::OnBeforeSendHeaders(
300 net::URLRequest* request,
301 const net::CompletionCallback& callback,
302 net::HttpRequestHeaders* headers) {
303 return net::OK;
304 }
305
306 void ChromeExtensionsNetworkDelegate::OnSendHeaders(
307 net::URLRequest* request,
308 const net::HttpRequestHeaders& headers) {
309 }
310
311 int ChromeExtensionsNetworkDelegate::OnHeadersReceived(
312 net::URLRequest* request,
313 const net::CompletionCallback& callback,
314 const net::HttpResponseHeaders* original_response_headers,
315 scoped_refptr<net::HttpResponseHeaders>* override_response_headers,
316 GURL* allowed_unsafe_redirect_url) {
317 return net::OK;
318 }
319
320 void ChromeExtensionsNetworkDelegate::OnBeforeRedirect(
321 net::URLRequest* request,
322 const GURL& new_location) {
323 }
324
325
326 void ChromeExtensionsNetworkDelegate::OnResponseStarted(
327 net::URLRequest* request) {
328 }
329
330 void ChromeExtensionsNetworkDelegate::OnCompleted(
331 net::URLRequest* request,
332 bool started) {
333 }
334
335 void ChromeExtensionsNetworkDelegate::OnURLRequestDestroyed(
336 net::URLRequest* request) {
337 }
338
339 void ChromeExtensionsNetworkDelegate::OnPACScriptError(
340 int line_number,
341 const base::string16& error) {
342 }
343
344 net::NetworkDelegate::AuthRequiredResponse
345 ChromeExtensionsNetworkDelegate::OnAuthRequired(
346 net::URLRequest* request,
347 const net::AuthChallengeInfo& auth_info,
348 const AuthCallback& callback,
349 net::AuthCredentials* credentials) {
350 return net::NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION;
351 }
OLDNEW
« no previous file with comments | « chrome/browser/net/chrome_extensions_network_delegate.h ('k') | chrome/browser/net/chrome_network_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698