1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file.
4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <string>
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/browser/media/media_browsertest.h"
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/test/browser_test_utils.h"
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/test/content_browser_test_utils.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/shell/browser/shell.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_ANDROID)
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/android/build_info.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kProbably[] = "probably";
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kMaybe[] = "maybe";
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kNot[] = "";
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(USE_PROPRIETARY_CODECS)
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kPropProbably[] = "probably";
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kPropMaybe[] = "maybe";
23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#else
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kPropProbably[] = "";
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kPropMaybe[] = "";
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif  // USE_PROPRIETARY_CODECS
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// TODO(amogh.bihani): Change the opus tests when opus is  on
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Android. (http://crbug.com/318436).
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if !defined(OS_ANDROID)
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kOggVideoProbably[] = "probably";
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kOggVideoMaybe[] = "maybe";
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kTheoraProbably[] = "probably";
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kOpusProbably[] = "probably";
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#else
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kOggVideoProbably[] = "";
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kOggVideoMaybe[] = "";
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kTheoraProbably[] = "";
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kOpusProbably[] = "";
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif  // !OS_ANDROID
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace content {
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass MediaCanPlayTypeTest : public MediaBrowserTest {
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochpublic:
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  MediaCanPlayTypeTest() : url_("about:blank") { }
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void SetUpOnMainThread() OVERRIDE {
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    NavigateToURL(shell(), url_);
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  std::string CanPlay(const std::string& type) {
53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    std::string command("document.createElement('video').canPlayType(");
54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    command.append(type);
55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    command.append(")");
56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    std::string result;
58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    EXPECT_TRUE(ExecuteScriptAndExtractString(
59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        shell()->web_contents(),
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        "window.domAutomationController.send(" + command + ");",
61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        &result));
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return result;
63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void TestMPEGUnacceptableCombinations(std::string mime) {
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Codecs must be followed by valid hexadecimal number.
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.unknown\"'"));
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.unknown\"'"));
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.unknown\"'"));
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Codecs must not end with a dot.
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.\"'"));
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.\"'"));
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a\"'"));
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.\"'"));
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.\"'"));
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Codecs not belonging to MPEG container.
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vorbis\"'"));
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1, vorbis\"'"));
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3, vorbis\"'"));
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.4D401E, vorbis\"'"));
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.64001F, vorbis\"'"));
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"opus\"'"));
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1, opus\"'"));
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3, opus\"'"));
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.4D401E, opus\"'"));
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.64001F, opus\"'"));
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp8\"'"));
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp9\"'"));
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp8, mp4a.40\"'"));
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp9, mp4a.40\"'"));
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp8, mp4a.40.2\"'"));
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp9, mp4a.40.2\"'"));
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"1\"'"));
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1, 1\"'"));
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3, 1\"'"));
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.4D401E, 1\"'"));
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.64001F, 1\"'"));
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"theora\"'"));
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"theora, mp4a\"'"));
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"theora, mp4a.40.2\"'"));
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Codecs are case sensitive.
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"AVC1\"'"));
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"AVC1.4d401e\"'"));
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"AVC3\"'"));
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"AVC3.64001f\"'"));
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"MP4A\"'"));
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"MP4A.40.2\"'"));
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"AVC1, MP4\"'"));
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"AVC3, MP4\"'"));
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot,
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch              CanPlay("'" + mime + "; codecs=\", AVC1.4D401E, MP4.40.2\"'"));
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot,
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch              CanPlay("'" + mime + "; codecs=\", AVC3.64001F, MP4.40.2\"'"));
121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Unknown codecs.
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc2\"'"));
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc4\"'"));
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1x\"'"));
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3x\"'"));
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4ax\"'"));
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"unknown\"'"));
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void TestOGGUnacceptableCombinations(std::string mime) {
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Codecs not belonging to OGG container.
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8\"'"));
136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0\"'"));
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, opus\"'"));
138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, vorbis\"'"));
139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9\"'"));
141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9.0\"'"));
142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9, opus\"'"));
143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9, vorbis\"'"));
144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1\"'"));
146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3\"'"));
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1.4D401E\"'"));
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3.64001F\"'"));
149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1, vorbis\"'"));
150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3, vorbis\"'"));
151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1, opus\"'"));
152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3, opus\"'"));
153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40\"'"));
155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.2\"'"));
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, mp4a.40.2\"'"));
157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"1\"'"));
159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, 1\"'"));
160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Codecs are case sensitive.
162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Theora\"'"));
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Opus\"'"));
164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Vorbis\"'"));
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Theora, Opus\"'"));
166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"Theora, Vorbis\"'"));
167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Unknown codecs.
169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"unknown\"'"));
170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void TestWEBMUnacceptableCombinations(std::string mime) {
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Codecs not belonging to WEBM container.
174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"1\"'"));
175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, 1\"'"));
176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9, 1\"'"));
177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0, 1\"'"));
178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9.0, 1\"'"));
179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora\"'"));
181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, vorbis\"'"));
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, opus\"'"));
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1\"'"));
185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3\"'"));
186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1.4D401E\"'"));
187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3.64001F\"'"));
188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1, vorbis\"'"));
189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3, vorbis\"'"));
190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1, opus\"'"));
191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3, opus\"'"));
192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40\"'"));
194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.2\"'"));
195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, mp4a.40\"'"));
196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9, mp4a.40\"'"));
197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0, mp4a.40\"'"));
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9.0, mp4a.40\"'"));
199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Codecs are case sensitive.
201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"VP8, Vorbis\"'"));
202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"VP8.0, Opus\"'"));
203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"VP9, Vorbis\"'"));
204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"VP9.0, Opus\"'"));
205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Unknown codec.
207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"unknown\"'"));
208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void TestWAVUnacceptableCombinations(std::string mime) {
211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Codecs not belonging to WAV container.
212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8\"'"));
213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9\"'"));
214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0, 1\"'"));
215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9.0, 1\"'"));
216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vorbis\"'"));
218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"opus\"'"));
219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora\"'"));
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, 1\"'"));
221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1\"'"));
223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3\"'"));
224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1.4D401E\"'"));
225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3.64001F\"'"));
226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc1, 1\"'"));
227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"avc3, 1\"'"));
228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40\"'"));
230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.2\"'"));
231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Unknown codec.
233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"unknown\"'"));
234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
236effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochprivate:
237effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  GURL url_;
238effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DISALLOW_COPY_AND_ASSIGN(MediaCanPlayTypeTest);
239effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
240effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
241effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_wav) {
242effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kMaybe, CanPlay("'audio/wav'"));
243effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kProbably, CanPlay("'audio/wav; codecs=\"1\"'"));
244effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestWAVUnacceptableCombinations("audio/wav");
246effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
247effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kMaybe, CanPlay("'audio/x-wav'"));
248effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kProbably, CanPlay("'audio/x-wav; codecs=\"1\"'"));
249effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestWAVUnacceptableCombinations("audio/x-wav");
251effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
252effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
253effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_webm) {
254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // On Android, VP9 is supported only on KitKat and above (API level 19).
255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::string VP9Probably = "probably";
256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::string VP9AndOpusProbably = "probably";
257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_ANDROID)
258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  VP9AndOpusProbably = "";
259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (base::android::BuildInfo::GetInstance()->sdk_int() < 19)
260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    VP9Probably = "";
261cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif
262effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kMaybe, CanPlay("'video/webm'"));
263effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
264effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8\"'"));
265effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8.0\"'"));
266effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8, vorbis\"'"));
267effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8.0, vorbis\"'"));
268effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp8, opus\"'"));
269effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp8.0, opus\"'"));
270effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
271cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(VP9Probably, CanPlay("'video/webm; codecs=\"vp9\"'"));
272cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(VP9Probably, CanPlay("'video/webm; codecs=\"vp9.0\"'"));
273cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(VP9Probably, CanPlay("'video/webm; codecs=\"vp9, vorbis\"'"));
274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(VP9Probably, CanPlay("'video/webm; codecs=\"vp9.0, vorbis\"'"));
275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(VP9AndOpusProbably, CanPlay("'video/webm; codecs=\"vp9, opus\"'"));
276cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(VP9AndOpusProbably,
277cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            CanPlay("'video/webm; codecs=\"vp9.0, opus\"'"));
278effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(VP9Probably, CanPlay("'video/webm; codecs=\"vp8, vp9\"'"));
280cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(VP9Probably, CanPlay("'video/webm; codecs=\"vp8.0, vp9.0\"'"));
281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestWEBMUnacceptableCombinations("video/webm");
283effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
284effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kMaybe, CanPlay("'audio/webm'"));
285effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kProbably, CanPlay("'audio/webm; codecs=\"vorbis\"'"));
286effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kOpusProbably, CanPlay("'audio/webm; codecs=\"opus\"'"));
287effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kOpusProbably, CanPlay("'audio/webm; codecs=\"opus, vorbis\"'"));
288effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
289effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8\"'"));
290effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8.0\"'"));
291effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8, vorbis\"'"));
292effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8.0, vorbis\"'"));
293effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8, opus\"'"));
294effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8.0, opus\"'"));
295effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
296effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9\"'"));
297effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9.0\"'"));
298effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9, vorbis\"'"));
299effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9.0, vorbis\"'"));
300effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9, opus\"'"));
301effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9.0, opus\"'"));
302effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestWEBMUnacceptableCombinations("audio/webm");
304effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
305effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
306effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_ogg) {
307effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kOggVideoMaybe, CanPlay("'video/ogg'"));
308effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kOggVideoProbably, CanPlay("'video/ogg; codecs=\"theora\"'"));
309effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kOggVideoProbably,
310effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            CanPlay("'video/ogg; codecs=\"theora, vorbis\"'"));
311effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kOggVideoProbably,
312effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            CanPlay("'video/ogg; codecs=\"theora, opus\"'"));
313effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kOggVideoProbably,
314effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            CanPlay("'video/ogg; codecs=\"opus, vorbis\"'"));
315effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestOGGUnacceptableCombinations("video/ogg");
317effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
318effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kMaybe, CanPlay("'audio/ogg'"));
319effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"vorbis\"'"));
320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(kOpusProbably, CanPlay("'audio/ogg; codecs=\"opus\"'"));
321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(kOpusProbably, CanPlay("'audio/ogg; codecs=\"vorbis, opus\"'"));
322effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
323c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/ogg; codecs=\"theora\"'"));
324c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/ogg; codecs=\"theora, opus\"'"));
325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/ogg; codecs=\"theora, vorbis\"'"));
326c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestOGGUnacceptableCombinations("audio/ogg");
328effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
329effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kMaybe, CanPlay("'application/ogg'"));
330effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kProbably, CanPlay("'application/ogg; codecs=\"vorbis\"'"));
331effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kTheoraProbably, CanPlay("'application/ogg; codecs=\"theora\"'"));
332cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(kOpusProbably, CanPlay("'application/ogg; codecs=\"opus\"'"));
333effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kTheoraProbably,
334effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            CanPlay("'application/ogg; codecs=\"theora, vorbis\"'"));
335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kTheoraProbably,
336effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            CanPlay("'application/ogg; codecs=\"theora, opus\"'"));
337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(kOpusProbably,
338effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            CanPlay("'application/ogg; codecs=\"opus, vorbis\"'"));
339c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestOGGUnacceptableCombinations("application/ogg");
341effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
342effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
343effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp3) {
344effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'video/mp3'"));
345effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'video/mpeg'"));
346effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kNot, CanPlay("'video/x-mp3'"));
347effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // audio/mpeg without a codecs parameter (RFC 3003 compliant)
3490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg'"));
3500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // audio/mpeg with mp3 in codecs parameter. (Not RFC compliant, but
352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // very common in the wild so it is a defacto standard).
353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp3\"'"));
354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
3550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1\"'"));
3560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3\"'"));
3570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
3580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1.4D401E\"'"));
3590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3.64001F\"'"));
3600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
3610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a\"'"));
3620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.2\"'"));
3630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestMPEGUnacceptableCombinations("audio/mpeg");
3650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
3660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // audio/mp3 does not allow any codecs parameter
3670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3'"));
3680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
3690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1\"'"));
3700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3\"'"));
3710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
3720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1.4D401E\"'"));
3730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3.64001F\"'"));
3740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
3750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a\"'"));
3760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.2\"'"));
3770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestMPEGUnacceptableCombinations("audio/mp3");
3790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
3800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // audio/x-mp3 does not allow any codecs parameter
3810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3'"));
3820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
3830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1\"'"));
3840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3\"'"));
3850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
3860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1.4D401E\"'"));
3870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3.64001F\"'"));
3880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
3890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a\"'"));
3900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.2\"'"));
3910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestMPEGUnacceptableCombinations("audio/x-mp3");
393effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
394effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
395effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
396effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4'"));
397effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
398f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'"));
399f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3\"'"));
400f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"mp4a.40\"'"));
401f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40\"'"));
402f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40\"'"));
403f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, avc3\"'"));
404effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01E\"'"));
4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42E01E\"'"));
40734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42801E\"'"));
40834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42C01E\"'"));
40934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
41034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E11E\"'"));
41134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42101E\"'"));
41234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42701E\"'"));
41334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42F01E\"'"));
41434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"mp4a.40.2\"'"));
4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropProbably,
4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"'"));
4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropProbably,
4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40.5\"'"));
4205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40.2\"'"));
4225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40.2\"'"));
423effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kPropMaybe,
4245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40\"'"));
425effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kPropMaybe,
4265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40\"'"));
427effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestMPEGUnacceptableCombinations("video/mp4");
429effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
430effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v'"));
431effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
432f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1\"'"));
433f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3\"'"));
434f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"mp4a.40\"'"));
435f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, mp4a.40\"'"));
436f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3, mp4a.40\"'"));
437f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, avc3\"'"));
438effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
4395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"avc1.42E01E\"'"));
4405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"avc3.42E01E\"'"));
44134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"avc3.42801E\"'"));
44234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"avc3.42C01E\"'"));
44334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
44434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1.42E11E\"'"));
44534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1.42101E\"'"));
44634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1.42701E\"'"));
44734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"avc1.42F01E\"'"));
44834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"mp4a.40.2\"'"));
4505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropProbably,
4515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'video/x-m4v; codecs=\"avc1.42E01E, mp4a.40.2\"'"));
4525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropProbably,
4535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'video/x-m4v; codecs=\"avc3.42E01E, mp4a.40.5\"'"));
4545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, mp4a.40.2\"'"));
4565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3, mp4a.40.2\"'"));
457effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kPropMaybe,
4585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'video/x-m4v; codecs=\"avc1.42E01E, mp4a.40\"'"));
459effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kPropMaybe,
4605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'video/x-m4v; codecs=\"avc3.42E01E, mp4a.40\"'"));
461effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestMPEGUnacceptableCombinations("video/x-m4v");
463effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
464effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4'"));
465f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"mp4a.40\"'"));
4665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.2\"'"));
467f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
468f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1\"'"));
469f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc3\"'"));
470f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1, mp4a.40\"'"));
471f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc3, mp4a.40\"'"));
472f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
473f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1.4D401E\"'"));
474f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc3.64001F\"'"));
475f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestMPEGUnacceptableCombinations("audio/mp4");
477effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
478effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-m4a'"));
479f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-m4a; codecs=\"mp4a.40\"'"));
4805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.2\"'"));
481f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
482f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1\"'"));
483f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3\"'"));
484f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1, mp4a\"'"));
485f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3, mp4a\"'"));
486f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
487f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1.4D401E\"'"));
488f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc3.64001F\"'"));
489f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestMPEGUnacceptableCombinations("audio/x-m4a");
491effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
492effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
493effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) {
494cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // HLS are supported only on Android IceCreamSandwich and above (API level 14)
4955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::string probablyCanPlayHLS = kNot;
4965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::string maybeCanPlayHLS = kNot;
497cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_ANDROID)
4985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (base::android::BuildInfo::GetInstance()->sdk_int() > 13) {
4995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    probablyCanPlayHLS = kProbably;
5005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    maybeCanPlayHLS = kMaybe;
5015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
502cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif
5035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS, CanPlay("'application/x-mpegurl'"));
5045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
5065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc1\"'"));
5075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
5085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc3\"'"));
5095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
5105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"mp4a.40\"'"));
5115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
512f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc1, mp4a.40\"'"));
5135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
514f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc3, mp4a.40\"'"));
515f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
5165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
5175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc1.42E01E\"'"));
5185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
5195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc3.42E01E\"'"));
5205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
52134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc3.42801E\"'"));
52234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
52334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc3.42C01E\"'"));
52434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
52534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
52634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc1.42E11E\"'"));
52734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
52834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc1.42101E\"'"));
52934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
53034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc1.42701E\"'"));
53134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
53234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc1.42F01E\"'"));
53334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
53434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
535effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            CanPlay("'application/x-mpegurl; codecs=\"mp4a.40.2\"'"));
5365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
5375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      CanPlay("'application/x-mpegurl; codecs=\"avc1.42E01E, mp4a.40.2\"'"));
5385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
5395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      CanPlay("'application/x-mpegurl; codecs=\"avc3.42E01E, mp4a.40.5\"'"));
5405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
5425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc1, mp4a.40.2\"'"));
5435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'application/x-mpegurl; codecs=\"avc3, mp4a.40.2\"'"));
5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
5465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      CanPlay("'application/x-mpegurl; codecs=\"avc1.42E01E, mp4a.40\"'"));
5475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
5485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      CanPlay("'application/x-mpegurl; codecs=\"avc3.42E01E, mp4a.40\"'"));
549f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestMPEGUnacceptableCombinations("application/x-mpegurl");
551f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
5525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS, CanPlay("'application/vnd.apple.mpegurl'"));
553f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
5545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
555effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1\"'"));
5565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
557effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3\"'"));
5585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
559f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            CanPlay("'application/vnd.apple.mpegurl; codecs=\"mp4a.40\"'"));
5605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
561f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1, mp4a.40\"'"));
5625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
563f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3, mp4a.40\"'"));
564f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
5655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
5665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1.42E01E\"'"));
5675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
5685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3.42E01E\"'"));
5695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
57034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3.42801E\"'"));
57134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
57234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3.42C01E\"'"));
57334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
57434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
57534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1.42E11E\"'"));
57634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
57734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1.42101E\"'"));
57834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
57934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1.42701E\"'"));
58034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
58134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1.42F01E\"'"));
58234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
58334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(probablyCanPlayHLS,
584effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            CanPlay("'application/vnd.apple.mpegurl; codecs=\"mp4a.40.2\"'"));
585effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
5865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
5875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1, mp4a.40.2\"'"));
5885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
5895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3, mp4a.40.2\"'"));
5905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
5915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      CanPlay("'application/vnd.apple.mpegurl; "
5925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              "codecs=\"avc1.42E01E, mp4a.40\"'"));
5935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(maybeCanPlayHLS,
5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      CanPlay("'application/vnd.apple.mpegurl; "
5955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              "codecs=\"avc3.42E01E, mp4a.40\"'"));
5965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestMPEGUnacceptableCombinations("application/vnd.apple.mpegurl");
598effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
599effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
600effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}  // namespace content
601