Index: chrome/browser/services/gcm/gcm_client_mock.cc |
=================================================================== |
--- chrome/browser/services/gcm/gcm_client_mock.cc (revision 255183) |
+++ chrome/browser/services/gcm/gcm_client_mock.cc (working copy) |
@@ -13,10 +13,13 @@ |
namespace gcm { |
-GCMClientMock::GCMClientMock(Status status, ErrorSimulation error_simulation) |
+GCMClientMock::GCMClientMock(LoadingDelay loading_delay, |
+ ErrorSimulation error_simulation) |
: delegate_(NULL), |
- status_(status), |
- error_simulation_(error_simulation) { |
+ status_(UNINITIALIZED), |
+ loading_delay_(loading_delay), |
+ error_simulation_(error_simulation), |
+ weak_ptr_factory_(this) { |
} |
GCMClientMock::~GCMClientMock() { |
@@ -32,8 +35,26 @@ |
delegate_ = delegate; |
} |
+void GCMClientMock::Load() { |
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
+ DCHECK_NE(LOADED, status_); |
+ |
+ if (loading_delay_ == DELAY_LOADING) |
+ return; |
+ DoLoading(); |
+} |
+ |
+void GCMClientMock::DoLoading() { |
+ status_ = LOADED; |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&GCMClientMock::CheckinFinished, |
+ weak_ptr_factory_.GetWeakPtr())); |
+} |
+ |
void GCMClientMock::CheckOut() { |
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
+ status_ = CHECKED_OUT; |
} |
void GCMClientMock::Register(const std::string& app_id, |
@@ -48,7 +69,7 @@ |
base::MessageLoop::current()->PostTask( |
FROM_HERE, |
base::Bind(&GCMClientMock::RegisterFinished, |
- base::Unretained(this), |
+ weak_ptr_factory_.GetWeakPtr(), |
app_id, |
registration_id)); |
} |
@@ -64,13 +85,18 @@ |
base::MessageLoop::current()->PostTask( |
FROM_HERE, |
base::Bind(&GCMClientMock::SendFinished, |
- base::Unretained(this), |
+ weak_ptr_factory_.GetWeakPtr(), |
app_id, |
message.id)); |
} |
-bool GCMClientMock::IsReady() const { |
- return status_ == READY; |
+void GCMClientMock::PerformDelayedLoading() { |
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+ |
+ content::BrowserThread::PostTask( |
+ content::BrowserThread::IO, |
+ FROM_HERE, |
+ base::Bind(&GCMClientMock::DoLoading, weak_ptr_factory_.GetWeakPtr())); |
} |
void GCMClientMock::ReceiveMessage(const std::string& app_id, |
@@ -81,7 +107,7 @@ |
content::BrowserThread::IO, |
FROM_HERE, |
base::Bind(&GCMClientMock::MessageReceived, |
- base::Unretained(this), |
+ weak_ptr_factory_.GetWeakPtr(), |
app_id, |
message)); |
} |
@@ -93,22 +119,10 @@ |
content::BrowserThread::IO, |
FROM_HERE, |
base::Bind(&GCMClientMock::MessagesDeleted, |
- base::Unretained(this), |
+ weak_ptr_factory_.GetWeakPtr(), |
app_id)); |
} |
-void GCMClientMock::SetReady() { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- DCHECK_EQ(status_, NOT_READY); |
- |
- status_ = READY; |
- content::BrowserThread::PostTask( |
- content::BrowserThread::IO, |
- FROM_HERE, |
- base::Bind(&GCMClientMock::SetReadyOnIO, |
- base::Unretained(this))); |
-} |
- |
// static |
std::string GCMClientMock::GetRegistrationIdFromSenderIds( |
const std::vector<std::string>& sender_ids) { |
@@ -131,6 +145,10 @@ |
return registration_id; |
} |
+void GCMClientMock::CheckinFinished() { |
+ delegate_->OnGCMReady(); |
+} |
+ |
void GCMClientMock::RegisterFinished(const std::string& app_id, |
const std::string& registrion_id) { |
delegate_->OnRegisterFinished( |
@@ -146,7 +164,7 @@ |
base::MessageLoop::current()->PostDelayedTask( |
FROM_HERE, |
base::Bind(&GCMClientMock::MessageSendError, |
- base::Unretained(this), |
+ weak_ptr_factory_.GetWeakPtr(), |
app_id, |
message_id), |
base::TimeDelta::FromMilliseconds(200)); |
@@ -170,8 +188,4 @@ |
delegate_->OnMessageSendError(app_id, message_id, NETWORK_ERROR); |
} |
-void GCMClientMock::SetReadyOnIO() { |
- delegate_->OnGCMReady(); |
-} |
- |
} // namespace gcm |