media_browsertest.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
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/path_service.h" 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/strings/stringprintf.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/strings/utf_string_conversions.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/chrome_paths.h" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/navigation_controller.h" 15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/navigation_entry.h" 16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/web_contents.h" 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Common test results. 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char MediaBrowserTest::kEnded[] = "ENDED"; 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char MediaBrowserTest::kError[] = "ERROR"; 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char MediaBrowserTest::kFailed[] = "FAILED"; 23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst char MediaBrowserTest::kPluginCrashed[] = "PLUGIN_CRASHED"; 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 25effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochMediaBrowserTest::MediaBrowserTest() : ignore_plugin_crash_(false) { 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)MediaBrowserTest::~MediaBrowserTest() { 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void MediaBrowserTest::RunMediaTestPage( 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& html_page, std::vector<StringPair>* query_params, 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& expected_title, bool http) { 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL gurl; 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string query = ""; 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (query_params != NULL && !query_params->empty()) { 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::vector<StringPair>::const_iterator itr = query_params->begin(); 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) query = itr->first + "=" + itr->second; 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ++itr; 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (; itr != query_params->end(); ++itr) { 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) query.append("&" + itr->first + "=" + itr->second); 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (http) { 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gurl = test_server()->GetURL("files/media/" + html_page + "?" + query); 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } else { 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::FilePath test_file_path; 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PathService::Get(chrome::DIR_TEST_DATA, &test_file_path); 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test_file_path = test_file_path.AppendASCII("media") 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) .AppendASCII(html_page); 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gurl = content::GetFileUrlWithQuery(test_file_path, query); 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 final_title = RunTest(gurl, expected_title); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::ASCIIToUTF16(expected_title), final_title); 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 MediaBrowserTest::RunTest(const GURL& gurl, 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& expected_title) { 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DVLOG(1) << "Running test URL: " << gurl; 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Observe the web contents for plugin crashes. 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch Observe(browser()->tab_strip_model()->GetActiveWebContents()); 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::TitleWatcher title_watcher( 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ASCIIToUTF16(expected_title)); 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) AddWaitForTitles(&title_watcher); 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), gurl); 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return title_watcher.WaitAndGetTitle(); 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void MediaBrowserTest::AddWaitForTitles(content::TitleWatcher* title_watcher) { 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kEnded)); 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kError)); 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kFailed)); 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kPluginCrashed)); 78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid MediaBrowserTest::PluginCrashed(const base::FilePath& plugin_path, 81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::ProcessId plugin_pid) { 82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch VLOG(0) << "Plugin crashed: " << plugin_path.value(); 83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (ignore_plugin_crash_) 84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return; 85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Update document title to quit TitleWatcher early. 86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch web_contents()->GetController().GetActiveEntry() 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ->SetTitle(base::ASCIIToUTF16(kPluginCrashed)); 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ADD_FAILURE() << "Failing test due to plugin crash."; 89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid MediaBrowserTest::IgnorePluginCrash() { 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ignore_plugin_crash_ = true; 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 95