| Index: remoting/jingle_glue/jingle_thread.cc
|
| diff --git a/remoting/jingle_glue/jingle_thread.cc b/remoting/jingle_glue/jingle_thread.cc
|
| deleted file mode 100644
|
| index 40161dcd22781ab60bab23df82d308e4816d9140..0000000000000000000000000000000000000000
|
| --- a/remoting/jingle_glue/jingle_thread.cc
|
| +++ /dev/null
|
| @@ -1,204 +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 "remoting/jingle_glue/jingle_thread.h"
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/logging.h"
|
| -#include "base/message_loop_proxy.h"
|
| -#include "base/message_pump.h"
|
| -#include "base/time.h"
|
| -#include "third_party/libjingle/source/talk/base/ssladapter.h"
|
| -
|
| -namespace remoting {
|
| -
|
| -const uint32 kRunTasksMessageId = 1;
|
| -const uint32 kStopMessageId = 2;
|
| -
|
| -namespace {
|
| -
|
| -class JingleMessagePump : public base::MessagePump,
|
| - public talk_base::MessageHandler {
|
| - public:
|
| - JingleMessagePump(talk_base::Thread* thread)
|
| - : thread_(thread), delegate_(NULL), stopping_(false) {
|
| - }
|
| -
|
| - virtual void Run(Delegate* delegate) {
|
| - delegate_ = delegate;
|
| -
|
| - thread_->Thread::Run();
|
| - // Call Restart() so that we can run again.
|
| - thread_->Restart();
|
| -
|
| - delegate_ = NULL;
|
| - }
|
| -
|
| - virtual void Quit() {
|
| - if (!stopping_) {
|
| - stopping_ = true;
|
| -
|
| - // Shutdown gracefully: make sure that we excute all messages
|
| - // left in the queue before exiting. Thread::Quit() would not do
|
| - // that.
|
| - thread_->Post(this, kStopMessageId);
|
| - }
|
| - }
|
| -
|
| - virtual void ScheduleWork() {
|
| - thread_->Post(this, kRunTasksMessageId);
|
| - }
|
| -
|
| - virtual void ScheduleDelayedWork(const base::TimeTicks& time) {
|
| - delayed_work_time_ = time;
|
| - ScheduleNextDelayedTask();
|
| - }
|
| -
|
| - void OnMessage(talk_base::Message* msg) {
|
| - if (msg->message_id == kRunTasksMessageId) {
|
| - DCHECK(delegate_);
|
| -
|
| - // Clear currently pending messages in case there were delayed tasks.
|
| - // Will schedule it again from ScheduleNextDelayedTask() if neccessary.
|
| - thread_->Clear(this, kRunTasksMessageId);
|
| -
|
| - // Process all pending tasks.
|
| - while (true) {
|
| - if (delegate_->DoWork())
|
| - continue;
|
| - if (delegate_->DoDelayedWork(&delayed_work_time_))
|
| - continue;
|
| - if (delegate_->DoIdleWork())
|
| - continue;
|
| - break;
|
| - }
|
| -
|
| - ScheduleNextDelayedTask();
|
| - } else if (msg->message_id == kStopMessageId) {
|
| - DCHECK(stopping_);
|
| - // Stop the thread only if there are no more non-delayed
|
| - // messages left in the queue, otherwise post another task to
|
| - // try again later.
|
| - int delay = thread_->GetDelay();
|
| - if (delay > 0 || delay == talk_base::kForever) {
|
| - stopping_ = false;
|
| - thread_->Quit();
|
| - } else {
|
| - thread_->Post(this, kStopMessageId);
|
| - }
|
| - } else {
|
| - NOTREACHED();
|
| - }
|
| - }
|
| -
|
| - protected:
|
| - virtual ~JingleMessagePump() {}
|
| -
|
| - private:
|
| - void ScheduleNextDelayedTask() {
|
| - if (!delayed_work_time_.is_null()) {
|
| - base::TimeTicks now = base::TimeTicks::Now();
|
| - int delay = static_cast<int>((delayed_work_time_ - now).InMilliseconds());
|
| - if (delay > 0) {
|
| - thread_->PostDelayed(delay, this, kRunTasksMessageId);
|
| - } else {
|
| - thread_->Post(this, kRunTasksMessageId);
|
| - }
|
| - }
|
| - }
|
| -
|
| - talk_base::Thread* thread_;
|
| - Delegate* delegate_;
|
| - base::TimeTicks delayed_work_time_;
|
| - bool stopping_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -JingleThreadMessageLoop::JingleThreadMessageLoop(talk_base::Thread* thread)
|
| - : MessageLoop(MessageLoop::TYPE_IO) {
|
| - pump_ = new JingleMessagePump(thread);
|
| -}
|
| -
|
| -JingleThreadMessageLoop::~JingleThreadMessageLoop() {
|
| -}
|
| -
|
| -TaskPump::TaskPump() {
|
| -}
|
| -
|
| -void TaskPump::WakeTasks() {
|
| - talk_base::Thread::Current()->Post(this);
|
| -}
|
| -
|
| -int64 TaskPump::CurrentTime() {
|
| - return static_cast<int64>(talk_base::Time());
|
| -}
|
| -
|
| -void TaskPump::OnMessage(talk_base::Message* pmsg) {
|
| - RunTasks();
|
| -}
|
| -
|
| -JingleThread::JingleThread()
|
| - : task_pump_(NULL),
|
| - started_event_(true, false),
|
| - stopped_event_(true, false),
|
| - message_loop_(NULL) {
|
| -}
|
| -
|
| -JingleThread::~JingleThread() {
|
| - // It is important to call Stop here. If we wait for the base class to
|
| - // call Stop in its d'tor, then JingleThread::Run() will access member
|
| - // variables that are already gone. See similar comments in
|
| - // base/threading/thread.h.
|
| - if (message_loop_)
|
| - Stop();
|
| -}
|
| -
|
| -bool JingleThread::Start() {
|
| - if (!Thread::Start())
|
| - return false;
|
| - started_event_.Wait();
|
| - return true;
|
| -}
|
| -
|
| -void JingleThread::Run() {
|
| - JingleThreadMessageLoop message_loop(this);
|
| - message_loop_ = &message_loop;
|
| - message_loop_proxy_ = base::MessageLoopProxy::current();
|
| -
|
| - TaskPump task_pump;
|
| - task_pump_ = &task_pump;
|
| -
|
| - // Signal after we've initialized |message_loop_| and |task_pump_|.
|
| - started_event_.Signal();
|
| -
|
| - message_loop.Run();
|
| -
|
| - stopped_event_.Signal();
|
| -
|
| - task_pump_ = NULL;
|
| - message_loop_ = NULL;
|
| -}
|
| -
|
| -void JingleThread::Stop() {
|
| - message_loop_->PostTask(FROM_HERE, MessageLoop::QuitClosure());
|
| - stopped_event_.Wait();
|
| -
|
| - // This will wait until the thread is actually finished.
|
| - Thread::Stop();
|
| -}
|
| -
|
| -MessageLoop* JingleThread::message_loop() {
|
| - return message_loop_;
|
| -}
|
| -
|
| -base::MessageLoopProxy* JingleThread::message_loop_proxy() {
|
| - return message_loop_proxy_;
|
| -}
|
| -
|
| -TaskPump* JingleThread::task_pump() {
|
| - return task_pump_;
|
| -}
|
| -
|
| -} // namespace remoting
|
|
|