| Index: components/invalidation/impl/gcm_invalidation_bridge.cc
|
| diff --git a/components/invalidation/impl/gcm_invalidation_bridge.cc b/components/invalidation/impl/gcm_invalidation_bridge.cc
|
| index c97ba93b14466dbedbc1d21c491859ce5c35b634..9909ef4ca4ed1a0a13dc2e44f8326b7cad9f90d5 100644
|
| --- a/components/invalidation/impl/gcm_invalidation_bridge.cc
|
| +++ b/components/invalidation/impl/gcm_invalidation_bridge.cc
|
| @@ -35,8 +35,7 @@ const char kEchoTokenKey[] = "echo-token";
|
| // Core should be very simple class that implements GCMNetwrokChannelDelegate
|
| // and passes all calls to GCMInvalidationBridge. All calls should be serialized
|
| // through GCMInvalidationBridge to avoid race conditions.
|
| -class GCMInvalidationBridge::Core : public syncer::GCMNetworkChannelDelegate,
|
| - public base::NonThreadSafe {
|
| +class GCMInvalidationBridge::Core : public syncer::GCMNetworkChannelDelegate {
|
| public:
|
| Core(base::WeakPtr<GCMInvalidationBridge> bridge,
|
| scoped_refptr<base::SingleThreadTaskRunner> ui_thread_task_runner);
|
| @@ -72,6 +71,8 @@ class GCMInvalidationBridge::Core : public syncer::GCMNetworkChannelDelegate,
|
| ConnectionStateCallback connection_state_callback_;
|
| base::Closure store_reset_callback_;
|
|
|
| + SEQUENCE_CHECKER(sequence_checker_);
|
| +
|
| base::WeakPtrFactory<Core> weak_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(Core);
|
| @@ -84,7 +85,7 @@ GCMInvalidationBridge::Core::Core(
|
| ui_thread_task_runner_(ui_thread_task_runner),
|
| weak_factory_(this) {
|
| // Core is created on UI thread but all calls happen on IO thread.
|
| - DetachFromThread();
|
| + DETACH_FROM_SEQUENCE(sequence_checker_);
|
| }
|
|
|
| GCMInvalidationBridge::Core::~Core() {}
|
| @@ -92,7 +93,7 @@ GCMInvalidationBridge::Core::~Core() {}
|
| void GCMInvalidationBridge::Core::Initialize(
|
| ConnectionStateCallback connection_state_callback,
|
| base::Closure store_reset_callback) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| connection_state_callback_ = connection_state_callback;
|
| store_reset_callback_ = store_reset_callback;
|
| // Pass core WeapPtr and TaskRunner to GCMInvalidationBridge for it to be able
|
| @@ -106,21 +107,21 @@ void GCMInvalidationBridge::Core::Initialize(
|
| }
|
|
|
| void GCMInvalidationBridge::Core::RequestToken(RequestTokenCallback callback) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| ui_thread_task_runner_->PostTask(
|
| FROM_HERE,
|
| base::Bind(&GCMInvalidationBridge::RequestToken, bridge_, callback));
|
| }
|
|
|
| void GCMInvalidationBridge::Core::InvalidateToken(const std::string& token) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| ui_thread_task_runner_->PostTask(
|
| FROM_HERE,
|
| base::Bind(&GCMInvalidationBridge::InvalidateToken, bridge_, token));
|
| }
|
|
|
| void GCMInvalidationBridge::Core::Register(RegisterCallback callback) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| ui_thread_task_runner_->PostTask(
|
| FROM_HERE,
|
| base::Bind(&GCMInvalidationBridge::Register, bridge_, callback));
|
| @@ -138,7 +139,7 @@ void GCMInvalidationBridge::Core::RequestTokenFinished(
|
| RequestTokenCallback callback,
|
| const GoogleServiceAuthError& error,
|
| const std::string& token) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| callback.Run(error, token);
|
| }
|
|
|
| @@ -146,7 +147,7 @@ void GCMInvalidationBridge::Core::RegisterFinished(
|
| RegisterCallback callback,
|
| const std::string& registration_id,
|
| gcm::GCMClient::Result result) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| callback.Run(registration_id, result);
|
| }
|
|
|
| @@ -179,6 +180,7 @@ GCMInvalidationBridge::GCMInvalidationBridge(
|
| weak_factory_(this) {}
|
|
|
| GCMInvalidationBridge::~GCMInvalidationBridge() {
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| if (subscribed_for_incoming_messages_) {
|
| gcm_driver_->RemoveAppHandler(kInvalidationsAppId);
|
| gcm_driver_->RemoveConnectionObserver(this);
|
| @@ -187,7 +189,7 @@ GCMInvalidationBridge::~GCMInvalidationBridge() {
|
|
|
| std::unique_ptr<syncer::GCMNetworkChannelDelegate>
|
| GCMInvalidationBridge::CreateDelegate() {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| return base::MakeUnique<Core>(weak_factory_.GetWeakPtr(),
|
| base::ThreadTaskRunnerHandle::Get());
|
| }
|
| @@ -195,14 +197,14 @@ GCMInvalidationBridge::CreateDelegate() {
|
| void GCMInvalidationBridge::CoreInitializationDone(
|
| base::WeakPtr<Core> core,
|
| scoped_refptr<base::SingleThreadTaskRunner> core_thread_task_runner) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| core_ = core;
|
| core_thread_task_runner_ = core_thread_task_runner;
|
| }
|
|
|
| void GCMInvalidationBridge::RequestToken(
|
| syncer::GCMNetworkChannelDelegate::RequestTokenCallback callback) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| if (access_token_request_ != NULL) {
|
| // Report previous request as cancelled.
|
| GoogleServiceAuthError error(GoogleServiceAuthError::REQUEST_CANCELED);
|
| @@ -226,7 +228,7 @@ void GCMInvalidationBridge::OnGetTokenSuccess(
|
| const OAuth2TokenService::Request* request,
|
| const std::string& access_token,
|
| const base::Time& expiration_time) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| DCHECK_EQ(access_token_request_.get(), request);
|
| core_thread_task_runner_->PostTask(
|
| FROM_HERE,
|
| @@ -242,7 +244,7 @@ void GCMInvalidationBridge::OnGetTokenSuccess(
|
| void GCMInvalidationBridge::OnGetTokenFailure(
|
| const OAuth2TokenService::Request* request,
|
| const GoogleServiceAuthError& error) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| DCHECK_EQ(access_token_request_.get(), request);
|
| core_thread_task_runner_->PostTask(
|
| FROM_HERE,
|
| @@ -256,7 +258,7 @@ void GCMInvalidationBridge::OnGetTokenFailure(
|
| }
|
|
|
| void GCMInvalidationBridge::InvalidateToken(const std::string& token) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| OAuth2TokenService::ScopeSet scopes;
|
| scopes.insert(GaiaConstants::kChromeSyncOAuth2Scope);
|
| identity_provider_->GetTokenService()->InvalidateAccessToken(
|
| @@ -265,7 +267,7 @@ void GCMInvalidationBridge::InvalidateToken(const std::string& token) {
|
|
|
| void GCMInvalidationBridge::Register(
|
| syncer::GCMNetworkChannelDelegate::RegisterCallback callback) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| // No-op if GCMClient is disabled.
|
| if (gcm_driver_ == NULL)
|
| return;
|
| @@ -283,7 +285,7 @@ void GCMInvalidationBridge::RegisterFinished(
|
| syncer::GCMNetworkChannelDelegate::RegisterCallback callback,
|
| const std::string& registration_id,
|
| gcm::GCMClient::Result result) {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| core_thread_task_runner_->PostTask(
|
| FROM_HERE,
|
| base::Bind(&GCMInvalidationBridge::Core::RegisterFinished,
|
| @@ -294,7 +296,7 @@ void GCMInvalidationBridge::RegisterFinished(
|
| }
|
|
|
| void GCMInvalidationBridge::Unregister() {
|
| - DCHECK(CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| // No-op if GCMClient is disabled.
|
| if (gcm_driver_ == NULL)
|
| return;
|
|
|