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: 27 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 28 DetectErrorsInJavaScript(); // Look for errors in our rather complex js. 29 } 30 31 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 32 // Ensure the infobar is enabled, since we expect that in this test. 33 EXPECT_FALSE(command_line->HasSwitch(switches::kUseFakeUIForMediaStream)); 34 35 // Always use fake devices. 36 command_line->AppendSwitch(switches::kUseFakeDeviceForMediaStream); 37 38 // Flag used by TestWebAudioMediaStream to force garbage collection. 39 command_line->AppendSwitchASCII(switches::kJavaScriptFlags, "--expose-gc"); 40 } 41 }; 42 43 #if defined(OS_WIN) || defined(OS_CHROMEOS) 44 // http://crbug.com/396505 45 #define MAYBE_RunsAudioVideoWebRTCCallInTwoTabs \ 46 DISABLED_RunsAudioVideoWebRTCCallInTwoTabs 47 #else 48 #define MAYBE_RunsAudioVideoWebRTCCallInTwoTabs RunsAudioVideoWebRTCCallInTwoTabs 49 #endif 50 IN_PROC_BROWSER_TEST_F(WebRtcBrowserTest, 51 MAYBE_RunsAudioVideoWebRTCCallInTwoTabs) { 52 if (OnWinXp()) return; 53 54 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 55 56 content::WebContents* left_tab = 57 OpenTestPageAndGetUserMediaInNewTab(kMainWebrtcTestHtmlPage); 58 content::WebContents* right_tab = 59 OpenTestPageAndGetUserMediaInNewTab(kMainWebrtcTestHtmlPage); 60 61 SetupPeerconnectionWithLocalStream(left_tab); 62 SetupPeerconnectionWithLocalStream(right_tab); 63 64 NegotiateCall(left_tab, right_tab); 65 66 StartDetectingVideo(left_tab, "remote-view"); 67 StartDetectingVideo(right_tab, "remote-view"); 68 69 WaitForVideoToPlay(left_tab); 70 WaitForVideoToPlay(right_tab); 71 72 HangUp(left_tab); 73 HangUp(right_tab); 74 } 75 76 IN_PROC_BROWSER_TEST_F(WebRtcBrowserTest, TestWebAudioMediaStream) { 77 // This tests against crash regressions for the WebAudio-MediaStream 78 // integration. 79 if (OnWinXp()) return; 80 81 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 82 GURL url(embedded_test_server()->GetURL("/webrtc/webaudio_crash.html")); 83 ui_test_utils::NavigateToURL(browser(), url); 84 content::WebContents* tab = 85 browser()->tab_strip_model()->GetActiveWebContents(); 86 87 // A sleep is necessary to be able to detect the crash. 88 test::SleepInJavascript(tab, 1000); 89 90 ASSERT_FALSE(tab->IsCrashed()); 91 } 92