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;
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  typedef base::Callback<void(int result, scoped_ptr<net::StreamSocket>)>
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      SocketCallback;
2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  typedef base::Callback<void(const std::vector<std::string>&)> SerialsCallback;
301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  struct BrowserInfo {
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    BrowserInfo();
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    enum Type {
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      kTypeChrome,
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      kTypeWebView,
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      kTypeOther
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    };
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    std::string socket_name;
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    std::string display_name;
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    Type type;
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  };
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  struct DeviceInfo {
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    DeviceInfo();
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ~DeviceInfo();
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    std::string model;
5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    bool connected;
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    gfx::Size screen_size;
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    std::vector<BrowserInfo> browser_info;
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  };
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  typedef base::Callback<void(const DeviceInfo&)> DeviceInfoCallback;
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  class AndroidWebSocket {
5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   public:
5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    class Delegate {
6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)     public:
6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      virtual void OnSocketOpened() = 0;
6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      virtual void OnFrameRead(const std::string& message) = 0;
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      virtual void OnSocketClosed() = 0;
6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)     protected:
6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      virtual ~Delegate() {}
6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    };
6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    virtual ~AndroidWebSocket() {}
7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    virtual void SendFrame(const std::string& message) = 0;
7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  };
731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  class DeviceProvider;
7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  class Device : public base::RefCountedThreadSafe<Device>,
7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                 public base::NonThreadSafe {
7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   public:
7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    typedef AndroidDeviceManager::DeviceInfoCallback DeviceInfoCallback;
80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    typedef AndroidDeviceManager::CommandCallback CommandCallback;
81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    typedef AndroidDeviceManager::SocketCallback SocketCallback;
821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    void QueryDeviceInfo(const DeviceInfoCallback& callback);
841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    void OpenSocket(const std::string& socket_name,
8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                    const SocketCallback& callback);
87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    void SendJsonRequest(const std::string& socket_name,
8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                         const std::string& request,
9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                         const CommandCallback& callback);
9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    void HttpUpgrade(const std::string& socket_name,
9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                     const std::string& url,
9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                     const SocketCallback& callback);
951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    AndroidWebSocket* CreateWebSocket(
9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        const std::string& socket_name,
9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        const std::string& url,
9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        AndroidWebSocket::Delegate* delegate);
100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    std::string serial() { return serial_; }
1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   private:
10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    friend class AndroidDeviceManager;
10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    Device(scoped_refptr<base::MessageLoopProxy> device_message_loop,
10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)           scoped_refptr<DeviceProvider> provider,
10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)           const std::string& serial);
10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    friend class base::RefCountedThreadSafe<Device>;
110c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    virtual ~Device();
1111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    scoped_refptr<base::MessageLoopProxy> device_message_loop_;
11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    scoped_refptr<DeviceProvider> provider_;
11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    std::string serial_;
11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    base::WeakPtrFactory<Device> weak_factory_;
116c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
117c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    DISALLOW_COPY_AND_ASSIGN(Device);
118c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  };
119c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
120c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  typedef std::vector<scoped_refptr<Device> > Devices;
12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  typedef base::Callback<void(const Devices&)> DevicesCallback;
1221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  class DeviceProvider : public base::RefCountedThreadSafe<DeviceProvider> {
12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   public:
12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    typedef AndroidDeviceManager::SerialsCallback SerialsCallback;
12646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    typedef AndroidDeviceManager::DeviceInfoCallback DeviceInfoCallback;
12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    typedef AndroidDeviceManager::SocketCallback SocketCallback;
12846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    typedef AndroidDeviceManager::CommandCallback CommandCallback;
1291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    virtual void QueryDevices(const SerialsCallback& callback) = 0;
1311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
13246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    virtual void QueryDeviceInfo(const std::string& serial,
13346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                 const DeviceInfoCallback& callback) = 0;
134c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    virtual void OpenSocket(const std::string& serial,
13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                            const std::string& socket_name,
13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                            const SocketCallback& callback) = 0;
138c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
13946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    virtual void SendJsonRequest(const std::string& serial,
14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                 const std::string& socket_name,
14146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                 const std::string& request,
14246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                 const CommandCallback& callback);
14346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
14446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    virtual void HttpUpgrade(const std::string& serial,
14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                             const std::string& socket_name,
14646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                             const std::string& url,
14746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                             const SocketCallback& callback);
14846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
14946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    virtual void ReleaseDevice(const std::string& serial);
15046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
15146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   protected:
15246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    friend class base::RefCountedThreadSafe<DeviceProvider>;
153c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    DeviceProvider();
154c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    virtual ~DeviceProvider();
155c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  };
156c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
157c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  typedef std::vector<scoped_refptr<DeviceProvider> > DeviceProviders;
158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
15946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  static scoped_refptr<AndroidDeviceManager> Create();
160c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
16146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void SetDeviceProviders(const DeviceProviders& providers);
162c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
16346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void QueryDevices(const DevicesCallback& callback);
164c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
16546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  struct DeviceDescriptor {
16646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    DeviceDescriptor();
16746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    ~DeviceDescriptor();
168c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
16946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    scoped_refptr<DeviceProvider> provider;
17046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    std::string serial;
17146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  };
172c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
17346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  typedef std::vector<DeviceDescriptor> DeviceDescriptors;
174c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
175c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private:
17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  class HandlerThread : public base::RefCountedThreadSafe<HandlerThread> {
17746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   public:
17846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    static scoped_refptr<HandlerThread> GetInstance();
17946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    scoped_refptr<base::MessageLoopProxy> message_loop();
180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
18146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   private:
18246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    friend class base::RefCountedThreadSafe<HandlerThread>;
18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    static HandlerThread* instance_;
18446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    static void StopThread(base::Thread* thread);
185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
18646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    HandlerThread();
18746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    virtual ~HandlerThread();
18846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    base::Thread* thread_;
18946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  };
190c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
19146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  friend struct content::BrowserThread::DeleteOnThread<
19246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      content::BrowserThread::UI>;
19346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  friend class base::DeleteHelper<AndroidDeviceManager>;
19446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  AndroidDeviceManager();
19546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ~AndroidDeviceManager();
1961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void UpdateDevices(const DevicesCallback& callback,
19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                     DeviceDescriptors* descriptors);
1991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
20046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  typedef std::map<std::string, base::WeakPtr<Device> > DeviceWeakMap;
2011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
20246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  scoped_refptr<HandlerThread> handler_thread_;
20346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  DeviceProviders providers_;
20446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  DeviceWeakMap devices_;
2051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)};
2061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif  // CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_
208