Chromium Code Reviews| 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 void TestAvcVariants(const std::string& base) { |
|
ddorwin
2015/02/20 05:26:24
I don't like this:
* It is more complex and potent
wolenetz
2015/02/23 19:57:45
Acknowledged (see my reply to PS3 thread while rev
| |
| 286 // avc1 without extensions results in "maybe" for compatibility. | |
| 287 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + "\"'")); | |
| 288 | |
| 289 // Any 6-digit hexadecimal number will result in at least "maybe". | |
| 290 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".123456\"'") ); | |
| 291 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".ABCDEF\"'") ); | |
| 292 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".abcdef\"'") ); | |
| 293 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"" + base + ".12345\"'")) ; | |
| 294 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"" + base + ".1234567\"'" )); | |
| 295 | |
| 296 // Both upper and lower case hexadecimal digits are accepted. | |
| 297 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42E01E\" '")); | |
| 298 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42e01e\" '")); | |
| 299 | |
| 300 // From a YouTube DASH MSE test manifest. | |
| 301 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".4d401f\" '")); | |
| 302 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".4d401e\" '")); | |
| 303 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".4d4015\" '")); | |
| 304 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".640028\" '")); | |
| 305 | |
| 306 // | |
| 307 // Baseline Profile (66 == 0x42). | |
| 308 // The first four digits must be 42E0, but Chrome also allows 42[8-F]0. | |
| 309 // (See http://crbug.com/408552#c17.) | |
| 310 // The last two digits must be any valid level. | |
| 311 // | |
| 312 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42E00A\" '")); | |
| 313 | |
| 314 // The third digit must be 8-F. | |
| 315 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42001E\" '")); | |
| 316 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42101E\" '")); | |
| 317 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42201E\" '")); | |
| 318 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42301E\" '")); | |
| 319 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42401E\" '")); | |
| 320 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42501E\" '")); | |
| 321 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42601E\" '")); | |
| 322 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42701E\" '")); | |
| 323 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42801E\" '")); | |
| 324 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42901E\" '")); | |
| 325 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42A01E\" '")); | |
| 326 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42B01E\" '")); | |
| 327 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42C01E\" '")); | |
| 328 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42D01E\" '")); | |
| 329 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42E01E\" '")); | |
| 330 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".42F01E\" '")); | |
| 331 | |
| 332 // The fourth digit must be 0. | |
| 333 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".42E11E\"'") ); | |
| 334 | |
| 335 // | |
| 336 // Main Profile (77 == 0x4D). | |
| 337 // The first four digits must be 4D40. | |
| 338 // The last two digits must be any valid level. | |
| 339 // | |
| 340 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".4D400A\" '")); | |
| 341 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".4D401E\" '")); | |
| 342 | |
| 343 // Other values are not allowed for the third and fourth digits. | |
| 344 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".4D301E\"'") ); | |
| 345 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".4D501E\"'") ); | |
| 346 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".4D411E\"'") ); | |
| 347 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".4D4F1E\"'") ); | |
| 348 | |
| 349 // | |
| 350 // High Profile (100 == 0x64). | |
| 351 // The first four digits must be 6400. | |
| 352 // The last two digits must be any valid level. | |
| 353 // | |
| 354 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".64000A\" '")); | |
| 355 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".64001E\" '")); | |
| 356 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"" + base + ".64001F\" '")); | |
| 357 | |
| 358 // Other values are not allowed for the third and fourth digits. | |
| 359 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".64101E\"'") ); | |
| 360 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".64f01E\"'") ); | |
| 361 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".64011E\"'") ); | |
| 362 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".640F1E\"'") ); | |
| 363 | |
| 364 // | |
| 365 // Other profiles are not known to be supported. | |
| 366 // | |
| 367 | |
| 368 // Extended Profile (88 == 0x58). | |
| 369 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"" + base + ".58A01E\"'") ); | |
| 370 } | |
| 371 | |
| 372 private: | |
| 247 GURL url_; | 373 GURL url_; |
| 248 DISALLOW_COPY_AND_ASSIGN(MediaCanPlayTypeTest); | 374 DISALLOW_COPY_AND_ASSIGN(MediaCanPlayTypeTest); |
| 249 }; | 375 }; |
| 250 | 376 |
| 251 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_wav) { | 377 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_wav) { |
| 252 EXPECT_EQ(kMaybe, CanPlay("'audio/wav'")); | 378 EXPECT_EQ(kMaybe, CanPlay("'audio/wav'")); |
| 253 EXPECT_EQ(kProbably, CanPlay("'audio/wav; codecs=\"1\"'")); | 379 EXPECT_EQ(kProbably, CanPlay("'audio/wav; codecs=\"1\"'")); |
| 254 | 380 |
| 255 TestWAVUnacceptableCombinations("audio/wav"); | 381 TestWAVUnacceptableCombinations("audio/wav"); |
| 256 | 382 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 345 EXPECT_EQ(kProbably, CanPlay("'application/ogg; codecs=\"vorbis\"'")); | 471 EXPECT_EQ(kProbably, CanPlay("'application/ogg; codecs=\"vorbis\"'")); |
| 346 EXPECT_EQ(kTheoraProbably, CanPlay("'application/ogg; codecs=\"theora\"'")); | 472 EXPECT_EQ(kTheoraProbably, CanPlay("'application/ogg; codecs=\"theora\"'")); |
| 347 EXPECT_EQ(kOggOpusProbably, CanPlay("'application/ogg; codecs=\"opus\"'")); | 473 EXPECT_EQ(kOggOpusProbably, CanPlay("'application/ogg; codecs=\"opus\"'")); |
| 348 EXPECT_EQ(kTheoraProbably, | 474 EXPECT_EQ(kTheoraProbably, |
| 349 CanPlay("'application/ogg; codecs=\"theora, vorbis\"'")); | 475 CanPlay("'application/ogg; codecs=\"theora, vorbis\"'")); |
| 350 EXPECT_EQ(kTheoraProbably, | 476 EXPECT_EQ(kTheoraProbably, |
| 351 CanPlay("'application/ogg; codecs=\"theora, opus\"'")); | 477 CanPlay("'application/ogg; codecs=\"theora, opus\"'")); |
| 352 EXPECT_EQ(kOggOpusProbably, | 478 EXPECT_EQ(kOggOpusProbably, |
| 353 CanPlay("'application/ogg; codecs=\"opus, vorbis\"'")); | 479 CanPlay("'application/ogg; codecs=\"opus, vorbis\"'")); |
| 354 | 480 |
| 355 TestOGGUnacceptableCombinations("application/ogg"); | 481 TestOGGUnacceptableCombinations("application/ogg"); |
| 356 } | 482 } |
| 357 | 483 |
| 358 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp3) { | 484 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp3) { |
| 359 EXPECT_EQ(kNot, CanPlay("'video/mp3'")); | 485 EXPECT_EQ(kNot, CanPlay("'video/mp3'")); |
| 360 EXPECT_EQ(kNot, CanPlay("'video/mpeg'")); | 486 EXPECT_EQ(kNot, CanPlay("'video/mpeg'")); |
| 361 EXPECT_EQ(kNot, CanPlay("'video/x-mp3'")); | 487 EXPECT_EQ(kNot, CanPlay("'video/x-mp3'")); |
| 362 | 488 |
| 363 // audio/mpeg without a codecs parameter (RFC 3003 compliant) | 489 // audio/mpeg without a codecs parameter (RFC 3003 compliant) |
| 364 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg'")); | 490 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg'")); |
| 365 | 491 |
| 366 // audio/mpeg with mp3 in codecs parameter. (Not RFC compliant, but | 492 // audio/mpeg with mp3 in codecs parameter. (Not RFC compliant, but |
| 367 // very common in the wild so it is a defacto standard). | 493 // very common in the wild so it is a defacto standard). |
| 368 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp3\"'")); | 494 EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp3\"'")); |
| 369 | 495 |
| 370 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1\"'")); | 496 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1\"'")); |
| 371 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3\"'")); | 497 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3\"'")); |
| 372 | 498 |
| 373 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1.4D401E\"'")); | 499 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1.4D401E\"'")); |
| 374 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3.64001F\"'")); | 500 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3.64001F\"'")); |
| 375 | 501 |
| 376 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a\"'")); | |
| 377 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.2\"'")); | 502 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.2\"'")); |
| 378 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.02\"'")); | 503 EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.02\"'")); |
| 379 | 504 |
| 380 TestMPEGUnacceptableCombinations("audio/mpeg"); | 505 TestMPEGUnacceptableCombinations("audio/mpeg"); |
| 381 | 506 |
| 382 // audio/mp3 does not allow any codecs parameter | 507 // audio/mp3 does not allow any codecs parameter |
| 383 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3'")); | 508 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3'")); |
| 384 | 509 |
| 385 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1\"'")); | 510 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1\"'")); |
| 386 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3\"'")); | 511 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3\"'")); |
| 387 | 512 |
| 388 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1.4D401E\"'")); | 513 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1.4D401E\"'")); |
| 389 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3.64001F\"'")); | 514 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3.64001F\"'")); |
| 390 | 515 |
| 391 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a\"'")); | |
| 392 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.2\"'")); | 516 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.2\"'")); |
| 393 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.02\"'")); | 517 EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.02\"'")); |
| 394 | 518 |
| 395 TestMPEGUnacceptableCombinations("audio/mp3"); | 519 TestMPEGUnacceptableCombinations("audio/mp3"); |
| 396 | 520 |
| 397 // audio/x-mp3 does not allow any codecs parameter | 521 // audio/x-mp3 does not allow any codecs parameter |
| 398 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3'")); | 522 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3'")); |
| 399 | 523 |
| 400 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1\"'")); | 524 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1\"'")); |
| 401 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3\"'")); | 525 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3\"'")); |
| 402 | 526 |
| 403 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1.4D401E\"'")); | 527 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1.4D401E\"'")); |
| 404 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3.64001F\"'")); | 528 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3.64001F\"'")); |
| 405 | 529 |
| 406 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a\"'")); | |
| 407 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.2\"'")); | 530 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.2\"'")); |
| 408 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.02\"'")); | 531 EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.02\"'")); |
| 409 | 532 |
| 410 TestMPEGUnacceptableCombinations("audio/x-mp3"); | 533 TestMPEGUnacceptableCombinations("audio/x-mp3"); |
| 411 } | 534 } |
| 412 | 535 |
| 413 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) { | 536 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) { |
| 414 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4'")); | 537 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4'")); |
| 415 | 538 |
| 416 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'")); | 539 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'")); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 527 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3\"'")); | 650 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3\"'")); |
| 528 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1, mp4a\"'")); | 651 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1, mp4a\"'")); |
| 529 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3, mp4a\"'")); | 652 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3, mp4a\"'")); |
| 530 | 653 |
| 531 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1.4D401E\"'")); | 654 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1.4D401E\"'")); |
| 532 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3.64001F\"'")); | 655 EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3.64001F\"'")); |
| 533 | 656 |
| 534 TestMPEGUnacceptableCombinations("audio/x-m4a"); | 657 TestMPEGUnacceptableCombinations("audio/x-m4a"); |
| 535 } | 658 } |
| 536 | 659 |
| 660 // When modifying this test, also change CodecSupportTest_Avc3Variants. | |
| 661 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc1Variants) { | |
| 662 TestAvcVariants("avc1"); | |
| 663 } | |
| 664 | |
| 665 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc3Variants) { | |
| 666 TestAvcVariants("avc3"); | |
| 667 } | |
| 668 | |
| 669 // Tests AVC levels using AVC1 Baseline (0x42E0zz). | |
| 670 // Other supported values for the first four hexadecimal digits should behave | |
| 671 // the same way but are not tested. | |
| 672 // For each full level, the following are tested: | |
| 673 // * The hexadecimal value before it is not supported. | |
| 674 // * The hexadecimal value for the main level and all sub-levels are supported. | |
| 675 // * The hexadecimal value after the last sub-level it is not supported. | |
| 676 // * Decimal representations of the levels are not supported. | |
| 677 | |
| 678 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_AvcLevels) { | |
| 679 // Level 0 is not supported. | |
| 680 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E000\"'")); | |
| 681 | |
| 682 // Levels 1 (0x0A), 1.1 (0x0B), 1.2 (0x0C), 1.3 (0x0D). | |
| 683 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E009\"'")); | |
| 684 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00A\"'")); | |
| 685 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00B\"'")); | |
| 686 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00C\"'")); | |
| 687 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00D\"'")); | |
| 688 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E00E\"'")); | |
| 689 // Verify that decimal representations of levels are not supported. | |
| 690 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E001\"'")); | |
| 691 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E010\"'")); | |
| 692 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E011\"'")); | |
| 693 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E012\"'")); | |
| 694 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E013\"'")); | |
| 695 | |
| 696 // Levels 2 (0x14), 2.1 (0x15), 2.2 (0x16) | |
| 697 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E013\"'")); | |
| 698 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E014\"'")); | |
| 699 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E015\"'")); | |
| 700 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E016\"'")); | |
| 701 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E017\"'")); | |
| 702 // Verify that decimal representations of levels are not supported. | |
| 703 // However, 20 is level 3.2. | |
| 704 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E002\"'")); | |
| 705 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E020\"'")); | |
| 706 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E021\"'")); | |
| 707 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E022\"'")); | |
| 708 | |
| 709 // Levels 3 (0x1e), 3.1 (0x1F), 3.2 (0x20) | |
| 710 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E01D\"'")); | |
| 711 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01E\"'")); | |
| 712 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01F\"'")); | |
| 713 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E020\"'")); | |
| 714 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E021\"'")); | |
| 715 // Verify that decimal representations of levels are not supported. | |
| 716 // However, 32 is level 5. | |
| 717 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E003\"'")); | |
| 718 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E030\"'")); | |
| 719 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E031\"'")); | |
| 720 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E032\"'")); | |
| 721 | |
| 722 // Levels 4 (0x28), 4.1 (0x29), 4.2 (0x2A) | |
| 723 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E027\"'")); | |
| 724 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E028\"'")); | |
| 725 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E029\"'")); | |
| 726 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E02A\"'")); | |
| 727 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E02B\"'")); | |
| 728 // Verify that decimal representations of levels are not supported. | |
| 729 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E004\"'")); | |
| 730 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E040\"'")); | |
| 731 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E041\"'")); | |
| 732 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E042\"'")); | |
| 733 | |
| 734 // Levels 5 (0x32), 5.1 (0x33). | |
| 735 // Note: Level 5.2 (0x34) is not considered valid (crbug.com/460376). | |
| 736 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E031\"'")); | |
| 737 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E032\"'")); | |
| 738 EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E033\"'")); | |
| 739 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E034\"'")); | |
| 740 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E035\"'")); | |
| 741 // Verify that decimal representations of levels are not supported. | |
| 742 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E005\"'")); | |
| 743 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E050\"'")); | |
| 744 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E051\"'")); | |
| 745 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E052\"'")); | |
| 746 } | |
| 747 | |
| 748 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Mp4aVariants) { | |
| 749 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a\"'")); | |
| 750 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.\"'")); | |
| 751 | |
| 752 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6\"'")); | |
| 753 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.60\"'")); | |
| 754 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.61\"'")); | |
| 755 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.62\"'")); | |
| 756 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.63\"'")); | |
| 757 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.65\"'")); | |
| 758 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.65\"'")); | |
| 759 // MPEG2 AAC Main, LC, and SSR are supported except on Android. | |
| 760 EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.66\"'")); | |
| 761 EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.67\"'")); | |
| 762 EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.68\"'")); | |
| 763 // MP3. | |
| 764 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.69\"'")); | |
| 765 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6A\"'")); | |
| 766 // MP3. | |
| 767 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.6B\"'")); | |
| 768 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6b\"'")); | |
| 769 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6C\"'")); | |
| 770 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6D\"'")); | |
| 771 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6E\"'")); | |
| 772 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6F\"'")); | |
| 773 | |
| 774 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.76\"'")); | |
| 775 | |
| 776 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4\"'")); | |
| 777 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.39\"'")); | |
| 778 | |
| 779 // mp4a.40 without further extension is ambiguous and results in "maybe". | |
| 780 EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"mp4a.40\"'")); | |
| 781 | |
| 782 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.\"'")); | |
| 783 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.0\"'")); | |
| 784 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1\"'")); | |
| 785 // MPEG4 AAC LC. | |
| 786 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.2\"'")); | |
| 787 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.3\"'")); | |
| 788 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.4\"'")); | |
| 789 // MPEG4 AAC SBR v1. | |
| 790 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.5\"'")); | |
| 791 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.6\"'")); | |
| 792 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.7\"'")); | |
| 793 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.8\"'")); | |
| 794 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.9\"'")); | |
| 795 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.10\"'")); | |
| 796 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.20\"'")); | |
| 797 // MPEG4 AAC SBR PS v2. | |
| 798 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.29\"'")); | |
| 799 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.30\"'")); | |
| 800 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.40\"'")); | |
| 801 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.50\"'")); | |
| 802 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.290\"'")); | |
| 803 // Check conversions of decimal 29 to hex and hex 29 to decimal. | |
| 804 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1d\"'")); | |
| 805 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1D\"'")); | |
| 806 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.41\"'")); | |
| 807 | |
| 808 // Allow leading zeros in aud-oti for specific MPEG4 AAC strings. | |
| 809 // See http://crbug.com/440607. | |
| 810 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.00\"'")); | |
| 811 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.01\"'")); | |
| 812 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.02\"'")); | |
| 813 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.03\"'")); | |
| 814 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.04\"'")); | |
| 815 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.05\"'")); | |
| 816 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.029\"'")); | |
| 817 | |
| 818 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.41\"'")); | |
| 819 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.41.2\"'")); | |
| 820 | |
| 821 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4.2\"'")); | |
| 822 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.400.2\"'")); | |
| 823 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.040.2\"'")); | |
| 824 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4.5\"'")); | |
| 825 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.400.5\"'")); | |
| 826 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.040.5\"'")); | |
| 827 } | |
| 828 | |
| 537 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) { | 829 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) { |
| 538 // HLS are supported only on Android IceCreamSandwich and above (API level 14) | 830 // HLS are supported only on Android IceCreamSandwich and above (API level 14) |
| 539 std::string probablyCanPlayHLS = kNot; | 831 std::string probablyCanPlayHLS = kNot; |
| 540 std::string maybeCanPlayHLS = kNot; | 832 std::string maybeCanPlayHLS = kNot; |
| 541 #if defined(OS_ANDROID) | 833 #if defined(OS_ANDROID) |
| 542 if (base::android::BuildInfo::GetInstance()->sdk_int() > 13) { | 834 if (base::android::BuildInfo::GetInstance()->sdk_int() > 13) { |
| 543 probablyCanPlayHLS = kProbably; | 835 probablyCanPlayHLS = kProbably; |
| 544 maybeCanPlayHLS = kMaybe; | 836 maybeCanPlayHLS = kMaybe; |
| 545 } | 837 } |
| 546 #endif | 838 #endif |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 659 CanPlay("'application/vnd.apple.mpegurl; " | 951 CanPlay("'application/vnd.apple.mpegurl; " |
| 660 "codecs=\"avc1.42E01E, mp4a.40\"'")); | 952 "codecs=\"avc1.42E01E, mp4a.40\"'")); |
| 661 EXPECT_EQ(maybeCanPlayHLS, | 953 EXPECT_EQ(maybeCanPlayHLS, |
| 662 CanPlay("'application/vnd.apple.mpegurl; " | 954 CanPlay("'application/vnd.apple.mpegurl; " |
| 663 "codecs=\"avc3.42E01E, mp4a.40\"'")); | 955 "codecs=\"avc3.42E01E, mp4a.40\"'")); |
| 664 | 956 |
| 665 TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl"); | 957 TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl"); |
| 666 } | 958 } |
| 667 | 959 |
| 668 } // namespace content | 960 } // namespace content |
| OLD | NEW |