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

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

Issue 135903005: [GCM] Reland: Introduce GCMClientFactory to create GCMClient for GCMProfileService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix CrOS memory failures Created 6 years, 11 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
Index: chrome/browser/services/gcm/gcm_profile_service.cc
diff --git a/chrome/browser/services/gcm/gcm_profile_service.cc b/chrome/browser/services/gcm/gcm_profile_service.cc
index 3afea2173d8d888f726db7c801a655b191af6703..0e1b45d7af7798f727c08341310b7342b46480b3 100644
--- a/chrome/browser/services/gcm/gcm_profile_service.cc
+++ b/chrome/browser/services/gcm/gcm_profile_service.cc
@@ -12,6 +12,7 @@
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/state_store.h"
+#include "chrome/browser/services/gcm/gcm_client_factory.h"
#include "chrome/browser/services/gcm/gcm_event_router.h"
#include "chrome/browser/signin/signin_manager.h"
#include "chrome/browser/signin/signin_manager_factory.h"
@@ -179,10 +180,12 @@ class GCMProfileService::IOWorker
: public GCMClient::Delegate,
public base::RefCountedThreadSafe<GCMProfileService::IOWorker>{
public:
+ // Called on UI thread.
explicit IOWorker(const base::WeakPtr<GCMProfileService>& service);
+ void Initialize();
// Overridden from GCMClient::Delegate:
- // Called from IO thread.
+ // Called on IO thread.
virtual void OnCheckInFinished(const GCMClient::CheckinInfo& checkin_info,
GCMClient::Result result) OVERRIDE;
virtual void OnRegisterFinished(const std::string& app_id,
@@ -200,7 +203,6 @@ class GCMProfileService::IOWorker
GCMClient::Result result) OVERRIDE;
virtual GCMClient::CheckinInfo GetCheckinInfo() const OVERRIDE;
virtual void OnLoadingCompleted() OVERRIDE;
- virtual base::TaskRunner* GetFileTaskRunner() OVERRIDE;
void CheckGCMClientLoading();
void SetUser(const std::string& username);
@@ -221,8 +223,13 @@ class GCMProfileService::IOWorker
friend class base::RefCountedThreadSafe<IOWorker>;
virtual ~IOWorker();
+ void InitializeGCMClient();
+
const base::WeakPtr<GCMProfileService> service_;
+ // Not owned.
+ GCMClient* gcm_client_;
+
// The username (email address) of the signed-in user.
std::string username_;
@@ -233,12 +240,29 @@ class GCMProfileService::IOWorker
GCMProfileService::IOWorker::IOWorker(
const base::WeakPtr<GCMProfileService>& service)
- : service_(service) {
+ : service_(service),
+ gcm_client_(NULL) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
}
GCMProfileService::IOWorker::~IOWorker() {
}
+void GCMProfileService::IOWorker::Initialize() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&GCMProfileService::IOWorker::InitializeGCMClient, this));
+}
+
+void GCMProfileService::IOWorker::InitializeGCMClient() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+
+ gcm_client_ = GCMClientFactory::GetClient();
+}
+
void GCMProfileService::IOWorker::OnCheckInFinished(
const GCMClient::CheckinInfo& checkin_info,
GCMClient::Result result) {
@@ -340,18 +364,13 @@ void GCMProfileService::IOWorker::OnLoadingCompleted() {
service_));
}
-base::TaskRunner* GCMProfileService::IOWorker::GetFileTaskRunner() {
- // TODO(jianli): to be implemented.
- return NULL;
-}
-
void GCMProfileService::IOWorker::CheckGCMClientLoading() {
content::BrowserThread::PostTask(
content::BrowserThread::UI,
FROM_HERE,
base::Bind(&GCMProfileService::CheckGCMClientLoadingFinished,
service_,
- GCMClient::Get()->IsLoading()));
+ gcm_client_->IsLoading()));
}
void GCMProfileService::IOWorker::SetUser(const std::string& username) {
@@ -359,7 +378,7 @@ void GCMProfileService::IOWorker::SetUser(const std::string& username) {
DCHECK(username_.empty() && !username.empty());
username_ = username;
- GCMClient::Get()->SetUserDelegate(username_, this);
+ gcm_client_->SetUserDelegate(username_, this);
}
void GCMProfileService::IOWorker::RemoveUser(const std::string& username) {
@@ -369,13 +388,13 @@ void GCMProfileService::IOWorker::RemoveUser(const std::string& username) {
if (username_.empty())
return;
username_.clear();
- GCMClient::Get()->SetUserDelegate(username_, NULL);
+ gcm_client_->SetUserDelegate(username_, NULL);
}
void GCMProfileService::IOWorker::CheckIn() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
- GCMClient::Get()->CheckIn(username_);
+ gcm_client_->CheckIn(username_);
}
void GCMProfileService::IOWorker::SetCheckinInfo(
@@ -399,14 +418,14 @@ void GCMProfileService::IOWorker::Register(
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
DCHECK(!username_.empty() && checkin_info_.IsValid());
- GCMClient::Get()->Register(username_, app_id, cert, sender_ids);
+ gcm_client_->Register(username_, app_id, cert, sender_ids);
}
void GCMProfileService::IOWorker::Unregister(const std::string& app_id) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
DCHECK(!username_.empty() && checkin_info_.IsValid());
- GCMClient::Get()->Unregister(username_, app_id);
+ gcm_client_->Unregister(username_, app_id);
}
void GCMProfileService::IOWorker::Send(
@@ -416,7 +435,7 @@ void GCMProfileService::IOWorker::Send(
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
DCHECK(!username_.empty() && checkin_info_.IsValid());
- GCMClient::Get()->Send(username_, app_id, receiver_id, message);
+ gcm_client_->Send(username_, app_id, receiver_id, message);
}
GCMProfileService::RegistrationInfo::RegistrationInfo() {
@@ -465,6 +484,7 @@ GCMProfileService::GCMProfileService(Profile* profile)
testing_delegate_(NULL),
weak_ptr_factory_(this) {
DCHECK(!profile->IsOffTheRecord());
+
Init();
}
@@ -492,6 +512,7 @@ void GCMProfileService::Init() {
// This has to be done first since CheckIn depends on it.
io_worker_ = new IOWorker(weak_ptr_factory_.GetWeakPtr());
+ io_worker_->Initialize();
Nicolas Zea 2014/01/21 23:04:45 I think it's cleaner to have the GCMProfileService
jianli 2014/01/21 23:16:16 Good idea. Also moved the logic defined in CheckGC
// Checks if GCMClient has finished the loading.
content::BrowserThread::PostTask(
« no previous file with comments | « chrome/browser/services/gcm/gcm_client_factory.cc ('k') | chrome/browser/services/gcm/gcm_profile_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698