Home | History | Annotate | Download | only in integration
      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   EnableDisableSingleClientTest() : SyncTest(SINGLE_CLIENT) {}
     20   virtual ~EnableDisableSingleClientTest() {}
     21 
     22   // Don't use self-notifications as they can trigger additional sync cycles.
     23   virtual bool TestUsesSelfNotifications() OVERRIDE { return false; }
     24  private:
     25   DISALLOW_COPY_AND_ASSIGN(EnableDisableSingleClientTest);
     26 };
     27 
     28 bool DoesTopLevelNodeExist(syncer::UserShare* user_share,
     29                            syncer::ModelType type) {
     30     syncer::ReadTransaction trans(FROM_HERE, user_share);
     31     syncer::ReadNode node(&trans);
     32     return node.InitTypeRoot(type) == 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   const syncer::ModelTypeSet registered_types =
     42       GetSyncService((0))->GetRegisteredDataTypes();
     43   syncer::UserShare* user_share = GetSyncService((0))->GetUserShare();
     44   for (syncer::ModelTypeSet::Iterator it = registered_types.First();
     45        it.Good(); it.Inc()) {
     46     ASSERT_TRUE(GetClient(0)->EnableSyncForDatatype(it.Get()));
     47 
     48     // AUTOFILL_PROFILE is lumped together with AUTOFILL.
     49     // SESSIONS is lumped together with PROXY_TABS and
     50     // HISTORY_DELETE_DIRECTIVES.
     51     // Favicons are lumped together with PROXY_TABS and
     52     // HISTORY_DELETE_DIRECTIVES.
     53     if (it.Get() == syncer::AUTOFILL_PROFILE || it.Get() == syncer::SESSIONS) {
     54       continue;
     55     }
     56 
     57     if (!syncer::ProxyTypes().Has(it.Get())) {
     58       ASSERT_TRUE(DoesTopLevelNodeExist(user_share, it.Get()))
     59           << syncer::ModelTypeToString(it.Get());
     60     }
     61 
     62     // AUTOFILL_PROFILE is lumped together with AUTOFILL.
     63     if (it.Get() == syncer::AUTOFILL) {
     64       ASSERT_TRUE(DoesTopLevelNodeExist(user_share,
     65                                         syncer::AUTOFILL_PROFILE));
     66     } else if (it.Get() == syncer::HISTORY_DELETE_DIRECTIVES ||
     67                it.Get() == syncer::PROXY_TABS) {
     68       ASSERT_TRUE(DoesTopLevelNodeExist(user_share,
     69                                         syncer::SESSIONS));
     70     }
     71   }
     72 }
     73 
     74 IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, DisableOneAtATime) {
     75   ASSERT_TRUE(SetupClients());
     76 
     77   // Setup sync with no disabled types.
     78   ASSERT_TRUE(GetClient(0)->SetupSync());
     79 
     80   const syncer::ModelTypeSet registered_types =
     81       GetSyncService((0))->GetRegisteredDataTypes();
     82 
     83   syncer::UserShare* user_share = GetSyncService((0))->GetUserShare();
     84 
     85   // Make sure all top-level nodes exist first.
     86   for (syncer::ModelTypeSet::Iterator it = registered_types.First();
     87        it.Good(); it.Inc()) {
     88     if (!syncer::ProxyTypes().Has(it.Get())) {
     89       ASSERT_TRUE(DoesTopLevelNodeExist(user_share, it.Get()));
     90     }
     91   }
     92 
     93   for (syncer::ModelTypeSet::Iterator it = registered_types.First();
     94        it.Good(); it.Inc()) {
     95     // SUPERVISED_USERS and SUPERVISED_USER_SHARED_SETTINGS are always synced.
     96     if (it.Get() == syncer::SUPERVISED_USERS ||
     97         it.Get() == syncer::SUPERVISED_USER_SHARED_SETTINGS ||
     98         it.Get() == syncer::SYNCED_NOTIFICATIONS ||
     99         it.Get() == syncer::SYNCED_NOTIFICATION_APP_INFO)
    100       continue;
    101 
    102     ASSERT_TRUE(GetClient(0)->DisableSyncForDatatype(it.Get()));
    103 
    104     // AUTOFILL_PROFILE is lumped together with AUTOFILL.
    105     // SESSIONS is lumped together with PROXY_TABS and TYPED_URLS.
    106     // HISTORY_DELETE_DIRECTIVES is lumped together with TYPED_URLS.
    107     // PRIORITY_PREFERENCES is lumped together with PREFERENCES.
    108     // Favicons are lumped together with PROXY_TABS and
    109     // HISTORY_DELETE_DIRECTIVES.
    110     if (it.Get() == syncer::AUTOFILL_PROFILE ||
    111         it.Get() == syncer::SESSIONS ||
    112         it.Get() == syncer::HISTORY_DELETE_DIRECTIVES ||
    113         it.Get() == syncer::PRIORITY_PREFERENCES ||
    114         it.Get() == syncer::FAVICON_IMAGES ||
    115         it.Get() == syncer::FAVICON_TRACKING) {
    116       continue;
    117     }
    118 
    119     syncer::UserShare* user_share =
    120         GetSyncService((0))->GetUserShare();
    121 
    122     ASSERT_FALSE(DoesTopLevelNodeExist(user_share, it.Get()))
    123         << syncer::ModelTypeToString(it.Get());
    124 
    125     if (it.Get() == syncer::AUTOFILL) {
    126       // AUTOFILL_PROFILE is lumped together with AUTOFILL.
    127       ASSERT_FALSE(DoesTopLevelNodeExist(user_share, syncer::AUTOFILL_PROFILE));
    128     } else if (it.Get() == syncer::TYPED_URLS) {
    129       ASSERT_FALSE(DoesTopLevelNodeExist(user_share,
    130                                          syncer::HISTORY_DELETE_DIRECTIVES));
    131       // SESSIONS should be enabled only if PROXY_TABS is.
    132       ASSERT_EQ(GetClient(0)->IsTypePreferred(syncer::PROXY_TABS),
    133                 DoesTopLevelNodeExist(user_share, syncer::SESSIONS));
    134     } else if (it.Get() == syncer::PROXY_TABS) {
    135       // SESSIONS should be enabled only if TYPED_URLS is.
    136       ASSERT_EQ(GetClient(0)->IsTypePreferred(syncer::TYPED_URLS),
    137                 DoesTopLevelNodeExist(user_share, syncer::SESSIONS));
    138     } else if (it.Get() == syncer::PREFERENCES) {
    139       ASSERT_FALSE(DoesTopLevelNodeExist(user_share,
    140                                          syncer::PRIORITY_PREFERENCES));
    141     }
    142   }
    143 }
    144 
    145 }  // namespace
    146