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

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: Revert to separate avc1/avc3 tests and populate avc3 test. 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:
wolenetz 2015/02/23 19:57:45 nit: :) you fixed the private: indent. How 'bout t
ddorwin 2015/02/24 00:09:21 Done.
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.'
wolenetz 2015/02/23 19:57:45 nit: s/'//
ddorwin 2015/02/24 00:09:21 Done.
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 private:
247 GURL url_; 286 GURL url_;
248 DISALLOW_COPY_AND_ASSIGN(MediaCanPlayTypeTest); 287 DISALLOW_COPY_AND_ASSIGN(MediaCanPlayTypeTest);
249 }; 288 };
250 289
251 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_wav) { 290 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_wav) {
252 EXPECT_EQ(kMaybe, CanPlay("'audio/wav'")); 291 EXPECT_EQ(kMaybe, CanPlay("'audio/wav'"));
253 EXPECT_EQ(kProbably, CanPlay("'audio/wav; codecs=\"1\"'")); 292 EXPECT_EQ(kProbably, CanPlay("'audio/wav; codecs=\"1\"'"));
254 293
255 TestWAVUnacceptableCombinations("audio/wav"); 294 TestWAVUnacceptableCombinations("audio/wav");
256 295
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 EXPECT_EQ(kProbably, CanPlay("'application/ogg; codecs=\"vorbis\"'")); 384 EXPECT_EQ(kProbably, CanPlay("'application/ogg; codecs=\"vorbis\"'"));
346 EXPECT_EQ(kTheoraProbably, CanPlay("'application/ogg; codecs=\"theora\"'")); 385 EXPECT_EQ(kTheoraProbably, CanPlay("'application/ogg; codecs=\"theora\"'"));
347 EXPECT_EQ(kOggOpusProbably, CanPlay("'application/ogg; codecs=\"opus\"'")); 386 EXPECT_EQ(kOggOpusProbably, CanPlay("'application/ogg; codecs=\"opus\"'"));
348 EXPECT_EQ(kTheoraProbably, 387 EXPECT_EQ(kTheoraProbably,
349 CanPlay("'application/ogg; codecs=\"theora, vorbis\"'")); 388 CanPlay("'application/ogg; codecs=\"theora, vorbis\"'"));
350 EXPECT_EQ(kTheoraProbably, 389 EXPECT_EQ(kTheoraProbably,
351 CanPlay("'application/ogg; codecs=\"theora, opus\"'")); 390 CanPlay("'application/ogg; codecs=\"theora, opus\"'"));
352 EXPECT_EQ(kOggOpusProbably, 391 EXPECT_EQ(kOggOpusProbably,
353 CanPlay("'application/ogg; codecs=\"opus, vorbis\"'")); 392 CanPlay("'application/ogg; codecs=\"opus, vorbis\"'"));
354 393
355 TestOGGUnacceptableCombinations("application/ogg"); 394 TestOGGUnacceptableCombinations("application/ogg");
356 } 395 }
357 396
358 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp3) { 397 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp3) {
359 EXPECT_EQ(kNot, CanPlay("'video/mp3'")); 398 EXPECT_EQ(kNot, CanPlay("'video/mp3'"));
360 EXPECT_EQ(kNot, CanPlay("'video/mpeg'")); 399 EXPECT_EQ(kNot, CanPlay("'video/mpeg'"));
361 EXPECT_EQ(kNot, CanPlay("'video/x-mp3'")); 400 EXPECT_EQ(kNot, CanPlay("'video/x-mp3'"));
362 401
363 // audio/mpeg without a codecs parameter (RFC 3003 compliant) 402 // audio/mpeg without a codecs parameter (RFC 3003 compliant)
364 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg'")); 403 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg'"));
365 404
366 // audio/mpeg with mp3 in codecs parameter. (Not RFC compliant, but 405 // audio/mpeg with mp3 in codecs parameter. (Not RFC compliant, but
367 // very common in the wild so it is a defacto standard). 406 // very common in the wild so it is a defacto standard).
368 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp3\"'")); 407 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp3\"'"));
369 408
370 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1\"'")); 409 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1\"'"));
371 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3\"'")); 410 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3\"'"));
372 411
373 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1.4D401E\"'")); 412 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1.4D401E\"'"));
374 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3.64001F\"'")); 413 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3.64001F\"'"));
375 414
376 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a\"'"));
377 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.2\"'")); 415 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.2\"'"));
378 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.02\"'")); 416 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.02\"'"));
379 417
380 TestMPEGUnacceptableCombinations("audio/mpeg"); 418 TestMPEGUnacceptableCombinations("audio/mpeg");
381 419
382 // audio/mp3 does not allow any codecs parameter 420 // audio/mp3 does not allow any codecs parameter
383 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3'")); 421 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3'"));
384 422
385 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1\"'")); 423 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1\"'"));
386 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3\"'")); 424 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3\"'"));
387 425
388 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1.4D401E\"'")); 426 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1.4D401E\"'"));
389 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3.64001F\"'")); 427 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3.64001F\"'"));
390 428
391 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a\"'"));
392 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.2\"'")); 429 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.2\"'"));
393 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.02\"'")); 430 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.02\"'"));
394 431
395 TestMPEGUnacceptableCombinations("audio/mp3"); 432 TestMPEGUnacceptableCombinations("audio/mp3");
396 433
397 // audio/x-mp3 does not allow any codecs parameter 434 // audio/x-mp3 does not allow any codecs parameter
398 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3'")); 435 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3'"));
399 436
400 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1\"'")); 437 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1\"'"));
401 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3\"'")); 438 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3\"'"));
402 439
403 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1.4D401E\"'")); 440 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1.4D401E\"'"));
404 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3.64001F\"'")); 441 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3.64001F\"'"));
405 442
406 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a\"'"));
407 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.2\"'")); 443 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.2\"'"));
408 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.02\"'")); 444 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.02\"'"));
409 445
410 TestMPEGUnacceptableCombinations("audio/x-mp3"); 446 TestMPEGUnacceptableCombinations("audio/x-mp3");
411 } 447 }
412 448
413 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) { 449 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
414 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4'")); 450 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4'"));
415 451
416 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'")); 452 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\"'")); 563 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3\"'"));
528 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1, mp4a\"'")); 564 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1, mp4a\"'"));
529 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3, mp4a\"'")); 565 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3, mp4a\"'"));
530 566
531 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1.4D401E\"'")); 567 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1.4D401E\"'"));
532 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3.64001F\"'")); 568 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3.64001F\"'"));
533 569
534 TestMPEGUnacceptableCombinations("audio/x-m4a"); 570 TestMPEGUnacceptableCombinations("audio/x-m4a");
535 } 571 }
536 572
573 // When modifying this test, also change CodecSupportTest_Avc3Variants.
574 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc1Variants) {
575 // avc1 without extensions results in "maybe" for compatibility.
576 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'"));
577
578 // Any 6-digit hexadecimal number will result in at least "maybe".
579 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.123456\"'"));
580 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.ABCDEF\"'"));
581 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.abcdef\"'"));
582 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.12345\"'"));
583 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.1234567\"'"));
584
585 // Both upper and lower case hexadecimal digits are accepted.
586 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01E\"'"));
587 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42e01e\"'"));
588
589 // From a YouTube DASH MSE test manifest.
590 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4d401f\"'"));
591 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4d401e\"'"));
592 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4d4015\"'"));
593 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.640028\"'"));
594
595 //
596 // Baseline Profile (66 == 0x42).
597 // The first four digits must be 42E0, but Chrome also allows 42[8-F]0.
598 // (See http://crbug.com/408552#c17.)
599 // The last two digits must be any valid level.
600 //
601 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00A\"'"));
602
603 // The third digit must be 8-F.
604 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42001E\"'"));
605 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42101E\"'"));
606 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42201E\"'"));
607 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42301E\"'"));
608 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42401E\"'"));
609 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42501E\"'"));
610 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42601E\"'"));
611 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42701E\"'"));
612 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42801E\"'"));
613 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42901E\"'"));
614 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42A01E\"'"));
615 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42B01E\"'"));
616 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42C01E\"'"));
617 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42D01E\"'"));
618 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01E\"'"));
619 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42F01E\"'"));
620
621 // The fourth digit must be 0.
622 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E11E\"'"));
623
624 //
625 // Main Profile (77 == 0x4D).
626 // The first four digits must be 4D40.
627 // The last two digits must be any valid level.
628 //
629 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4D400A\"'"));
630 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4D401E\"'"));
631
632 // Other values are not allowed for the third and fourth digits.
633 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.4D301E\"'"));
634 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.4D501E\"'"));
635 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.4D411E\"'"));
636 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.4D4F1E\"'"));
637
638 //
639 // High Profile (100 == 0x64).
640 // The first four digits must be 6400.
641 // The last two digits must be any valid level.
642 //
643 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.64000A\"'"));
644 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.64001E\"'"));
645 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.64001F\"'"));
646
647 // Other values are not allowed for the third and fourth digits.
648 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.64101E\"'"));
649 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.64f01E\"'"));
650 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.64011E\"'"));
651 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.640F1E\"'"));
652
653 //
654 // Other profiles are not known to be supported.
655 //
656
657 // Extended Profile (88 == 0x58).
658 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.58A01E\"'"));
659 }
660
661 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc3Variants) {
wolenetz 2015/02/23 19:57:45 nit: likewise add a comment about need to maintain
ddorwin 2015/02/24 00:09:21 Done.
662 // avc3 without extensions results in "maybe" for compatibility.
663 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3\"'"));
664
665 // Any 6-digit hexadecimal number will result in at least "maybe".
666 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.123456\"'"));
667 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.ABCDEF\"'"));
668 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.abcdef\"'"));
669 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.12345\"'"));
670 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.1234567\"'"));
671
672 // Both upper and lower case hexadecimal digits are accepted.
673 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42E01E\"'"));
674 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42e01e\"'"));
675
676 // From a YouTube DASH MSE test manifest.
677 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4d401f\"'"));
678 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4d401e\"'"));
679 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4d4015\"'"));
680 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.640028\"'"));
681
682 //
683 // Baseline Profile (66 == 0x42).
684 // The first four digits must be 42E0, but Chrome also allows 42[8-F]0.
685 // (See http://crbug.com/408552#c17.)
686 // The last two digits must be any valid level.
687 //
688 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42E00A\"'"));
689
690 // The third digit must be 8-F.
691 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42001E\"'"));
692 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42101E\"'"));
693 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42201E\"'"));
694 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42301E\"'"));
695 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42401E\"'"));
696 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42501E\"'"));
697 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42601E\"'"));
698 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42701E\"'"));
699 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42801E\"'"));
700 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42901E\"'"));
701 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42A01E\"'"));
702 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42B01E\"'"));
703 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42C01E\"'"));
704 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42D01E\"'"));
705 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42E01E\"'"));
706 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42F01E\"'"));
707
708 // The fourth digit must be 0.
709 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42E11E\"'"));
710
711 //
712 // Main Profile (77 == 0x4D).
713 // The first four digits must be 4D40.
714 // The last two digits must be any valid level.
715 //
716 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4D400A\"'"));
717 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4D401E\"'"));
718
719 // Other values are not allowed for the third and fourth digits.
720 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.4D301E\"'"));
721 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.4D501E\"'"));
722 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.4D411E\"'"));
723 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.4D4F1E\"'"));
724
725 //
726 // High Profile (100 == 0x64).
727 // The first four digits must be 6400.
728 // The last two digits must be any valid level.
729 //
730 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.64000A\"'"));
731 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.64001E\"'"));
732 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.64001F\"'"));
733
734 // Other values are not allowed for the third and fourth digits.
735 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.64101E\"'"));
736 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.64f01E\"'"));
737 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.64011E\"'"));
738 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.640F1E\"'"));
739
740 //
741 // Other profiles are not known to be supported.
742 //
743
744 // Extended Profile (88 == 0x58).
745 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.58A01E\"'"));
746 }
747
748 // Tests AVC levels using AVC1 Baseline (0x42E0zz).
749 // Other supported values for the first four hexadecimal digits should behave
750 // the same way but are not tested.
751 // For each full level, the following are tested:
752 // * The hexadecimal value before it is not supported.
753 // * The hexadecimal value for the main level and all sub-levels are supported.
754 // * The hexadecimal value after the last sub-level it is not supported.
755 // * Decimal representations of the levels are not supported.
756
757 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_AvcLevels) {
758 // Level 0 is not supported.
759 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E000\"'"));
760
761 // Levels 1 (0x0A), 1.1 (0x0B), 1.2 (0x0C), 1.3 (0x0D).
762 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E009\"'"));
763 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00A\"'"));
764 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00B\"'"));
765 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00C\"'"));
766 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00D\"'"));
767 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E00E\"'"));
768 // Verify that decimal representations of levels are not supported.
769 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E001\"'"));
770 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E010\"'"));
771 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E011\"'"));
772 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E012\"'"));
773 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E013\"'"));
774
775 // Levels 2 (0x14), 2.1 (0x15), 2.2 (0x16)
776 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E013\"'"));
777 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E014\"'"));
778 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E015\"'"));
779 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E016\"'"));
780 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E017\"'"));
781 // Verify that decimal representations of levels are not supported.
782 // However, 20 is level 3.2.
783 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E002\"'"));
784 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E020\"'"));
785 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E021\"'"));
786 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E022\"'"));
787
788 // Levels 3 (0x1e), 3.1 (0x1F), 3.2 (0x20)
789 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E01D\"'"));
790 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01E\"'"));
791 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01F\"'"));
792 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E020\"'"));
793 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E021\"'"));
794 // Verify that decimal representations of levels are not supported.
795 // However, 32 is level 5.
796 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E003\"'"));
797 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E030\"'"));
798 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E031\"'"));
799 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E032\"'"));
800
801 // Levels 4 (0x28), 4.1 (0x29), 4.2 (0x2A)
802 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E027\"'"));
803 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E028\"'"));
804 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E029\"'"));
805 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E02A\"'"));
806 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E02B\"'"));
807 // Verify that decimal representations of levels are not supported.
808 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E004\"'"));
809 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E040\"'"));
810 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E041\"'"));
811 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E042\"'"));
812
813 // Levels 5 (0x32), 5.1 (0x33).
814 // Note: Level 5.2 (0x34) is not considered valid (crbug.com/460376).
815 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E031\"'"));
816 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E032\"'"));
817 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E033\"'"));
818 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E034\"'"));
819 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E035\"'"));
820 // Verify that decimal representations of levels are not supported.
821 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E005\"'"));
822 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E050\"'"));
823 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E051\"'"));
824 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E052\"'"));
825 }
826
827 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Mp4aVariants) {
828 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a\"'"));
829 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.\"'"));
830
831 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6\"'"));
832 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.60\"'"));
833 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.61\"'"));
834 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.62\"'"));
835 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.63\"'"));
836 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.65\"'"));
837 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.65\"'"));
838 // MPEG2 AAC Main, LC, and SSR are supported except on Android.
839 EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.66\"'"));
840 EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.67\"'"));
841 EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.68\"'"));
842 // MP3.
843 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.69\"'"));
844 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6A\"'"));
845 // MP3.
846 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.6B\"'"));
847 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6b\"'"));
848 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6C\"'"));
849 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6D\"'"));
850 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6E\"'"));
851 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6F\"'"));
852
853 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.76\"'"));
854
855 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4\"'"));
856 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.39\"'"));
857
858 // mp4a.40 without further extension is ambiguous and results in "maybe".
859 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"mp4a.40\"'"));
860
861 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.\"'"));
862 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.0\"'"));
863 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1\"'"));
864 // MPEG4 AAC LC.
865 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.2\"'"));
866 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.3\"'"));
867 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.4\"'"));
868 // MPEG4 AAC SBR v1.
869 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.5\"'"));
870 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.6\"'"));
871 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.7\"'"));
872 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.8\"'"));
873 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.9\"'"));
874 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.10\"'"));
875 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.20\"'"));
876 // MPEG4 AAC SBR PS v2.
877 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.29\"'"));
878 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.30\"'"));
879 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.40\"'"));
880 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.50\"'"));
881 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.290\"'"));
882 // Check conversions of decimal 29 to hex and hex 29 to decimal.
883 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1d\"'"));
884 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1D\"'"));
885 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.41\"'"));
886
887 // Allow leading zeros in aud-oti for specific MPEG4 AAC strings.
888 // See http://crbug.com/440607.
889 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.00\"'"));
890 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.01\"'"));
891 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.02\"'"));
892 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.03\"'"));
893 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.04\"'"));
894 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.05\"'"));
895 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.029\"'"));
896
897 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.41\"'"));
898 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.41.2\"'"));
899
900 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4.2\"'"));
901 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.400.2\"'"));
902 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.040.2\"'"));
903 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4.5\"'"));
904 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.400.5\"'"));
905 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.040.5\"'"));
906 }
907
537 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) { 908 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) {
538 // HLS are supported only on Android IceCreamSandwich and above (API level 14) 909 // HLS are supported only on Android IceCreamSandwich and above (API level 14)
539 std::string probablyCanPlayHLS = kNot; 910 std::string probablyCanPlayHLS = kNot;
540 std::string maybeCanPlayHLS = kNot; 911 std::string maybeCanPlayHLS = kNot;
541 #if defined(OS_ANDROID) 912 #if defined(OS_ANDROID)
542 if (base::android::BuildInfo::GetInstance()->sdk_int() > 13) { 913 if (base::android::BuildInfo::GetInstance()->sdk_int() > 13) {
543 probablyCanPlayHLS = kProbably; 914 probablyCanPlayHLS = kProbably;
544 maybeCanPlayHLS = kMaybe; 915 maybeCanPlayHLS = kMaybe;
545 } 916 }
546 #endif 917 #endif
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 CanPlay("'application/vnd.apple.mpegurl; " 1030 CanPlay("'application/vnd.apple.mpegurl; "
660 "codecs=\"avc1.42E01E, mp4a.40\"'")); 1031 "codecs=\"avc1.42E01E, mp4a.40\"'"));
661 EXPECT_EQ(maybeCanPlayHLS, 1032 EXPECT_EQ(maybeCanPlayHLS,
662 CanPlay("'application/vnd.apple.mpegurl; " 1033 CanPlay("'application/vnd.apple.mpegurl; "
663 "codecs=\"avc3.42E01E, mp4a.40\"'")); 1034 "codecs=\"avc3.42E01E, mp4a.40\"'"));
664 1035
665 TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl"); 1036 TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl");
666 } 1037 }
667 1038
668 } // namespace content 1039 } // 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