multiple_client_typed_urls_sync_test.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file.
423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/i18n/number_formatting.h"
623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/memory/scoped_vector.h"
723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/strings/utf_string_conversions.h"
823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/history/history_types.h"
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/sessions/session_service.h"
1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/sync/profile_sync_service_harness.h"
1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/sync/test/integration/sync_test.h"
1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/sync/test/integration/typed_urls_helper.h"
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)using typed_urls_helper::AddUrlToHistory;
15a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochusing typed_urls_helper::AssertAllProfilesHaveSameURLsAsVerifier;
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)using typed_urls_helper::GetTypedUrlsFromClient;
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class MultipleClientTypedUrlsSyncTest : public SyncTest {
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public:
2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  MultipleClientTypedUrlsSyncTest() : SyncTest(MULTIPLE_CLIENT) {}
2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual ~MultipleClientTypedUrlsSyncTest() {}
2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) private:
2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MultipleClientTypedUrlsSyncTest);
2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)};
260de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)
270de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)// TCM: 3728323
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MultipleClientTypedUrlsSyncTest, AddToOne) {
2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  const base::string16 kHistoryUrl(
3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      ASCIIToUTF16("http://www.add-one-history.google.com/"));
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Populate one client with a URL, should sync to all others.
3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  GURL new_url(kHistoryUrl);
3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  AddUrlToHistory(0, new_url);
3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  history::URLRows urls = GetTypedUrlsFromClient(0);
3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ASSERT_EQ(1U, urls.size());
380de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)  ASSERT_EQ(new_url, urls[0].url());
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Let sync finish.
410de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitGroupSyncCycleCompletion(clients()));
420de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // All clients should have this URL.
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  AssertAllProfilesHaveSameURLsAsVerifier();
4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MultipleClientTypedUrlsSyncTest, AddToAll) {
4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  const base::string16 kHistoryUrl(
4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      ASCIIToUTF16("http://www.add-all-history.google.com/"));
50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Populate clients with the same URL.
5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  for (int i = 0; i < num_clients(); ++i) {
5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    history::URLRows urls = GetTypedUrlsFromClient(i);
5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_EQ(0U, urls.size());
5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    base::string16 unique_url = kHistoryUrl + base::FormatNumber(i);
5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    GURL new_url(unique_url);
5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    AddUrlToHistory(i, new_url);
6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    urls = GetTypedUrlsFromClient(i);
6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_EQ(1U, urls.size());
6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ASSERT_EQ(new_url, urls[0].url());
6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
6623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Wait for sync.
6723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Verify that all clients have all urls.
7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  AssertAllProfilesHaveSameURLsAsVerifier();
7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
7223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)