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

Side by Side Diff: net/proxy/proxy_resolver_factory.cc

Issue 1102463002: Add a MockAsyncProxyResolverFactory and update some tests to use it. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@proxy-factory-refactor
Patch Set: rebase Created 5 years, 7 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
« no previous file with comments | « net/proxy/proxy_resolver_factory.h ('k') | net/proxy/proxy_resolver_factory_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_resolver_factory.h" 5 #include "net/proxy/proxy_resolver_factory.h"
6 6
7 #include "net/base/net_errors.h" 7 #include "net/base/net_errors.h"
8 #include "net/proxy/proxy_resolver.h" 8 #include "net/proxy/proxy_resolver.h"
9 9
10 namespace net { 10 namespace net {
11 namespace {
12 11
13 class Job : public ProxyResolverFactory::Request { 12 class LegacyProxyResolverFactory::Job : public ProxyResolverFactory::Request {
14 public: 13 public:
15 Job(const scoped_refptr<ProxyResolverScriptData>& pac_script, 14 Job(LegacyProxyResolverFactory* factory,
15 const scoped_refptr<ProxyResolverScriptData>& pac_script,
16 scoped_ptr<ProxyResolver> resolver, 16 scoped_ptr<ProxyResolver> resolver,
17 scoped_ptr<ProxyResolver>* resolver_out, 17 scoped_ptr<ProxyResolver>* resolver_out,
18 const net::CompletionCallback& callback); 18 const net::CompletionCallback& callback);
19 ~Job() override; 19 ~Job() override;
20 int Start(); 20 int Start();
21 21
22 void FactoryDestroyed();
23
22 private: 24 private:
23 void OnSetPacScriptDone(int error); 25 void OnSetPacScriptDone(int error);
24 26
27 LegacyProxyResolverFactory* factory_;
25 const scoped_refptr<ProxyResolverScriptData> pac_script_; 28 const scoped_refptr<ProxyResolverScriptData> pac_script_;
26 scoped_ptr<ProxyResolver> resolver_; 29 scoped_ptr<ProxyResolver> resolver_;
27 scoped_ptr<ProxyResolver>* resolver_out_; 30 scoped_ptr<ProxyResolver>* resolver_out_;
28 const net::CompletionCallback callback_; 31 const net::CompletionCallback callback_;
29 bool in_progress_;
30 }; 32 };
31 33
32 Job::Job(const scoped_refptr<ProxyResolverScriptData>& pac_script, 34 LegacyProxyResolverFactory::Job::Job(
33 scoped_ptr<ProxyResolver> resolver, 35 LegacyProxyResolverFactory* factory,
34 scoped_ptr<ProxyResolver>* resolver_out, 36 const scoped_refptr<ProxyResolverScriptData>& pac_script,
35 const net::CompletionCallback& callback) 37 scoped_ptr<ProxyResolver> resolver,
36 : pac_script_(pac_script), 38 scoped_ptr<ProxyResolver>* resolver_out,
39 const net::CompletionCallback& callback)
40 : factory_(factory),
41 pac_script_(pac_script),
37 resolver_(resolver.Pass()), 42 resolver_(resolver.Pass()),
38 resolver_out_(resolver_out), 43 resolver_out_(resolver_out),
39 callback_(callback), 44 callback_(callback) {
40 in_progress_(false) {
41 } 45 }
42 46
43 Job::~Job() { 47 LegacyProxyResolverFactory::Job::~Job() {
44 if (in_progress_) 48 if (factory_) {
45 resolver_->CancelSetPacScript(); 49 resolver_->CancelSetPacScript();
50 factory_->RemoveJob(this);
51 }
46 } 52 }
47 53
48 int Job::Start() { 54 int LegacyProxyResolverFactory::Job::Start() {
49 int error = resolver_->SetPacScript( 55 int error = resolver_->SetPacScript(
50 pac_script_, 56 pac_script_,
51 base::Bind(&Job::OnSetPacScriptDone, base::Unretained(this))); 57 base::Bind(&Job::OnSetPacScriptDone, base::Unretained(this)));
52 if (error != ERR_IO_PENDING) { 58 if (error != ERR_IO_PENDING) {
59 factory_ = nullptr;
53 if (error == OK) 60 if (error == OK)
54 *resolver_out_ = resolver_.Pass(); 61 *resolver_out_ = resolver_.Pass();
55 return error; 62 return error;
56 } 63 }
57 64
58 in_progress_ = true;
59 return ERR_IO_PENDING; 65 return ERR_IO_PENDING;
60 } 66 }
61 67
62 void Job::OnSetPacScriptDone(int error) { 68 void LegacyProxyResolverFactory::Job::FactoryDestroyed() {
69 factory_ = nullptr;
70 resolver_->CancelSetPacScript();
71 }
72
73 void LegacyProxyResolverFactory::Job::OnSetPacScriptDone(int error) {
74 factory_->RemoveJob(this);
63 if (error == OK) 75 if (error == OK)
64 *resolver_out_ = resolver_.Pass(); 76 *resolver_out_ = resolver_.Pass();
65 77
66 CompletionCallback callback = callback_; 78 CompletionCallback callback = callback_;
67 in_progress_ = false; 79 factory_ = nullptr;
68 if (!callback.is_null()) 80 if (!callback.is_null())
69 callback.Run(error); 81 callback.Run(error);
70 } 82 }
71 83
72 } // namespace
73
74 ProxyResolverFactory::ProxyResolverFactory(bool expects_pac_bytes) 84 ProxyResolverFactory::ProxyResolverFactory(bool expects_pac_bytes)
75 : expects_pac_bytes_(expects_pac_bytes) { 85 : expects_pac_bytes_(expects_pac_bytes) {
76 } 86 }
77 87
78 ProxyResolverFactory::~ProxyResolverFactory() { 88 ProxyResolverFactory::~ProxyResolverFactory() {
79 } 89 }
80 90
81 LegacyProxyResolverFactory::LegacyProxyResolverFactory(bool expects_pac_bytes) 91 LegacyProxyResolverFactory::LegacyProxyResolverFactory(bool expects_pac_bytes)
82 : ProxyResolverFactory(expects_pac_bytes) { 92 : ProxyResolverFactory(expects_pac_bytes) {
83 } 93 }
84 94
85 LegacyProxyResolverFactory::~LegacyProxyResolverFactory() { 95 LegacyProxyResolverFactory::~LegacyProxyResolverFactory() {
96 for (auto job : jobs_) {
97 job->FactoryDestroyed();
98 }
86 } 99 }
87 100
88 int LegacyProxyResolverFactory::CreateProxyResolver( 101 int LegacyProxyResolverFactory::CreateProxyResolver(
89 const scoped_refptr<ProxyResolverScriptData>& pac_script, 102 const scoped_refptr<ProxyResolverScriptData>& pac_script,
90 scoped_ptr<ProxyResolver>* resolver, 103 scoped_ptr<ProxyResolver>* resolver,
91 const net::CompletionCallback& callback, 104 const net::CompletionCallback& callback,
92 scoped_ptr<ProxyResolverFactory::Request>* request) { 105 scoped_ptr<ProxyResolverFactory::Request>* request) {
93 scoped_ptr<Job> job( 106 scoped_ptr<Job> job(
94 new Job(pac_script, CreateProxyResolver(), resolver, callback)); 107 new Job(this, pac_script, CreateProxyResolver(), resolver, callback));
95 int error = job->Start(); 108 int error = job->Start();
96 if (error != ERR_IO_PENDING) 109 if (error != ERR_IO_PENDING)
97 return error; 110 return error;
98 111
112 jobs_.insert(job.get());
99 *request = job.Pass(); 113 *request = job.Pass();
100 return ERR_IO_PENDING; 114 return ERR_IO_PENDING;
101 } 115 }
102 116
117 void LegacyProxyResolverFactory::RemoveJob(Job* job) {
118 size_t erased = jobs_.erase(job);
119 DCHECK_EQ(1u, erased);
120 }
121
103 } // namespace net 122 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_resolver_factory.h ('k') | net/proxy/proxy_resolver_factory_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698