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 19static 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. 25class 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 50IN_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 76IN_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