Index: chrome/browser/devtools/devtools_adb_bridge.cc |
diff --git a/chrome/browser/devtools/devtools_adb_bridge.cc b/chrome/browser/devtools/devtools_adb_bridge.cc |
index f9f66179f36a44a221a650054c0c819d3cc4dfc2..facf2a581071f62abd30c3a4d598a01852dc4d5e 100644 |
--- a/chrome/browser/devtools/devtools_adb_bridge.cc |
+++ b/chrome/browser/devtools/devtools_adb_bridge.cc |
@@ -42,9 +42,6 @@ using content::BrowserThread; |
namespace { |
const char kDevToolsAdbBridgeThreadName[] = "Chrome_DevToolsADBThread"; |
-const char kHostDevicesCommand[] = "host:devices"; |
-const char kHostTransportCommand[] = "host:transport:%s|%s"; |
-const char kLocalAbstractCommand[] = "localabstract:%s"; |
const char kDeviceModelCommand[] = "shell:getprop ro.product.model"; |
const char kOpenedUnixSocketsCommand[] = "shell:cat /proc/net/unix"; |
const char kListProcessesCommand[] = "shell:ps"; |
@@ -57,8 +54,6 @@ const char kClosePageRequest[] = "GET /json/close/%s HTTP/1.1\r\n\r\n"; |
const char kNewPageRequest[] = "GET /json/new HTTP/1.1\r\n\r\n"; |
const char kActivatePageRequest[] = |
"GET /json/activate/%s HTTP/1.1\r\n\r\n"; |
-const int kAdbPort = 5037; |
-const int kBufferSize = 16 * 1024; |
const int kAdbPollingIntervalMs = 1000; |
const char kUrlParam[] = "url"; |
@@ -71,126 +66,38 @@ const char kLocalChrome[] = "Local Chrome"; |
#endif // defined(DEBUG_DEVTOOLS) |
typedef DevToolsAdbBridge::Callback Callback; |
-typedef std::vector<scoped_refptr<DevToolsAdbBridge::AndroidDevice> > |
+typedef std::vector<scoped_refptr<AndroidDevice> > |
AndroidDevices; |
typedef base::Callback<void(const AndroidDevices&)> AndroidDevicesCallback; |
-class AdbDeviceImpl : public DevToolsAdbBridge::AndroidDevice { |
- public: |
- explicit AdbDeviceImpl(const std::string& serial) |
- : AndroidDevice(serial) { |
- } |
- |
- virtual void RunCommand(const std::string& command, |
- const CommandCallback& callback) OVERRIDE { |
- std::string query = base::StringPrintf(kHostTransportCommand, |
- serial().c_str(), command.c_str()); |
- AdbClientSocket::AdbQuery(kAdbPort, query, callback); |
- } |
- |
- virtual void OpenSocket(const std::string& name, |
- const SocketCallback& callback) OVERRIDE { |
- std::string socket_name = |
- base::StringPrintf(kLocalAbstractCommand, name.c_str()); |
- AdbClientSocket::TransportQuery(kAdbPort, serial(), socket_name, callback); |
- } |
- private: |
- virtual ~AdbDeviceImpl() {} |
-}; |
- |
-class UsbDeviceImpl : public DevToolsAdbBridge::AndroidDevice { |
- public: |
- explicit UsbDeviceImpl(AndroidUsbDevice* device) |
- : AndroidDevice(device->serial()), |
- device_(device) { |
- device_->InitOnCallerThread(); |
- } |
- |
- virtual void RunCommand(const std::string& command, |
- const CommandCallback& callback) OVERRIDE { |
- net::StreamSocket* socket = device_->CreateSocket(command); |
- int result = socket->Connect(base::Bind(&UsbDeviceImpl::OpenedForCommand, |
- this, callback, socket)); |
- if (result != net::ERR_IO_PENDING) |
- callback.Run(result, std::string()); |
- } |
- |
- virtual void OpenSocket(const std::string& name, |
- const SocketCallback& callback) OVERRIDE { |
- std::string socket_name = |
- base::StringPrintf(kLocalAbstractCommand, name.c_str()); |
- net::StreamSocket* socket = device_->CreateSocket(socket_name); |
- int result = socket->Connect(base::Bind(&UsbDeviceImpl::OnOpenSocket, this, |
- callback, socket)); |
- if (result != net::ERR_IO_PENDING) |
- callback.Run(result, NULL); |
- } |
- |
- private: |
- void OnOpenSocket(const SocketCallback& callback, |
- net::StreamSocket* socket, |
- int result) { |
- callback.Run(result, result == net::OK ? socket : NULL); |
- } |
- |
- void OpenedForCommand(const CommandCallback& callback, |
- net::StreamSocket* socket, |
- int result) { |
- if (result != net::OK) { |
- callback.Run(result, std::string()); |
- return; |
- } |
- scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kBufferSize); |
- result = socket->Read(buffer, kBufferSize, |
- base::Bind(&UsbDeviceImpl::OnRead, this, |
- socket, buffer, std::string(), callback)); |
- if (result != net::ERR_IO_PENDING) |
- OnRead(socket, buffer, std::string(), callback, result); |
- } |
- |
- void OnRead(net::StreamSocket* socket, |
- scoped_refptr<net::IOBuffer> buffer, |
- const std::string& data, |
- const CommandCallback& callback, |
- int result) { |
- if (result <= 0) { |
- callback.Run(result, result == 0 ? data : std::string()); |
- delete socket; |
- return; |
- } |
- |
- std::string new_data = data + std::string(buffer->data(), result); |
- result = socket->Read(buffer, kBufferSize, |
- base::Bind(&UsbDeviceImpl::OnRead, this, |
- socket, buffer, new_data, callback)); |
- if (result != net::ERR_IO_PENDING) |
- OnRead(socket, buffer, new_data, callback, result); |
- } |
- |
- virtual ~UsbDeviceImpl() {} |
- scoped_refptr<AndroidUsbDevice> device_; |
-}; |
- |
class AdbPagesCommand : public base::RefCountedThreadSafe< |
AdbPagesCommand, |
content::BrowserThread::DeleteOnUIThread> { |
public: |
typedef base::Callback<void(DevToolsAdbBridge::RemoteDevices*)> Callback; |
- AdbPagesCommand(DevToolsAdbBridge* bridge, |
- crypto::RSAPrivateKey* rsa_key, |
- const Callback& callback) |
- : bridge_(bridge), |
- callback_(callback) { |
+ AdbPagesCommand( |
+ scoped_refptr<RefCountedAdbThread> adb_thread, |
+ crypto::RSAPrivateKey* rsa_key, |
+ const Callback& callback, |
+ const DevToolsAdbBridge::DeviceProviders& device_providers) |
+ : adb_thread_(adb_thread), |
+ callback_(callback), |
+ device_providers_(device_providers) { |
remote_devices_.reset(new DevToolsAdbBridge::RemoteDevices()); |
- if (CommandLine::ForCurrentProcess()->HasSwitch( |
+ DCHECK(!device_providers_.empty()); |
+ |
+ ProcessDeviceProviders(); |
+ |
+ // TODO:dzvorygin fix later |
+ /* if (CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kRemoteDebuggingRawUSB)) { |
AndroidUsbDevice::Enumerate(rsa_key, |
base::Bind(&AdbPagesCommand::ReceivedUsbDevices, this)); |
} else { |
ReceivedUsbDevices(AndroidUsbDevices()); |
- } |
+ }*/ |
} |
private: |
@@ -202,46 +109,34 @@ class AdbPagesCommand : public base::RefCountedThreadSafe< |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
} |
- void ReceivedUsbDevices(const AndroidUsbDevices& usb_devices) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- bridge_->GetAdbMessageLoop()->PostTask( |
- FROM_HERE, base::Bind(&AdbPagesCommand::WrapUsbDevices, this, |
- usb_devices)); |
- } |
+ void ProcessDeviceProviders() { |
+ if (device_providers_.empty()) { |
+ ProcessSerials(); |
+ return; |
+ } |
- void WrapUsbDevices(const AndroidUsbDevices& usb_devices) { |
- DCHECK_EQ(bridge_->GetAdbMessageLoop(), base::MessageLoop::current()); |
+ const scoped_refptr<DevToolsDeviceProvider>& device_provider = |
+ device_providers_.back(); |
-#if defined(DEBUG_DEVTOOLS) |
- devices_.push_back(new AdbDeviceImpl("")); // For desktop remote debugging. |
-#endif // defined(DEBUG_DEVTOOLS) |
+ device_provider->QueryDevices( |
+ base::Bind(&AdbPagesCommand::ReceivedDevices, this)); |
+ } |
- for (AndroidUsbDevices::const_iterator it = usb_devices.begin(); |
- it != usb_devices.end(); ++it) { |
- devices_.push_back(new UsbDeviceImpl(*it)); |
- } |
+ void ReceivedDevices(const AndroidDevices& devices) { |
+ DCHECK(!device_providers_.empty()); |
+ device_providers_.pop_back(); |
- AdbClientSocket::AdbQuery( |
- kAdbPort, kHostDevicesCommand, |
- base::Bind(&AdbPagesCommand::ReceivedAdbDevices, this)); |
- } |
+ devices_.insert(devices_.end(), devices.begin(), devices.end()); |
- void ReceivedAdbDevices( |
- int result, |
- const std::string& response) { |
- DCHECK_EQ(bridge_->GetAdbMessageLoop(), base::MessageLoop::current()); |
- std::vector<std::string> serials; |
- Tokenize(response, "\n", &serials); |
- for (size_t i = 0; i < serials.size(); ++i) { |
- std::vector<std::string> tokens; |
- Tokenize(serials[i], "\t ", &tokens); |
- devices_.push_back(new AdbDeviceImpl(tokens[0])); |
+ if (!device_providers_.empty()) { |
+ ProcessDeviceProviders(); |
+ } else { |
+ ProcessSerials(); |
} |
- ProcessSerials(); |
} |
void ProcessSerials() { |
- DCHECK_EQ(bridge_->GetAdbMessageLoop(), base::MessageLoop::current()); |
+ DCHECK_EQ(adb_thread_->message_loop(), base::MessageLoop::current()); |
if (devices_.size() == 0) { |
BrowserThread::PostTask( |
BrowserThread::UI, FROM_HERE, |
@@ -252,13 +147,14 @@ class AdbPagesCommand : public base::RefCountedThreadSafe< |
#if defined(DEBUG_DEVTOOLS) |
// For desktop remote debugging. |
if (devices_.back()->serial().empty()) { |
- scoped_refptr<DevToolsAdbBridge::AndroidDevice> device = |
+ scoped_refptr<AndroidDevice> device = |
devices_.back(); |
device->set_model(kLocalChrome); |
remote_devices_->push_back( |
- new DevToolsAdbBridge::RemoteDevice(bridge_, device)); |
+ new DevToolsAdbBridge::RemoteDevice(device)); |
scoped_refptr<DevToolsAdbBridge::RemoteBrowser> remote_browser = |
- new DevToolsAdbBridge::RemoteBrowser(bridge_, device, std::string()); |
+ new DevToolsAdbBridge::RemoteBrowser( |
+ adb_thread_, device, std::string()); |
remote_browser->set_product(kChrome); |
remote_devices_->back()->AddBrowser(remote_browser); |
browsers_.push_back(remote_browser); |
@@ -269,28 +165,28 @@ class AdbPagesCommand : public base::RefCountedThreadSafe< |
} |
#endif // defined(DEBUG_DEVTOOLS) |
- scoped_refptr<DevToolsAdbBridge::AndroidDevice> device = devices_.back(); |
+ scoped_refptr<AndroidDevice> device = devices_.back(); |
device->RunCommand(kDeviceModelCommand, |
base::Bind(&AdbPagesCommand::ReceivedModel, this)); |
} |
void ReceivedModel(int result, const std::string& response) { |
- DCHECK_EQ(bridge_->GetAdbMessageLoop(), base::MessageLoop::current()); |
+ DCHECK_EQ(adb_thread_->message_loop(), base::MessageLoop::current()); |
if (result < 0) { |
devices_.pop_back(); |
ProcessSerials(); |
return; |
} |
- scoped_refptr<DevToolsAdbBridge::AndroidDevice> device = devices_.back(); |
+ scoped_refptr<AndroidDevice> device = devices_.back(); |
device->set_model(response); |
remote_devices_->push_back( |
- new DevToolsAdbBridge::RemoteDevice(bridge_, device)); |
+ new DevToolsAdbBridge::RemoteDevice(device)); |
device->RunCommand(kOpenedUnixSocketsCommand, |
base::Bind(&AdbPagesCommand::ReceivedSockets, this)); |
} |
void ReceivedSockets(int result, const std::string& response) { |
- DCHECK_EQ(bridge_->GetAdbMessageLoop(), base::MessageLoop::current()); |
+ DCHECK_EQ(adb_thread_->message_loop(), base::MessageLoop::current()); |
if (result < 0) { |
devices_.pop_back(); |
ProcessSerials(); |
@@ -298,17 +194,17 @@ class AdbPagesCommand : public base::RefCountedThreadSafe< |
} |
ParseSocketsList(response); |
- scoped_refptr<DevToolsAdbBridge::AndroidDevice> device = devices_.back(); |
+ scoped_refptr<AndroidDevice> device = devices_.back(); |
device->RunCommand(kDumpsysCommand, |
base::Bind(&AdbPagesCommand::ReceivedDumpsys, this)); |
} |
void ReceivedDumpsys(int result, const std::string& response) { |
- DCHECK_EQ(bridge_->GetAdbMessageLoop(), base::MessageLoop::current()); |
+ DCHECK_EQ(adb_thread_->message_loop(), base::MessageLoop::current()); |
if (result >= 0) |
ParseDumpsysResponse(response); |
- scoped_refptr<DevToolsAdbBridge::AndroidDevice> device = devices_.back(); |
+ scoped_refptr<AndroidDevice> device = devices_.back(); |
device->RunCommand(kListProcessesCommand, |
base::Bind(&AdbPagesCommand::ReceivedProcesses, this)); |
} |
@@ -326,12 +222,12 @@ class AdbPagesCommand : public base::RefCountedThreadSafe< |
} |
void ProcessSockets() { |
- DCHECK_EQ(bridge_->GetAdbMessageLoop(), base::MessageLoop::current()); |
+ DCHECK_EQ(adb_thread_->message_loop(), base::MessageLoop::current()); |
if (browsers_.size() == 0) { |
devices_.pop_back(); |
ProcessSerials(); |
} else { |
- scoped_refptr<DevToolsAdbBridge::AndroidDevice> device = devices_.back(); |
+ scoped_refptr<AndroidDevice> device = devices_.back(); |
device->HttpQuery(browsers_.back()->socket(), kVersionRequest, |
base::Bind(&AdbPagesCommand::ReceivedVersion, this)); |
} |
@@ -339,7 +235,7 @@ class AdbPagesCommand : public base::RefCountedThreadSafe< |
void ReceivedVersion(int result, |
const std::string& response) { |
- DCHECK_EQ(bridge_->GetAdbMessageLoop(), base::MessageLoop::current()); |
+ DCHECK_EQ(adb_thread_->message_loop(), base::MessageLoop::current()); |
if (result < 0) { |
browsers_.pop_back(); |
ProcessSockets(); |
@@ -364,14 +260,14 @@ class AdbPagesCommand : public base::RefCountedThreadSafe< |
} |
} |
- scoped_refptr<DevToolsAdbBridge::AndroidDevice> device = devices_.back(); |
+ scoped_refptr<AndroidDevice> device = devices_.back(); |
device->HttpQuery(browsers_.back()->socket(), kPageListRequest, |
base::Bind(&AdbPagesCommand::ReceivedPages, this)); |
} |
void ReceivedPages(int result, |
const std::string& response) { |
- DCHECK_EQ(bridge_->GetAdbMessageLoop(), base::MessageLoop::current()); |
+ DCHECK_EQ(adb_thread_->message_loop(), base::MessageLoop::current()); |
scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser = browsers_.back(); |
browsers_.pop_back(); |
if (result < 0) { |
@@ -394,7 +290,7 @@ class AdbPagesCommand : public base::RefCountedThreadSafe< |
if (!item || !item->GetAsDictionary(&dict)) |
continue; |
browser->AddPage(new DevToolsAdbBridge::RemotePage( |
- bridge_, browser->device(), browser->socket(), *dict)); |
+ adb_thread_, browser->device(), browser->socket(), *dict)); |
} |
ProcessSockets(); |
} |
@@ -439,7 +335,7 @@ class AdbPagesCommand : public base::RefCountedThreadSafe< |
std::string socket = path_field.substr(1); |
scoped_refptr<DevToolsAdbBridge::RemoteBrowser> remote_browser = |
new DevToolsAdbBridge::RemoteBrowser( |
- bridge_, remote_device->device(), socket); |
+ adb_thread_, remote_device->device(), socket); |
std::string product = path_field.substr(1, socket_name_pos - 1); |
product[0] = base::ToUpperASCII(product[0]); |
@@ -511,9 +407,10 @@ class AdbPagesCommand : public base::RefCountedThreadSafe< |
remote_devices_->back()->SetScreenSize(gfx::Size(width, height)); |
} |
- scoped_refptr<DevToolsAdbBridge> bridge_; |
+ scoped_refptr<RefCountedAdbThread> adb_thread_; |
Callback callback_; |
AndroidDevices devices_; |
+ DevToolsAdbBridge::DeviceProviders device_providers_; |
DevToolsAdbBridge::RemoteBrowsers browsers_; |
scoped_ptr<DevToolsAdbBridge::RemoteDevices> remote_devices_; |
}; |
@@ -523,8 +420,8 @@ class AdbPagesCommand : public base::RefCountedThreadSafe< |
class AdbProtocolCommand : public AdbWebSocket::Delegate { |
public: |
AdbProtocolCommand( |
- scoped_refptr<DevToolsAdbBridge> bridge_, |
- scoped_refptr<DevToolsAdbBridge::AndroidDevice> device, |
+ scoped_refptr<RefCountedAdbThread> adb_thread, |
+ scoped_refptr<AndroidDevice> device, |
const std::string& socket_name, |
const std::string& debug_url, |
const std::string& command); |
@@ -535,7 +432,7 @@ class AdbProtocolCommand : public AdbWebSocket::Delegate { |
virtual void OnSocketClosed(bool closed_by_device) OVERRIDE; |
virtual bool ProcessIncomingMessage(const std::string& message) OVERRIDE; |
- scoped_refptr<DevToolsAdbBridge> bridge_; |
+ scoped_refptr<RefCountedAdbThread> adb_thread_; |
const std::string command_; |
scoped_refptr<AdbWebSocket> web_socket_; |
@@ -543,15 +440,15 @@ class AdbProtocolCommand : public AdbWebSocket::Delegate { |
}; |
AdbProtocolCommand::AdbProtocolCommand( |
- scoped_refptr<DevToolsAdbBridge> bridge, |
- scoped_refptr<DevToolsAdbBridge::AndroidDevice> device, |
+ scoped_refptr<RefCountedAdbThread> adb_thread, |
+ scoped_refptr<AndroidDevice> device, |
const std::string& socket_name, |
const std::string& debug_url, |
const std::string& command) |
- : bridge_(bridge), |
+ : adb_thread_(adb_thread), |
command_(command) { |
web_socket_ = new AdbWebSocket( |
- device, socket_name, debug_url, bridge_->GetAdbMessageLoop(), this); |
+ device, socket_name, debug_url, adb_thread_->message_loop(), this); |
} |
void AdbProtocolCommand::OnSocketOpened() { |
@@ -580,8 +477,9 @@ typedef std::map<std::string, AgentHostDelegate*> AgentHostDelegates; |
base::LazyInstance<AgentHostDelegates>::Leaky g_host_delegates = |
LAZY_INSTANCE_INITIALIZER; |
-DevToolsAdbBridge::Wrapper::Wrapper(Profile* profile) |
- : bridge_(new DevToolsAdbBridge(profile)) { |
+DevToolsAdbBridge::Wrapper::Wrapper(Profile* profile, |
+ const DeviceProviders& device_providers) |
+ : bridge_(new DevToolsAdbBridge(profile, device_providers)) { |
} |
DevToolsAdbBridge::Wrapper::~Wrapper() { |
@@ -615,62 +513,24 @@ DevToolsAdbBridge::Factory::~Factory() {} |
BrowserContextKeyedService* |
DevToolsAdbBridge::Factory::BuildServiceInstanceFor( |
content::BrowserContext* context) const { |
- return new DevToolsAdbBridge::Wrapper(Profile::FromBrowserContext(context)); |
-} |
- |
-DevToolsAdbBridge::AndroidDevice::AndroidDevice(const std::string& serial) |
- : serial_(serial) { |
-} |
+ Profile* profile = Profile::FromBrowserContext(context); |
-void DevToolsAdbBridge::AndroidDevice::HttpQuery( |
- const std::string& la_name, |
- const std::string& request, |
- const CommandCallback& callback) { |
- OpenSocket(la_name, base::Bind(&AndroidDevice::OnHttpSocketOpened, this, |
- request, callback)); |
-} |
- |
-void DevToolsAdbBridge::AndroidDevice::HttpUpgrade( |
- const std::string& la_name, |
- const std::string& request, |
- const SocketCallback& callback) { |
- OpenSocket(la_name, base::Bind(&AndroidDevice::OnHttpSocketOpened2, this, |
- request, callback)); |
-} |
+ DeviceProviders device_providers; |
+ device_providers.push_back( |
+ new UsbDeviceProvider(profile, RefCountedAdbThread::GetInstance())); |
+ device_providers.push_back( |
+ new AdbDeviceProvider(RefCountedAdbThread::GetInstance())); |
-DevToolsAdbBridge::AndroidDevice::~AndroidDevice() { |
+ return new DevToolsAdbBridge::Wrapper(profile, device_providers); |
} |
-void DevToolsAdbBridge::AndroidDevice::OnHttpSocketOpened( |
- const std::string& request, |
- const CommandCallback& callback, |
- int result, |
- net::StreamSocket* socket) { |
- if (result != net::OK) { |
- callback.Run(result, std::string()); |
- return; |
- } |
- AdbClientSocket::HttpQuery(socket, request, callback); |
-} |
- |
-void DevToolsAdbBridge::AndroidDevice::OnHttpSocketOpened2( |
- const std::string& request, |
- const SocketCallback& callback, |
- int result, |
- net::StreamSocket* socket) { |
- if (result != net::OK) { |
- callback.Run(result, NULL); |
- return; |
- } |
- AdbClientSocket::HttpQuery(socket, request, callback); |
-} |
class AgentHostDelegate : public content::DevToolsExternalAgentProxyDelegate, |
public AdbWebSocket::Delegate { |
public: |
AgentHostDelegate( |
const std::string& id, |
- scoped_refptr<DevToolsAdbBridge::AndroidDevice> device, |
+ scoped_refptr<AndroidDevice> device, |
const std::string& socket_name, |
const std::string& debug_url, |
const std::string& frontend_url, |
@@ -739,11 +599,11 @@ class AgentHostDelegate : public content::DevToolsExternalAgentProxyDelegate, |
}; |
DevToolsAdbBridge::RemotePage::RemotePage( |
- scoped_refptr<DevToolsAdbBridge> bridge, |
+ scoped_refptr<RefCountedAdbThread> adb_thread, |
scoped_refptr<AndroidDevice> device, |
const std::string& socket, |
const base::DictionaryValue& value) |
- : bridge_(bridge), |
+ : adb_thread_(adb_thread), |
device_(device), |
socket_(socket) { |
value.GetString("id", &id_); |
@@ -792,7 +652,7 @@ void DevToolsAdbBridge::RemotePage::Close() { |
if (attached()) |
return; |
std::string request = base::StringPrintf(kClosePageRequest, id_.c_str()); |
- bridge_->GetAdbMessageLoop()->PostTask(FROM_HERE, |
+ adb_thread_->message_loop()->PostTask(FROM_HERE, |
base::Bind(&AndroidDevice::HttpQuery, |
device_, socket_, request, base::Bind(&Noop))); |
} |
@@ -808,7 +668,7 @@ void DevToolsAdbBridge::RemotePage::SendProtocolCommand( |
return; |
DevToolsProtocol::Command command(1, method, params); |
new AdbProtocolCommand( |
- bridge_, device_, socket_, debug_url_, command.Serialize()); |
+ adb_thread_, device_, socket_, debug_url_, command.Serialize()); |
} |
DevToolsAdbBridge::RemotePage::~RemotePage() { |
@@ -817,7 +677,7 @@ DevToolsAdbBridge::RemotePage::~RemotePage() { |
void DevToolsAdbBridge::RemotePage::RequestActivate( |
const CommandCallback& callback) { |
std::string request = base::StringPrintf(kActivatePageRequest, id_.c_str()); |
- bridge_->GetAdbMessageLoop()->PostTask(FROM_HERE, |
+ adb_thread_->message_loop()->PostTask(FROM_HERE, |
base::Bind(&AndroidDevice::HttpQuery, |
device_, socket_, request, callback)); |
} |
@@ -840,21 +700,21 @@ void DevToolsAdbBridge::RemotePage::InspectOnUIThread(Profile* profile) { |
} else if (!attached()) { |
new AgentHostDelegate( |
agent_id, device_, socket_, debug_url_, |
- frontend_url_, bridge_->GetAdbMessageLoop(), profile); |
+ frontend_url_, adb_thread_->message_loop(), profile); |
} |
} |
DevToolsAdbBridge::RemoteBrowser::RemoteBrowser( |
- scoped_refptr<DevToolsAdbBridge> bridge, |
+ scoped_refptr<RefCountedAdbThread> adb_thread, |
scoped_refptr<AndroidDevice> device, |
const std::string& socket) |
- : bridge_(bridge), |
+ : adb_thread_(adb_thread), |
device_(device), |
socket_(socket) { |
} |
void DevToolsAdbBridge::RemoteBrowser::Open(const std::string& url) { |
- bridge_->GetAdbMessageLoop()->PostTask(FROM_HERE, |
+ adb_thread_->message_loop()->PostTask(FROM_HERE, |
base::Bind(&AndroidDevice::HttpQuery, |
device_, socket_, kNewPageRequest, |
base::Bind(&RemoteBrowser::PageCreatedOnHandlerThread, this, url))); |
@@ -875,7 +735,7 @@ void DevToolsAdbBridge::RemoteBrowser::PageCreatedOnUIThread( |
base::DictionaryValue* dict; |
if (value && value->GetAsDictionary(&dict)) { |
scoped_refptr<RemotePage> new_page = |
- new RemotePage(bridge_, device_, socket_, *dict); |
+ new RemotePage(adb_thread_, device_, socket_, *dict); |
base::DictionaryValue params; |
params.SetString(kUrlParam, url); |
new_page->SendProtocolCommand(kPageNavigateCommand, ¶ms); |
@@ -886,62 +746,19 @@ DevToolsAdbBridge::RemoteBrowser::~RemoteBrowser() { |
} |
DevToolsAdbBridge::RemoteDevice::RemoteDevice( |
- scoped_refptr<DevToolsAdbBridge> bridge, |
scoped_refptr<AndroidDevice> device) |
- : bridge_(bridge), |
- device_(device) { |
+ : device_(device) { |
} |
DevToolsAdbBridge::RemoteDevice::~RemoteDevice() { |
} |
-DevToolsAdbBridge::RefCountedAdbThread* |
-DevToolsAdbBridge::RefCountedAdbThread::instance_ = NULL; |
- |
-// static |
-scoped_refptr<DevToolsAdbBridge::RefCountedAdbThread> |
-DevToolsAdbBridge::RefCountedAdbThread::GetInstance() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- if (!instance_) |
- new RefCountedAdbThread(); |
- return instance_; |
-} |
- |
-DevToolsAdbBridge::RefCountedAdbThread::RefCountedAdbThread() { |
- instance_ = this; |
- thread_ = new base::Thread(kDevToolsAdbBridgeThreadName); |
- base::Thread::Options options; |
- options.message_loop_type = base::MessageLoop::TYPE_IO; |
- if (!thread_->StartWithOptions(options)) { |
- delete thread_; |
- thread_ = NULL; |
- } |
-} |
- |
-base::MessageLoop* DevToolsAdbBridge::RefCountedAdbThread::message_loop() { |
- return thread_ ? thread_->message_loop() : NULL; |
-} |
-// static |
-void DevToolsAdbBridge::RefCountedAdbThread::StopThread(base::Thread* thread) { |
- thread->Stop(); |
-} |
- |
-DevToolsAdbBridge::RefCountedAdbThread::~RefCountedAdbThread() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- instance_ = NULL; |
- if (!thread_) |
- return; |
- // Shut down thread on FILE thread to join into IO. |
- BrowserThread::PostTask( |
- BrowserThread::FILE, FROM_HERE, |
- base::Bind(&RefCountedAdbThread::StopThread, thread_)); |
-} |
- |
-DevToolsAdbBridge::DevToolsAdbBridge(Profile* profile) |
- : profile_(profile), |
- adb_thread_(RefCountedAdbThread::GetInstance()), |
+DevToolsAdbBridge::DevToolsAdbBridge(Profile* profile, |
+ const DeviceProviders& device_providers) |
+ : adb_thread_(RefCountedAdbThread::GetInstance()), |
+ device_providers_(device_providers), |
has_message_loop_(adb_thread_->message_loop() != NULL) { |
rsa_key_.reset(AndroidRSAPrivateKey(profile)); |
} |
@@ -961,10 +778,6 @@ void DevToolsAdbBridge::RemoveListener(Listener* listener) { |
listeners_.erase(it); |
} |
-base::MessageLoop* DevToolsAdbBridge::GetAdbMessageLoop() { |
- return adb_thread_->message_loop(); |
-} |
- |
DevToolsAdbBridge::~DevToolsAdbBridge() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(listeners_.empty()); |
@@ -976,8 +789,9 @@ void DevToolsAdbBridge::RequestRemoteDevices() { |
return; |
new AdbPagesCommand( |
- this, rsa_key_.get(), |
- base::Bind(&DevToolsAdbBridge::ReceivedRemoteDevices, this)); |
+ adb_thread_, rsa_key_.get(), |
+ base::Bind(&DevToolsAdbBridge::ReceivedRemoteDevices, this), |
+ device_providers_); |
} |
void DevToolsAdbBridge::ReceivedRemoteDevices(RemoteDevices* devices_ptr) { |