Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Side by Side Diff: sync/notifier/chrome_invalidation_client.h

Issue 10545170: [Sync] Propagate XMPP auth errors to SyncNotifierObservers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix deps, win compile error Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sync/internal_api/syncapi_unittest.cc ('k') | sync/notifier/chrome_invalidation_client.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // A simple wrapper around invalidation::InvalidationClient that 5 // A simple wrapper around invalidation::InvalidationClient that
6 // handles all the startup/shutdown details and hookups. 6 // handles all the startup/shutdown details and hookups.
7 7
8 #ifndef SYNC_NOTIFIER_CHROME_INVALIDATION_CLIENT_H_ 8 #ifndef SYNC_NOTIFIER_CHROME_INVALIDATION_CLIENT_H_
9 #define SYNC_NOTIFIER_CHROME_INVALIDATION_CLIENT_H_ 9 #define SYNC_NOTIFIER_CHROME_INVALIDATION_CLIENT_H_
10 #pragma once 10 #pragma once
11 11
12 #include <string> 12 #include <string>
13 13
14 #include "base/basictypes.h" 14 #include "base/basictypes.h"
15 #include "base/compiler_specific.h" 15 #include "base/compiler_specific.h"
16 #include "base/memory/scoped_ptr.h" 16 #include "base/memory/scoped_ptr.h"
17 #include "base/memory/weak_ptr.h" 17 #include "base/memory/weak_ptr.h"
18 #include "base/threading/non_thread_safe.h" 18 #include "base/threading/non_thread_safe.h"
19 #include "google/cacheinvalidation/include/invalidation-listener.h" 19 #include "google/cacheinvalidation/include/invalidation-listener.h"
20 #include "jingle/notifier/listener/push_client_observer.h"
20 #include "sync/internal_api/public/syncable/model_type.h" 21 #include "sync/internal_api/public/syncable/model_type.h"
21 #include "sync/internal_api/public/syncable/model_type_payload_map.h" 22 #include "sync/internal_api/public/syncable/model_type_payload_map.h"
22 #include "sync/internal_api/public/util/weak_handle.h" 23 #include "sync/internal_api/public/util/weak_handle.h"
23 #include "sync/notifier/chrome_system_resources.h" 24 #include "sync/notifier/chrome_system_resources.h"
24 #include "sync/notifier/invalidation_state_tracker.h" 25 #include "sync/notifier/invalidation_state_tracker.h"
26 #include "sync/notifier/notifications_disabled_reason.h"
25 #include "sync/notifier/state_writer.h" 27 #include "sync/notifier/state_writer.h"
26 28
27 namespace buzz { 29 namespace buzz {
28 class XmppTaskParentInterface; 30 class XmppTaskParentInterface;
29 } // namespace buzz 31 } // namespace buzz
30 32
31 namespace notifier { 33 namespace notifier {
32 class PushClient; 34 class PushClient;
33 } // namespace notifier 35 } // namespace notifier
34 36
35 namespace sync_notifier { 37 namespace sync_notifier {
36 38
37 using invalidation::InvalidationListener; 39 using invalidation::InvalidationListener;
38 40
39 class RegistrationManager; 41 class RegistrationManager;
40 42
41 // ChromeInvalidationClient is not thread-safe and lives on the sync 43 // ChromeInvalidationClient is not thread-safe and lives on the sync
42 // thread. 44 // thread.
43 class ChromeInvalidationClient 45 class ChromeInvalidationClient
44 : public InvalidationListener, 46 : public InvalidationListener,
45 public StateWriter, 47 public StateWriter,
48 public notifier::PushClientObserver,
46 public base::NonThreadSafe { 49 public base::NonThreadSafe {
47 public: 50 public:
48 class Listener { 51 class Listener {
49 public: 52 public:
50 virtual ~Listener(); 53 virtual ~Listener();
51 54
52 virtual void OnInvalidate( 55 virtual void OnInvalidate(
53 const syncable::ModelTypePayloadMap& type_payloads) = 0; 56 const syncable::ModelTypePayloadMap& type_payloads) = 0;
54 57
55 virtual void OnSessionStatusChanged(bool has_session) = 0; 58 virtual void OnNotificationsEnabled() = 0;
59
60 virtual void OnNotificationsDisabled(
61 NotificationsDisabledReason reason) = 0;
56 }; 62 };
57 63
58 explicit ChromeInvalidationClient( 64 explicit ChromeInvalidationClient(
59 scoped_ptr<notifier::PushClient> push_client); 65 scoped_ptr<notifier::PushClient> push_client);
60 66
61 // Calls Stop(). 67 // Calls Stop().
62 virtual ~ChromeInvalidationClient(); 68 virtual ~ChromeInvalidationClient();
63 69
64 // Does not take ownership of |listener| or |state_writer|. 70 // Does not take ownership of |listener| or |state_writer|.
65 // |invalidation_state_tracker| must be initialized. 71 // |invalidation_state_tracker| must be initialized.
66 void Start( 72 void Start(
67 const std::string& client_id, const std::string& client_info, 73 const std::string& client_id, const std::string& client_info,
68 const std::string& state, 74 const std::string& state,
69 const InvalidationVersionMap& initial_max_invalidation_versions, 75 const InvalidationVersionMap& initial_max_invalidation_versions,
70 const browser_sync::WeakHandle<InvalidationStateTracker>& 76 const browser_sync::WeakHandle<InvalidationStateTracker>&
71 invalidation_state_tracker, 77 invalidation_state_tracker,
72 Listener* listener); 78 Listener* listener);
73 79
74 void UpdateCredentials(const std::string& email, const std::string& token); 80 void UpdateCredentials(const std::string& email, const std::string& token);
75 81
76 // Register the sync types that we're interested in getting 82 // Register the sync types that we're interested in getting
77 // notifications for. May be called at any time. 83 // notifications for. May be called at any time.
78 void RegisterTypes(syncable::ModelTypeSet types); 84 void RegisterTypes(syncable::ModelTypeSet types);
79 85
80 virtual void WriteState(const std::string& state) OVERRIDE;
81
82 // invalidation::InvalidationListener implementation. 86 // invalidation::InvalidationListener implementation.
83 virtual void Ready( 87 virtual void Ready(
84 invalidation::InvalidationClient* client) OVERRIDE; 88 invalidation::InvalidationClient* client) OVERRIDE;
85 virtual void Invalidate( 89 virtual void Invalidate(
86 invalidation::InvalidationClient* client, 90 invalidation::InvalidationClient* client,
87 const invalidation::Invalidation& invalidation, 91 const invalidation::Invalidation& invalidation,
88 const invalidation::AckHandle& ack_handle) OVERRIDE; 92 const invalidation::AckHandle& ack_handle) OVERRIDE;
89 virtual void InvalidateUnknownVersion( 93 virtual void InvalidateUnknownVersion(
90 invalidation::InvalidationClient* client, 94 invalidation::InvalidationClient* client,
91 const invalidation::ObjectId& object_id, 95 const invalidation::ObjectId& object_id,
(...skipping 11 matching lines...) Expand all
103 bool is_transient, 107 bool is_transient,
104 const std::string& error_message) OVERRIDE; 108 const std::string& error_message) OVERRIDE;
105 virtual void ReissueRegistrations( 109 virtual void ReissueRegistrations(
106 invalidation::InvalidationClient* client, 110 invalidation::InvalidationClient* client,
107 const std::string& prefix, 111 const std::string& prefix,
108 int prefix_length) OVERRIDE; 112 int prefix_length) OVERRIDE;
109 virtual void InformError( 113 virtual void InformError(
110 invalidation::InvalidationClient* client, 114 invalidation::InvalidationClient* client,
111 const invalidation::ErrorInfo& error_info) OVERRIDE; 115 const invalidation::ErrorInfo& error_info) OVERRIDE;
112 116
117 // StateWriter implementation.
118 virtual void WriteState(const std::string& state) OVERRIDE;
119
120 // notifier::PushClientObserver implementation.
121 virtual void OnNotificationsEnabled() OVERRIDE;
122 virtual void OnNotificationsDisabled(
123 notifier::NotificationsDisabledReason reason) OVERRIDE;
124 virtual void OnIncomingNotification(
125 const notifier::Notification& notification) OVERRIDE;
126
113 private: 127 private:
114 friend class ChromeInvalidationClientTest; 128 friend class ChromeInvalidationClientTest;
115 129
116 void Stop(); 130 void Stop();
117 131
132 NotificationsDisabledReason GetState() const;
133
134 void EmitStateChange();
135
118 void EmitInvalidation( 136 void EmitInvalidation(
119 syncable::ModelTypeSet types, const std::string& payload); 137 syncable::ModelTypeSet types, const std::string& payload);
120 138
139 // Owned by |chrome_system_resources_|.
140 notifier::PushClient* const push_client_;
121 ChromeSystemResources chrome_system_resources_; 141 ChromeSystemResources chrome_system_resources_;
122 InvalidationVersionMap max_invalidation_versions_; 142 InvalidationVersionMap max_invalidation_versions_;
123 browser_sync::WeakHandle<InvalidationStateTracker> 143 browser_sync::WeakHandle<InvalidationStateTracker>
124 invalidation_state_tracker_; 144 invalidation_state_tracker_;
125 Listener* listener_; 145 Listener* listener_;
126 scoped_ptr<invalidation::InvalidationClient> invalidation_client_; 146 scoped_ptr<invalidation::InvalidationClient> invalidation_client_;
127 scoped_ptr<RegistrationManager> registration_manager_; 147 scoped_ptr<RegistrationManager> registration_manager_;
128 // Stored to pass to |registration_manager_| on start. 148 // Stored to pass to |registration_manager_| on start.
129 syncable::ModelTypeSet registered_types_; 149 syncable::ModelTypeSet registered_types_;
130 bool ticl_ready_; 150
151 // The states of the ticl and the push client (with
152 // NO_NOTIFICATION_ERROR meaning notifications are enabled).
153 NotificationsDisabledReason ticl_state_;
rlarocque 2012/06/18 18:14:14 optional: Could you remove these? A common patter
154 NotificationsDisabledReason push_client_state_;
131 155
132 DISALLOW_COPY_AND_ASSIGN(ChromeInvalidationClient); 156 DISALLOW_COPY_AND_ASSIGN(ChromeInvalidationClient);
133 }; 157 };
134 158
135 } // namespace sync_notifier 159 } // namespace sync_notifier
136 160
137 #endif // SYNC_NOTIFIER_CHROME_INVALIDATION_CLIENT_H_ 161 #endif // SYNC_NOTIFIER_CHROME_INVALIDATION_CLIENT_H_
OLDNEW
« no previous file with comments | « sync/internal_api/syncapi_unittest.cc ('k') | sync/notifier/chrome_invalidation_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698