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

Unified Diff: chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc

Issue 1132903002: [MediaRouter] Add implementation of PresentationServiceDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addresses Wez's comments Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc
diff --git a/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc b/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d734d0e9cbdce02d9a29b68dfb2391d5b385f43c
--- /dev/null
+++ b/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc
@@ -0,0 +1,164 @@
+// 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 <vector>
+
+#include "base/strings/stringprintf.h"
+#include "chrome/browser/media/router/media_source.h"
+#include "chrome/browser/media/router/media_source_helper.h"
+#include "chrome/browser/media/router/mock_media_router.h"
+#include "chrome/browser/media/router/mock_screen_availability_listener.h"
+#include "chrome/browser/media/router/presentation_service_delegate_impl.h"
+#include "chrome/grit/generated_resources.h"
+#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "content/public/browser/presentation_screen_availability_listener.h"
+#include "content/public/browser/presentation_session.h"
+#include "content/public/browser/render_process_host.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/web_contents_tester.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "ui/base/l10n/l10n_util.h"
+
+using ::testing::_;
+using ::testing::Mock;
+using ::testing::Return;
+using ::testing::StrictMock;
+
+namespace media_router {
+
+class MockDelegateObserver
+ : public content::PresentationServiceDelegate::Observer {
+ public:
+ MOCK_METHOD0(OnDelegateDestroyed, void());
+ MOCK_METHOD1(OnDefaultPresentationStarted,
+ void(const content::PresentationSessionInfo&));
+};
+
+class PresentationServiceDelegateImplTest
mark a. foltz 2015/06/01 19:18:13 Please ensure there is test coverage for: - Updati
haibinlu 2015/06/01 21:44:58 Done.
+ : public ChromeRenderViewHostTestHarness {
+ public:
+ void SetUp() override {
+ ChromeRenderViewHostTestHarness::SetUp();
+ content::WebContents* wc = web_contents();
+ ASSERT_TRUE(wc);
+ PresentationServiceDelegateImpl::CreateForWebContents(wc);
+ delegate_impl_ = PresentationServiceDelegateImpl::FromWebContents(wc);
+ delegate_impl_->SetMediaRouterForTest(&router_);
+ }
+
+ PresentationServiceDelegateImpl* delegate_impl_;
+ MockMediaRouter router_;
+};
+
+TEST_F(PresentationServiceDelegateImplTest, AddScreenAvailabilityListener) {
+ std::string presentation_url1("http://url1");
+ std::string presentation_url2("http://url2");
+ MediaSource source1 = MediaSourceForPresentationUrl(presentation_url1);
+ MediaSource source2 = MediaSourceForPresentationUrl(presentation_url2);
+ MockScreenAvailabilityListener listener1(presentation_url1);
+ MockScreenAvailabilityListener listener2(presentation_url2);
+ int render_process_id = 10;
+ int render_frame_id1 = 1;
+ int render_frame_id2 = 2;
+
+ EXPECT_CALL(router_, RegisterMediaSinksObserver(_))
+ .Times(2)
+ .WillRepeatedly(Return(true));
+ EXPECT_TRUE(delegate_impl_->AddScreenAvailabilityListener(
+ render_process_id, render_frame_id1, &listener1));
+ EXPECT_TRUE(delegate_impl_->AddScreenAvailabilityListener(
+ render_process_id, render_frame_id2, &listener2));
+ EXPECT_TRUE(delegate_impl_->HasScreenAvailabilityListenerForTest(
+ render_process_id, render_frame_id1, source1.id()))
+ << "Mapping not found for " << source1.ToString();
+ EXPECT_TRUE(delegate_impl_->HasScreenAvailabilityListenerForTest(
+ render_process_id, render_frame_id2, source2.id()))
+ << "Mapping not found for " << source2.ToString();
+
+ EXPECT_CALL(router_, UnregisterMediaSinksObserver(_)).Times(2);
+ delegate_impl_->RemoveScreenAvailabilityListener(
+ render_process_id, render_frame_id1, &listener1);
+ delegate_impl_->RemoveScreenAvailabilityListener(
+ render_process_id, render_frame_id2, &listener2);
+ EXPECT_FALSE(delegate_impl_->HasScreenAvailabilityListenerForTest(
+ render_process_id, render_frame_id1, source1.id()));
+ EXPECT_FALSE(delegate_impl_->HasScreenAvailabilityListenerForTest(
+ render_process_id, render_frame_id2, source2.id()));
+}
+
+TEST_F(PresentationServiceDelegateImplTest, AddSameListenerTwice) {
+ std::string presentation_url1("http://url1");
+ MediaSource source1(MediaSourceForPresentationUrl(presentation_url1));
+ MockScreenAvailabilityListener listener1(presentation_url1);
+ int render_process_id = 1;
+ int render_frame_id = 0;
+
+ EXPECT_CALL(router_, RegisterMediaSinksObserver(_))
+ .Times(1)
+ .WillRepeatedly(Return(true));
+ EXPECT_TRUE(delegate_impl_->AddScreenAvailabilityListener(
+ render_process_id, render_frame_id, &listener1));
+ EXPECT_FALSE(delegate_impl_->AddScreenAvailabilityListener(
+ render_process_id, render_frame_id, &listener1));
+ EXPECT_TRUE(delegate_impl_->HasScreenAvailabilityListenerForTest(
+ render_process_id, render_frame_id, source1.id()));
+
+ EXPECT_CALL(router_, UnregisterMediaSinksObserver(_)).Times(1);
+ delegate_impl_->RemoveScreenAvailabilityListener(render_process_id,
+ render_frame_id, &listener1);
+ EXPECT_FALSE(delegate_impl_->HasScreenAvailabilityListenerForTest(
+ render_process_id, render_frame_id, source1.id()));
+}
+
+TEST_F(PresentationServiceDelegateImplTest, SetDefaultPresentationUrl) {
+ content::WebContentsTester::For(web_contents())
+ ->NavigateAndCommit(GURL("http://www.google.com"));
+ content::RenderFrameHost* main_frame = web_contents()->GetMainFrame();
+ ASSERT_TRUE(main_frame);
+
+ int render_process_id = main_frame->GetProcess()->GetID();
+ int routing_id = main_frame->GetRoutingID();
+ std::string presentation_url("http://foo");
+ delegate_impl_->SetDefaultPresentationUrl(
+ render_process_id, routing_id, presentation_url, "defaultPresentationId");
+ EXPECT_TRUE(delegate_impl_->default_source().Equals(
+ MediaSourceForPresentationUrl(presentation_url)));
+}
+
+TEST_F(PresentationServiceDelegateImplTest, Reset) {
+ std::string presentation_url1("http://url1");
+ MediaSource source = MediaSourceForPresentationUrl(presentation_url1);
+ MockScreenAvailabilityListener listener1(presentation_url1);
+ int render_process_id = 1;
+ int render_frame_id = 0;
+
+ EXPECT_TRUE(delegate_impl_->AddScreenAvailabilityListener(
+ render_process_id, render_frame_id, &listener1));
+ EXPECT_TRUE(delegate_impl_->HasScreenAvailabilityListenerForTest(
+ render_process_id, render_frame_id, source.id()));
+ EXPECT_CALL(router_, UnregisterMediaSinksObserver(_)).Times(1);
+ delegate_impl_->Reset(render_process_id, render_frame_id);
+ EXPECT_FALSE(delegate_impl_->HasScreenAvailabilityListenerForTest(
+ render_process_id, render_frame_id, source.id()));
+}
+
+TEST_F(PresentationServiceDelegateImplTest, DelegateObservers) {
+ scoped_ptr<PresentationServiceDelegateImpl> manager(
+ new PresentationServiceDelegateImpl(web_contents()));
+ manager->SetMediaRouterForTest(&router_);
+
+ StrictMock<MockDelegateObserver> delegate_observer1;
+ StrictMock<MockDelegateObserver> delegate_observer2;
+
+ manager->AddObserver(123, 234, &delegate_observer1);
+ manager->AddObserver(345, 456, &delegate_observer2);
+
+ // Removes |delegate_observer2|.
+ manager->RemoveObserver(345, 456);
+
+ EXPECT_CALL(delegate_observer1, OnDelegateDestroyed()).Times(1);
+ manager.reset();
+}
+
+} // namespace media_router

Powered by Google App Engine
This is Rietveld 408576698