OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2014 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 <string> | |
6 | |
7 #include "content/browser/media/media_browsertest.h" | |
8 #include "content/public/test/browser_test_utils.h" | |
9 #include "content/shell/browser/shell.h" | |
10 #include "content/test/content_browser_test_utils.h" | |
11 | |
12 const char* kProbably = "probably"; | |
13 const char* kMaybe = "maybe"; | |
14 const char* kNot = ""; | |
15 | |
16 #if defined(USE_PROPRIETARY_CODECS) | |
17 const char* kPropProbably = "probably"; | |
18 const char* kPropMaybe = "maybe"; | |
19 const char* kPropProbablyElseMaybe = "probably"; | |
20 #else | |
21 const char* kPropProbably = ""; | |
22 const char* kPropMaybe = ""; | |
23 const char* kPropProbablyElseMaybe = "maybe"; | |
24 #endif // USE_PROPRIETARY_CODECS | |
25 | |
26 // TODO(amogh.bihani): Change the opus tests when opus is on | |
27 // Android. (http://crbug.com/318436). | |
28 #if !defined(OS_ANDROID) | |
29 const char* kTheoraProbably = "probably"; | |
30 const char* kTheoraMaybe = "maybe"; | |
31 const char* kOpusProbably = "probably"; | |
32 #if defined(USE_PROPRIETARY_CODECS) | |
33 const char* kTheoraAndPropProbably = "probably"; | |
34 const char* kTheoraAndPropProbablyElseMaybe = "probably"; | |
35 const char* kOpusAndPropProbably = "probably"; | |
36 #else | |
37 const char* kTheoraAndPropProbably = ""; | |
38 const char* kTheoraAndPropProbablyElseMaybe = "maybe"; | |
39 const char* kOpusAndPropProbably = ""; | |
40 #endif // USE_PROPRIETARY_CODECS | |
41 #else | |
42 const char* kTheoraProbably = ""; | |
43 const char* kTheoraMaybe = ""; | |
44 const char* kOpusProbably = ""; | |
45 const char* kTheoraAndPropProbably = ""; | |
46 const char* kTheoraAndPropProbablyElseMaybe = ""; | |
47 const char* kOpusAndPropProbably = ""; | |
48 #endif // !OS_ANDROID | |
49 | |
50 namespace content { | |
51 | |
52 class MediaMimeCanPlayType : public MediaBrowserTest { | |
ddorwin
2014/03/20 18:04:50
nit: Drop "Mime" and add "Test":
MediaCanPlayTypeT
amogh.bihani
2014/03/21 13:52:03
Done.
| |
53 protected: | |
54 MediaMimeCanPlayType() { } | |
ddorwin
2014/03/20 18:04:50
It's odd that these are protected. They appear to
amogh.bihani
2014/03/21 13:52:03
It does not allow to remove the constructor. It gi
| |
55 ~MediaMimeCanPlayType() { } | |
ddorwin
2014/03/20 18:04:50
This should have been virtual, but just remove it.
amogh.bihani
2014/03/21 13:52:03
Done.
| |
56 | |
57 std::string CanPlay(const std::string& type) { | |
58 std::string command("document.createElement('video').canPlayType("); | |
59 command.append(type); | |
60 command.append(")"); | |
61 | |
62 std::string result; | |
63 EXPECT_TRUE(ExecuteScriptAndExtractString( | |
64 shell()->web_contents(), | |
65 "window.domAutomationController.send(" + command + ");", | |
66 &result)); | |
67 return result; | |
68 } | |
69 | |
70 void SetUpOnMainThread() { | |
ddorwin
2014/03/20 18:04:50
Add virtual and OVERRIDE:
virtual void SetUpOnMain
amogh.bihani
2014/03/21 13:52:03
Done.
| |
71 GURL url("about:blank"); | |
ddorwin
2014/03/20 18:04:50
nit: I think it's better to have this function up
amogh.bihani
2014/03/21 13:52:03
Done.
| |
72 NavigateToURL(shell(), url); | |
73 } | |
74 | |
75 private: | |
76 DISALLOW_COPY_AND_ASSIGN(MediaMimeCanPlayType); | |
77 }; | |
78 | |
ddorwin
2014/03/20 18:04:50
General: We might test that we ignore "profiles" (
| |
79 IN_PROC_BROWSER_TEST_F(MediaMimeCanPlayType, CodecSupportTest_wav) { | |
80 EXPECT_EQ(kMaybe, CanPlay("'audio/wav'")); | |
81 EXPECT_EQ(kProbably, CanPlay("'audio/wav; codecs=\"1\"'")); | |
82 EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"vorbis\"'")); | |
83 EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"theora\"'")); | |
84 EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"vp8\"'")); | |
85 EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"vp8.0\"'")); | |
86 EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"vp9\"'")); | |
87 EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"vp9.0\"'")); | |
88 EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"opus\"'")); | |
89 EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"avc3\"'")); | |
90 EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"mp4a.40.5\"'")); | |
91 EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"avc1.4D401E\"'")); | |
92 EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"garbage\"'")); | |
ddorwin
2014/03/20 18:04:50
nit: I think we usually use "unknown", which is a
amogh.bihani
2014/03/21 13:52:03
Done.
| |
93 } | |
94 | |
95 IN_PROC_BROWSER_TEST_F(MediaMimeCanPlayType, CodecSupportTest_webm) { | |
96 // video/webm | |
97 EXPECT_EQ(kMaybe, CanPlay("'video/webm'")); | |
98 EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8\"'")); | |
ddorwin
2014/03/20 18:04:50
nit: You can increase readability by adding an emp
| |
99 EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8.0\"'")); | |
100 EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8, vorbis\"'")); | |
101 EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8.0, vorbis\"'")); | |
102 EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp8, opus\"'")); | |
103 EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp8.0, opus\"'")); | |
104 EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp9\"'")); | |
ddorwin
2014/03/20 18:04:50
Between vp8 and vp9, which are essentially the sam
| |
105 EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp9.0\"'")); | |
106 EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp9, vorbis\"'")); | |
107 EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp9.0, vorbis\"'")); | |
108 EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp9, opus\"'")); | |
109 EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp9.0, opus\"'")); | |
110 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp9, 1\"'")); | |
ddorwin
2014/03/20 18:04:50
And before this block of invalid items.
| |
111 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp8.0, 1\"'")); | |
112 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp8, mp4a.40.2\"'")); | |
113 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp8.0, mp4a.40.2\"'")); | |
114 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp9, 1\"'")); | |
115 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp9.0, 1\"'")); | |
116 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp9, mp4a.40.2\"'")); | |
117 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp9.0, mp4a.40.2\"'")); | |
118 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"theora\"'")); | |
119 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"1\"'")); | |
120 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"avc1.4D401E\"'")); | |
121 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"mp4a.40.2\"'")); | |
122 EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"garbage\"'")); | |
123 // audio/webm | |
ddorwin
2014/03/20 18:04:50
nit: These comments are a bit redundant. (Normally
amogh.bihani
2014/03/21 13:52:03
Done.
| |
124 EXPECT_EQ(kMaybe, CanPlay("'audio/webm'")); | |
125 EXPECT_EQ(kProbably, CanPlay("'audio/webm; codecs=\"vorbis\"'")); | |
ddorwin
2014/03/20 18:04:50
ditto
| |
126 EXPECT_EQ(kOpusProbably, CanPlay("'audio/webm; codecs=\"opus\"'")); | |
127 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"1\"'")); | |
ddorwin
2014/03/20 18:04:50
ditto
| |
128 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8\"'")); | |
129 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8.0\"'")); | |
130 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9\"'")); | |
131 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9.0\"'")); | |
132 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8, opus\"'")); | |
133 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8.0, opus\"'")); | |
134 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8, vorbis\"'")); | |
135 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8.0, vorbis\"'")); | |
136 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9, opus\"'")); | |
137 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9.0, opus\"'")); | |
138 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9, vorbis\"'")); | |
139 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9.0, vorbis\"'")); | |
140 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"avc1.4D401E\"'")); | |
141 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"mp4a.40.2\"'")); | |
142 EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"garbage\"'")); | |
143 } | |
144 | |
145 IN_PROC_BROWSER_TEST_F(MediaMimeCanPlayType, CodecSupportTest_ogg) { | |
146 // video/ogg | |
147 EXPECT_EQ(kTheoraMaybe, CanPlay("'video/ogg'")); | |
148 EXPECT_EQ(kTheoraProbably, CanPlay("'video/ogg; codecs=\"theora\"'")); | |
149 EXPECT_EQ(kTheoraProbably, CanPlay("'video/ogg; codecs=\"theora, vorbis\"'")); | |
150 EXPECT_EQ(kTheoraProbably, CanPlay("'video/ogg; codecs=\"theora, opus\"'")); | |
151 EXPECT_EQ(kTheoraProbably, CanPlay("'video/ogg; codecs=\"vp8\"'")); | |
152 EXPECT_EQ(kTheoraAndPropProbablyElseMaybe, | |
ddorwin
2014/03/20 18:04:50
Maybe a todo to fix this with a reference to your
amogh.bihani
2014/03/21 13:52:03
Done.
| |
153 CanPlay("'video/ogg; codecs=\"avc1\"'")); | |
154 EXPECT_EQ(kTheoraAndPropProbablyElseMaybe, | |
155 CanPlay("'video/ogg; codecs=\"avc3\"'")); | |
156 EXPECT_EQ(kTheoraAndPropProbablyElseMaybe, | |
157 CanPlay("'video/ogg; codecs=\"mp4a\"'")); | |
158 EXPECT_EQ(kTheoraAndPropProbablyElseMaybe, | |
159 CanPlay("'video/ogg; codecs=\"avc1, mp4a\"'")); | |
ddorwin
2014/03/20 18:04:50
You might add a test for avc1 and vorbis - one inv
amogh.bihani
2014/03/21 13:52:03
Done.
| |
160 EXPECT_EQ(kTheoraMaybe, CanPlay("'video/ogg; codecs=\"avc1.4D401E\"'")); | |
161 EXPECT_EQ(kTheoraMaybe, CanPlay("'video/ogg; codecs=\"avc3.64001F\"'")); | |
162 EXPECT_EQ(kTheoraMaybe, CanPlay("'video/ogg; codecs=\"mp4a.4.02\"'")); | |
163 EXPECT_EQ(kTheoraMaybe, | |
164 CanPlay("'video/ogg; codecs=\"avc3.64001F, mp4a.40.2\"'")); | |
165 EXPECT_EQ(kTheoraMaybe, CanPlay("'video/ogg; codecs=\"garbage\"'")); | |
166 // audio/ogg | |
167 EXPECT_EQ(kMaybe, CanPlay("'audio/ogg'")); | |
168 EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"vorbis\"'")); | |
169 EXPECT_EQ(kTheoraProbably, CanPlay("'audio/ogg; codecs=\"theora\"'")); | |
ddorwin
2014/03/20 18:04:50
We should not allow a video codec in "audio/*". If
amogh.bihani
2014/03/21 06:27:08
It will be fixed in other CL. In strict map there
| |
170 EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"vp8\"'")); | |
171 EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"vp9\"'")); | |
172 EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"vp8.0\"'")); | |
173 EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"vp9.0\"'")); | |
174 EXPECT_EQ(kOpusProbably, CanPlay("'audio/ogg; codecs=\"opus\"'")); | |
175 EXPECT_EQ(kPropProbablyElseMaybe, CanPlay("'audio/ogg; codecs=\"mp4a\"'")); | |
176 EXPECT_EQ(kPropProbablyElseMaybe, CanPlay("'audio/ogg; codecs=\"avc1\"'")); | |
ddorwin
2014/03/20 18:04:50
ditto about video codecs
amogh.bihani
2014/03/21 06:27:08
ditto :)
| |
177 EXPECT_EQ(kPropProbablyElseMaybe, CanPlay("'audio/ogg; codecs=\"avc3\"'")); | |
178 EXPECT_EQ(kMaybe, CanPlay("'audio/ogg; codecs=\"mp4a.40.2\"'")); | |
ddorwin
2014/03/20 18:04:50
Just checking my understanding: These are maybe be
amogh.bihani
2014/03/21 06:27:08
Yes we do not expect suffix for ogg but right now
| |
179 EXPECT_EQ(kMaybe, CanPlay("'audio/ogg; codecs=\"avc1.4D401E\"'")); | |
ddorwin
2014/03/20 18:04:50
ditto
| |
180 EXPECT_EQ(kMaybe, CanPlay("'audio/ogg; codecs=\"avc3.64001F\"'")); | |
181 EXPECT_EQ(kMaybe, CanPlay("'audio/ogg; codecs=\"garbage\"'")); | |
182 } | |
183 | |
184 IN_PROC_BROWSER_TEST_F(MediaMimeCanPlayType, CodecSupportTest_mpeg) { | |
185 EXPECT_EQ(kNot, CanPlay("'video/mp3'")); | |
186 // video/mp4 | |
187 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4'")); | |
188 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1\"'")); | |
189 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3\"'")); | |
190 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1, mp4a\"'")); | |
191 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3\"'")); | |
192 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1, mp4a\"'")); | |
193 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.4D401E\"'")); | |
ddorwin
2014/03/20 18:04:50
It seems backwards that we say probably for a less
amogh.bihani
2014/03/21 06:27:08
yup
| |
194 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.64001F\"'")); | |
195 EXPECT_EQ(kPropMaybe, | |
196 CanPlay("'video/mp4; codecs=\"avc1.4D401E, mp4a.40.2\"'")); | |
197 EXPECT_EQ(kPropMaybe, | |
198 CanPlay("'video/mp4; codecs=\"avc3.64001F, mp4a.40.5\"'")); | |
199 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"garbage\"'")); | |
200 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"vp8\"'")); | |
201 EXPECT_EQ(kOpusAndPropProbably, CanPlay("'video/mp4; codecs=\"opus\"'")); | |
202 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"vorbis\"'")); | |
203 EXPECT_EQ(kTheoraAndPropProbably, CanPlay("'video/mp4; codecs=\"theora\"'")); | |
204 EXPECT_EQ(kOpusAndPropProbably, CanPlay("'video/mp4; codecs=\"vp9, opus\"'")); | |
205 EXPECT_EQ(kTheoraAndPropProbably, | |
206 CanPlay("'video/mp4; codecs=\"theora, vorbis\"'")); | |
ddorwin
2014/03/20 18:04:50
I wonder if Chrome actually can play these unexpec
| |
207 EXPECT_EQ(kTheoraAndPropProbably, | |
208 CanPlay("'video/mp4; codecs=\"theora, mp4a\"'")); | |
209 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1, vorbis\"'")); | |
210 // audio/mpeg | |
211 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg'")); | |
212 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp4a\"'")); | |
ddorwin
2014/03/20 18:04:50
According to [1], this is for mp3. Thus, please ad
| |
213 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"avc1\"'")); | |
214 EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/mpeg; codecs=\"opus\"'")); | |
215 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"vorbis\"'")); | |
216 EXPECT_EQ(kTheoraAndPropProbably, CanPlay("'audio/mpeg; codecs=\"theora\"'")); | |
217 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"vp8\"'")); | |
218 // audio/mp3 | |
219 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3'")); | |
220 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"mp4a\"'")); | |
ddorwin
2014/03/20 18:04:50
This is a bug. I think any codecs with audio/mp3 s
amogh.bihani
2014/03/21 06:27:08
My other CL will take care of it. (line 443-445 of
| |
221 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"avc1\"'")); | |
222 EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/mp3; codecs=\"opus\"'")); | |
223 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"vorbis\"'")); | |
224 EXPECT_EQ(kTheoraAndPropProbably, CanPlay("'audio/mp3; codecs=\"theora\"'")); | |
225 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"vp8\"'")); | |
226 // audio/mp4 | |
ddorwin
2014/03/20 18:04:50
Move audio/mp4 up after video/mp4.
Actually, mp4
amogh.bihani
2014/03/21 13:52:03
Done.
| |
227 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4'")); | |
228 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a\"'")); | |
229 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"mp4a.40.2\"'")); | |
230 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"avc1\"'")); | |
ddorwin
2014/03/20 18:04:50
As mentioned earlier, video codecs probably should
amogh.bihani
2014/03/21 06:27:08
My other CL will take care of these :)
(Wow... th
| |
231 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"avc3\"'")); | |
232 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"avc1.4D401E\"'")); | |
233 EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/mp4; codecs=\"opus\"'")); | |
234 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"vorbis\"'")); | |
235 EXPECT_EQ(kTheoraAndPropProbably, CanPlay("'audio/mp4; codecs=\"theora\"'")); | |
236 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"vp8\"'")); | |
237 EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/mp4; codecs=\"vp9, opus\"'")); | |
238 EXPECT_EQ(kTheoraAndPropProbably, | |
239 CanPlay("'audio/mp4; codecs=\"theora, vorbis\"'")); | |
240 EXPECT_EQ(kTheoraAndPropProbably, | |
241 CanPlay("'audio/mp4; codecs=\"theora, mp4a\"'")); | |
242 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"avc1, vorbis\"'")); | |
243 } | |
244 | |
ddorwin
2014/03/20 18:04:50
This is a good set of tests. I see it's still miss
amogh.bihani
2014/03/21 13:52:03
Done.
| |
245 } // namespace content | |
OLD | NEW |