1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/command_line.h" 6 #include "content/browser/media/media_browsertest.h" 7 #include "content/public/common/content_switches.h" 8 #if defined(OS_ANDROID) 9 #include "base/android/build_info.h" 10 #endif 11 12 // Common media types. 13 const char kWebMAudioOnly[] = "audio/webm; codecs=\"vorbis\""; 14 #if !defined(OS_ANDROID) 15 const char kWebMOpusAudioOnly[] = "audio/webm; codecs=\"opus\""; 16 #endif 17 const char kWebMVideoOnly[] = "video/webm; codecs=\"vp8\""; 18 const char kWebMAudioVideo[] = "video/webm; codecs=\"vorbis, vp8\""; 19 20 namespace content { 21 22 // MSE is available on all desktop platforms and on Android 4.1 and later. 23 static bool IsMSESupported() { 24 #if defined(OS_ANDROID) 25 if (base::android::BuildInfo::GetInstance()->sdk_int() < 16) { 26 VLOG(0) << "MSE is only supported in Android 4.1 and later."; 27 return false; 28 } 29 #endif // defined(OS_ANDROID) 30 return true; 31 } 32 33 class MediaSourceTest : public content::MediaBrowserTest { 34 public: 35 void TestSimplePlayback(const char* media_file, const char* media_type, 36 const char* expectation) { 37 if (!IsMSESupported()) { 38 VLOG(0) << "Skipping test - MSE not supported."; 39 return; 40 } 41 42 std::vector<StringPair> query_params; 43 query_params.push_back(std::make_pair("mediafile", media_file)); 44 query_params.push_back(std::make_pair("mediatype", media_type)); 45 RunMediaTestPage("media_source_player.html", &query_params, expectation, 46 true); 47 } 48 49 #if defined(OS_ANDROID) 50 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 51 command_line->AppendSwitch( 52 switches::kDisableGestureRequirementForMediaPlayback); 53 } 54 #endif 55 }; 56 57 IN_PROC_BROWSER_TEST_F(MediaSourceTest, Playback_VideoAudio_WebM) { 58 TestSimplePlayback("bear-320x240.webm", kWebMAudioVideo, kEnded); 59 } 60 61 IN_PROC_BROWSER_TEST_F(MediaSourceTest, Playback_VideoOnly_WebM) { 62 TestSimplePlayback("bear-320x240-video-only.webm", kWebMVideoOnly, kEnded); 63 } 64 65 // Opus is not supported in Android as of now. 66 #if !defined(OS_ANDROID) 67 IN_PROC_BROWSER_TEST_F(MediaSourceTest, Playback_AudioOnly_Opus_WebM) { 68 TestSimplePlayback("bear-opus.webm", kWebMOpusAudioOnly, kEnded); 69 } 70 #endif 71 72 IN_PROC_BROWSER_TEST_F(MediaSourceTest, Playback_AudioOnly_WebM) { 73 TestSimplePlayback("bear-320x240-audio-only.webm", kWebMAudioOnly, kEnded); 74 } 75 76 IN_PROC_BROWSER_TEST_F(MediaSourceTest, Playback_Type_Error) { 77 TestSimplePlayback("bear-320x240-video-only.webm", kWebMAudioOnly, kError); 78 } 79 80 // Flaky test crbug.com/246308 81 // Test changed to skip checks resulting in flakiness. Proper fix still needed. 82 IN_PROC_BROWSER_TEST_F(MediaSourceTest, ConfigChangeVideo) { 83 if (!IsMSESupported()) { 84 VLOG(0) << "Skipping test - MSE not supported."; 85 return; 86 } 87 RunMediaTestPage("mse_config_change.html", NULL, kEnded, true); 88 } 89 90 } // namespace content 91