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

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

Issue 1956001: Moved XMPP notifier library from chrome/browser/sync to chrome/common.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 8 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.cc
===================================================================
--- chrome/browser/sync/notifier/listener/talk_mediator_impl.cc (revision 46353)
+++ chrome/browser/sync/notifier/listener/talk_mediator_impl.cc (working copy)
@@ -1,257 +0,0 @@
-// 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.
-
-#include "chrome/browser/sync/notifier/listener/talk_mediator_impl.h"
-
-#include "base/logging.h"
-#include "base/singleton.h"
-#include "chrome/browser/sync/notifier/listener/mediator_thread_impl.h"
-#include "chrome/common/deprecated/event_sys-inl.h"
-#include "talk/base/cryptstring.h"
-#include "talk/base/ssladapter.h"
-#include "talk/xmpp/xmppclientsettings.h"
-#include "talk/xmpp/xmppengine.h"
-
-namespace notifier {
-
-// Before any authorization event from TalkMediatorImpl, we need to initialize
-// the SSL library.
-class SslInitializationSingleton {
- public:
- virtual ~SslInitializationSingleton() {
- talk_base::CleanupSSL();
- };
-
- void RegisterClient() {}
-
- static SslInitializationSingleton* GetInstance() {
- return Singleton<SslInitializationSingleton>::get();
- }
-
- private:
- friend struct DefaultSingletonTraits<SslInitializationSingleton>;
-
- SslInitializationSingleton() {
- talk_base::InitializeSSL();
- };
-
- DISALLOW_COPY_AND_ASSIGN(SslInitializationSingleton);
-};
-
-TalkMediatorImpl::TalkMediatorImpl(bool invalidate_xmpp_auth_token)
- : mediator_thread_(new MediatorThreadImpl()),
- invalidate_xmpp_auth_token_(invalidate_xmpp_auth_token) {
- // Ensure the SSL library is initialized.
- SslInitializationSingleton::GetInstance()->RegisterClient();
-
- // Construct the callback channel with the shutdown event.
- TalkMediatorInitialization(false);
-}
-
-TalkMediatorImpl::TalkMediatorImpl(MediatorThread *thread)
- : mediator_thread_(thread),
- invalidate_xmpp_auth_token_(false) {
- // When testing we do not initialize the SSL library.
- TalkMediatorInitialization(true);
-}
-
-void TalkMediatorImpl::TalkMediatorInitialization(bool should_connect) {
- TalkMediatorEvent done = { TalkMediatorEvent::TALKMEDIATOR_DESTROYED };
- channel_.reset(new TalkMediatorChannel(done));
- if (should_connect) {
- mediator_thread_->SignalStateChange.connect(
- this,
- &TalkMediatorImpl::MediatorThreadMessageHandler);
- mediator_thread_->SignalNotificationReceived.connect(
- this,
- &TalkMediatorImpl::MediatorThreadNotificationHandler);
- state_.connected = 1;
- }
- mediator_thread_->Start();
- state_.started = 1;
-}
-
-TalkMediatorImpl::~TalkMediatorImpl() {
- if (state_.started) {
- Logout();
- }
-}
-
-bool TalkMediatorImpl::Login() {
- AutoLock lock(mutex_);
- // Connect to the mediator thread and start processing messages.
- if (!state_.connected) {
- mediator_thread_->SignalStateChange.connect(
- this,
- &TalkMediatorImpl::MediatorThreadMessageHandler);
- mediator_thread_->SignalNotificationReceived.connect(
- this,
- &TalkMediatorImpl::MediatorThreadNotificationHandler);
- state_.connected = 1;
- }
- if (state_.initialized && !state_.logging_in) {
- mediator_thread_->Login(xmpp_settings_);
- state_.logging_in = 1;
- return true;
- }
- return false;
-}
-
-bool TalkMediatorImpl::Logout() {
- AutoLock lock(mutex_);
- // We do not want to be called back during logout since we may be closing.
- if (state_.connected) {
- mediator_thread_->SignalStateChange.disconnect(this);
- mediator_thread_->SignalNotificationReceived.disconnect(this);
- state_.connected = 0;
- }
- if (state_.started) {
- mediator_thread_->Logout();
- state_.started = 0;
- state_.logging_in = 0;
- state_.logged_in = 0;
- state_.subscribed = 0;
- return true;
- }
- return false;
-}
-
-bool TalkMediatorImpl::SendNotification(const OutgoingNotificationData& data) {
- AutoLock lock(mutex_);
- if (state_.logged_in && state_.subscribed) {
- mediator_thread_->SendNotification(data);
- return true;
- }
- return false;
-}
-
-TalkMediatorChannel* TalkMediatorImpl::channel() const {
- return channel_.get();
-}
-
-bool TalkMediatorImpl::SetAuthToken(const std::string& email,
- const std::string& token,
- const std::string& token_service) {
- AutoLock lock(mutex_);
-
- // Verify that we can create a JID from the email provided.
- buzz::Jid jid = buzz::Jid(email);
- if (jid.node().empty() || !jid.IsValid()) {
- return false;
- }
-
- // Construct the XmppSettings object for login to buzz.
- xmpp_settings_.set_user(jid.node());
- xmpp_settings_.set_resource("chrome-sync");
- xmpp_settings_.set_host(jid.domain());
- xmpp_settings_.set_use_tls(true);
- xmpp_settings_.set_auth_cookie(invalidate_xmpp_auth_token_ ?
- token + "bogus" : token);
- xmpp_settings_.set_token_service(token_service);
-
- state_.initialized = 1;
- return true;
-}
-
-void TalkMediatorImpl::AddSubscribedServiceUrl(
- const std::string& service_url) {
- subscribed_services_list_.push_back(service_url);
- if (state_.logged_in) {
- LOG(INFO) << "Resubscribing for updates, a new service got added";
- mediator_thread_->SubscribeForUpdates(subscribed_services_list_);
- }
-}
-
-
-void TalkMediatorImpl::MediatorThreadMessageHandler(
- MediatorThread::MediatorMessage message) {
- LOG(INFO) << "P2P: MediatorThread has passed a message";
- switch (message) {
- case MediatorThread::MSG_LOGGED_IN:
- OnLogin();
- break;
- case MediatorThread::MSG_LOGGED_OUT:
- OnLogout();
- break;
- case MediatorThread::MSG_SUBSCRIPTION_SUCCESS:
- OnSubscriptionSuccess();
- break;
- case MediatorThread::MSG_SUBSCRIPTION_FAILURE:
- OnSubscriptionFailure();
- break;
- case MediatorThread::MSG_NOTIFICATION_SENT:
- OnNotificationSent();
- break;
- default:
- LOG(WARNING) << "P2P: Unknown message returned from mediator thread.";
- break;
- }
-}
-
-void TalkMediatorImpl::MediatorThreadNotificationHandler(
- const IncomingNotificationData& notification_data) {
- LOG(INFO) << "P2P: Updates are available on the server.";
- AutoLock lock(mutex_);
- TalkMediatorEvent event = { TalkMediatorEvent::NOTIFICATION_RECEIVED };
- event.notification_data = notification_data;
- channel_->NotifyListeners(event);
-}
-
-
-void TalkMediatorImpl::OnLogin() {
- LOG(INFO) << "P2P: Logged in.";
- AutoLock lock(mutex_);
- state_.logging_in = 0;
- state_.logged_in = 1;
- // ListenForUpdates enables the ListenTask. This is done before
- // SubscribeForUpdates.
- mediator_thread_->ListenForUpdates();
- // Now subscribe for updates to all the services we are interested in
- mediator_thread_->SubscribeForUpdates(subscribed_services_list_);
- TalkMediatorEvent event = { TalkMediatorEvent::LOGIN_SUCCEEDED };
- channel_->NotifyListeners(event);
-}
-
-void TalkMediatorImpl::OnLogout() {
- LOG(INFO) << "P2P: Logged off.";
- OnSubscriptionFailure();
- AutoLock lock(mutex_);
- state_.logging_in = 0;
- state_.logged_in = 0;
- TalkMediatorEvent event = { TalkMediatorEvent::LOGOUT_SUCCEEDED };
- channel_->NotifyListeners(event);
-}
-
-void TalkMediatorImpl::OnSubscriptionSuccess() {
- LOG(INFO) << "P2P: Update subscription active.";
- {
- AutoLock lock(mutex_);
- state_.subscribed = 1;
- }
- // The above scope exists so that we can release the lock before
- // notifying listeners. In theory we should do this for all methods.
- // Notifying listeners with a lock held can cause the lock to be
- // recursively taken if the listener decides to call back into us
- // in the event handler.
- TalkMediatorEvent event = { TalkMediatorEvent::SUBSCRIPTIONS_ON };
- channel_->NotifyListeners(event);
-}
-
-void TalkMediatorImpl::OnSubscriptionFailure() {
- LOG(INFO) << "P2P: Update subscription failure.";
- AutoLock lock(mutex_);
- state_.subscribed = 0;
- TalkMediatorEvent event = { TalkMediatorEvent::SUBSCRIPTIONS_OFF };
- channel_->NotifyListeners(event);
-}
-
-void TalkMediatorImpl::OnNotificationSent() {
- LOG(INFO) <<
- "P2P: Peers were notified that updates are available on the server.";
- AutoLock lock(mutex_);
- TalkMediatorEvent event = { TalkMediatorEvent::NOTIFICATION_SENT };
- channel_->NotifyListeners(event);
-}
-
-} // namespace notifier

Powered by Google App Engine
This is Rietveld 408576698