Roll base to 0032c8e1a72eb85d947d8df8de503caa62b4d0a8.

TBR=jamesr@chromium.org

Review URL: https://codereview.chromium.org/2056563002 .
diff --git a/DEPS b/DEPS
index 1119a17..022c057 100644
--- a/DEPS
+++ b/DEPS
@@ -21,7 +21,7 @@
   'chromium_git': 'https://chromium.googlesource.com',
   'skia_revision': '8cc209111876b7c78b5ec577c9221d8ed5e21024',
   'v8_revision': '3f036fc0ba4ca4483fe77822f8605c277d37ee24',
-  'base_revision': 'ec59756cc1ad02cc835bcca10056a621c9eb346c',
+  'base_revision': '0032c8e1a72eb85d947d8df8de503caa62b4d0a8',
   'angle_revision': '46ccef1992a8ede16a596c3dd73cff13c047267d',
   'buildtools_revision': '222bd42ce39d1bd8f08fe089b066f49c469e1cdf',
   'dart_revision': 'f64c907557646699fada4acb7e9a82346a369993',
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index 08fe1e5..1552bc2 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -490,8 +490,8 @@
       visibility = invoker.visibility
     }
     public_deps = [
-      ":${target_name}__jar_toc",
       ":$_output_jar_target",
+      ":${target_name}__jar_toc",
     ]
   }
 }
@@ -1084,9 +1084,7 @@
   }
 
   _java_files = []
