OLD | NEW |
| (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 #ifndef CHROME_BROWSER_MEDIA_WEBRTC_BROWSERTEST_BASE_H_ | |
6 #define CHROME_BROWSER_MEDIA_WEBRTC_BROWSERTEST_BASE_H_ | |
7 | |
8 #include <string> | |
9 | |
10 #include "base/macros.h" | |
11 #include "chrome/test/base/in_process_browser_test.h" | |
12 | |
13 namespace infobars { | |
14 class InfoBar; | |
15 } | |
16 | |
17 namespace content { | |
18 class WebContents; | |
19 } | |
20 | |
21 // Base class for WebRTC browser tests with useful primitives for interacting | |
22 // getUserMedia. We use inheritance here because it makes the test code look | |
23 // as clean as it can be. | |
24 class WebRtcTestBase : public InProcessBrowserTest { | |
25 public: | |
26 // Typical constraints. | |
27 static const char kAudioVideoCallConstraints[]; | |
28 static const char kAudioOnlyCallConstraints[]; | |
29 static const char kVideoOnlyCallConstraints[]; | |
30 static const char kVideoCallConstraintsQVGA[]; | |
31 static const char kVideoCallConstraints360p[]; | |
32 static const char kVideoCallConstraintsVGA[]; | |
33 static const char kVideoCallConstraints720p[]; | |
34 static const char kVideoCallConstraints1080p[]; | |
35 static const char kAudioVideoCallConstraints360p[]; | |
36 static const char kAudioVideoCallConstraints720p[]; | |
37 | |
38 static const char kOkGotStream[]; | |
39 static const char kFailedWithPermissionDeniedError[]; | |
40 static const char kFailedWithPermissionDismissedError[]; | |
41 | |
42 static const char kUseDefaultCertKeygen[]; | |
43 static const char kUseDefaultVideoCodec[]; | |
44 | |
45 protected: | |
46 WebRtcTestBase(); | |
47 ~WebRtcTestBase() override; | |
48 | |
49 // These all require that the loaded page fulfills the public interface in | |
50 // chrome/test/data/webrtc/getusermedia.js. | |
51 // If an error is reported back from the getUserMedia call, these functions | |
52 // will return false. | |
53 // The ...AndAccept()/...AndDeny()/...AndDismiss() functions expect that a | |
54 // prompt will be shown (i.e. the current origin in the tab_contents doesn't | |
55 // have a saved permission). | |
56 bool GetUserMediaAndAccept(content::WebContents* tab_contents) const; | |
57 bool GetUserMediaWithSpecificConstraintsAndAccept( | |
58 content::WebContents* tab_contents, | |
59 const std::string& constraints) const; | |
60 bool GetUserMediaWithSpecificConstraintsAndAcceptIfPrompted( | |
61 content::WebContents* tab_contents, | |
62 const std::string& constraints) const; | |
63 void GetUserMediaAndDeny(content::WebContents* tab_contents); | |
64 void GetUserMediaWithSpecificConstraintsAndDeny( | |
65 content::WebContents* tab_contents, | |
66 const std::string& constraints) const; | |
67 void GetUserMediaAndDismiss(content::WebContents* tab_contents) const; | |
68 void GetUserMediaAndExpectAutoAcceptWithoutPrompt( | |
69 content::WebContents* tab_contents) const; | |
70 void GetUserMediaAndExpectAutoDenyWithoutPrompt( | |
71 content::WebContents* tab_contents) const; | |
72 void GetUserMedia(content::WebContents* tab_contents, | |
73 const std::string& constraints) const; | |
74 | |
75 // Convenience method which opens the page at url, calls GetUserMediaAndAccept | |
76 // and returns the new tab. | |
77 content::WebContents* OpenPageAndGetUserMediaInNewTab(const GURL& url) const; | |
78 | |
79 // Convenience method which opens the page at url, calls | |
80 // GetUserMediaAndAcceptWithSpecificConstraints and returns the new tab. | |
81 content::WebContents* OpenPageAndGetUserMediaInNewTabWithConstraints( | |
82 const GURL& url, const std::string& constraints) const; | |
83 | |
84 // Convenience method which gets the URL for |test_page| and calls | |
85 // OpenPageAndGetUserMediaInNewTab(). | |
86 content::WebContents* OpenTestPageAndGetUserMediaInNewTab( | |
87 const std::string& test_page) const; | |
88 | |
89 // Opens the page at |url| where getUserMedia has been invoked through other | |
90 // means and accepts the user media request. | |
91 content::WebContents* OpenPageAndAcceptUserMedia(const GURL& url) const; | |
92 | |
93 // Closes the last local stream acquired by the GetUserMedia* methods. | |
94 void CloseLastLocalStream(content::WebContents* tab_contents) const; | |
95 | |
96 std::string ExecuteJavascript(const std::string& javascript, | |
97 content::WebContents* tab_contents) const; | |
98 | |
99 // Sets up a peer connection in the tab and adds the current local stream | |
100 // (which you can prepare by calling one of the GetUserMedia* methods above). | |
101 // Optionally, |certificate_keygen_algorithm| is JavaScript for an | |
102 // |AlgorithmIdentifier| to be used as parameter to | |
103 // |RTCPeerConnection.generateCertificate|. The resulting certificate will be | |
104 // used by the peer connection. Or use |kUseDefaultCertKeygen| to use a | |
105 // certificate. | |
106 void SetupPeerconnectionWithLocalStream( | |
107 content::WebContents* tab, | |
108 const std::string& certificate_keygen_algorithm = | |
109 kUseDefaultCertKeygen) const; | |
110 // Same as above but does not add the local stream. | |
111 void SetupPeerconnectionWithoutLocalStream( | |
112 content::WebContents* tab, | |
113 const std::string& certificate_keygen_algorithm = | |
114 kUseDefaultCertKeygen) const; | |
115 // Same as |SetupPeerconnectionWithLocalStream| except a certificate is | |
116 // specified, which is a reference to an |RTCCertificate| object. | |
117 void SetupPeerconnectionWithCertificateAndLocalStream( | |
118 content::WebContents* tab, | |
119 const std::string& certificate) const; | |
120 // Same as above but does not add the local stream. | |
121 void SetupPeerconnectionWithCertificateWithoutLocalStream( | |
122 content::WebContents* tab, | |
123 const std::string& certificate) const; | |
124 | |
125 // Exchanges offers and answers between the peer connections in the | |
126 // respective tabs. Before calling this, you must have prepared peer | |
127 // connections in both tabs and configured them as you like (for instance by | |
128 // calling SetupPeerconnectionWithLocalStream). | |
129 // If |video_codec| is not |kUseDefaultVideoCodec|, the SDP offer is modified | |
130 // (and SDP answer verified) so that the specified video codec (case-sensitive | |
131 // name) is used during the call instead of the default one. | |
132 void NegotiateCall(content::WebContents* from_tab, | |
133 content::WebContents* to_tab) const; | |
134 | |
135 // Hangs up a negotiated call. | |
136 void HangUp(content::WebContents* from_tab) const; | |
137 | |
138 // Call this to enable monitoring of javascript errors for this test method. | |
139 // This will only work if the tests are run sequentially by the test runner | |
140 // (i.e. with --test-launcher-developer-mode or --test-launcher-jobs=1). | |
141 void DetectErrorsInJavaScript(); | |
142 | |
143 // Methods for detecting if video is playing (the loaded page must have | |
144 // chrome/test/data/webrtc/video_detector.js and its dependencies loaded to | |
145 // make that work). Looks at a 320x240 area of the target video tag. | |
146 void StartDetectingVideo(content::WebContents* tab_contents, | |
147 const std::string& video_element) const; | |
148 bool WaitForVideoToPlay(content::WebContents* tab_contents) const; | |
149 | |
150 // Returns the stream size as a string on the format <width>x<height>. | |
151 std::string GetStreamSize(content::WebContents* tab_contents, | |
152 const std::string& video_element) const; | |
153 | |
154 // Methods to check what devices we have on the system. | |
155 bool HasWebcamAvailableOnSystem(content::WebContents* tab_contents) const; | |
156 | |
157 // Returns true if we're on win 8. | |
158 bool OnWin8() const; | |
159 | |
160 void OpenDatabase(content::WebContents* tab) const; | |
161 void CloseDatabase(content::WebContents* tab) const; | |
162 void DeleteDatabase(content::WebContents* tab) const; | |
163 | |
164 void GenerateAndCloneCertificate(content::WebContents* tab, | |
165 const std::string& keygen_algorithm) const; | |
166 | |
167 void VerifyStatsGenerated(content::WebContents* tab) const; | |
168 | |
169 // Change the default video codec in the offer SDP. | |
170 void SetDefaultVideoCodec(content::WebContents* tab, | |
171 const std::string& video_codec) const; | |
172 | |
173 // Add 'usedtx=1' to the offer SDP. | |
174 void EnableOpusDtx(content::WebContents* tab) const; | |
175 | |
176 private: | |
177 void CloseInfoBarInTab(content::WebContents* tab_contents, | |
178 infobars::InfoBar* infobar) const; | |
179 | |
180 std::string CreateLocalOffer(content::WebContents* from_tab) const; | |
181 std::string CreateAnswer(std::string local_offer, | |
182 content::WebContents* to_tab) const; | |
183 void ReceiveAnswer(const std::string& answer, | |
184 content::WebContents* from_tab) const; | |
185 void GatherAndSendIceCandidates(content::WebContents* from_tab, | |
186 content::WebContents* to_tab) const; | |
187 | |
188 infobars::InfoBar* GetUserMediaAndWaitForInfoBar( | |
189 content::WebContents* tab_contents, | |
190 const std::string& constraints) const; | |
191 | |
192 bool detect_errors_in_javascript_; | |
193 | |
194 DISALLOW_COPY_AND_ASSIGN(WebRtcTestBase); | |
195 }; | |
196 | |
197 #endif // CHROME_BROWSER_MEDIA_WEBRTC_BROWSERTEST_BASE_H_ | |
OLD | NEW |