| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |