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

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

Issue 939503004: Add LoadState reporting to the mojo proxy resolver. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@proxy-resolver-mojo
Patch Set: rebase Created 5 years, 9 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/mojo_proxy_resolver_impl.h ('k') | net/proxy/mojo_proxy_resolver_impl_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/mojo_proxy_resolver_impl.h" 5 #include "net/proxy/mojo_proxy_resolver_impl.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "mojo/common/url_type_converters.h" 8 #include "mojo/common/url_type_converters.h"
9 #include "net/base/net_errors.h" 9 #include "net/base/net_errors.h"
10 #include "net/base/net_log.h" 10 #include "net/base/net_log.h"
11 #include "net/proxy/mojo_proxy_type_converters.h" 11 #include "net/proxy/mojo_proxy_type_converters.h"
12 #include "net/proxy/proxy_info.h" 12 #include "net/proxy/proxy_info.h"
13 #include "net/proxy/proxy_resolver.h"
14 #include "net/proxy/proxy_resolver_script_data.h" 13 #include "net/proxy/proxy_resolver_script_data.h"
15 14
16 namespace net { 15 namespace net {
17 16
18 class MojoProxyResolverImpl::Job : public mojo::ErrorHandler { 17 class MojoProxyResolverImpl::Job : public mojo::ErrorHandler {
19 public: 18 public:
20 Job(interfaces::ProxyResolverRequestClientPtr client, 19 Job(interfaces::ProxyResolverRequestClientPtr client,
21 MojoProxyResolverImpl* resolver, 20 MojoProxyResolverImpl* resolver,
22 const GURL& url); 21 const GURL& url);
23 ~Job() override; 22 ~Job() override;
24 23
25 void Start(); 24 void Start();
26 25
26 // Invoked when the LoadState for this job changes.
27 void LoadStateChanged(LoadState load_state);
28
29 net::ProxyResolver::RequestHandle request_handle() { return request_handle_; }
30
27 private: 31 private:
28 // mojo::ErrorHandler override. 32 // mojo::ErrorHandler override.
29 // This is invoked in response to the client disconnecting, indicating 33 // This is invoked in response to the client disconnecting, indicating
30 // cancellation. 34 // cancellation.
31 void OnConnectionError() override; 35 void OnConnectionError() override;
32 36
33 void GetProxyDone(int error); 37 void GetProxyDone(int error);
34 38
35 MojoProxyResolverImpl* resolver_; 39 MojoProxyResolverImpl* resolver_;
36 40
37 interfaces::ProxyResolverRequestClientPtr client_; 41 interfaces::ProxyResolverRequestClientPtr client_;
38 ProxyInfo result_; 42 ProxyInfo result_;
39 GURL url_; 43 GURL url_;
40 net::ProxyResolver::RequestHandle request_handle_; 44 net::ProxyResolver::RequestHandle request_handle_;
45 bool done_;
41 46
42 DISALLOW_COPY_AND_ASSIGN(Job); 47 DISALLOW_COPY_AND_ASSIGN(Job);
43 }; 48 };
44 49
45 MojoProxyResolverImpl::MojoProxyResolverImpl( 50 MojoProxyResolverImpl::MojoProxyResolverImpl(
46 scoped_ptr<net::ProxyResolver> resolver) 51 scoped_ptr<net::ProxyResolver> resolver)
47 : resolver_(resolver.Pass()) { 52 : resolver_(resolver.Pass()) {
48 DCHECK(resolver_->expects_pac_bytes()); 53 DCHECK(resolver_->expects_pac_bytes());
49 } 54 }
50 55
51 MojoProxyResolverImpl::~MojoProxyResolverImpl() { 56 MojoProxyResolverImpl::~MojoProxyResolverImpl() {
52 if (!set_pac_script_requests_.empty()) 57 if (!set_pac_script_requests_.empty())
53 resolver_->CancelSetPacScript(); 58 resolver_->CancelSetPacScript();
54 STLDeleteElements(&resolve_jobs_); 59 STLDeleteElements(&resolve_jobs_);
55 } 60 }
56 61
62 void MojoProxyResolverImpl::LoadStateChanged(
63 net::ProxyResolver::RequestHandle handle,
64 LoadState load_state) {
65 auto it = request_handle_to_job_.find(handle);
66 DCHECK(it != request_handle_to_job_.end());
67 it->second->LoadStateChanged(load_state);
68 }
69
57 void MojoProxyResolverImpl::SetPacScript( 70 void MojoProxyResolverImpl::SetPacScript(
58 const mojo::String& data, 71 const mojo::String& data,
59 const mojo::Callback<void(int32_t)>& callback) { 72 const mojo::Callback<void(int32_t)>& callback) {
60 DVLOG(1) << "SetPacScript(" << data << ")"; 73 DVLOG(1) << "SetPacScript(" << data << ")";
61 set_pac_script_requests_.push( 74 set_pac_script_requests_.push(
62 SetPacScriptRequest(ProxyResolverScriptData::FromUTF8(data), callback)); 75 SetPacScriptRequest(ProxyResolverScriptData::FromUTF8(data), callback));
63 if (set_pac_script_requests_.size() == 1) 76 if (set_pac_script_requests_.size() == 1)
64 StartSetPacScript(); 77 StartSetPacScript();
65 } 78 }
66 79
67 void MojoProxyResolverImpl::GetProxyForUrl( 80 void MojoProxyResolverImpl::GetProxyForUrl(
68 const mojo::String& url, 81 const mojo::String& url,
69 interfaces::ProxyResolverRequestClientPtr client) { 82 interfaces::ProxyResolverRequestClientPtr client) {
70 DVLOG(1) << "GetProxyForUrl(" << url << ")"; 83 DVLOG(1) << "GetProxyForUrl(" << url << ")";
71 Job* job = new Job(client.Pass(), this, url.To<GURL>()); 84 Job* job = new Job(client.Pass(), this, url.To<GURL>());
72 bool inserted = resolve_jobs_.insert(job).second; 85 bool inserted = resolve_jobs_.insert(job).second;
73 DCHECK(inserted); 86 DCHECK(inserted);
74 job->Start(); 87 job->Start();
75 } 88 }
76 89
77 void MojoProxyResolverImpl::DeleteJob(Job* job) { 90 void MojoProxyResolverImpl::DeleteJob(Job* job) {
91 if (job->request_handle())
92 request_handle_to_job_.erase(job->request_handle());
93
78 size_t num_erased = resolve_jobs_.erase(job); 94 size_t num_erased = resolve_jobs_.erase(job);
79 DCHECK(num_erased); 95 DCHECK(num_erased);
80 delete job; 96 delete job;
81 } 97 }
82 98
83 void MojoProxyResolverImpl::StartSetPacScript() { 99 void MojoProxyResolverImpl::StartSetPacScript() {
84 DCHECK(!set_pac_script_requests_.empty()); 100 DCHECK(!set_pac_script_requests_.empty());
85 int result = resolver_->SetPacScript( 101 int result = resolver_->SetPacScript(
86 set_pac_script_requests_.front().script_data, 102 set_pac_script_requests_.front().script_data,
87 base::Bind(&MojoProxyResolverImpl::SetPacScriptDone, 103 base::Bind(&MojoProxyResolverImpl::SetPacScriptDone,
(...skipping 11 matching lines...) Expand all
99 StartSetPacScript(); 115 StartSetPacScript();
100 } 116 }
101 117
102 MojoProxyResolverImpl::Job::Job( 118 MojoProxyResolverImpl::Job::Job(
103 interfaces::ProxyResolverRequestClientPtr client, 119 interfaces::ProxyResolverRequestClientPtr client,
104 MojoProxyResolverImpl* resolver, 120 MojoProxyResolverImpl* resolver,
105 const GURL& url) 121 const GURL& url)
106 : resolver_(resolver), 122 : resolver_(resolver),
107 client_(client.Pass()), 123 client_(client.Pass()),
108 url_(url), 124 url_(url),
109 request_handle_(nullptr) { 125 request_handle_(nullptr),
126 done_(false) {
110 } 127 }
111 128
112 MojoProxyResolverImpl::Job::~Job() { 129 MojoProxyResolverImpl::Job::~Job() {
113 if (request_handle_) 130 if (request_handle_ && !done_)
114 resolver_->resolver_->CancelRequest(request_handle_); 131 resolver_->resolver_->CancelRequest(request_handle_);
115 } 132 }
116 133
117 void MojoProxyResolverImpl::Job::Start() { 134 void MojoProxyResolverImpl::Job::Start() {
118 int result = resolver_->resolver_->GetProxyForURL( 135 int result = resolver_->resolver_->GetProxyForURL(
119 url_, &result_, base::Bind(&Job::GetProxyDone, base::Unretained(this)), 136 url_, &result_, base::Bind(&Job::GetProxyDone, base::Unretained(this)),
120 &request_handle_, BoundNetLog()); 137 &request_handle_, BoundNetLog());
121 if (result != ERR_IO_PENDING) { 138 if (result != ERR_IO_PENDING) {
122 GetProxyDone(result); 139 GetProxyDone(result);
123 return; 140 return;
124 } 141 }
125 client_.set_error_handler(this); 142 client_.set_error_handler(this);
143 resolver_->request_handle_to_job_.insert(
144 std::make_pair(request_handle_, this));
145 }
146
147 void MojoProxyResolverImpl::Job::LoadStateChanged(LoadState load_state) {
148 client_->LoadStateChanged(load_state);
126 } 149 }
127 150
128 void MojoProxyResolverImpl::Job::GetProxyDone(int error) { 151 void MojoProxyResolverImpl::Job::GetProxyDone(int error) {
129 request_handle_ = nullptr; 152 done_ = true;
130 DVLOG(1) << "GetProxyForUrl(" << url_ << ") finished with error " << error 153 DVLOG(1) << "GetProxyForUrl(" << url_ << ") finished with error " << error
131 << ". " << result_.proxy_list().size() << " Proxies returned:"; 154 << ". " << result_.proxy_list().size() << " Proxies returned:";
132 for (const auto& proxy : result_.proxy_list().GetAll()) { 155 for (const auto& proxy : result_.proxy_list().GetAll()) {
133 DVLOG(1) << proxy.ToURI(); 156 DVLOG(1) << proxy.ToURI();
134 } 157 }
135 mojo::Array<interfaces::ProxyServerPtr> result; 158 mojo::Array<interfaces::ProxyServerPtr> result;
136 if (error == OK) { 159 if (error == OK) {
137 result = mojo::Array<interfaces::ProxyServerPtr>::From( 160 result = mojo::Array<interfaces::ProxyServerPtr>::From(
138 result_.proxy_list().GetAll()); 161 result_.proxy_list().GetAll());
139 } 162 }
140 client_->ReportResult(error, result.Pass()); 163 client_->ReportResult(error, result.Pass());
141 resolver_->DeleteJob(this); 164 resolver_->DeleteJob(this);
142 } 165 }
143 166
144 void MojoProxyResolverImpl::Job::OnConnectionError() { 167 void MojoProxyResolverImpl::Job::OnConnectionError() {
145 resolver_->DeleteJob(this); 168 resolver_->DeleteJob(this);
146 } 169 }
147 170
148 MojoProxyResolverImpl::SetPacScriptRequest::SetPacScriptRequest( 171 MojoProxyResolverImpl::SetPacScriptRequest::SetPacScriptRequest(
149 const scoped_refptr<ProxyResolverScriptData>& script_data, 172 const scoped_refptr<ProxyResolverScriptData>& script_data,
150 const mojo::Callback<void(int32_t)>& callback) 173 const mojo::Callback<void(int32_t)>& callback)
151 : script_data(script_data), callback(callback) { 174 : script_data(script_data), callback(callback) {
152 } 175 }
153 176
154 MojoProxyResolverImpl::SetPacScriptRequest::~SetPacScriptRequest() = default; 177 MojoProxyResolverImpl::SetPacScriptRequest::~SetPacScriptRequest() = default;
155 178
156 } // namespace net 179 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/mojo_proxy_resolver_impl.h ('k') | net/proxy/mojo_proxy_resolver_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698