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 25 namespace invalidation { 26 27 class 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 48 TiclProfileSettingsProviderTest::TiclProfileSettingsProviderTest() { 49 } 50 51 TiclProfileSettingsProviderTest::~TiclProfileSettingsProviderTest() { 52 } 53 54 void 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 66 void TiclProfileSettingsProviderTest::TearDown() { 67 invalidation_service_.reset(); 68 } 69 70 TiclInvalidationService::InvalidationNetworkChannel 71 TiclProfileSettingsProviderTest::GetNetworkChannel() { 72 return invalidation_service_->network_channel_type_; 73 } 74 75 TEST_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