Commit 83241c8d authored by Bin Zhao's avatar Bin Zhao Committed by Commit Bot

[DIAL] Restart timer even if there is not DIAL device

There is a bug that when we switch from network1 to network2, DIAL devices
from network1 stays on MR dialog.

Current implementation will not restart the timer and notify
extension about sink list changes if network2 has no DIAL device.

Fix it by always restart time when we get DIAL device events from
DIAL registry.

Bug: 820215
Change-Id: Ia149778427f142bffbb9ebd61b0de920b7a54289
Reviewed-on: https://chromium-review.googlesource.com/956310Reviewed-by: default avatarDerek Cheng <imcheng@chromium.org>
Commit-Queue: Bin Zhao <zhaobin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#542230}
parent 8ed5395d
......@@ -53,11 +53,12 @@ void DialMediaSinkServiceImpl::Start() {
base::BindRepeating(&DialMediaSinkServiceImpl::OnAppInfoParseCompleted,
base::Unretained(this)));
MediaSinkServiceBase::StartTimer();
dial_registry_ =
test_dial_registry_ ? test_dial_registry_ : DialRegistry::GetInstance();
dial_registry_->RegisterObserver(this);
dial_registry_->OnListenerAdded();
MediaSinkServiceBase::StartTimer();
}
void DialMediaSinkServiceImpl::OnUserGesture() {
......@@ -127,6 +128,9 @@ void DialMediaSinkServiceImpl::OnDialDeviceEvent(
current_devices_ = devices;
description_service_->GetDeviceDescriptions(devices);
// Makes sure the timer fires even if there is no device.
MediaSinkServiceBase::RestartTimer();
}
void DialMediaSinkServiceImpl::OnDialError(DialRegistry::DialErrorCode type) {
......
......@@ -84,7 +84,10 @@ class DialMediaSinkServiceImpl : public MediaSinkServiceBase,
friend class DialMediaSinkServiceImplTest;
friend class MockDialMediaSinkServiceImpl;
FRIEND_TEST_ALL_PREFIXES(DialMediaSinkServiceImplTest, TestStart);
FRIEND_TEST_ALL_PREFIXES(DialMediaSinkServiceImplTest, TestTimer);
FRIEND_TEST_ALL_PREFIXES(DialMediaSinkServiceImplTest,
TestOnDeviceDescriptionRestartsTimer);
FRIEND_TEST_ALL_PREFIXES(DialMediaSinkServiceImplTest,
TestOnDialDeviceEventRestartsTimer);
FRIEND_TEST_ALL_PREFIXES(DialMediaSinkServiceImplTest,
TestOnDeviceDescriptionAvailable);
FRIEND_TEST_ALL_PREFIXES(DialMediaSinkServiceImplTest,
......
......@@ -166,7 +166,7 @@ TEST_F(DialMediaSinkServiceImplTest,
}
}
TEST_F(DialMediaSinkServiceImplTest, TestTimer) {
TEST_F(DialMediaSinkServiceImplTest, TestOnDeviceDescriptionRestartsTimer) {
DialDeviceData device_data("first", GURL("http://127.0.0.1/dd.xml"),
base::Time::Now());
ParsedDialDeviceDescription device_description;
......@@ -196,6 +196,32 @@ TEST_F(DialMediaSinkServiceImplTest, TestTimer) {
EXPECT_TRUE(mock_timer_->IsRunning());
}
TEST_F(DialMediaSinkServiceImplTest, TestOnDialDeviceEventRestartsTimer) {
MediaSinkInternal dial_sink = CreateDialSink(1);
media_sink_service_->current_sinks_.insert_or_assign(dial_sink.sink().id(),
dial_sink);
EXPECT_CALL(mock_sink_discovered_cb_, Run(_));
media_sink_service_->OnDiscoveryComplete();
EXPECT_FALSE(mock_timer_->IsRunning());
EXPECT_CALL(*mock_description_service_,
GetDeviceDescriptions(std::vector<DialDeviceData>()));
media_sink_service_->OnDialDeviceEvent(std::vector<DialDeviceData>());
EXPECT_TRUE(mock_timer_->IsRunning());
EXPECT_CALL(mock_sink_discovered_cb_, Run(std::vector<MediaSinkInternal>()));
mock_timer_->Fire();
EXPECT_CALL(*mock_description_service_,
GetDeviceDescriptions(std::vector<DialDeviceData>()));
media_sink_service_->OnDialDeviceEvent(std::vector<DialDeviceData>());
EXPECT_TRUE(mock_timer_->IsRunning());
EXPECT_CALL(mock_sink_discovered_cb_, Run(_)).Times(0);
mock_timer_->Fire();
}
TEST_F(DialMediaSinkServiceImplTest, OnDialSinkAddedCallback) {
DialDeviceData device_data1("first", GURL("http://127.0.0.1/dd.xml"),
base::Time::Now());
......
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