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

Side by Side Diff: chrome/browser/devtools/device/devtools_android_bridge.cc

Issue 644963003: [DevTools] Port forwarding doesn't keep USB connection (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git/+/websocket
Patch Set: Created 6 years, 2 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "chrome/browser/devtools/device/devtools_android_bridge.h" 5 #include "chrome/browser/devtools/device/devtools_android_bridge.h"
6 6
7 #include <map> 7 #include <map>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 virtual void OnFrameRead(const std::string& message) override; 302 virtual void OnFrameRead(const std::string& message) override;
303 virtual void OnSocketClosed() override; 303 virtual void OnSocketClosed() override;
304 304
305 std::string id_; 305 std::string id_;
306 scoped_refptr<DevToolsAndroidBridge> bridge_; 306 scoped_refptr<DevToolsAndroidBridge> bridge_;
307 BrowserId browser_id_; 307 BrowserId browser_id_;
308 std::string debug_url_; 308 std::string debug_url_;
309 bool socket_opened_; 309 bool socket_opened_;
310 bool is_web_view_; 310 bool is_web_view_;
311 std::vector<std::string> pending_messages_; 311 std::vector<std::string> pending_messages_;
312 scoped_refptr<AndroidDeviceManager::Device> device_;
312 scoped_ptr<AndroidDeviceManager::AndroidWebSocket> web_socket_; 313 scoped_ptr<AndroidDeviceManager::AndroidWebSocket> web_socket_;
313 content::DevToolsAgentHost* agent_host_; 314 content::DevToolsAgentHost* agent_host_;
314 content::DevToolsExternalAgentProxy* proxy_; 315 content::DevToolsExternalAgentProxy* proxy_;
315 DISALLOW_COPY_AND_ASSIGN(AgentHostDelegate); 316 DISALLOW_COPY_AND_ASSIGN(AgentHostDelegate);
316 }; 317 };
317 318
318 // static 319 // static
319 scoped_refptr<content::DevToolsAgentHost> 320 scoped_refptr<content::DevToolsAgentHost>
320 DevToolsAndroidBridge::AgentHostDelegate::GetOrCreateAgentHost( 321 DevToolsAndroidBridge::AgentHostDelegate::GetOrCreateAgentHost(
321 scoped_refptr<DevToolsAndroidBridge> bridge, 322 scoped_refptr<DevToolsAndroidBridge> bridge,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 356
356 DevToolsAndroidBridge::AgentHostDelegate::~AgentHostDelegate() { 357 DevToolsAndroidBridge::AgentHostDelegate::~AgentHostDelegate() {
357 bridge_->host_delegates_.erase(id_); 358 bridge_->host_delegates_.erase(id_);
358 } 359 }
359 360
360 void DevToolsAndroidBridge::AgentHostDelegate::Attach( 361 void DevToolsAndroidBridge::AgentHostDelegate::Attach(
361 content::DevToolsExternalAgentProxy* proxy) { 362 content::DevToolsExternalAgentProxy* proxy) {
362 proxy_ = proxy; 363 proxy_ = proxy;
363 content::RecordAction(base::UserMetricsAction(is_web_view_ ? 364 content::RecordAction(base::UserMetricsAction(is_web_view_ ?
364 "DevTools_InspectAndroidWebView" : "DevTools_InspectAndroidPage")); 365 "DevTools_InspectAndroidWebView" : "DevTools_InspectAndroidPage"));
366
367 DeviceMap& device_map(bridge_->device_map_);
368 DeviceMap::iterator it = device_map.find(browser_id_.first);
369 if (it == device_map.end())
370 return;
371
372 // Retain the device so it's not released until AgentHost is detached.
373 device_ = it->second;
365 web_socket_.reset( 374 web_socket_.reset(
366 bridge_->CreateWebSocket(browser_id_, debug_url_, this)); 375 device_->CreateWebSocket(browser_id_.second, debug_url_, this));
367 } 376 }
368 377
369 void DevToolsAndroidBridge::AgentHostDelegate::Detach() { 378 void DevToolsAndroidBridge::AgentHostDelegate::Detach() {
370 web_socket_.reset(); 379 web_socket_.reset();
380 device_ = nullptr;
371 } 381 }
372 382
373 void DevToolsAndroidBridge::AgentHostDelegate::SendMessageToBackend( 383 void DevToolsAndroidBridge::AgentHostDelegate::SendMessageToBackend(
374 const std::string& message) { 384 const std::string& message) {
375 if (socket_opened_) 385 if (socket_opened_)
376 web_socket_->SendFrame(message); 386 web_socket_->SendFrame(message);
377 else 387 else
378 pending_messages_.push_back(message); 388 pending_messages_.push_back(message);
379 } 389 }
380 390
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 DevToolsAndroidBridge::GetBrowserAgentHost( 636 DevToolsAndroidBridge::GetBrowserAgentHost(
627 scoped_refptr<RemoteBrowser> browser) { 637 scoped_refptr<RemoteBrowser> browser) {
628 return AgentHostDelegate::GetOrCreateAgentHost( 638 return AgentHostDelegate::GetOrCreateAgentHost(
629 this, 639 this,
630 "adb:" + browser->serial() + ":" + browser->socket(), 640 "adb:" + browser->serial() + ":" + browser->socket(),
631 browser->browser_id_, 641 browser->browser_id_,
632 kBrowserTargetSocket, 642 kBrowserTargetSocket,
633 browser->IsWebView()); 643 browser->IsWebView());
634 } 644 }
635 645
636 AndroidDeviceManager::AndroidWebSocket*
637 DevToolsAndroidBridge::CreateWebSocket(
638 const BrowserId& browser_id,
639 const std::string& url,
640 AndroidDeviceManager::AndroidWebSocket::Delegate* delegate) {
641 DeviceMap::iterator it = device_map_.find(browser_id.first);
642 if (it == device_map_.end())
643 return NULL;
644
645 return it->second->CreateWebSocket(browser_id.second, url, delegate);
646 }
647
648 void DevToolsAndroidBridge::RespondToOpenOnUIThread( 646 void DevToolsAndroidBridge::RespondToOpenOnUIThread(
649 scoped_refptr<RemoteBrowser> browser, 647 scoped_refptr<RemoteBrowser> browser,
650 const RemotePageCallback& callback, 648 const RemotePageCallback& callback,
651 int result, 649 int result,
652 const std::string& response) { 650 const std::string& response) {
653 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 651 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
654 if (result < 0) { 652 if (result < 0) {
655 callback.Run(NULL); 653 callback.Run(NULL);
656 return; 654 return;
657 } 655 }
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 bool enabled; 959 bool enabled;
962 if (pref_value->GetAsBoolean(&enabled) && enabled) { 960 if (pref_value->GetAsBoolean(&enabled) && enabled) {
963 device_providers.push_back(new UsbDeviceProvider(profile_)); 961 device_providers.push_back(new UsbDeviceProvider(profile_));
964 } 962 }
965 device_manager_->SetDeviceProviders(device_providers); 963 device_manager_->SetDeviceProviders(device_providers);
966 if (NeedsDeviceListPolling()) { 964 if (NeedsDeviceListPolling()) {
967 StopDeviceListPolling(); 965 StopDeviceListPolling();
968 StartDeviceListPolling(); 966 StartDeviceListPolling();
969 } 967 }
970 } 968 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698