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 #include "chrome/browser/net/chrome_network_delegate.h" | 5 #include "chrome/browser/net/chrome_network_delegate.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "chrome/browser/custom_handlers/protocol_handler_registry.h" | 8 #include "chrome/browser/custom_handlers/protocol_handler_registry.h" |
9 #include "chrome/browser/extensions/extension_event_router_forwarder.h" | 9 #include "chrome/browser/extensions/extension_event_router_forwarder.h" |
10 #include "chrome/browser/extensions/extension_info_map.h" | 10 #include "chrome/browser/extensions/extension_info_map.h" |
11 #include "chrome/browser/extensions/extension_proxy_api.h" | 11 #include "chrome/browser/extensions/extension_proxy_api.h" |
12 #include "chrome/browser/extensions/extension_webrequest_api.h" | 12 #include "chrome/browser/extensions/extension_webrequest_api.h" |
| 13 #include "chrome/browser/policy/url_blacklist_manager.h" |
13 #include "chrome/browser/prefs/pref_member.h" | 14 #include "chrome/browser/prefs/pref_member.h" |
14 #include "chrome/browser/task_manager/task_manager.h" | 15 #include "chrome/browser/task_manager/task_manager.h" |
15 #include "chrome/common/pref_names.h" | 16 #include "chrome/common/pref_names.h" |
16 #include "content/browser/browser_thread.h" | 17 #include "content/browser/browser_thread.h" |
17 #include "net/base/host_port_pair.h" | 18 #include "net/base/host_port_pair.h" |
18 #include "net/base/net_errors.h" | 19 #include "net/base/net_errors.h" |
| 20 #include "net/base/net_log.h" |
19 #include "net/http/http_request_headers.h" | 21 #include "net/http/http_request_headers.h" |
20 #include "net/http/http_response_headers.h" | 22 #include "net/http/http_response_headers.h" |
21 #include "net/url_request/url_request.h" | 23 #include "net/url_request/url_request.h" |
22 | 24 |
23 namespace { | 25 namespace { |
24 | 26 |
25 // If the |request| failed due to problems with a proxy, forward the error to | 27 // If the |request| failed due to problems with a proxy, forward the error to |
26 // the proxy extension API. | 28 // the proxy extension API. |
27 void ForwardProxyErrors(net::URLRequest* request, | 29 void ForwardProxyErrors(net::URLRequest* request, |
28 ExtensionEventRouterForwarder* event_router, | 30 ExtensionEventRouterForwarder* event_router, |
29 void* profile) { | 31 void* profile) { |
30 if (request->status().status() == net::URLRequestStatus::FAILED) { | 32 if (request->status().status() == net::URLRequestStatus::FAILED) { |
31 switch (request->status().os_error()) { | 33 switch (request->status().os_error()) { |
32 case net::ERR_PROXY_AUTH_UNSUPPORTED: | 34 case net::ERR_PROXY_AUTH_UNSUPPORTED: |
33 case net::ERR_PROXY_CONNECTION_FAILED: | 35 case net::ERR_PROXY_CONNECTION_FAILED: |
34 case net::ERR_TUNNEL_CONNECTION_FAILED: | 36 case net::ERR_TUNNEL_CONNECTION_FAILED: |
35 ExtensionProxyEventRouter::GetInstance()->OnProxyError( | 37 ExtensionProxyEventRouter::GetInstance()->OnProxyError( |
36 event_router, profile, request->status().os_error()); | 38 event_router, profile, request->status().os_error()); |
37 } | 39 } |
38 } | 40 } |
39 } | 41 } |
40 | 42 |
41 } // namespace | 43 } // namespace |
42 | 44 |
43 ChromeNetworkDelegate::ChromeNetworkDelegate( | 45 ChromeNetworkDelegate::ChromeNetworkDelegate( |
44 ExtensionEventRouterForwarder* event_router, | 46 ExtensionEventRouterForwarder* event_router, |
45 ExtensionInfoMap* extension_info_map, | 47 ExtensionInfoMap* extension_info_map, |
| 48 const policy::URLBlacklistManager* url_blacklist_manager, |
46 void* profile, | 49 void* profile, |
47 BooleanPrefMember* enable_referrers) | 50 BooleanPrefMember* enable_referrers) |
48 : event_router_(event_router), | 51 : event_router_(event_router), |
49 profile_(profile), | 52 profile_(profile), |
50 extension_info_map_(extension_info_map), | 53 extension_info_map_(extension_info_map), |
51 enable_referrers_(enable_referrers) { | 54 enable_referrers_(enable_referrers), |
| 55 url_blacklist_manager_(url_blacklist_manager) { |
52 DCHECK(event_router); | 56 DCHECK(event_router); |
53 DCHECK(enable_referrers); | 57 DCHECK(enable_referrers); |
54 } | 58 } |
55 | 59 |
56 ChromeNetworkDelegate::~ChromeNetworkDelegate() {} | 60 ChromeNetworkDelegate::~ChromeNetworkDelegate() {} |
57 | 61 |
58 // static | 62 // static |
59 void ChromeNetworkDelegate::InitializeReferrersEnabled( | 63 void ChromeNetworkDelegate::InitializeReferrersEnabled( |
60 BooleanPrefMember* enable_referrers, | 64 BooleanPrefMember* enable_referrers, |
61 PrefService* pref_service) { | 65 PrefService* pref_service) { |
62 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 66 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
63 enable_referrers->Init(prefs::kEnableReferrers, pref_service, NULL); | 67 enable_referrers->Init(prefs::kEnableReferrers, pref_service, NULL); |
64 enable_referrers->MoveToThread(BrowserThread::IO); | 68 enable_referrers->MoveToThread(BrowserThread::IO); |
65 } | 69 } |
66 | 70 |
67 int ChromeNetworkDelegate::OnBeforeURLRequest( | 71 int ChromeNetworkDelegate::OnBeforeURLRequest( |
68 net::URLRequest* request, | 72 net::URLRequest* request, |
69 net::CompletionCallback* callback, | 73 net::CompletionCallback* callback, |
70 GURL* new_url) { | 74 GURL* new_url) { |
| 75 // TODO(joaodasilva): This prevents extensions from seeing URLs that are |
| 76 // blocked. However, an extension might redirect the request to another URL, |
| 77 // which is not blocked. |
| 78 if (url_blacklist_manager_ && |
| 79 url_blacklist_manager_->IsURLBlocked(request->url())) { |
| 80 // URL access blocked by policy. |
| 81 scoped_refptr<net::NetLog::EventParameters> params; |
| 82 params = new net::NetLogStringParameter("url", request->url().spec()); |
| 83 request->net_log().AddEvent( |
| 84 net::NetLog::TYPE_CHROME_POLICY_ABORTED_REQUEST, params); |
| 85 return net::ERR_NETWORK_ACCESS_DENIED; |
| 86 } |
| 87 |
71 if (!enable_referrers_->GetValue()) | 88 if (!enable_referrers_->GetValue()) |
72 request->set_referrer(std::string()); | 89 request->set_referrer(std::string()); |
73 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest( | 90 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest( |
74 profile_, extension_info_map_.get(), request, callback, new_url); | 91 profile_, extension_info_map_.get(), request, callback, new_url); |
75 } | 92 } |
76 | 93 |
77 int ChromeNetworkDelegate::OnBeforeSendHeaders( | 94 int ChromeNetworkDelegate::OnBeforeSendHeaders( |
78 net::URLRequest* request, | 95 net::URLRequest* request, |
79 net::CompletionCallback* callback, | 96 net::CompletionCallback* callback, |
80 net::HttpRequestHeaders* headers) { | 97 net::HttpRequestHeaders* headers) { |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 ExtensionProxyEventRouter::GetInstance()->OnPACScriptError( | 154 ExtensionProxyEventRouter::GetInstance()->OnPACScriptError( |
138 event_router_.get(), profile_, line_number, error); | 155 event_router_.get(), profile_, line_number, error); |
139 } | 156 } |
140 | 157 |
141 void ChromeNetworkDelegate::OnAuthRequired( | 158 void ChromeNetworkDelegate::OnAuthRequired( |
142 net::URLRequest* request, | 159 net::URLRequest* request, |
143 const net::AuthChallengeInfo& auth_info) { | 160 const net::AuthChallengeInfo& auth_info) { |
144 ExtensionWebRequestEventRouter::GetInstance()->OnAuthRequired( | 161 ExtensionWebRequestEventRouter::GetInstance()->OnAuthRequired( |
145 profile_, extension_info_map_.get(), request, auth_info); | 162 profile_, extension_info_map_.get(), request, auth_info); |
146 } | 163 } |
OLD | NEW |