OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "base/command_line.h" |
| 6 #include "chrome/browser/media/router/media_router_impl.h" |
| 7 #include "chrome/browser/media/router/mock_media_router.h" |
| 8 #include "chrome/browser/media/router/mock_screen_availability_listener.h" |
| 9 #include "chrome/browser/media/router/presentation_service_delegate_impl.h" |
| 10 #include "chrome/browser/ui/browser_commands.h" |
| 11 #include "chrome/browser/ui/browser_finder.h" |
| 12 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 13 #include "chrome/browser/ui/webui/media_router/media_router_ui.h" |
| 14 #include "chrome/common/chrome_switches.h" |
| 15 #include "chrome/test/base/in_process_browser_test.h" |
| 16 #include "chrome/test/base/ui_test_utils.h" |
| 17 #include "content/public/browser/navigation_details.h" |
| 18 #include "content/public/browser/render_process_host.h" |
| 19 #include "content/public/common/url_constants.h" |
| 20 #include "content/public/test/browser_test.h" |
| 21 #include "content/public/test/browser_test_utils.h" |
| 22 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 23 |
| 24 using ::testing::_; |
| 25 using ::testing::Return; |
| 26 |
| 27 namespace media_router { |
| 28 |
| 29 namespace { |
| 30 const char kTestingPage[] = "/empty.html"; |
| 31 } |
| 32 |
| 33 using content::WebContents; |
| 34 using content::RenderFrameHost; |
| 35 |
| 36 class PresentationServiceDelegateImplBrowserTest : public InProcessBrowserTest { |
| 37 public: |
| 38 PresentationServiceDelegateImplBrowserTest() { |
| 39 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 40 switches::kEnableMediaRouter); |
| 41 } |
| 42 ~PresentationServiceDelegateImplBrowserTest() override {} |
| 43 |
| 44 void SetUpOnMainThread() override { |
| 45 InProcessBrowserTest::SetUpOnMainThread(); |
| 46 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 47 |
| 48 WebContents* web_contents = |
| 49 browser()->tab_strip_model()->GetActiveWebContents(); |
| 50 ASSERT_TRUE(web_contents); |
| 51 |
| 52 source_manager_ = |
| 53 PresentationServiceDelegateImpl::FromWebContents(web_contents); |
| 54 ASSERT_TRUE(source_manager_); |
| 55 |
| 56 // TODO(imcheng): Should probably stub out the MediaRouteProviderManagerHost |
| 57 // instead of MediaRouter in browser tests. |
| 58 source_manager_->SetMediaRouterForTest(&router_); |
| 59 } |
| 60 |
| 61 void TearDown() override { InProcessBrowserTest::TearDown(); } |
| 62 |
| 63 PresentationServiceDelegateImpl* source_manager_; |
| 64 MockMediaRouter router_; |
| 65 |
| 66 private: |
| 67 DISALLOW_COPY_AND_ASSIGN(PresentationServiceDelegateImplBrowserTest); |
| 68 }; |
| 69 |
| 70 // Test disabled for now since currently there is currently no way to |
| 71 // trigger the creation of PresentationServiceImpl on the RenderFrameHost from |
| 72 // here. It is lazily initialized via mojo from PresentationDispatcher on |
| 73 // renderer process. |
| 74 // TODO(imcheng): Re-enable this test when we find a way to trigger the |
| 75 // instantiation of PresentationServiceImpl. |
| 76 IN_PROC_BROWSER_TEST_F(PresentationServiceDelegateImplBrowserTest, |
| 77 DISABLED_RemoveObserversOnNavigation) { |
| 78 WebContents* web_contents = |
| 79 browser()->tab_strip_model()->GetActiveWebContents(); |
| 80 RenderFrameHost* rfh = web_contents->GetMainFrame(); |
| 81 ASSERT_TRUE(rfh); |
| 82 |
| 83 GURL gurl = embedded_test_server()->GetURL(kTestingPage); |
| 84 |
| 85 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), gurl, 1); |
| 86 |
| 87 MockScreenAvailabilityListener mock_listener1("http://fooUrl"); |
| 88 MockScreenAvailabilityListener mock_listener2("http://barUrl"); |
| 89 |
| 90 PresentationServiceDelegateImpl::RenderFrameHostId rfh_id( |
| 91 PresentationServiceDelegateImpl::GetRenderFrameHostId( |
| 92 web_contents->GetMainFrame())); |
| 93 EXPECT_CALL(router_, RegisterMediaSinksObserver(_)) |
| 94 .Times(2) |
| 95 .WillRepeatedly(Return(true)); |
| 96 EXPECT_TRUE(source_manager_->AddScreenAvailabilityListener( |
| 97 rfh_id.first, rfh_id.second, &mock_listener1)); |
| 98 EXPECT_TRUE(source_manager_->AddScreenAvailabilityListener( |
| 99 rfh_id.first, rfh_id.second, &mock_listener2)); |
| 100 |
| 101 const auto& observers = source_manager_->observers_; |
| 102 auto it = observers.find(rfh_id); |
| 103 ASSERT_TRUE(it != observers.end()); |
| 104 EXPECT_EQ(2u, it->second.size()); |
| 105 |
| 106 // In-page navigation; should not unregister observers. |
| 107 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( |
| 108 browser(), GURL(gurl.spec() + "#blah"), 1); |
| 109 it = observers.find(rfh_id); |
| 110 ASSERT_TRUE(it != observers.end()); |
| 111 EXPECT_EQ(2u, it->second.size()); |
| 112 |
| 113 EXPECT_CALL(router_, UnregisterMediaSinksObserver(_)).Times(2); |
| 114 // Navigating away should cause registered observers to be removed. |
| 115 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( |
| 116 browser(), GURL("about:blank"), 1); |
| 117 it = observers.find(rfh_id); |
| 118 EXPECT_TRUE(it == observers.end()); |
| 119 } |
| 120 |
| 121 } // namespace media_router |
OLD | NEW |