enable_disable_test.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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 15namespace { 16 17class 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 28bool 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 35bool IsUnready(const browser_sync::FailedDataTypesHandler& failed_handler, 36 syncer::ModelType type) { 37 return failed_handler.GetUnreadyErrorTypes().Has(type); 38} 39 40IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, EnableOneAtATime) { 41 ASSERT_TRUE(SetupClients()); 42 43 // Setup sync with no enabled types. 44 ASSERT_TRUE(GetClient(0)->SetupSync(syncer::ModelTypeSet())); 45 46 const syncer::ModelTypeSet registered_types = 47 GetSyncService(0)->GetRegisteredDataTypes(); 48 syncer::UserShare* user_share = GetSyncService(0)->GetUserShare(); 49 const browser_sync::FailedDataTypesHandler& failed_handler = 50 GetSyncService(0)->failed_data_types_handler(); 51 for (syncer::ModelTypeSet::Iterator it = registered_types.First(); 52 it.Good(); it.Inc()) { 53 ASSERT_TRUE(GetClient(0)->EnableSyncForDatatype(it.Get())); 54 55 // AUTOFILL_PROFILE is lumped together with AUTOFILL. 56 // SESSIONS is lumped together with PROXY_TABS and 57 // HISTORY_DELETE_DIRECTIVES. 58 // Favicons are lumped together with PROXY_TABS and 59 // HISTORY_DELETE_DIRECTIVES. 60 if (it.Get() == syncer::AUTOFILL_PROFILE || it.Get() == syncer::SESSIONS) { 61 continue; 62 } 63 64 if (!syncer::ProxyTypes().Has(it.Get())) { 65 ASSERT_TRUE(DoesTopLevelNodeExist(user_share, it.Get()) || 66 IsUnready(failed_handler, it.Get())) 67 << syncer::ModelTypeToString(it.Get()); 68 } 69 70 // AUTOFILL_PROFILE is lumped together with AUTOFILL. 71 if (it.Get() == syncer::AUTOFILL) { 72 ASSERT_TRUE(DoesTopLevelNodeExist(user_share, 73 syncer::AUTOFILL_PROFILE)); 74 } else if (it.Get() == syncer::HISTORY_DELETE_DIRECTIVES || 75 it.Get() == syncer::PROXY_TABS) { 76 ASSERT_TRUE(DoesTopLevelNodeExist(user_share, 77 syncer::SESSIONS)); 78 } 79 } 80} 81 82IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, DisableOneAtATime) { 83 ASSERT_TRUE(SetupClients()); 84 85 // Setup sync with no disabled types. 86 ASSERT_TRUE(GetClient(0)->SetupSync()); 87 88 const syncer::ModelTypeSet registered_types = 89 GetSyncService(0)->GetRegisteredDataTypes(); 90 91 syncer::UserShare* user_share = GetSyncService(0)->GetUserShare(); 92 93 const browser_sync::FailedDataTypesHandler& failed_handler = 94 GetSyncService(0)->failed_data_types_handler(); 95 96 // Make sure all top-level nodes exist first. 97 for (syncer::ModelTypeSet::Iterator it = registered_types.First(); 98 it.Good(); it.Inc()) { 99 if (!syncer::ProxyTypes().Has(it.Get())) { 100 ASSERT_TRUE(DoesTopLevelNodeExist(user_share, it.Get()) || 101 IsUnready(failed_handler, it.Get())); 102 } 103 } 104 105 for (syncer::ModelTypeSet::Iterator it = registered_types.First(); 106 it.Good(); it.Inc()) { 107 // SUPERVISED_USERS and SUPERVISED_USER_SHARED_SETTINGS are always synced. 108 if (it.Get() == syncer::SUPERVISED_USERS || 109 it.Get() == syncer::SUPERVISED_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 157} // namespace 158