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 <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 // ProxyService::SuspendAllPendingRequests(). | 31 // ProxyService::SuspendAllPendingRequests(). |
32 namespace net { | 32 namespace net { |
33 namespace { | 33 namespace { |
34 | 34 |
35 // This polling policy will decide to poll every 1 ms. | 35 // This polling policy will decide to poll every 1 ms. |
36 class ImmediatePollPolicy : public ProxyService::PacPollPolicy { | 36 class ImmediatePollPolicy : public ProxyService::PacPollPolicy { |
37 public: | 37 public: |
38 ImmediatePollPolicy() {} | 38 ImmediatePollPolicy() {} |
39 | 39 |
40 virtual Mode GetNextDelay(int error, base::TimeDelta current_delay, | 40 virtual Mode GetNextDelay(int error, base::TimeDelta current_delay, |
41 base::TimeDelta* next_delay) const OVERRIDE { | 41 base::TimeDelta* next_delay) const override { |
42 *next_delay = base::TimeDelta::FromMilliseconds(1); | 42 *next_delay = base::TimeDelta::FromMilliseconds(1); |
43 return MODE_USE_TIMER; | 43 return MODE_USE_TIMER; |
44 } | 44 } |
45 | 45 |
46 private: | 46 private: |
47 DISALLOW_COPY_AND_ASSIGN(ImmediatePollPolicy); | 47 DISALLOW_COPY_AND_ASSIGN(ImmediatePollPolicy); |
48 }; | 48 }; |
49 | 49 |
50 // This polling policy chooses a fantastically large delay. In other words, it | 50 // This polling policy chooses a fantastically large delay. In other words, it |
51 // will never trigger a poll | 51 // will never trigger a poll |
52 class NeverPollPolicy : public ProxyService::PacPollPolicy { | 52 class NeverPollPolicy : public ProxyService::PacPollPolicy { |
53 public: | 53 public: |
54 NeverPollPolicy() {} | 54 NeverPollPolicy() {} |
55 | 55 |
56 virtual Mode GetNextDelay(int error, base::TimeDelta current_delay, | 56 virtual Mode GetNextDelay(int error, base::TimeDelta current_delay, |
57 base::TimeDelta* next_delay) const OVERRIDE { | 57 base::TimeDelta* next_delay) const override { |
58 *next_delay = base::TimeDelta::FromDays(60); | 58 *next_delay = base::TimeDelta::FromDays(60); |
59 return MODE_USE_TIMER; | 59 return MODE_USE_TIMER; |
60 } | 60 } |
61 | 61 |
62 private: | 62 private: |
63 DISALLOW_COPY_AND_ASSIGN(NeverPollPolicy); | 63 DISALLOW_COPY_AND_ASSIGN(NeverPollPolicy); |
64 }; | 64 }; |
65 | 65 |
66 // This polling policy starts a poll immediately after network activity. | 66 // This polling policy starts a poll immediately after network activity. |
67 class ImmediateAfterActivityPollPolicy : public ProxyService::PacPollPolicy { | 67 class ImmediateAfterActivityPollPolicy : public ProxyService::PacPollPolicy { |
68 public: | 68 public: |
69 ImmediateAfterActivityPollPolicy() {} | 69 ImmediateAfterActivityPollPolicy() {} |
70 | 70 |
71 virtual Mode GetNextDelay(int error, base::TimeDelta current_delay, | 71 virtual Mode GetNextDelay(int error, base::TimeDelta current_delay, |
72 base::TimeDelta* next_delay) const OVERRIDE { | 72 base::TimeDelta* next_delay) const override { |
73 *next_delay = base::TimeDelta(); | 73 *next_delay = base::TimeDelta(); |
74 return MODE_START_AFTER_ACTIVITY; | 74 return MODE_START_AFTER_ACTIVITY; |
75 } | 75 } |
76 | 76 |
77 private: | 77 private: |
78 DISALLOW_COPY_AND_ASSIGN(ImmediateAfterActivityPollPolicy); | 78 DISALLOW_COPY_AND_ASSIGN(ImmediateAfterActivityPollPolicy); |
79 }; | 79 }; |
80 | 80 |
81 // This test fixture is used to partially disable the background polling done by | 81 // This test fixture is used to partially disable the background polling done by |
82 // the ProxyService (which it uses to detect whenever its PAC script contents or | 82 // the ProxyService (which it uses to detect whenever its PAC script contents or |
83 // WPAD results have changed). | 83 // WPAD results have changed). |
84 // | 84 // |
85 // We disable the feature by setting the poll interval to something really | 85 // We disable the feature by setting the poll interval to something really |
86 // large, so it will never actually be reached even on the slowest bots that run | 86 // large, so it will never actually be reached even on the slowest bots that run |
87 // these tests. | 87 // these tests. |
88 // | 88 // |
89 // We disable the polling in order to avoid any timing dependencies in the | 89 // We disable the polling in order to avoid any timing dependencies in the |
90 // tests. If the bot were to run the tests very slowly and we hadn't disabled | 90 // tests. If the bot were to run the tests very slowly and we hadn't disabled |
91 // polling, then it might start a background re-try in the middle of our test | 91 // polling, then it might start a background re-try in the middle of our test |
92 // and confuse our expectations leading to flaky failures. | 92 // and confuse our expectations leading to flaky failures. |
93 // | 93 // |
94 // The tests which verify the polling code re-enable the polling behavior but | 94 // The tests which verify the polling code re-enable the polling behavior but |
95 // are careful to avoid timing problems. | 95 // are careful to avoid timing problems. |
96 class ProxyServiceTest : public testing::Test { | 96 class ProxyServiceTest : public testing::Test { |
97 protected: | 97 protected: |
98 virtual void SetUp() OVERRIDE { | 98 virtual void SetUp() override { |
99 testing::Test::SetUp(); | 99 testing::Test::SetUp(); |
100 previous_policy_ = | 100 previous_policy_ = |
101 ProxyService::set_pac_script_poll_policy(&never_poll_policy_); | 101 ProxyService::set_pac_script_poll_policy(&never_poll_policy_); |
102 } | 102 } |
103 | 103 |
104 virtual void TearDown() OVERRIDE { | 104 virtual void TearDown() override { |
105 // Restore the original policy. | 105 // Restore the original policy. |
106 ProxyService::set_pac_script_poll_policy(previous_policy_); | 106 ProxyService::set_pac_script_poll_policy(previous_policy_); |
107 testing::Test::TearDown(); | 107 testing::Test::TearDown(); |
108 } | 108 } |
109 | 109 |
110 private: | 110 private: |
111 NeverPollPolicy never_poll_policy_; | 111 NeverPollPolicy never_poll_policy_; |
112 const ProxyService::PacPollPolicy* previous_policy_; | 112 const ProxyService::PacPollPolicy* previous_policy_; |
113 }; | 113 }; |
114 | 114 |
115 const char kValidPacScript1[] = "pac-script-v1-FindProxyForURL"; | 115 const char kValidPacScript1[] = "pac-script-v1-FindProxyForURL"; |
116 const char kValidPacScript2[] = "pac-script-v2-FindProxyForURL"; | 116 const char kValidPacScript2[] = "pac-script-v2-FindProxyForURL"; |
117 | 117 |
118 class MockProxyConfigService: public ProxyConfigService { | 118 class MockProxyConfigService: public ProxyConfigService { |
119 public: | 119 public: |
120 explicit MockProxyConfigService(const ProxyConfig& config) | 120 explicit MockProxyConfigService(const ProxyConfig& config) |
121 : availability_(CONFIG_VALID), | 121 : availability_(CONFIG_VALID), |
122 config_(config) { | 122 config_(config) { |
123 } | 123 } |
124 | 124 |
125 explicit MockProxyConfigService(const std::string& pac_url) | 125 explicit MockProxyConfigService(const std::string& pac_url) |
126 : availability_(CONFIG_VALID), | 126 : availability_(CONFIG_VALID), |
127 config_(ProxyConfig::CreateFromCustomPacURL(GURL(pac_url))) { | 127 config_(ProxyConfig::CreateFromCustomPacURL(GURL(pac_url))) { |
128 } | 128 } |
129 | 129 |
130 virtual void AddObserver(Observer* observer) OVERRIDE { | 130 virtual void AddObserver(Observer* observer) override { |
131 observers_.AddObserver(observer); | 131 observers_.AddObserver(observer); |
132 } | 132 } |
133 | 133 |
134 virtual void RemoveObserver(Observer* observer) OVERRIDE { | 134 virtual void RemoveObserver(Observer* observer) override { |
135 observers_.RemoveObserver(observer); | 135 observers_.RemoveObserver(observer); |
136 } | 136 } |
137 | 137 |
138 virtual ConfigAvailability GetLatestProxyConfig(ProxyConfig* results) | 138 virtual ConfigAvailability GetLatestProxyConfig(ProxyConfig* results) |
139 OVERRIDE { | 139 override { |
140 if (availability_ == CONFIG_VALID) | 140 if (availability_ == CONFIG_VALID) |
141 *results = config_; | 141 *results = config_; |
142 return availability_; | 142 return availability_; |
143 } | 143 } |
144 | 144 |
145 void SetConfig(const ProxyConfig& config) { | 145 void SetConfig(const ProxyConfig& config) { |
146 availability_ = CONFIG_VALID; | 146 availability_ = CONFIG_VALID; |
147 config_ = config; | 147 config_ = config; |
148 FOR_EACH_OBSERVER(Observer, observers_, | 148 FOR_EACH_OBSERVER(Observer, observers_, |
149 OnProxyConfigChanged(config_, availability_)); | 149 OnProxyConfigChanged(config_, availability_)); |
(...skipping 11 matching lines...) Expand all Loading... |
161 TestResolveProxyNetworkDelegate() | 161 TestResolveProxyNetworkDelegate() |
162 : on_resolve_proxy_called_(false), | 162 : on_resolve_proxy_called_(false), |
163 add_proxy_(false), | 163 add_proxy_(false), |
164 remove_proxy_(false), | 164 remove_proxy_(false), |
165 proxy_service_(NULL) { | 165 proxy_service_(NULL) { |
166 } | 166 } |
167 | 167 |
168 virtual void OnResolveProxy(const GURL& url, | 168 virtual void OnResolveProxy(const GURL& url, |
169 int load_flags, | 169 int load_flags, |
170 const ProxyService& proxy_service, | 170 const ProxyService& proxy_service, |
171 ProxyInfo* result) OVERRIDE { | 171 ProxyInfo* result) override { |
172 on_resolve_proxy_called_ = true; | 172 on_resolve_proxy_called_ = true; |
173 proxy_service_ = &proxy_service; | 173 proxy_service_ = &proxy_service; |
174 DCHECK(!add_proxy_ || !remove_proxy_); | 174 DCHECK(!add_proxy_ || !remove_proxy_); |
175 if (add_proxy_) { | 175 if (add_proxy_) { |
176 result->UseNamedProxy("delegate_proxy.com"); | 176 result->UseNamedProxy("delegate_proxy.com"); |
177 } else if (remove_proxy_) { | 177 } else if (remove_proxy_) { |
178 result->UseDirect(); | 178 result->UseDirect(); |
179 } | 179 } |
180 } | 180 } |
181 | 181 |
(...skipping 22 matching lines...) Expand all Loading... |
204 | 204 |
205 // A test network delegate that exercises the OnProxyFallback callback. | 205 // A test network delegate that exercises the OnProxyFallback callback. |
206 class TestProxyFallbackNetworkDelegate : public NetworkDelegate { | 206 class TestProxyFallbackNetworkDelegate : public NetworkDelegate { |
207 public: | 207 public: |
208 TestProxyFallbackNetworkDelegate() | 208 TestProxyFallbackNetworkDelegate() |
209 : on_proxy_fallback_called_(false), | 209 : on_proxy_fallback_called_(false), |
210 proxy_fallback_net_error_(OK) { | 210 proxy_fallback_net_error_(OK) { |
211 } | 211 } |
212 | 212 |
213 virtual void OnProxyFallback(const ProxyServer& proxy_server, | 213 virtual void OnProxyFallback(const ProxyServer& proxy_server, |
214 int net_error) OVERRIDE { | 214 int net_error) override { |
215 proxy_server_ = proxy_server; | 215 proxy_server_ = proxy_server; |
216 proxy_fallback_net_error_ = net_error; | 216 proxy_fallback_net_error_ = net_error; |
217 on_proxy_fallback_called_ = true; | 217 on_proxy_fallback_called_ = true; |
218 } | 218 } |
219 | 219 |
220 bool on_proxy_fallback_called() const { | 220 bool on_proxy_fallback_called() const { |
221 return on_proxy_fallback_called_; | 221 return on_proxy_fallback_called_; |
222 } | 222 } |
223 | 223 |
224 const ProxyServer& proxy_server() const { | 224 const ProxyServer& proxy_server() const { |
(...skipping 2850 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3075 ProxyInfo info3; | 3075 ProxyInfo info3; |
3076 TestCompletionCallback callback3; | 3076 TestCompletionCallback callback3; |
3077 rv = service.ResolveProxy( | 3077 rv = service.ResolveProxy( |
3078 GURL("http://request3"), net::LOAD_NORMAL, &info3, callback3.callback(), | 3078 GURL("http://request3"), net::LOAD_NORMAL, &info3, callback3.callback(), |
3079 NULL, NULL, BoundNetLog()); | 3079 NULL, NULL, BoundNetLog()); |
3080 EXPECT_EQ(OK, rv); | 3080 EXPECT_EQ(OK, rv); |
3081 EXPECT_TRUE(info3.is_direct()); | 3081 EXPECT_TRUE(info3.is_direct()); |
3082 } | 3082 } |
3083 | 3083 |
3084 } // namespace net | 3084 } // namespace net |
OLD | NEW |