devtools_android_bridge.h revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_DEVTOOLS_ANDROID_BRIDGE_H_ 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#define CHROME_BROWSER_DEVTOOLS_DEVICE_DEVTOOLS_ANDROID_BRIDGE_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/cancelable_callback.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/prefs/pref_change_registrar.h" 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/devtools/device/android_device_manager.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_keyed_service_factory.h" 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/devtools_agent_host.h" 20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/size.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochtemplate<typename T> struct DefaultSingletonTraits; 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class MessageLoop; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DictionaryValue; 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class ListValue; 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Thread; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace content { 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass BrowserContext; 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class DevToolsTargetImpl; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Profile; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass DevToolsAndroidBridge 39558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch : public base::RefCountedThreadSafe< 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DevToolsAndroidBridge, 41558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::BrowserThread::DeleteOnUIThread> { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef base::Callback<void(int result, 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& response)> Callback; 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) class Wrapper : public KeyedService { 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch explicit Wrapper(content::BrowserContext* context); 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual ~Wrapper(); 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DevToolsAndroidBridge* Get(); 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_refptr<DevToolsAndroidBridge> bridge_; 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch }; 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch class Factory : public BrowserContextKeyedServiceFactory { 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Returns singleton instance of DevToolsAndroidBridge. 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static Factory* GetInstance(); 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Returns DevToolsAndroidBridge associated with |profile|. 620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch static DevToolsAndroidBridge* GetForProfile(Profile* profile); 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch friend struct DefaultSingletonTraits<Factory>; 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Factory(); 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual ~Factory(); 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // BrowserContextKeyedServiceFactory overrides: 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual KeyedService* BuildServiceInstanceFor( 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserContext* context) const OVERRIDE; 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DISALLOW_COPY_AND_ASSIGN(Factory); 747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch }; 757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) class RemotePage { 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public: 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual ~RemotePage() {} 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual DevToolsTargetImpl* GetTarget() = 0; 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual std::string GetFrontendURL() = 0; 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) }; 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) typedef base::Callback<void(RemotePage*)> RemotePageCallback; 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef base::Callback<void(int, const std::string&)> JsonRequestCallback; 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef AndroidDeviceManager::Device Device; 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef AndroidDeviceManager::AndroidWebSocket AndroidWebSocket; 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 88a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) class RemoteBrowser : public base::RefCounted<RemoteBrowser> { 89a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public: 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) RemoteBrowser(scoped_refptr<Device> device, 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const AndroidDeviceManager::BrowserInfo& browser_info); 92a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string serial() { return device_->serial(); } 94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::string socket() { return socket_; } 95c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string display_name() { return display_name_; } 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void set_display_name(const std::string& name) { display_name_ = name; } 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 99c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string version() { return version_; } 100c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch void set_version(const std::string& version) { version_ = version; } 101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool IsChrome() const; 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool IsWebView() const; 1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) typedef std::vector<int> ParsedVersion; 1061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ParsedVersion GetParsedVersion() const; 1071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::vector<RemotePage*> CreatePages(); 1091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void SetPageDescriptors(const base::ListValue&); 1101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 111c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void SendJsonRequest(const std::string& request, 112c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const JsonRequestCallback& callback); 11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void SendProtocolCommand(const std::string& debug_url, 1151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string& method, 116a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch base::DictionaryValue* params, 117a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const base::Closure callback); 118a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void Open(const std::string& url, 120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const RemotePageCallback& callback); 121bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<content::DevToolsAgentHost> GetAgentHost(); 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_refptr<AndroidWebSocket> CreateWebSocket( 125c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const std::string& url, 1260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DevToolsAndroidBridge::AndroidWebSocket::Delegate* delegate); 127c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 128a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private: 129a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) friend class base::RefCounted<RemoteBrowser>; 130a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual ~RemoteBrowser(); 131a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void InnerOpen(const std::string& url, 1335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const JsonRequestCallback& callback); 134bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 135bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch void PageCreatedOnUIThread( 136a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const JsonRequestCallback& callback, 137a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& url, int result, const std::string& response); 138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 139a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void NavigatePageOnUIThread(const JsonRequestCallback& callback, 1405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int result, 1415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& response, 1425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& url); 1435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void RespondToOpenOnUIThread( 145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const DevToolsAndroidBridge::RemotePageCallback& callback, 1465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int result, 1475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& response); 148bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 14946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<Device> device_; 150a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const std::string socket_; 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string display_name_; 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const AndroidDeviceManager::BrowserInfo::Type type_; 153c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string version_; 1541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<base::ListValue> page_descriptors_; 155a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 156a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RemoteBrowser); 157a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) }; 158a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 159a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) typedef std::vector<scoped_refptr<RemoteBrowser> > RemoteBrowsers; 160a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 161a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) class RemoteDevice : public base::RefCounted<RemoteDevice> { 162a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public: 16346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) RemoteDevice(scoped_refptr<Device> device, 16446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const AndroidDeviceManager::DeviceInfo& device_info); 165c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 16646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string serial() { return device_->serial(); } 167c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::string model() { return model_; } 168c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool is_connected() { return connected_; } 169a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) RemoteBrowsers& browsers() { return browsers_; } 1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Size screen_size() { return screen_size_; } 171c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 172c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void OpenSocket(const std::string& socket_name, 173c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const AndroidDeviceManager::SocketCallback& callback); 174c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 175a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private: 176a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) friend class base::RefCounted<RemoteDevice>; 177a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual ~RemoteDevice(); 178a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 17946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<Device> device_; 180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::string model_; 181c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool connected_; 182a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) RemoteBrowsers browsers_; 183d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) gfx::Size screen_size_; 184a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 185a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RemoteDevice); 186a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) }; 187a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 188a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) typedef std::vector<scoped_refptr<RemoteDevice> > RemoteDevices; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 190a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch class DeviceListListener { 1919ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch public: 192a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void DeviceListChanged(const RemoteDevices& devices) = 0; 1939ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch protected: 194a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual ~DeviceListListener() {} 1959ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch }; 1969ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch explicit DevToolsAndroidBridge(Profile* profile); 198a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void AddDeviceListListener(DeviceListListener* listener); 199a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void RemoveDeviceListListener(DeviceListListener* listener); 200a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 201a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch class DeviceCountListener { 202a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch public: 203a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void DeviceCountChanged(int count) = 0; 204a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch protected: 205a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual ~DeviceCountListener() {} 206a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch }; 207a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 208a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void AddDeviceCountListener(DeviceCountListener* listener); 209a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void RemoveDeviceCountListener(DeviceCountListener* listener); 2101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 211c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void set_device_providers_for_test( 212c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const AndroidDeviceManager::DeviceProviders& device_providers) { 21346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) device_manager_->SetDeviceProviders(device_providers); 21446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 21546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 21646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void set_task_scheduler_for_test( 21746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::Callback<void(const base::Closure&)> scheduler) { 21846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) task_scheduler_ = scheduler; 2194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 220effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static bool HasDevToolsWindow(const std::string& agent_id); 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) friend struct content::BrowserThread::DeleteOnThread< 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::BrowserThread::UI>; 2260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch friend class base::DeleteHelper<DevToolsAndroidBridge>; 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual ~DevToolsAndroidBridge(); 2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 23046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void StartDeviceListPolling(); 23146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void StopDeviceListPolling(); 23246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void RequestDeviceList( 23346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::Callback<void(const RemoteDevices&)>& callback); 23446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void ReceivedDeviceList(const RemoteDevices& devices); 23546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void StartDeviceCountPolling(); 23646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void StopDeviceCountPolling(); 23746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void RequestDeviceCount(const base::Callback<void(int)>& callback); 238a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void ReceivedDeviceCount(int count); 239a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 24046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static void ScheduleTaskDefault(const base::Closure& task); 24146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 242c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void CreateDeviceProviders(); 2439ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 244c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Profile* profile_; 245c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_refptr<AndroidDeviceManager> device_manager_; 24646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) RemoteDevices devices_; 247a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 248a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch typedef std::vector<DeviceListListener*> DeviceListListeners; 249a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch DeviceListListeners device_list_listeners_; 25046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::CancelableCallback<void(const RemoteDevices&)> device_list_callback_; 251a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 252a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch typedef std::vector<DeviceCountListener*> DeviceCountListeners; 253a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch DeviceCountListeners device_count_listeners_; 25446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::CancelableCallback<void(int)> device_count_callback_; 25546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::Callback<void(const base::Closure&)> task_scheduler_; 256a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 257c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PrefChangeRegistrar pref_change_registrar_; 2580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DISALLOW_COPY_AND_ASSIGN(DevToolsAndroidBridge); 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif // CHROME_BROWSER_DEVTOOLS_DEVICE_DEVTOOLS_ANDROID_BRIDGE_H_ 262