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

Side by Side Diff: chrome/browser/media/webrtc_browsertest_base.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: WebrtcTestBase Created 7 years, 5 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
(Empty)
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 "chrome/browser/media/webrtc_browsertest_base.h"
6
7 #include "base/strings/stringprintf.h"
8 #include "chrome/browser/chrome_notification_types.h"
9 #include "chrome/browser/infobars/infobar.h"
10 #include "chrome/browser/infobars/infobar_service.h"
11 #include "chrome/browser/media/media_stream_infobar_delegate.h"
12 #include "chrome/browser/media/webrtc_browsertest_common.h"
13 #include "chrome/browser/ui/browser.h"
14 #include "chrome/test/base/ui_test_utils.h"
15 #include "content/public/browser/notification_service.h"
16 #include "content/public/test/browser_test_utils.h"
17
18 const char WebRtcTestBase::kAudioVideoCallConstraints[] =
19 "'{audio: true, video: true}'";
20 const char WebRtcTestBase::kAudioOnlyCallConstraints[] = "'{audio: true}'";
21 const char WebRtcTestBase::kVideoOnlyCallConstraints[] = "'{video: true}'";
22 const char WebRtcTestBase::kFailedWithErrorPermissionDenied[] =
23 "failed-with-error-PERMISSION_DENIED";
24 const char WebRtcTestBase::kOkGotStream[] = "ok-got-stream";
25
26 // Convenience method which executes the provided javascript in the context
27 // of the provided web contents and returns what it evaluated to.
28 static std::string ExecuteJavascript(const std::string& javascript,
29 content::WebContents* tab_contents) {
30 std::string result;
31 EXPECT_TRUE(content::ExecuteScriptAndExtractString(
32 tab_contents, javascript, &result));
33 return result;
34 }
35
36 MediaStreamInfoBarDelegate* WebRtcTestBase::GetUserMediaAndWaitForInfobar(
37 content::WebContents* tab_contents,
38 const std::string& constraints) {
39 content::WindowedNotificationObserver infobar_added(
40 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED,
41 content::NotificationService::AllSources());
42
43 // Request user media: this will launch the media stream info bar.
44 GetUserMedia(tab_contents, constraints);
45
46 // Wait for the bar to pop up, then return it
tommi (sloooow) - chröme 2013/07/26 09:08:40 nit: end with period.
47 infobar_added.Wait();
48 content::Details<InfoBarAddedDetails> details(infobar_added.details());
49 MediaStreamInfoBarDelegate* media_infobar =
50 details.ptr()->AsMediaStreamInfoBarDelegate();
51 return media_infobar;
52 }
53
54 void WebRtcTestBase::CloseInfobarInTab(content::WebContents* tab_contents,
55 MediaStreamInfoBarDelegate* infobar) {
56 content::WindowedNotificationObserver infobar_removed(
57 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED,
58 content::NotificationService::AllSources());
59
60 InfoBarService* infobar_service =
61 InfoBarService::FromWebContents(tab_contents);
62 infobar_service->RemoveInfoBar(infobar);
63
64 infobar_removed.Wait();
65 }
66
67 void WebRtcTestBase::GetUserMediaAndAccept(content::WebContents* tab_contents) {
68 GetUserMediaWithSpecificConstraintsAndAccept(tab_contents,
69 kAudioVideoCallConstraints);
70 }
71
72 void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndAccept(
73 content::WebContents* tab_contents, const std::string& constraints) {
74 MediaStreamInfoBarDelegate* media_infobar =
75 GetUserMediaAndWaitForInfobar(tab_contents, constraints);
76
77 media_infobar->Accept();
78
79 CloseInfobarInTab(tab_contents, media_infobar);
80
81 // Wait for WebRTC to call the success callback.
82 EXPECT_TRUE(PollingWaitUntil(
83 "obtainGetUserMediaResult()", kOkGotStream, tab_contents));
84 }
85
86 void WebRtcTestBase::GetUserMediaAndDeny(content::WebContents* tab_contents) {
87 return GetUserMediaWithSpecificConstraintsAndDeny(tab_contents,
88 kAudioVideoCallConstraints);
89 }
90
91 void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndDeny(
92 content::WebContents* tab_contents,
93 const std::string& constraints) {
94 MediaStreamInfoBarDelegate* media_infobar =
95 GetUserMediaAndWaitForInfobar(tab_contents, constraints);
96
97 media_infobar->Cancel();
98
99 CloseInfobarInTab(tab_contents, media_infobar);
100
101 // Wait for WebRTC to call the fail callback.
102 EXPECT_TRUE(PollingWaitUntil("obtainGetUserMediaResult()",
103 kFailedWithErrorPermissionDenied,
104 tab_contents));
105 }
106
107 void WebRtcTestBase::GetUserMediaAndDismiss(
108 content::WebContents* tab_contents) {
109 MediaStreamInfoBarDelegate* media_infobar =
110 GetUserMediaAndWaitForInfobar(tab_contents, kAudioVideoCallConstraints);
111
112 media_infobar->InfoBarDismissed();
113
114 CloseInfobarInTab(tab_contents, media_infobar);
115
116 // A dismiss should be treated like a deny.
117 EXPECT_TRUE(PollingWaitUntil("obtainGetUserMediaResult()",
118 kFailedWithErrorPermissionDenied,
119 tab_contents));
120 }
121
122 void WebRtcTestBase::GetUserMedia(content::WebContents* tab_contents,
123 const std::string& constraints) {
124 // Request user media: this will launch the media stream info bar.
125 EXPECT_EQ("ok-requested",
126 ExecuteJavascript(
127 base::StringPrintf("getUserMedia(%s);", constraints.c_str()),
128 tab_contents));
129 }
130
OLDNEW
« no previous file with comments | « chrome/browser/media/webrtc_browsertest_base.h ('k') | chrome/browser/media/webrtc_browsertest_common.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698