gcm_profile_service.cc revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/services/gcm/gcm_profile_service.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/logging.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/prefs/pref_service.h" 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/profiles/profile.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/common/pref_names.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_ANDROID) 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/gcm_driver/gcm_driver_android.h" 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/files/file_path.h" 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/services/gcm/gcm_desktop_utils.h" 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/signin/profile_identity_provider.h" 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/gcm_driver/gcm_client_factory.h" 24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "google_apis/gaia/identity_provider.h" 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace gcm { 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// static 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool GCMProfileService::IsGCMEnabled(Profile* profile) { 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return profile->GetPrefs()->GetBoolean(prefs::kGCMChannelEnabled); 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void GCMProfileService::RegisterProfilePrefs( 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry->RegisterBooleanPref( 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prefs::kGCMChannelEnabled, 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) true, 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)GCMProfileService::GCMProfileService( 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Profile* profile, 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<GCMClientFactory> gcm_client_factory) 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : profile_(profile) { 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(!profile->IsOffTheRecord()); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#if defined(OS_ANDROID) 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) driver_.reset(new GCMDriverAndroid); 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#else 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) driver_ = CreateGCMDriverDesktop( 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gcm_client_factory.Pass(), 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<IdentityProvider>(new ProfileIdentityProvider( 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SigninManagerFactory::GetForProfile(profile_), 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetForProfile(profile_), 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) LoginUIServiceFactory::GetForProfile(profile_))), 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) profile_->GetPath().Append(chrome::kGCMStoreDirname), 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) profile_->GetRequestContext()); 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)GCMProfileService::GCMProfileService() : profile_(NULL) { 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)GCMProfileService::~GCMProfileService() { 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void GCMProfileService::AddAppHandler(const std::string& app_id, 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GCMAppHandler* handler) { 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (driver_) 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) driver_->AddAppHandler(app_id, handler); 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void GCMProfileService::RemoveAppHandler(const std::string& app_id) { 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (driver_) 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) driver_->RemoveAppHandler(app_id); 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void GCMProfileService::Register(const std::string& app_id, 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::vector<std::string>& sender_ids, 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GCMDriver::RegisterCallback& callback) { 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (driver_) 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) driver_->Register(app_id, sender_ids, callback); 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void GCMProfileService::Shutdown() { 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (driver_) { 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) driver_->Shutdown(); 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) driver_.reset(); 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void GCMProfileService::SetDriverForTesting(GCMDriver* driver) { 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) driver_.reset(driver); 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace gcm 101