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

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

Issue 1145153004: Split ProxyResolverV8Tracing into an implementation and a wrapper. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 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/mojo_proxy_resolver_factory_impl.h" 5 #include "net/proxy/mojo_proxy_resolver_factory_impl.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
11 #include "net/dns/host_resolver_mojo.h" 11 #include "net/dns/host_resolver_mojo.h"
12 #include "net/proxy/mojo_proxy_resolver_impl.h" 12 #include "net/proxy/mojo_proxy_resolver_impl.h"
13 #include "net/proxy/proxy_resolver_error_observer_mojo.h" 13 #include "net/proxy/proxy_resolver_error_observer_mojo.h"
14 #include "net/proxy/proxy_resolver_factory.h" 14 #include "net/proxy/proxy_resolver_factory.h"
15 #include "net/proxy/proxy_resolver_v8.h" 15 #include "net/proxy/proxy_resolver_v8.h"
16 #include "net/proxy/proxy_resolver_v8_tracing.h" 16 #include "net/proxy/proxy_resolver_v8_tracing_wrapper.h"
17 #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h" 17 #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h"
18 18
19 namespace net { 19 namespace net {
20 namespace { 20 namespace {
21 21
22 scoped_ptr<ProxyResolverErrorObserver> ReturnErrorObserver( 22 scoped_ptr<ProxyResolverErrorObserver> ReturnErrorObserver(
23 scoped_ptr<ProxyResolverErrorObserver> error_observer) { 23 scoped_ptr<ProxyResolverErrorObserver> error_observer) {
24 return error_observer; 24 return error_observer;
25 } 25 }
26 26
27 scoped_ptr<ProxyResolverFactory> CreateDefaultProxyResolver( 27 scoped_ptr<ProxyResolverFactory> CreateDefaultProxyResolver(
28 HostResolver* host_resolver, 28 HostResolver* host_resolver,
29 scoped_ptr<ProxyResolverErrorObserver> error_observer, 29 scoped_ptr<ProxyResolverErrorObserver> error_observer) {
30 const ProxyResolver::LoadStateChangedCallback& callback) { 30 return make_scoped_ptr(new ProxyResolverFactoryV8TracingWrapper(
31 return make_scoped_ptr(new ProxyResolverFactoryV8Tracing( 31 host_resolver, nullptr,
32 host_resolver, nullptr, callback,
33 base::Bind(&ReturnErrorObserver, base::Passed(&error_observer)))); 32 base::Bind(&ReturnErrorObserver, base::Passed(&error_observer))));
34 } 33 }
35 34
36 class LoadStateChangeForwarder
37 : public base::RefCounted<LoadStateChangeForwarder> {
38 public:
39 LoadStateChangeForwarder() = default;
40
41 void OnLoadStateChanged(ProxyResolver::RequestHandle request_handle,
42 LoadState load_state) const {
43 if (!callback_.is_null())
44 callback_.Run(request_handle, load_state);
45 }
46
47 void set_load_state_changed_callback(
48 const ProxyResolver::LoadStateChangedCallback& callback) {
49 callback_ = callback;
50 }
51
52 private:
53 friend class base::RefCounted<LoadStateChangeForwarder>;
54 ~LoadStateChangeForwarder() = default;
55
56 ProxyResolver::LoadStateChangedCallback callback_;
57
58 DISALLOW_COPY_AND_ASSIGN(LoadStateChangeForwarder);
59 };
60
61 // A class to manage the lifetime of a MojoProxyResolverImpl and a 35 // A class to manage the lifetime of a MojoProxyResolverImpl and a
62 // HostResolverMojo. An instance will remain while the message pipes for both 36 // HostResolverMojo. An instance will remain while the message pipes for both
63 // mojo connections remain open. 37 // mojo connections remain open.
64 class MojoProxyResolverHolder : public mojo::ErrorHandler { 38 class MojoProxyResolverHolder : public mojo::ErrorHandler {
65 public: 39 public:
66 MojoProxyResolverHolder( 40 MojoProxyResolverHolder(
67 scoped_ptr<HostResolverMojo> host_resolver, 41 scoped_ptr<HostResolverMojo> host_resolver,
68 scoped_ptr<ProxyResolver> proxy_resolver_impl, 42 scoped_ptr<ProxyResolver> proxy_resolver_impl,
69 const scoped_refptr<LoadStateChangeForwarder>&
70 load_state_change_forwarder,
71 mojo::InterfaceRequest<interfaces::ProxyResolver> request); 43 mojo::InterfaceRequest<interfaces::ProxyResolver> request);
72 44
73 private: 45 private:
74 // mojo::ErrorHandler override. 46 // mojo::ErrorHandler override.
75 void OnConnectionError() override; 47 void OnConnectionError() override;
76 48
77 scoped_ptr<HostResolverMojo> host_resolver_; 49 scoped_ptr<HostResolverMojo> host_resolver_;
78 MojoProxyResolverImpl mojo_proxy_resolver_; 50 MojoProxyResolverImpl mojo_proxy_resolver_;
79 mojo::Binding<interfaces::ProxyResolver> binding_; 51 mojo::Binding<interfaces::ProxyResolver> binding_;
80 52
81 DISALLOW_COPY_AND_ASSIGN(MojoProxyResolverHolder); 53 DISALLOW_COPY_AND_ASSIGN(MojoProxyResolverHolder);
82 }; 54 };
83 55
84 MojoProxyResolverHolder::MojoProxyResolverHolder( 56 MojoProxyResolverHolder::MojoProxyResolverHolder(
85 scoped_ptr<HostResolverMojo> host_resolver, 57 scoped_ptr<HostResolverMojo> host_resolver,
86 scoped_ptr<ProxyResolver> proxy_resolver_impl, 58 scoped_ptr<ProxyResolver> proxy_resolver_impl,
87 const scoped_refptr<LoadStateChangeForwarder>& load_state_change_forwarder,
88 mojo::InterfaceRequest<interfaces::ProxyResolver> request) 59 mojo::InterfaceRequest<interfaces::ProxyResolver> request)
89 : host_resolver_(host_resolver.Pass()), 60 : host_resolver_(host_resolver.Pass()),
90 mojo_proxy_resolver_( 61 mojo_proxy_resolver_(proxy_resolver_impl.Pass()),
91 proxy_resolver_impl.Pass(),
92 base::Bind(&LoadStateChangeForwarder::set_load_state_changed_callback,
93 load_state_change_forwarder)),
94 binding_(&mojo_proxy_resolver_, request.Pass()) { 62 binding_(&mojo_proxy_resolver_, request.Pass()) {
95 binding_.set_error_handler(this); 63 binding_.set_error_handler(this);
96 host_resolver_->set_disconnect_callback(base::Bind( 64 host_resolver_->set_disconnect_callback(base::Bind(
97 &MojoProxyResolverHolder::OnConnectionError, base::Unretained(this))); 65 &MojoProxyResolverHolder::OnConnectionError, base::Unretained(this)));
98 } 66 }
99 67
100 void MojoProxyResolverHolder::OnConnectionError() { 68 void MojoProxyResolverHolder::OnConnectionError() {
101 delete this; 69 delete this;
102 } 70 }
103 71
(...skipping 11 matching lines...) Expand all
115 ~Job() override; 83 ~Job() override;
116 84
117 private: 85 private:
118 // mojo::ErrorHandler override. 86 // mojo::ErrorHandler override.
119 void OnConnectionError() override; 87 void OnConnectionError() override;
120 88
121 void OnProxyResolverCreated(int error); 89 void OnProxyResolverCreated(int error);
122 90
123 MojoProxyResolverFactoryImpl* const parent_; 91 MojoProxyResolverFactoryImpl* const parent_;
124 scoped_ptr<HostResolverMojo> host_resolver_; 92 scoped_ptr<HostResolverMojo> host_resolver_;
125 scoped_refptr<LoadStateChangeForwarder> load_state_change_forwarder_;
126 scoped_ptr<ProxyResolver> proxy_resolver_impl_; 93 scoped_ptr<ProxyResolver> proxy_resolver_impl_;
127 mojo::InterfaceRequest<interfaces::ProxyResolver> proxy_request_; 94 mojo::InterfaceRequest<interfaces::ProxyResolver> proxy_request_;
128 scoped_ptr<net::ProxyResolverFactory> factory_; 95 scoped_ptr<net::ProxyResolverFactory> factory_;
129 scoped_ptr<net::ProxyResolverFactory::Request> request_; 96 scoped_ptr<net::ProxyResolverFactory::Request> request_;
130 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr_; 97 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr_;
131 98
132 DISALLOW_COPY_AND_ASSIGN(Job); 99 DISALLOW_COPY_AND_ASSIGN(Job);
133 }; 100 };
134 101
135 MojoProxyResolverFactoryImpl::Job::Job( 102 MojoProxyResolverFactoryImpl::Job::Job(
136 MojoProxyResolverFactoryImpl* factory, 103 MojoProxyResolverFactoryImpl* factory,
137 const scoped_refptr<ProxyResolverScriptData>& pac_script, 104 const scoped_refptr<ProxyResolverScriptData>& pac_script,
138 const MojoProxyResolverFactoryImpl::Factory& proxy_resolver_factory, 105 const MojoProxyResolverFactoryImpl::Factory& proxy_resolver_factory,
139 mojo::InterfaceRequest<interfaces::ProxyResolver> request, 106 mojo::InterfaceRequest<interfaces::ProxyResolver> request,
140 interfaces::HostResolverPtr host_resolver, 107 interfaces::HostResolverPtr host_resolver,
141 interfaces::ProxyResolverErrorObserverPtr error_observer, 108 interfaces::ProxyResolverErrorObserverPtr error_observer,
142 interfaces::ProxyResolverFactoryRequestClientPtr client) 109 interfaces::ProxyResolverFactoryRequestClientPtr client)
143 : parent_(factory), 110 : parent_(factory),
144 host_resolver_(new HostResolverMojo( 111 host_resolver_(new HostResolverMojo(
145 host_resolver.Pass(), 112 host_resolver.Pass(),
146 base::Bind(&MojoProxyResolverFactoryImpl::Job::OnConnectionError, 113 base::Bind(&MojoProxyResolverFactoryImpl::Job::OnConnectionError,
147 base::Unretained(this)))), 114 base::Unretained(this)))),
148 load_state_change_forwarder_(new LoadStateChangeForwarder),
149 proxy_request_(request.Pass()), 115 proxy_request_(request.Pass()),
150 factory_(proxy_resolver_factory.Run( 116 factory_(proxy_resolver_factory.Run(
151 host_resolver_.get(), 117 host_resolver_.get(),
152 ProxyResolverErrorObserverMojo::Create(error_observer.Pass()), 118 ProxyResolverErrorObserverMojo::Create(error_observer.Pass()))),
153 base::Bind(&LoadStateChangeForwarder::OnLoadStateChanged,
154 load_state_change_forwarder_))),
155 client_ptr_(client.Pass()) { 119 client_ptr_(client.Pass()) {
156 client_ptr_.set_error_handler(this); 120 client_ptr_.set_error_handler(this);
157 factory_->CreateProxyResolver( 121 factory_->CreateProxyResolver(
158 pac_script, &proxy_resolver_impl_, 122 pac_script, &proxy_resolver_impl_,
159 base::Bind(&MojoProxyResolverFactoryImpl::Job::OnProxyResolverCreated, 123 base::Bind(&MojoProxyResolverFactoryImpl::Job::OnProxyResolverCreated,
160 base::Unretained(this)), 124 base::Unretained(this)),
161 &request_); 125 &request_);
162 } 126 }
163 127
164 MojoProxyResolverFactoryImpl::Job::~Job() = default; 128 MojoProxyResolverFactoryImpl::Job::~Job() = default;
165 129
166 void MojoProxyResolverFactoryImpl::Job::OnConnectionError() { 130 void MojoProxyResolverFactoryImpl::Job::OnConnectionError() {
167 client_ptr_->ReportResult(ERR_PAC_SCRIPT_TERMINATED); 131 client_ptr_->ReportResult(ERR_PAC_SCRIPT_TERMINATED);
168 parent_->RemoveJob(this); 132 parent_->RemoveJob(this);
169 } 133 }
170 134
171 void MojoProxyResolverFactoryImpl::Job::OnProxyResolverCreated(int error) { 135 void MojoProxyResolverFactoryImpl::Job::OnProxyResolverCreated(int error) {
172 if (error == OK) { 136 if (error == OK) {
173 // The MojoProxyResolverHolder will delete itself if either 137 // The MojoProxyResolverHolder will delete itself if either
174 // |host_resolver_| or |proxy_request_| encounters a connection error. 138 // |host_resolver_| or |proxy_request_| encounters a connection error.
175 new MojoProxyResolverHolder( 139 new MojoProxyResolverHolder(host_resolver_.Pass(),
176 host_resolver_.Pass(), proxy_resolver_impl_.Pass(), 140 proxy_resolver_impl_.Pass(),
177 load_state_change_forwarder_, proxy_request_.Pass()); 141 proxy_request_.Pass());
178 } 142 }
179 client_ptr_->ReportResult(error); 143 client_ptr_->ReportResult(error);
180 parent_->RemoveJob(this); 144 parent_->RemoveJob(this);
181 } 145 }
182 146
183 MojoProxyResolverFactoryImpl::MojoProxyResolverFactoryImpl( 147 MojoProxyResolverFactoryImpl::MojoProxyResolverFactoryImpl(
184 const MojoProxyResolverFactoryImpl::Factory& proxy_resolver_factory, 148 const MojoProxyResolverFactoryImpl::Factory& proxy_resolver_factory,
185 mojo::InterfaceRequest<interfaces::ProxyResolverFactory> request) 149 mojo::InterfaceRequest<interfaces::ProxyResolverFactory> request)
186 : proxy_resolver_impl_factory_(proxy_resolver_factory), 150 : proxy_resolver_impl_factory_(proxy_resolver_factory),
187 binding_(this, request.Pass()) { 151 binding_(this, request.Pass()) {
(...skipping 23 matching lines...) Expand all
211 error_observer.Pass(), client.Pass())); 175 error_observer.Pass(), client.Pass()));
212 } 176 }
213 177
214 void MojoProxyResolverFactoryImpl::RemoveJob(Job* job) { 178 void MojoProxyResolverFactoryImpl::RemoveJob(Job* job) {
215 size_t erased = jobs_.erase(job); 179 size_t erased = jobs_.erase(job);
216 DCHECK_EQ(1u, erased); 180 DCHECK_EQ(1u, erased);
217 delete job; 181 delete job;
218 } 182 }
219 183
220 } // namespace net 184 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/mojo_proxy_resolver_factory_impl.h ('k') | net/proxy/mojo_proxy_resolver_factory_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698