summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/common.gypi3
-rw-r--r--build/config/features.gni2
-rw-r--r--chrome/browser/media/android/router/OWNERS3
-rw-r--r--chrome/browser/media/android/router/media_router_android.cc74
-rw-r--r--chrome/browser/media/android/router/media_router_android.h61
-rw-r--r--chrome/browser/media/android/router/media_router_dialog_controller_android.cc44
-rw-r--r--chrome/browser/media/android/router/media_router_dialog_controller_android.h44
-rw-r--r--chrome/browser/media/router/BUILD.gn13
-rw-r--r--chrome/browser/media/router/media_router.gyp21
-rw-r--r--chrome/browser/media/router/media_router.gypi17
-rw-r--r--chrome/browser/media/router/media_router.h5
-rw-r--r--chrome/browser/media/router/media_router_dialog_controller.cc27
-rw-r--r--chrome/browser/media/router/media_router_dialog_controller.h43
-rw-r--r--chrome/browser/media/router/media_router_factory.cc (renamed from chrome/browser/media/router/media_router_mojo_impl_factory.cc)37
-rw-r--r--chrome/browser/media/router/media_router_factory.h (renamed from chrome/browser/media/router/media_router_mojo_impl_factory.h)23
-rw-r--r--chrome/browser/media/router/media_router_mojo_impl.cc6
-rw-r--r--chrome/browser/media/router/media_router_mojo_impl.h6
-rw-r--r--chrome/browser/media/router/presentation_service_delegate_impl.cc10
-rw-r--r--chrome/browser/ui/BUILD.gn2
-rw-r--r--chrome/browser/ui/toolbar/media_router_action.cc9
-rw-r--r--chrome/browser/ui/toolbar/media_router_action.h5
-rw-r--r--chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc4
-rw-r--r--chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.cc (renamed from chrome/browser/ui/webui/media_router/media_router_dialog_controller.cc)49
-rw-r--r--chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.h (renamed from chrome/browser/ui/webui/media_router/media_router_dialog_controller.h)45
-rw-r--r--chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl_browsertest.cc (renamed from chrome/browser/ui/webui/media_router/media_router_dialog_controller_browsertest.cc)8
-rw-r--r--chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl_unittest.cc (renamed from chrome/browser/ui/webui/media_router/media_router_dialog_controller_unittest.cc)41
-rw-r--r--chrome/browser/ui/webui/media_router/media_router_ui.cc6
-rw-r--r--chrome/chrome_browser.gypi4
-rw-r--r--chrome/chrome_browser_ui.gypi6
-rw-r--r--chrome/chrome_tests.gypi2
-rw-r--r--chrome/chrome_tests_unit.gypi13
-rw-r--r--chrome/test/BUILD.gn6
-rw-r--r--chrome/test/media_router/media_router_e2e_browsertest.cc4
-rw-r--r--chrome/test/media_router/media_router_integration_browsertest.cc6
34 files changed, 493 insertions, 156 deletions
diff --git a/build/common.gypi b/build/common.gypi
index 50346d1..e96377e 100644
--- a/build/common.gypi
+++ b/build/common.gypi
@@ -876,6 +876,7 @@
'enable_supervised_users%': 0,
'enable_task_manager%': 0,
'use_system_libcxx%': 1,
+ 'enable_media_router%': 0,
}],
# Use GPU accelerated cross process image transport by default
@@ -947,10 +948,8 @@
['OS=="android" or OS=="ios"', {
'enable_captive_portal_detection%': 0,
- 'enable_media_router%': 0,
}, {
'enable_captive_portal_detection%': 1,
- 'enable_media_router%': 1,
}],
# Enable Skia UI text drawing incrementally on different platforms.
diff --git a/build/config/features.gni b/build/config/features.gni
index a62622e..849b32c 100644
--- a/build/config/features.gni
+++ b/build/config/features.gni
@@ -51,7 +51,7 @@ declare_args() {
enable_webrtc = !is_ios && !is_mac && !is_android
# Enables the Media Router.
- enable_media_router = !is_ios && !is_android
+ enable_media_router = !is_ios
# Enables proprietary codecs and demuxers; e.g. H264, MOV, AAC, and MP3.
# Android OS includes support for proprietary codecs regardless of building
diff --git a/chrome/browser/media/android/router/OWNERS b/chrome/browser/media/android/router/OWNERS
new file mode 100644
index 0000000..9dcb9a6
--- /dev/null
+++ b/chrome/browser/media/android/router/OWNERS
@@ -0,0 +1,3 @@
+avayvod@chromium.org
+mfoltz@chromium.org
+mlamouri@chromium.org \ No newline at end of file
diff --git a/chrome/browser/media/android/router/media_router_android.cc b/chrome/browser/media/android/router/media_router_android.cc
new file mode 100644
index 0000000..c1a6dbd
--- /dev/null
+++ b/chrome/browser/media/android/router/media_router_android.cc
@@ -0,0 +1,74 @@
+// Copyright 2015 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.
+
+#include "chrome/browser/media/android/router/media_router_android.h"
+
+#include "base/logging.h"
+
+namespace media_router {
+
+MediaRouterAndroid::MediaRouterAndroid(content::BrowserContext*) {
+}
+
+MediaRouterAndroid::~MediaRouterAndroid() {
+}
+
+void MediaRouterAndroid::CreateRoute(
+ const MediaSource::Id& source_id,
+ const MediaSink::Id& sink_id,
+ const GURL& origin,
+ int tab_id,
+ const std::vector<MediaRouteResponseCallback>& callbacks) {
+ NOTIMPLEMENTED();
+}
+void MediaRouterAndroid::JoinRoute(
+ const MediaSource::Id& source,
+ const std::string& presentation_id,
+ const GURL& origin,
+ int tab_id,
+ const std::vector<MediaRouteResponseCallback>& callbacks) {
+ NOTIMPLEMENTED();
+}
+void MediaRouterAndroid::CloseRoute(const MediaRoute::Id& route_id) {
+ NOTIMPLEMENTED();
+}
+void MediaRouterAndroid::SendRouteMessage(
+ const MediaRoute::Id& route_id,
+ const std::string& message,
+ const SendRouteMessageCallback& callback) {
+ NOTIMPLEMENTED();
+}
+void MediaRouterAndroid::ListenForRouteMessages(
+ const std::vector<MediaRoute::Id>& route_ids,
+ const PresentationSessionMessageCallback& message_cb) {
+ NOTIMPLEMENTED();
+}
+void MediaRouterAndroid::ClearIssue(const Issue::Id& issue_id) {
+ NOTIMPLEMENTED();
+}
+
+void MediaRouterAndroid::RegisterMediaSinksObserver(
+ MediaSinksObserver* observer) {
+ NOTIMPLEMENTED();
+}
+void MediaRouterAndroid::UnregisterMediaSinksObserver(
+ MediaSinksObserver* observer) {
+ NOTIMPLEMENTED();
+}
+void MediaRouterAndroid::RegisterMediaRoutesObserver(
+ MediaRoutesObserver* observer) {
+ NOTIMPLEMENTED();
+}
+void MediaRouterAndroid::UnregisterMediaRoutesObserver(
+ MediaRoutesObserver* observer) {
+ NOTIMPLEMENTED();
+}
+void MediaRouterAndroid::RegisterIssuesObserver(IssuesObserver* observer) {
+ NOTIMPLEMENTED();
+}
+void MediaRouterAndroid::UnregisterIssuesObserver(IssuesObserver* observer) {
+ NOTIMPLEMENTED();
+}
+
+} // namespace media_router
diff --git a/chrome/browser/media/android/router/media_router_android.h b/chrome/browser/media/android/router/media_router_android.h
new file mode 100644
index 0000000..0697e99
--- /dev/null
+++ b/chrome/browser/media/android/router/media_router_android.h
@@ -0,0 +1,61 @@
+// Copyright 2015 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_MEDIA_ANDROID_ROUTER_MEDIA_ROUTER_ANDROID_H_
+#define CHROME_BROWSER_MEDIA_ANDROID_ROUTER_MEDIA_ROUTER_ANDROID_H_
+
+#include "chrome/browser/media/router/media_router.h"
+
+namespace content {
+class BrowserContext;
+}
+
+namespace media_router {
+
+// A stub implementation of MediaRouter interface on Android.
+class MediaRouterAndroid : public MediaRouter {
+ public:
+ ~MediaRouterAndroid() override;
+
+ // MediaRouter implementation.
+ void CreateRoute(
+ const MediaSource::Id& source_id,
+ const MediaSink::Id& sink_id,
+ const GURL& origin,
+ int tab_id,
+ const std::vector<MediaRouteResponseCallback>& callbacks) override;
+ void JoinRoute(
+ const MediaSource::Id& source,
+ const std::string& presentation_id,
+ const GURL& origin,
+ int tab_id,
+ const std::vector<MediaRouteResponseCallback>& callbacks) override;
+ void CloseRoute(const MediaRoute::Id& route_id) override;
+ void SendRouteMessage(const MediaRoute::Id& route_id,
+ const std::string& message,
+ const SendRouteMessageCallback& callback) override;
+ void ListenForRouteMessages(
+ const std::vector<MediaRoute::Id>& route_ids,
+ const PresentationSessionMessageCallback& message_cb) override;
+ void ClearIssue(const Issue::Id& issue_id) override;
+
+ private:
+ friend class MediaRouterFactory;
+
+ explicit MediaRouterAndroid(content::BrowserContext*);
+
+ // MediaRouter implementation.
+ void RegisterMediaSinksObserver(MediaSinksObserver* observer) override;
+ void UnregisterMediaSinksObserver(MediaSinksObserver* observer) override;
+ void RegisterMediaRoutesObserver(MediaRoutesObserver* observer) override;
+ void UnregisterMediaRoutesObserver(MediaRoutesObserver* observer) override;
+ void RegisterIssuesObserver(IssuesObserver* observer) override;
+ void UnregisterIssuesObserver(IssuesObserver* observer) override;
+
+ DISALLOW_COPY_AND_ASSIGN(MediaRouterAndroid);
+};
+
+} // namespace media_router
+
+#endif // CHROME_BROWSER_MEDIA_ANDROID_ROUTER_MEDIA_ROUTER_ANDROID_H_
diff --git a/chrome/browser/media/android/router/media_router_dialog_controller_android.cc b/chrome/browser/media/android/router/media_router_dialog_controller_android.cc
new file mode 100644
index 0000000..74943e4
--- /dev/null
+++ b/chrome/browser/media/android/router/media_router_dialog_controller_android.cc
@@ -0,0 +1,44 @@
+// Copyright 2015 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.
+
+#include "chrome/browser/media/android/router/media_router_dialog_controller_android.h"
+
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_delegate.h"
+
+DEFINE_WEB_CONTENTS_USER_DATA_KEY(
+ media_router::MediaRouterDialogControllerAndroid);
+
+using content::WebContents;
+
+namespace media_router {
+
+// static
+MediaRouterDialogControllerAndroid*
+MediaRouterDialogControllerAndroid::GetOrCreateForWebContents(
+ WebContents* web_contents) {
+ DCHECK(web_contents);
+ // This call does nothing if the controller already exists.
+ MediaRouterDialogControllerAndroid::CreateForWebContents(web_contents);
+ return MediaRouterDialogControllerAndroid::FromWebContents(web_contents);
+}
+
+MediaRouterDialogControllerAndroid::MediaRouterDialogControllerAndroid(
+ WebContents* web_contents) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+}
+
+MediaRouterDialogControllerAndroid::~MediaRouterDialogControllerAndroid() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+}
+
+bool MediaRouterDialogControllerAndroid::ShowMediaRouterDialogForPresentation(
+ scoped_ptr<CreatePresentationSessionRequest> request) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ return false;
+}
+
+} // namespace media_router
+
diff --git a/chrome/browser/media/android/router/media_router_dialog_controller_android.h b/chrome/browser/media/android/router/media_router_dialog_controller_android.h
new file mode 100644
index 0000000..f02dc33
--- /dev/null
+++ b/chrome/browser/media/android/router/media_router_dialog_controller_android.h
@@ -0,0 +1,44 @@
+// Copyright 2015 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_MEDIA_ANDROID_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_ANDROID_H_
+#define CHROME_BROWSER_MEDIA_ANDROID_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_ANDROID_H_
+
+#include "base/macros.h"
+#include "chrome/browser/media/router/media_router_dialog_controller.h"
+#include "content/public/browser/web_contents_observer.h"
+#include "content/public/browser/web_contents_user_data.h"
+
+namespace media_router {
+
+// Android implementation of the MediaRouterDialogController.
+class MediaRouterDialogControllerAndroid
+ : public content::WebContentsUserData<MediaRouterDialogControllerAndroid>,
+ public MediaRouterDialogController {
+ public:
+ ~MediaRouterDialogControllerAndroid() override;
+
+ static MediaRouterDialogControllerAndroid* GetOrCreateForWebContents(
+ content::WebContents* web_contents);
+
+ // MediaRouterDialogController implementation.
+ bool ShowMediaRouterDialogForPresentation(
+ scoped_ptr<CreatePresentationSessionRequest> request) override;
+
+ private:
+ friend class content::WebContentsUserData<MediaRouterDialogControllerAndroid>;
+
+ // Use MediaRouterDialogControllerAndroid::CreateForWebContents() to create an
+ // instance.
+ explicit MediaRouterDialogControllerAndroid(
+ content::WebContents* web_contents);
+
+ base::ThreadChecker thread_checker_;
+
+ DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogControllerAndroid);
+};
+
+} // namespace media_router
+
+#endif // CHROME_BROWSER_MEDIA_ANDROID_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_ANDROID_H_
diff --git a/chrome/browser/media/router/BUILD.gn b/chrome/browser/media/router/BUILD.gn
index 31cf3ed..fe9a524 100644
--- a/chrome/browser/media/router/BUILD.gn
+++ b/chrome/browser/media/router/BUILD.gn
@@ -13,19 +13,26 @@ gypi_values = exec_script("//build/gypi_to_gn.py",
# TODO(mfoltz): Fix problem that requires explicitly listing //skia
static_library("router") {
deps = [
- ":mojo_bindings",
"//base",
"//chrome/common:constants",
"//components/keyed_service/content",
"//components/keyed_service/core",
- "//extensions/browser",
"//skia",
- "//third_party/mojo/src/mojo/public/cpp/bindings",
"//url",
]
sources = rebase_path(gypi_values.media_router_sources,
".",
"//chrome/browser/media/router")
+ if (!is_android) {
+ deps += [
+ ":mojo_bindings",
+ "//extensions/browser",
+ "//third_party/mojo/src/mojo/public/cpp/bindings",
+ ]
+ sources += rebase_path(gypi_values.media_router_non_android_sources,
+ ".",
+ "//chrome/browser/media/router")
+ }
}
mojom("mojo_bindings") {
diff --git a/chrome/browser/media/router/media_router.gyp b/chrome/browser/media/router/media_router.gyp
index 507427e..186c749 100644
--- a/chrome/browser/media/router/media_router.gyp
+++ b/chrome/browser/media/router/media_router.gyp
@@ -13,23 +13,34 @@
'type': 'static_library',
'include_dirs': [
'<(DEPTH)',
- '<(DEPTH)/third_party/mojo/src',
],
'dependencies': [
- # media_router_type_converters.h needs the generated file.
- 'media_router_mojo_gen',
- 'media_router_mojo',
'<(DEPTH)/base/base.gyp:base',
'<(DEPTH)/chrome/common_constants.gyp:common_constants',
'<(DEPTH)/components/components.gyp:keyed_service_content',
'<(DEPTH)/components/components.gyp:keyed_service_core',
- '<(DEPTH)/extensions/extensions.gyp:extensions_browser',
'<(DEPTH)/skia/skia.gyp:skia',
'<(DEPTH)/url/url.gyp:url_lib',
],
'sources': [
'<@(media_router_sources)',
],
+ 'conditions': [
+ [ 'OS!="android" and OS!="ios"', {
+ 'include_dirs': [
+ '<(DEPTH)/third_party/mojo/src',
+ ],
+ 'dependencies': [
+ # media_router_type_converters.h needs the generated file.
+ 'media_router_mojo_gen',
+ 'media_router_mojo',
+ '<(DEPTH)/extensions/extensions.gyp:extensions_browser',
+ ],
+ 'sources': [
+ '<@(media_router_non_android_sources)',
+ ]
+ }],
+ ]
},
{
# Mojo compiler for the Media Router internal API.
diff --git a/chrome/browser/media/router/media_router.gypi b/chrome/browser/media/router/media_router.gypi
index aa117c1..a991d66 100644
--- a/chrome/browser/media/router/media_router.gypi
+++ b/chrome/browser/media/router/media_router.gypi
@@ -17,12 +17,10 @@
'media_route.cc',
'media_route.h',
'media_router.h',
- 'media_router_mojo_impl.cc',
- 'media_router_mojo_impl.h',
- 'media_router_mojo_impl_factory.cc',
- 'media_router_mojo_impl_factory.h',
- 'media_router_type_converters.cc',
- 'media_router_type_converters.h',
+ 'media_router_dialog_controller.cc',
+ 'media_router_dialog_controller.h',
+ 'media_router_factory.cc',
+ 'media_router_factory.h',
'media_routes_observer.cc',
'media_routes_observer.h',
'media_sink.cc',
@@ -40,6 +38,13 @@
'presentation_session_state_observer.cc',
'presentation_session_state_observer.h',
],
+ # Files that are only needed on desktop builds
+ 'media_router_non_android_sources': [
+ 'media_router_mojo_impl.cc',
+ 'media_router_mojo_impl.h',
+ 'media_router_type_converters.cc',
+ 'media_router_type_converters.h',
+ ],
'media_router_test_support_sources': [
'media_router_mojo_test.cc',
'media_router_mojo_test.h',
diff --git a/chrome/browser/media/router/media_router.h b/chrome/browser/media/router/media_router.h
index a649222..7912cd5 100644
--- a/chrome/browser/media/router/media_router.h
+++ b/chrome/browser/media/router/media_router.h
@@ -13,6 +13,7 @@
#include "chrome/browser/media/router/media_route.h"
#include "chrome/browser/media/router/media_sink.h"
#include "chrome/browser/media/router/media_source.h"
+#include "components/keyed_service/core/keyed_service.h"
#include "content/public/browser/presentation_session_message.h"
namespace media_router {
@@ -37,13 +38,13 @@ const int kInvalidTabId = -1;
// Responsible for registering observers for receiving sink availability
// updates, handling route requests/responses, and operating on routes (e.g.
// posting messages or closing).
-class MediaRouter {
+class MediaRouter : public KeyedService {
public:
using PresentationSessionMessageCallback = base::Callback<void(
scoped_ptr<ScopedVector<content::PresentationSessionMessage>>)>;
using SendRouteMessageCallback = base::Callback<void(bool sent)>;
- virtual ~MediaRouter() {}
+ ~MediaRouter() override = default;
// Creates a media route from |source_id| to |sink_id|.
// |origin| is the URL of requestor's page.
diff --git a/chrome/browser/media/router/media_router_dialog_controller.cc b/chrome/browser/media/router/media_router_dialog_controller.cc
new file mode 100644
index 0000000..d9f80cc
--- /dev/null
+++ b/chrome/browser/media/router/media_router_dialog_controller.cc
@@ -0,0 +1,27 @@
+// Copyright 2015 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.
+
+#include "chrome/browser/media/router/media_router_dialog_controller.h"
+
+#if defined(OS_ANDROID)
+#include "chrome/browser/media/android/router/media_router_dialog_controller_android.h"
+#else
+#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.h"
+#endif
+
+namespace media_router {
+
+// static
+MediaRouterDialogController*
+MediaRouterDialogController::GetOrCreateForWebContents(
+ content::WebContents* contents) {
+#if defined(OS_ANDROID)
+ return MediaRouterDialogControllerAndroid::GetOrCreateForWebContents(
+ contents);
+#else
+ return MediaRouterDialogControllerImpl::GetOrCreateForWebContents(contents);
+#endif
+}
+
+} // namespace media_router
diff --git a/chrome/browser/media/router/media_router_dialog_controller.h b/chrome/browser/media/router/media_router_dialog_controller.h
new file mode 100644
index 0000000..a627b44
--- /dev/null
+++ b/chrome/browser/media/router/media_router_dialog_controller.h
@@ -0,0 +1,43 @@
+// Copyright 2015 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_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_H_
+#define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_H_
+
+#include "base/macros.h"
+#include "chrome/browser/media/router/create_presentation_session_request.h"
+
+namespace content {
+class WebContents;
+} // namespace content
+
+namespace media_router {
+
+// An implementation of this interface is tied to a WebContents known as the
+// initiator, and is lazily created when a Media Router dialog needs to be
+// shown. The MediaRouterDialogController allows creating, querying, and
+// removing a Media Router dialog modal to the initiator WebContents.
+// This class is not thread safe and must be called on the UI thread.
+class MediaRouterDialogController {
+ public:
+ virtual ~MediaRouterDialogController() = default;
+
+ // Gets a reference to the MediaRouterDialogController associated with
+ // |web_contents|, creating one if it does not exist. The returned pointer is
+ // guaranteed to be non-null.
+ static MediaRouterDialogController* GetOrCreateForWebContents(
+ content::WebContents* web_contents);
+
+ // Creates a Media Router modal dialog using the initiator and parameters
+ // specified in |request|. If the dialog already exists, brings the dialog
+ // to the front, but does not change the dialog with |request|.
+ // Returns WebContents for the media router dialog if a dialog was created.
+ // Otherwise returns false and |request| is deleted.
+ virtual bool ShowMediaRouterDialogForPresentation(
+ scoped_ptr<CreatePresentationSessionRequest> request) = 0;
+};
+
+} // namespace media_router
+
+#endif // CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_H_
diff --git a/chrome/browser/media/router/media_router_mojo_impl_factory.cc b/chrome/browser/media/router/media_router_factory.cc
index 1e2c735..34c870d 100644
--- a/chrome/browser/media/router/media_router_mojo_impl_factory.cc
+++ b/chrome/browser/media/router/media_router_factory.cc
@@ -2,12 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/media/router/media_router_mojo_impl_factory.h"
+#include "chrome/browser/media/router/media_router_factory.h"
-#include "chrome/browser/media/router/media_router_mojo_impl.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
+#if defined(OS_ANDROID)
+#include "chrome/browser/media/android/router/media_router_android.h"
+#else
+#include "chrome/browser/media/router/media_router_mojo_impl.h"
#include "extensions/browser/process_manager.h"
#include "extensions/browser/process_manager_factory.h"
+#endif
using content::BrowserContext;
@@ -15,40 +19,47 @@ namespace media_router {
namespace {
-base::LazyInstance<MediaRouterMojoImplFactory> service_factory =
+base::LazyInstance<MediaRouterFactory> service_factory =
LAZY_INSTANCE_INITIALIZER;
} // namespace
// static
-MediaRouterMojoImpl* MediaRouterMojoImplFactory::GetApiForBrowserContext(
+MediaRouter* MediaRouterFactory::GetApiForBrowserContext(
BrowserContext* context) {
DCHECK(context);
-
- return static_cast<MediaRouterMojoImpl*>(
+ // GetServiceForBrowserContext returns a KeyedService hence the static_cast<>
+ // to return a pointer to MediaRouter.
+ return static_cast<MediaRouter*>(
service_factory.Get().GetServiceForBrowserContext(context, true));
}
-MediaRouterMojoImplFactory::MediaRouterMojoImplFactory()
+MediaRouterFactory::MediaRouterFactory()
: BrowserContextKeyedServiceFactory(
- "MediaRouterMojoImpl",
+ "MediaRouter",
BrowserContextDependencyManager::GetInstance()) {
- // MediaRouterMojoImpl depends on ProcessManager.
+#if !defined(OS_ANDROID)
+ // On desktop platforms, MediaRouter depends on ProcessManager.
DependsOn(extensions::ProcessManagerFactory::GetInstance());
+#endif
}
-MediaRouterMojoImplFactory::~MediaRouterMojoImplFactory() {
+MediaRouterFactory::~MediaRouterFactory() {
}
-KeyedService* MediaRouterMojoImplFactory::BuildServiceInstanceFor(
+KeyedService* MediaRouterFactory::BuildServiceInstanceFor(
BrowserContext* context) const {
+#if defined(OS_ANDROID)
+ return new MediaRouterAndroid(context);
+#else
return new MediaRouterMojoImpl(extensions::ProcessManager::Get(context));
+#endif
}
-BrowserContext* MediaRouterMojoImplFactory::GetBrowserContextToUse(
+BrowserContext* MediaRouterFactory::GetBrowserContextToUse(
BrowserContext* context) const {
// Always use the input context. This means that an incognito context will
- // have its own MediaRouterMojoImpl service, rather than sharing it with its
+ // have its own MediaRouter service, rather than sharing it with its
// original non-incognito context.
return context;
}
diff --git a/chrome/browser/media/router/media_router_mojo_impl_factory.h b/chrome/browser/media/router/media_router_factory.h
index de33157..8118f99 100644
--- a/chrome/browser/media/router/media_router_mojo_impl_factory.h
+++ b/chrome/browser/media/router/media_router_factory.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MOJO_IMPL_FACTORY_H_
-#define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MOJO_IMPL_FACTORY_H_
+#ifndef CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_FACTORY_H_
+#define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_FACTORY_H_
#include "base/lazy_instance.h"
#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
@@ -14,20 +14,19 @@ class BrowserContext;
namespace media_router {
-class MediaRouterMojoImpl;
+class MediaRouter;
-// A factory that lazily returns a MediaRouterMojoImpl object for a given
+// A factory that lazily returns a MediaRouter implementation for a given
// BrowserContext.
-class MediaRouterMojoImplFactory : public BrowserContextKeyedServiceFactory {
+class MediaRouterFactory : public BrowserContextKeyedServiceFactory {
public:
- static MediaRouterMojoImpl* GetApiForBrowserContext(
- content::BrowserContext* context);
+ static MediaRouter* GetApiForBrowserContext(content::BrowserContext* context);
private:
- friend struct base::DefaultLazyInstanceTraits<MediaRouterMojoImplFactory>;
+ friend struct base::DefaultLazyInstanceTraits<MediaRouterFactory>;
- MediaRouterMojoImplFactory();
- ~MediaRouterMojoImplFactory() override;
+ MediaRouterFactory();
+ ~MediaRouterFactory() override;
// BrowserContextKeyedServiceFactory interface.
KeyedService* BuildServiceInstanceFor(
@@ -35,9 +34,9 @@ class MediaRouterMojoImplFactory : public BrowserContextKeyedServiceFactory {
content::BrowserContext* GetBrowserContextToUse(
content::BrowserContext* context) const override;
- DISALLOW_COPY_AND_ASSIGN(MediaRouterMojoImplFactory);
+ DISALLOW_COPY_AND_ASSIGN(MediaRouterFactory);
};
} // namespace media_router
-#endif // CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MOJO_IMPL_FACTORY_H_
+#endif // CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_FACTORY_H_
diff --git a/chrome/browser/media/router/media_router_mojo_impl.cc b/chrome/browser/media/router/media_router_mojo_impl.cc
index 2e0ddaf..976b0ee 100644
--- a/chrome/browser/media/router/media_router_mojo_impl.cc
+++ b/chrome/browser/media/router/media_router_mojo_impl.cc
@@ -10,7 +10,7 @@
#include "base/memory/scoped_vector.h"
#include "base/observer_list.h"
#include "base/strings/stringprintf.h"
-#include "chrome/browser/media/router/media_router_mojo_impl_factory.h"
+#include "chrome/browser/media/router/media_router_factory.h"
#include "chrome/browser/media/router/media_router_type_converters.h"
#include "chrome/browser/media/router/media_routes_observer.h"
#include "chrome/browser/media/router/media_sinks_observer.h"
@@ -100,8 +100,8 @@ void MediaRouterMojoImpl::BindToRequest(
const std::string& extension_id,
content::BrowserContext* context,
mojo::InterfaceRequest<interfaces::MediaRouter> request) {
- MediaRouterMojoImpl* impl =
- MediaRouterMojoImplFactory::GetApiForBrowserContext(context);
+ MediaRouterMojoImpl* impl = static_cast<MediaRouterMojoImpl*>(
+ MediaRouterFactory::GetApiForBrowserContext(context));
DCHECK(impl);
impl->BindToMojoRequest(request.Pass(), extension_id);
diff --git a/chrome/browser/media/router/media_router_mojo_impl.h b/chrome/browser/media/router/media_router_mojo_impl.h
index 725087e..52126da 100644
--- a/chrome/browser/media/router/media_router_mojo_impl.h
+++ b/chrome/browser/media/router/media_router_mojo_impl.h
@@ -21,7 +21,6 @@
#include "chrome/browser/media/router/issue.h"
#include "chrome/browser/media/router/media_router.h"
#include "chrome/browser/media/router/media_router.mojom.h"
-#include "components/keyed_service/core/keyed_service.h"
namespace content {
class BrowserContext;
@@ -36,8 +35,7 @@ namespace media_router {
// MediaRouter implementation that delegates calls to the component extension.
// Also handles the suspension and wakeup of the component extension.
class MediaRouterMojoImpl : public MediaRouter,
- public interfaces::MediaRouter,
- public KeyedService {
+ public interfaces::MediaRouter {
public:
~MediaRouterMojoImpl() override;
@@ -90,7 +88,7 @@ class MediaRouterMojoImpl : public MediaRouter,
}
private:
- friend class MediaRouterMojoImplFactory;
+ friend class MediaRouterFactory;
friend class MediaRouterMojoTest;
FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoExtensionTest,
diff --git a/chrome/browser/media/router/presentation_service_delegate_impl.cc b/chrome/browser/media/router/presentation_service_delegate_impl.cc
index 86b9aa4..5e79b8e 100644
--- a/chrome/browser/media/router/presentation_service_delegate_impl.cc
+++ b/chrome/browser/media/router/presentation_service_delegate_impl.cc
@@ -14,14 +14,13 @@
#include "chrome/browser/media/router/create_presentation_session_request.h"
#include "chrome/browser/media/router/media_route.h"
#include "chrome/browser/media/router/media_router.h"
-#include "chrome/browser/media/router/media_router_mojo_impl.h"
-#include "chrome/browser/media/router/media_router_mojo_impl_factory.h"
+#include "chrome/browser/media/router/media_router_dialog_controller.h"
+#include "chrome/browser/media/router/media_router_factory.h"
#include "chrome/browser/media/router/media_sink.h"
#include "chrome/browser/media/router/media_source_helper.h"
#include "chrome/browser/media/router/presentation_media_sinks_observer.h"
#include "chrome/browser/media/router/presentation_session_state_observer.h"
#include "chrome/browser/sessions/session_tab_helper.h"
-#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller.h"
#include "content/public/browser/presentation_screen_availability_listener.h"
#include "content/public/browser/presentation_session.h"
#include "content/public/browser/render_frame_host.h"
@@ -414,7 +413,7 @@ PresentationServiceDelegateImpl::GetOrCreateForWebContents(
PresentationServiceDelegateImpl::PresentationServiceDelegateImpl(
content::WebContents* web_contents)
: web_contents_(web_contents),
- router_(MediaRouterMojoImplFactory::GetApiForBrowserContext(
+ router_(MediaRouterFactory::GetApiForBrowserContext(
web_contents_->GetBrowserContext())),
frame_manager_(new PresentationFrameManager(web_contents, router_)),
weak_factory_(this) {
@@ -571,9 +570,8 @@ void PresentationServiceDelegateImpl::StartSession(
// NOTE: Currently this request is ignored if a dialog is already open, e.g.
// via browser action. In practice, this should rarely happen, but log
// an error message in case it does.
- MediaRouterDialogController::CreateForWebContents(web_contents_);
MediaRouterDialogController* controller =
- MediaRouterDialogController::FromWebContents(web_contents_);
+ MediaRouterDialogController::GetOrCreateForWebContents(web_contents_);
if (!controller->ShowMediaRouterDialogForPresentation(context.Pass())) {
LOG(ERROR) << "Media router dialog already exists. Ignoring StartSession.";
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index dff7b8b..205bde3 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -444,7 +444,7 @@ source_set("ui") {
".",
"//chrome")
}
- if (enable_media_router) {
+ if (enable_media_router && !is_android && !is_ios) {
sources += rebase_path(gypi_values.chrome_browser_ui_media_router_sources,
".",
"//chrome")
diff --git a/chrome/browser/ui/toolbar/media_router_action.cc b/chrome/browser/ui/toolbar/media_router_action.cc
index 6c68aea..d395fb4 100644
--- a/chrome/browser/ui/toolbar/media_router_action.cc
+++ b/chrome/browser/ui/toolbar/media_router_action.cc
@@ -7,14 +7,14 @@
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/ui/toolbar/media_router_action_platform_delegate.h"
#include "chrome/browser/ui/toolbar/toolbar_action_view_delegate.h"
-#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller.h"
+#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.h"
#include "chrome/grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/image/image_skia.h"
-using media_router::MediaRouterDialogController;
+using media_router::MediaRouterDialogControllerImpl;
MediaRouterAction::MediaRouterAction(Browser* browser)
: id_("media_router_action"),
@@ -97,12 +97,13 @@ bool MediaRouterAction::ExecuteAction(bool by_user) {
void MediaRouterAction::UpdateState() {
}
-MediaRouterDialogController*
+MediaRouterDialogControllerImpl*
MediaRouterAction::GetMediaRouterDialogController() {
DCHECK(delegate_);
content::WebContents* web_contents = delegate_->GetCurrentWebContents();
DCHECK(web_contents);
- return MediaRouterDialogController::GetOrCreateForWebContents(web_contents);
+ return MediaRouterDialogControllerImpl::GetOrCreateForWebContents(
+ web_contents);
}
bool MediaRouterAction::DisabledClickOpensMenu() const {
diff --git a/chrome/browser/ui/toolbar/media_router_action.h b/chrome/browser/ui/toolbar/media_router_action.h
index d437fa9..2fbf52e 100644
--- a/chrome/browser/ui/toolbar/media_router_action.h
+++ b/chrome/browser/ui/toolbar/media_router_action.h
@@ -11,7 +11,7 @@ class Browser;
class MediaRouterActionPlatformDelegate;
namespace media_router {
-class MediaRouterDialogController;
+class MediaRouterDialogControllerImpl;
} // namespace media_router
// The class for the Media Router component action that will be shown in
@@ -46,7 +46,8 @@ class MediaRouterAction : public ToolbarActionViewController {
// Returns a reference to the MediaRouterDialogController associated with
// |delegate_|'s current WebContents. Guaranteed to be non-null.
// |delegate_| and its current WebContents must not be null.
- media_router::MediaRouterDialogController* GetMediaRouterDialogController();
+ media_router::MediaRouterDialogControllerImpl*
+ GetMediaRouterDialogController();
const std::string id_;
const base::string16 name_;
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index 0993d68..b0ddfcc 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -88,7 +88,7 @@
#include "chrome/browser/ui/webui/print_preview/print_preview_ui.h"
#endif
-#if defined(ENABLE_MEDIA_ROUTER)
+#if defined(ENABLE_MEDIA_ROUTER) && !defined(OS_ANDROID)
#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
#endif
@@ -557,7 +557,7 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
if (url.host() == chrome::kChromeUIWebRtcLogsHost)
return &NewWebUI<WebRtcLogsUI>;
#endif
-#if defined(ENABLE_MEDIA_ROUTER)
+#if defined(ENABLE_MEDIA_ROUTER) && !defined(OS_ANDROID)
if (url.host() == chrome::kChromeUIMediaRouterHost &&
switches::MediaRouterEnabled()) {
return &NewWebUI<media_router::MediaRouterUI>;
diff --git a/chrome/browser/ui/webui/media_router/media_router_dialog_controller.cc b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.cc
index 816edc9..3129e65 100644
--- a/chrome/browser/ui/webui/media_router/media_router_dialog_controller.cc
+++ b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller.h"
+#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.h"
#include <string>
#include <vector>
@@ -26,7 +26,8 @@
#include "ui/web_dialogs/web_dialog_web_contents_delegate.h"
#include "url/gurl.h"
-DEFINE_WEB_CONTENTS_USER_DATA_KEY(media_router::MediaRouterDialogController);
+DEFINE_WEB_CONTENTS_USER_DATA_KEY(
+ media_router::MediaRouterDialogControllerImpl);
using content::LoadCommittedDetails;
using content::NavigationController;
@@ -110,21 +111,21 @@ void MediaRouterDialogDelegate::GetDialogSize(gfx::Size* size) const {
} // namespace
// static
-MediaRouterDialogController*
-MediaRouterDialogController::GetOrCreateForWebContents(
+MediaRouterDialogControllerImpl*
+MediaRouterDialogControllerImpl::GetOrCreateForWebContents(
WebContents* web_contents) {
DCHECK(web_contents);
// This call does nothing if the controller already exists.
- MediaRouterDialogController::CreateForWebContents(web_contents);
- return MediaRouterDialogController::FromWebContents(web_contents);
+ MediaRouterDialogControllerImpl::CreateForWebContents(web_contents);
+ return MediaRouterDialogControllerImpl::FromWebContents(web_contents);
}
-class MediaRouterDialogController::DialogWebContentsObserver
+class MediaRouterDialogControllerImpl::DialogWebContentsObserver
: public content::WebContentsObserver {
public:
DialogWebContentsObserver(
WebContents* web_contents,
- MediaRouterDialogController* dialog_controller)
+ MediaRouterDialogControllerImpl* dialog_controller)
: content::WebContentsObserver(web_contents),
dialog_controller_(dialog_controller) {
}
@@ -146,15 +147,15 @@ class MediaRouterDialogController::DialogWebContentsObserver
dialog_controller_->CloseMediaRouterDialog();
}
- MediaRouterDialogController* const dialog_controller_;
+ MediaRouterDialogControllerImpl* const dialog_controller_;
};
-class MediaRouterDialogController::InitiatorWebContentsObserver
+class MediaRouterDialogControllerImpl::InitiatorWebContentsObserver
: public content::WebContentsObserver {
public:
InitiatorWebContentsObserver(
WebContents* web_contents,
- MediaRouterDialogController* dialog_controller)
+ MediaRouterDialogControllerImpl* dialog_controller)
: content::WebContentsObserver(web_contents),
dialog_controller_(dialog_controller) {
}
@@ -176,10 +177,10 @@ class MediaRouterDialogController::InitiatorWebContentsObserver
dialog_controller_->CloseMediaRouterDialog();
}
- MediaRouterDialogController* const dialog_controller_;
+ MediaRouterDialogControllerImpl* const dialog_controller_;
};
-MediaRouterDialogController::MediaRouterDialogController(
+MediaRouterDialogControllerImpl::MediaRouterDialogControllerImpl(
WebContents* web_contents)
: initiator_(web_contents),
media_router_dialog_pending_(false) {
@@ -187,11 +188,11 @@ MediaRouterDialogController::MediaRouterDialogController(
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
}
-MediaRouterDialogController::~MediaRouterDialogController() {
+MediaRouterDialogControllerImpl::~MediaRouterDialogControllerImpl() {
DCHECK(thread_checker_.CalledOnValidThread());
}
-WebContents* MediaRouterDialogController::ShowMediaRouterDialog() {
+WebContents* MediaRouterDialogControllerImpl::ShowMediaRouterDialog() {
DCHECK(thread_checker_.CalledOnValidThread());
// Get the media router dialog for |initiator|, or create a new dialog
@@ -207,7 +208,7 @@ WebContents* MediaRouterDialogController::ShowMediaRouterDialog() {
return media_router_dialog;
}
-WebContents* MediaRouterDialogController::ShowMediaRouterDialogForPresentation(
+bool MediaRouterDialogControllerImpl::ShowMediaRouterDialogForPresentation(
scoped_ptr<CreatePresentationSessionRequest> request) {
DCHECK(thread_checker_.CalledOnValidThread());
@@ -218,20 +219,20 @@ WebContents* MediaRouterDialogController::ShowMediaRouterDialogForPresentation(
CreateMediaRouterDialog();
media_router_dialog = GetMediaRouterDialog();
presentation_request_ = request.Pass();
- return media_router_dialog;
+ return true;
}
// Show the initiator holding the existing media router dialog.
initiator_->GetDelegate()->ActivateContents(initiator_);
- return nullptr;
+ return false;
}
-WebContents* MediaRouterDialogController::GetMediaRouterDialog() const {
+WebContents* MediaRouterDialogControllerImpl::GetMediaRouterDialog() const {
DCHECK(thread_checker_.CalledOnValidThread());
return dialog_observer_.get() ? dialog_observer_->web_contents() : nullptr;
}
-void MediaRouterDialogController::CloseMediaRouterDialog() {
+void MediaRouterDialogControllerImpl::CloseMediaRouterDialog() {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(initiator_observer_.get());
WebContents* media_router_dialog = GetMediaRouterDialog();
@@ -247,7 +248,7 @@ void MediaRouterDialogController::CloseMediaRouterDialog() {
}
}
-void MediaRouterDialogController::CreateMediaRouterDialog() {
+void MediaRouterDialogControllerImpl::CreateMediaRouterDialog() {
DCHECK(!initiator_observer_.get());
DCHECK(!dialog_observer_.get());
@@ -289,7 +290,7 @@ void MediaRouterDialogController::CreateMediaRouterDialog() {
media_router_dialog, this));
}
-void MediaRouterDialogController::Reset() {
+void MediaRouterDialogControllerImpl::Reset() {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(initiator_observer_.get());
DCHECK(dialog_observer_.get());
@@ -298,7 +299,7 @@ void MediaRouterDialogController::Reset() {
presentation_request_.reset();
}
-void MediaRouterDialogController::OnDialogNavigated(
+void MediaRouterDialogControllerImpl::OnDialogNavigated(
const content::LoadCommittedDetails& details) {
DCHECK(thread_checker_.CalledOnValidThread());
WebContents* media_router_dialog = GetMediaRouterDialog();
@@ -318,7 +319,7 @@ void MediaRouterDialogController::OnDialogNavigated(
PopulateDialog(media_router_dialog);
}
-void MediaRouterDialogController::PopulateDialog(
+void MediaRouterDialogControllerImpl::PopulateDialog(
content::WebContents* media_router_dialog) {
DCHECK(media_router_dialog);
DCHECK(initiator_observer_);
diff --git a/chrome/browser/ui/webui/media_router/media_router_dialog_controller.h b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.h
index 79bcf9c..de09d81 100644
--- a/chrome/browser/ui/webui/media_router/media_router_dialog_controller.h
+++ b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.h
@@ -2,46 +2,37 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_H_
-#define CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_H_
+#ifndef CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_IMPL_H_
+#define CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_IMPL_H_
#include "base/macros.h"
-#include "chrome/browser/media/router/create_presentation_session_request.h"
+#include "chrome/browser/media/router/media_router_dialog_controller.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
namespace media_router {
-// An instance of this class is tied to a WebContents known as the initiator,
-// and is lazily created when a Media Router dialog needs to be shown.
-// The MediaRouterDialogController allows creating, querying, and removing a
-// Media Router dialog modal to the initiator WebContents.
+// A desktop implementation of MediaRouterDialogController.
// This class is not thread safe and must be called on the UI thread.
-class MediaRouterDialogController
- : public content::WebContentsUserData<MediaRouterDialogController> {
+class MediaRouterDialogControllerImpl
+ : public content::WebContentsUserData<MediaRouterDialogControllerImpl>,
+ public MediaRouterDialogController {
public:
- ~MediaRouterDialogController() override;
+ ~MediaRouterDialogControllerImpl() override;
- // Gets a reference to the MediaRouterDialogController associated with
- // |web_contents|, creating one if it does not exist. The returned pointer is
- // guaranteed to be non-null.
- static MediaRouterDialogController* GetOrCreateForWebContents(
+ static MediaRouterDialogControllerImpl* GetOrCreateForWebContents(
content::WebContents* web_contents);
+ // SuperClass:
+ bool ShowMediaRouterDialogForPresentation(
+ scoped_ptr<CreatePresentationSessionRequest> request) override;
+
// Shows the media router dialog modal to the initiator WebContents.
// Creates the dialog if it did not exist prior to this call.
// If the dialog already exists, brings the dialog to the front.
// Returns WebContents for the media router dialog.
content::WebContents* ShowMediaRouterDialog();
- // Creates a Media Router modal dialog using the initiator and parameters
- // specified in |request|. If the dialog already exists, brings the dialog
- // to the front, but does not change the dialog with |request|.
- // Returns WebContents for the media router dialog if a dialog was created.
- // Otherwise returns nullptr and |request| is deleted.
- content::WebContents* ShowMediaRouterDialogForPresentation(
- scoped_ptr<CreatePresentationSessionRequest> request);
-
// Returns the media router dialog WebContents.
// Returns nullptr if there is no dialog.
content::WebContents* GetMediaRouterDialog() const;
@@ -53,11 +44,11 @@ class MediaRouterDialogController
private:
class DialogWebContentsObserver;
class InitiatorWebContentsObserver;
- friend class content::WebContentsUserData<MediaRouterDialogController>;
+ friend class content::WebContentsUserData<MediaRouterDialogControllerImpl>;
- // Use MediaRouterDialogController::CreateForWebContents() to create an
+ // Use MediaRouterDialogControllerImpl::CreateForWebContents() to create an
// instance.
- explicit MediaRouterDialogController(content::WebContents* web_contents);
+ explicit MediaRouterDialogControllerImpl(content::WebContents* web_contents);
// Creates a new media router dialog modal to |initiator_|.
void CreateMediaRouterDialog();
@@ -86,9 +77,9 @@ class MediaRouterDialogController
base::ThreadChecker thread_checker_;
- DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogController);
+ DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogControllerImpl);
};
} // namespace media_router
-#endif // CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_H_
+#endif // CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_IMPL_H_
diff --git a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_browsertest.cc b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl_browsertest.cc
index 1761cf9..18733d1 100644
--- a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_browsertest.cc
+++ b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl_browsertest.cc
@@ -6,7 +6,7 @@
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller.h"
+#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.h"
#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/test/base/in_process_browser_test.h"
@@ -39,9 +39,9 @@ class MediaRouterDialogControllerBrowserTest : public InProcessBrowserTest {
initiator_ = browser()->tab_strip_model()->GetActiveWebContents();
ASSERT_TRUE(initiator_);
- MediaRouterDialogController::CreateForWebContents(initiator_);
+ MediaRouterDialogControllerImpl::CreateForWebContents(initiator_);
dialog_controller_ =
- MediaRouterDialogController::FromWebContents(initiator_);
+ MediaRouterDialogControllerImpl::FromWebContents(initiator_);
ASSERT_TRUE(dialog_controller_);
// Get the media router dialog for the initiator.
@@ -49,7 +49,7 @@ class MediaRouterDialogControllerBrowserTest : public InProcessBrowserTest {
ASSERT_TRUE(media_router_dialog_);
}
- MediaRouterDialogController* dialog_controller_;
+ MediaRouterDialogControllerImpl* dialog_controller_;
WebContents* initiator_;
WebContents* media_router_dialog_;
diff --git a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl_unittest.cc
index 97bba96..b6563ec 100644
--- a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_unittest.cc
+++ b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl_unittest.cc
@@ -5,7 +5,7 @@
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller.h"
+#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.h"
#include "chrome/browser/ui/webui/media_router/media_router_test.h"
#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
#include "content/public/test/browser_test_utils.h"
@@ -14,22 +14,22 @@ using content::WebContents;
namespace media_router {
-class MediaRouterDialogControllerTest : public MediaRouterTest {
+class MediaRouterDialogControllerImplTest : public MediaRouterTest {
public:
- MediaRouterDialogControllerTest() {}
- ~MediaRouterDialogControllerTest() override {}
+ MediaRouterDialogControllerImplTest() {}
+ ~MediaRouterDialogControllerImplTest() override {}
void OpenMediaRouterDialog();
protected:
WebContents* initiator_ = nullptr;
- MediaRouterDialogController* dialog_controller_ = nullptr;
+ MediaRouterDialogControllerImpl* dialog_controller_ = nullptr;
WebContents* media_router_dialog_ = nullptr;
private:
- DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogControllerTest);
+ DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogControllerImplTest);
};
-void MediaRouterDialogControllerTest::OpenMediaRouterDialog() {
+void MediaRouterDialogControllerImplTest::OpenMediaRouterDialog() {
// Start with one window with one tab.
EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
EXPECT_EQ(0, browser()->tab_strip_model()->count());
@@ -39,8 +39,9 @@ void MediaRouterDialogControllerTest::OpenMediaRouterDialog() {
// Create a reference to initiator contents.
initiator_ = browser()->tab_strip_model()->GetActiveWebContents();
- MediaRouterDialogController::CreateForWebContents(initiator_);
- dialog_controller_ = MediaRouterDialogController::FromWebContents(initiator_);
+ MediaRouterDialogControllerImpl::CreateForWebContents(initiator_);
+ dialog_controller_ =
+ MediaRouterDialogControllerImpl::FromWebContents(initiator_);
ASSERT_TRUE(dialog_controller_);
// Get the media router dialog for the initiator.
@@ -55,7 +56,7 @@ void MediaRouterDialogControllerTest::OpenMediaRouterDialog() {
}
// Create/Get a media router dialog for initiator.
-TEST_F(MediaRouterDialogControllerTest, ShowMediaRouterDialog) {
+TEST_F(MediaRouterDialogControllerImplTest, ShowMediaRouterDialog) {
OpenMediaRouterDialog();
// Show media router dialog for the same initiator again.
@@ -73,7 +74,7 @@ TEST_F(MediaRouterDialogControllerTest, ShowMediaRouterDialog) {
// Tests multiple media router dialogs exist in the same browser for different
// initiators. If a dialog already exists for an initiator, that initiator
// gets focused.
-TEST_F(MediaRouterDialogControllerTest, MultipleMediaRouterDialogs) {
+TEST_F(MediaRouterDialogControllerImplTest, MultipleMediaRouterDialogs) {
// Let's start with one window and two tabs.
EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
TabStripModel* tab_strip_model = browser()->tab_strip_model();
@@ -93,9 +94,9 @@ TEST_F(MediaRouterDialogControllerTest, MultipleMediaRouterDialogs) {
// Create media router dialog for |web_contents_1|.
- MediaRouterDialogController::CreateForWebContents(web_contents_1);
- MediaRouterDialogController* dialog_controller_1 =
- MediaRouterDialogController::FromWebContents(web_contents_1);
+ MediaRouterDialogControllerImpl::CreateForWebContents(web_contents_1);
+ MediaRouterDialogControllerImpl* dialog_controller_1 =
+ MediaRouterDialogControllerImpl::FromWebContents(web_contents_1);
ASSERT_TRUE(dialog_controller_1);
WebContents* media_router_dialog_1 =
@@ -106,9 +107,9 @@ TEST_F(MediaRouterDialogControllerTest, MultipleMediaRouterDialogs) {
EXPECT_EQ(2, tab_strip_model->count());
// Create media router dialog for |web_contents_2|.
- MediaRouterDialogController::CreateForWebContents(web_contents_2);
- MediaRouterDialogController* dialog_controller_2 =
- MediaRouterDialogController::FromWebContents(web_contents_2);
+ MediaRouterDialogControllerImpl::CreateForWebContents(web_contents_2);
+ MediaRouterDialogControllerImpl* dialog_controller_2 =
+ MediaRouterDialogControllerImpl::FromWebContents(web_contents_2);
ASSERT_TRUE(dialog_controller_2);
WebContents* media_router_dialog_2 =
@@ -148,7 +149,7 @@ TEST_F(MediaRouterDialogControllerTest, MultipleMediaRouterDialogs) {
EXPECT_EQ(tab_2_index, tab_strip_model->active_index());
}
-TEST_F(MediaRouterDialogControllerTest, CloseDialogFromWebUI) {
+TEST_F(MediaRouterDialogControllerImplTest, CloseDialogFromWebUI) {
OpenMediaRouterDialog();
// Close the dialog.
@@ -180,7 +181,7 @@ TEST_F(MediaRouterDialogControllerTest, CloseDialogFromWebUI) {
EXPECT_EQ(media_router_dialog_2, dialog_controller_->GetMediaRouterDialog());
}
-TEST_F(MediaRouterDialogControllerTest, CloseDialogFromDialogController) {
+TEST_F(MediaRouterDialogControllerImplTest, CloseDialogFromDialogController) {
OpenMediaRouterDialog();
// Close the dialog.
@@ -198,7 +199,7 @@ TEST_F(MediaRouterDialogControllerTest, CloseDialogFromDialogController) {
EXPECT_FALSE(dialog_controller_->GetMediaRouterDialog());
}
-TEST_F(MediaRouterDialogControllerTest, CloseInitiator) {
+TEST_F(MediaRouterDialogControllerImplTest, CloseInitiator) {
OpenMediaRouterDialog();
// Close the initiator. This should also close the dialog WebContents.
diff --git a/chrome/browser/ui/webui/media_router/media_router_ui.cc b/chrome/browser/ui/webui/media_router/media_router_ui.cc
index d015f12..c214dd2 100644
--- a/chrome/browser/ui/webui/media_router/media_router_ui.cc
+++ b/chrome/browser/ui/webui/media_router/media_router_ui.cc
@@ -12,8 +12,8 @@
#include "chrome/browser/media/router/issues_observer.h"
#include "chrome/browser/media/router/media_route.h"
#include "chrome/browser/media/router/media_router.h"
+#include "chrome/browser/media/router/media_router_factory.h"
#include "chrome/browser/media/router/media_router_mojo_impl.h"
-#include "chrome/browser/media/router/media_router_mojo_impl_factory.h"
#include "chrome/browser/media/router/media_routes_observer.h"
#include "chrome/browser/media/router/media_sink.h"
#include "chrome/browser/media/router/media_sinks_observer.h"
@@ -22,7 +22,7 @@
#include "chrome/browser/media/router/presentation_service_delegate_impl.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sessions/session_tab_helper.h"
-#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller.h"
+#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.h"
#include "chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.h"
#include "chrome/browser/ui/webui/media_router/media_router_resources_provider.h"
#include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h"
@@ -116,7 +116,7 @@ MediaRouterUI::MediaRouterUI(content::WebUI* web_ui)
content::WebContents* wc = web_ui->GetWebContents();
DCHECK(wc);
- router_ = MediaRouterMojoImplFactory::GetApiForBrowserContext(
+ router_ = MediaRouterFactory::GetApiForBrowserContext(
wc->GetBrowserContext());
DCHECK(router_);
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 206d305..4690bd0 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -583,6 +583,10 @@
'browser/media/android/remote/remote_media_player_bridge.h',
'browser/media/android/remote/remote_media_player_manager.cc',
'browser/media/android/remote/remote_media_player_manager.h',
+ 'browser/media/android/router/media_router_android.cc',
+ 'browser/media/android/router/media_router_android.h',
+ 'browser/media/android/router/media_router_dialog_controller_android.cc',
+ 'browser/media/android/router/media_router_dialog_controller_android.h',
'browser/media/desktop_media_list.h',
'browser/media/desktop_media_picker.h',
'browser/media/desktop_streams_registry.cc',
diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi
index efa2bb7..ab4a47d 100644
--- a/chrome/chrome_browser_ui.gypi
+++ b/chrome/chrome_browser_ui.gypi
@@ -1478,8 +1478,8 @@
'browser/ui/views/toolbar/media_router_action_platform_delegate_views.h',
'browser/ui/webui/media_router/media_cast_mode.cc',
'browser/ui/webui/media_router/media_cast_mode.h',
- 'browser/ui/webui/media_router/media_router_dialog_controller.cc',
- 'browser/ui/webui/media_router/media_router_dialog_controller.h',
+ 'browser/ui/webui/media_router/media_router_dialog_controller_impl.cc',
+ 'browser/ui/webui/media_router/media_router_dialog_controller_impl.h',
'browser/ui/webui/media_router/media_router_localized_strings_provider.cc',
'browser/ui/webui/media_router/media_router_localized_strings_provider.h',
'browser/ui/webui/media_router/media_router_resources_provider.cc',
@@ -3172,7 +3172,7 @@
['enable_google_now==1 and OS!="android"', {
'sources': [ '<@(chrome_browser_ui_google_now_non_android_sources)' ],
}],
- ['enable_media_router==1', {
+ ['enable_media_router==1 and OS!="android" and OS!="ios"', {
'dependencies': [
'browser/media/router/media_router.gyp:media_router',
],
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index b4e897c..1deb91b 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -871,7 +871,7 @@
'browser/ui/app_list/speech_recognizer_browsertest.cc',
],
'chrome_browser_tests_media_router_sources': [
- 'browser/ui/webui/media_router/media_router_dialog_controller_browsertest.cc',
+ 'browser/ui/webui/media_router/media_router_dialog_controller_impl_browsertest.cc',
'test/data/webui/media_router/media_router_elements_browsertest.js',
'test/media_router/media_router_base_browsertest.cc',
'test/media_router/media_router_base_browsertest.h',
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index 93f26fd..d26e2cb 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -1462,16 +1462,18 @@
'browser/media/router/issue_manager_unittest.cc',
'browser/media/router/issue_unittest.cc',
'browser/media/router/media_route_unittest.cc',
- 'browser/media/router/media_router_mojo_impl_unittest.cc',
- 'browser/media/router/media_router_type_converters_unittest.cc',
'browser/media/router/media_sink_unittest.cc',
'browser/media/router/media_source_helper_unittest.cc',
'browser/media/router/media_source_unittest.cc',
'browser/media/router/presentation_media_sinks_observer_unittest.cc',
'browser/media/router/presentation_service_delegate_impl_unittest.cc',
'browser/media/router/presentation_session_state_observer_unittest.cc',
+ ],
+ 'chrome_unit_tests_media_router_non_android_sources': [
+ 'browser/media/router/media_router_mojo_impl_unittest.cc',
+ 'browser/media/router/media_router_type_converters_unittest.cc',
'browser/ui/webui/media_router/media_cast_mode_unittest.cc',
- 'browser/ui/webui/media_router/media_router_dialog_controller_unittest.cc',
+ 'browser/ui/webui/media_router/media_router_dialog_controller_impl_unittest.cc',
'browser/ui/webui/media_router/media_router_test.cc',
'browser/ui/webui/media_router/media_router_test.h',
'browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc',
@@ -2432,6 +2434,11 @@
['enable_media_router==1', {
'sources': [ '<@(chrome_unit_tests_media_router_sources)' ],
'dependencies': [ 'browser/media/router/media_router.gyp:media_router_test_support' ],
+ 'conditions': [
+ ['OS!="android"', {
+ 'sources': [ '<@(chrome_unit_tests_media_router_non_android_sources)' ],
+ }],
+ ],
}],
['enable_captive_portal_detection==1', {
'sources': [ '<@(chrome_unit_tests_captive_portal_sources)' ],
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 8bdb899..5b62190 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1456,6 +1456,12 @@ if (!is_android) {
".",
"//chrome")
deps += [ "//chrome/browser/media/router:test_support" ]
+ if (!is_android) {
+ sources += rebase_path(
+ chrome_tests_unit_gypi_values.chrome_unit_tests_media_router_non_android_sources,
+ ".",
+ "//chrome")
+ }
if (!toolkit_views) {
sources -= [ "../browser/ui/views/media_router/media_router_ui_browsertest.cc" ]
}
diff --git a/chrome/test/media_router/media_router_e2e_browsertest.cc b/chrome/test/media_router/media_router_e2e_browsertest.cc
index a146e685..93ee592 100644
--- a/chrome/test/media_router/media_router_e2e_browsertest.cc
+++ b/chrome/test/media_router/media_router_e2e_browsertest.cc
@@ -7,8 +7,8 @@
#include "base/command_line.h"
#include "base/stl_util.h"
#include "chrome/browser/media/router/media_router.h"
+#include "chrome/browser/media/router/media_router_factory.h"
#include "chrome/browser/media/router/media_router_mojo_impl.h"
-#include "chrome/browser/media/router/media_router_mojo_impl_factory.h"
#include "chrome/browser/media/router/media_source.h"
#include "chrome/browser/media/router/media_source_helper.h"
#include "chrome/browser/profiles/profile.h"
@@ -53,7 +53,7 @@ MediaRouterE2EBrowserTest::~MediaRouterE2EBrowserTest() {
void MediaRouterE2EBrowserTest::SetUpOnMainThread() {
MediaRouterBaseBrowserTest::SetUpOnMainThread();
media_router_ =
- MediaRouterMojoImplFactory::GetApiForBrowserContext(browser()->profile());
+ MediaRouterFactory::GetApiForBrowserContext(browser()->profile());
DCHECK(media_router_);
}
diff --git a/chrome/test/media_router/media_router_integration_browsertest.cc b/chrome/test/media_router/media_router_integration_browsertest.cc
index 9b7d262..5139fe9 100644
--- a/chrome/test/media_router/media_router_integration_browsertest.cc
+++ b/chrome/test/media_router/media_router_integration_browsertest.cc
@@ -13,7 +13,7 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller.h"
+#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/test_navigation_observer.h"
@@ -73,8 +73,8 @@ void MediaRouterIntegrationBrowserTest::OpenTestPage(
void MediaRouterIntegrationBrowserTest::ChooseSink(
content::WebContents* web_contents,
const std::string& sink_id) {
- MediaRouterDialogController* controller =
- MediaRouterDialogController::GetOrCreateForWebContents(web_contents);
+ MediaRouterDialogControllerImpl* controller =
+ MediaRouterDialogControllerImpl::GetOrCreateForWebContents(web_contents);
content::WebContents* dialog_contents = controller->GetMediaRouterDialog();
ASSERT_TRUE(dialog_contents);
std::string script = base::StringPrintf(