1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/command_line.h" 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 7558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/media/webrtc_browsertest_base.h" 8a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "chrome/browser/media/webrtc_browsertest_common.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "media/base/media_switches.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/test/embedded_test_server/embedded_test_server.h" 18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static const char kMainWebrtcTestHtmlPage[] = 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "/webrtc/webrtc_jsep01_test.html"; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Top-level integration test for WebRTC. It always uses fake devices; see 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// WebRtcWebcamBrowserTest for a test that acquires any real webcam on the 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// system. 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass WebRtcBrowserTest : public WebRtcTestBase { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 272385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DetectErrorsInJavaScript(); // Look for errors in our rather complex js. 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Ensure the infobar is enabled, since we expect that in this test. 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(command_line->HasSwitch(switches::kUseFakeUIForMediaStream)); 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Always use fake devices. 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) command_line->AppendSwitch(switches::kUseFakeDeviceForMediaStream); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Flag used by TestWebAudioMediaStream to force garbage collection. 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kJavaScriptFlags, "--expose-gc"); 40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_CHROMEOS) 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// http://crbug.com/396505 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define MAYBE_RunsAudioVideoWebRTCCallInTwoTabs \ 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISABLED_RunsAudioVideoWebRTCCallInTwoTabs 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define MAYBE_RunsAudioVideoWebRTCCallInTwoTabs RunsAudioVideoWebRTCCallInTwoTabs 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebRtcBrowserTest, 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MAYBE_RunsAudioVideoWebRTCCallInTwoTabs) { 52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (OnWinXp()) return; 53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 54424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::WebContents* left_tab = 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OpenTestPageAndGetUserMediaInNewTab(kMainWebrtcTestHtmlPage); 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::WebContents* right_tab = 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OpenTestPageAndGetUserMediaInNewTab(kMainWebrtcTestHtmlPage); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupPeerconnectionWithLocalStream(left_tab); 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupPeerconnectionWithLocalStream(right_tab); 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) NegotiateCall(left_tab, right_tab); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartDetectingVideo(left_tab, "remote-view"); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartDetectingVideo(right_tab, "remote-view"); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WaitForVideoToPlay(left_tab); 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WaitForVideoToPlay(right_tab); 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) HangUp(left_tab); 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) HangUp(right_tab); 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 76116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(WebRtcBrowserTest, TestWebAudioMediaStream) { 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // This tests against crash regressions for the WebAudio-MediaStream 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // integration. 79e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (OnWinXp()) return; 80e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GURL url(embedded_test_server()->GetURL("/webrtc/webaudio_crash.html")); 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) content::WebContents* tab = 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // A sleep is necessary to be able to detect the crash. 88e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch test::SleepInJavascript(tab, 1000); 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_FALSE(tab->IsCrashed()); 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 92