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.
13const char kWebMAudioOnly[] = "audio/webm; codecs=\"vorbis\"";
14#if !defined(OS_ANDROID)
15const char kWebMOpusAudioOnly[] = "audio/webm; codecs=\"opus\"";
16#endif
17const char kWebMVideoOnly[] = "video/webm; codecs=\"vp8\"";
18const char kWebMAudioVideo[] = "video/webm; codecs=\"vorbis, vp8\"";
19
20namespace content {
21
22// MSE is available on all desktop platforms and on Android 4.1 and later.
23static 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
33class MediaSourceTest : public content::MediaBrowserTest {
34 public:
35  void TestSimplePlayback(const std::string& media_file,
36                          const std::string& media_type,
37                          const std::string& expectation) {
38    if (!IsMSESupported()) {
39      VLOG(0) << "Skipping test - MSE not supported.";
40      return;
41    }
42
43    media::QueryParams query_params;
44    query_params.push_back(std::make_pair("mediaFile", media_file));
45    query_params.push_back(std::make_pair("mediaType", media_type));
46    RunMediaTestPage("media_source_player.html", query_params, expectation,
47                     true);
48  }
49
50#if defined(OS_ANDROID)
51  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
52    command_line->AppendSwitch(
53        switches::kDisableGestureRequirementForMediaPlayback);
54  }
55#endif
56};
57
58IN_PROC_BROWSER_TEST_F(MediaSourceTest, Playback_VideoAudio_WebM) {
59  TestSimplePlayback("bear-320x240.webm", kWebMAudioVideo, kEnded);
60}
61
62IN_PROC_BROWSER_TEST_F(MediaSourceTest, Playback_VideoOnly_WebM) {
63  TestSimplePlayback("bear-320x240-video-only.webm", kWebMVideoOnly, kEnded);
64}
65
66// Opus is not supported in Android as of now.
67#if !defined(OS_ANDROID)
68IN_PROC_BROWSER_TEST_F(MediaSourceTest, Playback_AudioOnly_Opus_WebM) {
69  TestSimplePlayback("bear-opus.webm", kWebMOpusAudioOnly, kEnded);
70}
71#endif
72
73IN_PROC_BROWSER_TEST_F(MediaSourceTest, Playback_AudioOnly_WebM) {
74  TestSimplePlayback("bear-320x240-audio-only.webm", kWebMAudioOnly, kEnded);
75}
76
77IN_PROC_BROWSER_TEST_F(MediaSourceTest, Playback_Type_Error) {
78  TestSimplePlayback("bear-320x240-video-only.webm", kWebMAudioOnly, kError);
79}
80
81// Flaky test crbug.com/246308
82// Test changed to skip checks resulting in flakiness. Proper fix still needed.
83IN_PROC_BROWSER_TEST_F(MediaSourceTest, ConfigChangeVideo) {
84  if (!IsMSESupported()) {
85    VLOG(0) << "Skipping test - MSE not supported.";
86    return;
87  }
88  RunMediaTestPage("mse_config_change.html",
89                   media::QueryParams(),
90                   kEnded,
91                   true);
92}
93
94}  // namespace content
95