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

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

Issue 762903004: Enabling WebRTCDeviceProvider under enable-devtools-experiments flag (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@new-web-client
Patch Set: 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
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 fa69ad8abf922d8649ffa3758d5e58d3c8b3aa76..032664f57dffd1b163011bd78b1e02a41df56feb 100644
--- a/chrome/browser/devtools/device/webrtc/webrtc_device_provider.cc
+++ b/chrome/browser/devtools/device/webrtc/webrtc_device_provider.cc
@@ -4,59 +4,95 @@
#include "chrome/browser/devtools/device/webrtc/webrtc_device_provider.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/signin/profile_identity_provider.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/url_constants.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
+#include "content/public/browser/notification_source.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui_data_source.h"
#include "content/public/browser/web_ui_message_handler.h"
+#include "google_apis/gaia/identity_provider.h"
dgozman 2014/12/08 12:22:43 nit: let's remove this.
SeRya 2014/12/08 13:02:25 Done.
#include "grit/webrtc_device_provider_resources_map.h"
+#include "net/base/net_errors.h"
+#include "net/socket/stream_socket.h"
#include "ui/base/page_transition_types.h"
+using content::BrowserThread;
+using content::NotificationDetails;
+using content::NotificationObserver;
+using content::NotificationRegistrar;
+using content::NotificationSource;
+using content::Source;
dgozman 2014/12/08 12:22:43 Let's drop this one.
SeRya 2014/12/08 13:02:25 Done.
+using content::WebContents;
+using content::WebUIDataSource;
+using content::WebUIMessageHandler;
+
+namespace {
+
const char kBackgroundWorkerURL[] =
"chrome://webrtc-device-provider/background_worker.html";
-namespace {
+} // namespace
-class MessageHandler : public content::WebUIMessageHandler {
+// Lives on the UI thread.
+class WebRTCDeviceProvider::DevToolsBridgeClient :
+ private NotificationObserver,
+ private IdentityProvider::Observer {
public:
- explicit MessageHandler(WebRTCDeviceProvider* owner);
+ static base::WeakPtr<DevToolsBridgeClient> Create(
+ Profile* profile,
+ SigninManagerBase* signin_manager,
+ ProfileOAuth2TokenService* token_service);
- void RegisterMessages() override;
+ void DeleteSelf();
private:
- void HandleLoaded(const base::ListValue* args);
+ DevToolsBridgeClient(Profile* profile,
+ SigninManagerBase* signin_manager,
+ ProfileOAuth2TokenService* token_service);
- WebRTCDeviceProvider* const owner_;
-};
+ ~DevToolsBridgeClient();
-// MessageHandler -------------------------------------------------------------
+ void CreateBackgroundWorker();
-MessageHandler::MessageHandler(
- WebRTCDeviceProvider* owner) : owner_(owner) {
-}
+ // Implementation of IdentityProvider::Observer.
+ void OnActiveAccountLogin() override;
+ void OnActiveAccountLogout() override;
-void MessageHandler::RegisterMessages() {
- web_ui()->RegisterMessageCallback(
- "loaded",
- base::Bind(&MessageHandler::HandleLoaded, base::Unretained(this)));
-}
+ // Implementation of NotificationObserver.
+ void Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) override;
-void MessageHandler::HandleLoaded(
- const base::ListValue* args) {
- if (!owner_)
- return;
- // TODO(serya): implement
-}
+ Profile* const profile_;
+ ProfileIdentityProvider identity_provider_;
+ NotificationRegistrar registrar_;
+ scoped_ptr<WebContents> background_worker_;
+ base::WeakPtrFactory<DevToolsBridgeClient> weak_factory_;
+};
-} // namespace
+class WebRTCDeviceProvider::MessageHandler : public WebUIMessageHandler {
+ public:
+ explicit MessageHandler(DevToolsBridgeClient* owner);
-// WebRTCDeviceProvider::WebUI ------------------------------------------------
+ void RegisterMessages() override;
+
+ private:
+ void HandleLoaded(const base::ListValue* args);
+
+ DevToolsBridgeClient* const owner_;
+};
+
+// WebRTCDeviceProvider::WebUI -------------------------------------------------
WebRTCDeviceProvider::WebUI::WebUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) {
Profile* profile = Profile::FromWebUI(web_ui);
- content::WebUIDataSource* source = content::WebUIDataSource::Create(
+ WebUIDataSource* source = WebUIDataSource::Create(
chrome::kChromeUIWebRTCDeviceProviderHost);
for (size_t i = 0; i < kWebrtcDeviceProviderResourcesSize; i++) {
@@ -69,21 +105,61 @@ WebRTCDeviceProvider::WebUI::WebUI(content::WebUI* web_ui)
// a real implementation.
web_ui->AddMessageHandler(new MessageHandler(nullptr));
- content::WebUIDataSource::Add(profile, source);
+ WebUIDataSource::Add(profile, source);
}
WebRTCDeviceProvider::WebUI::~WebUI() {
}
-// WebRTCDeviceProvider -------------------------------------------------------
+// WebRTCDeviceProvider::DevToolsBridgeClient ----------------------------------
+
+// static
+base::WeakPtr<WebRTCDeviceProvider::DevToolsBridgeClient>
+WebRTCDeviceProvider::DevToolsBridgeClient::Create(
+ Profile* profile,
+ SigninManagerBase* signin_manager,
+ ProfileOAuth2TokenService* token_service) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ auto instance = new DevToolsBridgeClient(
+ profile, signin_manager, token_service);
+ return instance->weak_factory_.GetWeakPtr();
+}
-WebRTCDeviceProvider::WebRTCDeviceProvider(content::BrowserContext* context) {
- background_worker_.reset(content::WebContents::Create(
- content::WebContents::CreateParams(context)));
+WebRTCDeviceProvider::DevToolsBridgeClient::DevToolsBridgeClient(
+ Profile* profile,
+ SigninManagerBase* signin_manager,
+ ProfileOAuth2TokenService* token_service)
+ : profile_(profile),
+ identity_provider_(signin_manager, token_service, NULL),
dgozman 2014/12/08 12:22:43 nit: nullptr
SeRya 2014/12/08 13:02:25 Done.
+ weak_factory_(this) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ identity_provider_.AddObserver(this);
+ registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED,
+ Source<Profile>(profile_));
+
+ if (!identity_provider_.GetActiveAccountId().empty())
+ CreateBackgroundWorker();
+}
- // TODO(serya): Make sure background_worker_ destructed before profile.
- GURL url(kBackgroundWorkerURL);
+WebRTCDeviceProvider::DevToolsBridgeClient::~DevToolsBridgeClient() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ identity_provider_.RemoveObserver(this);
+}
+
+void WebRTCDeviceProvider::DevToolsBridgeClient::DeleteSelf() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ delete this;
+}
+
+void WebRTCDeviceProvider::DevToolsBridgeClient::CreateBackgroundWorker() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ background_worker_.reset(
+ WebContents::Create(WebContents::CreateParams(profile_)));
+
+ GURL url(kBackgroundWorkerURL);
DCHECK_EQ(chrome::kChromeUIWebRTCDeviceProviderHost, url.host());
background_worker_->GetController().LoadURL(
@@ -96,20 +172,80 @@ WebRTCDeviceProvider::WebRTCDeviceProvider(content::BrowserContext* context) {
new MessageHandler(this));
}
+void WebRTCDeviceProvider::DevToolsBridgeClient::Observe(
+ int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK_EQ(chrome::NOTIFICATION_PROFILE_DESTROYED, type);
+
+ delete this;
+}
+
+void WebRTCDeviceProvider::DevToolsBridgeClient::OnActiveAccountLogin() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ CreateBackgroundWorker();
+}
+
+void WebRTCDeviceProvider::DevToolsBridgeClient::OnActiveAccountLogout() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ background_worker_.reset();
+}
+
+// WebRTCDeviceProvider::MessageHandler ----------------------------------------
+
+WebRTCDeviceProvider::MessageHandler::MessageHandler(
+ DevToolsBridgeClient* owner) : owner_(owner) {
+}
+
+void WebRTCDeviceProvider::MessageHandler::RegisterMessages() {
+ web_ui()->RegisterMessageCallback(
+ "loaded",
+ base::Bind(&MessageHandler::HandleLoaded, base::Unretained(this)));
+}
+
+void WebRTCDeviceProvider::MessageHandler::HandleLoaded(
+ const base::ListValue* args) {
+ if (!owner_)
+ return;
+ // TODO(serya): implement
+}
+
+// WebRTCDeviceProvider --------------------------------------------------------
+
+WebRTCDeviceProvider::WebRTCDeviceProvider(
+ Profile* profile,
+ SigninManagerBase* signin_manager,
+ ProfileOAuth2TokenService* token_service)
+ : client_(DevToolsBridgeClient::Create(
+ profile, signin_manager, token_service)) {
+}
+
WebRTCDeviceProvider::~WebRTCDeviceProvider() {
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&DevToolsBridgeClient::DeleteSelf, client_));
}
void WebRTCDeviceProvider::QueryDevices(const SerialsCallback& callback) {
// TODO(serya): Implement
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, std::vector<std::string>()));
}
void WebRTCDeviceProvider::QueryDeviceInfo(const std::string& serial,
const DeviceInfoCallback& callback) {
// TODO(serya): Implement
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, AndroidDeviceManager::DeviceInfo()));
}
void WebRTCDeviceProvider::OpenSocket(const std::string& serial,
const std::string& socket_name,
const SocketCallback& callback) {
// TODO(serya): Implement
+ scoped_ptr<net::StreamSocket> socket;
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, net::ERR_FAILED, base::Passed(&socket)));
}

Powered by Google App Engine
This is Rietveld 408576698