Commit 1b8b5152 authored by Torne (Richard Coles)'s avatar Torne (Richard Coles) Committed by Commit Bot

Convert various JNI code to use JavaRef.

No behaviour change intended. Using JavaRef instead of bare jobject
pointers is preferred. These changes are to prepare for an upcoming
refactoring.

Bug: 519562
Change-Id: Iff019df737a9d3f4edae0f5ede8c068cee3443d0
Reviewed-on: https://chromium-review.googlesource.com/c/1255662
Commit-Queue: Richard Coles <torne@chromium.org>
Reviewed-by: default avatarShimi Zhang <ctzsm@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Reviewed-by: default avatarPaul Jensen <pauljensen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#595922}
parent ec1f9be7
......@@ -21,10 +21,10 @@ namespace android_webview {
namespace {
void JNI_AwPdfExporter_GetPageRanges(JNIEnv* env,
jintArray int_arr,
const JavaRef<jintArray>& int_arr,
printing::PageRanges* range_vector) {
std::vector<int> pages;
base::android::JavaIntArrayToIntVector(env, int_arr, &pages);
base::android::JavaIntArrayToIntVector(env, int_arr.obj(), &pages);
for (int page : pages) {
printing::PageRange range;
range.from = page;
......@@ -56,7 +56,7 @@ AwPdfExporter::~AwPdfExporter() {
void AwPdfExporter::ExportToPdf(JNIEnv* env,
const JavaParamRef<jobject>& obj,
int fd,
jintArray pages,
const JavaParamRef<jintArray>& pages,
const JavaParamRef<jobject>& cancel_signal) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
printing::PrintSettings print_settings;
......
......@@ -32,7 +32,7 @@ class AwPdfExporter {
void ExportToPdf(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
int fd,
jintArray pages,
const base::android::JavaParamRef<jintArray>& pages,
const base::android::JavaParamRef<jobject>& cancel_signal);
private:
......
......@@ -25,6 +25,7 @@
using base::android::AttachCurrentThread;
using base::android::JavaParamRef;
using base::android::JavaRef;
namespace autofill_assistant {
namespace switches {
......@@ -34,12 +35,15 @@ const char* const kAutofillAssistantServerKey = "autofill-assistant-key";
namespace {
// Builds a map from two Java arrays of strings with the same length.
std::unique_ptr<std::map<std::string, std::string>>
BuildParametersFromJava(JNIEnv* env, jobjectArray names, jobjectArray values) {
std::unique_ptr<std::map<std::string, std::string>> BuildParametersFromJava(
JNIEnv* env,
const JavaRef<jobjectArray>& names,
const JavaRef<jobjectArray>& values) {
std::vector<std::string> names_vector;
base::android::AppendJavaStringArrayToStringVector(env, names, &names_vector);
base::android::AppendJavaStringArrayToStringVector(env, names.obj(),
&names_vector);
std::vector<std::string> values_vector;
base::android::AppendJavaStringArrayToStringVector(env, values,
base::android::AppendJavaStringArrayToStringVector(env, values.obj(),
&values_vector);
DCHECK_EQ(names_vector.size(), values_vector.size());
auto parameters = std::make_unique<std::map<std::string, std::string>>();
......
......@@ -104,21 +104,21 @@ const int64_t kInvalidBookmarkId = -1;
jlong JNI_ChromeBrowserProvider_ConvertJLongObjectToPrimitive(
JNIEnv* env,
jobject long_obj) {
const JavaRef<jobject>& long_obj) {
ScopedJavaLocalRef<jclass> jlong_clazz = GetClass(env, "java/lang/Long");
jmethodID long_value = MethodID::Get<MethodID::TYPE_INSTANCE>(
env, jlong_clazz.obj(), "longValue", "()J");
return env->CallLongMethod(long_obj, long_value, NULL);
return env->CallLongMethod(long_obj.obj(), long_value, NULL);
}
jboolean JNI_ChromeBrowserProvider_ConvertJBooleanObjectToPrimitive(
JNIEnv* env,
jobject boolean_object) {
const JavaRef<jobject>& boolean_object) {
ScopedJavaLocalRef<jclass> jboolean_clazz =
GetClass(env, "java/lang/Boolean");
jmethodID boolean_value = MethodID::Get<MethodID::TYPE_INSTANCE>(
env, jboolean_clazz.obj(), "booleanValue", "()Z");
return env->CallBooleanMethod(boolean_object, boolean_value, NULL);
return env->CallBooleanMethod(boolean_object.obj(), boolean_value, NULL);
}
base::Time ConvertJlongToTime(jlong value) {
......@@ -126,24 +126,26 @@ base::Time ConvertJlongToTime(jlong value) {
base::TimeDelta::FromMilliseconds((int64_t)value);
}
jint JNI_ChromeBrowserProvider_ConvertJIntegerToJint(JNIEnv* env,
jobject integer_obj) {
jint JNI_ChromeBrowserProvider_ConvertJIntegerToJint(
JNIEnv* env,
const JavaRef<jobject>& integer_obj) {
ScopedJavaLocalRef<jclass> jinteger_clazz =
GetClass(env, "java/lang/Integer");
jmethodID int_value = MethodID::Get<MethodID::TYPE_INSTANCE>(
env, jinteger_clazz.obj(), "intValue", "()I");
return env->CallIntMethod(integer_obj, int_value, NULL);
return env->CallIntMethod(integer_obj.obj(), int_value, NULL);
}
std::vector<base::string16> ConvertJStringArrayToString16Array(
JNIEnv* env,
jobjectArray array) {
const JavaRef<jobjectArray>& array) {
std::vector<base::string16> results;
if (array) {
jsize len = env->GetArrayLength(array);
if (!array.is_null()) {
jsize len = env->GetArrayLength(array.obj());
for (int i = 0; i < len; i++) {
ScopedJavaLocalRef<jstring> j_str(
env, static_cast<jstring>(env->GetObjectArrayElement(array, i)));
env,
static_cast<jstring>(env->GetObjectArrayElement(array.obj(), i)));
results.push_back(ConvertJavaStringToUTF16(env, j_str));
}
}
......@@ -725,21 +727,21 @@ class RemoveSearchTermsFromAPITask : public SearchTermTask {
// Fills the bookmark |row| with the given java objects.
void JNI_ChromeBrowserProvider_FillBookmarkRow(
JNIEnv* env,
jobject obj,
jstring url,
jobject created,
jobject isBookmark,
jobject date,
jbyteArray favicon,
jstring title,
jobject visits,
const JavaRef<jobject>& obj,
const JavaRef<jstring>& url,
const JavaRef<jobject>& created,
const JavaRef<jobject>& isBookmark,
const JavaRef<jobject>& date,
const JavaRef<jbyteArray>& favicon,
const JavaRef<jstring>& title,
const JavaRef<jobject>& visits,
jlong parent_id,
history::HistoryAndBookmarkRow* row,
BookmarkModel* model) {
// Needed because of the internal bookmark model task invocation.
DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI));
if (url) {
if (!url.is_null()) {
base::string16 raw_url = ConvertJavaStringToUTF16(env, url);
// GURL doesn't accept the URL without protocol, but the Android CTS
// allows it. We are trying to prefix with 'http://' to see whether
......@@ -750,29 +752,29 @@ void JNI_ChromeBrowserProvider_FillBookmarkRow(
row->set_raw_url(base::UTF16ToUTF8(raw_url));
}
if (created)
if (!created.is_null())
row->set_created(ConvertJlongToTime(
JNI_ChromeBrowserProvider_ConvertJLongObjectToPrimitive(env, created)));
if (isBookmark)
if (!isBookmark.is_null())
row->set_is_bookmark(
JNI_ChromeBrowserProvider_ConvertJBooleanObjectToPrimitive(env,
isBookmark));
if (date)
if (!date.is_null())
row->set_last_visit_time(ConvertJlongToTime(
JNI_ChromeBrowserProvider_ConvertJLongObjectToPrimitive(env, date)));
if (favicon) {
if (!favicon.is_null()) {
std::vector<uint8_t> bytes;
base::android::JavaByteArrayToByteVector(env, favicon, &bytes);
base::android::JavaByteArrayToByteVector(env, favicon.obj(), &bytes);
row->set_favicon(base::RefCountedBytes::TakeVector(&bytes));
}
if (title)
if (!title.is_null())
row->set_title(ConvertJavaStringToUTF16(env, title));
if (visits)
if (!visits.is_null())
row->set_visit_count(
JNI_ChromeBrowserProvider_ConvertJIntegerToJint(env, visits));
......@@ -783,15 +785,16 @@ void JNI_ChromeBrowserProvider_FillBookmarkRow(
}
// Fills the bookmark |row| with the given java objects if it is not null.
void JNI_ChromeBrowserProvider_FillSearchRow(JNIEnv* env,
jobject obj,
jstring search_term,
jobject date,
history::SearchRow* row) {
if (search_term)
void JNI_ChromeBrowserProvider_FillSearchRow(
JNIEnv* env,
const JavaRef<jobject>& obj,
const JavaRef<jstring>& search_term,
const JavaRef<jobject>& date,
history::SearchRow* row) {
if (!search_term.is_null())
row->set_search_term(ConvertJavaStringToUTF16(env, search_term));
if (date)
if (!date.is_null())
row->set_search_time(ConvertJlongToTime(
JNI_ChromeBrowserProvider_ConvertJLongObjectToPrimitive(env, date)));
}
......
......@@ -10,6 +10,7 @@
#include "net/android/network_change_notifier_android.h"
using base::android::JavaParamRef;
using base::android::JavaRef;
using base::android::ScopedJavaLocalRef;
namespace net {
......@@ -51,10 +52,10 @@ NetworkChangeNotifier::ConnectionSubtype ConvertConnectionSubtype(
// static
void NetworkChangeNotifierDelegateAndroid::JavaLongArrayToNetworkMap(
JNIEnv* env,
jlongArray long_array,
const JavaRef<jlongArray>& long_array,
NetworkMap* network_map) {
std::vector<int64_t> int64_list;
base::android::JavaLongArrayToInt64Vector(env, long_array, &int64_list);
base::android::JavaLongArrayToInt64Vector(env, long_array.obj(), &int64_list);
network_map->clear();
for (auto i = int64_list.begin(); i != int64_list.end(); ++i) {
NetworkChangeNotifier::NetworkHandle network_handle = *i;
......@@ -86,7 +87,7 @@ NetworkChangeNotifierDelegateAndroid::NetworkChangeNotifierDelegateAndroid()
ScopedJavaLocalRef<jlongArray> networks_and_types =
Java_NetworkChangeNotifier_getCurrentNetworksAndTypes(
env, java_network_change_notifier_);
JavaLongArrayToNetworkMap(env, networks_and_types.obj(), &network_map);
JavaLongArrayToNetworkMap(env, networks_and_types, &network_map);
SetCurrentNetworksAndTypes(network_map);
}
......
......@@ -138,9 +138,10 @@ class NET_EXPORT_PRIVATE NetworkChangeNotifierDelegateAndroid {
// Converts a Java long[] into a NetworkMap. Expects long[] to contain
// repeated instances of: NetworkHandle, ConnectionType
static void JavaLongArrayToNetworkMap(JNIEnv* env,
jlongArray long_array,
NetworkMap* network_map);
static void JavaLongArrayToNetworkMap(
JNIEnv* env,
const base::android::JavaRef<jlongArray>& long_array,
NetworkMap* network_map);
// Setters that grab appropriate lock.
void SetCurrentConnectionType(ConnectionType connection_type);
......
......@@ -22,6 +22,7 @@
#include "third_party/icu/source/i18n/unicode/ulocdata.h"
using base::android::JavaParamRef;
using base::android::JavaRef;
using base::android::ScopedJavaLocalRef;
namespace printing {
......@@ -41,9 +42,11 @@ void SetSizes(PrintSettings* settings, int dpi, int width, int height) {
false);
}
void GetPageRanges(JNIEnv* env, jintArray int_arr, PageRanges* range_vector) {
void GetPageRanges(JNIEnv* env,
const JavaRef<jintArray>& int_arr,
PageRanges* range_vector) {
std::vector<int> pages;
base::android::JavaIntArrayToIntVector(env, int_arr, &pages);
base::android::JavaIntArrayToIntVector(env, int_arr.obj(), &pages);
for (int page : pages) {
PageRange range;
range.from = page;
......@@ -115,9 +118,9 @@ void PrintingContextAndroid::AskUserForSettingsReply(
ScopedJavaLocalRef<jintArray> intArr =
Java_PrintingContext_getPages(env, j_printing_context_);
if (intArr.obj()) {
if (!intArr.is_null()) {
PageRanges range_vector;
GetPageRanges(env, intArr.obj(), &range_vector);
GetPageRanges(env, intArr, &range_vector);
settings_.set_ranges(range_vector);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment