summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync/notifier/invalidation_notifier.h
diff options
context:
space:
mode:
authorakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-24 22:31:48 +0000
committerakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-24 22:31:48 +0000
commit0a80fed149df03558c03fa5820dc2173528398f9 (patch)
tree53d84752078389454802c85ed944247592879c32 /chrome/browser/sync/notifier/invalidation_notifier.h
parentc4dac57959faeafa6fb6158382fa7fb899d0bc6d (diff)
downloadchromium_src-0a80fed149df03558c03fa5820dc2173528398f9.zip
chromium_src-0a80fed149df03558c03fa5820dc2173528398f9.tar.gz
chromium_src-0a80fed149df03558c03fa5820dc2173528398f9.tar.bz2
[Sync] Delete ServerNotifierThread and refactor InvalidationNotifier
Basically replace the InvalidationNotifier/ServerNotifierThread combo with InvalidationNotifier and NonBlockingInvalidationNotifier. Some minor cleanup in jingle files. This finishes steps 1 and 2 in the bug. BUG=76764 TEST= Review URL: http://codereview.chromium.org/6696051 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@79334 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/sync/notifier/invalidation_notifier.h')
-rw-r--r--chrome/browser/sync/notifier/invalidation_notifier.h96
1 files changed, 76 insertions, 20 deletions
diff --git a/chrome/browser/sync/notifier/invalidation_notifier.h b/chrome/browser/sync/notifier/invalidation_notifier.h
index 6ee27e9..1a951d7 100644
--- a/chrome/browser/sync/notifier/invalidation_notifier.h
+++ b/chrome/browser/sync/notifier/invalidation_notifier.h
@@ -2,30 +2,50 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
-// A notifier that communicates to sync servers for server-issued
-// notifications.
+// An implementation of SyncNotifier that wraps an invalidation
+// client. Handles the details of connecting to XMPP and hooking it
+// up to the invalidation client.
+//
+// You probably don't want to use this directly; use
+// NonBlockingInvalidationNotifier.
#ifndef CHROME_BROWSER_SYNC_NOTIFIER_INVALIDATION_NOTIFIER_H_
#define CHROME_BROWSER_SYNC_NOTIFIER_INVALIDATION_NOTIFIER_H_
+#pragma once
#include <string>
+#include "base/basictypes.h"
#include "base/observer_list.h"
-#include "chrome/browser/sync/notifier/server_notifier_thread.h"
+#include "base/scoped_ptr.h"
+#include "base/threading/non_thread_safe.h"
+#include "chrome/browser/sync/notifier/chrome_invalidation_client.h"
#include "chrome/browser/sync/notifier/state_writer.h"
#include "chrome/browser/sync/notifier/sync_notifier.h"
#include "chrome/browser/sync/syncable/model_type.h"
#include "jingle/notifier/base/notifier_options.h"
+#include "jingle/notifier/communicator/login.h"
+#include "net/base/cert_verifier.h"
+
+namespace net {
+class HostResolver;
+class CertVerifier;
+} // namespace net
namespace sync_notifier {
class InvalidationNotifier
: public SyncNotifier,
- public StateWriter,
- public ServerNotifierThread::Observer {
+ public notifier::LoginDelegate,
+ public ChromeInvalidationClient::Listener,
+ public StateWriter {
public:
- InvalidationNotifier(const notifier::NotifierOptions& notifier_options,
- const std::string& client_info);
+ // Does not take ownership of |host_resolver| or |cert_verifier|.
+ InvalidationNotifier(
+ const notifier::NotifierOptions& notifier_options,
+ net::HostResolver* host_resolver,
+ net::CertVerifier* cert_verifier,
+ const std::string& client_info);
virtual ~InvalidationNotifier();
@@ -38,26 +58,62 @@ class InvalidationNotifier
virtual void UpdateEnabledTypes(const syncable::ModelTypeSet& types);
virtual void SendNotification();
+ // notifier::LoginDelegate implementation.
+ virtual void OnConnect(base::WeakPtr<talk_base::Task> base_task);
+ virtual void OnDisconnect();
+
+ // ChromeInvalidationClient::Listener implementation.
+ virtual void OnInvalidate(syncable::ModelType model_type,
+ const std::string& payload);
+ virtual void OnInvalidateAll();
+
// StateWriter implementation.
virtual void WriteState(const std::string& state);
- // ServerNotifierThread::Observer implementation.
- virtual void OnConnectionStateChange(bool logged_in);
- virtual void OnSubscriptionStateChange(bool subscribed);
- virtual void OnIncomingNotification(
- const notifier::Notification& notification);
- virtual void OnOutgoingNotification();
-
private:
+ void EmitInvalidation(const syncable::ModelTypeSet& types,
+ const std::string& payload);
+
+ base::NonThreadSafe non_thread_safe_;
+
+ // We start off in the STOPPED state. When we get our initial
+ // credentials, we connect and move to the CONNECTING state. When
+ // we're connected we start the invalidation client and move to the
+ // STARTED state. We never go back to a previous state.
+ enum State {
+ STOPPED,
+ CONNECTING,
+ STARTED
+ };
+ State state_;
+
+ // Used to build parameters for |login_|.
const notifier::NotifierOptions notifier_options_;
- // The actual notification listener.
- ServerNotifierThread server_notifier_thread_;
- // Whether we called Login() on |server_notifier_thread_| yet.
- bool logged_in_;
+ net::HostResolver* const host_resolver_;
+ net::CertVerifier* const cert_verifier_;
- ObserverList<SyncNotifierObserver> observer_list_;
+ // Passed to |invalidation_client_|.
+ const std::string client_info_;
+
+ // Our observers (which must live on the same thread).
+ ObserverList<SyncNotifierObserver> observers_;
+
+ // The state to pass to |chrome_invalidation_client_|.
+ std::string invalidation_state_;
+
+ // The XMPP connection manager.
+ scoped_ptr<notifier::Login> login_;
+
+ // The invalidation client.
+ ChromeInvalidationClient invalidation_client_;
+
+ // Passed to |invalidation_client_| and also used to synthesize
+ // notifications by OnInvalidateAll().
syncable::ModelTypeSet enabled_types_;
+
+ DISALLOW_COPY_AND_ASSIGN(InvalidationNotifier);
};
-}
+} // namespace sync_notifier
+
#endif // CHROME_BROWSER_SYNC_NOTIFIER_INVALIDATION_NOTIFIER_H_