1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // An implementation of Invalidator that wraps an invalidation
6 // client. Handles the details of connecting to XMPP and hooking it
7 // up to the invalidation client.
9 // You probably don't want to use this directly; use
10 // NonBlockingInvalidator.
12 #ifndef SYNC_NOTIFIER_INVALIDATION_NOTIFIER_H_
13 #define SYNC_NOTIFIER_INVALIDATION_NOTIFIER_H_
17 #include "base/basictypes.h"
18 #include "base/compiler_specific.h"
19 #include "base/memory/scoped_ptr.h"
20 #include "base/threading/non_thread_safe.h"
21 #include "sync/base/sync_export.h"
22 #include "sync/internal_api/public/base/model_type.h"
23 #include "sync/internal_api/public/util/weak_handle.h"
24 #include "sync/notifier/invalidation_state_tracker.h"
25 #include "sync/notifier/invalidator.h"
26 #include "sync/notifier/invalidator_registrar.h"
27 #include "sync/notifier/sync_invalidation_listener.h"
31 } // namespace notifier
35 // This class must live on the IO thread.
36 class SYNC_EXPORT_PRIVATE InvalidationNotifier
38 public SyncInvalidationListener::Delegate
,
39 public base::NonThreadSafe
{
41 // |invalidation_state_tracker| must be initialized.
43 scoped_ptr
<SyncNetworkChannel
> network_channel
,
44 const std::string
& invalidator_client_id
,
45 const UnackedInvalidationsMap
& saved_invalidations
,
46 const std::string
& invalidation_bootstrap_data
,
47 const WeakHandle
<InvalidationStateTracker
>&
48 invalidation_state_tracker
,
49 const std::string
& client_info
);
51 virtual ~InvalidationNotifier();
53 // Invalidator implementation.
54 virtual void RegisterHandler(InvalidationHandler
* handler
) OVERRIDE
;
55 virtual void UpdateRegisteredIds(InvalidationHandler
* handler
,
56 const ObjectIdSet
& ids
) OVERRIDE
;
57 virtual void UnregisterHandler(InvalidationHandler
* handler
) OVERRIDE
;
58 virtual InvalidatorState
GetInvalidatorState() const OVERRIDE
;
59 virtual void UpdateCredentials(
60 const std::string
& email
, const std::string
& token
) OVERRIDE
;
62 // SyncInvalidationListener::Delegate implementation.
63 virtual void OnInvalidate(
64 const ObjectIdInvalidationMap
& invalidation_map
) OVERRIDE
;
65 virtual void OnInvalidatorStateChange(InvalidatorState state
) OVERRIDE
;
68 // We start off in the STOPPED state. When we get our initial
69 // credentials, we connect and move to the CONNECTING state. When
70 // we're connected we start the invalidation client and move to the
71 // STARTED state. We never go back to a previous state.
79 InvalidatorRegistrar registrar_
;
81 // Passed to |invalidation_listener_|.
82 const UnackedInvalidationsMap saved_invalidations_
;
84 // Passed to |invalidation_listener_|.
85 const WeakHandle
<InvalidationStateTracker
>
86 invalidation_state_tracker_
;
88 // Passed to |invalidation_listener_|.
89 const std::string client_info_
;
91 // The client ID to pass to |invalidation_listener_|.
92 const std::string invalidator_client_id_
;
94 // The initial bootstrap data to pass to |invalidation_listener_|.
95 const std::string invalidation_bootstrap_data_
;
97 // The invalidation listener.
98 SyncInvalidationListener invalidation_listener_
;
100 DISALLOW_COPY_AND_ASSIGN(InvalidationNotifier
);
103 } // namespace syncer
105 #endif // SYNC_NOTIFIER_INVALIDATION_NOTIFIER_H_