OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 // When modifying this test, also change CodecSupportTest_Avc1Variants. |
| 662 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc3Variants) { |
| 663 // avc3 without extensions results in "maybe" for compatibility. |
| 664 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3\"'")); |
| 665 |
| 666 // Any 6-digit hexadecimal number will result in at least "maybe". |
| 667 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.123456\"'")); |
| 668 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.ABCDEF\"'")); |
| 669 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.abcdef\"'")); |
| 670 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.12345\"'")); |
| 671 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.1234567\"'")); |
| 672 |
| 673 // Both upper and lower case hexadecimal digits are accepted. |
| 674 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42E01E\"'")); |
| 675 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42e01e\"'")); |
| 676 |
| 677 // From a YouTube DASH MSE test manifest. |
| 678 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4d401f\"'")); |
| 679 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4d401e\"'")); |
| 680 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4d4015\"'")); |
| 681 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.640028\"'")); |
| 682 |
| 683 // |
| 684 // Baseline Profile (66 == 0x42). |
| 685 // The first four digits must be 42E0, but Chrome also allows 42[8-F]0. |
| 686 // (See http://crbug.com/408552#c17.) |
| 687 // The last two digits must be any valid level. |
| 688 // |
| 689 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42E00A\"'")); |
| 690 |
| 691 // The third digit must be 8-F. |
| 692 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42001E\"'")); |
| 693 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42101E\"'")); |
| 694 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42201E\"'")); |
| 695 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42301E\"'")); |
| 696 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42401E\"'")); |
| 697 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42501E\"'")); |
| 698 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42601E\"'")); |
| 699 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42701E\"'")); |
| 700 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42801E\"'")); |
| 701 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42901E\"'")); |
| 702 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42A01E\"'")); |
| 703 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42B01E\"'")); |
| 704 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42C01E\"'")); |
| 705 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42D01E\"'")); |
| 706 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42E01E\"'")); |
| 707 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42F01E\"'")); |
| 708 |
| 709 // The fourth digit must be 0. |
| 710 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42E11E\"'")); |
| 711 |
| 712 // |
| 713 // Main Profile (77 == 0x4D). |
| 714 // The first four digits must be 4D40. |
| 715 // The last two digits must be any valid level. |
| 716 // |
| 717 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4D400A\"'")); |
| 718 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4D401E\"'")); |
| 719 |
| 720 // Other values are not allowed for the third and fourth digits. |
| 721 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.4D301E\"'")); |
| 722 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.4D501E\"'")); |
| 723 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.4D411E\"'")); |
| 724 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.4D4F1E\"'")); |
| 725 |
| 726 // |
| 727 // High Profile (100 == 0x64). |
| 728 // The first four digits must be 6400. |
| 729 // The last two digits must be any valid level. |
| 730 // |
| 731 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.64000A\"'")); |
| 732 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.64001E\"'")); |
| 733 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.64001F\"'")); |
| 734 |
| 735 // Other values are not allowed for the third and fourth digits. |
| 736 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.64101E\"'")); |
| 737 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.64f01E\"'")); |
| 738 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.64011E\"'")); |
| 739 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.640F1E\"'")); |
| 740 |
| 741 // |
| 742 // Other profiles are not known to be supported. |
| 743 // |
| 744 |
| 745 // Extended Profile (88 == 0x58). |
| 746 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.58A01E\"'")); |
| 747 } |
| 748 |
| 749 // Tests AVC levels using AVC1 Baseline (0x42E0zz). |
| 750 // Other supported values for the first four hexadecimal digits should behave |
| 751 // the same way but are not tested. |
| 752 // For each full level, the following are tested: |
| 753 // * The hexadecimal value before it is not supported. |
| 754 // * The hexadecimal value for the main level and all sub-levels are supported. |
| 755 // * The hexadecimal value after the last sub-level it is not supported. |
| 756 // * Decimal representations of the levels are not supported. |
| 757 |
| 758 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_AvcLevels) { |
| 759 // Level 0 is not supported. |
| 760 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E000\"'")); |
| 761 |
| 762 // Levels 1 (0x0A), 1.1 (0x0B), 1.2 (0x0C), 1.3 (0x0D). |
| 763 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E009\"'")); |
| 764 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00A\"'")); |
| 765 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00B\"'")); |
| 766 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00C\"'")); |
| 767 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00D\"'")); |
| 768 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E00E\"'")); |
| 769 // Verify that decimal representations of levels are not supported. |
| 770 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E001\"'")); |
| 771 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E010\"'")); |
| 772 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E011\"'")); |
| 773 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E012\"'")); |
| 774 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E013\"'")); |
| 775 |
| 776 // Levels 2 (0x14), 2.1 (0x15), 2.2 (0x16) |
| 777 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E013\"'")); |
| 778 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E014\"'")); |
| 779 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E015\"'")); |
| 780 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E016\"'")); |
| 781 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E017\"'")); |
| 782 // Verify that decimal representations of levels are not supported. |
| 783 // However, 20 is level 3.2. |
| 784 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E002\"'")); |
| 785 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E020\"'")); |
| 786 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E021\"'")); |
| 787 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E022\"'")); |
| 788 |
| 789 // Levels 3 (0x1e), 3.1 (0x1F), 3.2 (0x20) |
| 790 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E01D\"'")); |
| 791 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01E\"'")); |
| 792 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01F\"'")); |
| 793 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E020\"'")); |
| 794 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E021\"'")); |
| 795 // Verify that decimal representations of levels are not supported. |
| 796 // However, 32 is level 5. |
| 797 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E003\"'")); |
| 798 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E030\"'")); |
| 799 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E031\"'")); |
| 800 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E032\"'")); |
| 801 |
| 802 // Levels 4 (0x28), 4.1 (0x29), 4.2 (0x2A) |
| 803 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E027\"'")); |
| 804 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E028\"'")); |
| 805 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E029\"'")); |
| 806 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E02A\"'")); |
| 807 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E02B\"'")); |
| 808 // Verify that decimal representations of levels are not supported. |
| 809 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E004\"'")); |
| 810 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E040\"'")); |
| 811 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E041\"'")); |
| 812 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E042\"'")); |
| 813 |
| 814 // Levels 5 (0x32), 5.1 (0x33). |
| 815 // Note: Level 5.2 (0x34) is not considered valid (crbug.com/460376). |
| 816 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E031\"'")); |
| 817 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E032\"'")); |
| 818 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E033\"'")); |
| 819 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E034\"'")); |
| 820 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E035\"'")); |
| 821 // Verify that decimal representations of levels are not supported. |
| 822 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E005\"'")); |
| 823 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E050\"'")); |
| 824 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E051\"'")); |
| 825 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E052\"'")); |
| 826 } |
| 827 |
| 828 // All values that return positive results are tested. There are also |
| 829 // negative tests for values around or that could potentially be confused with |
| 830 // (e.g. case, truncation, hex <-> deciemal conversion) those values that return |
| 831 // positive results. |
| 832 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Mp4aVariants) { |
| 833 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a\"'")); |
| 834 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.\"'")); |
| 835 |
| 836 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6\"'")); |
| 837 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.60\"'")); |
| 838 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.61\"'")); |
| 839 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.62\"'")); |
| 840 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.63\"'")); |
| 841 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.65\"'")); |
| 842 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.65\"'")); |
| 843 // MPEG2 AAC Main, LC, and SSR are supported except on Android. |
| 844 EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.66\"'")); |
| 845 EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.67\"'")); |
| 846 EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.68\"'")); |
| 847 // MP3. |
| 848 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.69\"'")); |
| 849 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6A\"'")); |
| 850 // MP3. |
| 851 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.6B\"'")); |
| 852 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6b\"'")); |
| 853 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6C\"'")); |
| 854 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6D\"'")); |
| 855 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6E\"'")); |
| 856 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6F\"'")); |
| 857 |
| 858 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.76\"'")); |
| 859 |
| 860 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4\"'")); |
| 861 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.39\"'")); |
| 862 |
| 863 // mp4a.40 without further extension is ambiguous and results in "maybe". |
| 864 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"mp4a.40\"'")); |
| 865 |
| 866 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.\"'")); |
| 867 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.0\"'")); |
| 868 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1\"'")); |
| 869 // MPEG4 AAC LC. |
| 870 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.2\"'")); |
| 871 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.3\"'")); |
| 872 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.4\"'")); |
| 873 // MPEG4 AAC SBR v1. |
| 874 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.5\"'")); |
| 875 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.6\"'")); |
| 876 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.7\"'")); |
| 877 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.8\"'")); |
| 878 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.9\"'")); |
| 879 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.10\"'")); |
| 880 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.20\"'")); |
| 881 // MPEG4 AAC SBR PS v2. |
| 882 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.29\"'")); |
| 883 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.30\"'")); |
| 884 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.40\"'")); |
| 885 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.50\"'")); |
| 886 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.290\"'")); |
| 887 // Check conversions of decimal 29 to hex and hex 29 to decimal. |
| 888 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1d\"'")); |
| 889 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1D\"'")); |
| 890 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.41\"'")); |
| 891 |
| 892 // Allow leading zeros in aud-oti for specific MPEG4 AAC strings. |
| 893 // See http://crbug.com/440607. |
| 894 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.00\"'")); |
| 895 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.01\"'")); |
| 896 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.02\"'")); |
| 897 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.03\"'")); |
| 898 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.04\"'")); |
| 899 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.05\"'")); |
| 900 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.029\"'")); |
| 901 |
| 902 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.41\"'")); |
| 903 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.41.2\"'")); |
| 904 |
| 905 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4.2\"'")); |
| 906 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.400.2\"'")); |
| 907 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.040.2\"'")); |
| 908 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4.5\"'")); |
| 909 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.400.5\"'")); |
| 910 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.040.5\"'")); |
| 911 } |
| 912 |
537 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) { | 913 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) { |
538 // HLS are supported only on Android IceCreamSandwich and above (API level 14) | 914 // HLS are supported only on Android IceCreamSandwich and above (API level 14) |
539 std::string probablyCanPlayHLS = kNot; | 915 std::string probablyCanPlayHLS = kNot; |
540 std::string maybeCanPlayHLS = kNot; | 916 std::string maybeCanPlayHLS = kNot; |
541 #if defined(OS_ANDROID) | 917 #if defined(OS_ANDROID) |
542 if (base::android::BuildInfo::GetInstance()->sdk_int() > 13) { | 918 if (base::android::BuildInfo::GetInstance()->sdk_int() > 13) { |
543 probablyCanPlayHLS = kProbably; | 919 probablyCanPlayHLS = kProbably; |
544 maybeCanPlayHLS = kMaybe; | 920 maybeCanPlayHLS = kMaybe; |
545 } | 921 } |
546 #endif | 922 #endif |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
659 CanPlay("'application/vnd.apple.mpegurl; " | 1035 CanPlay("'application/vnd.apple.mpegurl; " |
660 "codecs=\"avc1.42E01E, mp4a.40\"'")); | 1036 "codecs=\"avc1.42E01E, mp4a.40\"'")); |
661 EXPECT_EQ(maybeCanPlayHLS, | 1037 EXPECT_EQ(maybeCanPlayHLS, |
662 CanPlay("'application/vnd.apple.mpegurl; " | 1038 CanPlay("'application/vnd.apple.mpegurl; " |
663 "codecs=\"avc3.42E01E, mp4a.40\"'")); | 1039 "codecs=\"avc3.42E01E, mp4a.40\"'")); |
664 | 1040 |
665 TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl"); | 1041 TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl"); |
666 } | 1042 } |
667 | 1043 |
668 } // namespace content | 1044 } // namespace content |
OLD | NEW |