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 |