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