Index: chrome/browser/devtools/device/devtools_android_bridge.cc |
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.cc b/chrome/browser/devtools/device/devtools_android_bridge.cc |
index 97d6834ea78a13430774da404b8228dd4dbaf1ff..dbc2a651d9c8af11aeb20cadb946399dc35040fb 100644 |
--- a/chrome/browser/devtools/device/devtools_android_bridge.cc |
+++ b/chrome/browser/devtools/device/devtools_android_bridge.cc |
@@ -309,6 +309,7 @@ class DevToolsAndroidBridge::AgentHostDelegate |
bool socket_opened_; |
bool is_web_view_; |
std::vector<std::string> pending_messages_; |
+ scoped_refptr<AndroidDeviceManager::Device> device_; |
scoped_ptr<AndroidDeviceManager::AndroidWebSocket> web_socket_; |
content::DevToolsAgentHost* agent_host_; |
content::DevToolsExternalAgentProxy* proxy_; |
@@ -362,12 +363,21 @@ void DevToolsAndroidBridge::AgentHostDelegate::Attach( |
proxy_ = proxy; |
content::RecordAction(base::UserMetricsAction(is_web_view_ ? |
"DevTools_InspectAndroidWebView" : "DevTools_InspectAndroidPage")); |
+ |
+ DeviceMap& device_map(bridge_->device_map_); |
+ DeviceMap::iterator it = device_map.find(browser_id_.first); |
+ if (it == device_map.end()) |
+ return; |
+ |
+ // Retain the device so it's not released until AgentHost is detached. |
+ device_ = it->second; |
web_socket_.reset( |
- bridge_->CreateWebSocket(browser_id_, debug_url_, this)); |
+ device_->CreateWebSocket(browser_id_.second, debug_url_, this)); |
} |
void DevToolsAndroidBridge::AgentHostDelegate::Detach() { |
web_socket_.reset(); |
+ device_ = nullptr; |
} |
void DevToolsAndroidBridge::AgentHostDelegate::SendMessageToBackend( |
@@ -633,18 +643,6 @@ DevToolsAndroidBridge::GetBrowserAgentHost( |
browser->IsWebView()); |
} |
-AndroidDeviceManager::AndroidWebSocket* |
-DevToolsAndroidBridge::CreateWebSocket( |
- const BrowserId& browser_id, |
- const std::string& url, |
- AndroidDeviceManager::AndroidWebSocket::Delegate* delegate) { |
- DeviceMap::iterator it = device_map_.find(browser_id.first); |
- if (it == device_map_.end()) |
- return NULL; |
- |
- return it->second->CreateWebSocket(browser_id.second, url, delegate); |
-} |
- |
void DevToolsAndroidBridge::RespondToOpenOnUIThread( |
scoped_refptr<RemoteBrowser> browser, |
const RemotePageCallback& callback, |