Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(287)

Side by Side Diff: chrome/browser/devtools/device/android_device_manager.h

Issue 287643002: DevTools: Partially redesigned DevToolsAndroidBridge and AndroidDeviceManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed unused include Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_ 5 #ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_
6 #define CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_ 6 #define CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
11 #include "base/threading/non_thread_safe.h" 11 #include "base/threading/non_thread_safe.h"
12 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/profiles/profile.h"
13 #include "content/public/browser/browser_thread.h" 13 #include "content/public/browser/browser_thread.h"
14 #include "ui/gfx/size.h" 14 #include "ui/gfx/size.h"
15 15
16 namespace net { 16 namespace net {
17 class StreamSocket; 17 class StreamSocket;
18 } 18 }
19 19
20 class AndroidDeviceManager 20 class AndroidDeviceManager
21 : public base::RefCountedThreadSafe<AndroidDeviceManager>, 21 : public base::RefCountedThreadSafe<AndroidDeviceManager>,
22 public base::NonThreadSafe { 22 public base::NonThreadSafe {
23 public: 23 public:
24 typedef base::Callback<void(int, const std::string&)> CommandCallback; 24 typedef base::Callback<void(int, const std::string&)> CommandCallback;
25 typedef base::Callback<void(int result, net::StreamSocket*)> SocketCallback; 25 typedef base::Callback<void(int result, net::StreamSocket*)> SocketCallback;
26 typedef base::Callback<void(const std::vector<std::string>&)> SerialsCallback;
26 27
27 struct BrowserInfo { 28 struct BrowserInfo {
28 BrowserInfo(); 29 BrowserInfo();
29 30
30 enum Type { 31 enum Type {
31 kTypeChrome, 32 kTypeChrome,
32 kTypeWebView, 33 kTypeWebView,
33 kTypeOther 34 kTypeOther
34 }; 35 };
35 36
36 std::string socket_name; 37 std::string socket_name;
37 std::string display_name; 38 std::string display_name;
38 Type type; 39 Type type;
39 }; 40 };
40 41
41 struct DeviceInfo { 42 struct DeviceInfo {
42 DeviceInfo(); 43 DeviceInfo();
43 ~DeviceInfo(); 44 ~DeviceInfo();
44 45
45 std::string model; 46 std::string model;
47 bool connected;
46 gfx::Size screen_size; 48 gfx::Size screen_size;
47 std::vector<BrowserInfo> browser_info; 49 std::vector<BrowserInfo> browser_info;
48 }; 50 };
49 51
50 typedef base::Callback<void(const DeviceInfo&)> DeviceInfoCallback; 52 typedef base::Callback<void(const DeviceInfo&)> DeviceInfoCallback;
51 53
52 class Device : public base::RefCounted<Device>, 54 class DeviceProvider : public base::RefCountedThreadSafe<DeviceProvider> {
55 public:
56 typedef AndroidDeviceManager::SerialsCallback SerialsCallback;
57 typedef AndroidDeviceManager::DeviceInfoCallback DeviceInfoCallback;
58 typedef AndroidDeviceManager::SocketCallback SocketCallback;
59 typedef AndroidDeviceManager::CommandCallback CommandCallback;
60
61 virtual void QueryDevices(const SerialsCallback& callback) = 0;
62
63 virtual void QueryDeviceInfo(const std::string& serial,
64 const DeviceInfoCallback& callback) = 0;
65
66 virtual void OpenSocket(const std::string& serial,
67 const std::string& socket_name,
68 const SocketCallback& callback) = 0;
69
70 virtual void SendJsonRequest(const std::string& serial,
71 const std::string& socket_name,
72 const std::string& request,
73 const CommandCallback& callback);
74
75 virtual void HttpUpgrade(const std::string& serial,
76 const std::string& socket_name,
77 const std::string& url,
78 const SocketCallback& callback);
79
80 virtual void ReleaseDevice(const std::string& serial);
81
82 protected:
83 friend class base::RefCountedThreadSafe<DeviceProvider>;
84 DeviceProvider();
85 virtual ~DeviceProvider();
86 };
87
88 typedef std::vector<scoped_refptr<DeviceProvider> > DeviceProviders;
89
90 class AndroidWebSocket : public base::RefCountedThreadSafe<AndroidWebSocket> {
91 public:
92 class Delegate {
93 public:
94 virtual void OnSocketOpened() = 0;
95 virtual void OnFrameRead(const std::string& message) = 0;
96 virtual void OnSocketClosed(bool closed_by_device) = 0;
97
98 protected:
99 virtual ~Delegate() {}
100 };
101
102 AndroidWebSocket() {}
103
104 virtual void Connect() = 0;
105 virtual void Disconnect() = 0;
106 virtual void SendFrame(const std::string& message) = 0;
107
108 protected:
109 virtual ~AndroidWebSocket() {}
110
111 private:
112 friend class base::RefCountedThreadSafe<AndroidWebSocket>;
113
114 DISALLOW_COPY_AND_ASSIGN(AndroidWebSocket);
115 };
116
117 class Device : public base::RefCountedThreadSafe<Device>,
pfeldman 2014/05/26 09:57:14 Lets swap them back for better diff.
vkuzkokov 2014/05/26 10:54:03 Done.
53 public base::NonThreadSafe { 118 public base::NonThreadSafe {
54 protected: 119 public:
55 friend class AndroidDeviceManager; 120 typedef AndroidDeviceManager::DeviceInfoCallback DeviceInfoCallback;
56
57 typedef AndroidDeviceManager::CommandCallback CommandCallback; 121 typedef AndroidDeviceManager::CommandCallback CommandCallback;
58 typedef AndroidDeviceManager::SocketCallback SocketCallback; 122 typedef AndroidDeviceManager::SocketCallback SocketCallback;
59 typedef AndroidDeviceManager::DeviceInfoCallback DeviceInfoCallback;
60 123
61 Device(const std::string& serial, bool is_connected); 124 void QueryDeviceInfo(const DeviceInfoCallback& callback);
62 125
63 virtual void QueryDeviceInfo(const DeviceInfoCallback& callback) = 0; 126 void OpenSocket(const std::string& socket_name,
127 const SocketCallback& callback);
64 128
65 virtual void OpenSocket(const std::string& socket_name, 129 void SendJsonRequest(const std::string& socket_name,
66 const SocketCallback& callback) = 0; 130 const std::string& request,
131 const CommandCallback& callback);
67 132
68 virtual void HttpQuery(const std::string& socket_name, 133 void HttpUpgrade(const std::string& socket_name,
69 const std::string& request, 134 const std::string& url,
70 const CommandCallback& callback); 135 const SocketCallback& callback);
136
137 scoped_refptr<AndroidWebSocket> CreateWebSocket(
138 const std::string& socket_name,
139 const std::string& url,
140 AndroidWebSocket::Delegate* delegate);
71 141
72 std::string serial() { return serial_; } 142 std::string serial() { return serial_; }
73 bool is_connected() { return is_connected_; }
74 143
75 friend class base::RefCounted<Device>; 144 private:
145 friend class AndroidDeviceManager;
146 Device(scoped_refptr<base::MessageLoopProxy> device_message_loop,
147 const scoped_refptr<DeviceProvider>& provider,
148 const std::string& serial);
149
150 friend class base::RefCountedThreadSafe<Device>;
76 virtual ~Device(); 151 virtual ~Device();
77 152
78 private: 153 scoped_refptr<base::MessageLoopProxy> device_message_loop_;
79 const std::string serial_; 154 scoped_refptr<DeviceProvider> provider_;
pfeldman 2014/05/26 09:57:14 On what thread will this be released?
vkuzkokov 2014/05/26 10:54:03 UI. Same way as in DevToolsAndroidBridge. It does
80 const bool is_connected_; 155 std::string serial_;
156 base::WeakPtrFactory<Device> weak_factory_;
81 157
82 DISALLOW_COPY_AND_ASSIGN(Device); 158 DISALLOW_COPY_AND_ASSIGN(Device);
83 }; 159 };
84 160
85 typedef std::vector<scoped_refptr<Device> > Devices; 161 typedef std::vector<scoped_refptr<Device> > Devices;
162 typedef base::Callback<void(const Devices&)> DevicesCallback;
86 163
87 class DeviceProvider 164 static scoped_refptr<AndroidDeviceManager> Create();
88 : public base::RefCountedThreadSafe<
89 DeviceProvider,
90 content::BrowserThread::DeleteOnUIThread> {
91 protected:
92 friend class AndroidDeviceManager;
93 165
94 typedef base::Callback<void(const Devices&)> QueryDevicesCallback; 166 void QueryDevices(scoped_refptr<base::MessageLoopProxy> device_message_loop,
167 const DeviceProviders& providers,
168 const DevicesCallback& callback);
95 169
96 virtual void QueryDevices(const QueryDevicesCallback& callback) = 0; 170 struct DeviceDescriptor {
97 171 scoped_refptr<DeviceProvider> provider;
98 protected: 172 std::string serial;
99 friend struct
100 content::BrowserThread::DeleteOnThread<content::BrowserThread::UI>;
101 friend class base::DeleteHelper<DeviceProvider>;
102
103 DeviceProvider();
104 virtual ~DeviceProvider();
105 }; 173 };
106 174
107 public: 175 typedef std::vector<DeviceDescriptor> DeviceDescriptors;
108 static scoped_refptr<AndroidDeviceManager> Create();
109
110 typedef std::vector<scoped_refptr<DeviceProvider> > DeviceProviders;
111 typedef base::Callback<void (const std::vector<std::string>&)>
112 QueryDevicesCallback;
113
114 void QueryDevices(const DeviceProviders& providers,
115 const QueryDevicesCallback& callback);
116
117 void Stop();
118
119 bool IsConnected(const std::string& serial);
120
121 void QueryDeviceInfo(const std::string& serial,
122 const DeviceInfoCallback& callback);
123
124 void OpenSocket(const std::string& serial,
125 const std::string& socket_name,
126 const SocketCallback& callback);
127
128 void HttpQuery(const std::string& serial,
129 const std::string& socket_name,
130 const std::string& request,
131 const CommandCallback& callback);
132
133 void HttpUpgrade(const std::string& serial,
134 const std::string& socket_name,
135 const std::string& url,
136 const SocketCallback& callback);
137 176
138 private: 177 private:
178 friend class base::RefCountedThreadSafe<AndroidDeviceManager>;
139 AndroidDeviceManager(); 179 AndroidDeviceManager();
140
141 friend class base::RefCountedThreadSafe<AndroidDeviceManager>;
142
143 virtual ~AndroidDeviceManager(); 180 virtual ~AndroidDeviceManager();
144 181
145 void QueryNextProvider( 182 void UpdateDevices(scoped_refptr<base::MessageLoopProxy> device_message_loop,
146 const QueryDevicesCallback& callback, 183 const DevicesCallback& callback,
147 const DeviceProviders& providers, 184 const DeviceDescriptors& descriptors);
148 const Devices& total_devices,
149 const Devices& new_devices);
150 185
151 Device* FindDevice(const std::string& serial); 186 typedef std::map<std::string, base::WeakPtr<Device> > DeviceWeakMap;
152 187 DeviceWeakMap devices_;
153 typedef std::map<std::string, scoped_refptr<Device> > DeviceMap;
154 DeviceMap devices_;
155
156 bool stopped_;
157 }; 188 };
158 189
159 #endif // CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_ 190 #endif // CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698