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

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

Issue 20247003: Introduced base class for WebRTC browser tests, cleaned up duplication. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 months 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
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/environment.h" 5 #include "base/environment.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "base/path_service.h" 7 #include "base/path_service.h"
8 #include "base/process/launch.h" 8 #include "base/process/launch.h"
9 #include "base/strings/string_split.h" 9 #include "base/strings/string_split.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
11 #include "base/test/test_timeouts.h" 11 #include "base/test/test_timeouts.h"
12 #include "base/time/time.h" 12 #include "base/time/time.h"
13 #include "chrome/browser/chrome_notification_types.h" 13 #include "chrome/browser/chrome_notification_types.h"
14 #include "chrome/browser/infobars/infobar.h" 14 #include "chrome/browser/infobars/infobar.h"
15 #include "chrome/browser/infobars/infobar_service.h" 15 #include "chrome/browser/infobars/infobar_service.h"
16 #include "chrome/browser/media/media_stream_infobar_delegate.h" 16 #include "chrome/browser/media/media_stream_infobar_delegate.h"
17 #include "chrome/browser/media/webrtc_browsertest_base.h"
17 #include "chrome/browser/media/webrtc_browsertest_common.h" 18 #include "chrome/browser/media/webrtc_browsertest_common.h"
18 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/ui/browser.h" 20 #include "chrome/browser/ui/browser.h"
20 #include "chrome/browser/ui/browser_tabstrip.h" 21 #include "chrome/browser/ui/browser_tabstrip.h"
21 #include "chrome/browser/ui/tabs/tab_strip_model.h" 22 #include "chrome/browser/ui/tabs/tab_strip_model.h"
22 #include "chrome/common/chrome_switches.h" 23 #include "chrome/common/chrome_switches.h"
23 #include "chrome/test/base/in_process_browser_test.h" 24 #include "chrome/test/base/in_process_browser_test.h"
24 #include "chrome/test/base/ui_test_utils.h" 25 #include "chrome/test/base/ui_test_utils.h"
25 #include "chrome/test/perf/perf_test.h" 26 #include "chrome/test/perf/perf_test.h"
26 #include "chrome/test/ui/ui_test.h" 27 #include "chrome/test/ui/ui_test.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 // * zxing (see the CPP version at https://code.google.com/p/zxing) 92 // * zxing (see the CPP version at https://code.google.com/p/zxing)
92 // * ffmpeg 0.11.1 or compatible version (see http://www.ffmpeg.org) 93 // * ffmpeg 0.11.1 or compatible version (see http://www.ffmpeg.org)
93 // 94 //
94 // The test case will launch a custom binary (peerconnection_server) which will 95 // The test case will launch a custom binary (peerconnection_server) which will
95 // allow two WebRTC clients to find each other. 96 // allow two WebRTC clients to find each other.
96 // 97 //
97 // The test also runs several other custom binaries - rgba_to_i420 converter and 98 // The test also runs several other custom binaries - rgba_to_i420 converter and
98 // frame_analyzer. Both tools can be found under third_party/webrtc/tools. The 99 // frame_analyzer. Both tools can be found under third_party/webrtc/tools. The
99 // test also runs a stand alone Python implementation of a WebSocket server 100 // test also runs a stand alone Python implementation of a WebSocket server
100 // (pywebsocket) and a barcode_decoder script. 101 // (pywebsocket) and a barcode_decoder script.
101 class WebrtcVideoQualityBrowserTest : public InProcessBrowserTest { 102 class WebrtcVideoQualityBrowserTest : public WebRtcTestBase {
102 public: 103 public:
103 WebrtcVideoQualityBrowserTest() 104 WebrtcVideoQualityBrowserTest()
104 : peerconnection_server_(0), 105 : peerconnection_server_(0),
105 pywebsocket_server_(0), 106 pywebsocket_server_(0),
106 environment_(base::Environment::Create()) {} 107 environment_(base::Environment::Create()) {}
107 108
108 virtual void SetUp() OVERRIDE { 109 virtual void SetUp() OVERRIDE {
109 RunPeerConnectionServer(); 110 RunPeerConnectionServer();
110 InProcessBrowserTest::SetUp(); 111 InProcessBrowserTest::SetUp();
111 112
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 // Convenience method which executes the provided javascript in the context 174 // Convenience method which executes the provided javascript in the context
174 // of the provided web contents and returns what it evaluated to. 175 // of the provided web contents and returns what it evaluated to.
175 std::string ExecuteJavascript(const std::string& javascript, 176 std::string ExecuteJavascript(const std::string& javascript,
176 content::WebContents* tab_contents) { 177 content::WebContents* tab_contents) {
177 std::string result; 178 std::string result;
178 EXPECT_TRUE(content::ExecuteScriptAndExtractString( 179 EXPECT_TRUE(content::ExecuteScriptAndExtractString(
179 tab_contents, javascript, &result)); 180 tab_contents, javascript, &result));
180 return result; 181 return result;
181 } 182 }
182 183
183 void GetUserMedia(content::WebContents* tab_contents) {
184 content::WindowedNotificationObserver infobar_added(
185 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED,
186 content::NotificationService::AllSources());
187
188 // Request user media: this will launch the media stream info bar.
189 EXPECT_EQ("ok-requested",
190 ExecuteJavascript("getUserMedia('{video: true, audio: true}');",
191 tab_contents));
192
193 // Wait for the bar to pop up, then accept.
194 infobar_added.Wait();
195 content::Details<InfoBarAddedDetails> details(infobar_added.details());
196 MediaStreamInfoBarDelegate* media_infobar =
197 details->AsMediaStreamInfoBarDelegate();
198 media_infobar->Accept();
199
200 // Wait for WebRTC to call the success callback.
201 EXPECT_TRUE(PollingWaitUntil(
202 "obtainGetUserMediaResult();", "ok-got-stream", tab_contents));
203 }
204
205 // Ensures we didn't get any errors asynchronously (e.g. while no javascript 184 // Ensures we didn't get any errors asynchronously (e.g. while no javascript
206 // call from this test was outstanding). 185 // call from this test was outstanding).
207 // TODO(phoglund): this becomes obsolete when we switch to communicating with 186 // TODO(phoglund): this becomes obsolete when we switch to communicating with
208 // the DOM message queue. 187 // the DOM message queue.
209 void AssertNoAsynchronousErrors(content::WebContents* tab_contents) { 188 void AssertNoAsynchronousErrors(content::WebContents* tab_contents) {
210 EXPECT_EQ("ok-no-errors", 189 EXPECT_EQ("ok-no-errors",
211 ExecuteJavascript("getAnyTestFailures()", tab_contents)); 190 ExecuteJavascript("getAnyTestFailures()", tab_contents));
212 } 191 }
213 192
214 // The peer connection server lets our two tabs find each other and talk to 193 // The peer connection server lets our two tabs find each other and talk to
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 419
441 base::ProcessHandle peerconnection_server_; 420 base::ProcessHandle peerconnection_server_;
442 base::ProcessHandle pywebsocket_server_; 421 base::ProcessHandle pywebsocket_server_;
443 scoped_ptr<base::Environment> environment_; 422 scoped_ptr<base::Environment> environment_;
444 }; 423 };
445 424
446 // Broken on Win: failing to start pywebsocket_server. http://crbug.com/255499. 425 // Broken on Win: failing to start pywebsocket_server. http://crbug.com/255499.
447 #define MAYBE_MANUAL_TestVGAVideoQuality DISABLED_MANUAL_TestVGAVideoQuality 426 #define MAYBE_MANUAL_TestVGAVideoQuality DISABLED_MANUAL_TestVGAVideoQuality
448 427
449 IN_PROC_BROWSER_TEST_F(WebrtcVideoQualityBrowserTest, 428 IN_PROC_BROWSER_TEST_F(WebrtcVideoQualityBrowserTest,
450 MAYBE_MANUAL_TestVGAVideoQuality) { 429 MANUAL_TestVGAVideoQuality) {
451 // TODO(phoglund): de-dupe from chrome_webrtc_browsertest.cc. 430 // TODO(phoglund): de-dupe from chrome_webrtc_browsertest.cc.
452 StartPyWebSocketServer(); 431 StartPyWebSocketServer();
453 432
454 EXPECT_TRUE(test_server()->Start()); 433 EXPECT_TRUE(test_server()->Start());
455 434
456 ui_test_utils::NavigateToURL(browser(), 435 ui_test_utils::NavigateToURL(browser(),
457 test_server()->GetURL(kMainWebrtcTestHtmlPage)); 436 test_server()->GetURL(kMainWebrtcTestHtmlPage));
458 content::WebContents* left_tab = 437 content::WebContents* left_tab =
459 browser()->tab_strip_model()->GetActiveWebContents(); 438 browser()->tab_strip_model()->GetActiveWebContents();
460 GetUserMedia(left_tab); 439 GetUserMediaAndAccept(left_tab);
461 440
462 chrome::AddBlankTabAt(browser(), -1, true); 441 chrome::AddBlankTabAt(browser(), -1, true);
463 content::WebContents* right_tab = 442 content::WebContents* right_tab =
464 browser()->tab_strip_model()->GetActiveWebContents(); 443 browser()->tab_strip_model()->GetActiveWebContents();
465 // TODO(phoglund): (de-dupe later) different from original flow. 444 // TODO(phoglund): (de-dupe later) different from original flow.
466 ui_test_utils::NavigateToURL(browser(), 445 ui_test_utils::NavigateToURL(browser(),
467 test_server()->GetURL(kCapturingWebrtcHtmlPage)); 446 test_server()->GetURL(kCapturingWebrtcHtmlPage));
468 GetUserMedia(right_tab); 447 GetUserMediaAndAccept(right_tab);
469 448
470 ConnectToPeerConnectionServer("peer 1", left_tab); 449 ConnectToPeerConnectionServer("peer 1", left_tab);
471 ConnectToPeerConnectionServer("peer 2", right_tab); 450 ConnectToPeerConnectionServer("peer 2", right_tab);
472 451
473 EstablishCall(left_tab, right_tab); 452 EstablishCall(left_tab, right_tab);
474 453
475 AssertNoAsynchronousErrors(left_tab); 454 AssertNoAsynchronousErrors(left_tab);
476 AssertNoAsynchronousErrors(right_tab); 455 AssertNoAsynchronousErrors(right_tab);
477 456
478 // Poll slower here to avoid flooding the log with messages: capturing and 457 // Poll slower here to avoid flooding the log with messages: capturing and
(...skipping 22 matching lines...) Expand all
501 std::string output = 480 std::string output =
502 CompareVideos(kVgaWidth, 481 CompareVideos(kVgaWidth,
503 kVgaHeight, 482 kVgaHeight,
504 GetWorkingDir().Append(kCapturedYuvFileName), 483 GetWorkingDir().Append(kCapturedYuvFileName),
505 GetWorkingDir().Append(kReferenceYuvFileName), 484 GetWorkingDir().Append(kReferenceYuvFileName),
506 GetWorkingDir().Append(kStatsFileName)); 485 GetWorkingDir().Append(kStatsFileName));
507 486
508 PrintFramesCountPerfResults(output); 487 PrintFramesCountPerfResults(output);
509 PrintPsnrAndSsimPerfResults(output); 488 PrintPsnrAndSsimPerfResults(output);
510 } 489 }
OLDNEW
« no previous file with comments | « chrome/browser/media/chrome_webrtc_browsertest.cc ('k') | chrome/browser/media/media_stream_infobar_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698