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

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

Issue 1017453005: Add support for ProxyResolverErrorObserver to ProxyResolverMojo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
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_mojo.h" 5 #include "net/proxy/proxy_resolver_mojo.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "mojo/common/common_type_converters.h" 10 #include "mojo/common/common_type_converters.h"
11 #include "mojo/common/url_type_converters.h" 11 #include "mojo/common/url_type_converters.h"
12 #include "net/base/net_errors.h" 12 #include "net/base/net_errors.h"
13 #include "net/dns/mojo_host_resolver_impl.h" 13 #include "net/dns/mojo_host_resolver_impl.h"
14 #include "net/proxy/mojo_proxy_resolver_factory.h" 14 #include "net/proxy/mojo_proxy_resolver_factory.h"
15 #include "net/proxy/mojo_proxy_type_converters.h" 15 #include "net/proxy/mojo_proxy_type_converters.h"
16 #include "net/proxy/proxy_info.h" 16 #include "net/proxy/proxy_info.h"
17 #include "net/proxy/proxy_resolver_error_observer.h"
17 #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h" 18 #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h"
18 #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h" 19 #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h"
19 20
20 namespace net { 21 namespace net {
21 22
22 class ProxyResolverMojo::Job : public interfaces::ProxyResolverRequestClient, 23 class ProxyResolverMojo::Job : public interfaces::ProxyResolverRequestClient,
23 public mojo::ErrorHandler { 24 public mojo::ErrorHandler {
24 public: 25 public:
25 Job(ProxyResolverMojo* resolver, 26 Job(ProxyResolverMojo* resolver,
26 const GURL& url, 27 const GURL& url,
(...skipping 20 matching lines...) Expand all
47 ProxyResolverMojo* resolver_; 48 ProxyResolverMojo* resolver_;
48 const GURL url_; 49 const GURL url_;
49 ProxyInfo* results_; 50 ProxyInfo* results_;
50 net::CompletionCallback callback_; 51 net::CompletionCallback callback_;
51 LoadState load_state_ = LOAD_STATE_RESOLVING_PROXY_FOR_URL; 52 LoadState load_state_ = LOAD_STATE_RESOLVING_PROXY_FOR_URL;
52 53
53 base::ThreadChecker thread_checker_; 54 base::ThreadChecker thread_checker_;
54 mojo::Binding<interfaces::ProxyResolverRequestClient> binding_; 55 mojo::Binding<interfaces::ProxyResolverRequestClient> binding_;
55 }; 56 };
56 57
58 class ProxyResolverMojo::ErrorObserverHolder
59 : public interfaces::ProxyResolverErrorObserver {
60 public:
61 ErrorObserverHolder(
62 scoped_ptr<net::ProxyResolverErrorObserver> error_observer);
63
64 // Returns an interfaces::ProxyResolverErrorObserverPtr that can be used to
65 // report errors to the ProxyResolverErrorObserver passed when constructing
66 // |this|. The results of previous calls will no longer able to report errors
67 // when this is called.
68 interfaces::ProxyResolverErrorObserverPtr CreateHandle();
69
70 void OnPacScriptError(int32_t line_number,
71 const mojo::String& error) override;
72
73 private:
74 scoped_ptr<net::ProxyResolverErrorObserver> error_observer_;
75 mojo::Binding<interfaces::ProxyResolverErrorObserver> binding_;
76
77 DISALLOW_COPY_AND_ASSIGN(ErrorObserverHolder);
78 };
79
57 ProxyResolverMojo::Job::Job(ProxyResolverMojo* resolver, 80 ProxyResolverMojo::Job::Job(ProxyResolverMojo* resolver,
58 const GURL& url, 81 const GURL& url,
59 ProxyInfo* results, 82 ProxyInfo* results,
60 const net::CompletionCallback& callback) 83 const net::CompletionCallback& callback)
61 : resolver_(resolver), 84 : resolver_(resolver),
62 url_(url), 85 url_(url),
63 results_(results), 86 results_(results),
64 callback_(callback), 87 callback_(callback),
65 binding_(this) { 88 binding_(this) {
66 binding_.set_error_handler(this); 89 binding_.set_error_handler(this);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 callback_.Reset(); 127 callback_.Reset();
105 resolver_->RemoveJob(this); 128 resolver_->RemoveJob(this);
106 } 129 }
107 130
108 void ProxyResolverMojo::Job::LoadStateChanged(int32_t load_state) { 131 void ProxyResolverMojo::Job::LoadStateChanged(int32_t load_state) {
109 load_state_ = static_cast<LoadState>(load_state); 132 load_state_ = static_cast<LoadState>(load_state);
110 } 133 }
111 134
112 ProxyResolverMojo::ProxyResolverMojo( 135 ProxyResolverMojo::ProxyResolverMojo(
113 MojoProxyResolverFactory* mojo_proxy_resolver_factory, 136 MojoProxyResolverFactory* mojo_proxy_resolver_factory,
114 HostResolver* host_resolver) 137 HostResolver* host_resolver,
138 scoped_ptr<ProxyResolverErrorObserver> error_observer)
115 : ProxyResolver(true /* |expects_pac_bytes| */), 139 : ProxyResolver(true /* |expects_pac_bytes| */),
116 mojo_proxy_resolver_factory_(mojo_proxy_resolver_factory), 140 mojo_proxy_resolver_factory_(mojo_proxy_resolver_factory),
117 host_resolver_(host_resolver) { 141 host_resolver_(host_resolver),
142 error_observer_(new ErrorObserverHolder(error_observer.Pass())) {
118 } 143 }
119 144
120 ProxyResolverMojo::~ProxyResolverMojo() { 145 ProxyResolverMojo::~ProxyResolverMojo() {
121 DCHECK(thread_checker_.CalledOnValidThread()); 146 DCHECK(thread_checker_.CalledOnValidThread());
122 // All pending requests should have been cancelled. 147 // All pending requests should have been cancelled.
123 DCHECK(pending_jobs_.empty()); 148 DCHECK(pending_jobs_.empty());
124 DCHECK(set_pac_script_callback_.IsCancelled()); 149 DCHECK(set_pac_script_callback_.IsCancelled());
125 } 150 }
126 151
127 void ProxyResolverMojo::CancelSetPacScript() { 152 void ProxyResolverMojo::CancelSetPacScript() {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 DCHECK(thread_checker_.CalledOnValidThread()); 196 DCHECK(thread_checker_.CalledOnValidThread());
172 // A Mojo service implementation must outlive its binding. 197 // A Mojo service implementation must outlive its binding.
173 mojo_host_resolver_binding_.reset(); 198 mojo_host_resolver_binding_.reset();
174 199
175 interfaces::HostResolverPtr mojo_host_resolver_ptr; 200 interfaces::HostResolverPtr mojo_host_resolver_ptr;
176 mojo_host_resolver_.reset(new MojoHostResolverImpl(host_resolver_)); 201 mojo_host_resolver_.reset(new MojoHostResolverImpl(host_resolver_));
177 mojo_host_resolver_binding_.reset(new mojo::Binding<interfaces::HostResolver>( 202 mojo_host_resolver_binding_.reset(new mojo::Binding<interfaces::HostResolver>(
178 mojo_host_resolver_.get(), mojo::GetProxy(&mojo_host_resolver_ptr))); 203 mojo_host_resolver_.get(), mojo::GetProxy(&mojo_host_resolver_ptr)));
179 mojo_proxy_resolver_ptr_.reset(); 204 mojo_proxy_resolver_ptr_.reset();
180 mojo_proxy_resolver_factory_->Create( 205 mojo_proxy_resolver_factory_->Create(
181 mojo::GetProxy(&mojo_proxy_resolver_ptr_), mojo_host_resolver_ptr.Pass()); 206 mojo::GetProxy(&mojo_proxy_resolver_ptr_), mojo_host_resolver_ptr.Pass(),
207 error_observer_->CreateHandle());
182 mojo_proxy_resolver_ptr_.set_error_handler(this); 208 mojo_proxy_resolver_ptr_.set_error_handler(this);
183 } 209 }
184 210
185 void ProxyResolverMojo::AbortPendingRequests() { 211 void ProxyResolverMojo::AbortPendingRequests() {
186 DCHECK(thread_checker_.CalledOnValidThread()); 212 DCHECK(thread_checker_.CalledOnValidThread());
187 if (!set_pac_script_callback_.IsCancelled()) { 213 if (!set_pac_script_callback_.IsCancelled()) {
188 set_pac_script_callback_.callback().Run(ERR_PAC_SCRIPT_TERMINATED); 214 set_pac_script_callback_.callback().Run(ERR_PAC_SCRIPT_TERMINATED);
189 set_pac_script_callback_.Cancel(); 215 set_pac_script_callback_.Cancel();
190 } 216 }
191 217
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 job->Cancel(); 280 job->Cancel();
255 RemoveJob(job); 281 RemoveJob(job);
256 } 282 }
257 283
258 LoadState ProxyResolverMojo::GetLoadState(RequestHandle request) const { 284 LoadState ProxyResolverMojo::GetLoadState(RequestHandle request) const {
259 Job* job = static_cast<Job*>(request); 285 Job* job = static_cast<Job*>(request);
260 CHECK_EQ(1u, pending_jobs_.count(job)); 286 CHECK_EQ(1u, pending_jobs_.count(job));
261 return job->load_state(); 287 return job->load_state();
262 } 288 }
263 289
290 ProxyResolverMojo::ErrorObserverHolder::ErrorObserverHolder(
291 scoped_ptr<net::ProxyResolverErrorObserver> error_observer)
292 : error_observer_(error_observer.Pass()), binding_(this) {
293 }
294
295 interfaces::ProxyResolverErrorObserverPtr
296 ProxyResolverMojo::ErrorObserverHolder::CreateHandle() {
297 interfaces::ProxyResolverErrorObserverPtr result;
298 if (error_observer_) {
299 if (binding_.is_bound())
300 binding_.Close();
301 binding_.Bind(mojo::GetProxy(&result));
302 }
303 return result.Pass();
304 }
305
306 void ProxyResolverMojo::ErrorObserverHolder::OnPacScriptError(
307 int32_t line_number,
308 const mojo::String& error) {
309 DCHECK(error_observer_);
310 error_observer_->OnPACScriptError(line_number, error.To<base::string16>());
311 }
312
264 } // namespace net 313 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698