text: // Copyright 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 "base/macros.h"
  #include "base/strings/string_split.h"
  #include "base/strings/utf_string_conversions.h"
  #include "chromecast/browser/test/chromecast_browser_test.h"
  #include "chromecast/browser/test/chromecast_browser_test_helper.h"
  #include "chromecast/chromecast_features.h"
  #include "content/public/test/browser_test_utils.h"
  #include "media/base/test_data_util.h"
  #include "url/gurl.h"
  #include "url/url_constants.h"
  
  namespace chromecast {
  namespace shell {
  namespace {
  const char kEnded[] = "ENDED";
  const char kError[] = "ERROR";
  const char kFailed[] = "FAILED";
  }
  
  class ChromecastShellBrowserTest : public ChromecastBrowserTest {
   public:
    ChromecastShellBrowserTest() {}
  
    void LoadAboutBlank() {
      content::WebContents* web_contents =
          helper_->NavigateToURL(GURL(url::kAboutBlankURL));
      content::TitleWatcher title_watcher(
          web_contents, base::ASCIIToUTF16(url::kAboutBlankURL));
      base::string16 result = title_watcher.WaitAndGetTitle();
      EXPECT_EQ(url::kAboutBlankURL, base::UTF16ToASCII(result));
    }
    void PlayAudio(const std::string& media_file) {
      PlayMedia("audio", media_file);
    }
    void PlayVideo(const std::string& media_file) {
      PlayMedia("video", media_file);
    }
  
   private:
    void PlayMedia(const std::string& tag,
                   const std::string& media_file) {
      base::StringPairs query_params;
      query_params.push_back(std::make_pair(tag, media_file));
      RunMediaTestPage("player.html", query_params, kEnded);
    }
  
    void RunMediaTestPage(const std::string& html_page,
                          const base::StringPairs& query_params,
                          const std::string& expected_title) {
      std::string query = media::GetURLQueryString(query_params);
      GURL gurl = content::GetFileUrlWithQuery(
          media::GetTestDataFilePath(html_page),
          query);
  
      std::string final_title = RunTest(gurl, expected_title);
      EXPECT_EQ(expected_title, final_title);
    }
  
    std::string RunTest(const GURL& gurl,
                        const std::string& expected_title) {
      content::WebContents* web_contents = helper_->NavigateToURL(gurl);
      content::TitleWatcher title_watcher(web_contents,
                                          base::ASCIIToUTF16(expected_title));
      title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16(kEnded));
      title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16(kError));
      title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16(kFailed));
      base::string16 result = title_watcher.WaitAndGetTitle();
      return base::UTF16ToASCII(result);
    }
  
    DISALLOW_COPY_AND_ASSIGN(ChromecastShellBrowserTest);
  };
  
  IN_PROC_BROWSER_TEST_F(ChromecastShellBrowserTest, EmptyTest) {
    // Run an entire browser lifecycle to ensure nothing breaks.
    LoadAboutBlank();
  }
  
  IN_PROC_BROWSER_TEST_F(ChromecastShellBrowserTest, AudioPlaybackWavPcm) {
    PlayAudio("bear_pcm.wav");
  }
  
  #if !BUILDFLAG(DISABLE_DISPLAY)
  IN_PROC_BROWSER_TEST_F(ChromecastShellBrowserTest, VideoPlaybackMp4) {
    PlayVideo("bear.mp4");
  }
  #endif
  
  }  // namespace shell
  }  // namespace chromecast
  