Index: chrome/browser/sync/profile_sync_service.cc |
diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc |
index 82435b86a9b9fcd5e3d1ceba3f370cc9e9a98c9b..1c65779a6437ded90b478ca9daf4f4d1d33a0d2e 100644 |
--- a/chrome/browser/sync/profile_sync_service.cc |
+++ b/chrome/browser/sync/profile_sync_service.cc |
@@ -29,6 +29,7 @@ |
#include "chrome/browser/net/chrome_cookie_notification_details.h" |
#include "chrome/browser/prefs/pref_service_syncable.h" |
#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/services/gcm/gcm_profile_service.h" |
#include "chrome/browser/services/gcm/gcm_profile_service_factory.h" |
#include "chrome/browser/signin/about_signin_internals.h" |
#include "chrome/browser/signin/about_signin_internals_factory.h" |
@@ -995,7 +996,14 @@ void ProfileSyncService::OnExperimentsChanged( |
profile()->GetPrefs()->SetBoolean(prefs::kGCMChannelEnabled, |
experiments.gcm_channel_state == |
syncer::Experiments::ENABLED); |
- gcm::GCMProfileServiceFactory::GetForProfile(profile()); |
+ gcm::GCMProfileService* gcm_profile_service = |
+ gcm::GCMProfileServiceFactory::GetForProfile(profile()); |
+ if (gcm_profile_service) { |
+ if (experiments.gcm_channel_state == syncer::Experiments::SUPPRESSED) |
+ gcm_profile_service->Stop(); |
+ else |
+ gcm_profile_service->Start(); |
+ } |
} else { |
profile()->GetPrefs()->ClearPref(prefs::kGCMChannelEnabled); |
} |