diff options
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( |