1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_
6 #define CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_
10 #include "base/memory/ref_counted.h"
11 #include "base/threading/non_thread_safe.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "content/public/browser/browser_thread.h"
19 class AndroidDeviceManager
20 : public base::RefCountedThreadSafe<AndroidDeviceManager>,
21 public base::NonThreadSafe {
23 typedef base::Callback<void(int, const std::string&)> CommandCallback;
24 typedef base::Callback<void(int result, net::StreamSocket*)> SocketCallback;
26 class Device : public base::RefCounted<Device>,
27 public base::NonThreadSafe {
29 friend class AndroidDeviceManager;
31 typedef AndroidDeviceManager::CommandCallback CommandCallback;
32 typedef AndroidDeviceManager::SocketCallback SocketCallback;
34 Device(const std::string& serial, bool is_connected);
36 virtual void RunCommand(const std::string& command,
37 const CommandCallback& callback) = 0;
38 virtual void OpenSocket(const std::string& socket_name,
39 const SocketCallback& callback) = 0;
41 std::string serial() { return serial_; }
42 bool is_connected() { return is_connected_; }
44 friend class base::RefCounted<Device>;
48 const std::string serial_;
49 const bool is_connected_;
51 DISALLOW_COPY_AND_ASSIGN(Device);
54 typedef std::vector<scoped_refptr<Device> > Devices;
57 : public base::RefCountedThreadSafe<
59 content::BrowserThread::DeleteOnUIThread> {
61 friend class AndroidDeviceManager;
63 typedef base::Callback<void(const Devices&)> QueryDevicesCallback;
65 virtual void QueryDevices(const QueryDevicesCallback& callback) = 0;
69 content::BrowserThread::DeleteOnThread<content::BrowserThread::UI>;
70 friend class base::DeleteHelper<DeviceProvider>;
73 virtual ~DeviceProvider();
77 static scoped_refptr<AndroidDeviceManager> Create();
79 typedef std::vector<scoped_refptr<DeviceProvider> > DeviceProviders;
80 typedef base::Callback<void (const std::vector<std::string>&)>
83 void QueryDevices(const DeviceProviders& providers,
84 const QueryDevicesCallback& callback);
88 bool IsConnected(const std::string& serial);
90 void RunCommand(const std::string& serial,
91 const std::string& command,
92 const CommandCallback& callback);
94 void OpenSocket(const std::string& serial,
95 const std::string& socket_name,
96 const SocketCallback& callback);
98 void HttpQuery(const std::string& serial,
99 const std::string& socket_name,
100 const std::string& request,
101 const CommandCallback& callback);
103 void HttpUpgrade(const std::string& serial,
104 const std::string& socket_name,
105 const std::string& url,
106 const SocketCallback& callback);
109 AndroidDeviceManager();
111 friend class base::RefCountedThreadSafe<AndroidDeviceManager>;
113 virtual ~AndroidDeviceManager();
115 void QueryNextProvider(
116 const QueryDevicesCallback& callback,
117 const DeviceProviders& providers,
118 const Devices& total_devices,
119 const Devices& new_devices);
121 Device* FindDevice(const std::string& serial);
123 typedef std::map<std::string, scoped_refptr<Device> > DeviceMap;
129 #endif // CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_