Commit 21164c2c authored by Derek Cheng's avatar Derek Cheng Committed by Commit Bot

[Media Router] Enable the in-browser DIAL discovery feature by default.

The feature has been fully rolled out to stable for more than a month.
We should now be able to start doing feature cleanups.

Bug: 718154
Change-Id: I874c5517003badc37c8fc0e29ca6e96c9a4eaae1
Reviewed-on: https://chromium-review.googlesource.com/794715
Commit-Queue: Derek Cheng <imcheng@chromium.org>
Reviewed-by: default avatarmark a. foltz <mfoltz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#521891}
parent 636a4876
...@@ -50,20 +50,23 @@ class DialMediaSinkService { ...@@ -50,20 +50,23 @@ class DialMediaSinkService {
// |dial_sink_added_cb_sequence|: The sequence |dial_sink_added_cb| is // |dial_sink_added_cb_sequence|: The sequence |dial_sink_added_cb| is
// invoked on, or nullptr if the callback is null. // invoked on, or nullptr if the callback is null.
// Both callbacks may be invoked after |this| is destroyed. // Both callbacks may be invoked after |this| is destroyed.
void Start(const OnSinksDiscoveredCallback& sink_discovery_cb, // Marked virtual for tests.
virtual void Start(const OnSinksDiscoveredCallback& sink_discovery_cb,
const OnDialSinkAddedCallback& dial_sink_added_cb, const OnDialSinkAddedCallback& dial_sink_added_cb,
const scoped_refptr<base::SequencedTaskRunner>& const scoped_refptr<base::SequencedTaskRunner>&
dial_sink_added_cb_sequence); dial_sink_added_cb_sequence);
// Forces the sink discovery callback to be invoked with the current list of // Forces the sink discovery callback to be invoked with the current list of
// sinks. This method can only be called after |Start()|. // sinks. This method can only be called after |Start()|.
void ForceSinkDiscoveryCallback(); // Marked virtual for tests.
virtual void ForceSinkDiscoveryCallback();
// Initiates discovery immediately in response to a user gesture // Initiates discovery immediately in response to a user gesture
// (i.e., opening the Media Router dialog). This method can only be called // (i.e., opening the Media Router dialog). This method can only be called
// after |Start()|. // after |Start()|.
// TODO(imcheng): Rename to ManuallyInitiateDiscovery() or similar. // TODO(imcheng): Rename to ManuallyInitiateDiscovery() or similar.
void OnUserGesture(); // Marked virtual for tests.
virtual void OnUserGesture();
private: private:
friend class DialMediaSinkServiceTest; friend class DialMediaSinkServiceTest;
......
...@@ -53,16 +53,19 @@ class CastMediaSinkService : public DnsSdRegistry::DnsSdObserver { ...@@ -53,16 +53,19 @@ class CastMediaSinkService : public DnsSdRegistry::DnsSdObserver {
// |sink_discovery_cb|: Callback to invoke when the list of discovered sinks // |sink_discovery_cb|: Callback to invoke when the list of discovered sinks
// has been updated. The callback is invoked on the UI thread and may be // has been updated. The callback is invoked on the UI thread and may be
// invoked after |this| is destroyed. // invoked after |this| is destroyed.
void Start(const OnSinksDiscoveredCallback& sinks_discovered_cb); // Marked virtual for tests.
virtual void Start(const OnSinksDiscoveredCallback& sinks_discovered_cb);
// Forces the sink discovery callback to be invoked with the current list of // Forces the sink discovery callback to be invoked with the current list of
// sinks. // sinks.
void ForceSinkDiscoveryCallback(); // Marked virtual for tests.
virtual void ForceSinkDiscoveryCallback();
// Initiates discovery immediately in response to a user gesture // Initiates discovery immediately in response to a user gesture
// (i.e., opening the Media Router dialog). // (i.e., opening the Media Router dialog).
// TODO(imcheng): Rename to ManuallyInitiateDiscovery() or similar. // TODO(imcheng): Rename to ManuallyInitiateDiscovery() or similar.
void OnUserGesture(); // Marked virtual for tests.
virtual void OnUserGesture();
// Marked virtual for tests. // Marked virtual for tests.
virtual std::unique_ptr<CastMediaSinkServiceImpl> CreateImpl( virtual std::unique_ptr<CastMediaSinkServiceImpl> CreateImpl(
......
...@@ -20,8 +20,8 @@ namespace media_router { ...@@ -20,8 +20,8 @@ namespace media_router {
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
// Controls if browser side DIAL device discovery is enabled. // Controls if browser side DIAL device discovery is enabled.
const base::Feature kEnableDialLocalDiscovery{ const base::Feature kEnableDialLocalDiscovery{"EnableDialLocalDiscovery",
"EnableDialLocalDiscovery", base::FEATURE_DISABLED_BY_DEFAULT}; base::FEATURE_ENABLED_BY_DEFAULT};
// Controls if browser side Cast device discovery is enabled. // Controls if browser side Cast device discovery is enabled.
const base::Feature kEnableCastDiscovery{"EnableCastDiscovery", const base::Feature kEnableCastDiscovery{"EnableCastDiscovery",
......
...@@ -18,6 +18,7 @@ bool MediaRouterEnabled(content::BrowserContext* context); ...@@ -18,6 +18,7 @@ bool MediaRouterEnabled(content::BrowserContext* context);
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
extern const base::Feature kEnableDialLocalDiscovery;
extern const base::Feature kEnableCastDiscovery; extern const base::Feature kEnableCastDiscovery;
extern const base::Feature kEnableCastLocalMedia; extern const base::Feature kEnableCastLocalMedia;
......
...@@ -36,11 +36,12 @@ void MediaRouteController::Observer::InvalidateController() { ...@@ -36,11 +36,12 @@ void MediaRouteController::Observer::InvalidateController() {
void MediaRouteController::Observer::OnControllerInvalidated() {} void MediaRouteController::Observer::OnControllerInvalidated() {}
MediaRouteController::MediaRouteController(const MediaRoute::Id& route_id, MediaRouteController::MediaRouteController(const MediaRoute::Id& route_id,
content::BrowserContext* context) content::BrowserContext* context,
MediaRouter* router)
: route_id_(route_id), : route_id_(route_id),
request_manager_( request_manager_(
EventPageRequestManagerFactory::GetApiForBrowserContext(context)), EventPageRequestManagerFactory::GetApiForBrowserContext(context)),
media_router_(MediaRouterFactory::GetApiForBrowserContext(context)), media_router_(router),
binding_(this) { binding_(this) {
DCHECK(media_router_); DCHECK(media_router_);
DCHECK(request_manager_); DCHECK(request_manager_);
...@@ -167,8 +168,9 @@ HangoutsMediaRouteController* HangoutsMediaRouteController::From( ...@@ -167,8 +168,9 @@ HangoutsMediaRouteController* HangoutsMediaRouteController::From(
HangoutsMediaRouteController::HangoutsMediaRouteController( HangoutsMediaRouteController::HangoutsMediaRouteController(
const MediaRoute::Id& route_id, const MediaRoute::Id& route_id,
content::BrowserContext* context) content::BrowserContext* context,
: MediaRouteController(route_id, context) {} MediaRouter* router)
: MediaRouteController(route_id, context, router) {}
HangoutsMediaRouteController::~HangoutsMediaRouteController() {} HangoutsMediaRouteController::~HangoutsMediaRouteController() {}
...@@ -217,8 +219,9 @@ MirroringMediaRouteController* MirroringMediaRouteController::From( ...@@ -217,8 +219,9 @@ MirroringMediaRouteController* MirroringMediaRouteController::From(
MirroringMediaRouteController::MirroringMediaRouteController( MirroringMediaRouteController::MirroringMediaRouteController(
const MediaRoute::Id& route_id, const MediaRoute::Id& route_id,
content::BrowserContext* context) content::BrowserContext* context,
: MediaRouteController(route_id, context), MediaRouter* router)
: MediaRouteController(route_id, context, router),
prefs_(Profile::FromBrowserContext(context)->GetPrefs()) { prefs_(Profile::FromBrowserContext(context)->GetPrefs()) {
DCHECK(prefs_); DCHECK(prefs_);
media_remoting_enabled_ = media_remoting_enabled_ =
......
...@@ -97,7 +97,8 @@ class MediaRouteController ...@@ -97,7 +97,8 @@ class MediaRouteController
// |mojo_media_controller_|. |media_router_| will be notified when the // |mojo_media_controller_|. |media_router_| will be notified when the
// MediaRouteController is destroyed via DetachRouteController(). // MediaRouteController is destroyed via DetachRouteController().
MediaRouteController(const MediaRoute::Id& route_id, MediaRouteController(const MediaRoute::Id& route_id,
content::BrowserContext* context); content::BrowserContext* context,
MediaRouter* router);
// Initializes the Mojo interfaces/bindings in this MediaRouteController. // Initializes the Mojo interfaces/bindings in this MediaRouteController.
// This should only be called when the Mojo interfaces/bindings are not bound. // This should only be called when the Mojo interfaces/bindings are not bound.
...@@ -203,7 +204,8 @@ class HangoutsMediaRouteController : public MediaRouteController { ...@@ -203,7 +204,8 @@ class HangoutsMediaRouteController : public MediaRouteController {
static HangoutsMediaRouteController* From(MediaRouteController* controller); static HangoutsMediaRouteController* From(MediaRouteController* controller);
HangoutsMediaRouteController(const MediaRoute::Id& route_id, HangoutsMediaRouteController(const MediaRoute::Id& route_id,
content::BrowserContext* context); content::BrowserContext* context,
MediaRouter* router);
// MediaRouteController // MediaRouteController
RouteControllerType GetType() const override; RouteControllerType GetType() const override;
...@@ -235,7 +237,8 @@ class MirroringMediaRouteController : public MediaRouteController { ...@@ -235,7 +237,8 @@ class MirroringMediaRouteController : public MediaRouteController {
static MirroringMediaRouteController* From(MediaRouteController* controller); static MirroringMediaRouteController* From(MediaRouteController* controller);
MirroringMediaRouteController(const MediaRoute::Id& route_id, MirroringMediaRouteController(const MediaRoute::Id& route_id,
content::BrowserContext* context); content::BrowserContext* context,
MediaRouter* router);
// MediaRouteController // MediaRouteController
RouteControllerType GetType() const override; RouteControllerType GetType() const override;
......
...@@ -49,7 +49,8 @@ class MediaRouteControllerTest : public ::testing::Test { ...@@ -49,7 +49,8 @@ class MediaRouteControllerTest : public ::testing::Test {
void TearDown() override { observer_.reset(); } void TearDown() override { observer_.reset(); }
virtual scoped_refptr<MediaRouteController> CreateMediaRouteController() { virtual scoped_refptr<MediaRouteController> CreateMediaRouteController() {
return base::MakeRefCounted<MediaRouteController>(kRouteId, &profile_); return base::MakeRefCounted<MediaRouteController>(kRouteId, &profile_,
&router_);
} }
scoped_refptr<MediaRouteController> GetController() const { scoped_refptr<MediaRouteController> GetController() const {
...@@ -67,7 +68,7 @@ class MediaRouteControllerTest : public ::testing::Test { ...@@ -67,7 +68,7 @@ class MediaRouteControllerTest : public ::testing::Test {
content::TestBrowserThreadBundle test_thread_bundle_; content::TestBrowserThreadBundle test_thread_bundle_;
TestingProfile profile_; TestingProfile profile_;
MockMediaRouter* router_ = nullptr; MockMediaRouter router_;
MockEventPageRequestManager* request_manager_ = nullptr; MockEventPageRequestManager* request_manager_ = nullptr;
MockMediaController mock_media_controller_; MockMediaController mock_media_controller_;
mojom::MediaStatusObserverPtr mojo_media_status_observer_; mojom::MediaStatusObserverPtr mojo_media_status_observer_;
...@@ -79,10 +80,6 @@ class MediaRouteControllerTest : public ::testing::Test { ...@@ -79,10 +80,6 @@ class MediaRouteControllerTest : public ::testing::Test {
EventPageRequestManagerFactory::GetInstance()->SetTestingFactoryAndUse( EventPageRequestManagerFactory::GetInstance()->SetTestingFactoryAndUse(
&profile_, &MockEventPageRequestManager::Create)); &profile_, &MockEventPageRequestManager::Create));
request_manager_->set_mojo_connections_ready_for_test(true); request_manager_->set_mojo_connections_ready_for_test(true);
router_ = static_cast<MockMediaRouter*>(
MediaRouterFactory::GetInstance()->SetTestingFactoryAndUse(
&profile_, &MockMediaRouter::Create));
} }
DISALLOW_COPY_AND_ASSIGN(MediaRouteControllerTest); DISALLOW_COPY_AND_ASSIGN(MediaRouteControllerTest);
...@@ -99,8 +96,8 @@ class HangoutsMediaRouteControllerTest : public MediaRouteControllerTest { ...@@ -99,8 +96,8 @@ class HangoutsMediaRouteControllerTest : public MediaRouteControllerTest {
} }
scoped_refptr<MediaRouteController> CreateMediaRouteController() override { scoped_refptr<MediaRouteController> CreateMediaRouteController() override {
return base::MakeRefCounted<HangoutsMediaRouteController>(kRouteId, return base::MakeRefCounted<HangoutsMediaRouteController>(
&profile_); kRouteId, &profile_, &router_);
} }
}; };
...@@ -109,8 +106,8 @@ class MirroringMediaRouteControllerTest : public MediaRouteControllerTest { ...@@ -109,8 +106,8 @@ class MirroringMediaRouteControllerTest : public MediaRouteControllerTest {
~MirroringMediaRouteControllerTest() override {} ~MirroringMediaRouteControllerTest() override {}
scoped_refptr<MediaRouteController> CreateMediaRouteController() override { scoped_refptr<MediaRouteController> CreateMediaRouteController() override {
return base::MakeRefCounted<MirroringMediaRouteController>(kRouteId, return base::MakeRefCounted<MirroringMediaRouteController>(
&profile_); kRouteId, &profile_, &router_);
} }
}; };
...@@ -207,14 +204,14 @@ TEST_F(MediaRouteControllerTest, DestroyControllerOnNoObservers) { ...@@ -207,14 +204,14 @@ TEST_F(MediaRouteControllerTest, DestroyControllerOnNoObservers) {
// Get rid of |observer_| and its reference to the controller. // Get rid of |observer_| and its reference to the controller.
observer_.reset(); observer_.reset();
EXPECT_CALL(*router_, DetachRouteController(kRouteId, controller)).Times(0); EXPECT_CALL(router_, DetachRouteController(kRouteId, controller)).Times(0);
observer1.reset(); observer1.reset();
// DetachRouteController() should be called when the controller no longer // DetachRouteController() should be called when the controller no longer
// has any observers. // has any observers.
EXPECT_CALL(*router_, DetachRouteController(kRouteId, controller)).Times(1); EXPECT_CALL(router_, DetachRouteController(kRouteId, controller)).Times(1);
observer2.reset(); observer2.reset();
EXPECT_TRUE(Mock::VerifyAndClearExpectations(router_)); EXPECT_TRUE(Mock::VerifyAndClearExpectations(&router_));
} }
TEST_F(HangoutsMediaRouteControllerTest, HangoutsCommands) { TEST_F(HangoutsMediaRouteControllerTest, HangoutsCommands) {
......
...@@ -66,20 +66,27 @@ MediaRouterDesktop::GetProviderIdForPresentation( ...@@ -66,20 +66,27 @@ MediaRouterDesktop::GetProviderIdForPresentation(
return MediaRouterMojoImpl::GetProviderIdForPresentation(presentation_id); return MediaRouterMojoImpl::GetProviderIdForPresentation(presentation_id);
} }
MediaRouterDesktop::MediaRouterDesktop(content::BrowserContext* context, MediaRouterDesktop::MediaRouterDesktop(content::BrowserContext* context)
FirewallCheck check_firewall) : MediaRouterMojoImpl(context), weak_factory_(this) {
: MediaRouterMojoImpl(context),
weak_factory_(this) {
InitializeMediaRouteProviders(); InitializeMediaRouteProviders();
#if defined(OS_WIN) #if defined(OS_WIN)
if (check_firewall == FirewallCheck::RUN) {
CanFirewallUseLocalPorts( CanFirewallUseLocalPorts(
base::BindOnce(&MediaRouterDesktop::OnFirewallCheckComplete, base::BindOnce(&MediaRouterDesktop::OnFirewallCheckComplete,
weak_factory_.GetWeakPtr())); weak_factory_.GetWeakPtr()));
}
#endif #endif
} }
MediaRouterDesktop::MediaRouterDesktop(
content::BrowserContext* context,
std::unique_ptr<DialMediaSinkService> dial_media_sink_service,
std::unique_ptr<CastMediaSinkService> cast_media_sink_service)
: MediaRouterMojoImpl(context),
dial_media_sink_service_(std::move(dial_media_sink_service)),
cast_media_sink_service_(std::move(cast_media_sink_service)),
weak_factory_(this) {
InitializeMediaRouteProviders();
}
void MediaRouterDesktop::RegisterMediaRouteProvider( void MediaRouterDesktop::RegisterMediaRouteProvider(
MediaRouteProviderId provider_id, MediaRouteProviderId provider_id,
mojom::MediaRouteProviderPtr media_route_provider_ptr, mojom::MediaRouteProviderPtr media_route_provider_ptr,
......
...@@ -57,16 +57,16 @@ class MediaRouterDesktop : public MediaRouterMojoImpl { ...@@ -57,16 +57,16 @@ class MediaRouterDesktop : public MediaRouterMojoImpl {
friend class MediaRouterFactory; friend class MediaRouterFactory;
FRIEND_TEST_ALL_PREFIXES(MediaRouterDesktopTest, TestProvideSinks); FRIEND_TEST_ALL_PREFIXES(MediaRouterDesktopTest, TestProvideSinks);
enum class FirewallCheck { // This constructor performs a firewall check on Windows and is not suitable
// Skips the firewall check for the benefit of unit tests so they do not // for use in unit tests; instead use the constructor below.
// have to depend on the system's firewall configuration. explicit MediaRouterDesktop(content::BrowserContext* context);
SKIP_FOR_TESTING,
// Perform the firewall check (default). // Used by tests only. This constructor skips the firewall check so unit tests
RUN, // do not have to depend on the system's firewall configuration.
}; MediaRouterDesktop(
content::BrowserContext* context,
MediaRouterDesktop(content::BrowserContext* context, std::unique_ptr<DialMediaSinkService> dial_media_sink_service,
FirewallCheck check_firewall = FirewallCheck::RUN); std::unique_ptr<CastMediaSinkService> cast_media_sink_service);
// mojom::MediaRouter implementation. // mojom::MediaRouter implementation.
void RegisterMediaRouteProvider( void RegisterMediaRouteProvider(
......
...@@ -12,10 +12,14 @@ ...@@ -12,10 +12,14 @@
#include "chrome/browser/media/router/mojo/media_router_desktop.h" #include "chrome/browser/media/router/mojo/media_router_desktop.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/test/scoped_feature_list.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/browser/media/router/discovery/dial/dial_media_sink_service.h"
#include "chrome/browser/media/router/discovery/mdns/cast_media_sink_service.h"
#include "chrome/browser/media/router/event_page_request_manager.h" #include "chrome/browser/media/router/event_page_request_manager.h"
#include "chrome/browser/media/router/event_page_request_manager_factory.h" #include "chrome/browser/media/router/event_page_request_manager_factory.h"
#include "chrome/browser/media/router/media_router_factory.h" #include "chrome/browser/media/router/media_router_factory.h"
#include "chrome/browser/media/router/media_router_feature.h"
#include "chrome/browser/media/router/mojo/media_router_mojo_test.h" #include "chrome/browser/media/router/mojo/media_router_mojo_test.h"
#include "chrome/common/media_router/media_source_helper.h" #include "chrome/common/media_router/media_source_helper.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
...@@ -45,6 +49,31 @@ class NullMessageObserver : public RouteMessageObserver { ...@@ -45,6 +49,31 @@ class NullMessageObserver : public RouteMessageObserver {
final {} final {}
}; };
class MockDialMediaSinkService : public DialMediaSinkService {
public:
explicit MockDialMediaSinkService(content::BrowserContext* context)
: DialMediaSinkService(context) {}
~MockDialMediaSinkService() override {}
MOCK_METHOD3(Start,
void(const OnSinksDiscoveredCallback&,
const OnDialSinkAddedCallback&,
const scoped_refptr<base::SequencedTaskRunner>&));
MOCK_METHOD0(ForceSinkDiscoveryCallback, void());
MOCK_METHOD0(OnUserGesture, void());
};
class MockCastMediaSinkService : public CastMediaSinkService {
public:
explicit MockCastMediaSinkService(content::BrowserContext* context)
: CastMediaSinkService(context) {}
~MockCastMediaSinkService() override {}
MOCK_METHOD1(Start, void(const OnSinksDiscoveredCallback&));
MOCK_METHOD0(ForceSinkDiscoveryCallback, void());
MOCK_METHOD0(OnUserGesture, void());
};
} // namespace } // namespace
class MediaRouterDesktopTest : public MediaRouterMojoTest { class MediaRouterDesktopTest : public MediaRouterMojoTest {
...@@ -53,46 +82,76 @@ class MediaRouterDesktopTest : public MediaRouterMojoTest { ...@@ -53,46 +82,76 @@ class MediaRouterDesktopTest : public MediaRouterMojoTest {
~MediaRouterDesktopTest() override {} ~MediaRouterDesktopTest() override {}
protected: protected:
MediaRouterMojoImpl* SetTestingFactoryAndUse() override { void SetUp() override {
return static_cast<MediaRouterMojoImpl*>( feature_list_.InitWithFeatures(
MediaRouterFactory::GetInstance()->SetTestingFactoryAndUse( {kEnableDialLocalDiscovery, kEnableCastDiscovery}, {});
profile(), &CreateMediaRouter)); MediaRouterMojoTest::SetUp();
}
std::unique_ptr<MediaRouterMojoImpl> CreateMediaRouter() override {
auto dial_media_sink_service =
std::make_unique<MockDialMediaSinkService>(profile());
dial_media_sink_service_ = dial_media_sink_service.get();
EXPECT_CALL(*dial_media_sink_service_, ForceSinkDiscoveryCallback());
auto cast_media_sink_service =
std::make_unique<MockCastMediaSinkService>(profile());
cast_media_sink_service_ = cast_media_sink_service.get();
EXPECT_CALL(*cast_media_sink_service_, ForceSinkDiscoveryCallback());
return std::unique_ptr<MediaRouterDesktop>(
new MediaRouterDesktop(profile(), std::move(dial_media_sink_service),
std::move(cast_media_sink_service)));
} }
private: MockDialMediaSinkService* dial_media_sink_service() const {
static std::unique_ptr<KeyedService> CreateMediaRouter( return dial_media_sink_service_;
content::BrowserContext* context) { }
return std::unique_ptr<KeyedService>(new MediaRouterDesktop(
context, MediaRouterDesktop::FirewallCheck::SKIP_FOR_TESTING)); MockCastMediaSinkService* cast_media_sink_service() const {
return cast_media_sink_service_;
} }
private:
base::test::ScopedFeatureList feature_list_;
MockDialMediaSinkService* dial_media_sink_service_ = nullptr;
MockCastMediaSinkService* cast_media_sink_service_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(MediaRouterDesktopTest);
}; };
#if defined(OS_WIN) #if defined(OS_WIN)
TEST_F(MediaRouterDesktopTest, EnableMdnsAfterEachRegister) { TEST_F(MediaRouterDesktopTest, EnableMdnsAfterEachRegister) {
EXPECT_CALL(mock_extension_provider_, EnableMdnsDiscovery()).Times(0); EXPECT_CALL(mock_extension_provider_, EnableMdnsDiscovery()).Times(0);
EXPECT_CALL(*dial_media_sink_service(), ForceSinkDiscoveryCallback());
EXPECT_CALL(*cast_media_sink_service(), ForceSinkDiscoveryCallback());
RegisterExtensionProvider(); RegisterExtensionProvider();
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
EXPECT_CALL(mock_extension_provider_, EXPECT_CALL(mock_extension_provider_,
UpdateMediaSinks(MediaSourceForDesktop().id())); UpdateMediaSinks(MediaSourceForDesktop().id()));
EXPECT_CALL(mock_extension_provider_, EnableMdnsDiscovery()); EXPECT_CALL(mock_extension_provider_, EnableMdnsDiscovery());
EXPECT_CALL(*dial_media_sink_service(), OnUserGesture());
EXPECT_CALL(*cast_media_sink_service(), OnUserGesture());
router()->OnUserGesture(); router()->OnUserGesture();
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
// EnableMdnsDiscovery() is called on this RegisterExtensionProvider() because // EnableMdnsDiscovery() is called on this RegisterExtensionProvider() because
// we've already seen an mdns-enabling event. // we've already seen an mdns-enabling event.
EXPECT_CALL(mock_extension_provider_, EnableMdnsDiscovery()); EXPECT_CALL(mock_extension_provider_, EnableMdnsDiscovery());
EXPECT_CALL(*dial_media_sink_service(), ForceSinkDiscoveryCallback());
EXPECT_CALL(*cast_media_sink_service(), ForceSinkDiscoveryCallback());
RegisterExtensionProvider(); RegisterExtensionProvider();
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
} }
#endif #endif
TEST_F(MediaRouterDesktopTest, UpdateMediaSinksOnUserGesture) { TEST_F(MediaRouterDesktopTest, OnUserGesture) {
#if defined(OS_WIN) #if defined(OS_WIN)
EXPECT_CALL(mock_extension_provider_, EnableMdnsDiscovery()); EXPECT_CALL(mock_extension_provider_, EnableMdnsDiscovery());
#endif #endif
EXPECT_CALL(mock_extension_provider_, EXPECT_CALL(mock_extension_provider_,
UpdateMediaSinks(MediaSourceForDesktop().id())); UpdateMediaSinks(MediaSourceForDesktop().id()));
EXPECT_CALL(*dial_media_sink_service(), OnUserGesture());
EXPECT_CALL(*cast_media_sink_service(), OnUserGesture());
router()->OnUserGesture(); router()->OnUserGesture();
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
} }
......
...@@ -364,17 +364,18 @@ scoped_refptr<MediaRouteController> MediaRouterMojoImpl::GetRouteController( ...@@ -364,17 +364,18 @@ scoped_refptr<MediaRouteController> MediaRouterMojoImpl::GetRouteController(
<< __func__ << ": route does not support controller: " << route_id; << __func__ << ": route does not support controller: " << route_id;
return nullptr; return nullptr;
case RouteControllerType::kGeneric: case RouteControllerType::kGeneric:
route_controller = new MediaRouteController(route_id, context_); route_controller = new MediaRouteController(route_id, context_, this);
break; break;
case RouteControllerType::kHangouts: case RouteControllerType::kHangouts:
route_controller = new HangoutsMediaRouteController(route_id, context_); route_controller =
new HangoutsMediaRouteController(route_id, context_, this);
break; break;
case RouteControllerType::kMirroring: case RouteControllerType::kMirroring:
// TODO(imcheng): Remove this check when remoting is default enabled. // TODO(imcheng): Remove this check when remoting is default enabled.
route_controller = route_controller =
base::FeatureList::IsEnabled(features::kMediaRemoting) base::FeatureList::IsEnabled(features::kMediaRemoting)
? new MirroringMediaRouteController(route_id, context_) ? new MirroringMediaRouteController(route_id, context_, this)
: new MediaRouteController(route_id, context_); : new MediaRouteController(route_id, context_, this);
break; break;
} }
DCHECK(route_controller); DCHECK(route_controller);
......
...@@ -143,18 +143,12 @@ class MediaRouterMojoImplTest : public MediaRouterMojoTest { ...@@ -143,18 +143,12 @@ class MediaRouterMojoImplTest : public MediaRouterMojoTest {
expected_count); expected_count);
} }
MediaRouterMojoImpl* SetTestingFactoryAndUse() override { std::unique_ptr<MediaRouterMojoImpl> CreateMediaRouter() override {
return static_cast<MediaRouterMojoImpl*>( return std::unique_ptr<MediaRouterMojoImpl>(
MediaRouterFactory::GetInstance()->SetTestingFactoryAndUse( new MediaRouterMojoImpl(profile()));
profile(), &CreateMediaRouter));
} }
private: private:
static std::unique_ptr<KeyedService> CreateMediaRouter(
content::BrowserContext* context) {
return std::unique_ptr<KeyedService>(new MediaRouterMojoImpl(context));
}
base::HistogramTester histogram_tester_; base::HistogramTester histogram_tester_;
}; };
......
...@@ -151,8 +151,9 @@ void MockMediaController::CloseBinding() { ...@@ -151,8 +151,9 @@ void MockMediaController::CloseBinding() {
MockMediaRouteController::MockMediaRouteController( MockMediaRouteController::MockMediaRouteController(
const MediaRoute::Id& route_id, const MediaRoute::Id& route_id,
content::BrowserContext* context) content::BrowserContext* context,
: MediaRouteController(route_id, context) {} MediaRouter* router)
: MediaRouteController(route_id, context, router) {}
MockMediaRouteController::~MockMediaRouteController() {} MockMediaRouteController::~MockMediaRouteController() {}
...@@ -187,7 +188,7 @@ void MediaRouterMojoTest::RegisterWiredDisplayProvider() { ...@@ -187,7 +188,7 @@ void MediaRouterMojoTest::RegisterWiredDisplayProvider() {
} }
void MediaRouterMojoTest::SetUp() { void MediaRouterMojoTest::SetUp() {
media_router_ = SetTestingFactoryAndUse(); media_router_ = CreateMediaRouter();
media_router_->set_instance_id_for_test(kInstanceId); media_router_->set_instance_id_for_test(kInstanceId);
RegisterExtensionProvider(); RegisterExtensionProvider();
media_router_->Initialize(); media_router_->Initialize();
......
...@@ -244,7 +244,8 @@ class MockMediaController : public mojom::MediaController, ...@@ -244,7 +244,8 @@ class MockMediaController : public mojom::MediaController,
class MockMediaRouteController : public MediaRouteController { class MockMediaRouteController : public MediaRouteController {
public: public:
MockMediaRouteController(const MediaRoute::Id& route_id, MockMediaRouteController(const MediaRoute::Id& route_id,
content::BrowserContext* context); content::BrowserContext* context,
MediaRouter* router);
MOCK_METHOD0(Play, void()); MOCK_METHOD0(Play, void());
MOCK_METHOD0(Pause, void()); MOCK_METHOD0(Pause, void());
MOCK_METHOD1(Seek, void(base::TimeDelta time)); MOCK_METHOD1(Seek, void(base::TimeDelta time));
...@@ -277,9 +278,8 @@ class MediaRouterMojoTest : public ::testing::Test { ...@@ -277,9 +278,8 @@ class MediaRouterMojoTest : public ::testing::Test {
void SetUp() override; void SetUp() override;
void TearDown() override; void TearDown() override;
// Set the MediaRouter instance to be used by the MediaRouterFactory and // Creates a MediaRouterMojoImpl instance to be used for this test.
// return it. virtual std::unique_ptr<MediaRouterMojoImpl> CreateMediaRouter() = 0;
virtual MediaRouterMojoImpl* SetTestingFactoryAndUse() = 0;
// Notify media router that the provider provides a route or a sink. // Notify media router that the provider provides a route or a sink.
// Need to be called after the provider is registered. // Need to be called after the provider is registered.
...@@ -308,7 +308,7 @@ class MediaRouterMojoTest : public ::testing::Test { ...@@ -308,7 +308,7 @@ class MediaRouterMojoTest : public ::testing::Test {
const std::string& extension_id() const { return extension_->id(); } const std::string& extension_id() const { return extension_->id(); }
MediaRouterMojoImpl* router() const { return media_router_; } MediaRouterMojoImpl* router() const { return media_router_.get(); }
Profile* profile() { return &profile_; } Profile* profile() { return &profile_; }
...@@ -326,7 +326,7 @@ class MediaRouterMojoTest : public ::testing::Test { ...@@ -326,7 +326,7 @@ class MediaRouterMojoTest : public ::testing::Test {
content::TestBrowserThreadBundle test_thread_bundle_; content::TestBrowserThreadBundle test_thread_bundle_;
scoped_refptr<extensions::Extension> extension_; scoped_refptr<extensions::Extension> extension_;
TestingProfile profile_; TestingProfile profile_;
MediaRouterMojoImpl* media_router_ = nullptr; std::unique_ptr<MediaRouterMojoImpl> media_router_;
mojo::BindingSet<mojom::MediaRouteProvider> provider_bindings_; mojo::BindingSet<mojom::MediaRouteProvider> provider_bindings_;
std::unique_ptr<MediaRoutesObserver> routes_observer_; std::unique_ptr<MediaRoutesObserver> routes_observer_;
std::unique_ptr<MockMediaSinksObserver> sinks_observer_; std::unique_ptr<MockMediaSinksObserver> sinks_observer_;
......
...@@ -207,8 +207,11 @@ class MediaRouterWebUIMessageHandlerTest : public MediaRouterWebUITest { ...@@ -207,8 +207,11 @@ class MediaRouterWebUIMessageHandlerTest : public MediaRouterWebUITest {
return dict_value; return dict_value;
} }
MockMediaRouter* router() { return &router_; }
protected: protected:
std::unique_ptr<content::TestWebUI> web_ui_; std::unique_ptr<content::TestWebUI> web_ui_;
MockMediaRouter router_;
std::unique_ptr<MockMediaRouterUI> mock_media_router_ui_; std::unique_ptr<MockMediaRouterUI> mock_media_router_ui_;
std::unique_ptr<TestMediaRouterWebUIMessageHandler> handler_; std::unique_ptr<TestMediaRouterWebUIMessageHandler> handler_;
const std::string provider_extension_id_; const std::string provider_extension_id_;
...@@ -619,8 +622,8 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, OnRouteDetailsOpenedAndClosed) { ...@@ -619,8 +622,8 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, OnRouteDetailsOpenedAndClosed) {
} }
TEST_F(MediaRouterWebUIMessageHandlerTest, OnMediaCommandsReceived) { TEST_F(MediaRouterWebUIMessageHandlerTest, OnMediaCommandsReceived) {
auto controller = auto controller = base::MakeRefCounted<MockMediaRouteController>(
base::MakeRefCounted<MockMediaRouteController>("routeId", profile()); "routeId", profile(), router());
EXPECT_CALL(*mock_media_router_ui_, GetMediaRouteController()) EXPECT_CALL(*mock_media_router_ui_, GetMediaRouteController())
.WillRepeatedly(Return(controller.get())); .WillRepeatedly(Return(controller.get()));
MediaStatus status; MediaStatus status;
...@@ -657,8 +660,8 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, OnMediaCommandsReceived) { ...@@ -657,8 +660,8 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, OnMediaCommandsReceived) {
} }
TEST_F(MediaRouterWebUIMessageHandlerTest, OnSetMediaRemotingEnabled) { TEST_F(MediaRouterWebUIMessageHandlerTest, OnSetMediaRemotingEnabled) {
auto controller = auto controller = base::MakeRefCounted<MirroringMediaRouteController>(
base::MakeRefCounted<MirroringMediaRouteController>("routeId", profile()); "routeId", profile(), router());
EXPECT_CALL(*mock_media_router_ui_, GetMediaRouteController()) EXPECT_CALL(*mock_media_router_ui_, GetMediaRouteController())
.WillRepeatedly(Return(controller.get())); .WillRepeatedly(Return(controller.get()));
...@@ -669,8 +672,8 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, OnSetMediaRemotingEnabled) { ...@@ -669,8 +672,8 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, OnSetMediaRemotingEnabled) {
} }
TEST_F(MediaRouterWebUIMessageHandlerTest, OnInvalidMediaCommandsReceived) { TEST_F(MediaRouterWebUIMessageHandlerTest, OnInvalidMediaCommandsReceived) {
auto controller = auto controller = base::MakeRefCounted<MockMediaRouteController>(
base::MakeRefCounted<MockMediaRouteController>("routeId", profile()); "routeId", profile(), router());
EXPECT_CALL(*mock_media_router_ui_, GetMediaRouteController()) EXPECT_CALL(*mock_media_router_ui_, GetMediaRouteController())
.WillRepeatedly(Return(controller.get())); .WillRepeatedly(Return(controller.get()));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment