Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync / test / integration / enable_disable_test.cc
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.
4
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"
11
12 // This file contains tests that exercise enabling and disabling data
13 // types.
14
15 namespace {
16
17 class EnableDisableSingleClientTest : public SyncTest {
18  public:
19   // TODO(pvalenzuela): Switch to SINGLE_CLIENT once FakeServer
20   // supports this scenario.
21   EnableDisableSingleClientTest() : SyncTest(SINGLE_CLIENT_LEGACY) {}
22   virtual ~EnableDisableSingleClientTest() {}
23  private:
24   DISALLOW_COPY_AND_ASSIGN(EnableDisableSingleClientTest);
25 };
26
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;
33 }
34
35 IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, EnableOneAtATime) {
36   ASSERT_TRUE(SetupClients());
37
38   // Setup sync with no enabled types.
39   ASSERT_TRUE(GetClient(0)->SetupSync(syncer::ModelTypeSet()));
40
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();
45
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()));
52
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) {
59       continue;
60     }
61
62     if (!syncer::ProxyTypes().Has(it.Get())) {
63       ASSERT_TRUE(DoesTopLevelNodeExist(user_share, it.Get()))
64           << syncer::ModelTypeToString(it.Get());
65     }
66
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,
74                                         syncer::SESSIONS));
75     }
76   }
77
78   EnableNotifications();
79 }
80
81 IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, DisableOneAtATime) {
82   ASSERT_TRUE(SetupClients());
83
84   // Setup sync with no disabled types.
85   ASSERT_TRUE(GetClient(0)->SetupSync());
86
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();
91
92   const syncer::ModelTypeSet registered_types =
93       GetSyncService((0))->GetRegisteredDataTypes();
94
95   syncer::UserShare* user_share = GetSyncService((0))->GetUserShare();
96
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()));
102     }
103   }
104
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)
112       continue;
113
114     ASSERT_TRUE(GetClient(0)->DisableSyncForDatatype(it.Get()));
115
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) {
128       continue;
129     }
130
131     syncer::UserShare* user_share =
132         GetSyncService((0))->GetUserShare();
133
134     ASSERT_FALSE(DoesTopLevelNodeExist(user_share, it.Get()))
135         << syncer::ModelTypeToString(it.Get());
136
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));
153     }
154   }
155
156   EnableNotifications();
157 }
158
159 }  // namespace