| Index: chrome/test/ui/ui_test.cc
|
| ===================================================================
|
| --- chrome/test/ui/ui_test.cc (revision 261647)
|
| +++ chrome/test/ui/ui_test.cc (working copy)
|
| @@ -1,695 +0,0 @@
|
| -// Copyright (c) 2012 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 "chrome/test/ui/ui_test.h"
|
| -
|
| -#if defined(OS_POSIX)
|
| -#include <signal.h>
|
| -#include <sys/types.h>
|
| -#endif
|
| -
|
| -#include <set>
|
| -#include <vector>
|
| -
|
| -#include "base/base_switches.h"
|
| -#include "base/bind.h"
|
| -#include "base/command_line.h"
|
| -#include "base/environment.h"
|
| -#include "base/file_util.h"
|
| -#include "base/files/file_enumerator.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/files/scoped_temp_dir.h"
|
| -#include "base/json/json_file_value_serializer.h"
|
| -#include "base/logging.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/path_service.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/string_split.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "base/test/test_file_util.h"
|
| -#include "base/test/test_timeouts.h"
|
| -#include "base/threading/platform_thread.h"
|
| -#include "base/time/time.h"
|
| -#include "chrome/app/chrome_command_ids.h"
|
| -#include "chrome/browser/profiles/profile_impl.h"
|
| -#include "chrome/common/automation_messages.h"
|
| -#include "chrome/common/chrome_constants.h"
|
| -#include "chrome/common/chrome_paths.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "chrome/common/logging_chrome.h"
|
| -#include "chrome/common/net/url_fixer_upper.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "chrome/common/url_constants.h"
|
| -#include "chrome/test/automation/automation_proxy.h"
|
| -#include "chrome/test/automation/browser_proxy.h"
|
| -#include "chrome/test/automation/proxy_launcher.h"
|
| -#include "chrome/test/automation/tab_proxy.h"
|
| -#include "chrome/test/automation/window_proxy.h"
|
| -#include "chrome/test/base/chrome_process_util.h"
|
| -#include "chrome/test/base/test_launcher_utils.h"
|
| -#include "chrome/test/base/test_switches.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "extensions/common/switches.h"
|
| -#include "net/base/net_util.h"
|
| -#include "ui/gl/gl_implementation.h"
|
| -#include "url/gurl.h"
|
| -
|
| -#if defined(OS_WIN)
|
| -#include "base/win/windows_version.h"
|
| -#endif
|
| -
|
| -using base::Time;
|
| -using base::TimeDelta;
|
| -using base::TimeTicks;
|
| -
|
| -const wchar_t UITestBase::kFailedNoCrashService[] =
|
| -#if defined(OS_WIN)
|
| - L"NOTE: This test is expected to fail if crash_service.exe is not "
|
| - L"running. Start it manually before running this test (see the build "
|
| - L"output directory).";
|
| -#elif defined(OS_LINUX)
|
| - L"NOTE: This test is expected to fail if breakpad is not built in "
|
| - L"or if chromium is not running headless (try CHROME_HEADLESS=1).";
|
| -#else
|
| - L"NOTE: Crash service not ported to this platform!";
|
| -#endif
|
| -
|
| -UITestBase::UITestBase()
|
| - : launch_arguments_(CommandLine::NO_PROGRAM),
|
| - expected_errors_(0),
|
| - expected_crashes_(0),
|
| - homepage_(content::kAboutBlankURL),
|
| - wait_for_initial_loads_(true),
|
| - dom_automation_enabled_(false),
|
| - stats_collection_controller_enabled_(false),
|
| - show_window_(false),
|
| - clear_profile_(true),
|
| - include_testing_id_(true),
|
| - enable_file_cookies_(true) {
|
| - PathService::Get(chrome::DIR_APP, &browser_directory_);
|
| - PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory_);
|
| -}
|
| -
|
| -UITestBase::UITestBase(base::MessageLoop::Type msg_loop_type)
|
| - : launch_arguments_(CommandLine::NO_PROGRAM),
|
| - expected_errors_(0),
|
| - expected_crashes_(0),
|
| - wait_for_initial_loads_(true),
|
| - dom_automation_enabled_(false),
|
| - stats_collection_controller_enabled_(false),
|
| - show_window_(false),
|
| - clear_profile_(true),
|
| - include_testing_id_(true),
|
| - enable_file_cookies_(true) {
|
| - PathService::Get(chrome::DIR_APP, &browser_directory_);
|
| - PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory_);
|
| -}
|
| -
|
| -UITestBase::~UITestBase() {}
|
| -
|
| -void UITestBase::SetUp() {
|
| - // Tests that do a session restore (e.g. SessionRestoreUITest, StartupTest)
|
| - // call SetUp() multiple times because they restart the browser mid-test.
|
| - // We don't want to reset the ProxyLauncher's state in those cases.
|
| - if (!launcher_.get())
|
| - launcher_.reset(CreateProxyLauncher());
|
| - launcher_->AssertAppNotRunning("Please close any other instances "
|
| - "of the app before testing.");
|
| -
|
| - test_start_time_ = Time::NowFromSystemTime();
|
| -
|
| - SetLaunchSwitches();
|
| - ASSERT_TRUE(launcher_->InitializeConnection(DefaultLaunchState(),
|
| - wait_for_initial_loads_));
|
| -}
|
| -
|
| -void UITestBase::TearDown() {
|
| - if (launcher_.get())
|
| - launcher_->TerminateConnection();
|
| -
|
| - CheckErrorsAndCrashes();
|
| -}
|
| -
|
| -AutomationProxy* UITestBase::automation() const {
|
| - return launcher_->automation();
|
| -}
|
| -
|
| -base::TimeDelta UITestBase::action_timeout() {
|
| - return automation()->action_timeout();
|
| -}
|
| -
|
| -int UITestBase::action_timeout_ms() {
|
| - return action_timeout().InMilliseconds();
|
| -}
|
| -
|
| -void UITestBase::set_action_timeout(base::TimeDelta timeout) {
|
| - automation()->set_action_timeout(timeout);
|
| - VLOG(1) << "Automation action timeout set to "
|
| - << timeout.InMilliseconds() << " ms";
|
| -}
|
| -
|
| -void UITestBase::set_action_timeout_ms(int timeout) {
|
| - set_action_timeout(base::TimeDelta::FromMilliseconds(timeout));
|
| -}
|
| -
|
| -ProxyLauncher* UITestBase::CreateProxyLauncher() {
|
| - return new AnonymousProxyLauncher(false);
|
| -}
|
| -
|
| -ProxyLauncher::LaunchState UITestBase::DefaultLaunchState() {
|
| - base::FilePath browser_executable =
|
| - browser_directory_.Append(GetExecutablePath());
|
| - CommandLine command(browser_executable);
|
| - command.AppendArguments(launch_arguments_, false);
|
| - base::Closure setup_profile_callback = base::Bind(&UITestBase::SetUpProfile,
|
| - base::Unretained(this));
|
| - ProxyLauncher::LaunchState state =
|
| - { clear_profile_, template_user_data_, setup_profile_callback,
|
| - command, include_testing_id_, show_window_ };
|
| - return state;
|
| -}
|
| -
|
| -void UITestBase::SetLaunchSwitches() {
|
| - // All flags added here should also be added in ExtraChromeFlags() in
|
| - // chrome/test/pyautolib/pyauto.py as well to take effect for all tests
|
| - // on chromeos.
|
| -
|
| - // Propagate commandline settings from test_launcher_utils.
|
| - test_launcher_utils::PrepareBrowserCommandLineForTests(&launch_arguments_);
|
| -
|
| - if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kWaitForDebugger))
|
| - launch_arguments_.AppendSwitch(switches::kWaitForDebugger);
|
| -
|
| - // We need cookies on file:// for things like the page cycler.
|
| - if (enable_file_cookies_)
|
| - launch_arguments_.AppendSwitch(switches::kEnableFileCookies);
|
| - if (dom_automation_enabled_)
|
| - launch_arguments_.AppendSwitch(switches::kDomAutomationController);
|
| - if (stats_collection_controller_enabled_)
|
| - launch_arguments_.AppendSwitch(switches::kStatsCollectionController);
|
| - // Allow off-store extension installs.
|
| - launch_arguments_.AppendSwitchASCII(
|
| - extensions::switches::kEasyOffStoreExtensionInstall, "1");
|
| - if (!homepage_.empty()) {
|
| - // Pass |homepage_| both as an arg (so that it opens on startup) and to the
|
| - // homepage switch (so that the homepage is set).
|
| -
|
| - if (!launch_arguments_.HasSwitch(switches::kHomePage))
|
| - launch_arguments_.AppendSwitchASCII(switches::kHomePage, homepage_);
|
| -
|
| - if (launch_arguments_.GetArgs().empty() &&
|
| - !launch_arguments_.HasSwitch(switches::kRestoreLastSession)) {
|
| - launch_arguments_.AppendArg(homepage_);
|
| - }
|
| - }
|
| - if (!test_name_.empty())
|
| - launch_arguments_.AppendSwitchASCII(switches::kTestName, test_name_);
|
| -}
|
| -
|
| -void UITestBase::SetUpProfile() {
|
| -}
|
| -
|
| -void UITestBase::LaunchBrowser() {
|
| - LaunchBrowser(launch_arguments_, clear_profile_);
|
| -}
|
| -
|
| -void UITestBase::LaunchBrowserAndServer() {
|
| - ASSERT_TRUE(launcher_->LaunchBrowserAndServer(DefaultLaunchState(),
|
| - wait_for_initial_loads_));
|
| -}
|
| -
|
| -void UITestBase::ConnectToRunningBrowser() {
|
| - ASSERT_TRUE(launcher_->ConnectToRunningBrowser(wait_for_initial_loads_));
|
| -}
|
| -
|
| -void UITestBase::CloseBrowserAndServer() {
|
| - if (launcher_.get())
|
| - launcher_->CloseBrowserAndServer();
|
| -}
|
| -
|
| -void UITestBase::LaunchBrowser(const CommandLine& arguments,
|
| - bool clear_profile) {
|
| - ProxyLauncher::LaunchState state = DefaultLaunchState();
|
| - state.clear_profile = clear_profile;
|
| - ASSERT_TRUE(launcher_->LaunchBrowser(state));
|
| -}
|
| -
|
| -void UITestBase::QuitBrowser() {
|
| - launcher_->QuitBrowser();
|
| -}
|
| -
|
| -scoped_refptr<TabProxy> UITestBase::GetActiveTab(int window_index) {
|
| - EXPECT_GE(window_index, 0);
|
| - int window_count = -1;
|
| - // We have to use EXPECT rather than ASSERT here because ASSERT_* only works
|
| - // in functions that return void.
|
| - EXPECT_TRUE(automation()->GetBrowserWindowCount(&window_count));
|
| - if (window_count == -1)
|
| - return NULL;
|
| - EXPECT_GT(window_count, window_index);
|
| - scoped_refptr<BrowserProxy> window_proxy(automation()->
|
| - GetBrowserWindow(window_index));
|
| - EXPECT_TRUE(window_proxy.get());
|
| - if (!window_proxy.get())
|
| - return NULL;
|
| -
|
| - int active_tab_index = -1;
|
| - EXPECT_TRUE(window_proxy->GetActiveTabIndex(&active_tab_index));
|
| - if (active_tab_index == -1)
|
| - return NULL;
|
| -
|
| - return window_proxy->GetTab(active_tab_index);
|
| -}
|
| -
|
| -scoped_refptr<TabProxy> UITestBase::GetActiveTab() {
|
| - scoped_refptr<BrowserProxy> window_proxy(automation()->
|
| - GetBrowserWindow(0));
|
| - EXPECT_TRUE(window_proxy.get());
|
| - if (!window_proxy.get())
|
| - return NULL;
|
| -
|
| - scoped_refptr<TabProxy> tab_proxy = window_proxy->GetActiveTab();
|
| - EXPECT_TRUE(tab_proxy.get());
|
| - return tab_proxy;
|
| -}
|
| -
|
| -void UITestBase::NavigateToURL(const GURL& url) {
|
| - NavigateToURL(url, 0, GetActiveTabIndex(0));
|
| -}
|
| -
|
| -void UITestBase::NavigateToURL(const GURL& url, int window_index) {
|
| - NavigateToURL(url, window_index, GetActiveTabIndex(window_index));
|
| -}
|
| -
|
| -void UITestBase::NavigateToURL(const GURL& url, int window_index, int
|
| - tab_index) {
|
| - NavigateToURLBlockUntilNavigationsComplete(url, 1, window_index, tab_index);
|
| -}
|
| -
|
| -void UITestBase::NavigateToURLBlockUntilNavigationsComplete(
|
| - const GURL& url, int number_of_navigations) {
|
| - scoped_refptr<TabProxy> tab_proxy(GetActiveTab());
|
| - ASSERT_TRUE(tab_proxy.get());
|
| - EXPECT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS,
|
| - tab_proxy->NavigateToURLBlockUntilNavigationsComplete(
|
| - url, number_of_navigations)) << url.spec();
|
| -}
|
| -
|
| -void UITestBase::NavigateToURLBlockUntilNavigationsComplete(
|
| - const GURL& url, int number_of_navigations, int window_index,
|
| - int tab_index) {
|
| - scoped_refptr<BrowserProxy> window =
|
| - automation()->GetBrowserWindow(window_index);
|
| - ASSERT_TRUE(window.get());
|
| - scoped_refptr<TabProxy> tab_proxy(window->GetTab(tab_index));
|
| - ASSERT_TRUE(tab_proxy.get());
|
| - EXPECT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS,
|
| - tab_proxy->NavigateToURLBlockUntilNavigationsComplete(
|
| - url, number_of_navigations)) << url.spec();
|
| -}
|
| -
|
| -GURL UITestBase::GetActiveTabURL(int window_index) {
|
| - scoped_refptr<TabProxy> tab_proxy(GetActiveTab(window_index));
|
| - EXPECT_TRUE(tab_proxy.get());
|
| - if (!tab_proxy.get())
|
| - return GURL();
|
| -
|
| - GURL url;
|
| - bool success = tab_proxy->GetCurrentURL(&url);
|
| - EXPECT_TRUE(success);
|
| - if (!success)
|
| - return GURL();
|
| - return url;
|
| -}
|
| -
|
| -std::wstring UITestBase::GetActiveTabTitle(int window_index) {
|
| - std::wstring title;
|
| - scoped_refptr<TabProxy> tab_proxy(GetActiveTab(window_index));
|
| - EXPECT_TRUE(tab_proxy.get());
|
| - if (!tab_proxy.get())
|
| - return title;
|
| -
|
| - EXPECT_TRUE(tab_proxy->GetTabTitle(&title));
|
| - return title;
|
| -}
|
| -
|
| -int UITestBase::GetActiveTabIndex(int window_index) {
|
| - scoped_refptr<BrowserProxy> window_proxy(automation()->
|
| - GetBrowserWindow(window_index));
|
| - EXPECT_TRUE(window_proxy.get());
|
| - if (!window_proxy.get())
|
| - return -1;
|
| -
|
| - int active_tab_index = -1;
|
| - EXPECT_TRUE(window_proxy->GetActiveTabIndex(&active_tab_index));
|
| - return active_tab_index;
|
| -}
|
| -
|
| -int UITestBase::GetTabCount() {
|
| - return GetTabCount(0);
|
| -}
|
| -
|
| -int UITestBase::GetTabCount(int window_index) {
|
| - scoped_refptr<BrowserProxy> window(
|
| - automation()->GetBrowserWindow(window_index));
|
| - EXPECT_TRUE(window.get());
|
| - if (!window.get())
|
| - return 0;
|
| -
|
| - int result = 0;
|
| - EXPECT_TRUE(window->GetTabCount(&result));
|
| -
|
| - return result;
|
| -}
|
| -
|
| -void UITestBase::WaitUntilTabCount(int tab_count) {
|
| - const int kMaxIntervals = 10;
|
| - const TimeDelta kDelay = TestTimeouts::action_timeout() / kMaxIntervals;
|
| -
|
| - for (int i = 0; i < kMaxIntervals; ++i) {
|
| - if (GetTabCount() == tab_count)
|
| - return;
|
| -
|
| - base::PlatformThread::Sleep(kDelay);
|
| - }
|
| -
|
| - ADD_FAILURE() << "Timeout reached in WaitUntilTabCount";
|
| -}
|
| -
|
| -const base::FilePath::CharType* UITestBase::GetExecutablePath() {
|
| - if (launch_arguments_.HasSwitch(switches::kEnableChromiumBranding))
|
| - return chrome::kBrowserProcessExecutablePathChromium;
|
| - return chrome::kBrowserProcessExecutablePath;
|
| -}
|
| -
|
| -bool UITestBase::CloseBrowser(BrowserProxy* browser,
|
| - bool* application_closed) const {
|
| - DCHECK(application_closed);
|
| - if (!browser->is_valid() || !browser->handle())
|
| - return false;
|
| -
|
| - bool result = true;
|
| -
|
| - ChromeProcessList processes = GetRunningChromeProcesses(
|
| - browser_process_id());
|
| -
|
| - bool succeeded = automation()->Send(new AutomationMsg_CloseBrowser(
|
| - browser->handle(), &result, application_closed));
|
| -
|
| - if (!succeeded)
|
| - return false;
|
| -
|
| - if (*application_closed) {
|
| - int exit_code = -1;
|
| - EXPECT_TRUE(launcher_->WaitForBrowserProcessToQuit(
|
| - TestTimeouts::action_max_timeout(), &exit_code));
|
| - EXPECT_EQ(0, exit_code); // Expect a clean shutown.
|
| - // Ensure no child processes are left dangling.
|
| - TerminateAllChromeProcesses(processes);
|
| - }
|
| -
|
| - return result;
|
| -}
|
| -
|
| -int UITestBase::GetCrashCount() const {
|
| - base::FilePath crash_dump_path;
|
| - PathService::Get(chrome::DIR_CRASH_DUMPS, &crash_dump_path);
|
| -
|
| - int files_found = 0;
|
| - base::FileEnumerator en(crash_dump_path, false, base::FileEnumerator::FILES);
|
| - while (!en.Next().empty()) {
|
| - if (en.GetInfo().GetLastModifiedTime() > test_start_time_)
|
| - files_found++;
|
| - }
|
| -
|
| -#if defined(OS_WIN)
|
| - // Each crash creates two dump files on Windows.
|
| - return files_found / 2;
|
| -#else
|
| - return files_found;
|
| -#endif
|
| -}
|
| -
|
| -std::string UITestBase::CheckErrorsAndCrashes() const {
|
| - // Make sure that we didn't encounter any assertion failures
|
| - logging::AssertionList assertions;
|
| - logging::GetFatalAssertions(&assertions);
|
| -
|
| - // If there were errors, get all the error strings for display.
|
| - std::wstring failures =
|
| - L"The following error(s) occurred in the application during this test:";
|
| - if (assertions.size() > expected_errors_) {
|
| - logging::AssertionList::const_iterator iter = assertions.begin();
|
| - for (; iter != assertions.end(); ++iter) {
|
| - failures += L"\n\n";
|
| - failures += *iter;
|
| - }
|
| - }
|
| - EXPECT_EQ(expected_errors_, assertions.size()) << failures;
|
| -
|
| - int actual_crashes = GetCrashCount();
|
| -
|
| - std::wstring error_msg =
|
| - L"Encountered an unexpected crash in the program during this test.";
|
| - if (expected_crashes_ > 0 && actual_crashes == 0) {
|
| - error_msg += L" ";
|
| - error_msg += kFailedNoCrashService;
|
| - }
|
| - EXPECT_EQ(expected_crashes_, actual_crashes) << error_msg;
|
| -
|
| - std::wstring wide_result;
|
| - if (expected_errors_ != assertions.size()) {
|
| - wide_result += failures;
|
| - wide_result += L"\n\n";
|
| - }
|
| - if (expected_crashes_ != actual_crashes)
|
| - wide_result += error_msg;
|
| -
|
| - return std::string(wide_result.begin(), wide_result.end());
|
| -}
|
| -
|
| -void UITestBase::SetBrowserDirectory(const base::FilePath& dir) {
|
| - browser_directory_ = dir;
|
| -}
|
| -
|
| -void UITestBase::AppendBrowserLaunchSwitch(const char* name) {
|
| - launch_arguments_.AppendSwitch(name);
|
| -}
|
| -
|
| -void UITestBase::AppendBrowserLaunchSwitch(const char* name,
|
| - const char* value) {
|
| - launch_arguments_.AppendSwitchASCII(name, value);
|
| -}
|
| -
|
| -bool UITestBase::BeginTracing(const std::string& category_patterns) {
|
| - return automation()->BeginTracing(category_patterns);
|
| -}
|
| -
|
| -std::string UITestBase::EndTracing() {
|
| - std::string json_trace_output;
|
| - if (!automation()->EndTracing(&json_trace_output))
|
| - return std::string();
|
| - return json_trace_output;
|
| -}
|
| -
|
| -// UITest methods
|
| -
|
| -void UITest::SetUp() {
|
| - // Pass the test case name to chrome.exe on the command line to help with
|
| - // parsing Purify output.
|
| - const testing::TestInfo* const test_info =
|
| - testing::UnitTest::GetInstance()->current_test_info();
|
| - if (test_info) {
|
| - set_test_name(test_info->test_case_name() + std::string(".") +
|
| - test_info->name());
|
| - }
|
| -
|
| - UITestBase::SetUp();
|
| - PlatformTest::SetUp();
|
| -}
|
| -
|
| -void UITest::TearDown() {
|
| - UITestBase::TearDown();
|
| - PlatformTest::TearDown();
|
| -}
|
| -
|
| -ProxyLauncher* UITest::CreateProxyLauncher() {
|
| - // Make the AutomationProxy disconnect the channel on the first error,
|
| - // so that we avoid spending a lot of time in timeouts. The browser is likely
|
| - // hosed if we hit those errors.
|
| - return new AnonymousProxyLauncher(true);
|
| -}
|
| -
|
| -bool UITest::GetBrowserProcessCount(int* count) {
|
| - *count = 0;
|
| - if (!automation()->WaitForProcessLauncherThreadToGoIdle())
|
| - return false;
|
| - *count = GetRunningChromeProcesses(browser_process_id()).size();
|
| - return true;
|
| -}
|
| -
|
| -static base::DictionaryValue* LoadDictionaryValueFromPath(
|
| - const base::FilePath& path) {
|
| - if (path.empty())
|
| - return NULL;
|
| -
|
| - JSONFileValueSerializer serializer(path);
|
| - scoped_ptr<base::Value> root_value(serializer.Deserialize(NULL, NULL));
|
| - if (!root_value.get() ||
|
| - root_value->GetType() != base::Value::TYPE_DICTIONARY) {
|
| - return NULL;
|
| - }
|
| -
|
| - return static_cast<base::DictionaryValue*>(root_value.release());
|
| -}
|
| -
|
| -base::DictionaryValue* UITest::GetLocalState() {
|
| - base::FilePath local_state_path;
|
| - PathService::Get(chrome::FILE_LOCAL_STATE, &local_state_path);
|
| - return LoadDictionaryValueFromPath(local_state_path);
|
| -}
|
| -
|
| -base::DictionaryValue* UITest::GetDefaultProfilePreferences() {
|
| - base::FilePath path;
|
| - PathService::Get(chrome::DIR_USER_DATA, &path);
|
| - path = path.AppendASCII(TestingProfile::kTestUserProfileDir);
|
| - return LoadDictionaryValueFromPath(path.Append(chrome::kPreferencesFilename));
|
| -}
|
| -
|
| -void UITest::WaitForFinish(const std::string &name,
|
| - const std::string &id,
|
| - const GURL &url,
|
| - const std::string& test_complete_cookie,
|
| - const std::string& expected_cookie_value,
|
| - const base::TimeDelta wait_time) {
|
| - // The webpage being tested has javascript which sets a cookie
|
| - // which signals completion of the test. The cookie name is
|
| - // a concatenation of the test name and the test id. This allows
|
| - // us to run multiple tests within a single webpage and test
|
| - // that they all c
|
| - std::string cookie_name = name;
|
| - cookie_name.append(".");
|
| - cookie_name.append(id);
|
| - cookie_name.append(".");
|
| - cookie_name.append(test_complete_cookie);
|
| -
|
| - scoped_refptr<TabProxy> tab(GetActiveTab());
|
| - ASSERT_TRUE(tab.get());
|
| - std::string cookie_value = WaitUntilCookieNonEmpty(tab.get(), url,
|
| - cookie_name.c_str(),
|
| - wait_time);
|
| - EXPECT_EQ(expected_cookie_value, cookie_value);
|
| -}
|
| -
|
| -bool UITest::WaitUntilJavaScriptCondition(TabProxy* tab,
|
| - const std::wstring& frame_xpath,
|
| - const std::wstring& jscript,
|
| - base::TimeDelta timeout) {
|
| - const TimeDelta kDelay = TimeDelta::FromMilliseconds(250);
|
| - const int kMaxDelays = timeout / kDelay;
|
| -
|
| - // Wait until the test signals it has completed.
|
| - for (int i = 0; i < kMaxDelays; ++i) {
|
| - bool done_value = false;
|
| - bool success = tab->ExecuteAndExtractBool(frame_xpath, jscript,
|
| - &done_value);
|
| - EXPECT_TRUE(success);
|
| - if (!success)
|
| - return false;
|
| - if (done_value)
|
| - return true;
|
| -
|
| - base::PlatformThread::Sleep(kDelay);
|
| - }
|
| -
|
| - ADD_FAILURE() << "Timeout reached in WaitUntilJavaScriptCondition";
|
| - return false;
|
| -}
|
| -
|
| -bool UITest::WaitUntilCookieValue(TabProxy* tab,
|
| - const GURL& url,
|
| - const char* cookie_name,
|
| - base::TimeDelta timeout,
|
| - const char* expected_value) {
|
| - const TimeDelta kDelay = TimeDelta::FromMilliseconds(250);
|
| - const int kMaxDelays = timeout / kDelay;
|
| -
|
| - std::string cookie_value;
|
| - for (int i = 0; i < kMaxDelays; ++i) {
|
| - EXPECT_TRUE(tab->GetCookieByName(url, cookie_name, &cookie_value));
|
| - if (cookie_value == expected_value)
|
| - return true;
|
| -
|
| - base::PlatformThread::Sleep(kDelay);
|
| - }
|
| -
|
| - ADD_FAILURE() << "Timeout reached in WaitUntilCookieValue";
|
| - return false;
|
| -}
|
| -
|
| -std::string UITest::WaitUntilCookieNonEmpty(TabProxy* tab,
|
| - const GURL& url,
|
| - const char* cookie_name,
|
| - base::TimeDelta timeout) {
|
| - const TimeDelta kDelay = TimeDelta::FromMilliseconds(250);
|
| - const int kMaxDelays = timeout / kDelay;
|
| -
|
| - for (int i = 0; i < kMaxDelays; ++i) {
|
| - std::string cookie_value;
|
| - EXPECT_TRUE(tab->GetCookieByName(url, cookie_name, &cookie_value));
|
| - if (!cookie_value.empty())
|
| - return cookie_value;
|
| -
|
| - base::PlatformThread::Sleep(kDelay);
|
| - }
|
| -
|
| - ADD_FAILURE() << "Timeout reached in WaitUntilCookieNonEmpty";
|
| - return std::string();
|
| -}
|
| -
|
| -bool UITest::WaitForFindWindowVisibilityChange(BrowserProxy* browser,
|
| - bool wait_for_open) {
|
| - const int kCycles = 10;
|
| - const TimeDelta kDelay = TestTimeouts::action_timeout() / kCycles;
|
| - for (int i = 0; i < kCycles; i++) {
|
| - bool visible = false;
|
| - if (!browser->IsFindWindowFullyVisible(&visible))
|
| - return false; // Some error.
|
| - if (visible == wait_for_open)
|
| - return true; // Find window visibility change complete.
|
| -
|
| - // Give it a chance to catch up.
|
| - base::PlatformThread::Sleep(kDelay);
|
| - }
|
| -
|
| - ADD_FAILURE() << "Timeout reached in WaitForFindWindowVisibilityChange";
|
| - return false;
|
| -}
|
| -
|
| -void UITest::TerminateBrowser() {
|
| - launcher_->TerminateBrowser();
|
| -
|
| - // Make sure the UMA metrics say we didn't crash.
|
| - scoped_ptr<base::DictionaryValue> local_prefs(GetLocalState());
|
| - bool exited_cleanly;
|
| - ASSERT_TRUE(local_prefs.get());
|
| - ASSERT_TRUE(local_prefs->GetBoolean(prefs::kStabilityExitedCleanly,
|
| - &exited_cleanly));
|
| - ASSERT_TRUE(exited_cleanly);
|
| -
|
| - // And that session end was successful.
|
| - bool session_end_completed;
|
| - ASSERT_TRUE(local_prefs->GetBoolean(prefs::kStabilitySessionEndCompleted,
|
| - &session_end_completed));
|
| - ASSERT_TRUE(session_end_completed);
|
| -
|
| - // Make sure session restore says we didn't crash.
|
| - scoped_ptr<base::DictionaryValue> profile_prefs(
|
| - GetDefaultProfilePreferences());
|
| - ASSERT_TRUE(profile_prefs.get());
|
| - std::string exit_type;
|
| - ASSERT_TRUE(profile_prefs->GetString(prefs::kSessionExitedCleanly,
|
| - &exit_type));
|
| - EXPECT_EQ(ProfileImpl::kPrefExitTypeNormal, exit_type);
|
| -}
|
|
|