OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/proxy/proxy_service.h" | 5 #include "net/proxy/proxy_service.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 961 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
972 NULL); | 972 NULL); |
973 } | 973 } |
974 | 974 |
975 int ProxyService::ResolveProxy(const GURL& raw_url, | 975 int ProxyService::ResolveProxy(const GURL& raw_url, |
976 int load_flags, | 976 int load_flags, |
977 ProxyInfo* result, | 977 ProxyInfo* result, |
978 const net::CompletionCallback& callback, | 978 const net::CompletionCallback& callback, |
979 PacRequest** pac_request, | 979 PacRequest** pac_request, |
980 NetworkDelegate* network_delegate, | 980 NetworkDelegate* network_delegate, |
981 const BoundNetLog& net_log) { | 981 const BoundNetLog& net_log) { |
982 DCHECK(!callback.is_null()); | |
983 return ResolveProxyHelper(raw_url, | |
984 load_flags, | |
985 result, | |
986 callback, | |
987 pac_request, | |
988 network_delegate, | |
989 net_log); | |
990 } | |
991 | |
992 int ProxyService::ResolveProxyHelper(const GURL& raw_url, | |
993 int load_flags, | |
994 ProxyInfo* result, | |
995 const net::CompletionCallback& callback, | |
996 PacRequest** pac_request, | |
997 NetworkDelegate* network_delegate, | |
998 const BoundNetLog& net_log) { | |
982 DCHECK(CalledOnValidThread()); | 999 DCHECK(CalledOnValidThread()); |
983 DCHECK(!callback.is_null()); | |
984 | 1000 |
985 net_log.BeginEvent(NetLog::TYPE_PROXY_SERVICE); | 1001 net_log.BeginEvent(NetLog::TYPE_PROXY_SERVICE); |
986 | 1002 |
987 // Notify our polling-based dependencies that a resolve is taking place. | 1003 // Notify our polling-based dependencies that a resolve is taking place. |
988 // This way they can schedule their polls in response to network activity. | 1004 // This way they can schedule their polls in response to network activity. |
989 config_service_->OnLazyPoll(); | 1005 config_service_->OnLazyPoll(); |
990 if (script_poller_.get()) | 1006 if (script_poller_.get()) |
991 script_poller_->OnLazyPoll(); | 1007 script_poller_->OnLazyPoll(); |
992 | 1008 |
993 if (current_state_ == STATE_NONE) | 1009 if (current_state_ == STATE_NONE) |
994 ApplyProxyConfigIfAvailable(); | 1010 ApplyProxyConfigIfAvailable(); |
995 | 1011 |
996 // Strip away any reference fragments and the username/password, as they | 1012 // Strip away any reference fragments and the username/password, as they |
997 // are not relevant to proxy resolution. | 1013 // are not relevant to proxy resolution. |
998 GURL url = SimplifyUrlForRequest(raw_url); | 1014 GURL url = SimplifyUrlForRequest(raw_url); |
999 | 1015 |
1000 // Check if the request can be completed right away. (This is the case when | 1016 // Check if the request can be completed right away. (This is the case when |
1001 // using a direct connection for example). | 1017 // using a direct connection for example). |
1002 int rv = TryToCompleteSynchronously(url, load_flags, | 1018 int rv = TryToCompleteSynchronously(url, load_flags, |
1003 network_delegate, result); | 1019 network_delegate, result); |
1004 if (rv != ERR_IO_PENDING) | 1020 if (rv != ERR_IO_PENDING) |
1005 return DidFinishResolvingProxy(url, load_flags, network_delegate, | 1021 return DidFinishResolvingProxy(url, load_flags, network_delegate, |
1006 result, rv, net_log); | 1022 result, rv, net_log); |
1007 | 1023 |
1024 if (callback.is_null()) | |
1025 return ERR_IO_PENDING; | |
1026 | |
1008 scoped_refptr<PacRequest> req( | 1027 scoped_refptr<PacRequest> req( |
1009 new PacRequest(this, url, load_flags, network_delegate, | 1028 new PacRequest(this, url, load_flags, network_delegate, |
1010 result, callback, net_log)); | 1029 result, callback, net_log)); |
1011 | 1030 |
1012 if (current_state_ == STATE_READY) { | 1031 if (current_state_ == STATE_READY) { |
1013 // Start the resolve request. | 1032 // Start the resolve request. |
1014 rv = req->Start(); | 1033 rv = req->Start(); |
1015 if (rv != ERR_IO_PENDING) | 1034 if (rv != ERR_IO_PENDING) |
1016 return req->QueryDidComplete(rv); | 1035 return req->QueryDidComplete(rv); |
1017 } else { | 1036 } else { |
1018 req->net_log()->BeginEvent(NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC); | 1037 req->net_log()->BeginEvent(NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC); |
1019 } | 1038 } |
1020 | 1039 |
1021 DCHECK_EQ(ERR_IO_PENDING, rv); | 1040 DCHECK_EQ(ERR_IO_PENDING, rv); |
1022 DCHECK(!ContainsPendingRequest(req.get())); | 1041 DCHECK(!ContainsPendingRequest(req.get())); |
1023 pending_requests_.push_back(req); | 1042 pending_requests_.push_back(req); |
1024 | 1043 |
1025 // Completion will be notified through |callback|, unless the caller cancels | 1044 // Completion will be notified through |callback|, unless the caller cancels |
1026 // the request using |pac_request|. | 1045 // the request using |pac_request|. |
1027 if (pac_request) | 1046 if (pac_request) |
1028 *pac_request = req.get(); | 1047 *pac_request = req.get(); |
1029 return rv; // ERR_IO_PENDING | 1048 return rv; // ERR_IO_PENDING |
1030 } | 1049 } |
1031 | 1050 |
1051 bool ProxyService:: TryResolveProxySynchronously( | |
1052 const GURL& raw_url, | |
1053 int load_flags, | |
1054 ProxyInfo* result, | |
1055 NetworkDelegate* network_delegate, | |
1056 const BoundNetLog& net_log) { | |
1057 net::CompletionCallback null_callback; | |
1058 return ResolveProxyHelper(raw_url, | |
1059 load_flags, | |
1060 result, | |
1061 null_callback, | |
1062 NULL /* pac_request*/, | |
1063 network_delegate, | |
1064 net_log) == net::OK; | |
eroman
2014/10/14 21:16:33
nit: no need for "net::" since this is inside the
bemasc
2014/10/20 20:49:50
Done.
| |
1065 } | |
1066 | |
1032 int ProxyService::TryToCompleteSynchronously(const GURL& url, | 1067 int ProxyService::TryToCompleteSynchronously(const GURL& url, |
1033 int load_flags, | 1068 int load_flags, |
1034 NetworkDelegate* network_delegate, | 1069 NetworkDelegate* network_delegate, |
1035 ProxyInfo* result) { | 1070 ProxyInfo* result) { |
1036 DCHECK_NE(STATE_NONE, current_state_); | 1071 DCHECK_NE(STATE_NONE, current_state_); |
1037 | 1072 |
1038 if (current_state_ != STATE_READY) | 1073 if (current_state_ != STATE_READY) |
1039 return ERR_IO_PENDING; // Still initializing. | 1074 return ERR_IO_PENDING; // Still initializing. |
1040 | 1075 |
1041 DCHECK_NE(config_.id(), ProxyConfig::kInvalidConfigID); | 1076 DCHECK_NE(config_.id(), ProxyConfig::kInvalidConfigID); |
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1554 State previous_state = ResetProxyConfig(false); | 1589 State previous_state = ResetProxyConfig(false); |
1555 if (previous_state != STATE_NONE) | 1590 if (previous_state != STATE_NONE) |
1556 ApplyProxyConfigIfAvailable(); | 1591 ApplyProxyConfigIfAvailable(); |
1557 } | 1592 } |
1558 | 1593 |
1559 void ProxyService::OnDNSChanged() { | 1594 void ProxyService::OnDNSChanged() { |
1560 OnIPAddressChanged(); | 1595 OnIPAddressChanged(); |
1561 } | 1596 } |
1562 | 1597 |
1563 } // namespace net | 1598 } // namespace net |
OLD | NEW |