Index: sync/notifier/chrome_invalidation_client.cc |
diff --git a/sync/notifier/chrome_invalidation_client.cc b/sync/notifier/chrome_invalidation_client.cc |
index 8b9cd4fda6765a1429de57e1e0b30720ac7b4a59..6ec46595a0df5420ca9f347dc42252cc9779bf22 100644 |
--- a/sync/notifier/chrome_invalidation_client.cc |
+++ b/sync/notifier/chrome_invalidation_client.cc |
@@ -7,10 +7,10 @@ |
#include <string> |
#include <vector> |
+#include "base/callback.h" |
#include "base/compiler_specific.h" |
#include "base/logging.h" |
#include "base/tracked_objects.h" |
-#include "google/cacheinvalidation/include/invalidation-client-factory.h" |
#include "google/cacheinvalidation/include/invalidation-client.h" |
#include "google/cacheinvalidation/include/types.h" |
#include "google/cacheinvalidation/types.pb.h" |
@@ -48,6 +48,8 @@ ChromeInvalidationClient::~ChromeInvalidationClient() { |
} |
void ChromeInvalidationClient::Start( |
+ const CreateInvalidationClientCallback& |
+ create_invalidation_client_callback, |
const std::string& client_id, const std::string& client_info, |
const std::string& state, |
const InvalidationVersionMap& initial_max_invalidation_versions, |
@@ -85,7 +87,7 @@ void ChromeInvalidationClient::Start( |
int client_type = ipc::invalidation::ClientType::CHROME_SYNC; |
invalidation_client_.reset( |
- invalidation::CreateInvalidationClient( |
+ create_invalidation_client_callback.Run( |
&chrome_system_resources_, client_type, client_id, |
kApplicationName, this)); |
invalidation_client_->Start(); |
@@ -100,23 +102,25 @@ void ChromeInvalidationClient::UpdateCredentials( |
chrome_system_resources_.network()->UpdateCredentials(email, token); |
} |
-void ChromeInvalidationClient::RegisterIds(const ObjectIdSet& ids) { |
+void ChromeInvalidationClient::UpdateRegisteredIds(const ObjectIdSet& ids) { |
DCHECK(CalledOnValidThread()); |
registered_ids_ = ids; |
// |ticl_state_| can go to NO_NOTIFICATION_ERROR even without a |
// working XMPP connection (as observed by us), so check it instead |
// of GetState() (see http://crbug.com/139424). |
if (ticl_state_ == NO_NOTIFICATION_ERROR && registration_manager_.get()) { |
- registration_manager_->SetRegisteredIds(registered_ids_); |
+ registration_manager_->UpdateRegisteredIds(registered_ids_); |
} |
// TODO(akalin): Clear invalidation versions for unregistered types. |
} |
void ChromeInvalidationClient::Ready( |
invalidation::InvalidationClient* client) { |
+ DCHECK(CalledOnValidThread()); |
+ DCHECK_EQ(client, invalidation_client_.get()); |
ticl_state_ = NO_NOTIFICATION_ERROR; |
EmitStateChange(); |
- registration_manager_->SetRegisteredIds(registered_ids_); |
+ registration_manager_->UpdateRegisteredIds(registered_ids_); |
} |
void ChromeInvalidationClient::Invalidate( |
@@ -124,6 +128,7 @@ void ChromeInvalidationClient::Invalidate( |
const invalidation::Invalidation& invalidation, |
const invalidation::AckHandle& ack_handle) { |
DCHECK(CalledOnValidThread()); |
+ DCHECK_EQ(client, invalidation_client_.get()); |
DVLOG(1) << "Invalidate: " << InvalidationToString(invalidation); |
const invalidation::ObjectId& id = invalidation.object_id(); |
@@ -170,6 +175,7 @@ void ChromeInvalidationClient::InvalidateUnknownVersion( |
const invalidation::ObjectId& object_id, |
const invalidation::AckHandle& ack_handle) { |
DCHECK(CalledOnValidThread()); |
+ DCHECK_EQ(client, invalidation_client_.get()); |
DVLOG(1) << "InvalidateUnknownVersion"; |
ObjectIdPayloadMap id_payloads; |
@@ -186,6 +192,7 @@ void ChromeInvalidationClient::InvalidateAll( |
invalidation::InvalidationClient* client, |
const invalidation::AckHandle& ack_handle) { |
DCHECK(CalledOnValidThread()); |
+ DCHECK_EQ(client, invalidation_client_.get()); |
DVLOG(1) << "InvalidateAll"; |
ObjectIdPayloadMap id_payloads; |
@@ -210,6 +217,7 @@ void ChromeInvalidationClient::InformRegistrationStatus( |
const invalidation::ObjectId& object_id, |
InvalidationListener::RegistrationState new_state) { |
DCHECK(CalledOnValidThread()); |
+ DCHECK_EQ(client, invalidation_client_.get()); |
DVLOG(1) << "InformRegistrationStatus: " |
<< ObjectIdToString(object_id) << " " << new_state; |
@@ -225,6 +233,7 @@ void ChromeInvalidationClient::InformRegistrationFailure( |
bool is_transient, |
const std::string& error_message) { |
DCHECK(CalledOnValidThread()); |
+ DCHECK_EQ(client, invalidation_client_.get()); |
DVLOG(1) << "InformRegistrationFailure: " |
<< ObjectIdToString(object_id) |
<< "is_transient=" << is_transient |
@@ -248,6 +257,7 @@ void ChromeInvalidationClient::ReissueRegistrations( |
const std::string& prefix, |
int prefix_length) { |
DCHECK(CalledOnValidThread()); |
+ DCHECK_EQ(client, invalidation_client_.get()); |
DVLOG(1) << "AllRegistrationsLost"; |
registration_manager_->MarkAllRegistrationsLost(); |
} |
@@ -255,6 +265,8 @@ void ChromeInvalidationClient::ReissueRegistrations( |
void ChromeInvalidationClient::InformError( |
invalidation::InvalidationClient* client, |
const invalidation::ErrorInfo& error_info) { |
+ DCHECK(CalledOnValidThread()); |
+ DCHECK_EQ(client, invalidation_client_.get()); |
LOG(ERROR) << "Ticl error " << error_info.error_reason() << ": " |
<< error_info.error_message() |
<< " (transient = " << error_info.is_transient() << ")"; |
@@ -273,6 +285,11 @@ void ChromeInvalidationClient::WriteState(const std::string& state) { |
FROM_HERE, &InvalidationStateTracker::SetInvalidationState, state); |
} |
+void ChromeInvalidationClient::StopForTest() { |
+ DCHECK(CalledOnValidThread()); |
+ Stop(); |
+} |
+ |
void ChromeInvalidationClient::Stop() { |
DCHECK(CalledOnValidThread()); |
if (!invalidation_client_.get()) { |