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:
SetUpInProcessBrowserTestFixture()28 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
29 DetectErrorsInJavaScript(); // Look for errors in our rather complex js.
30 }
31
SetUpCommandLine(CommandLine * command_line)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
IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest,RunsAudioVideoWebRTCCallInTwoTabs)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
IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest,TestWebAudioMediaStream)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