Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5060)

Unified Diff: chrome/browser/services/gcm/gcm_driver.cc

Issue 286213003: Make GCMProfileService own GCMDriver, instead of deriving from it (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/services/gcm/gcm_driver.h ('k') | chrome/browser/services/gcm/gcm_driver_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/services/gcm/gcm_driver.cc
diff --git a/chrome/browser/services/gcm/gcm_driver.cc b/chrome/browser/services/gcm/gcm_driver.cc
index f8bcf72ca257ff456ac811bc5008b1cbcbc455d9..a855a18eeb09066ada4fe2961226ec6ca1a21c29 100644
--- a/chrome/browser/services/gcm/gcm_driver.cc
+++ b/chrome/browser/services/gcm/gcm_driver.cc
@@ -382,16 +382,15 @@ void GCMDriver::IOWorker::SetGCMRecording(bool recording) {
base::Bind(&GCMDriver::GetGCMStatisticsFinished, service_, stats));
}
-GCMDriver::GCMDriver(scoped_ptr<IdentityProvider> identity_provider)
- : identity_provider_(identity_provider.Pass()),
+GCMDriver::GCMDriver(
+ scoped_ptr<GCMClientFactory> gcm_client_factory,
+ scoped_ptr<IdentityProvider> identity_provider,
+ const base::FilePath& store_path,
+ const scoped_refptr<net::URLRequestContextGetter>& request_context)
+ : gcm_enabled_(true),
gcm_client_ready_(false),
+ identity_provider_(identity_provider.Pass()),
weak_ptr_factory_(this) {
-}
-
-GCMDriver::~GCMDriver() {
-}
-
-void GCMDriver::Initialize(scoped_ptr<GCMClientFactory> gcm_client_factory) {
// Get the list of available accounts.
std::vector<std::string> account_ids;
#if !defined(OS_ANDROID)
@@ -400,7 +399,6 @@ void GCMDriver::Initialize(scoped_ptr<GCMClientFactory> gcm_client_factory) {
// Create and initialize the GCMClient. Note that this does not initiate the
// GCM check-in.
- DCHECK(!io_worker_);
io_worker_.reset(new IOWorker());
content::BrowserThread::PostTask(
content::BrowserThread::IO,
@@ -408,23 +406,42 @@ void GCMDriver::Initialize(scoped_ptr<GCMClientFactory> gcm_client_factory) {
base::Bind(&GCMDriver::IOWorker::Initialize,
base::Unretained(io_worker_.get()),
base::Passed(&gcm_client_factory),
- GetStorePath(),
+ store_path,
account_ids,
- GetURLRequestContextGetter()));
-
- // Start the GCM service if the rollout signal indicates yes.
- if (ShouldStartAutomatically())
- EnsureStarted();
+ request_context));
identity_provider_->AddObserver(this);
}
-void GCMDriver::Start() {
+GCMDriver::GCMDriver()
+ : gcm_enabled_(true),
+ gcm_client_ready_(false),
+ weak_ptr_factory_(this) {
+}
+
+GCMDriver::~GCMDriver() {
+}
+
+void GCMDriver::Enable() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ if (gcm_enabled_)
+ return;
+ gcm_enabled_ = true;
+
EnsureStarted();
}
+void GCMDriver::Disable() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+ if (!gcm_enabled_)
+ return;
+ gcm_enabled_ = false;
+
+ Stop();
+}
+
void GCMDriver::Stop() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
@@ -441,7 +458,7 @@ void GCMDriver::Stop() {
base::Unretained(io_worker_.get())));
}
-void GCMDriver::ShutdownService() {
+void GCMDriver::Shutdown() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
identity_provider_->RemoveObserver(this);
for (GCMAppHandlerMap::const_iterator iter = app_handlers_.begin();
@@ -462,6 +479,9 @@ void GCMDriver::AddAppHandler(const std::string& app_id,
DCHECK(app_handlers_.find(app_id) == app_handlers_.end());
app_handlers_[app_id] = handler;
+
+ // Ensures that the GCM service is started when there is an interest.
+ EnsureStarted();
}
void GCMDriver::RemoveAppHandler(const std::string& app_id) {
@@ -479,7 +499,7 @@ void GCMDriver::Register(const std::string& app_id,
DCHECK(!sender_ids.empty());
DCHECK(!callback.is_null());
- GCMClient::Result result = EnsureAppReady(app_id);
+ GCMClient::Result result = EnsureStarted();
if (result != GCMClient::SUCCESS) {
callback.Run(std::string(), result);
return;
@@ -534,7 +554,7 @@ void GCMDriver::Unregister(const std::string& app_id,
DCHECK(!app_id.empty());
DCHECK(!callback.is_null());
- GCMClient::Result result = EnsureAppReady(app_id);
+ GCMClient::Result result = EnsureStarted();
if (result != GCMClient::SUCCESS) {
callback.Run(result);
return;
@@ -582,7 +602,7 @@ void GCMDriver::Send(const std::string& app_id,
DCHECK(!receiver_id.empty());
DCHECK(!callback.is_null());
- GCMClient::Result result = EnsureAppReady(app_id);
+ GCMClient::Result result = EnsureStarted();
if (result != GCMClient::SUCCESS) {
callback.Run(std::string(), result);
return;
@@ -667,25 +687,29 @@ void GCMDriver::SetGCMRecording(const GetGCMStatisticsCallback& callback,
}
void GCMDriver::OnActiveAccountLogin() {
- if (ShouldStartAutomatically())
- EnsureStarted();
+ EnsureStarted();
}
void GCMDriver::OnActiveAccountLogout() {
CheckOut();
}
-void GCMDriver::EnsureStarted() {
+GCMClient::Result GCMDriver::EnsureStarted() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+ if (!gcm_enabled_)
+ return GCMClient::GCM_DISABLED;
+
+ // Is the user signed in?
const std::string account_id = identity_provider_->GetActiveAccountId();
if (account_id.empty())
- return;
+ return GCMClient::NOT_SIGNED_IN;
// CheckIn could be called more than once when:
// 1) The password changes.
// 2) Register/send function calls it to ensure CheckIn is done.
if (account_id_ == account_id)
- return;
+ return GCMClient::SUCCESS;
account_id_ = account_id;
DCHECK(!delayed_task_controller_);
@@ -699,6 +723,8 @@ void GCMDriver::EnsureStarted() {
base::Bind(&GCMDriver::IOWorker::Start,
base::Unretained(io_worker_.get()),
weak_ptr_factory_.GetWeakPtr()));
+
+ return GCMClient::SUCCESS;
}
void GCMDriver::RemoveCachedData() {
@@ -730,19 +756,6 @@ void GCMDriver::CheckOut() {
base::Unretained(io_worker_.get())));
}
-GCMClient::Result GCMDriver::EnsureAppReady(const std::string& app_id) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
- // Starts the service if not yet.
- EnsureStarted();
-
- // If the service cannot be started, bail out.
- if (account_id_.empty())
- return GCMClient::NOT_SIGNED_IN;
-
- return GCMClient::SUCCESS;
-}
-
bool GCMDriver::IsAsyncOperationPending(const std::string& app_id) const {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
return register_callbacks_.find(app_id) != register_callbacks_.end() ||
@@ -859,4 +872,10 @@ void GCMDriver::GetGCMStatisticsFinished(GCMClient::GCMStatistics stats) {
LOG(WARNING) << "request_gcm_statistics_callback_ is NULL.";
}
+std::string GCMDriver::SignedInUserName() const {
+ if (IsStarted())
+ return identity_provider_->GetActiveUsername();
+ return std::string();
+}
+
} // namespace gcm
« no previous file with comments | « chrome/browser/services/gcm/gcm_driver.h ('k') | chrome/browser/services/gcm/gcm_driver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698