Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(168)

Unified Diff: content/browser/media/media_canplaytype_browsertest.cc

Issue 186973003: Add browser tests for canPlayType() results (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Puting initialize to SetUpOnMainThread Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/content_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « no previous file | content/content_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698