1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/sync/profile_sync_service.h"
6 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
7 #include "chrome/browser/sync/test/integration/sync_test.h"
8 #include "sync/internal_api/public/base/model_type.h"
9 #include "sync/internal_api/public/read_node.h"
10 #include "sync/internal_api/public/read_transaction.h"
12 // This file contains tests that exercise enabling and disabling data
17 class EnableDisableSingleClientTest : public SyncTest {
19 // TODO(pvalenzuela): Switch to SINGLE_CLIENT once FakeServer
20 // supports this scenario.
21 EnableDisableSingleClientTest() : SyncTest(SINGLE_CLIENT_LEGACY) {}
22 virtual ~EnableDisableSingleClientTest() {}
24 DISALLOW_COPY_AND_ASSIGN(EnableDisableSingleClientTest);
27 bool DoesTopLevelNodeExist(syncer::UserShare* user_share,
28 syncer::ModelType type) {
29 syncer::ReadTransaction trans(FROM_HERE, user_share);
30 syncer::ReadNode node(&trans);
31 return node.InitByTagLookup(syncer::ModelTypeToRootTag(type)) ==
32 syncer::BaseNode::INIT_OK;
35 IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, EnableOneAtATime) {
36 ASSERT_TRUE(SetupClients());
38 // Setup sync with no enabled types.
39 ASSERT_TRUE(GetClient(0)->SetupSync(syncer::ModelTypeSet()));
41 // TODO(rlarocque, 97780): It should be possible to disable notifications
42 // before calling SetupSync(). We should move this line back to the top
43 // of this function when this is supported.
44 DisableNotifications();
46 const syncer::ModelTypeSet registered_types =
47 GetSyncService((0))->GetRegisteredDataTypes();
48 syncer::UserShare* user_share = GetSyncService((0))->GetUserShare();
49 for (syncer::ModelTypeSet::Iterator it = registered_types.First();
50 it.Good(); it.Inc()) {
51 ASSERT_TRUE(GetClient(0)->EnableSyncForDatatype(it.Get()));
53 // AUTOFILL_PROFILE is lumped together with AUTOFILL.
54 // SESSIONS is lumped together with PROXY_TABS and
55 // HISTORY_DELETE_DIRECTIVES.
56 // Favicons are lumped together with PROXY_TABS and
57 // HISTORY_DELETE_DIRECTIVES.
58 if (it.Get() == syncer::AUTOFILL_PROFILE || it.Get() == syncer::SESSIONS) {
62 if (!syncer::ProxyTypes().Has(it.Get())) {
63 ASSERT_TRUE(DoesTopLevelNodeExist(user_share, it.Get()))
64 << syncer::ModelTypeToString(it.Get());
67 // AUTOFILL_PROFILE is lumped together with AUTOFILL.
68 if (it.Get() == syncer::AUTOFILL) {
69 ASSERT_TRUE(DoesTopLevelNodeExist(user_share,
70 syncer::AUTOFILL_PROFILE));
71 } else if (it.Get() == syncer::HISTORY_DELETE_DIRECTIVES ||
72 it.Get() == syncer::PROXY_TABS) {
73 ASSERT_TRUE(DoesTopLevelNodeExist(user_share,
78 EnableNotifications();
81 IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, DisableOneAtATime) {
82 ASSERT_TRUE(SetupClients());
84 // Setup sync with no disabled types.
85 ASSERT_TRUE(GetClient(0)->SetupSync());
87 // TODO(rlarocque, 97780): It should be possible to disable notifications
88 // before calling SetupSync(). We should move this line back to the top
89 // of this function when this is supported.
90 DisableNotifications();
92 const syncer::ModelTypeSet registered_types =
93 GetSyncService((0))->GetRegisteredDataTypes();
95 syncer::UserShare* user_share = GetSyncService((0))->GetUserShare();
97 // Make sure all top-level nodes exist first.
98 for (syncer::ModelTypeSet::Iterator it = registered_types.First();
99 it.Good(); it.Inc()) {
100 if (!syncer::ProxyTypes().Has(it.Get())) {
101 ASSERT_TRUE(DoesTopLevelNodeExist(user_share, it.Get()));
105 for (syncer::ModelTypeSet::Iterator it = registered_types.First();
106 it.Good(); it.Inc()) {
107 // MANAGED_USERS and MANAGED_USER_SETTINGS are always synced.
108 if (it.Get() == syncer::MANAGED_USERS ||
109 it.Get() == syncer::MANAGED_USER_SHARED_SETTINGS ||
110 it.Get() == syncer::SYNCED_NOTIFICATIONS ||
111 it.Get() == syncer::SYNCED_NOTIFICATION_APP_INFO)
114 ASSERT_TRUE(GetClient(0)->DisableSyncForDatatype(it.Get()));
116 // AUTOFILL_PROFILE is lumped together with AUTOFILL.
117 // SESSIONS is lumped together with PROXY_TABS and TYPED_URLS.
118 // HISTORY_DELETE_DIRECTIVES is lumped together with TYPED_URLS.
119 // PRIORITY_PREFERENCES is lumped together with PREFERENCES.
120 // Favicons are lumped together with PROXY_TABS and
121 // HISTORY_DELETE_DIRECTIVES.
122 if (it.Get() == syncer::AUTOFILL_PROFILE ||
123 it.Get() == syncer::SESSIONS ||
124 it.Get() == syncer::HISTORY_DELETE_DIRECTIVES ||
125 it.Get() == syncer::PRIORITY_PREFERENCES ||
126 it.Get() == syncer::FAVICON_IMAGES ||
127 it.Get() == syncer::FAVICON_TRACKING) {
131 syncer::UserShare* user_share =
132 GetSyncService((0))->GetUserShare();
134 ASSERT_FALSE(DoesTopLevelNodeExist(user_share, it.Get()))
135 << syncer::ModelTypeToString(it.Get());
137 if (it.Get() == syncer::AUTOFILL) {
138 // AUTOFILL_PROFILE is lumped together with AUTOFILL.
139 ASSERT_FALSE(DoesTopLevelNodeExist(user_share, syncer::AUTOFILL_PROFILE));
140 } else if (it.Get() == syncer::TYPED_URLS) {
141 ASSERT_FALSE(DoesTopLevelNodeExist(user_share,
142 syncer::HISTORY_DELETE_DIRECTIVES));
143 // SESSIONS should be enabled only if PROXY_TABS is.
144 ASSERT_EQ(GetClient(0)->IsTypePreferred(syncer::PROXY_TABS),
145 DoesTopLevelNodeExist(user_share, syncer::SESSIONS));
146 } else if (it.Get() == syncer::PROXY_TABS) {
147 // SESSIONS should be enabled only if TYPED_URLS is.
148 ASSERT_EQ(GetClient(0)->IsTypePreferred(syncer::TYPED_URLS),
149 DoesTopLevelNodeExist(user_share, syncer::SESSIONS));
150 } else if (it.Get() == syncer::PREFERENCES) {
151 ASSERT_FALSE(DoesTopLevelNodeExist(user_share,
152 syncer::PRIORITY_PREFERENCES));
156 EnableNotifications();