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