android_device_manager.h revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file. 41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_ 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#define CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_ 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include <vector> 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/memory/ref_counted.h" 11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/threading/non_thread_safe.h" 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/size.h" 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace net { 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class StreamSocket; 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass AndroidDeviceManager 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : public base::RefCountedThreadSafe< 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AndroidDeviceManager, 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content::BrowserThread::DeleteOnUIThread>, 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public base::NonThreadSafe { 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) typedef base::Callback<void(int, const std::string&)> CommandCallback; 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) typedef base::Callback<void(int result, net::StreamSocket*)> SocketCallback; 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef base::Callback<void(const std::vector<std::string>&)> SerialsCallback; 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) struct BrowserInfo { 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BrowserInfo(); 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) enum Type { 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kTypeChrome, 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kTypeWebView, 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kTypeOther 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }; 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string socket_name; 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string display_name; 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Type type; 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }; 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) struct DeviceInfo { 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DeviceInfo(); 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ~DeviceInfo(); 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string model; 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool connected; 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Size screen_size; 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::vector<BrowserInfo> browser_info; 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }; 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) typedef base::Callback<void(const DeviceInfo&)> DeviceInfoCallback; 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) class AndroidWebSocket : public base::RefCountedThreadSafe<AndroidWebSocket> { 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) class Delegate { 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void OnSocketOpened() = 0; 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void OnFrameRead(const std::string& message) = 0; 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void OnSocketClosed(bool closed_by_device) = 0; 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected: 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~Delegate() {} 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) }; 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AndroidWebSocket() {} 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void Connect() = 0; 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void Disconnect() = 0; 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void SendFrame(const std::string& message) = 0; 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ClearDelegate() = 0; 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected: 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~AndroidWebSocket() {} 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) friend class base::RefCountedThreadSafe<AndroidWebSocket>; 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AndroidWebSocket); 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) }; 831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) class DeviceProvider; 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) class Device : public base::RefCountedThreadSafe<Device>, 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public base::NonThreadSafe { 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef AndroidDeviceManager::DeviceInfoCallback DeviceInfoCallback; 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch typedef AndroidDeviceManager::CommandCallback CommandCallback; 91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch typedef AndroidDeviceManager::SocketCallback SocketCallback; 921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void QueryDeviceInfo(const DeviceInfoCallback& callback); 941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void OpenSocket(const std::string& socket_name, 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const SocketCallback& callback); 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void SendJsonRequest(const std::string& socket_name, 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& request, 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const CommandCallback& callback); 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void HttpUpgrade(const std::string& socket_name, 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& url, 10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const SocketCallback& callback); 1051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<AndroidWebSocket> CreateWebSocket( 10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& socket_name, 10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& url, 10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AndroidWebSocket::Delegate* delegate); 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 111c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::string serial() { return serial_; } 1121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) friend class AndroidDeviceManager; 11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Device(scoped_refptr<base::MessageLoopProxy> device_message_loop, 11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<DeviceProvider> provider, 11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& serial); 11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) friend class base::RefCountedThreadSafe<Device>; 120c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual ~Device(); 1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> device_message_loop_; 12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<DeviceProvider> provider_; 12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string serial_; 12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::WeakPtrFactory<Device> weak_factory_; 126c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 127c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DISALLOW_COPY_AND_ASSIGN(Device); 128c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 129c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 130c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch typedef std::vector<scoped_refptr<Device> > Devices; 13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef base::Callback<void(const Devices&)> DevicesCallback; 1321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 13346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) class DeviceProvider : public base::RefCountedThreadSafe<DeviceProvider> { 13446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef AndroidDeviceManager::SerialsCallback SerialsCallback; 13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef AndroidDeviceManager::DeviceInfoCallback DeviceInfoCallback; 13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef AndroidDeviceManager::SocketCallback SocketCallback; 13846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef AndroidDeviceManager::CommandCallback CommandCallback; 1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void QueryDevices(const SerialsCallback& callback) = 0; 1411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 14246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void QueryDeviceInfo(const std::string& serial, 14346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const DeviceInfoCallback& callback) = 0; 144c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void OpenSocket(const std::string& serial, 14646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& socket_name, 14746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const SocketCallback& callback) = 0; 148c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 14946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void SendJsonRequest(const std::string& serial, 15046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& socket_name, 15146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& request, 15246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const CommandCallback& callback); 15346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 15446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void HttpUpgrade(const std::string& serial, 15546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& socket_name, 15646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& url, 15746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const SocketCallback& callback); 15846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 15946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ReleaseDevice(const std::string& serial); 16046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 16146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected: 16246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) friend class base::RefCountedThreadSafe<DeviceProvider>; 163c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DeviceProvider(); 164c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual ~DeviceProvider(); 165c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 166c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 167c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch typedef std::vector<scoped_refptr<DeviceProvider> > DeviceProviders; 168c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 16946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static scoped_refptr<AndroidDeviceManager> Create(); 170c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 17146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void SetDeviceProviders(const DeviceProviders& providers); 172c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 17346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void QueryDevices(const DevicesCallback& callback); 174c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 17546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) struct DeviceDescriptor { 17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DeviceDescriptor(); 17746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ~DeviceDescriptor(); 178c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 17946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<DeviceProvider> provider; 18046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string serial; 18146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) }; 182c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef std::vector<DeviceDescriptor> DeviceDescriptors; 184c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private: 18646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) class HandlerThread : public base::RefCountedThreadSafe<HandlerThread> { 18746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 18846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static scoped_refptr<HandlerThread> GetInstance(); 18946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> message_loop(); 190c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 19146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 19246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) friend class base::RefCountedThreadSafe<HandlerThread>; 19346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static HandlerThread* instance_; 19446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static void StopThread(base::Thread* thread); 195c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 19646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) HandlerThread(); 19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~HandlerThread(); 19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::Thread* thread_; 19946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) }; 200c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 20146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) friend struct content::BrowserThread::DeleteOnThread< 20246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content::BrowserThread::UI>; 20346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) friend class base::DeleteHelper<AndroidDeviceManager>; 20446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AndroidDeviceManager(); 20546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~AndroidDeviceManager(); 2061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 20746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void UpdateDevices(const DevicesCallback& callback, 20846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DeviceDescriptors* descriptors); 2091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 21046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef std::map<std::string, base::WeakPtr<Device> > DeviceWeakMap; 2111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 21246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<HandlerThread> handler_thread_; 21346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DeviceProviders providers_; 21446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DeviceWeakMap devices_; 2151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 2161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif // CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_ 218