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

Unified Diff: chrome/browser/sync/notifier/listener/talk_mediator_impl.h

Issue 194065: Initial commit of sync engine code to browser/sync.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Fixes to gtest include path, reverted syncapi. Created 11 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/notifier/listener/talk_mediator_impl.h
===================================================================
--- chrome/browser/sync/notifier/listener/talk_mediator_impl.h (revision 0)
+++ chrome/browser/sync/notifier/listener/talk_mediator_impl.h (revision 0)
@@ -0,0 +1,117 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This class is the interface between talk code and the client code proper
+// It will manage all aspects of the connection and call back into the client
+// when it needs attention (for instance if updates are available for syncing).
+
+#ifndef CHROME_BROWSER_SYNC_NOTIFIER_LISTENER_TALK_MEDIATOR_IMPL_H_
+#define CHROME_BROWSER_SYNC_NOTIFIER_LISTENER_TALK_MEDIATOR_IMPL_H_
+
+#include <string>
+
+#include "base/scoped_ptr.h"
+#include "chrome/browser/sync/engine/auth_watcher.h"
+#include "chrome/browser/sync/notifier/listener/mediator_thread.h"
+#include "chrome/browser/sync/notifier/listener/talk_mediator.h"
+#include "talk/xmpp/xmppclientsettings.h"
+#include "testing/gtest/include/gtest/gtest_prod.h" // For FRIEND_TEST
+
+class EventListenerHookup;
+
+namespace browser_sync {
+class AuthWatcher;
+struct AuthWatcherEvent;
+class SyncerThread;
+
+class TalkMediatorImpl
+ : public TalkMediator,
+ public sigslot::has_slots<> {
+ public:
+ TalkMediatorImpl();
+ explicit TalkMediatorImpl(MediatorThread* thread);
+ virtual ~TalkMediatorImpl();
+
+ // Overriden from TalkMediator.
+ virtual void WatchAuthWatcher(AuthWatcher* auth_watcher);
+ virtual bool SetAuthToken(const std::string& email,
+ const std::string& token);
+ virtual bool Login();
+ virtual bool Logout();
+
+ virtual bool SendNotification();
+
+ TalkMediatorChannel* channel() const;
+
+ private:
+ struct TalkMediatorState {
+ TalkMediatorState()
+ : started(0), connected(0), initialized(0), logged_in(0),
+ subscribed(0) {
+ }
+
+ unsigned int started : 1; // Background thread has started.
+ unsigned int connected : 1; // Connected to the mediator thread signal.
+ unsigned int initialized : 1; // Initialized with login information.
+ unsigned int logged_in : 1; // Logged in the mediator's authenticator.
+ unsigned int subscribed : 1; // Subscribed to the xmpp receiving channel.
+ };
+
+ typedef PThreadScopedLock<PThreadMutex> MutexLock;
+
+ // Completes common initialization between the constructors. Set should
+ // connect to true if the talk mediator should connect to the controlled
+ // mediator thread's SignalStateChange object.
+ void TalkMediatorInitialization(bool should_connect);
+
+ // Called from the authwatcher after authentication completes. Signals this
+ // class to push listening and subscription events to the mediator thread.
+ void AuthWatcherEventHandler(const AuthWatcherEvent& auth_event);
+
+ // Callback for the mediator thread.
+ void MediatorThreadMessageHandler(MediatorThread::MediatorMessage message);
+
+ // Responses to messages from the MediatorThread.
+ void OnNotificationReceived();
+ void OnNotificationSent();
+ void OnLogin();
+ void OnLogout();
+ void OnSubscriptionFailure();
+ void OnSubscriptionSuccess();
+
+ // Does the actual login funcationality, called from Login() and the
+ // AuthWatcher event handler.
+ bool DoLogin();
+
+ // Mutex for synchronizing event access. This class listens to two event
+ // sources, Authwatcher and MediatorThread. It can also be called by through
+ // the TalkMediatorInteface. All these access points are serialized by
+ // this mutex.
+ PThreadMutex mutex_;
+
+ // Internal state.
+ TalkMediatorState state_;
+
+ // Cached and verfied from the SetAuthToken method.
+ buzz::XmppClientSettings xmpp_settings_;
+
+ // Interface to listen to authentication events.
+ scoped_ptr<EventListenerHookup> auth_hookup_;
+
+ // The worker thread through which talk events are posted and received.
+ scoped_ptr<MediatorThread> mediator_thread_;
+
+ // Channel through which to broadcast events.
+ scoped_ptr<TalkMediatorChannel> channel_;
+
+ FRIEND_TEST(TalkMediatorImplTest, SetAuthTokenWithBadInput);
+ FRIEND_TEST(TalkMediatorImplTest, SetAuthTokenWithGoodInput);
+ FRIEND_TEST(TalkMediatorImplTest, SendNotification);
+ FRIEND_TEST(TalkMediatorImplTest, MediatorThreadCallbacks);
+ DISALLOW_COPY_AND_ASSIGN(TalkMediatorImpl);
+};
+
+} // namespace browser_sync
+
+#endif // CHROME_BROWSER_SYNC_NOTIFIER_LISTENER_TALK_MEDIATOR_IMPL_H_
Property changes on: chrome\browser\sync\notifier\listener\talk_mediator_impl.h
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698