Skip to content

Commit

Permalink
Convert various JNI code to use JavaRef.
Browse files Browse the repository at this point in the history
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: Shimi Zhang <ctzsm@chromium.org>
Reviewed-by: David Trainor <dtrainor@chromium.org>
Reviewed-by: Paul Jensen <pauljensen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#595922}
  • Loading branch information
tornewuff authored and Commit Bot committed Oct 2, 2018
1 parent ec1f9be commit 1b8b515
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 52 deletions.
6 changes: 3 additions & 3 deletions android_webview/browser/aw_pdf_exporter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion android_webview/browser/aw_pdf_exporter.h
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

using base::android::AttachCurrentThread;
using base::android::JavaParamRef;
using base::android::JavaRef;

namespace autofill_assistant {
namespace switches {
Expand All @@ -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>>();
Expand Down
71 changes: 37 additions & 34 deletions chrome/browser/android/provider/chrome_browser_provider.cc
Original file line number Diff line number Diff line change
Expand Up @@ -104,46 +104,48 @@ 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) {
return base::Time::UnixEpoch() +
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));
}
}
Expand Down Expand Up @@ -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
Expand All @@ -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));

Expand All @@ -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)));
}
Expand Down
7 changes: 4 additions & 3 deletions net/android/network_change_notifier_delegate_android.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}

Expand Down
7 changes: 4 additions & 3 deletions net/android/network_change_notifier_delegate_android.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
11 changes: 7 additions & 4 deletions printing/printing_context_android.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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;
Expand Down Expand Up @@ -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);
}

Expand Down

0 comments on commit 1b8b515

Please sign in to comment.