158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/media/media_browsertest.h" 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/strings/utf_string_conversions.h" 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/navigation_controller.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/navigation_entry.h" 13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/web_contents.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "media/base/test_data_util.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/test/spawned_test_server/spawned_test_server.h" 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Common test results. 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char MediaBrowserTest::kEnded[] = "ENDED"; 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char MediaBrowserTest::kError[] = "ERROR"; 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char MediaBrowserTest::kFailed[] = "FAILED"; 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst char MediaBrowserTest::kPluginCrashed[] = "PLUGIN_CRASHED"; 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 24effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochMediaBrowserTest::MediaBrowserTest() : ignore_plugin_crash_(false) { 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)MediaBrowserTest::~MediaBrowserTest() { 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void MediaBrowserTest::RunMediaTestPage(const std::string& html_page, 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const media::QueryParams& query_params, 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& expected_title, 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool http) { 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL gurl; 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string query = media::GetURLQueryString(query_params); 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<net::SpawnedTestServer> http_test_server; 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (http) { 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) http_test_server.reset( 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new net::SpawnedTestServer(net::SpawnedTestServer::TYPE_HTTP, 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) net::SpawnedTestServer::kLocalhost, 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) media::GetTestDataPath())); 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CHECK(http_test_server->Start()); 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gurl = http_test_server->GetURL("files/" + html_page + "?" + query); 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } else { 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gurl = content::GetFileUrlWithQuery(media::GetTestDataFilePath(html_page), 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) query); 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string final_title = RunTest(gurl, expected_title); 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(expected_title, final_title); 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)std::string MediaBrowserTest::RunTest(const GURL& gurl, 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& expected_title) { 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DVLOG(0) << "Running test URL: " << gurl; 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Observe the web contents for plugin crashes. 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch Observe(browser()->tab_strip_model()->GetActiveWebContents()); 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::TitleWatcher title_watcher( 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ASCIIToUTF16(expected_title)); 60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) AddWaitForTitles(&title_watcher); 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), gurl); 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::string16 result = title_watcher.WaitAndGetTitle(); 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return base::UTF16ToASCII(result); 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void MediaBrowserTest::AddWaitForTitles(content::TitleWatcher* title_watcher) { 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kEnded)); 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kError)); 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kFailed)); 70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kPluginCrashed)); 71d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid MediaBrowserTest::PluginCrashed(const base::FilePath& plugin_path, 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::ProcessId plugin_pid) { 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch VLOG(0) << "Plugin crashed: " << plugin_path.value(); 76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (ignore_plugin_crash_) 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return; 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Update document title to quit TitleWatcher early. 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch web_contents()->GetController().GetActiveEntry() 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ->SetTitle(base::ASCIIToUTF16(kPluginCrashed)); 81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ADD_FAILURE() << "Failing test due to plugin crash."; 82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid MediaBrowserTest::IgnorePluginCrash() { 85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ignore_plugin_crash_ = true; 86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 88