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

Unified Diff: chrome/browser/devtools/device/devtools_android_bridge.cc

Issue 505783002: Revert of DevTools: Removed refcounting from AndroidWebSocket (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
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 e58a8572e8a499ce1d075ba2dec3f1b1fa08b46e..c25c4699d204fccaff523286fac09269557dcca8 100644
--- a/chrome/browser/devtools/device/devtools_android_bridge.cc
+++ b/chrome/browser/devtools/device/devtools_android_bridge.cc
@@ -186,12 +186,11 @@
private:
virtual void OnSocketOpened() OVERRIDE;
virtual void OnFrameRead(const std::string& message) OVERRIDE;
- virtual void OnSocketClosed() OVERRIDE;
- virtual ~ProtocolCommand();
+ virtual void OnSocketClosed(bool closed_by_device) OVERRIDE;
const std::string command_;
const base::Closure callback_;
- scoped_ptr<DevToolsAndroidBridge::AndroidWebSocket> web_socket_;
+ scoped_refptr<DevToolsAndroidBridge::AndroidWebSocket> web_socket_;
DISALLOW_COPY_AND_ASSIGN(ProtocolCommand);
};
@@ -202,8 +201,9 @@
const std::string& command,
const base::Closure callback)
: command_(command),
- callback_(callback),
- web_socket_(browser->CreateWebSocket(debug_url, this)) {
+ callback_(callback){
+ web_socket_ = browser->CreateWebSocket(debug_url, this);
+ web_socket_->Connect();
}
void ProtocolCommand::OnSocketOpened() {
@@ -211,16 +211,14 @@
}
void ProtocolCommand::OnFrameRead(const std::string& message) {
+ web_socket_->Disconnect();
+}
+
+void ProtocolCommand::OnSocketClosed(bool closed_by_device) {
+ if (!callback_.is_null()) {
+ callback_.Run();
+ }
delete this;
-}
-
-void ProtocolCommand::OnSocketClosed() {
- delete this;
-}
-
-ProtocolCommand::~ProtocolCommand() {
- if (!callback_.is_null())
- callback_.Run();
}
} // namespace
@@ -293,15 +291,14 @@
const std::string& message) OVERRIDE;
virtual void OnSocketOpened() OVERRIDE;
virtual void OnFrameRead(const std::string& message) OVERRIDE;
- virtual void OnSocketClosed() OVERRIDE;
+ virtual void OnSocketClosed(bool closed_by_device) OVERRIDE;
const std::string id_;
- scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser_;
- const std::string debug_url_;
bool socket_opened_;
+ bool detached_;
bool is_web_view_;
std::vector<std::string> pending_messages_;
- scoped_ptr<DevToolsAndroidBridge::AndroidWebSocket> web_socket_;
+ scoped_refptr<DevToolsAndroidBridge::AndroidWebSocket> web_socket_;
content::DevToolsAgentHost* agent_host_;
content::DevToolsExternalAgentProxy* proxy_;
DISALLOW_COPY_AND_ASSIGN(AgentHostDelegate);
@@ -330,10 +327,10 @@
scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser,
const std::string& debug_url)
: id_(id),
- browser_(browser),
- debug_url_(debug_url),
socket_opened_(false),
+ detached_(false),
is_web_view_(browser->IsWebView()),
+ web_socket_(browser->CreateWebSocket(debug_url, this)),
agent_host_(NULL),
proxy_(NULL) {
g_host_delegates.Get()[id] = this;
@@ -341,17 +338,20 @@
AgentHostDelegate::~AgentHostDelegate() {
g_host_delegates.Get().erase(id_);
+ web_socket_->ClearDelegate();
}
void AgentHostDelegate::Attach(content::DevToolsExternalAgentProxy* proxy) {
proxy_ = proxy;
content::RecordAction(base::UserMetricsAction(is_web_view_ ?
"DevTools_InspectAndroidWebView" : "DevTools_InspectAndroidPage"));
- web_socket_.reset(browser_->CreateWebSocket(debug_url_, this));
+ web_socket_->Connect();
}
void AgentHostDelegate::Detach() {
- web_socket_.reset();
+ detached_ = true;
+ if (socket_opened_)
+ web_socket_->Disconnect();
}
void AgentHostDelegate::SendMessageToBackend(const std::string& message) {
@@ -362,6 +362,11 @@
}
void AgentHostDelegate::OnSocketOpened() {
+ if (detached_) {
+ web_socket_->Disconnect();
+ return;
+ }
+
socket_opened_ = true;
for (std::vector<std::string>::iterator it = pending_messages_.begin();
it != pending_messages_.end(); ++it) {
@@ -375,8 +380,8 @@
proxy_->DispatchOnClientHost(message);
}
-void AgentHostDelegate::OnSocketClosed() {
- if (proxy_)
+void AgentHostDelegate::OnSocketClosed(bool closed_by_device) {
+ if (proxy_ && closed_by_device)
proxy_->ConnectionClosed();
}
@@ -609,7 +614,7 @@
"adb:" + device_->serial() + ":" + socket_, this, kBrowserTargetSocket);
}
-DevToolsAndroidBridge::AndroidWebSocket*
+scoped_refptr<DevToolsAndroidBridge::AndroidWebSocket>
DevToolsAndroidBridge::RemoteBrowser::CreateWebSocket(
const std::string& url,
DevToolsAndroidBridge::AndroidWebSocket::Delegate* delegate) {
« no previous file with comments | « chrome/browser/devtools/device/devtools_android_bridge.h ('k') | chrome/browser/devtools/device/port_forwarding_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698