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

Side by Side Diff: blimp/engine/session/blimp_engine_session.cc

Issue 2256363003: Clean up thread handling in Blimp browser tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: wez feedback Created 4 years, 4 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 "blimp/engine/session/blimp_engine_session.h" 5 #include "blimp/engine/session/blimp_engine_session.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 } 120 }
121 121
122 } // namespace 122 } // namespace
123 123
124 // EngineNetworkComponents is created by the BlimpEngineSession on the UI 124 // EngineNetworkComponents is created by the BlimpEngineSession on the UI
125 // thread, and then used and destroyed on the IO thread. 125 // thread, and then used and destroyed on the IO thread.
126 class EngineNetworkComponents : public ConnectionHandler, 126 class EngineNetworkComponents : public ConnectionHandler,
127 public ConnectionErrorObserver { 127 public ConnectionErrorObserver {
128 public: 128 public:
129 // |net_log|: The log to use for network-related events. 129 // |net_log|: The log to use for network-related events.
130 // |quit_closure|: A closure which will terminate the engine when 130 explicit EngineNetworkComponents(net::NetLog* net_log);
131 // invoked.
132 EngineNetworkComponents(net::NetLog* net_log,
133 const base::Closure& quit_closure);
134 ~EngineNetworkComponents() override; 131 ~EngineNetworkComponents() override;
135 132
136 // Sets up network components and starts listening for incoming connection. 133 // Sets up network components and starts listening for incoming connection.
137 // This should be called after all features have been registered so that 134 // This should be called after all features have been registered so that
138 // received messages can be properly handled. 135 // received messages can be properly handled.
139 void Initialize(const std::string& client_token); 136 void Initialize(scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
137 base::WeakPtr<BlobChannelSender> blob_channel_sender,
138 const std::string& client_token);
140 139
141 uint16_t GetPortForTesting() { return port_; } 140 uint16_t GetPortForTesting() { return port_; }
142 141
143 BrowserConnectionHandler* GetBrowserConnectionHandler(); 142 BrowserConnectionHandler* connection_handler() {
143 return &connection_handler_;
144 }
145
146 BlobChannelService* blob_channel_service() {
147 return blob_channel_service_.get();
148 }
144 149
145 private: 150 private:
146 // ConnectionHandler implementation. 151 // ConnectionHandler implementation.
147 void HandleConnection(std::unique_ptr<BlimpConnection> connection) override; 152 void HandleConnection(std::unique_ptr<BlimpConnection> connection) override;
148 153
149 // ConnectionErrorObserver implementation. 154 // ConnectionErrorObserver implementation.
150 // Signals the engine session that an authenticated connection was 155 // Signals the engine session that an authenticated connection was
151 // terminated. 156 // terminated.
152 void OnConnectionError(int error) override; 157 void OnConnectionError(int error) override;
153 158
154 net::NetLog* net_log_; 159 net::NetLog* net_log_;
155 base::Closure quit_closure_;
156 uint16_t port_ = 0; 160 uint16_t port_ = 0;
157 161
158 std::unique_ptr<BrowserConnectionHandler> connection_handler_; 162 BrowserConnectionHandler connection_handler_;
159 std::unique_ptr<EngineAuthenticationHandler> authentication_handler_; 163 std::unique_ptr<EngineAuthenticationHandler> authentication_handler_;
160 std::unique_ptr<EngineConnectionManager> connection_manager_; 164 std::unique_ptr<EngineConnectionManager> connection_manager_;
165 std::unique_ptr<BlobChannelService> blob_channel_service_;
166 base::Closure quit_closure_;
161 167
162 DISALLOW_COPY_AND_ASSIGN(EngineNetworkComponents); 168 DISALLOW_COPY_AND_ASSIGN(EngineNetworkComponents);
163 }; 169 };
164 170
165 EngineNetworkComponents::EngineNetworkComponents( 171 EngineNetworkComponents::EngineNetworkComponents(net::NetLog* net_log)
166 net::NetLog* net_log, 172 : net_log_(net_log), quit_closure_(QuitCurrentMessageLoopClosure()) {}
167 const base::Closure& quit_closure)
168 : net_log_(net_log),
169 quit_closure_(quit_closure),
170 connection_handler_(new BrowserConnectionHandler) {}
171 173
172 EngineNetworkComponents::~EngineNetworkComponents() { 174 EngineNetworkComponents::~EngineNetworkComponents() {
173 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 175 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
174 } 176 }
175 177
176 void EngineNetworkComponents::Initialize(const std::string& client_token) { 178 void EngineNetworkComponents::Initialize(
179 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
180 base::WeakPtr<BlobChannelSender> blob_channel_sender,
181 const std::string& client_token) {
177 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 182 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
178 DCHECK(!connection_manager_); 183 DCHECK(!connection_manager_);
179 // Plumb authenticated connections from the authentication handler 184 // Plumb authenticated connections from the authentication handler
180 // to |this| (which will then pass it to |connection_handler_|. 185 // to |this| (which will then pass it to |connection_handler_|.
181 authentication_handler_ = 186 authentication_handler_ =
182 base::WrapUnique(new EngineAuthenticationHandler(this, client_token)); 187 base::MakeUnique<EngineAuthenticationHandler>(this, client_token);
183 188
184 // Plumb unauthenticated connections to |authentication_handler_|. 189 // Plumb unauthenticated connections to |authentication_handler_|.
185 connection_manager_ = base::WrapUnique( 190 connection_manager_ = base::WrapUnique(
186 new EngineConnectionManager(authentication_handler_.get())); 191 new EngineConnectionManager(authentication_handler_.get()));
187 192
193 blob_channel_service_ =
194 base::MakeUnique<BlobChannelService>(blob_channel_sender, ui_task_runner);
195
188 // Adds BlimpTransports to connection_manager_. 196 // Adds BlimpTransports to connection_manager_.
189 net::IPEndPoint address(GetIPv4AnyAddress(), GetListeningPort()); 197 net::IPEndPoint address(GetIPv4AnyAddress(), GetListeningPort());
190 TCPEngineTransport* transport = new TCPEngineTransport(address, net_log_); 198 TCPEngineTransport* transport = new TCPEngineTransport(address, net_log_);
191 connection_manager_->AddTransport(base::WrapUnique(transport)); 199 connection_manager_->AddTransport(base::WrapUnique(transport));
192 200
193 transport->GetLocalAddress(&address); 201 transport->GetLocalAddress(&address);
194 port_ = address.port(); 202 port_ = address.port();
195 DVLOG(1) << "Engine port #: " << port_; 203 DVLOG(1) << "Engine port #: " << port_;
196 } 204 }
197 205
198 void EngineNetworkComponents::HandleConnection( 206 void EngineNetworkComponents::HandleConnection(
199 std::unique_ptr<BlimpConnection> connection) { 207 std::unique_ptr<BlimpConnection> connection) {
200 // Observe |connection| for disconnection events. 208 // Observe |connection| for disconnection events.
201 connection->AddConnectionErrorObserver(this); 209 connection->AddConnectionErrorObserver(this);
202 connection_handler_->HandleConnection(std::move(connection)); 210 connection_handler_.HandleConnection(std::move(connection));
203 } 211 }
204 212
205 void EngineNetworkComponents::OnConnectionError(int error) { 213 void EngineNetworkComponents::OnConnectionError(int error) {
206 DVLOG(1) << "EngineNetworkComponents::OnConnectionError(" << error << ")"; 214 DVLOG(1) << "EngineNetworkComponents::OnConnectionError(" << error << ")";
207 quit_closure_.Run(); 215 quit_closure_.Run();
208 } 216 }
209 217
210 BrowserConnectionHandler*
211 EngineNetworkComponents::GetBrowserConnectionHandler() {
212 return connection_handler_.get();
213 }
214
215 BlimpEngineSession::BlimpEngineSession( 218 BlimpEngineSession::BlimpEngineSession(
216 std::unique_ptr<BlimpBrowserContext> browser_context, 219 std::unique_ptr<BlimpBrowserContext> browser_context,
217 net::NetLog* net_log, 220 net::NetLog* net_log,
218 BlimpEngineConfig* engine_config, 221 BlimpEngineConfig* engine_config,
219 SettingsManager* settings_manager) 222 SettingsManager* settings_manager)
220 : screen_(new BlimpScreen), 223 : screen_(new BlimpScreen),
221 browser_context_(std::move(browser_context)), 224 browser_context_(std::move(browser_context)),
222 engine_config_(engine_config), 225 engine_config_(engine_config),
223 settings_manager_(settings_manager), 226 settings_manager_(settings_manager),
224 settings_feature_(settings_manager_), 227 settings_feature_(settings_manager_),
225 render_widget_feature_(settings_manager_), 228 render_widget_feature_(settings_manager_),
226 net_components_( 229 net_components_(new EngineNetworkComponents(net_log)) {
227 new EngineNetworkComponents(net_log,
228 QuitCurrentMessageLoopClosure())) {
229 DCHECK(engine_config_); 230 DCHECK(engine_config_);
230 DCHECK(settings_manager_); 231 DCHECK(settings_manager_);
231 232
232 screen_->UpdateDisplayScaleAndSize( 233 screen_->UpdateDisplayScaleAndSize(
233 kDefaultScaleFactor, 234 kDefaultScaleFactor,
234 gfx::Size(kDefaultDisplayWidth, kDefaultDisplayHeight)); 235 gfx::Size(kDefaultDisplayWidth, kDefaultDisplayHeight));
235 render_widget_feature_.SetDelegate(kDummyTabId, this); 236 render_widget_feature_.SetDelegate(kDummyTabId, this);
236 237
237 std::unique_ptr<HeliumBlobSenderDelegate> helium_blob_delegate( 238 std::unique_ptr<HeliumBlobSenderDelegate> helium_blob_delegate(
238 new HeliumBlobSenderDelegate); 239 new HeliumBlobSenderDelegate);
239 blob_delegate_ = helium_blob_delegate.get(); 240 blob_delegate_ = helium_blob_delegate.get();
240 blob_channel_sender_ = base::WrapUnique( 241 blob_channel_sender_ = base::MakeUnique<BlobChannelSenderImpl>(
241 new BlobChannelSenderImpl(base::WrapUnique(new InMemoryBlobCache), 242 base::MakeUnique<InMemoryBlobCache>(), std::move(helium_blob_delegate));
242 std::move(helium_blob_delegate))); 243 blob_channel_sender_weak_factory_ =
243 blob_channel_service_ = 244 base::MakeUnique<base::WeakPtrFactory<BlobChannelSenderImpl>>(
244 base::MakeUnique<BlobChannelService>(blob_channel_sender_.get()); 245 blob_channel_sender_.get());
246
245 device::GeolocationProvider::SetGeolocationDelegate( 247 device::GeolocationProvider::SetGeolocationDelegate(
246 geolocation_feature_.CreateGeolocationDelegate()); 248 geolocation_feature_.CreateGeolocationDelegate());
247 } 249 }
248 250
249 BlimpEngineSession::~BlimpEngineSession() { 251 BlimpEngineSession::~BlimpEngineSession() {
250 render_widget_feature_.RemoveDelegate(kDummyTabId); 252 render_widget_feature_.RemoveDelegate(kDummyTabId);
251 253
252 window_tree_host_->GetInputMethod()->RemoveObserver(this); 254 window_tree_host_->GetInputMethod()->RemoveObserver(this);
253 255
254 // Ensure that all tabs are torn down first, since teardown will 256 // Ensure that all tabs are torn down first, since teardown will
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 window_tree_host_->SetBounds(gfx::Rect(screen_->GetPrimaryDisplay().size())); 290 window_tree_host_->SetBounds(gfx::Rect(screen_->GetPrimaryDisplay().size()));
289 291
290 RegisterFeatures(); 292 RegisterFeatures();
291 293
292 // Initialize must only be posted after the RegisterFeature calls have 294 // Initialize must only be posted after the RegisterFeature calls have
293 // completed. 295 // completed.
294 content::BrowserThread::PostTask( 296 content::BrowserThread::PostTask(
295 content::BrowserThread::IO, FROM_HERE, 297 content::BrowserThread::IO, FROM_HERE,
296 base::Bind(&EngineNetworkComponents::Initialize, 298 base::Bind(&EngineNetworkComponents::Initialize,
297 base::Unretained(net_components_.get()), 299 base::Unretained(net_components_.get()),
300 base::ThreadTaskRunnerHandle::Get(),
301 blob_channel_sender_weak_factory_->GetWeakPtr(),
298 engine_config_->client_token())); 302 engine_config_->client_token()));
299 } 303 }
300 304
305 BlobChannelService* BlimpEngineSession::GetBlobChannelService() {
306 return net_components_->blob_channel_service();
307 }
308
301 void BlimpEngineSession::GetEnginePortForTesting( 309 void BlimpEngineSession::GetEnginePortForTesting(
302 const GetPortCallback& callback) { 310 const GetPortCallback& callback) {
303 content::BrowserThread::PostTaskAndReplyWithResult( 311 content::BrowserThread::PostTaskAndReplyWithResult(
304 content::BrowserThread::IO, FROM_HERE, 312 content::BrowserThread::IO, FROM_HERE,
305 base::Bind(&EngineNetworkComponents::GetPortForTesting, 313 base::Bind(&EngineNetworkComponents::GetPortForTesting,
306 base::Unretained(net_components_.get())), 314 base::Unretained(net_components_.get())),
307 callback); 315 callback);
308 } 316 }
309 317
310 void BlimpEngineSession::RegisterFeatures() { 318 void BlimpEngineSession::RegisterFeatures() {
311 thread_pipe_manager_.reset( 319 thread_pipe_manager_.reset(
312 new ThreadPipeManager(content::BrowserThread::GetTaskRunnerForThread( 320 new ThreadPipeManager(content::BrowserThread::GetTaskRunnerForThread(
313 content::BrowserThread::IO), 321 content::BrowserThread::IO),
314 net_components_->GetBrowserConnectionHandler())); 322 net_components_->connection_handler()));
315 323
316 // Register features' message senders and receivers. 324 // Register features' message senders and receivers.
317 tab_control_message_sender_ = 325 tab_control_message_sender_ =
318 thread_pipe_manager_->RegisterFeature(BlimpMessage::kTabControl, this); 326 thread_pipe_manager_->RegisterFeature(BlimpMessage::kTabControl, this);
319 navigation_message_sender_ = 327 navigation_message_sender_ =
320 thread_pipe_manager_->RegisterFeature(BlimpMessage::kNavigation, this); 328 thread_pipe_manager_->RegisterFeature(BlimpMessage::kNavigation, this);
321 render_widget_feature_.set_render_widget_message_sender( 329 render_widget_feature_.set_render_widget_message_sender(
322 thread_pipe_manager_->RegisterFeature(BlimpMessage::kRenderWidget, 330 thread_pipe_manager_->RegisterFeature(BlimpMessage::kRenderWidget,
323 &render_widget_feature_)); 331 &render_widget_feature_));
324 render_widget_feature_.set_input_message_sender( 332 render_widget_feature_.set_input_message_sender(
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 parent->AddChild(content); 580 parent->AddChild(content);
573 content->Show(); 581 content->Show();
574 582
575 tab_ = base::WrapUnique(new Tab(std::move(new_contents), target_tab_id, 583 tab_ = base::WrapUnique(new Tab(std::move(new_contents), target_tab_id,
576 &render_widget_feature_, 584 &render_widget_feature_,
577 navigation_message_sender_.get())); 585 navigation_message_sender_.get()));
578 } 586 }
579 587
580 } // namespace engine 588 } // namespace engine
581 } // namespace blimp 589 } // namespace blimp
OLDNEW
« no previous file with comments | « blimp/engine/session/blimp_engine_session.h ('k') | blimp/net/blob_channel/blob_channel_sender_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698