15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/invalidation/ticl_profile_settings_provider.h" 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/memory/scoped_ptr.h" 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/prefs/pref_service.h" 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/profiles/profile.h" 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/services/gcm/gcm_profile_service.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/services/gcm/gcm_profile_service_factory.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/common/pref_names.h" 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/test/base/testing_profile.h" 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/invalidation/fake_invalidation_state_tracker.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/invalidation/invalidation_state_tracker.h" 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/invalidation/ticl_invalidation_service.h" 170de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)#include "components/invalidation/ticl_settings_provider.h" 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/public/test/test_browser_thread_bundle.h" 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "google_apis/gaia/fake_identity_provider.h" 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "google_apis/gaia/fake_oauth2_token_service.h" 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "google_apis/gaia/identity_provider.h" 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "net/url_request/url_request_context_getter.h" 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "testing/gtest/include/gtest/gtest.h" 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace invalidation { 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass TiclProfileSettingsProviderTest : public testing::Test { 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu protected: 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TiclProfileSettingsProviderTest(); 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ~TiclProfileSettingsProviderTest(); 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // testing::Test: 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void SetUp() OVERRIDE; 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void TearDown() OVERRIDE; 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TiclInvalidationService::InvalidationNetworkChannel GetNetworkChannel(); 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::TestBrowserThreadBundle thread_bundle_; 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TestingProfile profile_; 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu FakeOAuth2TokenService token_service_; 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<TiclInvalidationService> invalidation_service_; 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private: 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DISALLOW_COPY_AND_ASSIGN(TiclProfileSettingsProviderTest); 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTiclProfileSettingsProviderTest::TiclProfileSettingsProviderTest() { 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTiclProfileSettingsProviderTest::~TiclProfileSettingsProviderTest() { 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid TiclProfileSettingsProviderTest::SetUp() { 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu invalidation_service_.reset(new TiclInvalidationService( 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "TestUserAgent", 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<IdentityProvider>(new FakeIdentityProvider(&token_service_)), 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<TiclSettingsProvider>( 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new TiclProfileSettingsProvider(&profile_)), 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gcm::GCMProfileServiceFactory::GetForProfile(&profile_)->driver(), 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu profile_.GetRequestContext())); 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu invalidation_service_->Init(scoped_ptr<syncer::InvalidationStateTracker>( 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new syncer::FakeInvalidationStateTracker)); 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid TiclProfileSettingsProviderTest::TearDown() { 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) invalidation_service_.reset(); 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTiclInvalidationService::InvalidationNetworkChannel 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTiclProfileSettingsProviderTest::GetNetworkChannel() { 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return invalidation_service_->network_channel_type_; 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(TiclProfileSettingsProviderTest, ChannelSelectionTest) { 761675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // Default value should be GCM channel. 771675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_EQ(TiclInvalidationService::GCM_NETWORK_CHANNEL, GetNetworkChannel()); 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PrefService* prefs = profile_.GetPrefs(); 795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 801675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // If GCM is enabled and invalidation channel setting is not set or set to 811675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // true then use GCM channel. 825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->SetBoolean(prefs::kGCMChannelEnabled, true); 835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->SetBoolean(prefs::kInvalidationServiceUseGCMChannel, true); 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(TiclInvalidationService::GCM_NETWORK_CHANNEL, GetNetworkChannel()); 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->SetBoolean(prefs::kGCMChannelEnabled, true); 875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->ClearPref(prefs::kInvalidationServiceUseGCMChannel); 881675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_EQ(TiclInvalidationService::GCM_NETWORK_CHANNEL, GetNetworkChannel()); 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 901675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch prefs->ClearPref(prefs::kGCMChannelEnabled); 911675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch prefs->SetBoolean(prefs::kInvalidationServiceUseGCMChannel, true); 921675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_EQ(TiclInvalidationService::GCM_NETWORK_CHANNEL, GetNetworkChannel()); 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 941675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // If invalidation channel setting is set to false, fall back to push channel. 951675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch prefs->SetBoolean(prefs::kGCMChannelEnabled, true); 965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->SetBoolean(prefs::kInvalidationServiceUseGCMChannel, false); 975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(TiclInvalidationService::PUSH_CLIENT_CHANNEL, GetNetworkChannel()); 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 991675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // If invalidation channel setting says use GCM but GCM is not enabled, fall 1001675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // back to push channel. 1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->SetBoolean(prefs::kGCMChannelEnabled, false); 1025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->SetBoolean(prefs::kInvalidationServiceUseGCMChannel, true); 1031675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_EQ(TiclInvalidationService::PUSH_CLIENT_CHANNEL, GetNetworkChannel()); 1045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace invalidation 107