-  if (defined(invoker.java_files)) {
-    _java_files = invoker.java_files
-  } else if (defined(invoker.DEPRECATED_java_in_dir)) {
+  if (defined(invoker.DEPRECATED_java_in_dir)) {
     _src_dir = invoker.DEPRECATED_java_in_dir + "/src"
     _src_dir_exists = exec_script("//build/dir_exists.py",
                                   [ rebase_path(_src_dir, root_build_dir) ],
@@ -1095,16 +1093,20 @@
            "In GN, java_in_dir should be the fully specified java directory " +
                "(i.e. including the trailing \"/src\")")
 
-    _java_files_build_rel = exec_script(
-            "//build/android/gyp/find.py",
-            [
-              "--pattern",
-              "*.java",
-              rebase_path(invoker.DEPRECATED_java_in_dir, root_build_dir),
-            ],
-            "list lines")
+    _java_files_build_rel =
+        exec_script("//build/android/gyp/find.py",
+                    [
+                      "--pattern",
+                      "*.java",
+                      rebase_path(invoker.DEPRECATED_java_in_dir,
+                                  root_build_dir),
+                    ],
+                    "list lines")
     _java_files = rebase_path(_java_files_build_rel, ".", root_build_dir)
   }
+  if (defined(invoker.java_files)) {
+    _java_files += invoker.java_files
+  }
   assert(_java_files != [] || _srcjar_deps != [] || _srcjars != [])
 
   _compile_java_target = "${_template_name}__compile_java"
diff --git a/mojo/android/javatests/mojo_test_case.cc b/mojo/android/javatests/mojo_test_case.cc
index 2df0bc7..95a89ab 100644
--- a/mojo/android/javatests/mojo_test_case.cc
+++ b/mojo/android/javatests/mojo_test_case.cc
@@ -32,24 +32,27 @@
 namespace android {
 
 static void InitApplicationContext(JNIEnv* env,
-                                   jobject jcaller,
-                                   jobject context) {
+                                   const JavaParamRef<jobject>& jcaller,
+                                   const JavaParamRef<jobject>& context) {
   base::android::ScopedJavaLocalRef<jobject> scoped_context(env, context);
   base::android::InitApplicationContext(env, scoped_context);
   base::InitAndroidTestMessageLoop();
 }
 
-static jlong SetupTestEnvironment(JNIEnv* env, jobject jcaller) {
+static jlong SetupTestEnvironment(JNIEnv* env,
+                                  const JavaParamRef<jobject>& jcaller) {
   return reinterpret_cast<intptr_t>(new TestEnvironment());
 }
 
 static void TearDownTestEnvironment(JNIEnv* env,
-                                    jobject jcaller,
+                                    const JavaParamRef<jobject>& jcaller,
                                     jlong test_environment) {
   delete reinterpret_cast<TestEnvironment*>(test_environment);
 }
 
-static void RunLoop(JNIEnv* env, jobject jcaller, jlong timeout_ms) {
+static void RunLoop(JNIEnv* env,
+                    const JavaParamRef<jobject>& jcaller,
+                    jlong timeout_ms) {
   base::RunLoop run_loop;
   if (timeout_ms) {
     base::MessageLoop::current()->PostDelayedTask(
diff --git a/mojo/android/javatests/validation_test_util.cc b/mojo/android/javatests/validation_test_util.cc
index dec90cc..1fb0abf 100644
--- a/mojo/android/javatests/validation_test_util.cc
+++ b/mojo/android/javatests/validation_test_util.cc
@@ -18,9 +18,10 @@
   return RegisterNativesImpl(env);
 }
 
-ScopedJavaLocalRef<jobject> ParseData(JNIEnv* env,
-                                      jclass jcaller,
-                                      jstring data_as_string) {
+ScopedJavaLocalRef<jobject> ParseData(
+    JNIEnv* env,
+    const JavaParamRef<jclass>& jcaller,
+    const JavaParamRef<jstring>& data_as_string) {
   std::string input =
       base::android::ConvertJavaStringToUTF8(env, data_as_string);
   std::vector<uint8_t> data;
diff --git a/mojo/android/system/base_run_loop.cc b/mojo/android/system/base_run_loop.cc
index f361a94..5d49bfd 100644
--- a/mojo/android/system/base_run_loop.cc
+++ b/mojo/android/system/base_run_loop.cc
@@ -43,19 +43,26 @@
 
 }  // namespace
 
-static jlong CreateBaseRunLoop(JNIEnv* env, jobject jcaller) {
+static jlong CreateBaseRunLoop(JNIEnv* env,
+                               const JavaParamRef<jobject>& jcaller) {
   return reinterpret_cast<uintptr_t>(new MessageLoopHolder());
 }
 
-static void Run(JNIEnv* env, jobject jcaller, jlong runLoopID) {
+static void Run(JNIEnv* env,
+                const JavaParamRef<jobject>& jcaller,
+                jlong runLoopID) {
   reinterpret_cast<MessageLoopHolder*>(runLoopID)->message_loop->Run();
 }
 
-static void RunUntilIdle(JNIEnv* env, jobject jcaller, jlong runLoopID) {
+static void RunUntilIdle(JNIEnv* env,
+                         const JavaParamRef<jobject>& jcaller,
+                         jlong runLoopID) {
   reinterpret_cast<MessageLoopHolder*>(runLoopID)->message_loop->RunUntilIdle();
 }
 
-static void Quit(JNIEnv* env, jobject jcaller, jlong runLoopID) {
+static void Quit(JNIEnv* env,
+                 const JavaParamRef<jobject>& jcaller,
+                 jlong runLoopID) {
   reinterpret_cast<MessageLoopHolder*>(runLoopID)->message_loop->Quit();
 }
 
@@ -66,9 +73,9 @@
 }
 
 static void PostDelayedTask(JNIEnv* env,
-                            jobject jcaller,
+                            const JavaParamRef<jobject>& jcaller,
                             jlong runLoopID,
-                            jobject runnable,
+                            const JavaParamRef<jobject>& runnable,
                             jlong delay) {
   base::android::ScopedJavaGlobalRef<jobject> runnable_ref;
   // ScopedJavaGlobalRef do not hold onto the env reference, so it is safe to
@@ -81,7 +88,9 @@
           base::TimeDelta::FromMicroseconds(delay));
 }
 
-static void DeleteMessageLoop(JNIEnv* env, jobject jcaller, jlong runLoopID) {
+static void DeleteMessageLoop(JNIEnv* env,
+                              const JavaParamRef<jobject>& jcaller,
+                              jlong runLoopID) {
   MessageLoopHolder* native_loop =
       reinterpret_cast<MessageLoopHolder*>(runLoopID);
   delete native_loop;
@@ -93,5 +102,3 @@
 
 }  // namespace android
 }  // namespace mojo
-
-
diff --git a/mojo/android/system/core_impl.cc b/mojo/android/system/core_impl.cc
index 7fed58c..637b7b3 100644
--- a/mojo/android/system/core_impl.cc
+++ b/mojo/android/system/core_impl.cc
@@ -55,13 +55,14 @@
 namespace mojo {
 namespace android {
 
-static jlong GetTimeTicksNow(JNIEnv* env, jobject jcaller) {
+static jlong GetTimeTicksNow(JNIEnv* env,
+                             const JavaParamRef<jobject>& jcaller) {
   return MojoGetTimeTicksNow();
 }
 
 static jint WaitMany(JNIEnv* env,
-                     jobject jcaller,
-                     jobject buffer,
+                     const JavaParamRef<jobject>& jcaller,
+                     const JavaParamRef<jobject>& buffer,
                      jlong deadline) {
   // |buffer| contains, in this order
   // input: The array of N handles (MojoHandle, 4 bytes each)
@@ -94,9 +95,10 @@
                       result_index, states_start);
 }
 
-static ScopedJavaLocalRef<jobject> CreateMessagePipe(JNIEnv* env,
-                                                     jobject jcaller,
-                                                     jobject options_buffer) {
+static ScopedJavaLocalRef<jobject> CreateMessagePipe(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& jcaller,
+    const JavaParamRef<jobject>& options_buffer) {
   const MojoCreateMessagePipeOptions* options = NULL;
   if (options_buffer) {
     const void* buffer_start = env->GetDirectBufferAddress(options_buffer);
@@ -113,9 +115,10 @@
   return Java_CoreImpl_newNativeCreationResult(env, result, handle1, handle2);
 }
 
-static ScopedJavaLocalRef<jobject> CreateDataPipe(JNIEnv* env,
-                                                  jobject jcaller,
-                                                  jobject options_buffer) {
+static ScopedJavaLocalRef<jobject> CreateDataPipe(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& jcaller,
+    const JavaParamRef<jobject>& options_buffer) {
   const MojoCreateDataPipeOptions* options = NULL;
   if (options_buffer) {
     const void* buffer_start = env->GetDirectBufferAddress(options_buffer);
@@ -132,10 +135,11 @@
   return Java_CoreImpl_newNativeCreationResult(env, result, handle1, handle2);
 }
 
-static ScopedJavaLocalRef<jobject> CreateSharedBuffer(JNIEnv* env,
-                                                      jobject jcaller,
-                                                      jobject options_buffer,
-                                                      jlong num_bytes) {
+static ScopedJavaLocalRef<jobject> CreateSharedBuffer(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& jcaller,
+    const JavaParamRef<jobject>& options_buffer,
+    jlong num_bytes) {
   const MojoCreateSharedBufferOptions* options = 0;
   if (options_buffer) {
     const void* buffer_start = env->GetDirectBufferAddress(options_buffer);
@@ -151,13 +155,15 @@
   return Java_CoreImpl_newResultAndInteger(env, result, handle);
 }
 
-static jint Close(JNIEnv* env, jobject jcaller, jint mojo_handle) {
+static jint Close(JNIEnv* env,
+                  const JavaParamRef<jobject>& jcaller,
+                  jint mojo_handle) {
   return MojoClose(mojo_handle);
 }
 
 static jint Wait(JNIEnv* env,
-                 jobject jcaller,
-                 jobject buffer,
+                 const JavaParamRef<jobject>& jcaller,
+                 const JavaParamRef<jobject>& buffer,
                  jint mojo_handle,
                  jint signals,
                  jlong deadline) {
@@ -173,11 +179,11 @@
 }
 
 static jint WriteMessage(JNIEnv* env,
-                         jobject jcaller,
+                         const JavaParamRef<jobject>& jcaller,
                          jint mojo_handle,
-                         jobject bytes,
+                         const JavaParamRef<jobject>& bytes,
                          jint num_bytes,
-                         jobject handles_buffer,
+                         const JavaParamRef<jobject>& handles_buffer,
                          jint flags) {
   const void* buffer_start = 0;
   uint32_t buffer_size = 0;
@@ -199,12 +205,13 @@
       mojo_handle, buffer_start, buffer_size, handles, num_handles, flags);
 }
 
-static ScopedJavaLocalRef<jobject> ReadMessage(JNIEnv* env,
-                                               jobject jcaller,
-                                               jint mojo_handle,
-                                               jobject bytes,
-                                               jobject handles_buffer,
-                                               jint flags) {
+static ScopedJavaLocalRef<jobject> ReadMessage(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& jcaller,
+    jint mojo_handle,
+    const JavaParamRef<jobject>& bytes,
+    const JavaParamRef<jobject>& handles_buffer,
+    jint flags) {
   void* buffer_start = 0;
   uint32_t buffer_size = 0;
   if (bytes) {
@@ -226,12 +233,13 @@
                                             num_handles);
 }
 
-static ScopedJavaLocalRef<jobject> ReadData(JNIEnv* env,
-                                            jobject jcaller,
-                                            jint mojo_handle,
-                                            jobject elements,
-                                            jint elements_capacity,
-                                            jint flags) {
+static ScopedJavaLocalRef<jobject> ReadData(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& jcaller,
+    jint mojo_handle,
+    const JavaParamRef<jobject>& elements,
+    jint elements_capacity,
+    jint flags) {
   void* buffer_start = 0;
   uint32_t buffer_size = elements_capacity;
   if (elements) {
@@ -245,11 +253,12 @@
       env, result, (result == MOJO_RESULT_OK) ? buffer_size : 0);
 }
 
-static ScopedJavaLocalRef<jobject> BeginReadData(JNIEnv* env,
-                                                 jobject jcaller,
-                                                 jint mojo_handle,
-                                                 jint num_bytes,
-                                                 jint flags) {
+static ScopedJavaLocalRef<jobject> BeginReadData(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& jcaller,
+    jint mojo_handle,
+    jint num_bytes,
+    jint flags) {
   void const* buffer = 0;
   uint32_t buffer_size = num_bytes;
   MojoResult result =
@@ -263,18 +272,19 @@
 }
 
 static jint EndReadData(JNIEnv* env,
-                        jobject jcaller,
+                        const JavaParamRef<jobject>& jcaller,
                         jint mojo_handle,
                         jint num_bytes_read) {
   return MojoEndReadData(mojo_handle, num_bytes_read);
 }
 
-static ScopedJavaLocalRef<jobject> WriteData(JNIEnv* env,
-                                             jobject jcaller,
-                                             jint mojo_handle,
-                                             jobject elements,
-                                             jint limit,
-                                             jint flags) {
+static ScopedJavaLocalRef<jobject> WriteData(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& jcaller,
+    jint mojo_handle,
+    const JavaParamRef<jobject>& elements,
+    jint limit,
+    jint flags) {
   void* buffer_start = env->GetDirectBufferAddress(elements);
   DCHECK(buffer_start);
   DCHECK(limit <= env->GetDirectBufferCapacity(elements));
@@ -285,11 +295,12 @@
       env, result, (result == MOJO_RESULT_OK) ? buffer_size : 0);
 }
 
-static ScopedJavaLocalRef<jobject> BeginWriteData(JNIEnv* env,
-                                                  jobject jcaller,
-                                                  jint mojo_handle,
-                                                  jint num_bytes,
-                                                  jint flags) {
+static ScopedJavaLocalRef<jobject> BeginWriteData(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& jcaller,
+    jint mojo_handle,
+    jint num_bytes,
+    jint flags) {
   void* buffer = 0;
   uint32_t buffer_size = num_bytes;
   MojoResult result =
@@ -302,16 +313,17 @@
 }
 
 static jint EndWriteData(JNIEnv* env,
-                         jobject jcaller,
+                         const JavaParamRef<jobject>& jcaller,
                          jint mojo_handle,
                          jint num_bytes_written) {
   return MojoEndWriteData(mojo_handle, num_bytes_written);
 }
 
-static ScopedJavaLocalRef<jobject> Duplicate(JNIEnv* env,
-                                             jobject jcaller,
-                                             jint mojo_handle,
-                                             jobject options_buffer) {
+static ScopedJavaLocalRef<jobject> Duplicate(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& jcaller,
+    jint mojo_handle,
+    const JavaParamRef<jobject>& options_buffer) {
   const MojoDuplicateBufferHandleOptions* options = 0;
   if (options_buffer) {
     const void* buffer_start = env->GetDirectBufferAddress(options_buffer);
@@ -328,7 +340,7 @@
 }
 
 static ScopedJavaLocalRef<jobject> Map(JNIEnv* env,
-                                       jobject jcaller,
+                                       const JavaParamRef<jobject>& jcaller,
                                        jint mojo_handle,
                                        jlong offset,
                                        jlong num_bytes,
@@ -343,18 +355,21 @@
   return Java_CoreImpl_newResultAndBuffer(env, result, byte_buffer);
 }
 
-static int Unmap(JNIEnv* env, jobject jcaller, jobject buffer) {
+static int Unmap(JNIEnv* env,
+                 const JavaParamRef<jobject>& jcaller,
+                 const JavaParamRef<jobject>& buffer) {
   void* buffer_start = env->GetDirectBufferAddress(buffer);
   DCHECK(buffer_start);
   return MojoUnmapBuffer(buffer_start);
 }
 
-static ScopedJavaLocalRef<jobject> AsyncWait(JNIEnv* env,
-                                             jobject jcaller,
-                                             jint mojo_handle,
-                                             jint signals,
-                                             jlong deadline,
-                                             jobject callback) {
+static ScopedJavaLocalRef<jobject> AsyncWait(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& jcaller,
+    jint mojo_handle,
+    jint signals,
+    jlong deadline,
+    const JavaParamRef<jobject>& callback) {
   AsyncWaitCallbackData* callback_data =
       new AsyncWaitCallbackData(env, jcaller, callback);
   MojoAsyncWaitID cancel_id;
@@ -376,7 +391,7 @@
 }
 
 static void CancelAsyncWait(JNIEnv* env,
-                            jobject jcaller,
+                            const JavaParamRef<jobject>& jcaller,
                             jlong id,
                             jlong data_ptr) {
   if (id == 0) {
@@ -391,8 +406,8 @@
 }
 
 static jint GetNativeBufferOffset(JNIEnv* env,
-                                  jobject jcaller,
-                                  jobject buffer,
+                                  const JavaParamRef<jobject>& jcaller,
+                                  const JavaParamRef<jobject>& buffer,
                                   jint alignment) {
   jint offset =
       reinterpret_cast<uintptr_t>(env->GetDirectBufferAddress(buffer)) %
@@ -402,9 +417,10 @@
   return alignment - offset;
 }
 
-static ScopedJavaLocalRef<jobject> GetBufferInformation(JNIEnv* env,
-                                                        jobject jcaller,
-                                                        jint mojo_handle) {
+static ScopedJavaLocalRef<jobject> GetBufferInformation(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& jcaller,
+    jint mojo_handle) {
   MojoBufferInformation buffer_information;
   MojoResult result =
       MojoGetBufferInformation(static_cast<MojoHandle>(mojo_handle),
diff --git a/services/java_handler/java_handler.cc b/services/java_handler/java_handler.cc
index 2747daf..d3e10f4 100644
--- a/services/java_handler/java_handler.cc
+++ b/services/java_handler/java_handler.cc
@@ -126,7 +126,7 @@
   return true;
 }
 
-void PreInvokeEvent(JNIEnv* env, jclass jcaller) {
+void PreInvokeEvent(JNIEnv* env, const JavaParamRef<jclass>& jcaller) {
   TRACE_EVENT_END0("java_handler", "JavaHandler::RunApplication");
 }
 
diff --git a/shell/android/android_handler.cc b/shell/android/android_handler.cc
index a5a99eb..9c03082 100644
--- a/shell/android/android_handler.cc
+++ b/shell/android/android_handler.cc
@@ -157,11 +157,12 @@
       });
 }
 
-ScopedJavaLocalRef<jstring> CreateTemporaryFile(JNIEnv* env,
-                                                jclass jcaller,
-                                                jstring j_directory,
-                                                jstring j_basename,
-                                                jstring j_extension) {
+ScopedJavaLocalRef<jstring> CreateTemporaryFile(
+    JNIEnv* env,
+    const JavaParamRef<jclass>& jcaller,
+    const JavaParamRef<jstring>& j_directory,
+    const JavaParamRef<jstring>& j_basename,
+    const JavaParamRef<jstring>& j_extension) {
   std::string basename(ConvertJavaStringToUTF8(env, j_basename));
   std::string extension(ConvertJavaStringToUTF8(env, j_extension));
   base::FilePath directory(ConvertJavaStringToUTF8(env, j_directory));
diff --git a/shell/android/bootstrap.cc b/shell/android/bootstrap.cc
index d284c6e..04add65 100644
--- a/shell/android/bootstrap.cc
+++ b/shell/android/bootstrap.cc
@@ -11,10 +11,10 @@
 namespace shell {
 
 void Bootstrap(JNIEnv* env,
-               jobject,
-               jobject j_context,
+               const JavaParamRef<jobject>&,
+               const JavaParamRef<jobject>& j_context,
                jlong j_id,
-               jstring j_native_library_path,
+               const JavaParamRef<jstring>& j_native_library_path,
                jint j_handle,
                jlong j_run_application_ptr) {
   base::FilePath app_path(
diff --git a/shell/android/main.cc b/shell/android/main.cc
index 864c3b1..28a3485 100644
--- a/shell/android/main.cc
+++ b/shell/android/main.cc
@@ -238,14 +238,14 @@
 }  // namespace
 
 static void Start(JNIEnv* env,
-                  jclass clazz,
-                  jobject application_context,
-                  jobject j_asset_manager,
-                  jstring mojo_shell_child_path,
-                  jobjectArray jparameters,
-                  jstring j_local_apps_directory,
-                  jstring j_tmp_dir,
-                  jstring j_home_dir) {
+                  const JavaParamRef<jclass>& clazz,
+                  const JavaParamRef<jobject>& application_context,
+                  const JavaParamRef<jobject>& j_asset_manager,
+                  const JavaParamRef<jstring>& mojo_shell_child_path,
+                  const JavaParamRef<jobjectArray>& jparameters,
+                  const JavaParamRef<jstring>& j_local_apps_directory,
+                  const JavaParamRef<jstring>& j_tmp_dir,
+                  const JavaParamRef<jstring>& j_home_dir) {
   // Initially, the shell runner is not ready.
   g_internal_data.Get().shell_runner_ready.reset(
       new base::WaitableEvent(true, false));
@@ -332,25 +332,31 @@
   gpu::ApplyGpuDriverBugWorkarounds(command_line);
 }
 
-static void AddApplicationURL(JNIEnv* env, jclass clazz, jstring jurl) {
+static void AddApplicationURL(JNIEnv* env,
+                              const JavaParamRef<jclass>& clazz,
+                              const JavaParamRef<jstring>& jurl) {
   base::CommandLine::ForCurrentProcess()->AppendArg(
       base::android::ConvertJavaStringToUTF8(env, jurl));
 }
 
-static void StartApplicationURL(JNIEnv* env, jclass clazz, jstring jurl) {
+static void StartApplicationURL(JNIEnv* env,
+                                const JavaParamRef<jclass>& clazz,
+                                const JavaParamRef<jstring>& jurl) {
   std::string url = base::android::ConvertJavaStringToUTF8(env, jurl);
   g_internal_data.Get().shell_task_runner->PostTask(
       FROM_HERE, base::Bind(&EmbedApplicationByURL, url));
 }
 
-static void BindShell(JNIEnv* env, jclass clazz, jint shell_handle) {
+static void BindShell(JNIEnv* env,
+                      const JavaParamRef<jclass>& clazz,
+                      jint shell_handle) {
   g_internal_data.Get().shell_task_runner->PostTask(
       FROM_HERE,
       base::Bind(&BindShellImpl, base::Passed(mojo::ScopedMessagePipeHandle(
                                      mojo::MessagePipeHandle(shell_handle)))));
 }
 
-static void QuitShell(JNIEnv* env, jclass jcaller) {
+static void QuitShell(JNIEnv* env, const JavaParamRef<jclass>& clazz) {
   g_internal_data.Get().shell_task_runner->PostTask(
       FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
 }
diff --git a/shell/android/native_handler_thread.cc b/shell/android/native_handler_thread.cc
index 9d1df59..338f25c 100644
--- a/shell/android/native_handler_thread.cc
+++ b/shell/android/native_handler_thread.cc
@@ -9,13 +9,15 @@
 
 namespace shell {
 
-jlong CreateMessageLoop(JNIEnv* env, jobject jcaller) {
+jlong CreateMessageLoop(JNIEnv* env, const JavaParamRef<jobject>& jcaller) {
   scoped_ptr<base::MessageLoop> loop(new base::MessageLoopForUI);
   base::MessageLoopForUI::current()->Start();
   return reinterpret_cast<intptr_t>(loop.release());
 }
 
-void DeleteMessageLoop(JNIEnv* env, jobject jcaller, jlong message_loop) {
+void DeleteMessageLoop(JNIEnv* env,
+                       const JavaParamRef<jobject>& jcaller,
+                       jlong message_loop) {
   scoped_ptr<base::MessageLoop> loop(
       reinterpret_cast<base::MessageLoop*>(message_loop));
   loop->QuitNow();
diff --git a/testing/android/native_test/native_test_launcher.cc b/testing/android/native_test/native_test_launcher.cc
index 343f118..52b419d 100644
--- a/testing/android/native_test/native_test_launcher.cc
+++ b/testing/android/native_test/native_test_launcher.cc
@@ -70,12 +70,12 @@
 }  // namespace
 
 static void RunTests(JNIEnv* env,
-                     jobject obj,
-                     jstring jcommand_line_flags,
-                     jstring jcommand_line_file_path,
-                     jstring jstdout_file_path,
+                     const JavaParamRef<jobject>& obj,
+                     const JavaParamRef<jstring>& jcommand_line_flags,
+                     const JavaParamRef<jstring>& jcommand_line_file_path,
+                     const JavaParamRef<jstring>& jstdout_file_path,
                      jboolean jstdout_fifo,
-                     jobject app_context) {
+                     const JavaParamRef<jobject>& app_context) {
   // Command line initialized basically, will be fully initialized later.
   static const char* const kInitialArgv[] = { "ChromeTestActivity" };
   base::CommandLine::Init(arraysize(kInitialArgv), kInitialArgv);
diff --git a/ui/gfx/android/shared_device_display_info.cc b/ui/gfx/android/shared_device_display_info.cc
index c58813d..0f7d3ab 100644
--- a/ui/gfx/android/shared_device_display_info.cc
+++ b/ui/gfx/android/shared_device_display_info.cc
@@ -13,7 +13,7 @@
 
 // static JNI call
 static void UpdateSharedDeviceDisplayInfo(JNIEnv* env,
-                                          jobject obj,
+                                          const JavaParamRef<jobject>& obj,
                                           jint display_height,
                                           jint display_width,
                                           jint physical_display_height,
diff --git a/ui/gfx/android/view_configuration.cc b/ui/gfx/android/view_configuration.cc
index 16c8617..654e0b7 100644
--- a/ui/gfx/android/view_configuration.cc
+++ b/ui/gfx/android/view_configuration.cc
@@ -148,7 +148,7 @@
 }  // namespace
 
 static void UpdateSharedViewConfiguration(JNIEnv* env,
-                                          jobject obj,
+                                          const JavaParamRef<jobject>& obj,
                                           jint scaled_maximum_fling_velocity,
                                           jint scaled_minimum_fling_velocity,
                                           jint scaled_touch_slop,