Index: content/browser/media/media_canplaytype_browsertest.cc |
diff --git a/content/browser/media/media_canplaytype_browsertest.cc b/content/browser/media/media_canplaytype_browsertest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2a0d001d5003a437fa4d09a8442c773049945e9b |
--- /dev/null |
+++ b/content/browser/media/media_canplaytype_browsertest.cc |
@@ -0,0 +1,245 @@ |
+// Copyright (c) 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include <string> |
+ |
+#include "content/browser/media/media_browsertest.h" |
+#include "content/public/test/browser_test_utils.h" |
+#include "content/shell/browser/shell.h" |
+#include "content/test/content_browser_test_utils.h" |
+ |
+const char* kProbably = "probably"; |
+const char* kMaybe = "maybe"; |
+const char* kNot = ""; |
+ |
+#if defined(USE_PROPRIETARY_CODECS) |
+const char* kPropProbably = "probably"; |
+const char* kPropMaybe = "maybe"; |
+const char* kPropProbablyElseMaybe = "probably"; |
+#else |
+const char* kPropProbably = ""; |
+const char* kPropMaybe = ""; |
+const char* kPropProbablyElseMaybe = "maybe"; |
+#endif // USE_PROPRIETARY_CODECS |
+ |
+// TODO(amogh.bihani): Change the opus tests when opus is on |
+// Android. (http://crbug.com/318436). |
+#if !defined(OS_ANDROID) |
+const char* kTheoraProbably = "probably"; |
+const char* kTheoraMaybe = "maybe"; |
+const char* kOpusProbably = "probably"; |
+#if defined(USE_PROPRIETARY_CODECS) |
+const char* kTheoraAndPropProbably = "probably"; |
+const char* kTheoraAndPropProbablyElseMaybe = "probably"; |
+const char* kOpusAndPropProbably = "probably"; |
+#else |
+const char* kTheoraAndPropProbably = ""; |
+const char* kTheoraAndPropProbablyElseMaybe = "maybe"; |
+const char* kOpusAndPropProbably = ""; |
+#endif // USE_PROPRIETARY_CODECS |
+#else |
+const char* kTheoraProbably = ""; |
+const char* kTheoraMaybe = ""; |
+const char* kOpusProbably = ""; |
+const char* kTheoraAndPropProbably = ""; |
+const char* kTheoraAndPropProbablyElseMaybe = ""; |
+const char* kOpusAndPropProbably = ""; |
+#endif // !OS_ANDROID |
+ |
+namespace content { |
+ |
+class MediaMimeCanPlayType : public MediaBrowserTest { |
ddorwin
2014/03/20 18:04:50
nit: Drop "Mime" and add "Test":
MediaCanPlayTypeT
amogh.bihani
2014/03/21 13:52:03
Done.
|
+protected: |
+ MediaMimeCanPlayType() { } |
ddorwin
2014/03/20 18:04:50
It's odd that these are protected. They appear to
amogh.bihani
2014/03/21 13:52:03
It does not allow to remove the constructor. It gi
|
+ ~MediaMimeCanPlayType() { } |
ddorwin
2014/03/20 18:04:50
This should have been virtual, but just remove it.
amogh.bihani
2014/03/21 13:52:03
Done.
|
+ |
+ std::string CanPlay(const std::string& type) { |
+ std::string command("document.createElement('video').canPlayType("); |
+ command.append(type); |
+ command.append(")"); |
+ |
+ std::string result; |
+ EXPECT_TRUE(ExecuteScriptAndExtractString( |
+ shell()->web_contents(), |
+ "window.domAutomationController.send(" + command + ");", |
+ &result)); |
+ return result; |
+ } |
+ |
+ void SetUpOnMainThread() { |
ddorwin
2014/03/20 18:04:50
Add virtual and OVERRIDE:
virtual void SetUpOnMain
amogh.bihani
2014/03/21 13:52:03
Done.
|
+ GURL url("about:blank"); |
ddorwin
2014/03/20 18:04:50
nit: I think it's better to have this function up
amogh.bihani
2014/03/21 13:52:03
Done.
|
+ NavigateToURL(shell(), url); |
+ } |
+ |
+private: |
+ DISALLOW_COPY_AND_ASSIGN(MediaMimeCanPlayType); |
+}; |
+ |
ddorwin
2014/03/20 18:04:50
General: We might test that we ignore "profiles" (
|
+IN_PROC_BROWSER_TEST_F(MediaMimeCanPlayType, CodecSupportTest_wav) { |
+ EXPECT_EQ(kMaybe, CanPlay("'audio/wav'")); |
+ EXPECT_EQ(kProbably, CanPlay("'audio/wav; codecs=\"1\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"vorbis\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"theora\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"vp8\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"vp8.0\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"vp9\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"vp9.0\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"opus\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"avc3\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"mp4a.40.5\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"avc1.4D401E\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/wav; codecs=\"garbage\"'")); |
ddorwin
2014/03/20 18:04:50
nit: I think we usually use "unknown", which is a
amogh.bihani
2014/03/21 13:52:03
Done.
|
+} |
+ |
+IN_PROC_BROWSER_TEST_F(MediaMimeCanPlayType, CodecSupportTest_webm) { |
+ // video/webm |
+ EXPECT_EQ(kMaybe, CanPlay("'video/webm'")); |
+ EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8\"'")); |
ddorwin
2014/03/20 18:04:50
nit: You can increase readability by adding an emp
|
+ EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8.0\"'")); |
+ EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8, vorbis\"'")); |
+ EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8.0, vorbis\"'")); |
+ EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp8, opus\"'")); |
+ EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp8.0, opus\"'")); |
+ EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp9\"'")); |
ddorwin
2014/03/20 18:04:50
Between vp8 and vp9, which are essentially the sam
|
+ EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp9.0\"'")); |
+ EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp9, vorbis\"'")); |
+ EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp9.0, vorbis\"'")); |
+ EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp9, opus\"'")); |
+ EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp9.0, opus\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp9, 1\"'")); |
ddorwin
2014/03/20 18:04:50
And before this block of invalid items.
|
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp8.0, 1\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp8, mp4a.40.2\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp8.0, mp4a.40.2\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp9, 1\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp9.0, 1\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp9, mp4a.40.2\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp9.0, mp4a.40.2\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"theora\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"1\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"avc1.4D401E\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"mp4a.40.2\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"garbage\"'")); |
+ // audio/webm |
ddorwin
2014/03/20 18:04:50
nit: These comments are a bit redundant. (Normally
amogh.bihani
2014/03/21 13:52:03
Done.
|
+ EXPECT_EQ(kMaybe, CanPlay("'audio/webm'")); |
+ EXPECT_EQ(kProbably, CanPlay("'audio/webm; codecs=\"vorbis\"'")); |
ddorwin
2014/03/20 18:04:50
ditto
|
+ EXPECT_EQ(kOpusProbably, CanPlay("'audio/webm; codecs=\"opus\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"1\"'")); |
ddorwin
2014/03/20 18:04:50
ditto
|
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8.0\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9.0\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8, opus\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8.0, opus\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8, vorbis\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp8.0, vorbis\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9, opus\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9.0, opus\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9, vorbis\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"vp9.0, vorbis\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"avc1.4D401E\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"mp4a.40.2\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/webm; codecs=\"garbage\"'")); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(MediaMimeCanPlayType, CodecSupportTest_ogg) { |
+ // video/ogg |
+ EXPECT_EQ(kTheoraMaybe, CanPlay("'video/ogg'")); |
+ EXPECT_EQ(kTheoraProbably, CanPlay("'video/ogg; codecs=\"theora\"'")); |
+ EXPECT_EQ(kTheoraProbably, CanPlay("'video/ogg; codecs=\"theora, vorbis\"'")); |
+ EXPECT_EQ(kTheoraProbably, CanPlay("'video/ogg; codecs=\"theora, opus\"'")); |
+ EXPECT_EQ(kTheoraProbably, CanPlay("'video/ogg; codecs=\"vp8\"'")); |
+ EXPECT_EQ(kTheoraAndPropProbablyElseMaybe, |
ddorwin
2014/03/20 18:04:50
Maybe a todo to fix this with a reference to your
amogh.bihani
2014/03/21 13:52:03
Done.
|
+ CanPlay("'video/ogg; codecs=\"avc1\"'")); |
+ EXPECT_EQ(kTheoraAndPropProbablyElseMaybe, |
+ CanPlay("'video/ogg; codecs=\"avc3\"'")); |
+ EXPECT_EQ(kTheoraAndPropProbablyElseMaybe, |
+ CanPlay("'video/ogg; codecs=\"mp4a\"'")); |
+ EXPECT_EQ(kTheoraAndPropProbablyElseMaybe, |
+ CanPlay("'video/ogg; codecs=\"avc1, mp4a\"'")); |
ddorwin
2014/03/20 18:04:50
You might add a test for avc1 and vorbis - one inv
amogh.bihani
2014/03/21 13:52:03
Done.
|
+ EXPECT_EQ(kTheoraMaybe, CanPlay("'video/ogg; codecs=\"avc1.4D401E\"'")); |
+ EXPECT_EQ(kTheoraMaybe, CanPlay("'video/ogg; codecs=\"avc3.64001F\"'")); |
+ EXPECT_EQ(kTheoraMaybe, CanPlay("'video/ogg; codecs=\"mp4a.4.02\"'")); |
+ EXPECT_EQ(kTheoraMaybe, |
+ CanPlay("'video/ogg; codecs=\"avc3.64001F, mp4a.40.2\"'")); |
+ EXPECT_EQ(kTheoraMaybe, CanPlay("'video/ogg; codecs=\"garbage\"'")); |
+ // audio/ogg |
+ EXPECT_EQ(kMaybe, CanPlay("'audio/ogg'")); |
+ EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"vorbis\"'")); |
+ EXPECT_EQ(kTheoraProbably, CanPlay("'audio/ogg; codecs=\"theora\"'")); |
ddorwin
2014/03/20 18:04:50
We should not allow a video codec in "audio/*". If
amogh.bihani
2014/03/21 06:27:08
It will be fixed in other CL. In strict map there
|
+ EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"vp8\"'")); |
+ EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"vp9\"'")); |
+ EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"vp8.0\"'")); |
+ EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"vp9.0\"'")); |
+ EXPECT_EQ(kOpusProbably, CanPlay("'audio/ogg; codecs=\"opus\"'")); |
+ EXPECT_EQ(kPropProbablyElseMaybe, CanPlay("'audio/ogg; codecs=\"mp4a\"'")); |
+ EXPECT_EQ(kPropProbablyElseMaybe, CanPlay("'audio/ogg; codecs=\"avc1\"'")); |
ddorwin
2014/03/20 18:04:50
ditto about video codecs
amogh.bihani
2014/03/21 06:27:08
ditto :)
|
+ EXPECT_EQ(kPropProbablyElseMaybe, CanPlay("'audio/ogg; codecs=\"avc3\"'")); |
+ EXPECT_EQ(kMaybe, CanPlay("'audio/ogg; codecs=\"mp4a.40.2\"'")); |
ddorwin
2014/03/20 18:04:50
Just checking my understanding: These are maybe be
amogh.bihani
2014/03/21 06:27:08
Yes we do not expect suffix for ogg but right now
|
+ EXPECT_EQ(kMaybe, CanPlay("'audio/ogg; codecs=\"avc1.4D401E\"'")); |
ddorwin
2014/03/20 18:04:50
ditto
|
+ EXPECT_EQ(kMaybe, CanPlay("'audio/ogg; codecs=\"avc3.64001F\"'")); |
+ EXPECT_EQ(kMaybe, CanPlay("'audio/ogg; codecs=\"garbage\"'")); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(MediaMimeCanPlayType, CodecSupportTest_mpeg) { |
+ EXPECT_EQ(kNot, CanPlay("'video/mp3'")); |
+ // video/mp4 |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1, mp4a\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1, mp4a\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.4D401E\"'")); |
ddorwin
2014/03/20 18:04:50
It seems backwards that we say probably for a less
amogh.bihani
2014/03/21 06:27:08
yup
|
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.64001F\"'")); |
+ EXPECT_EQ(kPropMaybe, |
+ CanPlay("'video/mp4; codecs=\"avc1.4D401E, mp4a.40.2\"'")); |
+ EXPECT_EQ(kPropMaybe, |
+ CanPlay("'video/mp4; codecs=\"avc3.64001F, mp4a.40.5\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"garbage\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"vp8\"'")); |
+ EXPECT_EQ(kOpusAndPropProbably, CanPlay("'video/mp4; codecs=\"opus\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"vorbis\"'")); |
+ EXPECT_EQ(kTheoraAndPropProbably, CanPlay("'video/mp4; codecs=\"theora\"'")); |
+ EXPECT_EQ(kOpusAndPropProbably, CanPlay("'video/mp4; codecs=\"vp9, opus\"'")); |
+ EXPECT_EQ(kTheoraAndPropProbably, |
+ CanPlay("'video/mp4; codecs=\"theora, vorbis\"'")); |
ddorwin
2014/03/20 18:04:50
I wonder if Chrome actually can play these unexpec
|
+ EXPECT_EQ(kTheoraAndPropProbably, |
+ CanPlay("'video/mp4; codecs=\"theora, mp4a\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1, vorbis\"'")); |
+ // audio/mpeg |
+ EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp4a\"'")); |
ddorwin
2014/03/20 18:04:50
According to [1], this is for mp3. Thus, please ad
|
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"avc1\"'")); |
+ EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/mpeg; codecs=\"opus\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"vorbis\"'")); |
+ EXPECT_EQ(kTheoraAndPropProbably, CanPlay("'audio/mpeg; codecs=\"theora\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"vp8\"'")); |
+ // audio/mp3 |
+ EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"mp4a\"'")); |
ddorwin
2014/03/20 18:04:50
This is a bug. I think any codecs with audio/mp3 s
amogh.bihani
2014/03/21 06:27:08
My other CL will take care of it. (line 443-445 of
|
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"avc1\"'")); |
+ EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/mp3; codecs=\"opus\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"vorbis\"'")); |
+ EXPECT_EQ(kTheoraAndPropProbably, CanPlay("'audio/mp3; codecs=\"theora\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"vp8\"'")); |
+ // audio/mp4 |
ddorwin
2014/03/20 18:04:50
Move audio/mp4 up after video/mp4.
Actually, mp4
amogh.bihani
2014/03/21 13:52:03
Done.
|
+ EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"mp4a.40.2\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"avc1\"'")); |
ddorwin
2014/03/20 18:04:50
As mentioned earlier, video codecs probably should
amogh.bihani
2014/03/21 06:27:08
My other CL will take care of these :)
(Wow... th
|
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"avc3\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"avc1.4D401E\"'")); |
+ EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/mp4; codecs=\"opus\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"vorbis\"'")); |
+ EXPECT_EQ(kTheoraAndPropProbably, CanPlay("'audio/mp4; codecs=\"theora\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"vp8\"'")); |
+ EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/mp4; codecs=\"vp9, opus\"'")); |
+ EXPECT_EQ(kTheoraAndPropProbably, |
+ CanPlay("'audio/mp4; codecs=\"theora, vorbis\"'")); |
+ EXPECT_EQ(kTheoraAndPropProbably, |
+ CanPlay("'audio/mp4; codecs=\"theora, mp4a\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"avc1, vorbis\"'")); |
+} |
+ |
ddorwin
2014/03/20 18:04:50
This is a good set of tests. I see it's still miss
amogh.bihani
2014/03/21 13:52:03
Done.
|
+} // namespace content |