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

Side by Side Diff: chrome/browser/devtools/device/devtools_android_bridge.cc

Issue 287643002: DevTools: Partially redesigned DevToolsAndroidBridge and AndroidDeviceManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Used scoped_ptr. Fixed DeviceHandle destruction 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 #include "chrome/browser/devtools/device/devtools_android_bridge.h" 5 #include "chrome/browser/devtools/device/devtools_android_bridge.h"
6 6
7 #include <map> 7 #include <map>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 58
59 const int kMinVersionNewWithURL = 32; 59 const int kMinVersionNewWithURL = 32;
60 const int kNewPageNavigateDelayMs = 500; 60 const int kNewPageNavigateDelayMs = 500;
61 61
62 // DiscoveryRequest ----------------------------------------------------- 62 // DiscoveryRequest -----------------------------------------------------
63 63
64 class DiscoveryRequest : public base::RefCountedThreadSafe< 64 class DiscoveryRequest : public base::RefCountedThreadSafe<
65 DiscoveryRequest, 65 DiscoveryRequest,
66 BrowserThread::DeleteOnUIThread> { 66 BrowserThread::DeleteOnUIThread> {
67 public: 67 public:
68 typedef base::Callback<void(DevToolsAndroidBridge::RemoteDevices*)> Callback; 68 typedef base::Callback<void(
69 scoped_ptr<DevToolsAndroidBridge::RemoteDevices>,
70 scoped_ptr<DevToolsAndroidBridge::DeviceHandleMap>,
71 scoped_ptr<DevToolsAndroidBridge::DeviceHandleMap>)> Callback;
pfeldman 2014/05/21 11:33:41 This callback has complex signature, but very neut
69 72
70 DiscoveryRequest( 73 DiscoveryRequest(
71 scoped_refptr<DevToolsAndroidBridge> android_bridge, 74 scoped_refptr<DevToolsAndroidBridge> android_bridge,
75 const DevToolsAndroidBridge::DeviceHandleMap& device_handles,
72 AndroidDeviceManager* device_manager, 76 AndroidDeviceManager* device_manager,
73 base::MessageLoop* device_message_loop, 77 base::MessageLoop* device_message_loop,
74 const AndroidDeviceManager::DeviceProviders& device_providers, 78 const AndroidDeviceManager::DeviceProviders& device_providers,
75 const Callback& callback); 79 const Callback& callback);
76 80
77 private: 81 private:
78 friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>; 82 friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>;
79 friend class base::DeleteHelper<DiscoveryRequest>; 83 friend class base::DeleteHelper<DiscoveryRequest>;
80 84
81 virtual ~DiscoveryRequest(); 85 virtual ~DiscoveryRequest();
82 86
83 void ReceivedSerials(const std::vector<std::string>& serials); 87 void ReceivedSerials(const std::vector<std::string>& serials);
84 void ProcessSerials(); 88 void ProcessSerials();
85 void ReceivedDeviceInfo(const AndroidDeviceManager::DeviceInfo& device_info); 89 void ReceivedDeviceInfo(const AndroidDeviceManager::DeviceInfo& device_info);
86 void ProcessSockets(); 90 void ProcessSockets();
87 void ReceivedVersion(int result, const std::string& response); 91 void ReceivedVersion(int result, const std::string& response);
88 void ReceivedPages(int result, const std::string& response); 92 void ReceivedPages(int result, const std::string& response);
89 93
90 std::string current_serial() const { return serials_.back(); } 94 std::string current_serial() const { return serials_.back(); }
91 95
92 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> current_browser() const { 96 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> current_browser() const {
93 return browsers_.back(); 97 return browsers_.back();
94 } 98 }
95 99
96 void NextBrowser(); 100 void NextBrowser();
97 void NextDevice(); 101 void NextDevice();
98 102
99 void Respond(); 103 void Respond();
100 104
105 scoped_refptr<DevToolsAndroidBridge::DeviceHandle>
106 FindDeviceHandle(const std::string& serial);
107
101 scoped_refptr<DevToolsAndroidBridge> android_bridge_; 108 scoped_refptr<DevToolsAndroidBridge> android_bridge_;
102 AndroidDeviceManager* device_manager_; 109 AndroidDeviceManager* device_manager_;
103 base::MessageLoop* device_message_loop_; 110 base::MessageLoop* device_message_loop_;
104 Callback callback_; 111 Callback callback_;
105 std::vector<std::string> serials_; 112 std::vector<std::string> serials_;
106 DevToolsAndroidBridge::RemoteBrowsers browsers_; 113 DevToolsAndroidBridge::RemoteBrowsers browsers_;
107 scoped_ptr<DevToolsAndroidBridge::RemoteDevices> remote_devices_; 114 scoped_ptr<DevToolsAndroidBridge::RemoteDevices> remote_devices_;
115 scoped_ptr<DevToolsAndroidBridge::DeviceHandleMap> all_device_handles_;
116 scoped_ptr<DevToolsAndroidBridge::DeviceHandleMap> used_device_handles_;
108 }; 117 };
109 118
110 DiscoveryRequest::DiscoveryRequest( 119 DiscoveryRequest::DiscoveryRequest(
111 scoped_refptr<DevToolsAndroidBridge> android_bridge, 120 scoped_refptr<DevToolsAndroidBridge> android_bridge,
121 const DevToolsAndroidBridge::DeviceHandleMap& device_handles,
112 AndroidDeviceManager* device_manager, 122 AndroidDeviceManager* device_manager,
113 base::MessageLoop* device_message_loop, 123 base::MessageLoop* device_message_loop,
114 const AndroidDeviceManager::DeviceProviders& device_providers, 124 const AndroidDeviceManager::DeviceProviders& device_providers,
115 const Callback& callback) 125 const Callback& callback)
116 : android_bridge_(android_bridge), 126 : android_bridge_(android_bridge),
117 device_manager_(device_manager), 127 device_manager_(device_manager),
118 device_message_loop_(device_message_loop), 128 device_message_loop_(device_message_loop),
119 callback_(callback) { 129 callback_(callback) {
120 remote_devices_.reset(new DevToolsAndroidBridge::RemoteDevices()); 130 remote_devices_.reset(new DevToolsAndroidBridge::RemoteDevices());
131 all_device_handles_.reset(
132 new DevToolsAndroidBridge::DeviceHandleMap(device_handles));
133 used_device_handles_.reset(new DevToolsAndroidBridge::DeviceHandleMap());
121 134
122 device_message_loop_->PostTask( 135 device_message_loop_->PostTask(
123 FROM_HERE, base::Bind( 136 FROM_HERE, base::Bind(
124 &AndroidDeviceManager::QueryDevices, 137 &AndroidDeviceManager::QueryDevices,
125 device_manager_, 138 device_manager_,
126 device_providers, 139 device_providers,
127 base::Bind(&DiscoveryRequest::ReceivedSerials, this))); 140 base::Bind(&DiscoveryRequest::ReceivedSerials, this)));
128 } 141 }
129 142
130 DiscoveryRequest::~DiscoveryRequest() { 143 DiscoveryRequest::~DiscoveryRequest() {
(...skipping 16 matching lines...) Expand all
147 return; 160 return;
148 } 161 }
149 162
150 if (device_manager_->IsConnected(current_serial())) { 163 if (device_manager_->IsConnected(current_serial())) {
151 device_manager_->QueryDeviceInfo(current_serial(), 164 device_manager_->QueryDeviceInfo(current_serial(),
152 base::Bind(&DiscoveryRequest::ReceivedDeviceInfo, this)); 165 base::Bind(&DiscoveryRequest::ReceivedDeviceInfo, this));
153 } else { 166 } else {
154 AndroidDeviceManager::DeviceInfo offline_info; 167 AndroidDeviceManager::DeviceInfo offline_info;
155 offline_info.model = kModelOffline; 168 offline_info.model = kModelOffline;
156 remote_devices_->push_back(new DevToolsAndroidBridge::RemoteDevice( 169 remote_devices_->push_back(new DevToolsAndroidBridge::RemoteDevice(
157 android_bridge_, current_serial(), offline_info, false)); 170 FindDeviceHandle(current_serial()), offline_info, false));
158 NextDevice(); 171 NextDevice();
159 } 172 }
160 } 173 }
161 174
162 void DiscoveryRequest::ReceivedDeviceInfo( 175 void DiscoveryRequest::ReceivedDeviceInfo(
163 const AndroidDeviceManager::DeviceInfo& device_info) { 176 const AndroidDeviceManager::DeviceInfo& device_info) {
164 remote_devices_->push_back(new DevToolsAndroidBridge::RemoteDevice( 177 remote_devices_->push_back(new DevToolsAndroidBridge::RemoteDevice(
165 android_bridge_, current_serial(), device_info, true)); 178 FindDeviceHandle(current_serial()), device_info, true));
166 browsers_ = remote_devices_->back()->browsers(); 179 browsers_ = remote_devices_->back()->browsers();
167 ProcessSockets(); 180 ProcessSockets();
168 } 181 }
169 182
170 void DiscoveryRequest::ProcessSockets() { 183 void DiscoveryRequest::ProcessSockets() {
171 DCHECK_EQ(device_message_loop_, base::MessageLoop::current()); 184 DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
172 if (browsers_.size() == 0) { 185 if (browsers_.size() == 0) {
173 NextDevice(); 186 NextDevice();
174 return; 187 return;
175 } 188 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 browsers_.pop_back(); 246 browsers_.pop_back();
234 ProcessSockets(); 247 ProcessSockets();
235 } 248 }
236 249
237 void DiscoveryRequest::NextDevice() { 250 void DiscoveryRequest::NextDevice() {
238 serials_.pop_back(); 251 serials_.pop_back();
239 ProcessSerials(); 252 ProcessSerials();
240 } 253 }
241 254
242 void DiscoveryRequest::Respond() { 255 void DiscoveryRequest::Respond() {
243 callback_.Run(remote_devices_.release()); 256 callback_.Run(remote_devices_.Pass(),
257 used_device_handles_.Pass(),
258 all_device_handles_.Pass());
259 }
260
261 scoped_refptr<DevToolsAndroidBridge::DeviceHandle>
262 DiscoveryRequest::FindDeviceHandle(const std::string& serial) {
263 DevToolsAndroidBridge::DeviceHandleMap::iterator it =
264 all_device_handles_->find(serial);
265 scoped_refptr<DevToolsAndroidBridge::DeviceHandle> device_handle;
266 if (it != all_device_handles_->end()) {
267 device_handle = it->second;
268 } else {
269 device_handle = new DevToolsAndroidBridge::DeviceHandle(android_bridge_,
270 serial);
271 (*all_device_handles_)[serial] = device_handle;
272 }
273 (*used_device_handles_)[serial] = device_handle;
pfeldman 2014/05/21 11:33:41 So FindDeviceHandle makes it "used"? This is not c
274 return device_handle;
244 } 275 }
245 276
246 // ProtocolCommand ------------------------------------------------------------ 277 // ProtocolCommand ------------------------------------------------------------
247 278
248 class ProtocolCommand 279 class ProtocolCommand
249 : public DevToolsAndroidBridge::AndroidWebSocket::Delegate { 280 : public DevToolsAndroidBridge::AndroidWebSocket::Delegate {
250 public: 281 public:
251 ProtocolCommand( 282 ProtocolCommand(
252 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser, 283 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser,
253 const std::string& debug_url, 284 const std::string& debug_url,
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 base::Closure callback) const { 606 base::Closure callback) const {
576 base::DictionaryValue params; 607 base::DictionaryValue params;
577 params.SetString(kUrlParam, url); 608 params.SetString(kUrlParam, url);
578 browser_->SendProtocolCommand(debug_url_, kPageNavigateCommand, &params, 609 browser_->SendProtocolCommand(debug_url_, kPageNavigateCommand, &params,
579 callback); 610 callback);
580 } 611 }
581 612
582 // DevToolsAndroidBridge::RemoteBrowser --------------------------------------- 613 // DevToolsAndroidBridge::RemoteBrowser ---------------------------------------
583 614
584 DevToolsAndroidBridge::RemoteBrowser::RemoteBrowser( 615 DevToolsAndroidBridge::RemoteBrowser::RemoteBrowser(
585 scoped_refptr<DevToolsAndroidBridge> android_bridge, 616 scoped_refptr<DeviceHandle> device_handle,
586 const std::string& serial,
587 const AndroidDeviceManager::BrowserInfo& browser_info) 617 const AndroidDeviceManager::BrowserInfo& browser_info)
588 : android_bridge_(android_bridge), 618 : device_handle_(device_handle),
589 serial_(serial),
590 socket_(browser_info.socket_name), 619 socket_(browser_info.socket_name),
591 display_name_(browser_info.display_name), 620 display_name_(browser_info.display_name),
592 type_(browser_info.type), 621 type_(browser_info.type),
593 page_descriptors_(new base::ListValue()) { 622 page_descriptors_(new base::ListValue()) {
594 } 623 }
595 624
596 bool DevToolsAndroidBridge::RemoteBrowser::IsChrome() const { 625 bool DevToolsAndroidBridge::RemoteBrowser::IsChrome() const {
597 return type_ == AndroidDeviceManager::BrowserInfo::kTypeChrome; 626 return type_ == AndroidDeviceManager::BrowserInfo::kTypeChrome;
598 } 627 }
599 628
(...skipping 29 matching lines...) Expand all
629 } 658 }
630 return result; 659 return result;
631 } 660 }
632 661
633 void DevToolsAndroidBridge::RemoteBrowser::SetPageDescriptors( 662 void DevToolsAndroidBridge::RemoteBrowser::SetPageDescriptors(
634 const base::ListValue& list) { 663 const base::ListValue& list) {
635 page_descriptors_.reset(list.DeepCopy()); 664 page_descriptors_.reset(list.DeepCopy());
636 } 665 }
637 666
638 static void RespondOnUIThread( 667 static void RespondOnUIThread(
639 const DevToolsAndroidBridge::RemoteBrowser::JsonRequestCallback& callback, 668 const DevToolsAndroidBridge::JsonRequestCallback& callback,
640 int result, 669 int result,
641 const std::string& response) { 670 const std::string& response) {
642 if (callback.is_null()) 671 if (callback.is_null())
643 return; 672 return;
644 BrowserThread::PostTask( 673 BrowserThread::PostTask(
645 BrowserThread::UI, FROM_HERE, base::Bind(callback, result, response)); 674 BrowserThread::UI, FROM_HERE, base::Bind(callback, result, response));
646 } 675 }
647 676
648 void DevToolsAndroidBridge::RemoteBrowser::SendJsonRequest( 677 void DevToolsAndroidBridge::RemoteBrowser::SendJsonRequest(
649 const std::string& request, const JsonRequestCallback& callback) { 678 const std::string& request, const JsonRequestCallback& callback) {
650 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 679 device_handle_->SendJsonRequest(socket_, request, callback);
651 android_bridge_->device_message_loop()->PostTask(
652 FROM_HERE,
653 base::Bind(&AndroidDeviceManager::HttpQuery,
654 android_bridge_->device_manager(), serial_, socket_, request,
655 base::Bind(&RespondOnUIThread, callback)));
656 } 680 }
657 681
658 void DevToolsAndroidBridge::RemoteBrowser::SendProtocolCommand( 682 void DevToolsAndroidBridge::RemoteBrowser::SendProtocolCommand(
659 const std::string& debug_url, 683 const std::string& debug_url,
660 const std::string& method, 684 const std::string& method,
661 base::DictionaryValue* params, 685 base::DictionaryValue* params,
662 const base::Closure callback) { 686 const base::Closure callback) {
663 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 687 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
664 if (debug_url.empty()) 688 if (debug_url.empty())
665 return; 689 return;
666 DevToolsProtocol::Command command(1, method, params); 690 DevToolsProtocol::Command command(1, method, params);
667 new ProtocolCommand(this, debug_url, command.Serialize(), callback); 691 new ProtocolCommand(this, debug_url, command.Serialize(), callback);
668 } 692 }
669 693
670 void DevToolsAndroidBridge::RemoteBrowser::Open( 694 void DevToolsAndroidBridge::RemoteBrowser::Open(
671 const std::string& url, 695 const std::string& url,
672 const DevToolsAndroidBridge::RemotePageCallback& callback) { 696 const DevToolsAndroidBridge::RemotePageCallback& callback) {
673 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 697 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
674 InnerOpen(url, base::Bind(&RemoteBrowser::RespondToOpenOnUIThread, 698 InnerOpen(url, base::Bind(&RemoteBrowser::RespondToOpenOnUIThread,
675 this, callback)); 699 this, callback));
676 } 700 }
677 701
678 scoped_refptr<content::DevToolsAgentHost> 702 scoped_refptr<content::DevToolsAgentHost>
679 DevToolsAndroidBridge::RemoteBrowser::GetAgentHost() { 703 DevToolsAndroidBridge::RemoteBrowser::GetAgentHost() {
680 return AgentHostDelegate::GetOrCreateAgentHost( 704 return AgentHostDelegate::GetOrCreateAgentHost(
681 "adb:" + serial_ + ":" + socket_, this, kBrowserTargetSocket); 705 "adb:" + device_handle_->serial() + ":" + socket_,
706 this,
707 kBrowserTargetSocket);
708 }
709
710 scoped_refptr<DevToolsAndroidBridge::AndroidWebSocket>
711 DevToolsAndroidBridge::RemoteBrowser::CreateWebSocket(
712 const std::string& url,
713 DevToolsAndroidBridge::AndroidWebSocket::Delegate* delegate) {
714 return device_handle_->CreateWebSocket(socket_, url, delegate);
682 } 715 }
683 716
684 void DevToolsAndroidBridge::RemoteBrowser::RespondToOpenOnUIThread( 717 void DevToolsAndroidBridge::RemoteBrowser::RespondToOpenOnUIThread(
685 const DevToolsAndroidBridge::RemotePageCallback& callback, 718 const DevToolsAndroidBridge::RemotePageCallback& callback,
686 int result, 719 int result,
687 const std::string& response) { 720 const std::string& response) {
688 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 721 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
689 if (result < 0) { 722 if (result < 0) {
690 callback.Run(NULL); 723 callback.Run(NULL);
691 return; 724 return;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 if (value && value->GetAsDictionary(&dict)) { 784 if (value && value->GetAsDictionary(&dict)) {
752 RemotePageTarget new_page(this, *dict); 785 RemotePageTarget new_page(this, *dict);
753 new_page.Navigate(url, 786 new_page.Navigate(url,
754 base::Bind(&RespondOnUIThread, callback, result, response)); 787 base::Bind(&RespondOnUIThread, callback, result, response));
755 } 788 }
756 } 789 }
757 790
758 DevToolsAndroidBridge::RemoteBrowser::~RemoteBrowser() { 791 DevToolsAndroidBridge::RemoteBrowser::~RemoteBrowser() {
759 } 792 }
760 793
761
762 // DevToolsAndroidBridge::RemoteDevice ---------------------------------------- 794 // DevToolsAndroidBridge::RemoteDevice ----------------------------------------
763 795
764 DevToolsAndroidBridge::RemoteDevice::RemoteDevice( 796 DevToolsAndroidBridge::RemoteDevice::RemoteDevice(
765 scoped_refptr<DevToolsAndroidBridge> android_bridge, 797 scoped_refptr<DevToolsAndroidBridge::DeviceHandle> device_handle,
766 const std::string& serial,
767 const AndroidDeviceManager::DeviceInfo& device_info, 798 const AndroidDeviceManager::DeviceInfo& device_info,
768 bool connected) 799 bool connected)
769 : android_bridge_(android_bridge), 800 : device_handle_(device_handle),
770 serial_(serial),
771 model_(device_info.model), 801 model_(device_info.model),
772 connected_(connected), 802 connected_(connected),
773 screen_size_(device_info.screen_size) { 803 screen_size_(device_info.screen_size) {
774 for (std::vector<AndroidDeviceManager::BrowserInfo>::const_iterator it = 804 for (std::vector<AndroidDeviceManager::BrowserInfo>::const_iterator it =
775 device_info.browser_info.begin(); 805 device_info.browser_info.begin();
776 it != device_info.browser_info.end(); 806 it != device_info.browser_info.end();
777 ++it) { 807 ++it) {
778 browsers_.push_back(new DevToolsAndroidBridge::RemoteBrowser( 808 browsers_.push_back(new DevToolsAndroidBridge::RemoteBrowser(
779 android_bridge_, serial_, *it)); 809 device_handle, *it));
780 } 810 }
781 } 811 }
782 812
783 void DevToolsAndroidBridge::RemoteDevice::OpenSocket( 813 void DevToolsAndroidBridge::RemoteDevice::OpenSocket(
784 const std::string& socket_name, 814 const std::string& socket_name,
785 const AndroidDeviceManager::SocketCallback& callback) { 815 const AndroidDeviceManager::SocketCallback& callback) {
786 android_bridge_->device_message_loop()->PostTask(FROM_HERE, 816 device_handle_->OpenSocket(socket_name, callback);
787 base::Bind(&AndroidDeviceManager::OpenSocket,
788 android_bridge_->device_manager(),
789 serial_,
790 socket_name,
791 callback));
792 } 817 }
793 818
794 DevToolsAndroidBridge::RemoteDevice::~RemoteDevice() { 819 DevToolsAndroidBridge::RemoteDevice::~RemoteDevice() {
795 } 820 }
796 821
797 // DevToolsAndroidBridge::HandlerThread --------------------------------- 822 // DevToolsAndroidBridge::HandlerThread ---------------------------------
798 823
799 const char kDevToolsAdbBridgeThreadName[] = "Chrome_DevToolsADBThread"; 824 const char kDevToolsAdbBridgeThreadName[] = "Chrome_DevToolsADBThread";
800 825
801 DevToolsAndroidBridge::HandlerThread* 826 DevToolsAndroidBridge::HandlerThread*
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 860 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
836 instance_ = NULL; 861 instance_ = NULL;
837 if (!thread_) 862 if (!thread_)
838 return; 863 return;
839 // Shut down thread on FILE thread to join into IO. 864 // Shut down thread on FILE thread to join into IO.
840 BrowserThread::PostTask( 865 BrowserThread::PostTask(
841 BrowserThread::FILE, FROM_HERE, 866 BrowserThread::FILE, FROM_HERE,
842 base::Bind(&HandlerThread::StopThread, thread_)); 867 base::Bind(&HandlerThread::StopThread, thread_));
843 } 868 }
844 869
870 // DevToolsAndroidBridge::DeviceHandle ----------------------------------------
871
872 DevToolsAndroidBridge::DeviceHandle::DeviceHandle(
873 scoped_refptr<DevToolsAndroidBridge> android_bridge,
874 const std::string& serial)
875 : android_bridge_(android_bridge),
876 serial_(serial) {
877 }
878
879 void DevToolsAndroidBridge::DeviceHandle::SendJsonRequest(
pfeldman 2014/05/21 11:33:41 ::HttpQuery?
880 const std::string& socket,
881 const std::string& request,
882 const JsonRequestCallback& callback) {
883 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
884 android_bridge_->device_message_loop()->PostTask(
885 FROM_HERE,
886 base::Bind(&AndroidDeviceManager::HttpQuery,
887 android_bridge_->device_manager(),
888 serial_,
889 socket,
890 request,
891 base::Bind(&RespondOnUIThread, callback)));
892 }
893
894 void DevToolsAndroidBridge::DeviceHandle::OpenSocket(
895 const std::string& socket_name,
896 const AndroidDeviceManager::SocketCallback& callback) {
897 android_bridge_->device_message_loop()->PostTask(FROM_HERE,
pfeldman 2014/05/21 11:33:41 DCHECK thread.
898 base::Bind(&AndroidDeviceManager::OpenSocket,
899 android_bridge_->device_manager(),
900 serial_,
901 socket_name,
902 callback));
903 }
904
905 DevToolsAndroidBridge::DeviceHandle::~DeviceHandle() {
906 android_bridge_->device_message_loop()->PostTask(FROM_HERE,
pfeldman 2014/05/21 11:33:41 ditto
907 base::Bind(&AndroidDeviceManager::ReleaseDevice,
908 android_bridge_->device_manager(),
909 serial_));
910 }
911
845 // DevToolsAndroidBridge ------------------------------------------------------ 912 // DevToolsAndroidBridge ------------------------------------------------------
846 913
847 DevToolsAndroidBridge::DevToolsAndroidBridge(Profile* profile) 914 DevToolsAndroidBridge::DevToolsAndroidBridge(Profile* profile)
848 : profile_(profile), 915 : profile_(profile),
849 handler_thread_(HandlerThread::GetInstance()) { 916 handler_thread_(HandlerThread::GetInstance()) {
850 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 917 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
851 pref_change_registrar_.Init(profile_->GetPrefs()); 918 pref_change_registrar_.Init(profile_->GetPrefs());
852 pref_change_registrar_.Add(prefs::kDevToolsDiscoverUsbDevicesEnabled, 919 pref_change_registrar_.Add(prefs::kDevToolsDiscoverUsbDevicesEnabled,
853 base::Bind(&DevToolsAndroidBridge::CreateDeviceProviders, 920 base::Bind(&DevToolsAndroidBridge::CreateDeviceProviders,
854 base::Unretained(this))); 921 base::Unretained(this)));
(...skipping 13 matching lines...) Expand all
868 RequestDeviceList(); 935 RequestDeviceList();
869 } 936 }
870 937
871 void DevToolsAndroidBridge::RemoveDeviceListListener( 938 void DevToolsAndroidBridge::RemoveDeviceListListener(
872 DeviceListListener* listener) { 939 DeviceListListener* listener) {
873 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 940 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
874 DeviceListListeners::iterator it = std::find( 941 DeviceListListeners::iterator it = std::find(
875 device_list_listeners_.begin(), device_list_listeners_.end(), listener); 942 device_list_listeners_.begin(), device_list_listeners_.end(), listener);
876 DCHECK(it != device_list_listeners_.end()); 943 DCHECK(it != device_list_listeners_.end());
877 device_list_listeners_.erase(it); 944 device_list_listeners_.erase(it);
878 if (device_list_listeners_.empty() && device_manager_) { 945 if (device_list_listeners_.empty() && device_manager_)
879 device_message_loop()->PostTask(FROM_HERE, 946 device_handles_.clear();
880 base::Bind(&AndroidDeviceManager::Stop, device_manager_));
881 }
882 } 947 }
883 948
884 void DevToolsAndroidBridge::AddDeviceCountListener( 949 void DevToolsAndroidBridge::AddDeviceCountListener(
885 DeviceCountListener* listener) { 950 DeviceCountListener* listener) {
886 device_count_listeners_.push_back(listener); 951 device_count_listeners_.push_back(listener);
887 if (device_count_listeners_.size() == 1 && device_manager_) 952 if (device_count_listeners_.size() == 1 && device_manager_)
888 RequestDeviceCount(); 953 RequestDeviceCount();
889 } 954 }
890 955
891 void DevToolsAndroidBridge::RemoveDeviceCountListener( 956 void DevToolsAndroidBridge::RemoveDeviceCountListener(
892 DeviceCountListener* listener) { 957 DeviceCountListener* listener) {
893 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 958 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
894 DeviceCountListeners::iterator it = std::find( 959 DeviceCountListeners::iterator it = std::find(
895 device_count_listeners_.begin(), device_count_listeners_.end(), listener); 960 device_count_listeners_.begin(), device_count_listeners_.end(), listener);
896 DCHECK(it != device_count_listeners_.end()); 961 DCHECK(it != device_count_listeners_.end());
897 device_count_listeners_.erase(it); 962 device_count_listeners_.erase(it);
898 } 963 }
899 964
900 // static 965 // static
901 bool DevToolsAndroidBridge::HasDevToolsWindow(const std::string& agent_id) { 966 bool DevToolsAndroidBridge::HasDevToolsWindow(const std::string& agent_id) {
902 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 967 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
903 return g_host_delegates.Get().find(agent_id) != g_host_delegates.Get().end(); 968 return g_host_delegates.Get().find(agent_id) != g_host_delegates.Get().end();
904 } 969 }
905 970
971 void DevToolsAndroidBridge::IsConnectedForTest(const std::string& serial,
972 const base::Callback<void(bool)>& callback) {
973 base::PostTaskAndReplyWithResult(
974 device_message_loop()->message_loop_proxy(),
975 FROM_HERE,
976 base::Bind(&AndroidDeviceManager::IsConnected, device_manager_, serial),
977 callback);
978 }
979
906 DevToolsAndroidBridge::~DevToolsAndroidBridge() { 980 DevToolsAndroidBridge::~DevToolsAndroidBridge() {
907 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 981 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
908 DCHECK(device_list_listeners_.empty()); 982 DCHECK(device_list_listeners_.empty());
909 DCHECK(device_count_listeners_.empty()); 983 DCHECK(device_count_listeners_.empty());
910 if (device_manager_) { 984 if (device_manager_) {
911 AndroidDeviceManager* raw_ptr = device_manager_.get(); 985 AndroidDeviceManager* raw_ptr = device_manager_.get();
912 device_manager_->AddRef(); 986 device_manager_->AddRef();
913 device_manager_ = NULL; 987 device_manager_ = NULL;
914 device_message_loop()->ReleaseSoon(FROM_HERE, raw_ptr); 988 device_message_loop()->ReleaseSoon(FROM_HERE, raw_ptr);
915 } 989 }
916 } 990 }
917 991
918 void DevToolsAndroidBridge::RequestDeviceList() { 992 void DevToolsAndroidBridge::RequestDeviceList() {
919 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 993 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
920 DCHECK(device_manager_); 994 DCHECK(device_manager_);
921 995
922 if (device_list_listeners_.empty()) 996 if (device_list_listeners_.empty())
923 return; 997 return;
924 998
925 new DiscoveryRequest( 999 new DiscoveryRequest(
926 this, 1000 this,
1001 device_handles_,
pfeldman 2014/05/21 11:33:41 What is device_handles_? What is used_device_handl
927 device_manager(), 1002 device_manager(),
928 device_message_loop(), 1003 device_message_loop(),
929 device_providers_, 1004 device_providers_,
930 base::Bind(&DevToolsAndroidBridge::ReceivedDeviceList, this)); 1005 base::Bind(&DevToolsAndroidBridge::ReceivedDeviceList, this));
931 } 1006 }
932 1007
933 void DevToolsAndroidBridge::CreatedDeviceManager( 1008 void DevToolsAndroidBridge::CreatedDeviceManager(
934 scoped_refptr<AndroidDeviceManager> device_manager) { 1009 scoped_refptr<AndroidDeviceManager> device_manager) {
935 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1010 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
936 device_manager_ = device_manager; 1011 device_manager_ = device_manager;
937 if (!device_list_listeners_.empty()) 1012 if (!device_list_listeners_.empty())
938 RequestDeviceList(); 1013 RequestDeviceList();
939 if (!device_count_listeners_.empty()) 1014 if (!device_count_listeners_.empty())
940 RequestDeviceCount(); 1015 RequestDeviceCount();
941 } 1016 }
942 1017
943 void DevToolsAndroidBridge::ReceivedDeviceList(RemoteDevices* devices_ptr) { 1018 void DevToolsAndroidBridge::ReceivedDeviceList(
1019 scoped_ptr<RemoteDevices> devices,
1020 scoped_ptr<DeviceHandleMap> used_device_handles,
1021 scoped_ptr<DeviceHandleMap> all_device_handles) {
pfeldman 2014/05/21 11:33:41 Is this field unused?
944 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1022 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
945 1023
946 scoped_ptr<RemoteDevices> devices(devices_ptr);
947
948 if (device_list_listeners_.empty()) 1024 if (device_list_listeners_.empty())
949 return; 1025 return;
950 1026
1027 device_handles_ = *used_device_handles.get();
1028
951 DeviceListListeners copy(device_list_listeners_); 1029 DeviceListListeners copy(device_list_listeners_);
952 for (DeviceListListeners::iterator it = copy.begin(); it != copy.end(); ++it) 1030 for (DeviceListListeners::iterator it = copy.begin(); it != copy.end(); ++it)
953 (*it)->DeviceListChanged(*devices.get()); 1031 (*it)->DeviceListChanged(*devices.get());
954 1032
955 BrowserThread::PostDelayedTask( 1033 BrowserThread::PostDelayedTask(
956 BrowserThread::UI, 1034 BrowserThread::UI,
957 FROM_HERE, 1035 FROM_HERE,
958 base::Bind(&DevToolsAndroidBridge::RequestDeviceList, this), 1036 base::Bind(&DevToolsAndroidBridge::RequestDeviceList, this),
959 base::TimeDelta::FromMilliseconds(kAdbPollingIntervalMs)); 1037 base::TimeDelta::FromMilliseconds(kAdbPollingIntervalMs));
960 } 1038 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1001 PrefService* service = profile_->GetPrefs(); 1079 PrefService* service = profile_->GetPrefs();
1002 const PrefService::Preference* pref = 1080 const PrefService::Preference* pref =
1003 service->FindPreference(prefs::kDevToolsDiscoverUsbDevicesEnabled); 1081 service->FindPreference(prefs::kDevToolsDiscoverUsbDevicesEnabled);
1004 const base::Value* pref_value = pref->GetValue(); 1082 const base::Value* pref_value = pref->GetValue();
1005 1083
1006 bool enabled; 1084 bool enabled;
1007 if (pref_value->GetAsBoolean(&enabled) && enabled) { 1085 if (pref_value->GetAsBoolean(&enabled) && enabled) {
1008 device_providers_.push_back(new UsbDeviceProvider(profile_)); 1086 device_providers_.push_back(new UsbDeviceProvider(profile_));
1009 } 1087 }
1010 } 1088 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698