blob: 2319eef4f1c669d7a9c415f2cfb69f3f7e8a5520 [file] [log] [blame]
[email protected]24c9ee52014-06-02 22:17:501// Copyright 2014 The Chromium Authors. All rights reserved.
[email protected]08dd8312011-03-19 20:09:312// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]44828772014-06-06 02:56:525#include "components/invalidation/invalidation_notifier.h"
[email protected]08dd8312011-03-19 20:09:316
[email protected]8a50f992012-08-09 01:11:327#include "base/bind.h"
[email protected]0a80fed2011-03-24 22:31:488#include "base/logging.h"
[email protected]7ccb7072013-06-10 20:56:289#include "base/message_loop/message_loop_proxy.h"
[email protected]0857ae0b2012-05-31 00:39:2610#include "base/metrics/histogram.h"
[email protected]001bbfdc2014-07-17 19:28:4611#include "components/invalidation/invalidation_handler.h"
[email protected]8a50f992012-08-09 01:11:3212#include "google/cacheinvalidation/include/invalidation-client-factory.h"
[email protected]1f7eba72012-05-30 09:10:1713#include "jingle/notifier/listener/push_client.h"
[email protected]942e2022011-04-07 22:27:4314#include "net/url_request/url_request_context.h"
[email protected]08dd8312011-03-19 20:09:3115
[email protected]65f173552012-06-28 22:43:5816namespace syncer {
[email protected]08dd8312011-03-19 20:09:3117
18InvalidationNotifier::InvalidationNotifier(
[email protected]04a830a2014-01-04 02:48:5119 scoped_ptr<SyncNetworkChannel> network_channel,
[email protected]d5511232013-03-28 01:34:5420 const std::string& invalidator_client_id,
[email protected]a7b16392013-11-26 22:46:2621 const UnackedInvalidationsMap& saved_invalidations,
[email protected]8cdb6892012-10-03 05:54:4022 const std::string& invalidation_bootstrap_data,
[email protected]5fe215c2014-08-09 06:04:2823 const base::WeakPtr<InvalidationStateTracker>& invalidation_state_tracker,
24 scoped_refptr<base::SingleThreadTaskRunner>
25 invalidation_state_tracker_task_runner,
[email protected]08dd8312011-03-19 20:09:3126 const std::string& client_info)
[email protected]0a80fed2011-03-24 22:31:4827 : state_(STOPPED),
[email protected]a7b16392013-11-26 22:46:2628 saved_invalidations_(saved_invalidations),
[email protected]46e43ee2012-05-18 19:24:4129 invalidation_state_tracker_(invalidation_state_tracker),
[email protected]5fe215c2014-08-09 06:04:2830 invalidation_state_tracker_task_runner_(
31 invalidation_state_tracker_task_runner),
[email protected]1f7eba72012-05-30 09:10:1732 client_info_(client_info),
[email protected]d5511232013-03-28 01:34:5433 invalidator_client_id_(invalidator_client_id),
[email protected]8cdb6892012-10-03 05:54:4034 invalidation_bootstrap_data_(invalidation_bootstrap_data),
[email protected]04a830a2014-01-04 02:48:5135 invalidation_listener_(network_channel.Pass()) {
[email protected]08dd8312011-03-19 20:09:3136}
37
38InvalidationNotifier::~InvalidationNotifier() {
[email protected]870bcb32012-06-11 22:27:5439 DCHECK(CalledOnValidThread());
[email protected]08dd8312011-03-19 20:09:3140}
41
[email protected]a329cb82012-08-28 03:17:5842void InvalidationNotifier::RegisterHandler(InvalidationHandler* handler) {
[email protected]85b25eb2012-08-10 19:32:0843 DCHECK(CalledOnValidThread());
44 registrar_.RegisterHandler(handler);
45}
46
[email protected]a329cb82012-08-28 03:17:5847void InvalidationNotifier::UpdateRegisteredIds(InvalidationHandler* handler,
[email protected]d914f022012-07-27 02:02:0048 const ObjectIdSet& ids) {
[email protected]870bcb32012-06-11 22:27:5449 DCHECK(CalledOnValidThread());
[email protected]85b25eb2012-08-10 19:32:0850 registrar_.UpdateRegisteredIds(handler, ids);
[email protected]1f7893fa2012-09-06 03:06:1351 invalidation_listener_.UpdateRegisteredIds(registrar_.GetAllRegisteredIds());
[email protected]85b25eb2012-08-10 19:32:0852}
53
[email protected]a329cb82012-08-28 03:17:5854void InvalidationNotifier::UnregisterHandler(InvalidationHandler* handler) {
[email protected]85b25eb2012-08-10 19:32:0855 DCHECK(CalledOnValidThread());
56 registrar_.UnregisterHandler(handler);
[email protected]08dd8312011-03-19 20:09:3157}
58
[email protected]08a6f9992012-09-07 19:19:1659InvalidatorState InvalidationNotifier::GetInvalidatorState() const {
60 DCHECK(CalledOnValidThread());
61 return registrar_.GetInvalidatorState();
62}
63
[email protected]08dd8312011-03-19 20:09:3164void InvalidationNotifier::UpdateCredentials(
65 const std::string& email, const std::string& token) {
[email protected]1f7eba72012-05-30 09:10:1766 if (state_ == STOPPED) {
[email protected]1f7893fa2012-09-06 03:06:1367 invalidation_listener_.Start(
[email protected]8a50f992012-08-09 01:11:3268 base::Bind(&invalidation::CreateInvalidationClient),
[email protected]5fe215c2014-08-09 06:04:2869 invalidator_client_id_,
70 client_info_,
71 invalidation_bootstrap_data_,
[email protected]a7b16392013-11-26 22:46:2672 saved_invalidations_,
[email protected]1f7eba72012-05-30 09:10:1773 invalidation_state_tracker_,
[email protected]5fe215c2014-08-09 06:04:2874 invalidation_state_tracker_task_runner_,
[email protected]0857ae0b2012-05-31 00:39:2675 this);
[email protected]1f7eba72012-05-30 09:10:1776 state_ = STARTED;
[email protected]08dd8312011-03-19 20:09:3177 }
[email protected]1f7893fa2012-09-06 03:06:1378 invalidation_listener_.UpdateCredentials(email, token);
[email protected]08dd8312011-03-19 20:09:3179}
80
[email protected]5cb5b182014-03-18 00:32:3981void InvalidationNotifier::RequestDetailedStatus(
[email protected]40848a92014-03-24 22:41:0282 base::Callback<void(const base::DictionaryValue&)> callback) const {
[email protected]5cb5b182014-03-18 00:32:3983 DCHECK(CalledOnValidThread());
84 invalidation_listener_.RequestDetailedStatus(callback);
85}
86
[email protected]3e31fa42012-10-04 03:53:0987void InvalidationNotifier::OnInvalidate(
88 const ObjectIdInvalidationMap& invalidation_map) {
[email protected]870bcb32012-06-11 22:27:5489 DCHECK(CalledOnValidThread());
[email protected]0d0b59d2013-02-02 00:24:4790 registrar_.DispatchInvalidationsToHandlers(invalidation_map);
[email protected]0a80fed2011-03-24 22:31:4891}
92
[email protected]08a6f9992012-09-07 19:19:1693void InvalidationNotifier::OnInvalidatorStateChange(InvalidatorState state) {
[email protected]2d3d1d12012-06-18 20:50:2894 DCHECK(CalledOnValidThread());
[email protected]08a6f9992012-09-07 19:19:1695 registrar_.UpdateInvalidatorState(state);
[email protected]0a80fed2011-03-24 22:31:4896}
[email protected]08dd8312011-03-19 20:09:3197
[email protected]65f173552012-06-28 22:43:5898} // namespace syncer