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