Home | History | Annotate | Download | only in browser
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/basictypes.h"
      6 #include "base/file_path.h"
      7 #include "base/string_util.h"
      8 #include "base/test/test_timeouts.h"
      9 #include "base/threading/platform_thread.h"
     10 #include "chrome/common/chrome_switches.h"
     11 #include "chrome/test/test_launcher_utils.h"
     12 #include "chrome/test/ui/ui_layout_test.h"
     13 #include "chrome/test/ui/ui_test.h"
     14 #include "net/base/net_util.h"
     15 #include "ui/gfx/gl/gl_implementation.h"
     16 
     17 class MediaTest : public UITest {
     18  protected:
     19   virtual void SetUp() {
     20     EXPECT_TRUE(test_launcher_utils::OverrideGLImplementation(
     21         &launch_arguments_,
     22         gfx::kGLImplementationOSMesaName));
     23 
     24 #if defined(OS_MACOSX)
     25     // Accelerated compositing does not work with OSMesa. AcceleratedSurface
     26     // assumes GL contexts are native.
     27     launch_arguments_.AppendSwitch(switches::kDisableAcceleratedCompositing);
     28 #endif
     29 
     30     UITest::SetUp();
     31   }
     32 
     33   void PlayMedia(const char* tag, const char* media_file) {
     34     FilePath test_file(test_data_directory_);
     35     test_file = test_file.AppendASCII("media/player.html");
     36 
     37     GURL player_gurl = net::FilePathToFileURL(test_file);
     38     std::string url = StringPrintf("%s?%s=%s",
     39                                    player_gurl.spec().c_str(),
     40                                    tag,
     41                                    media_file);
     42 
     43     NavigateToURL(GURL(url));
     44 
     45     // Allow the media file to be loaded.
     46     const std::wstring kPlaying = L"PLAYING";
     47     const std::wstring kFailed = L"FAILED";
     48     const std::wstring kError = L"ERROR";
     49     for (int i = 0; i < 10; ++i) {
     50       base::PlatformThread::Sleep(TestTimeouts::action_timeout_ms());
     51       const std::wstring& title = GetActiveTabTitle();
     52       if (title == kPlaying || title == kFailed ||
     53           StartsWith(title, kError, true))
     54         break;
     55     }
     56 
     57     EXPECT_EQ(kPlaying, GetActiveTabTitle());
     58   }
     59 
     60   void PlayAudio(const char* url) {
     61     PlayMedia("audio", url);
     62   }
     63 
     64   void PlayVideo(const char* url) {
     65     PlayMedia("video", url);
     66   }
     67 };
     68 
     69 TEST_F(MediaTest, VideoBearTheora) {
     70   PlayVideo("bear.ogv");
     71 }
     72 
     73 TEST_F(MediaTest, VideoBearSilentTheora) {
     74   PlayVideo("bear_silent.ogv");
     75 }
     76 
     77 TEST_F(MediaTest, VideoBearWebm) {
     78   PlayVideo("bear.webm");
     79 }
     80 
     81 TEST_F(MediaTest, VideoBearSilentWebm) {
     82   PlayVideo("bear_silent.webm");
     83 }
     84 
     85 #if defined(GOOGLE_CHROME_BUILD) || defined(USE_PROPRIETARY_CODECS)
     86 TEST_F(MediaTest, VideoBearMp4) {
     87   PlayVideo("bear.mp4");
     88 }
     89 
     90 TEST_F(MediaTest, VideoBearSilentMp4) {
     91   PlayVideo("bear_silent.mp4");
     92 }
     93 #endif
     94 
     95 TEST_F(MediaTest, VideoBearWav) {
     96   PlayVideo("bear.wav");
     97 }
     98 
     99 TEST_F(UILayoutTest, MediaUILayoutTest) {
    100   static const char* kResources[] = {
    101     "content",
    102     "media-file.js",
    103     "media-fullscreen.js",
    104     "video-paint-test.js",
    105     "video-played.js",
    106     "video-test.js",
    107   };
    108 
    109   static const char* kMediaTests[] = {
    110     "video-autoplay.html",
    111     // "video-loop.html", disabled due to 52887.
    112     "video-no-autoplay.html",
    113     // TODO(sergeyu): Add more tests here.
    114   };
    115 
    116   FilePath test_dir;
    117   FilePath media_test_dir;
    118   media_test_dir = media_test_dir.AppendASCII("media");
    119   InitializeForLayoutTest(test_dir, media_test_dir, kNoHttpPort);
    120 
    121   // Copy resources first.
    122   for (size_t i = 0; i < arraysize(kResources); ++i)
    123     AddResourceForLayoutTest(
    124         test_dir, media_test_dir.AppendASCII(kResources[i]));
    125 
    126   for (size_t i = 0; i < arraysize(kMediaTests); ++i)
    127     RunLayoutTest(kMediaTests[i], kNoHttpPort);
    128 }
    129