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

Unified Diff: chrome/browser/devtools/device/webrtc/webrtc_device_provider.cc

Issue 784523002: Populating browser list in WebRTCDeviceProvider. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@new-web-client-2
Patch Set: Fixed compilation on win. Created 6 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/devtools/device/webrtc/webrtc_device_provider.cc
diff --git a/chrome/browser/devtools/device/webrtc/webrtc_device_provider.cc b/chrome/browser/devtools/device/webrtc/webrtc_device_provider.cc
index c6f6935cf52cc0adcfc99a58d4d4951f4ed5136c..c6704e88e3f918ff1be5eb93e6e92714c33045f9 100644
--- a/chrome/browser/devtools/device/webrtc/webrtc_device_provider.cc
+++ b/chrome/browser/devtools/device/webrtc/webrtc_device_provider.cc
@@ -5,6 +5,9 @@
#include "chrome/browser/devtools/device/webrtc/webrtc_device_provider.h"
#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/local_discovery/cloud_device_list.h"
+#include "chrome/browser/local_discovery/cloud_device_list_delegate.h"
+#include "chrome/browser/local_discovery/gcd_api_flow.h"
#include "chrome/browser/signin/profile_identity_provider.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/url_constants.h"
@@ -19,6 +22,10 @@
#include "net/socket/stream_socket.h"
#include "ui/base/page_transition_types.h"
+using BrowserInfo = AndroidDeviceManager::BrowserInfo;
+using BrowserInfoList = std::vector<BrowserInfo>;
+using DeviceInfo = AndroidDeviceManager::DeviceInfo;
+using SerialList = std::vector<std::string>;
using content::BrowserThread;
using content::NotificationDetails;
using content::NotificationObserver;
@@ -27,18 +34,24 @@ using content::NotificationSource;
using content::WebContents;
using content::WebUIDataSource;
using content::WebUIMessageHandler;
+using local_discovery::CloudDeviceList;
+using local_discovery::CloudDeviceListDelegate;
+using local_discovery::GCDApiFlow;
namespace {
const char kBackgroundWorkerURL[] =
"chrome://webrtc-device-provider/background_worker.html";
+const char kSerial[] = "clouddevices";
+const char kPseudoDeviceName[] = "Remote browsers";
} // namespace
// Lives on the UI thread.
class WebRTCDeviceProvider::DevToolsBridgeClient :
private NotificationObserver,
- private IdentityProvider::Observer {
+ private IdentityProvider::Observer,
+ private CloudDeviceListDelegate {
public:
static base::WeakPtr<DevToolsBridgeClient> Create(
Profile* profile,
@@ -47,6 +60,10 @@ class WebRTCDeviceProvider::DevToolsBridgeClient :
void DeleteSelf();
+ static SerialList GetDevices(base::WeakPtr<DevToolsBridgeClient> weak_ptr);
+ static DeviceInfo GetDeviceInfo(base::WeakPtr<DevToolsBridgeClient> weak_ptr,
+ const std::string& serial);
+
private:
DevToolsBridgeClient(Profile* profile,
SigninManagerBase* signin_manager,
@@ -55,6 +72,7 @@ class WebRTCDeviceProvider::DevToolsBridgeClient :
~DevToolsBridgeClient();
void CreateBackgroundWorker();
+ void UpdateBrowserList();
// Implementation of IdentityProvider::Observer.
void OnActiveAccountLogin() override;
@@ -65,10 +83,18 @@ class WebRTCDeviceProvider::DevToolsBridgeClient :
const NotificationSource& source,
const NotificationDetails& details) override;
+ // CloudDeviceListDelegate implementation.
+ void OnDeviceListReady(
+ const CloudDeviceListDelegate::DeviceList& devices) override;
+ void OnDeviceListUnavailable() override;
+
Profile* const profile_;
ProfileIdentityProvider identity_provider_;
NotificationRegistrar registrar_;
scoped_ptr<WebContents> background_worker_;
+ scoped_ptr<GCDApiFlow> browser_list_request_;
+ BrowserInfoList browsers_;
+ bool browser_list_updating_;
base::WeakPtrFactory<DevToolsBridgeClient> weak_factory_;
};
@@ -129,6 +155,7 @@ WebRTCDeviceProvider::DevToolsBridgeClient::DevToolsBridgeClient(
ProfileOAuth2TokenService* token_service)
: profile_(profile),
identity_provider_(signin_manager, token_service, nullptr),
+ browser_list_updating_(false),
weak_factory_(this) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -151,6 +178,40 @@ void WebRTCDeviceProvider::DevToolsBridgeClient::DeleteSelf() {
delete this;
}
+void WebRTCDeviceProvider::DevToolsBridgeClient::UpdateBrowserList() {
+ if (browser_list_updating_ || !browser_list_request_.get())
+ return;
+ browser_list_updating_ = true;
+
+ browser_list_request_->Start(make_scoped_ptr(new CloudDeviceList(this)));
+}
+
+// static
+SerialList WebRTCDeviceProvider::DevToolsBridgeClient::GetDevices(
+ base::WeakPtr<DevToolsBridgeClient> weak_ptr) {
+ SerialList result;
+ if (auto* ptr = weak_ptr.get()) {
+ if (ptr->background_worker_.get())
+ result.push_back(kSerial);
+
+ ptr->UpdateBrowserList();
+ }
+ return result;
+}
+
+// static
+DeviceInfo WebRTCDeviceProvider::DevToolsBridgeClient::GetDeviceInfo(
+ base::WeakPtr<DevToolsBridgeClient> weak_self,
+ const std::string& serial) {
+ DeviceInfo result;
+ if (auto* self = weak_self.get()) {
+ result.connected = !!self->background_worker_.get();
+ result.model = kPseudoDeviceName;
+ result.browser_info = self->browsers_;
+ }
+ return result;
+}
+
void WebRTCDeviceProvider::DevToolsBridgeClient::CreateBackgroundWorker() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -168,6 +229,11 @@ void WebRTCDeviceProvider::DevToolsBridgeClient::CreateBackgroundWorker() {
background_worker_->GetWebUI()->AddMessageHandler(
new MessageHandler(this));
+
+ browser_list_request_ =
+ GCDApiFlow::Create(profile_->GetRequestContext(),
+ identity_provider_.GetTokenService(),
+ identity_provider_.GetActiveAccountId());
}
void WebRTCDeviceProvider::DevToolsBridgeClient::Observe(
@@ -188,6 +254,31 @@ void WebRTCDeviceProvider::DevToolsBridgeClient::OnActiveAccountLogin() {
void WebRTCDeviceProvider::DevToolsBridgeClient::OnActiveAccountLogout() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
background_worker_.reset();
+ browser_list_request_.reset();
+ BrowserInfoList().swap(browsers_);
+}
+
+void WebRTCDeviceProvider::DevToolsBridgeClient::OnDeviceListReady(
+ const CloudDeviceListDelegate::DeviceList& devices) {
+ browser_list_updating_ = false;
+
+ // TODO(serya): Not all devices are browsers. Filter them out.
+ BrowserInfoList browsers;
+ browsers.reserve(devices.size());
+ for (const auto& device : devices) {
+ BrowserInfo browser;
+ browser.type = BrowserInfo::kTypeChrome;
+ browser.display_name = device.display_name;
+ browsers.push_back(browser);
+ }
+
+ browsers_.swap(browsers);
+}
+
+void WebRTCDeviceProvider::DevToolsBridgeClient::OnDeviceListUnavailable() {
+ browser_list_updating_ = false;
+
+ BrowserInfoList().swap(browsers_);
}
// WebRTCDeviceProvider::MessageHandler ----------------------------------------
@@ -227,16 +318,20 @@ WebRTCDeviceProvider::~WebRTCDeviceProvider() {
}
void WebRTCDeviceProvider::QueryDevices(const SerialsCallback& callback) {
- // TODO(serya): Implement
- base::MessageLoop::current()->PostTask(
- FROM_HERE, base::Bind(callback, std::vector<std::string>()));
+ BrowserThread::PostTaskAndReplyWithResult(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&DevToolsBridgeClient::GetDevices, client_),
+ callback);
}
void WebRTCDeviceProvider::QueryDeviceInfo(const std::string& serial,
- const DeviceInfoCallback& callback) {
- // TODO(serya): Implement
- base::MessageLoop::current()->PostTask(
- FROM_HERE, base::Bind(callback, AndroidDeviceManager::DeviceInfo()));
+ const DeviceInfoCallback& callback) {
+ BrowserThread::PostTaskAndReplyWithResult(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&DevToolsBridgeClient::GetDeviceInfo, client_, serial),
+ callback);
}
void WebRTCDeviceProvider::OpenSocket(const std::string& serial,
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698