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

Unified Diff: jingle/notifier/listener/mediator_thread_impl.cc

Issue 10398051: [Sync] Replace TalkMediator*/MediatorThread* with PushClient (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments, fix test Created 8 years, 7 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
« no previous file with comments | « jingle/notifier/listener/mediator_thread_impl.h ('k') | jingle/notifier/listener/mediator_thread_mock.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: jingle/notifier/listener/mediator_thread_impl.cc
diff --git a/jingle/notifier/listener/mediator_thread_impl.cc b/jingle/notifier/listener/mediator_thread_impl.cc
deleted file mode 100644
index ea6d18d59fc1a233d45dbacdc9db6cc7ca883041..0000000000000000000000000000000000000000
--- a/jingle/notifier/listener/mediator_thread_impl.cc
+++ /dev/null
@@ -1,299 +0,0 @@
-// Copyright (c) 2012 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 "jingle/notifier/listener/mediator_thread_impl.h"
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/message_loop.h"
-#include "base/observer_list_threadsafe.h"
-#include "base/threading/thread.h"
-#include "jingle/notifier/base/const_communicator.h"
-#include "jingle/notifier/base/notifier_options_util.h"
-#include "jingle/notifier/base/task_pump.h"
-#include "jingle/notifier/communicator/login.h"
-#include "jingle/notifier/listener/push_notifications_listen_task.h"
-#include "jingle/notifier/listener/push_notifications_send_update_task.h"
-#include "jingle/notifier/listener/push_notifications_subscribe_task.h"
-#include "net/base/host_port_pair.h"
-#include "net/url_request/url_request_context.h"
-#include "net/url_request/url_request_context_getter.h"
-#include "talk/xmpp/xmppclientsettings.h"
-
-namespace notifier {
-
-class MediatorThreadImpl::Core
- : public base::RefCountedThreadSafe<MediatorThreadImpl::Core>,
- public LoginDelegate,
- public PushNotificationsListenTaskDelegate,
- public PushNotificationsSubscribeTaskDelegate {
- public:
- // Invoked on the caller thread.
- explicit Core(const NotifierOptions& notifier_options);
- void AddObserver(Observer* observer);
- void RemoveObserver(Observer* observer);
-
- // Login::Delegate implementation. Called on I/O thread.
- virtual void OnConnect(
- base::WeakPtr<buzz::XmppTaskParentInterface> base_task);
- virtual void OnDisconnect();
-
- // PushNotificationsListenTaskDelegate implementation. Called on I/O thread.
- virtual void OnNotificationReceived(
- const Notification& notification);
- // PushNotificationsSubscribeTaskDelegate implementation. Called on I/O
- // thread.
- virtual void OnSubscribed();
- virtual void OnSubscriptionError();
-
- // Helpers invoked on I/O thread.
- void Login(const buzz::XmppClientSettings& settings);
- void Disconnect();
- void ListenForPushNotifications();
- void SubscribeForPushNotifications(
- const SubscriptionList& subscriptions);
- void SendNotification(const Notification& data);
- void UpdateXmppSettings(const buzz::XmppClientSettings& settings);
-
- private:
- friend class base::RefCountedThreadSafe<MediatorThreadImpl::Core>;
- // Invoked on either the caller thread or the I/O thread.
- virtual ~Core();
- scoped_refptr<ObserverListThreadSafe<Observer> > observers_;
- base::WeakPtr<buzz::XmppTaskParentInterface> base_task_;
-
- const NotifierOptions notifier_options_;
-
- scoped_ptr<notifier::Login> login_;
-
- std::vector<Notification> pending_notifications_to_send_;
-
- DISALLOW_COPY_AND_ASSIGN(Core);
-};
-
-MediatorThreadImpl::Core::Core(
- const NotifierOptions& notifier_options)
- : observers_(new ObserverListThreadSafe<Observer>()),
- notifier_options_(notifier_options) {
- DCHECK(notifier_options_.request_context_getter);
-}
-
-MediatorThreadImpl::Core::~Core() {
-}
-
-void MediatorThreadImpl::Core::AddObserver(Observer* observer) {
- observers_->AddObserver(observer);
-}
-
-void MediatorThreadImpl::Core::RemoveObserver(Observer* observer) {
- observers_->RemoveObserver(observer);
-}
-
-void MediatorThreadImpl::Core::Login(const buzz::XmppClientSettings& settings) {
- DCHECK(notifier_options_.request_context_getter->GetIOMessageLoopProxy()->
- BelongsToCurrentThread());
- VLOG(1) << "P2P: Thread logging into talk network.";
-
- base_task_.reset();
- login_.reset(new notifier::Login(this,
- settings,
- notifier_options_.request_context_getter,
- GetServerList(notifier_options_),
- notifier_options_.try_ssltcp_first,
- notifier_options_.auth_mechanism));
- login_->StartConnection();
-}
-
-void MediatorThreadImpl::Core::Disconnect() {
- DCHECK(notifier_options_.request_context_getter->GetIOMessageLoopProxy()->
- BelongsToCurrentThread());
- VLOG(1) << "P2P: Thread logging out of talk network.";
- login_.reset();
- base_task_.reset();
-}
-
-void MediatorThreadImpl::Core::ListenForPushNotifications() {
- DCHECK(notifier_options_.request_context_getter->GetIOMessageLoopProxy()->
- BelongsToCurrentThread());
- if (!base_task_.get())
- return;
- PushNotificationsListenTask* listener =
- new PushNotificationsListenTask(base_task_, this);
- listener->Start();
-}
-
-void MediatorThreadImpl::Core::SubscribeForPushNotifications(
- const SubscriptionList& subscriptions) {
- DCHECK(notifier_options_.request_context_getter->GetIOMessageLoopProxy()->
- BelongsToCurrentThread());
- if (!base_task_.get())
- return;
- PushNotificationsSubscribeTask* subscribe_task =
- new PushNotificationsSubscribeTask(base_task_, subscriptions, this);
- subscribe_task->Start();
-}
-
-void MediatorThreadImpl::Core::OnSubscribed() {
- DCHECK(notifier_options_.request_context_getter->GetIOMessageLoopProxy()->
- BelongsToCurrentThread());
- observers_->Notify(&Observer::OnSubscriptionStateChange, true);
-}
-
-void MediatorThreadImpl::Core::OnSubscriptionError() {
- DCHECK(notifier_options_.request_context_getter->GetIOMessageLoopProxy()->
- BelongsToCurrentThread());
- observers_->Notify(&Observer::OnSubscriptionStateChange, false);
-}
-
-void MediatorThreadImpl::Core::OnNotificationReceived(
- const Notification& notification) {
- DCHECK(notifier_options_.request_context_getter->GetIOMessageLoopProxy()->
- BelongsToCurrentThread());
- observers_->Notify(&Observer::OnIncomingNotification, notification);
-}
-
-void MediatorThreadImpl::Core::SendNotification(const Notification& data) {
- DCHECK(notifier_options_.request_context_getter->GetIOMessageLoopProxy()->
- BelongsToCurrentThread());
- if (!base_task_.get()) {
- VLOG(1) << "P2P: Cannot send notification " << data.ToString()
- << "; sending later";
- pending_notifications_to_send_.push_back(data);
- return;
- }
- // Owned by |base_task_|.
- PushNotificationsSendUpdateTask* task =
- new PushNotificationsSendUpdateTask(base_task_, data);
- task->Start();
- observers_->Notify(&Observer::OnOutgoingNotification);
-}
-
-void MediatorThreadImpl::Core::UpdateXmppSettings(
- const buzz::XmppClientSettings& settings) {
- DCHECK(notifier_options_.request_context_getter->GetIOMessageLoopProxy()->
- BelongsToCurrentThread());
- VLOG(1) << "P2P: Thread Updating login settings.";
- // The caller should only call UpdateXmppSettings after a Login call.
- if (login_.get())
- login_->UpdateXmppSettings(settings);
- else
- NOTREACHED() <<
- "P2P: Thread UpdateXmppSettings called when login_ was NULL";
-}
-
-void MediatorThreadImpl::Core::OnConnect(
- base::WeakPtr<buzz::XmppTaskParentInterface> base_task) {
- DCHECK(notifier_options_.request_context_getter->GetIOMessageLoopProxy()->
- BelongsToCurrentThread());
- base_task_ = base_task;
- observers_->Notify(&Observer::OnConnectionStateChange, true);
- std::vector<Notification> notifications_to_send;
- notifications_to_send.swap(pending_notifications_to_send_);
- for (std::vector<Notification>::const_iterator it =
- notifications_to_send.begin();
- it != notifications_to_send.end(); ++it) {
- VLOG(1) << "P2P: Sending pending notification " << it->ToString();
- SendNotification(*it);
- }
-}
-
-void MediatorThreadImpl::Core::OnDisconnect() {
- DCHECK(notifier_options_.request_context_getter->GetIOMessageLoopProxy()->
- BelongsToCurrentThread());
- base_task_.reset();
- observers_->Notify(&Observer::OnConnectionStateChange, false);
-}
-
-
-MediatorThreadImpl::MediatorThreadImpl(const NotifierOptions& notifier_options)
- : core_(new Core(notifier_options)),
- parent_message_loop_proxy_(
- base::MessageLoopProxy::current()),
- io_message_loop_proxy_(
- notifier_options.request_context_getter->GetIOMessageLoopProxy()) {
-}
-
-MediatorThreadImpl::~MediatorThreadImpl() {
- DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread());
- LogoutImpl();
-}
-
-void MediatorThreadImpl::AddObserver(Observer* observer) {
- DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread());
- core_->AddObserver(observer);
-}
-
-void MediatorThreadImpl::RemoveObserver(Observer* observer) {
- DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread());
- core_->RemoveObserver(observer);
-}
-
-void MediatorThreadImpl::Start() {
- DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread());
-}
-
-void MediatorThreadImpl::Login(const buzz::XmppClientSettings& settings) {
- DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread());
- io_message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(&MediatorThreadImpl::Core::Login, core_.get(), settings));
-}
-
-void MediatorThreadImpl::Logout() {
- DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread());
- LogoutImpl();
-}
-
-void MediatorThreadImpl::ListenForUpdates() {
- DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread());
- io_message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(&MediatorThreadImpl::Core::ListenForPushNotifications,
- core_.get()));
-}
-
-void MediatorThreadImpl::SubscribeForUpdates(
- const SubscriptionList& subscriptions) {
- DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread());
- io_message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(&MediatorThreadImpl::Core::SubscribeForPushNotifications,
- core_.get(), subscriptions));
-}
-
-void MediatorThreadImpl::SendNotification(
- const Notification& data) {
- DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread());
- io_message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(&MediatorThreadImpl::Core::SendNotification, core_.get(),
- data));
-}
-
-void MediatorThreadImpl::UpdateXmppSettings(
- const buzz::XmppClientSettings& settings) {
- DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread());
- io_message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(&MediatorThreadImpl::Core::UpdateXmppSettings, core_.get(),
- settings));
-}
-
-void MediatorThreadImpl::TriggerOnConnectForTest(
- base::WeakPtr<buzz::XmppTaskParentInterface> base_task) {
- DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread());
- io_message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(&MediatorThreadImpl::Core::OnConnect, core_.get(), base_task));
-}
-
-void MediatorThreadImpl::LogoutImpl() {
- io_message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(&MediatorThreadImpl::Core::Disconnect, core_.get()));
-}
-
-} // namespace notifier
« no previous file with comments | « jingle/notifier/listener/mediator_thread_impl.h ('k') | jingle/notifier/listener/mediator_thread_mock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698