| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_DEVTOOLS_ANDROID_DEVICE_H_ |
| #define CHROME_BROWSER_DEVTOOLS_ANDROID_DEVICE_H_ |
| |
| #include <vector> |
| |
| #include "base/memory/ref_counted.h" |
| #include "chrome/browser/devtools/adb/android_usb_device.h" |
| #include "chrome/browser/devtools/refcounted_adb_thread.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "crypto/rsa_private_key.h" |
| #include "net/socket/stream_socket.h" |
| |
| class AndroidDevice : public base::RefCounted<AndroidDevice> { |
| public: |
| typedef base::Callback<void(int, const std::string&)> CommandCallback; |
| typedef base::Callback<void(int result, net::StreamSocket*)> SocketCallback; |
| |
| AndroidDevice(const std::string& serial, bool is_connected); |
| |
| virtual void RunCommand(const std::string& command, |
| const CommandCallback& callback) = 0; |
| virtual void OpenSocket(const std::string& socket_name, |
| const SocketCallback& callback) = 0; |
| virtual void HttpQuery(const std::string& la_name, |
| const std::string& request, |
| const CommandCallback& callback); |
| void HttpUpgrade(const std::string& la_name, |
| const std::string& request, |
| const SocketCallback& callback); |
| |
| std::string serial() { return serial_; } |
| bool is_connected() { return is_connected_; } |
| |
| std::string model() { return model_; } |
| void set_model(const std::string& model) { model_ = model; } |
| |
| protected: |
| friend class base::RefCounted<AndroidDevice>; |
| virtual ~AndroidDevice(); |
| |
| private: |
| void OnHttpSocketOpened(const std::string& request, |
| const CommandCallback& callback, |
| int result, |
| net::StreamSocket* socket); |
| void OnHttpSocketOpened2(const std::string& request, |
| const SocketCallback& callback, |
| int result, |
| net::StreamSocket* socket); |
| |
| std::string serial_; |
| bool is_connected_; |
| std::string model_; |
| |
| DISALLOW_COPY_AND_ASSIGN(AndroidDevice); |
| }; |
| |
| |
| class AndroidDeviceProvider |
| : public base::RefCountedThreadSafe< |
| AndroidDeviceProvider, |
| content::BrowserThread::DeleteOnUIThread> { |
| public: |
| typedef std::vector<scoped_refptr<AndroidDevice> > AndroidDevices; |
| typedef base::Callback<void(const AndroidDevices&)> QueryDevicesCallback; |
| |
| virtual void QueryDevices(const QueryDevicesCallback& callback) = 0; |
| |
| static void CountDevices(bool discover_usb_devices, |
| const base::Callback<void(int)>& callback); |
| |
| static scoped_refptr<AndroidDeviceProvider> GetAdbDeviceProvider(); |
| static scoped_refptr<AndroidDeviceProvider> |
| GetUsbDeviceProvider(Profile* profile); |
| |
| protected: |
| friend struct |
| content::BrowserThread::DeleteOnThread<content::BrowserThread::UI>; |
| friend class base::DeleteHelper<AndroidDeviceProvider>; |
| |
| AndroidDeviceProvider(); |
| virtual ~AndroidDeviceProvider(); |
| static void RunCallbackOnUIThread(const QueryDevicesCallback& callback, |
| const AndroidDevices& result); |
| |
| scoped_refptr<RefCountedAdbThread> adb_thread_; |
| }; |
| |
| #endif // CHROME_BROWSER_DEVTOOLS_ANDROID_DEVICE_H_ |