Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(163)

Side by Side Diff: chrome/browser/media/chrome_webrtc_apprtc_browsertest.cc

Issue 111383003: Creates a basic Firefox - Chrome WebRTC interop test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Correcting launcher check Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/path_service.h" 6 #include "base/path_service.h"
7 #include "base/process/launch.h" 7 #include "base/process/launch.h"
8 #include "base/rand_util.h" 8 #include "base/rand_util.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/win/windows_version.h" 10 #include "base/win/windows_version.h"
(...skipping 15 matching lines...) Expand all
26 const char kAdviseOnGclientSolution[] = 26 const char kAdviseOnGclientSolution[] =
27 "You need to add this solution to your .gclient to run this test:\n" 27 "You need to add this solution to your .gclient to run this test:\n"
28 "{\n" 28 "{\n"
29 " \"name\" : \"webrtc.DEPS\",\n" 29 " \"name\" : \"webrtc.DEPS\",\n"
30 " \"url\" : \"svn://svn.chromium.org/chrome/trunk/deps/" 30 " \"url\" : \"svn://svn.chromium.org/chrome/trunk/deps/"
31 "third_party/webrtc/webrtc.DEPS\",\n" 31 "third_party/webrtc/webrtc.DEPS\",\n"
32 "}"; 32 "}";
33 const char kTitlePageOfAppEngineAdminPage[] = "Instances"; 33 const char kTitlePageOfAppEngineAdminPage[] = "Instances";
34 34
35 35
36 // WebRTC-AppRTC integration test. Requires a real webcam and microphone 36 // WebRTC-AppRTC integration test. Requires a real webcam and microphone
kjellander_chromium 2013/12/13 10:19:11 Please clarify that for the Firefox-Chrome test, t
phoglund_chromium 2013/12/13 14:35:10 Done.
37 // on the running system. This test is not meant to run in the main browser 37 // on the running system. This test is not meant to run in the main browser
38 // test suite since normal tester machines do not have webcams. 38 // test suite since normal tester machines do not have webcams.
39 // 39 //
40 // This test will bring up a AppRTC instance on localhost and verify that the 40 // This test will bring up a AppRTC instance on localhost and verify that the
41 // call gets up when connecting to the same room from two tabs in a browser. 41 // call gets up when connecting to the same room from two tabs in a browser.
42 class WebrtcApprtcBrowserTest : public WebRtcTestBase { 42 class WebrtcApprtcBrowserTest : public WebRtcTestBase {
43 public: 43 public:
44 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 44 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
45 EXPECT_FALSE(command_line->HasSwitch( 45 EXPECT_FALSE(command_line->HasSwitch(switches::kUseFakeUIForMediaStream));
46 switches::kUseFakeDeviceForMediaStream));
47 EXPECT_FALSE(command_line->HasSwitch(
48 switches::kUseFakeUIForMediaStream));
49 46
50 // The video playback will not work without a GPU, so force its use here. 47 // The video playback will not work without a GPU, so force its use here.
51 command_line->AppendSwitch(switches::kUseGpuInTests); 48 command_line->AppendSwitch(switches::kUseGpuInTests);
52 } 49 }
53 50
54 protected: 51 protected:
55 bool LaunchApprtcInstanceOnLocalhost() { 52 bool LaunchApprtcInstanceOnLocalhost() {
56 base::FilePath appengine_dev_appserver = 53 base::FilePath appengine_dev_appserver =
57 GetSourceDir().Append( 54 GetSourceDir().Append(
58 FILE_PATH_LITERAL("../google_appengine/dev_appserver.py")); 55 FILE_PATH_LITERAL("../google_appengine/dev_appserver.py"));
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 "window.domAutomationController.send(remoteVideo.style.opacity)"; 106 "window.domAutomationController.send(remoteVideo.style.opacity)";
110 return PollingWaitUntil(javascript, "1", tab_contents); 107 return PollingWaitUntil(javascript, "1", tab_contents);
111 } 108 }
112 109
113 base::FilePath GetSourceDir() { 110 base::FilePath GetSourceDir() {
114 base::FilePath source_dir; 111 base::FilePath source_dir;
115 PathService::Get(base::DIR_SOURCE_ROOT, &source_dir); 112 PathService::Get(base::DIR_SOURCE_ROOT, &source_dir);
116 return source_dir; 113 return source_dir;
117 } 114 }
118 115
116 bool LaunchFirefoxWithUrl(const GURL& url) {
117 base::FilePath firefox_binary =
118 GetSourceDir().Append(
119 FILE_PATH_LITERAL("../firefox-nightly/firefox/firefox"));
tommi (sloooow) - chröme 2013/12/12 18:41:33 Add each path component separately for cross platf
phoglund_chromium 2013/12/13 14:35:10 I can do that, but it will _work_ like this. For i
tommi (sloooow) - chröme 2013/12/13 14:51:26 OK, if Append takes care of this then it's fine as
120 if (!base::PathExists(firefox_binary)) {
121 LOG(ERROR) << "Missing firefox binary at " <<
122 firefox_binary.value() << ". " << kAdviseOnGclientSolution;
123 return false;
124 }
125 base::FilePath firefox_launcher =
126 GetSourceDir().Append(
127 FILE_PATH_LITERAL("../webrtc.DEPS/run_firefox_webrtc.py"));
128 if (!base::PathExists(firefox_launcher)) {
129 LOG(ERROR) << "Missing firefox launcher at " <<
130 firefox_launcher.value() << ". " << kAdviseOnGclientSolution;
131 return false;
132 }
133
134 CommandLine command_line(firefox_launcher);
135 command_line.AppendSwitchPath("--binary", firefox_binary);
136 command_line.AppendSwitchASCII("--webpage", url.spec());
137
138 VLOG(0) << "Running " << command_line.GetCommandLineString();
tommi (sloooow) - chröme 2013/12/12 19:52:05 forgot one thing - VLOG(0) is apparently frowned u
phoglund_chromium 2013/12/13 14:35:10 Done.
139 return base::LaunchProcess(command_line, base::LaunchOptions(),
kjellander_chromium 2013/12/13 10:19:11 What happens if there's no webcam available for Fi
phoglund_chromium 2013/12/13 14:35:10 Don't know, I guess gUM will fail there and the ca
140 &firefox_);
141
142 return true;
143 }
144
145 bool StopFirefox() {
146 return base::KillProcess(firefox_, 0, false);
kjellander_chromium 2013/12/13 10:19:11 Is there some way we can check if firefox crashed
tommi (sloooow) - chröme 2013/12/13 12:21:31 Can we find a better way to close Firefox? Killing
phoglund_chromium 2013/12/13 14:35:10 I can't see any easy portable way of doing that un
phoglund_chromium 2013/12/13 14:35:10 It will shut down cleanly on Linux, because I hook
tommi (sloooow) - chröme 2013/12/13 14:51:26 Signals like that don't exist on Windows unfortuna
phoglund_chromium 2013/12/13 15:13:35 Nope, you are right, I actually tried it and regis
tommi (sloooow) - chröme 2013/12/13 15:22:30 Sounds good. Can you add a note explaining that a
147 }
148
119 private: 149 private:
120 base::ProcessHandle dev_appserver_; 150 base::ProcessHandle dev_appserver_;
151 base::ProcessHandle firefox_;
121 }; 152 };
122 153
123 IN_PROC_BROWSER_TEST_F(WebrtcApprtcBrowserTest, MANUAL_WorksOnApprtc) { 154 IN_PROC_BROWSER_TEST_F(WebrtcApprtcBrowserTest, MANUAL_WorksOnApprtc) {
124 // TODO(mcasas): Remove Win version filtering when this bug gets fixed: 155 // TODO(mcasas): Remove Win version filtering when this bug gets fixed:
125 // http://code.google.com/p/webrtc/issues/detail?id=2703 156 // http://code.google.com/p/webrtc/issues/detail?id=2703
126 #if defined(OS_WIN) 157 #if defined(OS_WIN)
127 if (base::win::GetVersion() < base::win::VERSION_VISTA) 158 if (base::win::GetVersion() < base::win::VERSION_VISTA)
128 return; 159 return;
129 #endif 160 #endif
130 DetectErrorsInJavaScript(); 161 DetectErrorsInJavaScript();
(...skipping 10 matching lines...) Expand all
141 // http://code.google.com/p/webrtc/issues/detail?id=1742 172 // http://code.google.com/p/webrtc/issues/detail?id=1742
142 SleepInJavascript(left_tab, 5000); 173 SleepInJavascript(left_tab, 5000);
143 chrome::AddTabAt(browser(), GURL(), -1, true); 174 chrome::AddTabAt(browser(), GURL(), -1, true);
144 content::WebContents* right_tab = OpenPageAndAcceptUserMedia(room_url); 175 content::WebContents* right_tab = OpenPageAndAcceptUserMedia(room_url);
145 176
146 ASSERT_TRUE(WaitForCallToComeUp(left_tab)); 177 ASSERT_TRUE(WaitForCallToComeUp(left_tab));
147 ASSERT_TRUE(WaitForCallToComeUp(right_tab)); 178 ASSERT_TRUE(WaitForCallToComeUp(right_tab));
148 179
149 ASSERT_TRUE(StopApprtcInstance()); 180 ASSERT_TRUE(StopApprtcInstance());
150 } 181 }
182
183 IN_PROC_BROWSER_TEST_F(WebrtcApprtcBrowserTest,
184 MANUAL_FirefoxApprtcInteropTest) {
185 ASSERT_TRUE(LaunchApprtcInstanceOnLocalhost());
kjellander_chromium 2013/12/13 10:19:11 I think we want to skip this on Vista as well, as
kjellander_chromium 2013/12/13 10:19:11 Add DetectErrorsInJavaScript(); since communicatin
phoglund_chromium 2013/12/13 14:35:10 You mean skip it on XP? Yeah, probably. Actually I
phoglund_chromium 2013/12/13 14:35:10 Done.
186 while (!LocalApprtcInstanceIsUp())
187 VLOG(0) << "Waiting for AppRTC to come up...";
tommi (sloooow) - chröme 2013/12/12 19:52:05 would be nice to change all the VLOG(0)'s to VLOG(
phoglund_chromium 2013/12/13 14:35:10 Done.
188
189 // Run Chrome with a fake device to avoid having the browsers fight over the
190 // camera (we'll just give that to firefox here).
191 CommandLine::ForCurrentProcess()->AppendSwitch(
192 switches::kUseFakeDeviceForMediaStream);
193
194 GURL room_url = GURL(base::StringPrintf("http://localhost:9999?r=room_%d",
195 base::RandInt(0, 65536)));
kjellander_chromium 2013/12/13 10:19:11 Do we really need to randomize this? I would be su
phoglund_chromium 2013/12/13 14:35:10 Yeah, this test can't execute in parallel, but it
tommi (sloooow) - chröme 2013/12/13 14:51:26 The room number could also be the thread id. As i
kjellander_chromium 2013/12/13 14:53:21 Fair enough, as we don't run these tests in parall
196 content::WebContents* chrome_tab = OpenPageAndAcceptUserMedia(room_url);
197
198 // TODO(phoglund): Remove when this bug gets fixed:
199 // http://code.google.com/p/webrtc/issues/detail?id=1742
200 SleepInJavascript(chrome_tab, 5000);
201
202 ASSERT_TRUE(LaunchFirefoxWithUrl(room_url));
203
204 ASSERT_TRUE(WaitForCallToComeUp(chrome_tab));
tommi (sloooow) - chröme 2013/12/12 18:41:33 EXPECT_TRUE so that the next line will be run. Fi
phoglund_chromium 2013/12/13 14:35:10 I think it's good to return early if we have alrea
205 ASSERT_TRUE(StopFirefox());
kjellander_chromium 2013/12/13 10:19:11 Add ASSERT_TRUE(StopApprtcInstance()); after stop
phoglund_chromium 2013/12/13 14:35:10 Done.
206 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698