1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "build/build_config.h"
6 #include "content/browser/media/media_browsertest.h"
7 #include "content/public/test/browser_test_utils.h"
8 #include "media/base/test_data_util.h"
9 #include "media/media_buildflags.h"
10 
11 #if defined(OS_ANDROID)
12 #include "base/android/build_info.h"
13 #endif
14 
15 namespace content {
16 
17 class MediaColorTest : public MediaBrowserTest {
18  public:
RunColorTest(const std::string & video_file)19   void RunColorTest(const std::string& video_file) {
20     base::FilePath path = media::GetTestDataFilePath("blackwhite.html");
21     std::string final_title =
22         RunTest(GetFileUrlWithQuery(path, video_file), media::kEnded);
23     EXPECT_EQ(media::kEnded, final_title);
24   }
SetUp()25   void SetUp() override {
26     EnablePixelOutput();
27     MediaBrowserTest::SetUp();
28   }
29 };
30 
31 // Android doesn't support Theora.
32 #if !defined(OS_ANDROID)
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv420pTheora)33 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv420pTheora) {
34   RunColorTest("yuv420p.ogv");
35 }
36 
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv422pTheora)37 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv422pTheora) {
38   RunColorTest("yuv422p.ogv");
39 }
40 
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv444pTheora)41 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv444pTheora) {
42   RunColorTest("yuv444p.ogv");
43 }
44 #endif  // !defined(OS_ANDROID)
45 
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv420pVp8)46 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv420pVp8) {
47   RunColorTest("yuv420p.webm");
48 }
49 
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv444pVp9)50 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv444pVp9) {
51   RunColorTest("yuv444p.webm");
52 }
53 
54 #if BUILDFLAG(USE_PROPRIETARY_CODECS)
55 
56 // This test fails on Android: http://crbug.com/938320
57 // It also fails on ChromeOS https://crbug.com/938618
58 #if defined(OS_ANDROID) || defined(OS_CHROMEOS)
59 #define MAYBE_Yuv420pH264 DISABLED_Yuv420pH264
60 #else
61 #define MAYBE_Yuv420pH264 Yuv420pH264
62 #endif
IN_PROC_BROWSER_TEST_F(MediaColorTest,MAYBE_Yuv420pH264)63 IN_PROC_BROWSER_TEST_F(MediaColorTest, MAYBE_Yuv420pH264) {
64 #if defined(OS_ANDROID)
65   // https://crbug.com/907572
66   if (base::android::BuildInfo::GetInstance()->sdk_int() <=
67       base::android::SDK_VERSION_KITKAT) {
68     DVLOG(0) << "Skipping test - Yuv420pH264 is flaky on KitKat devices.";
69     return;
70   }
71 #endif
72   RunColorTest("yuv420p.mp4");
73 }
74 
75 // This test fails on Android: http://crbug.com/647818
76 #if defined(OS_ANDROID)
77 #define MAYBE_Yuvj420pH264 DISABLED_Yuvj420pH264
78 #else
79 #define MAYBE_Yuvj420pH264 Yuvj420pH264
80 #endif
IN_PROC_BROWSER_TEST_F(MediaColorTest,MAYBE_Yuvj420pH264)81 IN_PROC_BROWSER_TEST_F(MediaColorTest, MAYBE_Yuvj420pH264) {
82   RunColorTest("yuvj420p.mp4");
83 }
84 
85 // This fails on ChromeOS: http://crbug.com/647400,
86 // This fails on Android: http://crbug.com/938320,
87 #if defined(OS_CHROMEOS) || defined(OS_ANDROID)
88 #define MAYBE_Yuv420pRec709H264 DISABLED_Yuv420pRec709H264
89 #else
90 #define MAYBE_Yuv420pRec709H264 Yuv420pRec709H264
91 #endif
IN_PROC_BROWSER_TEST_F(MediaColorTest,MAYBE_Yuv420pRec709H264)92 IN_PROC_BROWSER_TEST_F(MediaColorTest, MAYBE_Yuv420pRec709H264) {
93 #if defined(OS_ANDROID)
94   // https://crbug.com/907572
95   if (base::android::BuildInfo::GetInstance()->sdk_int() <=
96       base::android::SDK_VERSION_KITKAT) {
97     DVLOG(0) << "Skipping test - Yuv420pRec709H264 is flaky on KitKat devices.";
98     return;
99   }
100 #endif
101   RunColorTest("yuv420p_rec709.mp4");
102 }
103 
104 // Android doesn't support 10bpc.
105 // This test flakes on mac: http://crbug.com/810908
106 #if defined(OS_ANDROID) || defined(OS_MACOSX)
107 #define MAYBE_Yuv420pHighBitDepth DISABLED_Yuv420pHighBitDepth
108 #else
109 #define MAYBE_Yuv420pHighBitDepth Yuv420pHighBitDepth
110 #endif
IN_PROC_BROWSER_TEST_F(MediaColorTest,MAYBE_Yuv420pHighBitDepth)111 IN_PROC_BROWSER_TEST_F(MediaColorTest, MAYBE_Yuv420pHighBitDepth) {
112   RunColorTest("yuv420p_hi10p.mp4");
113 }
114 
115 // Android devices usually only support baseline, main and high.
116 #if !defined(OS_ANDROID)
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv422pH264)117 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv422pH264) {
118   RunColorTest("yuv422p.mp4");
119 }
120 
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv444pH264)121 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv444pH264) {
122   RunColorTest("yuv444p.mp4");
123 }
124 #endif  // !defined(OS_ANDROID)
125 
126 #if defined(OS_CHROMEOS)
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv420pMpeg4)127 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv420pMpeg4) {
128   RunColorTest("yuv420p.avi");
129 }
130 #endif  // defined(OS_CHROMEOS)
131 #endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
132 
133 }  // namespace content
134