1 // Copyright 2013 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 "base/strings/stringprintf.h" 7 #include "chrome/browser/media/webrtc_browsertest_base.h" 8 #include "chrome/browser/media/webrtc_browsertest_common.h" 9 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/browser_tabstrip.h" 11 #include "chrome/browser/ui/tabs/tab_strip_model.h" 12 #include "chrome/common/chrome_switches.h" 13 #include "chrome/test/base/in_process_browser_test.h" 14 #include "chrome/test/base/ui_test_utils.h" 15 #include "content/public/test/browser_test_utils.h" 16 #include "media/base/media_switches.h" 17 #include "net/test/embedded_test_server/embedded_test_server.h" 18 19 static const char kMainWebrtcTestHtmlPage[] = 20 "/webrtc/webrtc_jsep01_test.html"; 21 22 // Top-level integration test for WebRTC. It always uses fake devices; see 23 // WebRtcWebcamBrowserTest for a test that acquires any real webcam on the 24 // system. 25 class WebRtcBrowserTest : public WebRtcTestBase, 26 public testing::WithParamInterface<bool> { 27 public: 28 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 29 DetectErrorsInJavaScript(); // Look for errors in our rather complex js. 30 } 31 32 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 33 // Ensure the infobar is enabled, since we expect that in this test. 34 EXPECT_FALSE(command_line->HasSwitch(switches::kUseFakeUIForMediaStream)); 35 36 // Always use fake devices. 37 command_line->AppendSwitch(switches::kUseFakeDeviceForMediaStream); 38 39 // Flag used by TestWebAudioMediaStream to force garbage collection. 40 command_line->AppendSwitchASCII(switches::kJavaScriptFlags, "--expose-gc"); 41 } 42 }; 43 44 static const bool kRunTestsWithFlag[] = { false, true }; 45 INSTANTIATE_TEST_CASE_P(WebRtcBrowserTests, 46 WebRtcBrowserTest, 47 testing::ValuesIn(kRunTestsWithFlag)); 48 49 IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest, RunsAudioVideoWebRTCCallInTwoTabs) { 50 if (OnWinXp()) return; 51 52 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 53 54 content::WebContents* left_tab = 55 OpenTestPageAndGetUserMediaInNewTab(kMainWebrtcTestHtmlPage); 56 content::WebContents* right_tab = 57 OpenTestPageAndGetUserMediaInNewTab(kMainWebrtcTestHtmlPage); 58 59 SetupPeerconnectionWithLocalStream(left_tab); 60 SetupPeerconnectionWithLocalStream(right_tab); 61 62 NegotiateCall(left_tab, right_tab); 63 64 StartDetectingVideo(left_tab, "remote-view"); 65 StartDetectingVideo(right_tab, "remote-view"); 66 67 WaitForVideoToPlay(left_tab); 68 WaitForVideoToPlay(right_tab); 69 70 HangUp(left_tab); 71 HangUp(right_tab); 72 } 73 74 IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest, TestWebAudioMediaStream) { 75 // This tests against crash regressions for the WebAudio-MediaStream 76 // integration. 77 if (OnWinXp()) return; 78 79 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 80 GURL url(embedded_test_server()->GetURL("/webrtc/webaudio_crash.html")); 81 ui_test_utils::NavigateToURL(browser(), url); 82 content::WebContents* tab = 83 browser()->tab_strip_model()->GetActiveWebContents(); 84 85 // A sleep is necessary to be able to detect the crash. 86 test::SleepInJavascript(tab, 1000); 87 88 ASSERT_FALSE(tab->IsCrashed()); 89 } 90