11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <algorithm> 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <vector> 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/command_line.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/strings/string_util.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/sync/profile_sync_components_factory_impl.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/sync/profile_sync_service.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/sync/profile_sync_service_android.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/sync/supervised_user_signin_manager_wrapper.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/test/base/testing_profile.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/signin/core/browser/profile_oauth2_token_service.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/sync_driver/data_type_controller.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/test/test_browser_thread_bundle.h" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "sync/internal_api/public/base/model_type.h" 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h" 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint NumberOfSetBits(jlong bitmask) { 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int num = 0; 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci while (bitmask > 0) { 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci num += (bitmask & 1); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bitmask >>= 1; 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return num; 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ProfileSyncServiceAndroidTest : public testing::Test { 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileSyncServiceAndroidTest() 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : command_line_(base::CommandLine::NO_PROGRAM) {} 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ProfileSyncServiceAndroidTest() {} 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetUp() OVERRIDE { 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileOAuth2TokenService* token_service = 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileOAuth2TokenServiceFactory::GetForProfile(&profile_); 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileSyncComponentsFactory* factory = 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new ProfileSyncComponentsFactoryImpl( 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &profile_, 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &command_line_, 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL(), 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci token_service, 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_.GetRequestContext()); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sync_service_.reset(new ProfileSyncService( 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci make_scoped_ptr(factory), 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &profile_, 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<SupervisedUserSigninManagerWrapper>(), 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci token_service, 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser_sync::MANUAL_START)); 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci factory->RegisterDataTypes(sync_service_.get()); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci syncer::ModelTypeSet GetRegisteredDataTypes() { 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sync_driver::DataTypeController::StateMap controller_states; 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sync_service_->GetDataTypeControllerStates(&controller_states); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci syncer::ModelTypeSet model_types; 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (sync_driver::DataTypeController::StateMap::const_iterator it = 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci controller_states.begin(); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci it != controller_states.end(); ++it) { 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_types.Put(it->first); 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return model_types; 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::CommandLine command_line_; 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::TestBrowserThreadBundle thread_bundle_; 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestingProfile profile_; 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ProfileSyncService> sync_service_; 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ProfileSyncServiceAndroidTest, ModelTypesToInvalidationNames) { 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci syncer::ModelTypeSet model_types = GetRegisteredDataTypes(); 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci jlong model_type_selection = 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileSyncServiceAndroid::ModelTypeSetToSelection(model_types); 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The number of set bits in the model type bitmask should be equal to the 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // number of model types. 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(static_cast<int>(model_types.Size()), 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NumberOfSetBits(model_type_selection)); 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<std::string> invalidation_names; 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (syncer::ModelTypeSet::Iterator it = model_types.First(); it.Good(); 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci it.Inc()) { 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string notification_type; 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (syncer::RealModelTypeToNotificationType(it.Get(), ¬ification_type)) 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci invalidation_names.push_back(notification_type); 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::sort(invalidation_names.begin(), invalidation_names.end()); 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(JoinString(invalidation_names, ", "), 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileSyncServiceAndroid::ModelTypeSelectionToStringForTest( 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_type_selection)); 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 104