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

Side by Side Diff: content/browser/media/media_canplaytype_browsertest.cc

Issue 918463002: Add detailed tests of supported avc1, avc3, and mp4a codec strings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@avc1
Patch Set: Added TestAvcVariants() helper. Created 5 years, 10 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
« 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <string> 5 #include <string>
6 6
7 #include "content/browser/media/media_browsertest.h" 7 #include "content/browser/media/media_browsertest.h"
8 #include "content/public/test/browser_test_utils.h" 8 #include "content/public/test/browser_test_utils.h"
9 #include "content/public/test/content_browser_test_utils.h" 9 #include "content/public/test/content_browser_test_utils.h"
10 #include "content/shell/browser/shell.h" 10 #include "content/shell/browser/shell.h"
11 11
12 #if defined(OS_ANDROID) 12 #if defined(OS_ANDROID)
13 #include "base/android/build_info.h" 13 #include "base/android/build_info.h"
14 #endif 14 #endif
15 15
16 const char kProbably[] = "probably"; 16 const char kProbably[] = "probably";
17 const char kMaybe[] = "maybe"; 17 const char kMaybe[] = "maybe";
18 const char kNot[] = ""; 18 const char kNot[] = "";
19 19
20 #if defined(USE_PROPRIETARY_CODECS) 20 #if defined(USE_PROPRIETARY_CODECS)
21 const char kPropProbably[] = "probably"; 21 const char kPropProbably[] = "probably";
22 const char kPropMaybe[] = "maybe"; 22 const char kPropMaybe[] = "maybe";
23 #else 23 #else
24 const char kPropProbably[] = ""; 24 const char kPropProbably[] = "";
25 const char kPropMaybe[] = ""; 25 const char kPropMaybe[] = "";
26 #endif // USE_PROPRIETARY_CODECS 26 #endif // USE_PROPRIETARY_CODECS
27 27
28 // TODO(amogh.bihani): Change the opus tests when opus is on
29 // Android. (http://crbug.com/318436).
30 #if !defined(OS_ANDROID) 28 #if !defined(OS_ANDROID)
31 const char kOggVideoProbably[] = "probably"; 29 const char kOggVideoProbably[] = "probably";
32 const char kOggVideoMaybe[] = "maybe"; 30 const char kOggVideoMaybe[] = "maybe";
33 const char kTheoraProbably[] = "probably"; 31 const char kTheoraProbably[] = "probably";
34 const char kOggOpusProbably[] = "probably"; 32 const char kOggOpusProbably[] = "probably";
33 const char* kMpeg2AacProbably = kPropProbably;
35 #else 34 #else
36 const char kOggVideoProbably[] = ""; 35 const char kOggVideoProbably[] = "";
37 const char kOggVideoMaybe[] = ""; 36 const char kOggVideoMaybe[] = "";
38 const char kTheoraProbably[] = ""; 37 const char kTheoraProbably[] = "";
39 const char kOggOpusProbably[] = ""; 38 const char kOggOpusProbably[] = "";
39 const char kMpeg2AacProbably[] = "";
40 #endif // !OS_ANDROID 40 #endif // !OS_ANDROID
41 41
42 namespace content { 42 namespace content {
43 43
44 class MediaCanPlayTypeTest : public MediaBrowserTest { 44 class MediaCanPlayTypeTest : public MediaBrowserTest {
45 public: 45 public:
46 MediaCanPlayTypeTest() : url_("about:blank") { } 46 MediaCanPlayTypeTest() : url_("about:blank") { }
47 47
48 void SetUpOnMainThread() override { NavigateToURL(shell(), url_); } 48 void SetUpOnMainThread() override { NavigateToURL(shell(), url_); }
49 49
50 std::string CanPlay(const std::string& type) { 50 std::string CanPlay(const std::string& type) {
51 std::string command("document.createElement('video').canPlayType("); 51 std::string command("document.createElement('video').canPlayType(");
52 command.append(type); 52 command.append(type);
53 command.append(")"); 53 command.append(")");
54 54
55 std::string result; 55 std::string result;
56 EXPECT_TRUE(ExecuteScriptAndExtractString( 56 EXPECT_TRUE(ExecuteScriptAndExtractString(
57 shell()->web_contents(), 57 shell()->web_contents(),
58 "window.domAutomationController.send(" + command + ");", 58 "window.domAutomationController.send(" + command + ");",
59 &result)); 59 &result));
60 return result; 60 return result;
61 } 61 }
62 62
63 void TestMPEGUnacceptableCombinations(std::string mime) { 63 void TestMPEGUnacceptableCombinations(const std::string& mime) {
64 // Codecs must be followed by valid hexadecimal number. 64 // AVC codecs must be followed by valid 6-digit hexadecimal number.
65 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.unknown\"'")); 65 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.12345\"'"));
66 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.unknown\"'")); 66 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.12345\"'"));
67 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.unknown\"'")); 67 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.1234567\"'"));
68 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.1234567\"'"));
69 // TODO(ddorwin): These four should return "". See crbug.com/457076.
70 // EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.number\"'"));
71 // EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.number\"'"));
72 // EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.12345.\"'"));
73 // EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.12345.\"'"));
74 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.123456.\"'"));
75 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.123456.\"'"));
76 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.123456.7\"'"));
77 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.123456.7\"'"));
78
79 // AAC codecs must be followed by one or two valid hexadecimal numbers.
80 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.no\"'"));
81 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.0k\"'"));
82 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.0k.0k\"'"));
83 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.4.\"'"));
84 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.0k\"'"));
85 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.\"'"));
86 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40k\"'"));
87 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.2k\"'"));
88 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.2k\"'"));
89 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.2.\"'"));
90 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.2.0\"'"));
91
92 // Unlike just "avc1", just "mp4a" is not supported.'
93 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a\"'"));
94 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.\"'"));
95
96 // Other names for the codecs are not supported.
97 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"h264\"'"));
98 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"h.264\"'"));
99 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"H264\"'"));
100 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"H.264\"'"));
101 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"aac\"'"));
102 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"AAC\"'"));
68 103
69 // Codecs must not end with a dot. 104 // Codecs must not end with a dot.
70 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.\"'")); 105 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.\"'"));
71 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.\"'")); 106 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.\"'"));
72 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a\"'"));
73 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.\"'")); 107 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.\"'"));
74 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.\"'")); 108 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.\"'"));
75 109
110 // A simple substring match is not sufficient.
111 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"lavc1337\"'"));
112 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\";mp4a+\"'"));
113 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\";mp4a.40+\"'"));
114
76 // Codecs not belonging to MPEG container. 115 // Codecs not belonging to MPEG container.
77 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vorbis\"'")); 116 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vorbis\"'"));
78 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1, vorbis\"'")); 117 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1, vorbis\"'"));
79 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3, vorbis\"'")); 118 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3, vorbis\"'"));
80 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.4D401E, vorbis\"'")); 119 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.4D401E, vorbis\"'"));
81 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.64001F, vorbis\"'")); 120 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.64001F, vorbis\"'"));
82 121
83 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"opus\"'")); 122 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"opus\"'"));
84 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1, opus\"'")); 123 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1, opus\"'"));
85 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3, opus\"'")); 124 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3, opus\"'"));
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc2\"'")); 168 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc2\"'"));
130 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc4\"'")); 169 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc4\"'"));
131 170
132 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1x\"'")); 171 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1x\"'"));
133 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3x\"'")); 172 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3x\"'"));
134 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4ax\"'")); 173 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4ax\"'"));
135 174
136 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"unknown\"'")); 175 EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"unknown\"'"));
137 } 176 }
138 177
139 void TestOGGUnacceptableCombinations(std::string mime) { 178 void TestOGGUnacceptableCombinations(const std::string& mime) {
140 // Codecs not belonging to OGG container. 179 // Codecs not belonging to OGG container.
141 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8\"'")); 180 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8\"'"));
142 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0\"'")); 181 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0\"'"));
143 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, opus\"'")); 182 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, opus\"'"));
144 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, vorbis\"'")); 183 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, vorbis\"'"));
145 184
146 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9\"'")); 185 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9\"'"));
147 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9.0\"'")); 186 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9.0\"'"));
148 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9, opus\"'")); 187 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9, opus\"'"));
149 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9, vorbis\"'")); 188 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9, vorbis\"'"));
(...skipping 20 matching lines...) Expand all
170 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Theora\"'")); 209 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Theora\"'"));
171 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Opus\"'")); 210 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Opus\"'"));
172 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Vorbis\"'")); 211 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Vorbis\"'"));
173 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Theora, Opus\"'")); 212 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Theora, Opus\"'"));
174 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Theora, Vorbis\"'")); 213 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Theora, Vorbis\"'"));
175 214
176 // Unknown codecs. 215 // Unknown codecs.
177 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"unknown\"'")); 216 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"unknown\"'"));
178 } 217 }
179 218
180 void TestWEBMUnacceptableCombinations(std::string mime) { 219 void TestWEBMUnacceptableCombinations(const std::string& mime) {
181 // Codecs not belonging to WEBM container. 220 // Codecs not belonging to WEBM container.
182 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"1\"'")); 221 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"1\"'"));
183 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, 1\"'")); 222 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, 1\"'"));
184 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9, 1\"'")); 223 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9, 1\"'"));
185 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0, 1\"'")); 224 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0, 1\"'"));
186 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9.0, 1\"'")); 225 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9.0, 1\"'"));
187 226
188 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora\"'")); 227 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora\"'"));
189 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, vorbis\"'")); 228 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, vorbis\"'"));
190 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, opus\"'")); 229 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, opus\"'"));
(...skipping 18 matching lines...) Expand all
209 // Codecs are case sensitive. 248 // Codecs are case sensitive.
210 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"VP8, Vorbis\"'")); 249 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"VP8, Vorbis\"'"));
211 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"VP8.0, Opus\"'")); 250 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"VP8.0, Opus\"'"));
212 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"VP9, Vorbis\"'")); 251 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"VP9, Vorbis\"'"));
213 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"VP9.0, Opus\"'")); 252 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"VP9.0, Opus\"'"));
214 253
215 // Unknown codec. 254 // Unknown codec.
216 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"unknown\"'")); 255 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"unknown\"'"));
217 } 256 }
218 257
219 void TestWAVUnacceptableCombinations(std::string mime) { 258 void TestWAVUnacceptableCombinations(const std::string& mime) {
220 // Codecs not belonging to WAV container. 259 // Codecs not belonging to WAV container.
221 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8\"'")); 260 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8\"'"));
222 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9\"'")); 261 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9\"'"));
223 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0, 1\"'")); 262 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0, 1\"'"));
224 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9.0, 1\"'")); 263 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9.0, 1\"'"));
225 264
226 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vorbis\"'")); 265 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vorbis\"'"));
227 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"opus\"'")); 266 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"opus\"'"));
228 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora\"'")); 267 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora\"'"));
229 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, 1\"'")); 268 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, 1\"'"));
230 269
231 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1\"'")); 270 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1\"'"));
232 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3\"'")); 271 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3\"'"));
233 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1.4D401E\"'")); 272 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1.4D401E\"'"));
234 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3.64001F\"'")); 273 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3.64001F\"'"));
235 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1, 1\"'")); 274 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1, 1\"'"));
236 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3, 1\"'")); 275 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3, 1\"'"));
237 276
238 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40\"'")); 277 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40\"'"));
239 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.2\"'")); 278 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.2\"'"));
240 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.02\"'")); 279 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.02\"'"));
241 280
242 // Unknown codec. 281 // Unknown codec.
243 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"unknown\"'")); 282 EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"unknown\"'"));
244 } 283 }
245 284
246 private: 285 void TestAvcVariants(const std::string& base) {
ddorwin 2015/02/20 05:26:24 I don't like this: * It is more complex and potent
wolenetz 2015/02/23 19:57:45 Acknowledged (see my reply to PS3 thread while rev
286 // avc1 without extensions results in "maybe" for compatibility.
287 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + "\"'"));
288
289 // Any 6-digit hexadecimal number will result in at least "maybe".
290 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".123456\"'") );
291 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".ABCDEF\"'") );
292 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".abcdef\"'") );
293 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"" + base + ".12345\"'")) ;
294 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"" + base + ".1234567\"'" ));
295
296 // Both upper and lower case hexadecimal digits are accepted.
297 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42E01E\" '"));
298 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42e01e\" '"));
299
300 // From a YouTube DASH MSE test manifest.
301 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".4d401f\" '"));
302 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".4d401e\" '"));
303 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".4d4015\" '"));
304 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".640028\" '"));
305
306 //
307 // Baseline Profile (66 == 0x42).
308 // The first four digits must be 42E0, but Chrome also allows 42[8-F]0.
309 // (See http://crbug.com/408552#c17.)
310 // The last two digits must be any valid level.
311 //
312 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42E00A\" '"));
313
314 // The third digit must be 8-F.
315 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42001E\" '"));
316 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42101E\" '"));
317 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42201E\" '"));
318 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42301E\" '"));
319 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42401E\" '"));
320 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42501E\" '"));
321 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42601E\" '"));
322 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42701E\" '"));
323 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42801E\" '"));
324 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42901E\" '"));
325 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42A01E\" '"));
326 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42B01E\" '"));
327 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42C01E\" '"));
328 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42D01E\" '"));
329 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42E01E\" '"));
330 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42F01E\" '"));
331
332 // The fourth digit must be 0.
333 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42E11E\"'") );
334
335 //
336 // Main Profile (77 == 0x4D).
337 // The first four digits must be 4D40.
338 // The last two digits must be any valid level.
339 //
340 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".4D400A\" '"));
341 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".4D401E\" '"));
342
343 // Other values are not allowed for the third and fourth digits.
344 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".4D301E\"'") );
345 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".4D501E\"'") );
346 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".4D411E\"'") );
347 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".4D4F1E\"'") );
348
349 //
350 // High Profile (100 == 0x64).
351 // The first four digits must be 6400.
352 // The last two digits must be any valid level.
353 //
354 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".64000A\" '"));
355 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".64001E\" '"));
356 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".64001F\" '"));
357
358 // Other values are not allowed for the third and fourth digits.
359 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".64101E\"'") );
360 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".64f01E\"'") );
361 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".64011E\"'") );
362 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".640F1E\"'") );
363
364 //
365 // Other profiles are not known to be supported.
366 //
367
368 // Extended Profile (88 == 0x58).
369 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".58A01E\"'") );
370 }
371
372 private:
247 GURL url_; 373 GURL url_;
248 DISALLOW_COPY_AND_ASSIGN(MediaCanPlayTypeTest); 374 DISALLOW_COPY_AND_ASSIGN(MediaCanPlayTypeTest);
249 }; 375 };
250 376
251 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_wav) { 377 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_wav) {
252 EXPECT_EQ(kMaybe, CanPlay("'audio/wav'")); 378 EXPECT_EQ(kMaybe, CanPlay("'audio/wav'"));
253 EXPECT_EQ(kProbably, CanPlay("'audio/wav; codecs=\"1\"'")); 379 EXPECT_EQ(kProbably, CanPlay("'audio/wav; codecs=\"1\"'"));
254 380
255 TestWAVUnacceptableCombinations("audio/wav"); 381 TestWAVUnacceptableCombinations("audio/wav");
256 382
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 EXPECT_EQ(kProbably, CanPlay("'application/ogg; codecs=\"vorbis\"'")); 471 EXPECT_EQ(kProbably, CanPlay("'application/ogg; codecs=\"vorbis\"'"));
346 EXPECT_EQ(kTheoraProbably, CanPlay("'application/ogg; codecs=\"theora\"'")); 472 EXPECT_EQ(kTheoraProbably, CanPlay("'application/ogg; codecs=\"theora\"'"));
347 EXPECT_EQ(kOggOpusProbably, CanPlay("'application/ogg; codecs=\"opus\"'")); 473 EXPECT_EQ(kOggOpusProbably, CanPlay("'application/ogg; codecs=\"opus\"'"));
348 EXPECT_EQ(kTheoraProbably, 474 EXPECT_EQ(kTheoraProbably,
349 CanPlay("'application/ogg; codecs=\"theora, vorbis\"'")); 475 CanPlay("'application/ogg; codecs=\"theora, vorbis\"'"));
350 EXPECT_EQ(kTheoraProbably, 476 EXPECT_EQ(kTheoraProbably,
351 CanPlay("'application/ogg; codecs=\"theora, opus\"'")); 477 CanPlay("'application/ogg; codecs=\"theora, opus\"'"));
352 EXPECT_EQ(kOggOpusProbably, 478 EXPECT_EQ(kOggOpusProbably,
353 CanPlay("'application/ogg; codecs=\"opus, vorbis\"'")); 479 CanPlay("'application/ogg; codecs=\"opus, vorbis\"'"));
354 480
355 TestOGGUnacceptableCombinations("application/ogg"); 481 TestOGGUnacceptableCombinations("application/ogg");
356 } 482 }
357 483
358 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp3) { 484 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp3) {
359 EXPECT_EQ(kNot, CanPlay("'video/mp3'")); 485 EXPECT_EQ(kNot, CanPlay("'video/mp3'"));
360 EXPECT_EQ(kNot, CanPlay("'video/mpeg'")); 486 EXPECT_EQ(kNot, CanPlay("'video/mpeg'"));
361 EXPECT_EQ(kNot, CanPlay("'video/x-mp3'")); 487 EXPECT_EQ(kNot, CanPlay("'video/x-mp3'"));
362 488
363 // audio/mpeg without a codecs parameter (RFC 3003 compliant) 489 // audio/mpeg without a codecs parameter (RFC 3003 compliant)
364 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg'")); 490 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg'"));
365 491
366 // audio/mpeg with mp3 in codecs parameter. (Not RFC compliant, but 492 // audio/mpeg with mp3 in codecs parameter. (Not RFC compliant, but
367 // very common in the wild so it is a defacto standard). 493 // very common in the wild so it is a defacto standard).
368 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp3\"'")); 494 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp3\"'"));
369 495
370 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1\"'")); 496 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1\"'"));
371 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3\"'")); 497 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3\"'"));
372 498
373 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1.4D401E\"'")); 499 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1.4D401E\"'"));
374 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3.64001F\"'")); 500 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3.64001F\"'"));
375 501
376 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a\"'"));
377 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.2\"'")); 502 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.2\"'"));
378 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.02\"'")); 503 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.02\"'"));
379 504
380 TestMPEGUnacceptableCombinations("audio/mpeg"); 505 TestMPEGUnacceptableCombinations("audio/mpeg");
381 506
382 // audio/mp3 does not allow any codecs parameter 507 // audio/mp3 does not allow any codecs parameter
383 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3'")); 508 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3'"));
384 509
385 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1\"'")); 510 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1\"'"));
386 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3\"'")); 511 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3\"'"));
387 512
388 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1.4D401E\"'")); 513 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1.4D401E\"'"));
389 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3.64001F\"'")); 514 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3.64001F\"'"));
390 515
391 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a\"'"));
392 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.2\"'")); 516 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.2\"'"));
393 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.02\"'")); 517 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.02\"'"));
394 518
395 TestMPEGUnacceptableCombinations("audio/mp3"); 519 TestMPEGUnacceptableCombinations("audio/mp3");
396 520
397 // audio/x-mp3 does not allow any codecs parameter 521 // audio/x-mp3 does not allow any codecs parameter
398 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3'")); 522 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3'"));
399 523
400 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1\"'")); 524 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1\"'"));
401 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3\"'")); 525 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3\"'"));
402 526
403 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1.4D401E\"'")); 527 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1.4D401E\"'"));
404 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3.64001F\"'")); 528 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3.64001F\"'"));
405 529
406 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a\"'"));
407 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.2\"'")); 530 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.2\"'"));
408 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.02\"'")); 531 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.02\"'"));
409 532
410 TestMPEGUnacceptableCombinations("audio/x-mp3"); 533 TestMPEGUnacceptableCombinations("audio/x-mp3");
411 } 534 }
412 535
413 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) { 536 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
414 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4'")); 537 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4'"));
415 538
416 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'")); 539 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'"));
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3\"'")); 650 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3\"'"));
528 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1, mp4a\"'")); 651 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1, mp4a\"'"));
529 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3, mp4a\"'")); 652 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3, mp4a\"'"));
530 653
531 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1.4D401E\"'")); 654 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1.4D401E\"'"));
532 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3.64001F\"'")); 655 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3.64001F\"'"));
533 656
534 TestMPEGUnacceptableCombinations("audio/x-m4a"); 657 TestMPEGUnacceptableCombinations("audio/x-m4a");
535 } 658 }
536 659
660 // When modifying this test, also change CodecSupportTest_Avc3Variants.
661 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc1Variants) {
662 TestAvcVariants("avc1");
663 }
664
665 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc3Variants) {
666 TestAvcVariants("avc3");
667 }
668
669 // Tests AVC levels using AVC1 Baseline (0x42E0zz).
670 // Other supported values for the first four hexadecimal digits should behave
671 // the same way but are not tested.
672 // For each full level, the following are tested:
673 // * The hexadecimal value before it is not supported.
674 // * The hexadecimal value for the main level and all sub-levels are supported.
675 // * The hexadecimal value after the last sub-level it is not supported.
676 // * Decimal representations of the levels are not supported.
677
678 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_AvcLevels) {
679 // Level 0 is not supported.
680 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E000\"'"));
681
682 // Levels 1 (0x0A), 1.1 (0x0B), 1.2 (0x0C), 1.3 (0x0D).
683 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E009\"'"));
684 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00A\"'"));
685 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00B\"'"));
686 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00C\"'"));
687 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00D\"'"));
688 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E00E\"'"));
689 // Verify that decimal representations of levels are not supported.
690 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E001\"'"));
691 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E010\"'"));
692 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E011\"'"));
693 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E012\"'"));
694 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E013\"'"));
695
696 // Levels 2 (0x14), 2.1 (0x15), 2.2 (0x16)
697 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E013\"'"));
698 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E014\"'"));
699 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E015\"'"));
700 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E016\"'"));
701 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E017\"'"));
702 // Verify that decimal representations of levels are not supported.
703 // However, 20 is level 3.2.
704 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E002\"'"));
705 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E020\"'"));
706 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E021\"'"));
707 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E022\"'"));
708
709 // Levels 3 (0x1e), 3.1 (0x1F), 3.2 (0x20)
710 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E01D\"'"));
711 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01E\"'"));
712 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01F\"'"));
713 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E020\"'"));
714 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E021\"'"));
715 // Verify that decimal representations of levels are not supported.
716 // However, 32 is level 5.
717 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E003\"'"));
718 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E030\"'"));
719 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E031\"'"));
720 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E032\"'"));
721
722 // Levels 4 (0x28), 4.1 (0x29), 4.2 (0x2A)
723 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E027\"'"));
724 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E028\"'"));
725 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E029\"'"));
726 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E02A\"'"));
727 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E02B\"'"));
728 // Verify that decimal representations of levels are not supported.
729 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E004\"'"));
730 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E040\"'"));
731 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E041\"'"));
732 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E042\"'"));
733
734 // Levels 5 (0x32), 5.1 (0x33).
735 // Note: Level 5.2 (0x34) is not considered valid (crbug.com/460376).
736 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E031\"'"));
737 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E032\"'"));
738 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E033\"'"));
739 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E034\"'"));
740 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E035\"'"));
741 // Verify that decimal representations of levels are not supported.
742 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E005\"'"));
743 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E050\"'"));
744 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E051\"'"));
745 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E052\"'"));
746 }
747
748 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Mp4aVariants) {
749 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a\"'"));
750 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.\"'"));
751
752 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6\"'"));
753 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.60\"'"));
754 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.61\"'"));
755 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.62\"'"));
756 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.63\"'"));
757 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.65\"'"));
758 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.65\"'"));
759 // MPEG2 AAC Main, LC, and SSR are supported except on Android.
760 EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.66\"'"));
761 EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.67\"'"));
762 EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.68\"'"));
763 // MP3.
764 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.69\"'"));
765 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6A\"'"));
766 // MP3.
767 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.6B\"'"));
768 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6b\"'"));
769 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6C\"'"));
770 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6D\"'"));
771 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6E\"'"));
772 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6F\"'"));
773
774 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.76\"'"));
775
776 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4\"'"));
777 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.39\"'"));
778
779 // mp4a.40 without further extension is ambiguous and results in "maybe".
780 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"mp4a.40\"'"));
781
782 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.\"'"));
783 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.0\"'"));
784 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1\"'"));
785 // MPEG4 AAC LC.
786 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.2\"'"));
787 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.3\"'"));
788 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.4\"'"));
789 // MPEG4 AAC SBR v1.
790 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.5\"'"));
791 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.6\"'"));
792 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.7\"'"));
793 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.8\"'"));
794 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.9\"'"));
795 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.10\"'"));
796 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.20\"'"));
797 // MPEG4 AAC SBR PS v2.
798 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.29\"'"));
799 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.30\"'"));
800 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.40\"'"));
801 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.50\"'"));
802 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.290\"'"));
803 // Check conversions of decimal 29 to hex and hex 29 to decimal.
804 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1d\"'"));
805 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1D\"'"));
806 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.41\"'"));
807
808 // Allow leading zeros in aud-oti for specific MPEG4 AAC strings.
809 // See http://crbug.com/440607.
810 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.00\"'"));
811 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.01\"'"));
812 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.02\"'"));
813 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.03\"'"));
814 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.04\"'"));
815 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.05\"'"));
816 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.029\"'"));
817
818 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.41\"'"));
819 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.41.2\"'"));
820
821 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4.2\"'"));
822 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.400.2\"'"));
823 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.040.2\"'"));
824 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4.5\"'"));
825 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.400.5\"'"));
826 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.040.5\"'"));
827 }
828
537 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) { 829 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) {
538 // HLS are supported only on Android IceCreamSandwich and above (API level 14) 830 // HLS are supported only on Android IceCreamSandwich and above (API level 14)
539 std::string probablyCanPlayHLS = kNot; 831 std::string probablyCanPlayHLS = kNot;
540 std::string maybeCanPlayHLS = kNot; 832 std::string maybeCanPlayHLS = kNot;
541 #if defined(OS_ANDROID) 833 #if defined(OS_ANDROID)
542 if (base::android::BuildInfo::GetInstance()->sdk_int() > 13) { 834 if (base::android::BuildInfo::GetInstance()->sdk_int() > 13) {
543 probablyCanPlayHLS = kProbably; 835 probablyCanPlayHLS = kProbably;
544 maybeCanPlayHLS = kMaybe; 836 maybeCanPlayHLS = kMaybe;
545 } 837 }
546 #endif 838 #endif
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 CanPlay("'application/vnd.apple.mpegurl; " 951 CanPlay("'application/vnd.apple.mpegurl; "
660 "codecs=\"avc1.42E01E, mp4a.40\"'")); 952 "codecs=\"avc1.42E01E, mp4a.40\"'"));
661 EXPECT_EQ(maybeCanPlayHLS, 953 EXPECT_EQ(maybeCanPlayHLS,
662 CanPlay("'application/vnd.apple.mpegurl; " 954 CanPlay("'application/vnd.apple.mpegurl; "
663 "codecs=\"avc3.42E01E, mp4a.40\"'")); 955 "codecs=\"avc3.42E01E, mp4a.40\"'"));
664 956
665 TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl"); 957 TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl");
666 } 958 }
667 959
668 } // namespace content 960 } // namespace content
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