summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorrobertshield@google.com <robertshield@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-22 15:00:26 +0000
committerrobertshield@google.com <robertshield@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-22 15:00:26 +0000
commit876d150b06190f15ea9c9758638f7b70714e37bd (patch)
treed503ec866563669f1668353a92b65a96ede475cb /net
parente44cdf31522aff26c27759b1a06ae6eef8b97257 (diff)
downloadchromium_src-876d150b06190f15ea9c9758638f7b70714e37bd.zip
chromium_src-876d150b06190f15ea9c9758638f7b70714e37bd.tar.gz
chromium_src-876d150b06190f15ea9c9758638f7b70714e37bd.tar.bz2
Adding the ability to alter Chrome's proxy settings via the automation interface for automated testing.
Review URL: http://codereview.chromium.org/113482 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16741 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r--net/proxy/proxy_service.cc6
-rw-r--r--net/proxy/proxy_service.h7
-rw-r--r--net/proxy/proxy_service_unittest.cc50
3 files changed, 63 insertions, 0 deletions
diff --git a/net/proxy/proxy_service.cc b/net/proxy/proxy_service.cc
index a827389..65db636 100644
--- a/net/proxy/proxy_service.cc
+++ b/net/proxy/proxy_service.cc
@@ -518,6 +518,12 @@ void ProxyService::SetProxyScriptFetcher(
proxy_script_fetcher_.reset(proxy_script_fetcher);
}
+void ProxyService::ResetConfigService(
+ ProxyConfigService* new_proxy_config_service) {
+ config_service_.reset(new_proxy_config_service);
+ UpdateConfig();
+}
+
void ProxyService::DidCompletePacRequest(int config_id, int result_code) {
// If we get an error that indicates a bad PAC config, then we should
// remember that, and not try the PAC config again for a while.
diff --git a/net/proxy/proxy_service.h b/net/proxy/proxy_service.h
index dc0c455..e12892e 100644
--- a/net/proxy/proxy_service.h
+++ b/net/proxy/proxy_service.h
@@ -86,6 +86,13 @@ class ProxyService {
// |proxy_script_fetcher|.
void SetProxyScriptFetcher(ProxyScriptFetcher* proxy_script_fetcher);
+ // Tells this ProxyService to start using a new ProxyConfigService to
+ // retrieve its ProxyConfig from. The new ProxyConfigService will immediately
+ // be queried for new config info which will be used for all subsequent
+ // ResolveProxy calls. ProxyService takes ownership of
+ // |new_proxy_config_service|.
+ void ResetConfigService(ProxyConfigService* new_proxy_config_service);
+
// Creates a proxy service using the specified settings. If |pc| is NULL then
// the system's default proxy settings will be used (on Windows this will
// use IE's settings).
diff --git a/net/proxy/proxy_service_unittest.cc b/net/proxy/proxy_service_unittest.cc
index a2b33d4..a33dfce 100644
--- a/net/proxy/proxy_service_unittest.cc
+++ b/net/proxy/proxy_service_unittest.cc
@@ -138,6 +138,14 @@ class ResultFuture : public base::RefCountedThreadSafe<ResultFuture> {
started_.Wait();
}
+ void StartResetConfigService(
+ net::ProxyConfigService* new_proxy_config_service) {
+ DCHECK(MessageLoop::current() != io_message_loop_);
+ io_message_loop_->PostTask(FROM_HERE, NewRunnableMethod(
+ this, &ResultFuture::DoResetConfigService, new_proxy_config_service));
+ started_.Wait();
+ }
+
// Called on |io_message_loop_|.
void DoStartRequest(const GURL& url, RequestMethod method) {
DCHECK(MessageLoop::current() == io_message_loop_);
@@ -150,6 +158,14 @@ class ResultFuture : public base::RefCountedThreadSafe<ResultFuture> {
}
// Called on |io_message_loop_|.
+ void DoResetConfigService(net::ProxyConfigService* new_proxy_config_service) {
+ DCHECK(MessageLoop::current() == io_message_loop_);
+ service_->ResetConfigService(new_proxy_config_service);
+ started_.Signal();
+ OnCompletion(0);
+ }
+
+ // Called on |io_message_loop_|.
void DoCancel() {
DCHECK(MessageLoop::current() == io_message_loop_);
if (!did_complete_)
@@ -230,6 +246,13 @@ class ProxyServiceWithFutures {
(*result)->StartReconsider(url, proxy_info);
}
+ void ResetConfigService(scoped_refptr<ResultFuture>* result,
+ net::ProxyConfigService* new_proxy_config_service) {
+ *result = new ResultFuture(io_thread_.message_loop(),
+ io_thread_state_->service);
+ (*result)->StartResetConfigService(new_proxy_config_service);
+ }
+
void SetProxyScriptFetcher(net::ProxyScriptFetcher* proxy_script_fetcher) {
io_thread_.message_loop()->PostTask(FROM_HERE, NewRunnableMethod(
io_thread_state_.get(), &IOThreadState::DoSetProxyScriptFetcher,
@@ -292,6 +315,12 @@ class SyncProxyService {
return result->GetResultCode();
}
+ int ResetConfigService(net::ProxyConfigService* new_proxy_config_service) {
+ scoped_refptr<ResultFuture> result;
+ service_.ResetConfigService(&result, new_proxy_config_service);
+ return result->GetResultCode();
+ }
+
private:
ProxyServiceWithFutures service_;
};
@@ -1096,3 +1125,24 @@ TEST(ProxyServiceTest, CancelWhilePACFetching) {
EXPECT_EQ("pac-v1.request3:80",
result3->GetProxyInfo().proxy_server().ToURI());
}
+
+TEST(ProxyServiceTest, ResetProxyConfigService) {
+ net::ProxyConfig config1;
+ config1.proxy_rules.ParseFromString("foopy1:8080");
+ config1.auto_detect = false;
+ scoped_ptr<SyncProxyService> service(
+ new SyncProxyService(new MockProxyConfigService(config1),
+ new MockProxyResolverWithoutFetch));
+
+ net::ProxyInfo info;
+ service->ResolveProxy(GURL("http://request1"), &info);
+ EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
+
+ net::ProxyConfig config2;
+ config2.proxy_rules.ParseFromString("foopy2:8080");
+ config2.auto_detect = false;
+ int result = service->ResetConfigService(new MockProxyConfigService(config2));
+ DCHECK(result == 0);
+ service->ResolveProxy(GURL("http://request2"), &info);
+ EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI());
+}