diff options
author | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-24 22:31:48 +0000 |
---|---|---|
committer | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-24 22:31:48 +0000 |
commit | 0a80fed149df03558c03fa5820dc2173528398f9 (patch) | |
tree | 53d84752078389454802c85ed944247592879c32 /chrome/browser/sync/notifier/invalidation_notifier.h | |
parent | c4dac57959faeafa6fb6158382fa7fb899d0bc6d (diff) | |
download | chromium_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.h | 96 |
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_ |