| Index: chrome/browser/sync/test/live_sync/live_sync_test.cc
|
| diff --git a/chrome/browser/sync/test/live_sync/live_sync_test.cc b/chrome/browser/sync/test/live_sync/live_sync_test.cc
|
| deleted file mode 100644
|
| index d47f34e4a0ade8726ea6107067f483f604a4a3ff..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/sync/test/live_sync/live_sync_test.cc
|
| +++ /dev/null
|
| @@ -1,632 +0,0 @@
|
| -// Copyright (c) 2011 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/browser/sync/test/live_sync/live_sync_test.h"
|
| -
|
| -#include <vector>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/command_line.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/path_service.h"
|
| -#include "base/stringprintf.h"
|
| -#include "base/string_util.h"
|
| -#include "base/synchronization/waitable_event.h"
|
| -#include "base/task.h"
|
| -#include "base/test/test_timeouts.h"
|
| -#include "base/threading/platform_thread.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "base/values.h"
|
| -#include "chrome/browser/password_manager/encryptor.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/profiles/profile_manager.h"
|
| -#include "chrome/browser/sync/notifier/p2p_notifier.h"
|
| -#include "chrome/browser/sync/profile_sync_service_harness.h"
|
| -#include "chrome/browser/sync/test/live_sync/sync_datatype_helper.h"
|
| -#include "chrome/browser/ui/browser.h"
|
| -#include "chrome/browser/ui/browser_list.h"
|
| -#include "chrome/common/chrome_paths.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "chrome/test/base/testing_browser_process.h"
|
| -#include "chrome/test/base/ui_test_utils.h"
|
| -#include "content/browser/browser_thread.h"
|
| -#include "content/browser/tab_contents/tab_contents.h"
|
| -#include "content/common/url_fetcher.h"
|
| -#include "content/test/test_url_fetcher_factory.h"
|
| -#include "googleurl/src/gurl.h"
|
| -#include "net/base/escape.h"
|
| -#include "net/base/network_change_notifier.h"
|
| -#include "net/proxy/proxy_config.h"
|
| -#include "net/proxy/proxy_config_service_fixed.h"
|
| -#include "net/proxy/proxy_service.h"
|
| -#include "net/test/test_server.h"
|
| -#include "net/url_request/url_request_context.h"
|
| -#include "net/url_request/url_request_context_getter.h"
|
| -#include "net/url_request/url_request_status.h"
|
| -
|
| -namespace switches {
|
| -const char kPasswordFileForTest[] = "password-file-for-test";
|
| -const char kSyncUserForTest[] = "sync-user-for-test";
|
| -const char kSyncPasswordForTest[] = "sync-password-for-test";
|
| -const char kSyncServerCommandLine[] = "sync-server-command-line";
|
| -}
|
| -
|
| -namespace {
|
| -// The URLs for different calls in the Google Accounts programmatic login API.
|
| -const char kClientLoginUrl[] = "https://www.google.com/accounts/ClientLogin";
|
| -const char kGetUserInfoUrl[] = "https://www.google.com/accounts/GetUserInfo";
|
| -const char kIssueAuthTokenUrl[] =
|
| - "https://www.google.com/accounts/IssueAuthToken";
|
| -const char kSearchDomainCheckUrl[] =
|
| - "https://www.google.com/searchdomaincheck?format=domain&type=chrome";
|
| -}
|
| -
|
| -// Helper class that checks whether a sync test server is running or not.
|
| -class SyncServerStatusChecker : public URLFetcher::Delegate {
|
| - public:
|
| - SyncServerStatusChecker() : running_(false) {}
|
| -
|
| - virtual void OnURLFetchComplete(const URLFetcher* source,
|
| - const GURL& url,
|
| - const net::URLRequestStatus& status,
|
| - int response_code,
|
| - const net::ResponseCookies& cookies,
|
| - const std::string& data) {
|
| - running_ = (status.status() == net::URLRequestStatus::SUCCESS &&
|
| - response_code == 200 && data.find("ok") == 0);
|
| - MessageLoop::current()->Quit();
|
| - }
|
| -
|
| - bool running() const { return running_; }
|
| -
|
| - private:
|
| - bool running_;
|
| -};
|
| -
|
| -class SetProxyConfigTask : public Task {
|
| - public:
|
| - SetProxyConfigTask(base::WaitableEvent* done,
|
| - net::URLRequestContextGetter* url_request_context_getter,
|
| - const net::ProxyConfig& proxy_config)
|
| - : done_(done),
|
| - url_request_context_getter_(url_request_context_getter),
|
| - proxy_config_(proxy_config) {
|
| - }
|
| -
|
| - void Run() {
|
| - net::ProxyService* proxy_service =
|
| - url_request_context_getter_->GetURLRequestContext()->proxy_service();
|
| - proxy_service->ResetConfigService(
|
| - new net::ProxyConfigServiceFixed(proxy_config_));
|
| - done_->Signal();
|
| - }
|
| -
|
| - private:
|
| - base::WaitableEvent* done_;
|
| - net::URLRequestContextGetter* url_request_context_getter_;
|
| - net::ProxyConfig proxy_config_;
|
| -};
|
| -
|
| -LiveSyncTest::LiveSyncTest(TestType test_type)
|
| - : sync_server_(net::TestServer::TYPE_SYNC, FilePath()),
|
| - test_type_(test_type),
|
| - server_type_(SERVER_TYPE_UNDECIDED),
|
| - num_clients_(-1),
|
| - use_verifier_(true),
|
| - test_server_handle_(base::kNullProcessHandle) {
|
| - InProcessBrowserTest::set_show_window(true);
|
| - sync_datatype_helper::AssociateWithTest(this);
|
| - switch (test_type_) {
|
| - case SINGLE_CLIENT: {
|
| - num_clients_ = 1;
|
| - break;
|
| - }
|
| - case TWO_CLIENT: {
|
| - num_clients_ = 2;
|
| - break;
|
| - }
|
| - case MULTIPLE_CLIENT: {
|
| - num_clients_ = 3;
|
| - break;
|
| - }
|
| - case MANY_CLIENT: {
|
| - num_clients_ = 10;
|
| - break;
|
| - }
|
| - }
|
| -}
|
| -
|
| -LiveSyncTest::~LiveSyncTest() {}
|
| -
|
| -void LiveSyncTest::SetUp() {
|
| - CommandLine* cl = CommandLine::ForCurrentProcess();
|
| - if (cl->HasSwitch(switches::kPasswordFileForTest)) {
|
| - ReadPasswordFile();
|
| - } else if (cl->HasSwitch(switches::kSyncUserForTest) &&
|
| - cl->HasSwitch(switches::kSyncPasswordForTest)) {
|
| - username_ = cl->GetSwitchValueASCII(switches::kSyncUserForTest);
|
| - password_ = cl->GetSwitchValueASCII(switches::kSyncPasswordForTest);
|
| - } else {
|
| - SetupMockGaiaResponses();
|
| - }
|
| -
|
| - if (!cl->HasSwitch(switches::kSyncServiceURL) &&
|
| - !cl->HasSwitch(switches::kSyncServerCommandLine)) {
|
| - // If neither a sync server URL nor a sync server command line is
|
| - // provided, start up a local python sync test server and point Chrome
|
| - // to its URL. This is the most common configuration, and the only
|
| - // one that makes sense for most developers.
|
| - server_type_ = LOCAL_PYTHON_SERVER;
|
| - } else if (cl->HasSwitch(switches::kSyncServiceURL) &&
|
| - cl->HasSwitch(switches::kSyncServerCommandLine)) {
|
| - // If a sync server URL and a sync server command line are provided,
|
| - // start up a local sync server by running the command line. Chrome
|
| - // will connect to the server at the URL that was provided.
|
| - server_type_ = LOCAL_LIVE_SERVER;
|
| - } else if (cl->HasSwitch(switches::kSyncServiceURL) &&
|
| - !cl->HasSwitch(switches::kSyncServerCommandLine)) {
|
| - // If a sync server URL is provided, but not a server command line,
|
| - // it is assumed that the server is already running. Chrome will
|
| - // automatically connect to it at the URL provided. There is nothing
|
| - // to do here.
|
| - server_type_ = EXTERNAL_LIVE_SERVER;
|
| - } else {
|
| - // If a sync server command line is provided, but not a server URL,
|
| - // we flag an error.
|
| - LOG(FATAL) << "Can't figure out how to run a server.";
|
| - }
|
| -
|
| - if (username_.empty() || password_.empty())
|
| - LOG(FATAL) << "Cannot run sync tests without GAIA credentials.";
|
| -
|
| - // Mock the Mac Keychain service. The real Keychain can block on user input.
|
| -#if defined(OS_MACOSX)
|
| - Encryptor::UseMockKeychain(true);
|
| -#endif
|
| -
|
| - // Yield control back to the InProcessBrowserTest framework.
|
| - InProcessBrowserTest::SetUp();
|
| -}
|
| -
|
| -void LiveSyncTest::TearDown() {
|
| - // Allow the InProcessBrowserTest framework to perform its tear down.
|
| - InProcessBrowserTest::TearDown();
|
| -
|
| - // Stop the local python test server. This is a no-op if one wasn't started.
|
| - TearDownLocalPythonTestServer();
|
| -
|
| - // Stop the local sync test server. This is a no-op if one wasn't started.
|
| - TearDownLocalTestServer();
|
| -}
|
| -
|
| -void LiveSyncTest::SetUpCommandLine(CommandLine* cl) {
|
| - AddTestSwitches(cl);
|
| - AddOptionalTypesToCommandLine(cl);
|
| -}
|
| -
|
| -void LiveSyncTest::AddTestSwitches(CommandLine* cl) {
|
| - // TODO(rsimha): Until we implement a fake Tango server against which tests
|
| - // can run, we need to set the --sync-notification-method to "p2p".
|
| - if (!cl->HasSwitch(switches::kSyncNotificationMethod))
|
| - cl->AppendSwitchASCII(switches::kSyncNotificationMethod, "p2p");
|
| -
|
| - // Disable non-essential access of external network resources.
|
| - if (!cl->HasSwitch(switches::kDisableBackgroundNetworking))
|
| - cl->AppendSwitch(switches::kDisableBackgroundNetworking);
|
| -}
|
| -
|
| -void LiveSyncTest::AddOptionalTypesToCommandLine(CommandLine* cl) {
|
| - // TODO(sync): Remove this once sessions sync is enabled by default.
|
| - if (!cl->HasSwitch(switches::kEnableSyncSessions))
|
| - cl->AppendSwitch(switches::kEnableSyncSessions);
|
| -}
|
| -
|
| -// static
|
| -Profile* LiveSyncTest::MakeProfile(const FilePath::StringType name) {
|
| - FilePath path;
|
| - PathService::Get(chrome::DIR_USER_DATA, &path);
|
| - path = path.Append(name);
|
| -
|
| - if (!file_util::PathExists(path))
|
| - CHECK(file_util::CreateDirectory(path));
|
| -
|
| - return Profile::CreateProfile(path);
|
| -}
|
| -
|
| -Profile* LiveSyncTest::GetProfile(int index) {
|
| - if (profiles_.empty())
|
| - LOG(FATAL) << "SetupClients() has not yet been called.";
|
| - if (index < 0 || index >= static_cast<int>(profiles_.size()))
|
| - LOG(FATAL) << "GetProfile(): Index is out of bounds.";
|
| - return profiles_[index];
|
| -}
|
| -
|
| -Browser* LiveSyncTest::GetBrowser(int index) {
|
| - if (browsers_.empty())
|
| - LOG(FATAL) << "SetupClients() has not yet been called.";
|
| - if (index < 0 || index >= static_cast<int>(browsers_.size()))
|
| - LOG(FATAL) << "GetBrowser(): Index is out of bounds.";
|
| - return browsers_[index];
|
| -}
|
| -
|
| -ProfileSyncServiceHarness* LiveSyncTest::GetClient(int index) {
|
| - if (clients_.empty())
|
| - LOG(FATAL) << "SetupClients() has not yet been called.";
|
| - if (index < 0 || index >= static_cast<int>(clients_.size()))
|
| - LOG(FATAL) << "GetClient(): Index is out of bounds.";
|
| - return clients_[index];
|
| -}
|
| -
|
| -Profile* LiveSyncTest::verifier() {
|
| - if (verifier_.get() == NULL)
|
| - LOG(FATAL) << "SetupClients() has not yet been called.";
|
| - return verifier_.get();
|
| -}
|
| -
|
| -void LiveSyncTest::DisableVerifier() {
|
| - use_verifier_ = false;
|
| -}
|
| -
|
| -bool LiveSyncTest::SetupClients() {
|
| - if (num_clients_ <= 0)
|
| - LOG(FATAL) << "num_clients_ incorrectly initialized.";
|
| - if (!profiles_.empty() || !browsers_.empty() || !clients_.empty())
|
| - LOG(FATAL) << "SetupClients() has already been called.";
|
| -
|
| - // Start up a sync test server if one is needed.
|
| - SetUpTestServerIfRequired();
|
| -
|
| - // Create the required number of sync profiles, browsers and clients.
|
| - for (int i = 0; i < num_clients_; ++i) {
|
| - profiles_.push_back(MakeProfile(
|
| - base::StringPrintf(FILE_PATH_LITERAL("Profile%d"), i)));
|
| - EXPECT_FALSE(GetProfile(i) == NULL) << "GetProfile(" << i << ") failed.";
|
| -
|
| - browsers_.push_back(Browser::Create(GetProfile(i)));
|
| - EXPECT_FALSE(GetBrowser(i) == NULL) << "GetBrowser(" << i << ") failed.";
|
| -
|
| - clients_.push_back(
|
| - new ProfileSyncServiceHarness(GetProfile(i), username_, password_));
|
| - EXPECT_FALSE(GetClient(i) == NULL) << "GetClient(" << i << ") failed.";
|
| -
|
| - ui_test_utils::WaitForBookmarkModelToLoad(
|
| - GetProfile(i)->GetBookmarkModel());
|
| - }
|
| -
|
| - // Create the verifier profile.
|
| - verifier_.reset(MakeProfile(FILE_PATH_LITERAL("Verifier")));
|
| - ui_test_utils::WaitForBookmarkModelToLoad(verifier()->GetBookmarkModel());
|
| - return (verifier_.get() != NULL);
|
| -}
|
| -
|
| -bool LiveSyncTest::SetupSync() {
|
| - // Create sync profiles and clients if they haven't already been created.
|
| - if (profiles_.empty()) {
|
| - if (!SetupClients())
|
| - LOG(FATAL) << "SetupClients() failed.";
|
| - }
|
| -
|
| - // Sync each of the profiles.
|
| - for (int i = 0; i < num_clients_; ++i) {
|
| - if (!GetClient(i)->SetupSync())
|
| - LOG(FATAL) << "SetupSync() failed.";
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -void LiveSyncTest::CleanUpOnMainThread() {
|
| - // Close all browser windows.
|
| - BrowserList::CloseAllBrowsers();
|
| - ui_test_utils::RunAllPendingInMessageLoop();
|
| -
|
| - // All browsers should be closed at this point, or else we could see memory
|
| - // corruption in QuitBrowser().
|
| - CHECK_EQ(0U, BrowserList::size());
|
| -
|
| - profiles_.reset();
|
| - clients_.reset();
|
| - verifier_.reset(NULL);
|
| -}
|
| -
|
| -void LiveSyncTest::SetUpInProcessBrowserTestFixture() {
|
| - // We don't take a reference to |resolver|, but mock_host_resolver_override_
|
| - // does, so effectively assumes ownership.
|
| - net::RuleBasedHostResolverProc* resolver =
|
| - new net::RuleBasedHostResolverProc(host_resolver());
|
| - resolver->AllowDirectLookup("*.google.com");
|
| - // On Linux, we use Chromium's NSS implementation which uses the following
|
| - // hosts for certificate verification. Without these overrides, running the
|
| - // integration tests on Linux causes error as we make external DNS lookups.
|
| - resolver->AllowDirectLookup("*.thawte.com");
|
| - resolver->AllowDirectLookup("*.geotrust.com");
|
| - resolver->AllowDirectLookup("*.gstatic.com");
|
| - mock_host_resolver_override_.reset(
|
| - new net::ScopedDefaultHostResolverProc(resolver));
|
| -}
|
| -
|
| -void LiveSyncTest::TearDownInProcessBrowserTestFixture() {
|
| - mock_host_resolver_override_.reset();
|
| -}
|
| -
|
| -void LiveSyncTest::ReadPasswordFile() {
|
| - CommandLine* cl = CommandLine::ForCurrentProcess();
|
| - password_file_ = cl->GetSwitchValuePath(switches::kPasswordFileForTest);
|
| - if (password_file_.empty())
|
| - LOG(FATAL) << "Can't run live server test without specifying --"
|
| - << switches::kPasswordFileForTest << "=<filename>";
|
| - std::string file_contents;
|
| - file_util::ReadFileToString(password_file_, &file_contents);
|
| - ASSERT_NE(file_contents, "") << "Password file \""
|
| - << password_file_.value() << "\" does not exist.";
|
| - std::vector<std::string> tokens;
|
| - std::string delimiters = "\r\n";
|
| - Tokenize(file_contents, delimiters, &tokens);
|
| - ASSERT_EQ(2U, tokens.size()) << "Password file \""
|
| - << password_file_.value()
|
| - << "\" must contain exactly two lines of text.";
|
| - username_ = tokens[0];
|
| - password_ = tokens[1];
|
| -}
|
| -
|
| -void LiveSyncTest::SetupMockGaiaResponses() {
|
| - username_ = "user@gmail.com";
|
| - password_ = "password";
|
| - factory_.reset(new URLFetcherFactory());
|
| - fake_factory_.reset(new FakeURLFetcherFactory(factory_.get()));
|
| - fake_factory_->SetFakeResponse(kClientLoginUrl, "SID=sid\nLSID=lsid", true);
|
| - fake_factory_->SetFakeResponse(kGetUserInfoUrl, "email=user@gmail.com", true);
|
| - fake_factory_->SetFakeResponse(kIssueAuthTokenUrl, "auth", true);
|
| - fake_factory_->SetFakeResponse(kSearchDomainCheckUrl, ".google.com", true);
|
| -}
|
| -
|
| -// Start up a local sync server based on the value of server_type_, which
|
| -// was determined from the command line parameters.
|
| -void LiveSyncTest::SetUpTestServerIfRequired() {
|
| - if (server_type_ == LOCAL_PYTHON_SERVER) {
|
| - if (!SetUpLocalPythonTestServer())
|
| - LOG(FATAL) << "Failed to set up local python sync and XMPP servers";
|
| - } else if (server_type_ == LOCAL_LIVE_SERVER) {
|
| - // Using mock gaia credentials requires the use of a mock XMPP server.
|
| - if (username_ == "user@gmail.com" && !SetUpLocalPythonTestServer())
|
| - LOG(FATAL) << "Failed to set up local python XMPP server";
|
| - if (!SetUpLocalTestServer())
|
| - LOG(FATAL) << "Failed to set up local test server";
|
| - } else if (server_type_ == EXTERNAL_LIVE_SERVER) {
|
| - // Nothing to do; we'll just talk to the URL we were given.
|
| - } else {
|
| - LOG(FATAL) << "Don't know which server environment to run test in.";
|
| - }
|
| -}
|
| -
|
| -bool LiveSyncTest::SetUpLocalPythonTestServer() {
|
| - EXPECT_TRUE(sync_server_.Start())
|
| - << "Could not launch local python test server.";
|
| -
|
| - CommandLine* cl = CommandLine::ForCurrentProcess();
|
| - if (server_type_ == LOCAL_PYTHON_SERVER) {
|
| - std::string sync_service_url = sync_server_.GetURL("chromiumsync").spec();
|
| - cl->AppendSwitchASCII(switches::kSyncServiceURL, sync_service_url);
|
| - VLOG(1) << "Started local python sync server at " << sync_service_url;
|
| - }
|
| -
|
| - int xmpp_port = 0;
|
| - if (!sync_server_.server_data().GetInteger("xmpp_port", &xmpp_port)) {
|
| - LOG(ERROR) << "Could not find valid xmpp_port value";
|
| - return false;
|
| - }
|
| - if ((xmpp_port <= 0) || (xmpp_port > kuint16max)) {
|
| - LOG(ERROR) << "Invalid xmpp port: " << xmpp_port;
|
| - return false;
|
| - }
|
| -
|
| - net::HostPortPair xmpp_host_port_pair(sync_server_.host_port_pair());
|
| - xmpp_host_port_pair.set_port(xmpp_port);
|
| - xmpp_port_.reset(new net::ScopedPortException(xmpp_port));
|
| -
|
| - if (!cl->HasSwitch(switches::kSyncNotificationHost)) {
|
| - cl->AppendSwitchASCII(switches::kSyncNotificationHost,
|
| - xmpp_host_port_pair.ToString());
|
| - // The local XMPP server only supports insecure connections.
|
| - cl->AppendSwitch(switches::kSyncAllowInsecureXmppConnection);
|
| - }
|
| - VLOG(1) << "Started local python XMPP server at "
|
| - << xmpp_host_port_pair.ToString();
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool LiveSyncTest::SetUpLocalTestServer() {
|
| - CommandLine* cl = CommandLine::ForCurrentProcess();
|
| - CommandLine::StringType server_cmdline_string = cl->GetSwitchValueNative(
|
| - switches::kSyncServerCommandLine);
|
| - CommandLine::StringVector server_cmdline_vector;
|
| - CommandLine::StringType delimiters(FILE_PATH_LITERAL(" "));
|
| - Tokenize(server_cmdline_string, delimiters, &server_cmdline_vector);
|
| - CommandLine server_cmdline(server_cmdline_vector);
|
| - base::LaunchOptions options;
|
| -#if defined(OS_WIN)
|
| - options.start_hidden = true;
|
| -#endif
|
| - if (!base::LaunchProcess(server_cmdline, options, &test_server_handle_))
|
| - LOG(ERROR) << "Could not launch local test server.";
|
| -
|
| - const int kMaxWaitTime = TestTimeouts::action_max_timeout_ms();
|
| - const int kNumIntervals = 15;
|
| - if (WaitForTestServerToStart(kMaxWaitTime, kNumIntervals)) {
|
| - VLOG(1) << "Started local test server at "
|
| - << cl->GetSwitchValueASCII(switches::kSyncServiceURL) << ".";
|
| - return true;
|
| - } else {
|
| - LOG(ERROR) << "Could not start local test server at "
|
| - << cl->GetSwitchValueASCII(switches::kSyncServiceURL) << ".";
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -bool LiveSyncTest::TearDownLocalPythonTestServer() {
|
| - if (!sync_server_.Stop()) {
|
| - LOG(ERROR) << "Could not stop local python test server.";
|
| - return false;
|
| - }
|
| - xmpp_port_.reset();
|
| - return true;
|
| -}
|
| -
|
| -bool LiveSyncTest::TearDownLocalTestServer() {
|
| - if (test_server_handle_ != base::kNullProcessHandle) {
|
| - EXPECT_TRUE(base::KillProcess(test_server_handle_, 0, false))
|
| - << "Could not stop local test server.";
|
| - base::CloseProcessHandle(test_server_handle_);
|
| - test_server_handle_ = base::kNullProcessHandle;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool LiveSyncTest::WaitForTestServerToStart(int time_ms, int intervals) {
|
| - for (int i = 0; i < intervals; ++i) {
|
| - if (IsTestServerRunning())
|
| - return true;
|
| - base::PlatformThread::Sleep(time_ms / intervals);
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -bool LiveSyncTest::IsTestServerRunning() {
|
| - CommandLine* cl = CommandLine::ForCurrentProcess();
|
| - std::string sync_url = cl->GetSwitchValueASCII(switches::kSyncServiceURL);
|
| - GURL sync_url_status(sync_url.append("/healthz"));
|
| - SyncServerStatusChecker delegate;
|
| - URLFetcher fetcher(sync_url_status, URLFetcher::GET, &delegate);
|
| - fetcher.set_request_context(Profile::Deprecated::GetDefaultRequestContext());
|
| - fetcher.Start();
|
| - ui_test_utils::RunMessageLoop();
|
| - return delegate.running();
|
| -}
|
| -
|
| -void LiveSyncTest::EnableNetwork(Profile* profile) {
|
| - SetProxyConfig(profile->GetRequestContext(),
|
| - net::ProxyConfig::CreateDirect());
|
| - // TODO(rsimha): Remove this line once http://crbug.com/53857 is fixed.
|
| - net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
|
| -}
|
| -
|
| -void LiveSyncTest::DisableNetwork(Profile* profile) {
|
| - // Set the current proxy configuration to a nonexistent proxy to effectively
|
| - // disable networking.
|
| - net::ProxyConfig config;
|
| - config.proxy_rules().ParseFromString("http=127.0.0.1:0");
|
| - SetProxyConfig(profile->GetRequestContext(), config);
|
| - // TODO(rsimha): Remove this line once http://crbug.com/53857 is fixed.
|
| - net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
|
| -}
|
| -
|
| -bool LiveSyncTest::EnableEncryption(int index, syncable::ModelType type) {
|
| - return GetClient(index)->EnableEncryptionForType(type);
|
| -}
|
| -
|
| -bool LiveSyncTest::IsEncrypted(int index, syncable::ModelType type) {
|
| - return GetClient(index)->IsTypeEncrypted(type);
|
| -}
|
| -
|
| -bool LiveSyncTest::AwaitQuiescence() {
|
| - return ProfileSyncServiceHarness::AwaitQuiescence(clients());
|
| -}
|
| -
|
| -bool LiveSyncTest::ServerSupportsNotificationControl() const {
|
| - EXPECT_NE(SERVER_TYPE_UNDECIDED, server_type_);
|
| -
|
| - // Supported only if we're using the python testserver.
|
| - return server_type_ == LOCAL_PYTHON_SERVER;
|
| -}
|
| -
|
| -void LiveSyncTest::DisableNotifications() {
|
| - ASSERT_TRUE(ServerSupportsNotificationControl());
|
| - std::string path = "chromiumsync/disablenotifications";
|
| - ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
|
| - ASSERT_EQ("Notifications disabled",
|
| - UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
|
| -}
|
| -
|
| -void LiveSyncTest::EnableNotifications() {
|
| - ASSERT_TRUE(ServerSupportsNotificationControl());
|
| - std::string path = "chromiumsync/enablenotifications";
|
| - ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
|
| - ASSERT_EQ("Notifications enabled",
|
| - UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
|
| -}
|
| -
|
| -void LiveSyncTest::TriggerNotification(
|
| - const syncable::ModelTypeSet& changed_types) {
|
| - ASSERT_TRUE(ServerSupportsNotificationControl());
|
| - const std::string& data =
|
| - sync_notifier::P2PNotificationData("from_server",
|
| - sync_notifier::NOTIFY_ALL,
|
| - changed_types).ToString();
|
| - const std::string& path =
|
| - std::string("chromiumsync/sendnotification?channel=") +
|
| - sync_notifier::kSyncP2PNotificationChannel + "&data=" + data;
|
| - ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
|
| - ASSERT_EQ("Notification sent",
|
| - UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
|
| -}
|
| -
|
| -bool LiveSyncTest::ServerSupportsErrorTriggering() const {
|
| - EXPECT_NE(SERVER_TYPE_UNDECIDED, server_type_);
|
| -
|
| - // Supported only if we're using the python testserver.
|
| - return server_type_ == LOCAL_PYTHON_SERVER;
|
| -}
|
| -
|
| -void LiveSyncTest::TriggerMigrationDoneError(
|
| - const syncable::ModelTypeSet& model_types) {
|
| - ASSERT_TRUE(ServerSupportsErrorTriggering());
|
| - std::string path = "chromiumsync/migrate";
|
| - char joiner = '?';
|
| - for (syncable::ModelTypeSet::const_iterator it = model_types.begin();
|
| - it != model_types.end(); ++it) {
|
| - path.append(base::StringPrintf("%ctype=%d", joiner,
|
| - syncable::GetExtensionFieldNumberFromModelType(*it)));
|
| - joiner = '&';
|
| - }
|
| - ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
|
| - ASSERT_EQ("Migration: 200",
|
| - UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
|
| -}
|
| -
|
| -void LiveSyncTest::TriggerBirthdayError() {
|
| - ASSERT_TRUE(ServerSupportsErrorTriggering());
|
| - std::string path = "chromiumsync/birthdayerror";
|
| - ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
|
| - ASSERT_EQ("Birthday error",
|
| - UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
|
| -}
|
| -
|
| -void LiveSyncTest::TriggerTransientError() {
|
| - ASSERT_TRUE(ServerSupportsErrorTriggering());
|
| - std::string path = "chromiumsync/transienterror";
|
| - ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
|
| - ASSERT_EQ("Transient error",
|
| - UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
|
| -}
|
| -
|
| -void LiveSyncTest::TriggerSetSyncTabs() {
|
| - ASSERT_TRUE(ServerSupportsErrorTriggering());
|
| - std::string path = "chromiumsync/synctabs";
|
| - ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path));
|
| - ASSERT_EQ("Sync Tabs",
|
| - UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle()));
|
| -}
|
| -
|
| -void LiveSyncTest::SetProxyConfig(net::URLRequestContextGetter* context_getter,
|
| - const net::ProxyConfig& proxy_config) {
|
| - base::WaitableEvent done(false, false);
|
| - BrowserThread::PostTask(
|
| - BrowserThread::IO,
|
| - FROM_HERE,
|
| - new SetProxyConfigTask(&done,
|
| - context_getter,
|
| - proxy_config));
|
| - done.Wait();
|
| -}
|
|
|