OLD | NEW |
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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 const std::string& response); | 107 const std::string& response); |
108 | 108 |
109 DeviceListCallback callback_; | 109 DeviceListCallback callback_; |
110 CompleteDevices complete_devices_; | 110 CompleteDevices complete_devices_; |
111 }; | 111 }; |
112 | 112 |
113 DevToolsAndroidBridge::DiscoveryRequest::DiscoveryRequest( | 113 DevToolsAndroidBridge::DiscoveryRequest::DiscoveryRequest( |
114 AndroidDeviceManager* device_manager, | 114 AndroidDeviceManager* device_manager, |
115 const DeviceListCallback& callback) | 115 const DeviceListCallback& callback) |
116 : callback_(callback) { | 116 : callback_(callback) { |
117 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 117 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
118 device_manager->QueryDevices( | 118 device_manager->QueryDevices( |
119 base::Bind(&DiscoveryRequest::ReceivedDevices, this)); | 119 base::Bind(&DiscoveryRequest::ReceivedDevices, this)); |
120 } | 120 } |
121 | 121 |
122 DevToolsAndroidBridge::DiscoveryRequest::~DiscoveryRequest() { | 122 DevToolsAndroidBridge::DiscoveryRequest::~DiscoveryRequest() { |
123 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 123 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
124 callback_.Run(complete_devices_); | 124 callback_.Run(complete_devices_); |
125 } | 125 } |
126 | 126 |
127 void DevToolsAndroidBridge::DiscoveryRequest::ReceivedDevices( | 127 void DevToolsAndroidBridge::DiscoveryRequest::ReceivedDevices( |
128 const AndroidDeviceManager::Devices& devices) { | 128 const AndroidDeviceManager::Devices& devices) { |
129 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 129 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
130 for (const auto& device : devices) { | 130 for (const auto& device : devices) { |
131 device->QueryDeviceInfo( | 131 device->QueryDeviceInfo( |
132 base::Bind(&DiscoveryRequest::ReceivedDeviceInfo, this, device)); | 132 base::Bind(&DiscoveryRequest::ReceivedDeviceInfo, this, device)); |
133 } | 133 } |
134 } | 134 } |
135 | 135 |
136 void DevToolsAndroidBridge::DiscoveryRequest::ReceivedDeviceInfo( | 136 void DevToolsAndroidBridge::DiscoveryRequest::ReceivedDeviceInfo( |
137 scoped_refptr<AndroidDeviceManager::Device> device, | 137 scoped_refptr<AndroidDeviceManager::Device> device, |
138 const AndroidDeviceManager::DeviceInfo& device_info) { | 138 const AndroidDeviceManager::DeviceInfo& device_info) { |
139 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 139 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
140 scoped_refptr<RemoteDevice> remote_device = | 140 scoped_refptr<RemoteDevice> remote_device = |
141 new RemoteDevice(device->serial(), device_info); | 141 new RemoteDevice(device->serial(), device_info); |
142 complete_devices_.push_back(std::make_pair(device, remote_device)); | 142 complete_devices_.push_back(std::make_pair(device, remote_device)); |
143 for (RemoteBrowsers::iterator it = remote_device->browsers().begin(); | 143 for (RemoteBrowsers::iterator it = remote_device->browsers().begin(); |
144 it != remote_device->browsers().end(); ++it) { | 144 it != remote_device->browsers().end(); ++it) { |
145 device->SendJsonRequest( | 145 device->SendJsonRequest( |
146 (*it)->socket(), | 146 (*it)->socket(), |
147 kVersionRequest, | 147 kVersionRequest, |
148 base::Bind(&DiscoveryRequest::ReceivedVersion, this, *it)); | 148 base::Bind(&DiscoveryRequest::ReceivedVersion, this, *it)); |
149 device->SendJsonRequest( | 149 device->SendJsonRequest( |
150 (*it)->socket(), | 150 (*it)->socket(), |
151 kPageListRequest, | 151 kPageListRequest, |
152 base::Bind(&DiscoveryRequest::ReceivedPages, this, *it)); | 152 base::Bind(&DiscoveryRequest::ReceivedPages, this, *it)); |
153 } | 153 } |
154 } | 154 } |
155 | 155 |
156 void DevToolsAndroidBridge::DiscoveryRequest::ReceivedVersion( | 156 void DevToolsAndroidBridge::DiscoveryRequest::ReceivedVersion( |
157 scoped_refptr<RemoteBrowser> browser, | 157 scoped_refptr<RemoteBrowser> browser, |
158 int result, | 158 int result, |
159 const std::string& response) { | 159 const std::string& response) { |
160 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 160 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
161 if (result < 0) | 161 if (result < 0) |
162 return; | 162 return; |
163 // Parse version, append to package name if available, | 163 // Parse version, append to package name if available, |
164 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); | 164 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); |
165 base::DictionaryValue* dict; | 165 base::DictionaryValue* dict; |
166 if (value && value->GetAsDictionary(&dict)) { | 166 if (value && value->GetAsDictionary(&dict)) { |
167 std::string browser_name; | 167 std::string browser_name; |
168 if (dict->GetString("Browser", &browser_name)) { | 168 if (dict->GetString("Browser", &browser_name)) { |
169 std::vector<std::string> parts; | 169 std::vector<std::string> parts; |
170 Tokenize(browser_name, "/", &parts); | 170 Tokenize(browser_name, "/", &parts); |
171 if (parts.size() == 2) | 171 if (parts.size() == 2) |
172 browser->version_ = parts[1]; | 172 browser->version_ = parts[1]; |
173 else | 173 else |
174 browser->version_ = browser_name; | 174 browser->version_ = browser_name; |
175 } | 175 } |
176 std::string package; | 176 std::string package; |
177 if (dict->GetString("Android-Package", &package)) { | 177 if (dict->GetString("Android-Package", &package)) { |
178 browser->display_name_ = | 178 browser->display_name_ = |
179 AndroidDeviceManager::GetBrowserName(browser->socket(), package); | 179 AndroidDeviceManager::GetBrowserName(browser->socket(), package); |
180 } | 180 } |
181 } | 181 } |
182 } | 182 } |
183 | 183 |
184 void DevToolsAndroidBridge::DiscoveryRequest::ReceivedPages( | 184 void DevToolsAndroidBridge::DiscoveryRequest::ReceivedPages( |
185 scoped_refptr<RemoteBrowser> browser, | 185 scoped_refptr<RemoteBrowser> browser, |
186 int result, | 186 int result, |
187 const std::string& response) { | 187 const std::string& response) { |
188 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 188 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
189 if (result < 0) | 189 if (result < 0) |
190 return; | 190 return; |
191 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); | 191 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); |
192 base::ListValue* list_value; | 192 base::ListValue* list_value; |
193 if (value && value->GetAsList(&list_value)) { | 193 if (value && value->GetAsList(&list_value)) { |
194 for (const auto& page_value : *list_value) { | 194 for (const auto& page_value : *list_value) { |
195 base::DictionaryValue* dict; | 195 base::DictionaryValue* dict; |
196 if (page_value->GetAsDictionary(&dict)) { | 196 if (page_value->GetAsDictionary(&dict)) { |
197 browser->pages_.push_back( | 197 browser->pages_.push_back( |
198 new RemotePage(browser->browser_id_, *dict, browser->IsWebView())); | 198 new RemotePage(browser->browser_id_, *dict, browser->IsWebView())); |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 }; | 341 }; |
342 | 342 |
343 // static | 343 // static |
344 scoped_refptr<content::DevToolsAgentHost> | 344 scoped_refptr<content::DevToolsAgentHost> |
345 DevToolsAndroidBridge::AgentHostDelegate::GetOrCreateAgentHost( | 345 DevToolsAndroidBridge::AgentHostDelegate::GetOrCreateAgentHost( |
346 DevToolsAndroidBridge* bridge, | 346 DevToolsAndroidBridge* bridge, |
347 const std::string& id, | 347 const std::string& id, |
348 const BrowserId& browser_id, | 348 const BrowserId& browser_id, |
349 const std::string& debug_url, | 349 const std::string& debug_url, |
350 bool is_web_view) { | 350 bool is_web_view) { |
351 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 351 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
352 AgentHostDelegates::iterator it = bridge->host_delegates_.find(id); | 352 AgentHostDelegates::iterator it = bridge->host_delegates_.find(id); |
353 if (it != bridge->host_delegates_.end()) | 353 if (it != bridge->host_delegates_.end()) |
354 return it->second->agent_host_; | 354 return it->second->agent_host_; |
355 | 355 |
356 AgentHostDelegate* delegate = | 356 AgentHostDelegate* delegate = |
357 new AgentHostDelegate(bridge, id, browser_id, debug_url, is_web_view); | 357 new AgentHostDelegate(bridge, id, browser_id, debug_url, is_web_view); |
358 scoped_refptr<content::DevToolsAgentHost> result = | 358 scoped_refptr<content::DevToolsAgentHost> result = |
359 content::DevToolsAgentHost::Create(delegate); | 359 content::DevToolsAgentHost::Create(delegate); |
360 delegate->agent_host_ = result.get(); | 360 delegate->agent_host_ = result.get(); |
361 return result; | 361 return result; |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
655 } | 655 } |
656 device->SendJsonRequest(browser_id.second, request, callback); | 656 device->SendJsonRequest(browser_id.second, request, callback); |
657 } | 657 } |
658 | 658 |
659 void DevToolsAndroidBridge::SendProtocolCommand( | 659 void DevToolsAndroidBridge::SendProtocolCommand( |
660 const BrowserId& browser_id, | 660 const BrowserId& browser_id, |
661 const std::string& debug_url, | 661 const std::string& debug_url, |
662 const std::string& method, | 662 const std::string& method, |
663 scoped_ptr<base::DictionaryValue> params, | 663 scoped_ptr<base::DictionaryValue> params, |
664 const base::Closure callback) { | 664 const base::Closure callback) { |
665 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 665 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
666 if (debug_url.empty()) | 666 if (debug_url.empty()) |
667 return; | 667 return; |
668 scoped_refptr<AndroidDeviceManager::Device> device( | 668 scoped_refptr<AndroidDeviceManager::Device> device( |
669 FindDevice(browser_id.first)); | 669 FindDevice(browser_id.first)); |
670 if (!device.get()) { | 670 if (!device.get()) { |
671 callback.Run(); | 671 callback.Run(); |
672 return; | 672 return; |
673 } | 673 } |
674 new ProtocolCommand( | 674 new ProtocolCommand( |
675 device, browser_id.second, debug_url, | 675 device, browser_id.second, debug_url, |
(...skipping 28 matching lines...) Expand all Loading... |
704 const std::string& serial) { | 704 const std::string& serial) { |
705 DeviceMap::iterator it = device_map_.find(serial); | 705 DeviceMap::iterator it = device_map_.find(serial); |
706 return it == device_map_.end() ? nullptr : it->second; | 706 return it == device_map_.end() ? nullptr : it->second; |
707 } | 707 } |
708 | 708 |
709 void DevToolsAndroidBridge::RespondToOpenOnUIThread( | 709 void DevToolsAndroidBridge::RespondToOpenOnUIThread( |
710 scoped_refptr<RemoteBrowser> browser, | 710 scoped_refptr<RemoteBrowser> browser, |
711 const RemotePageCallback& callback, | 711 const RemotePageCallback& callback, |
712 int result, | 712 int result, |
713 const std::string& response) { | 713 const std::string& response) { |
714 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 714 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
715 if (result < 0) { | 715 if (result < 0) { |
716 callback.Run(NULL); | 716 callback.Run(NULL); |
717 return; | 717 return; |
718 } | 718 } |
719 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); | 719 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); |
720 base::DictionaryValue* dict; | 720 base::DictionaryValue* dict; |
721 if (value && value->GetAsDictionary(&dict)) { | 721 if (value && value->GetAsDictionary(&dict)) { |
722 scoped_refptr<RemotePage> new_page( | 722 scoped_refptr<RemotePage> new_page( |
723 new RemotePage(browser->browser_id_, *dict, browser->IsWebView())); | 723 new RemotePage(browser->browser_id_, *dict, browser->IsWebView())); |
724 callback.Run(new_page); | 724 callback.Run(new_page); |
725 } | 725 } |
726 } | 726 } |
727 | 727 |
728 void DevToolsAndroidBridge::OpenRemotePage( | 728 void DevToolsAndroidBridge::OpenRemotePage( |
729 scoped_refptr<RemoteBrowser> browser, | 729 scoped_refptr<RemoteBrowser> browser, |
730 const std::string& input_url, | 730 const std::string& input_url, |
731 const DevToolsAndroidBridge::RemotePageCallback& callback) { | 731 const DevToolsAndroidBridge::RemotePageCallback& callback) { |
732 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 732 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
733 GURL gurl(input_url); | 733 GURL gurl(input_url); |
734 if (!gurl.is_valid()) { | 734 if (!gurl.is_valid()) { |
735 gurl = GURL("http://" + input_url); | 735 gurl = GURL("http://" + input_url); |
736 if (!gurl.is_valid()) | 736 if (!gurl.is_valid()) |
737 return; | 737 return; |
738 } | 738 } |
739 std::string url = gurl.spec(); | 739 std::string url = gurl.spec(); |
740 RemoteBrowser::ParsedVersion parsed_version = browser->GetParsedVersion(); | 740 RemoteBrowser::ParsedVersion parsed_version = browser->GetParsedVersion(); |
741 | 741 |
742 if (browser->IsChrome() && | 742 if (browser->IsChrome() && |
(...skipping 11 matching lines...) Expand all Loading... |
754 AsWeakPtr(), browser, callback, url)); | 754 AsWeakPtr(), browser, callback, url)); |
755 } | 755 } |
756 } | 756 } |
757 | 757 |
758 void DevToolsAndroidBridge::PageCreatedOnUIThread( | 758 void DevToolsAndroidBridge::PageCreatedOnUIThread( |
759 scoped_refptr<RemoteBrowser> browser, | 759 scoped_refptr<RemoteBrowser> browser, |
760 const RemotePageCallback& callback, | 760 const RemotePageCallback& callback, |
761 const std::string& url, | 761 const std::string& url, |
762 int result, | 762 int result, |
763 const std::string& response) { | 763 const std::string& response) { |
764 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 764 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
765 | 765 |
766 if (result < 0) | 766 if (result < 0) |
767 return; | 767 return; |
768 // Navigating too soon after the page creation breaks navigation history | 768 // Navigating too soon after the page creation breaks navigation history |
769 // (crbug.com/311014). This can be avoided by adding a moderate delay. | 769 // (crbug.com/311014). This can be avoided by adding a moderate delay. |
770 BrowserThread::PostDelayedTask( | 770 BrowserThread::PostDelayedTask( |
771 BrowserThread::UI, FROM_HERE, | 771 BrowserThread::UI, FROM_HERE, |
772 base::Bind(&DevToolsAndroidBridge::NavigatePageOnUIThread, | 772 base::Bind(&DevToolsAndroidBridge::NavigatePageOnUIThread, |
773 AsWeakPtr(), browser, callback, result, response, url), | 773 AsWeakPtr(), browser, callback, result, response, url), |
774 base::TimeDelta::FromMilliseconds(kNewPageNavigateDelayMs)); | 774 base::TimeDelta::FromMilliseconds(kNewPageNavigateDelayMs)); |
775 } | 775 } |
776 | 776 |
777 void DevToolsAndroidBridge::NavigatePageOnUIThread( | 777 void DevToolsAndroidBridge::NavigatePageOnUIThread( |
778 scoped_refptr<RemoteBrowser> browser, | 778 scoped_refptr<RemoteBrowser> browser, |
779 const RemotePageCallback& callback, | 779 const RemotePageCallback& callback, |
780 int result, | 780 int result, |
781 const std::string& response, | 781 const std::string& response, |
782 const std::string& url) { | 782 const std::string& url) { |
783 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 783 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
784 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); | 784 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); |
785 base::DictionaryValue* dict; | 785 base::DictionaryValue* dict; |
786 | 786 |
787 if (value && value->GetAsDictionary(&dict)) { | 787 if (value && value->GetAsDictionary(&dict)) { |
788 RemotePageTarget new_page(this, browser->browser_id_, *dict, | 788 RemotePageTarget new_page(this, browser->browser_id_, *dict, |
789 browser->IsWebView()); | 789 browser->IsWebView()); |
790 new_page.Navigate(url, | 790 new_page.Navigate(url, |
791 base::Bind(&DevToolsAndroidBridge::RespondToOpenOnUIThread, | 791 base::Bind(&DevToolsAndroidBridge::RespondToOpenOnUIThread, |
792 AsWeakPtr(), browser, callback, result, response)); | 792 AsWeakPtr(), browser, callback, result, response)); |
793 } | 793 } |
(...skipping 28 matching lines...) Expand all Loading... |
822 Profile* profile, | 822 Profile* profile, |
823 SigninManagerBase* signin_manager, | 823 SigninManagerBase* signin_manager, |
824 ProfileOAuth2TokenService* const token_service) | 824 ProfileOAuth2TokenService* const token_service) |
825 : profile_(profile), | 825 : profile_(profile), |
826 signin_manager_(signin_manager), | 826 signin_manager_(signin_manager), |
827 token_service_(token_service), | 827 token_service_(token_service), |
828 device_manager_(AndroidDeviceManager::Create()), | 828 device_manager_(AndroidDeviceManager::Create()), |
829 task_scheduler_(base::Bind(&DevToolsAndroidBridge::ScheduleTaskDefault)), | 829 task_scheduler_(base::Bind(&DevToolsAndroidBridge::ScheduleTaskDefault)), |
830 port_forwarding_controller_(new PortForwardingController(profile, this)), | 830 port_forwarding_controller_(new PortForwardingController(profile, this)), |
831 weak_factory_(this) { | 831 weak_factory_(this) { |
832 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 832 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
833 pref_change_registrar_.Init(profile_->GetPrefs()); | 833 pref_change_registrar_.Init(profile_->GetPrefs()); |
834 pref_change_registrar_.Add(prefs::kDevToolsDiscoverUsbDevicesEnabled, | 834 pref_change_registrar_.Add(prefs::kDevToolsDiscoverUsbDevicesEnabled, |
835 base::Bind(&DevToolsAndroidBridge::CreateDeviceProviders, | 835 base::Bind(&DevToolsAndroidBridge::CreateDeviceProviders, |
836 base::Unretained(this))); | 836 base::Unretained(this))); |
837 CreateDeviceProviders(); | 837 CreateDeviceProviders(); |
838 } | 838 } |
839 | 839 |
840 void DevToolsAndroidBridge::AddDeviceListListener( | 840 void DevToolsAndroidBridge::AddDeviceListListener( |
841 DeviceListListener* listener) { | 841 DeviceListListener* listener) { |
842 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 842 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
843 bool polling_was_off = !NeedsDeviceListPolling(); | 843 bool polling_was_off = !NeedsDeviceListPolling(); |
844 device_list_listeners_.push_back(listener); | 844 device_list_listeners_.push_back(listener); |
845 if (polling_was_off) | 845 if (polling_was_off) |
846 StartDeviceListPolling(); | 846 StartDeviceListPolling(); |
847 } | 847 } |
848 | 848 |
849 void DevToolsAndroidBridge::RemoveDeviceListListener( | 849 void DevToolsAndroidBridge::RemoveDeviceListListener( |
850 DeviceListListener* listener) { | 850 DeviceListListener* listener) { |
851 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 851 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
852 DeviceListListeners::iterator it = std::find( | 852 DeviceListListeners::iterator it = std::find( |
853 device_list_listeners_.begin(), device_list_listeners_.end(), listener); | 853 device_list_listeners_.begin(), device_list_listeners_.end(), listener); |
854 DCHECK(it != device_list_listeners_.end()); | 854 DCHECK(it != device_list_listeners_.end()); |
855 device_list_listeners_.erase(it); | 855 device_list_listeners_.erase(it); |
856 if (!NeedsDeviceListPolling()) | 856 if (!NeedsDeviceListPolling()) |
857 StopDeviceListPolling(); | 857 StopDeviceListPolling(); |
858 } | 858 } |
859 | 859 |
860 void DevToolsAndroidBridge::AddDeviceCountListener( | 860 void DevToolsAndroidBridge::AddDeviceCountListener( |
861 DeviceCountListener* listener) { | 861 DeviceCountListener* listener) { |
862 device_count_listeners_.push_back(listener); | 862 device_count_listeners_.push_back(listener); |
863 if (device_count_listeners_.size() == 1) | 863 if (device_count_listeners_.size() == 1) |
864 StartDeviceCountPolling(); | 864 StartDeviceCountPolling(); |
865 } | 865 } |
866 | 866 |
867 void DevToolsAndroidBridge::RemoveDeviceCountListener( | 867 void DevToolsAndroidBridge::RemoveDeviceCountListener( |
868 DeviceCountListener* listener) { | 868 DeviceCountListener* listener) { |
869 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 869 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
870 DeviceCountListeners::iterator it = std::find( | 870 DeviceCountListeners::iterator it = std::find( |
871 device_count_listeners_.begin(), device_count_listeners_.end(), listener); | 871 device_count_listeners_.begin(), device_count_listeners_.end(), listener); |
872 DCHECK(it != device_count_listeners_.end()); | 872 DCHECK(it != device_count_listeners_.end()); |
873 device_count_listeners_.erase(it); | 873 device_count_listeners_.erase(it); |
874 if (device_count_listeners_.empty()) | 874 if (device_count_listeners_.empty()) |
875 StopDeviceCountPolling(); | 875 StopDeviceCountPolling(); |
876 } | 876 } |
877 | 877 |
878 void DevToolsAndroidBridge::AddPortForwardingListener( | 878 void DevToolsAndroidBridge::AddPortForwardingListener( |
879 PortForwardingListener* listener) { | 879 PortForwardingListener* listener) { |
880 bool polling_was_off = !NeedsDeviceListPolling(); | 880 bool polling_was_off = !NeedsDeviceListPolling(); |
881 port_forwarding_listeners_.push_back(listener); | 881 port_forwarding_listeners_.push_back(listener); |
882 if (polling_was_off) | 882 if (polling_was_off) |
883 StartDeviceListPolling(); | 883 StartDeviceListPolling(); |
884 } | 884 } |
885 | 885 |
886 void DevToolsAndroidBridge::RemovePortForwardingListener( | 886 void DevToolsAndroidBridge::RemovePortForwardingListener( |
887 PortForwardingListener* listener) { | 887 PortForwardingListener* listener) { |
888 PortForwardingListeners::iterator it = std::find( | 888 PortForwardingListeners::iterator it = std::find( |
889 port_forwarding_listeners_.begin(), | 889 port_forwarding_listeners_.begin(), |
890 port_forwarding_listeners_.end(), | 890 port_forwarding_listeners_.end(), |
891 listener); | 891 listener); |
892 DCHECK(it != port_forwarding_listeners_.end()); | 892 DCHECK(it != port_forwarding_listeners_.end()); |
893 port_forwarding_listeners_.erase(it); | 893 port_forwarding_listeners_.erase(it); |
894 if (!NeedsDeviceListPolling()) | 894 if (!NeedsDeviceListPolling()) |
895 StopDeviceListPolling(); | 895 StopDeviceListPolling(); |
896 } | 896 } |
897 | 897 |
898 bool DevToolsAndroidBridge::HasDevToolsWindow(const std::string& agent_id) { | 898 bool DevToolsAndroidBridge::HasDevToolsWindow(const std::string& agent_id) { |
899 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 899 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
900 return host_delegates_.find(agent_id) != host_delegates_.end(); | 900 return host_delegates_.find(agent_id) != host_delegates_.end(); |
901 } | 901 } |
902 | 902 |
903 DevToolsAndroidBridge::~DevToolsAndroidBridge() { | 903 DevToolsAndroidBridge::~DevToolsAndroidBridge() { |
904 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 904 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
905 DCHECK(device_list_listeners_.empty()); | 905 DCHECK(device_list_listeners_.empty()); |
906 DCHECK(device_count_listeners_.empty()); | 906 DCHECK(device_count_listeners_.empty()); |
907 DCHECK(port_forwarding_listeners_.empty()); | 907 DCHECK(port_forwarding_listeners_.empty()); |
908 } | 908 } |
909 | 909 |
910 void DevToolsAndroidBridge::StartDeviceListPolling() { | 910 void DevToolsAndroidBridge::StartDeviceListPolling() { |
911 device_list_callback_.Reset( | 911 device_list_callback_.Reset( |
912 base::Bind(&DevToolsAndroidBridge::ReceivedDeviceList, AsWeakPtr())); | 912 base::Bind(&DevToolsAndroidBridge::ReceivedDeviceList, AsWeakPtr())); |
913 RequestDeviceList(device_list_callback_.callback()); | 913 RequestDeviceList(device_list_callback_.callback()); |
914 } | 914 } |
915 | 915 |
916 void DevToolsAndroidBridge::StopDeviceListPolling() { | 916 void DevToolsAndroidBridge::StopDeviceListPolling() { |
917 device_list_callback_.Cancel(); | 917 device_list_callback_.Cancel(); |
918 device_map_.clear(); | 918 device_map_.clear(); |
919 } | 919 } |
920 | 920 |
921 bool DevToolsAndroidBridge::NeedsDeviceListPolling() { | 921 bool DevToolsAndroidBridge::NeedsDeviceListPolling() { |
922 return !device_list_listeners_.empty() || !port_forwarding_listeners_.empty(); | 922 return !device_list_listeners_.empty() || !port_forwarding_listeners_.empty(); |
923 } | 923 } |
924 | 924 |
925 void DevToolsAndroidBridge::RequestDeviceList( | 925 void DevToolsAndroidBridge::RequestDeviceList( |
926 const DeviceListCallback& callback) { | 926 const DeviceListCallback& callback) { |
927 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 927 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
928 | 928 |
929 if (!NeedsDeviceListPolling() || | 929 if (!NeedsDeviceListPolling() || |
930 !callback.Equals(device_list_callback_.callback())) | 930 !callback.Equals(device_list_callback_.callback())) |
931 return; | 931 return; |
932 | 932 |
933 new DiscoveryRequest(device_manager_.get(), callback); | 933 new DiscoveryRequest(device_manager_.get(), callback); |
934 } | 934 } |
935 | 935 |
936 void DevToolsAndroidBridge::ReceivedDeviceList( | 936 void DevToolsAndroidBridge::ReceivedDeviceList( |
937 const CompleteDevices& complete_devices) { | 937 const CompleteDevices& complete_devices) { |
938 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 938 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
939 | 939 |
940 device_map_.clear(); | 940 device_map_.clear(); |
941 RemoteDevices remote_devices; | 941 RemoteDevices remote_devices; |
942 for (const auto& pair : complete_devices) { | 942 for (const auto& pair : complete_devices) { |
943 device_map_[pair.first->serial()] = pair.first; | 943 device_map_[pair.first->serial()] = pair.first; |
944 remote_devices.push_back(pair.second); | 944 remote_devices.push_back(pair.second); |
945 } | 945 } |
946 | 946 |
947 DeviceListListeners copy(device_list_listeners_); | 947 DeviceListListeners copy(device_list_listeners_); |
948 for (DeviceListListeners::iterator it = copy.begin(); it != copy.end(); ++it) | 948 for (DeviceListListeners::iterator it = copy.begin(); it != copy.end(); ++it) |
(...skipping 20 matching lines...) Expand all Loading... |
969 base::Bind(&DevToolsAndroidBridge::ReceivedDeviceCount, AsWeakPtr())); | 969 base::Bind(&DevToolsAndroidBridge::ReceivedDeviceCount, AsWeakPtr())); |
970 RequestDeviceCount(device_count_callback_.callback()); | 970 RequestDeviceCount(device_count_callback_.callback()); |
971 } | 971 } |
972 | 972 |
973 void DevToolsAndroidBridge::StopDeviceCountPolling() { | 973 void DevToolsAndroidBridge::StopDeviceCountPolling() { |
974 device_count_callback_.Cancel(); | 974 device_count_callback_.Cancel(); |
975 } | 975 } |
976 | 976 |
977 void DevToolsAndroidBridge::RequestDeviceCount( | 977 void DevToolsAndroidBridge::RequestDeviceCount( |
978 const base::Callback<void(int)>& callback) { | 978 const base::Callback<void(int)>& callback) { |
979 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 979 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
980 | 980 |
981 if (device_count_listeners_.empty() || | 981 if (device_count_listeners_.empty() || |
982 !callback.Equals(device_count_callback_.callback())) | 982 !callback.Equals(device_count_callback_.callback())) |
983 return; | 983 return; |
984 | 984 |
985 UsbDeviceProvider::CountDevices(callback); | 985 UsbDeviceProvider::CountDevices(callback); |
986 } | 986 } |
987 | 987 |
988 void DevToolsAndroidBridge::ReceivedDeviceCount(int count) { | 988 void DevToolsAndroidBridge::ReceivedDeviceCount(int count) { |
989 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 989 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
990 | 990 |
991 DeviceCountListeners copy(device_count_listeners_); | 991 DeviceCountListeners copy(device_count_listeners_); |
992 for (DeviceCountListeners::iterator it = copy.begin(); it != copy.end(); ++it) | 992 for (DeviceCountListeners::iterator it = copy.begin(); it != copy.end(); ++it) |
993 (*it)->DeviceCountChanged(count); | 993 (*it)->DeviceCountChanged(count); |
994 | 994 |
995 if (device_count_listeners_.empty()) | 995 if (device_count_listeners_.empty()) |
996 return; | 996 return; |
997 | 997 |
998 task_scheduler_.Run( | 998 task_scheduler_.Run( |
999 base::Bind(&DevToolsAndroidBridge::RequestDeviceCount, | 999 base::Bind(&DevToolsAndroidBridge::RequestDeviceCount, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1034 device_providers.push_back( | 1034 device_providers.push_back( |
1035 new WebRTCDeviceProvider(profile_, signin_manager_, token_service_)); | 1035 new WebRTCDeviceProvider(profile_, signin_manager_, token_service_)); |
1036 } | 1036 } |
1037 | 1037 |
1038 device_manager_->SetDeviceProviders(device_providers); | 1038 device_manager_->SetDeviceProviders(device_providers); |
1039 if (NeedsDeviceListPolling()) { | 1039 if (NeedsDeviceListPolling()) { |
1040 StopDeviceListPolling(); | 1040 StopDeviceListPolling(); |
1041 StartDeviceListPolling(); | 1041 StartDeviceListPolling(); |
1042 } | 1042 } |
1043 } | 1043 } |
OLD | NEW |