Home | History | Annotate | Download | only in media
      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