1// Copyright 2014 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/invalidation/ticl_profile_settings_provider.h" 6 7#include "base/memory/scoped_ptr.h" 8#include "base/prefs/pref_service.h" 9#include "chrome/browser/profiles/profile.h" 10#include "chrome/browser/services/gcm/gcm_profile_service.h" 11#include "chrome/browser/services/gcm/gcm_profile_service_factory.h" 12#include "chrome/common/pref_names.h" 13#include "chrome/test/base/testing_profile.h" 14#include "components/invalidation/fake_invalidation_state_tracker.h" 15#include "components/invalidation/invalidation_state_tracker.h" 16#include "components/invalidation/ticl_invalidation_service.h" 17#include "components/invalidation/ticl_settings_provider.h" 18#include "content/public/test/test_browser_thread_bundle.h" 19#include "google_apis/gaia/fake_identity_provider.h" 20#include "google_apis/gaia/fake_oauth2_token_service.h" 21#include "google_apis/gaia/identity_provider.h" 22#include "net/url_request/url_request_context_getter.h" 23#include "testing/gtest/include/gtest/gtest.h" 24 25namespace invalidation { 26 27class TiclProfileSettingsProviderTest : public testing::Test { 28 protected: 29 TiclProfileSettingsProviderTest(); 30 virtual ~TiclProfileSettingsProviderTest(); 31 32 // testing::Test: 33 virtual void SetUp() OVERRIDE; 34 virtual void TearDown() OVERRIDE; 35 36 TiclInvalidationService::InvalidationNetworkChannel GetNetworkChannel(); 37 38 content::TestBrowserThreadBundle thread_bundle_; 39 TestingProfile profile_; 40 FakeOAuth2TokenService token_service_; 41 42 scoped_ptr<TiclInvalidationService> invalidation_service_; 43 44 private: 45 DISALLOW_COPY_AND_ASSIGN(TiclProfileSettingsProviderTest); 46}; 47 48TiclProfileSettingsProviderTest::TiclProfileSettingsProviderTest() { 49} 50 51TiclProfileSettingsProviderTest::~TiclProfileSettingsProviderTest() { 52} 53 54void TiclProfileSettingsProviderTest::SetUp() { 55 invalidation_service_.reset(new TiclInvalidationService( 56 "TestUserAgent", 57 scoped_ptr<IdentityProvider>(new FakeIdentityProvider(&token_service_)), 58 scoped_ptr<TiclSettingsProvider>( 59 new TiclProfileSettingsProvider(&profile_)), 60 gcm::GCMProfileServiceFactory::GetForProfile(&profile_)->driver(), 61 profile_.GetRequestContext())); 62 invalidation_service_->Init(scoped_ptr<syncer::InvalidationStateTracker>( 63 new syncer::FakeInvalidationStateTracker)); 64} 65 66void TiclProfileSettingsProviderTest::TearDown() { 67 invalidation_service_.reset(); 68} 69 70TiclInvalidationService::InvalidationNetworkChannel 71TiclProfileSettingsProviderTest::GetNetworkChannel() { 72 return invalidation_service_->network_channel_type_; 73} 74 75TEST_F(TiclProfileSettingsProviderTest, ChannelSelectionTest) { 76 // Default value should be GCM channel. 77 EXPECT_EQ(TiclInvalidationService::GCM_NETWORK_CHANNEL, GetNetworkChannel()); 78 PrefService* prefs = profile_.GetPrefs(); 79 80 // If GCM is enabled and invalidation channel setting is not set or set to 81 // true then use GCM channel. 82 prefs->SetBoolean(prefs::kGCMChannelEnabled, true); 83 prefs->SetBoolean(prefs::kInvalidationServiceUseGCMChannel, true); 84 EXPECT_EQ(TiclInvalidationService::GCM_NETWORK_CHANNEL, GetNetworkChannel()); 85 86 prefs->SetBoolean(prefs::kGCMChannelEnabled, true); 87 prefs->ClearPref(prefs::kInvalidationServiceUseGCMChannel); 88 EXPECT_EQ(TiclInvalidationService::GCM_NETWORK_CHANNEL, GetNetworkChannel()); 89 90 prefs->ClearPref(prefs::kGCMChannelEnabled); 91 prefs->SetBoolean(prefs::kInvalidationServiceUseGCMChannel, true); 92 EXPECT_EQ(TiclInvalidationService::GCM_NETWORK_CHANNEL, GetNetworkChannel()); 93 94 // If invalidation channel setting is set to false, fall back to push channel. 95 prefs->SetBoolean(prefs::kGCMChannelEnabled, true); 96 prefs->SetBoolean(prefs::kInvalidationServiceUseGCMChannel, false); 97 EXPECT_EQ(TiclInvalidationService::PUSH_CLIENT_CHANNEL, GetNetworkChannel()); 98 99 // If invalidation channel setting says use GCM but GCM is not enabled, fall 100 // back to push channel. 101 prefs->SetBoolean(prefs::kGCMChannelEnabled, false); 102 prefs->SetBoolean(prefs::kInvalidationServiceUseGCMChannel, true); 103 EXPECT_EQ(TiclInvalidationService::PUSH_CLIENT_CHANNEL, GetNetworkChannel()); 104} 105 106} // namespace invalidation 107