enable_disable_test.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Copyright (c) 2012 The Chromium Authors. All rights reserved.
230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Use of this source code is governed by a BSD-style license that can be
330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// found in the LICENSE file.
430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "chrome/browser/sync/profile_sync_service.h"
630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "chrome/browser/sync/test/integration/sync_test.h"
830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sync/internal_api/public/base/model_type.h"
930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sync/internal_api/public/read_node.h"
1030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sync/internal_api/public/read_transaction.h"
1130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
1230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// This file contains tests that exercise enabling and disabling data
1330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// types.
1430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
1530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace {
1630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
1730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunclass EnableDisableSingleClientTest : public SyncTest {
1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public:
1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  EnableDisableSingleClientTest() : SyncTest(SINGLE_CLIENT) {}
2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  virtual ~EnableDisableSingleClientTest() {}
2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  // Don't use self-notifications as they can trigger additional sync cycles.
2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  virtual bool TestUsesSelfNotifications() OVERRIDE { return false; }
2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun private:
2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  DISALLOW_COPY_AND_ASSIGN(EnableDisableSingleClientTest);
2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun};
2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool DoesTopLevelNodeExist(syncer::UserShare* user_share,
2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                           syncer::ModelType type) {
3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    syncer::ReadTransaction trans(FROM_HERE, user_share);
3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    syncer::ReadNode node(&trans);
3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    return node.InitTypeRoot(type) == syncer::BaseNode::INIT_OK;
3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunIN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, EnableOneAtATime) {
3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  ASSERT_TRUE(SetupClients());
3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  // Setup sync with no enabled types.
3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  ASSERT_TRUE(GetClient(0)->SetupSync(syncer::ModelTypeSet()));
4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  const syncer::ModelTypeSet registered_types =
4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      GetSyncService((0))->GetRegisteredDataTypes();
4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  syncer::UserShare* user_share = GetSyncService((0))->GetUserShare();
4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  for (syncer::ModelTypeSet::Iterator it = registered_types.First();
4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun       it.Good(); it.Inc()) {
4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    ASSERT_TRUE(GetClient(0)->EnableSyncForDatatype(it.Get()));
4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // AUTOFILL_PROFILE is lumped together with AUTOFILL.
4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // SESSIONS is lumped together with PROXY_TABS and
5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // HISTORY_DELETE_DIRECTIVES.
5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // Favicons are lumped together with PROXY_TABS and
5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // HISTORY_DELETE_DIRECTIVES.
5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    if (it.Get() == syncer::AUTOFILL_PROFILE || it.Get() == syncer::SESSIONS) {
5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      continue;
5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    }
5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    if (!syncer::ProxyTypes().Has(it.Get())) {
5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      ASSERT_TRUE(DoesTopLevelNodeExist(user_share, it.Get()))
5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun          << syncer::ModelTypeToString(it.Get());
6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    }
6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // AUTOFILL_PROFILE is lumped together with AUTOFILL.
6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    if (it.Get() == syncer::AUTOFILL) {
6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      ASSERT_TRUE(DoesTopLevelNodeExist(user_share,
6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                        syncer::AUTOFILL_PROFILE));
6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    } else if (it.Get() == syncer::HISTORY_DELETE_DIRECTIVES ||
6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun               it.Get() == syncer::PROXY_TABS) {
6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      ASSERT_TRUE(DoesTopLevelNodeExist(user_share,
6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                        syncer::SESSIONS));
7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    }
7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  }
7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunIN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, DisableOneAtATime) {
7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  ASSERT_TRUE(SetupClients());
7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  // Setup sync with no disabled types.
7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  ASSERT_TRUE(GetClient(0)->SetupSync());
7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  const syncer::ModelTypeSet registered_types =
8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      GetSyncService((0))->GetRegisteredDataTypes();
8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  syncer::UserShare* user_share = GetSyncService((0))->GetUserShare();
8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  // Make sure all top-level nodes exist first.
8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  for (syncer::ModelTypeSet::Iterator it = registered_types.First();
8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun       it.Good(); it.Inc()) {
8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    if (!syncer::ProxyTypes().Has(it.Get())) {
8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      ASSERT_TRUE(DoesTopLevelNodeExist(user_share, it.Get()));
9030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    }
9130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  }
9230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
9330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  for (syncer::ModelTypeSet::Iterator it = registered_types.First();
9430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun       it.Good(); it.Inc()) {
9530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // SUPERVISED_USERS and SUPERVISED_USER_SHARED_SETTINGS are always synced.
9630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    if (it.Get() == syncer::SUPERVISED_USERS ||
9730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun        it.Get() == syncer::SUPERVISED_USER_SHARED_SETTINGS ||
9830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun        it.Get() == syncer::SYNCED_NOTIFICATIONS ||
9930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun        it.Get() == syncer::SYNCED_NOTIFICATION_APP_INFO)
10030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      continue;
10130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
10230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    ASSERT_TRUE(GetClient(0)->DisableSyncForDatatype(it.Get()));
10330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
10430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // AUTOFILL_PROFILE is lumped together with AUTOFILL.
10530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // SESSIONS is lumped together with PROXY_TABS and TYPED_URLS.
10630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // HISTORY_DELETE_DIRECTIVES is lumped together with TYPED_URLS.
10730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // PRIORITY_PREFERENCES is lumped together with PREFERENCES.
10830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // Favicons are lumped together with PROXY_TABS and
10930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // HISTORY_DELETE_DIRECTIVES.
11030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    if (it.Get() == syncer::AUTOFILL_PROFILE ||
11130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun        it.Get() == syncer::SESSIONS ||
11230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun        it.Get() == syncer::HISTORY_DELETE_DIRECTIVES ||
11330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun        it.Get() == syncer::PRIORITY_PREFERENCES ||
11430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun        it.Get() == syncer::FAVICON_IMAGES ||
11530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun        it.Get() == syncer::FAVICON_TRACKING) {
11630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      continue;
11730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    }
11830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
11930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    syncer::UserShare* user_share =
12030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun        GetSyncService((0))->GetUserShare();
12130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
12230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    ASSERT_FALSE(DoesTopLevelNodeExist(user_share, it.Get()))
12330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun        << syncer::ModelTypeToString(it.Get());
12430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
12530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    if (it.Get() == syncer::AUTOFILL) {
12630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // AUTOFILL_PROFILE is lumped together with AUTOFILL.
12730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      ASSERT_FALSE(DoesTopLevelNodeExist(user_share, syncer::AUTOFILL_PROFILE));
12830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    } else if (it.Get() == syncer::TYPED_URLS) {
12930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      ASSERT_FALSE(DoesTopLevelNodeExist(user_share,
13030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                         syncer::HISTORY_DELETE_DIRECTIVES));
13130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // SESSIONS should be enabled only if PROXY_TABS is.
13230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      ASSERT_EQ(GetClient(0)->IsTypePreferred(syncer::PROXY_TABS),
13330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                DoesTopLevelNodeExist(user_share, syncer::SESSIONS));
13430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    } else if (it.Get() == syncer::PROXY_TABS) {
13530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // SESSIONS should be enabled only if TYPED_URLS is.
13630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      ASSERT_EQ(GetClient(0)->IsTypePreferred(syncer::TYPED_URLS),
13730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                DoesTopLevelNodeExist(user_share, syncer::SESSIONS));
13830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    } else if (it.Get() == syncer::PREFERENCES) {
13930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      ASSERT_FALSE(DoesTopLevelNodeExist(user_share,
14030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                         syncer::PRIORITY_PREFERENCES));
14130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    }
14230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  }
14330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
14430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
14530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}  // namespace
14630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun