| Index: base/message_pump_android.cc
 | 
| diff --git a/base/message_pump_android.cc b/base/message_pump_android.cc
 | 
| deleted file mode 100644
 | 
| index f02da67ef7184ef470868cb3f11407bd3547ebbc..0000000000000000000000000000000000000000
 | 
| --- a/base/message_pump_android.cc
 | 
| +++ /dev/null
 | 
| @@ -1,139 +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 "base/message_pump_android.h"
 | 
| -
 | 
| -#include <jni.h>
 | 
| -
 | 
| -#include "base/android/jni_android.h"
 | 
| -#include "base/android/scoped_java_ref.h"
 | 
| -#include "base/lazy_instance.h"
 | 
| -#include "base/logging.h"
 | 
| -#include "base/run_loop.h"
 | 
| -#include "base/time.h"
 | 
| -#include "jni/SystemMessageHandler_jni.h"
 | 
| -
 | 
| -using base::android::ScopedJavaLocalRef;
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -base::LazyInstance<base::android::ScopedJavaGlobalRef<jobject> >
 | 
| -    g_system_message_handler_obj = LAZY_INSTANCE_INITIALIZER;
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
| -// ----------------------------------------------------------------------------
 | 
| -// Native JNI methods called by Java.
 | 
| -// ----------------------------------------------------------------------------
 | 
| -// This method can not move to anonymous namespace as it has been declared as
 | 
| -// 'static' in system_message_handler_jni.h.
 | 
| -static jboolean DoRunLoopOnce(JNIEnv* env, jobject obj, jint native_delegate) {
 | 
| -  base::MessagePump::Delegate* delegate =
 | 
| -      reinterpret_cast<base::MessagePump::Delegate*>(native_delegate);
 | 
| -  DCHECK(delegate);
 | 
| -  // This is based on MessagePumpForUI::DoRunLoop() from desktop.
 | 
| -  // Note however that our system queue is handled in the java side.
 | 
| -  // In desktop we inspect and process a single system message and then
 | 
| -  // we call DoWork() / DoDelayedWork().
 | 
| -  // On Android, the java message queue may contain messages for other handlers
 | 
| -  // that will be processed before calling here again.
 | 
| -  bool more_work_is_plausible = delegate->DoWork();
 | 
| -
 | 
| -  // This is the time when we need to do delayed work.
 | 
| -  base::TimeTicks delayed_work_time;
 | 
| -  more_work_is_plausible |= delegate->DoDelayedWork(&delayed_work_time);
 | 
| -
 | 
| -  // This is a major difference between android and other platforms: since we
 | 
| -  // can't inspect it and process just one single message, instead we'll yeld
 | 
| -  // the callstack, and post a message to call us back soon.
 | 
| -  if (more_work_is_plausible)
 | 
| -    return true;
 | 
| -
 | 
| -  more_work_is_plausible = delegate->DoIdleWork();
 | 
| -  if (!more_work_is_plausible && !delayed_work_time.is_null()) {
 | 
| -    // We only set the timer here as returning true would post a message.
 | 
| -    jlong millis =
 | 
| -        (delayed_work_time - base::TimeTicks::Now()).InMillisecondsRoundedUp();
 | 
| -    Java_SystemMessageHandler_setDelayedTimer(env, obj, millis);
 | 
| -  }
 | 
| -  return more_work_is_plausible;
 | 
| -}
 | 
| -
 | 
| -namespace base {
 | 
| -
 | 
| -MessagePumpForUI::MessagePumpForUI()
 | 
| -    : run_loop_(NULL) {
 | 
| -}
 | 
| -
 | 
| -MessagePumpForUI::~MessagePumpForUI() {
 | 
| -}
 | 
| -
 | 
| -void MessagePumpForUI::Run(Delegate* delegate) {
 | 
| -  NOTREACHED() << "UnitTests should rely on MessagePumpForUIStub in"
 | 
| -      " test_stub_android.h";
 | 
| -}
 | 
| -
 | 
| -void MessagePumpForUI::Start(Delegate* delegate) {
 | 
| -  run_loop_ = new base::RunLoop();
 | 
| -  // Since the RunLoop was just created above, BeforeRun should be guaranteed to
 | 
| -  // return true (it only returns false if the RunLoop has been Quit already).
 | 
| -  if (!run_loop_->BeforeRun())
 | 
| -    NOTREACHED();
 | 
| -
 | 
| -  DCHECK(g_system_message_handler_obj.Get().is_null());
 | 
| -
 | 
| -  JNIEnv* env = base::android::AttachCurrentThread();
 | 
| -  DCHECK(env);
 | 
| -
 | 
| -  g_system_message_handler_obj.Get().Reset(
 | 
| -      Java_SystemMessageHandler_create(env, reinterpret_cast<jint>(delegate)));
 | 
| -}
 | 
| -
 | 
| -void MessagePumpForUI::Quit() {
 | 
| -  if (!g_system_message_handler_obj.Get().is_null()) {
 | 
| -    JNIEnv* env = base::android::AttachCurrentThread();
 | 
| -    DCHECK(env);
 | 
| -
 | 
| -    Java_SystemMessageHandler_removeTimer(env,
 | 
| -        g_system_message_handler_obj.Get().obj());
 | 
| -    g_system_message_handler_obj.Get().Reset();
 | 
| -  }
 | 
| -
 | 
| -  if (run_loop_) {
 | 
| -    run_loop_->AfterRun();
 | 
| -    delete run_loop_;
 | 
| -    run_loop_ = NULL;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void MessagePumpForUI::ScheduleWork() {
 | 
| -  DCHECK(!g_system_message_handler_obj.Get().is_null());
 | 
| -
 | 
| -  JNIEnv* env = base::android::AttachCurrentThread();
 | 
| -  DCHECK(env);
 | 
| -
 | 
| -  Java_SystemMessageHandler_setTimer(env,
 | 
| -      g_system_message_handler_obj.Get().obj());
 | 
| -}
 | 
| -
 | 
| -void MessagePumpForUI::ScheduleDelayedWork(const TimeTicks& delayed_work_time) {
 | 
| -  DCHECK(!g_system_message_handler_obj.Get().is_null());
 | 
| -
 | 
| -  JNIEnv* env = base::android::AttachCurrentThread();
 | 
| -  DCHECK(env);
 | 
| -
 | 
| -  jlong millis =
 | 
| -      (delayed_work_time - base::TimeTicks::Now()).InMillisecondsRoundedUp();
 | 
| -  // Note that we're truncating to milliseconds as required by the java side,
 | 
| -  // even though delayed_work_time is microseconds resolution.
 | 
| -  Java_SystemMessageHandler_setDelayedTimer(env,
 | 
| -      g_system_message_handler_obj.Get().obj(), millis);
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -bool MessagePumpForUI::RegisterBindings(JNIEnv* env) {
 | 
| -  return RegisterNativesImpl(env);
 | 
| -}
 | 
| -
 | 
| -}  // namespace base
 | 
| 
 |