| Index: sync/notifier/invalidation_notifier.cc
|
| diff --git a/sync/notifier/invalidation_notifier.cc b/sync/notifier/invalidation_notifier.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2ae6079557f7c2e6fcf32f62213cba986d2d36b8
|
| --- /dev/null
|
| +++ b/sync/notifier/invalidation_notifier.cc
|
| @@ -0,0 +1,93 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "sync/notifier/invalidation_notifier.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/logging.h"
|
| +#include "base/message_loop/message_loop_proxy.h"
|
| +#include "base/metrics/histogram.h"
|
| +#include "google/cacheinvalidation/include/invalidation-client-factory.h"
|
| +#include "jingle/notifier/listener/push_client.h"
|
| +#include "net/url_request/url_request_context.h"
|
| +#include "sync/notifier/invalidation_handler.h"
|
| +#include "talk/xmpp/jid.h"
|
| +#include "talk/xmpp/xmppclientsettings.h"
|
| +
|
| +namespace syncer {
|
| +
|
| +InvalidationNotifier::InvalidationNotifier(
|
| + scoped_ptr<SyncNetworkChannel> network_channel,
|
| + const std::string& invalidator_client_id,
|
| + const UnackedInvalidationsMap& saved_invalidations,
|
| + const std::string& invalidation_bootstrap_data,
|
| + const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker,
|
| + const std::string& client_info)
|
| + : state_(STOPPED),
|
| + saved_invalidations_(saved_invalidations),
|
| + invalidation_state_tracker_(invalidation_state_tracker),
|
| + client_info_(client_info),
|
| + invalidator_client_id_(invalidator_client_id),
|
| + invalidation_bootstrap_data_(invalidation_bootstrap_data),
|
| + invalidation_listener_(network_channel.Pass()) {
|
| +}
|
| +
|
| +InvalidationNotifier::~InvalidationNotifier() {
|
| + DCHECK(CalledOnValidThread());
|
| +}
|
| +
|
| +void InvalidationNotifier::RegisterHandler(InvalidationHandler* handler) {
|
| + DCHECK(CalledOnValidThread());
|
| + registrar_.RegisterHandler(handler);
|
| +}
|
| +
|
| +void InvalidationNotifier::UpdateRegisteredIds(InvalidationHandler* handler,
|
| + const ObjectIdSet& ids) {
|
| + DCHECK(CalledOnValidThread());
|
| + registrar_.UpdateRegisteredIds(handler, ids);
|
| + invalidation_listener_.UpdateRegisteredIds(registrar_.GetAllRegisteredIds());
|
| +}
|
| +
|
| +void InvalidationNotifier::UnregisterHandler(InvalidationHandler* handler) {
|
| + DCHECK(CalledOnValidThread());
|
| + registrar_.UnregisterHandler(handler);
|
| +}
|
| +
|
| +InvalidatorState InvalidationNotifier::GetInvalidatorState() const {
|
| + DCHECK(CalledOnValidThread());
|
| + return registrar_.GetInvalidatorState();
|
| +}
|
| +
|
| +void InvalidationNotifier::UpdateCredentials(
|
| + const std::string& email, const std::string& token) {
|
| + if (state_ == STOPPED) {
|
| + invalidation_listener_.Start(
|
| + base::Bind(&invalidation::CreateInvalidationClient),
|
| + invalidator_client_id_, client_info_, invalidation_bootstrap_data_,
|
| + saved_invalidations_,
|
| + invalidation_state_tracker_,
|
| + this);
|
| + state_ = STARTED;
|
| + }
|
| + invalidation_listener_.UpdateCredentials(email, token);
|
| +}
|
| +
|
| +void InvalidationNotifier::RequestDetailedStatus(
|
| + base::Callback<void(const base::DictionaryValue&)> callback) const {
|
| + DCHECK(CalledOnValidThread());
|
| + invalidation_listener_.RequestDetailedStatus(callback);
|
| +}
|
| +
|
| +void InvalidationNotifier::OnInvalidate(
|
| + const ObjectIdInvalidationMap& invalidation_map) {
|
| + DCHECK(CalledOnValidThread());
|
| + registrar_.DispatchInvalidationsToHandlers(invalidation_map);
|
| +}
|
| +
|
| +void InvalidationNotifier::OnInvalidatorStateChange(InvalidatorState state) {
|
| + DCHECK(CalledOnValidThread());
|
| + registrar_.UpdateInvalidatorState(state);
|
| +}
|
| +
|
| +} // namespace syncer
|
|
|