diff --git a/android_webview/native/aw_autofill_client.cc b/android_webview/native/aw_autofill_client.cc index 194372eb3a4510..09bf0a9ec733fc 100644 --- a/android_webview/native/aw_autofill_client.cc +++ b/android_webview/native/aw_autofill_client.cc @@ -50,8 +50,8 @@ AwAutofillClient::AwAutofillClient(WebContents* contents) Java_AwAutofillClient_create(env, reinterpret_cast(this))); AwContents* aw_contents = AwContents::FromWebContents(web_contents_); - aw_contents->SetAwAutofillClient(delegate.obj()); - java_ref_ = JavaObjectWeakGlobalRef(env, delegate.obj()); + aw_contents->SetAwAutofillClient(delegate); + java_ref_ = JavaObjectWeakGlobalRef(env, delegate); } AwAutofillClient::~AwAutofillClient() { diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc index a986e2bc56381e..bcf3669a81b42c 100644 --- a/android_webview/native/aw_contents.cc +++ b/android_webview/native/aw_contents.cc @@ -273,7 +273,7 @@ void AwContents::InitAutofillIfNecessary(bool enabled) { AutofillManager::DISABLE_AUTOFILL_DOWNLOAD_MANAGER); } -void AwContents::SetAwAutofillClient(jobject client) { +void AwContents::SetAwAutofillClient(const JavaRef& client) { DCHECK_CURRENTLY_ON(BrowserThread::UI); JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef obj = java_ref_.get(env); @@ -399,8 +399,7 @@ void GenerateMHTMLCallback(ScopedJavaGlobalRef* callback, JNIEnv* env = AttachCurrentThread(); // Android files are UTF8, so the path conversion below is safe. Java_AwContents_generateMHTMLCallback( - env, ConvertUTF8ToJavaString(env, path.AsUTF8Unsafe()), size, - callback->obj()); + env, ConvertUTF8ToJavaString(env, path.AsUTF8Unsafe()), size, *callback); } } // namespace @@ -1147,8 +1146,7 @@ void InvokeVisualStateCallback(const JavaObjectWeakGlobalRef& java_ref, ScopedJavaLocalRef obj = java_ref.get(env); if (obj.is_null()) return; - Java_AwContents_invokeVisualStateCallback(env, obj, callback->obj(), - request_id); + Java_AwContents_invokeVisualStateCallback(env, obj, *callback, request_id); } } // namespace diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h index 2fe7aae9060530..68b9ef4fbe60db 100644 --- a/android_webview/native/aw_contents.h +++ b/android_webview/native/aw_contents.h @@ -305,7 +305,7 @@ class AwContents : public FindHelper::Listener, void SetSaveFormData(bool enabled); // Sets the java client - void SetAwAutofillClient(jobject client); + void SetAwAutofillClient(const base::android::JavaRef& client); void SetJsOnlineProperty(JNIEnv* env, const base::android::JavaParamRef& obj, diff --git a/android_webview/native/aw_contents_background_thread_client.cc b/android_webview/native/aw_contents_background_thread_client.cc index 138d9a4b5821c6..d2fa3de8d2ccb7 100644 --- a/android_webview/native/aw_contents_background_thread_client.cc +++ b/android_webview/native/aw_contents_background_thread_client.cc @@ -6,19 +6,21 @@ #include "jni/AwContentsBackgroundThreadClient_jni.h" +using base::android::JavaRef; + namespace android_webview { // static base::android::ScopedJavaLocalRef AwContentsBackgroundThreadClient::shouldInterceptRequest( JNIEnv* env, - jobject obj, - jstring url, + const JavaRef& obj, + const JavaRef& url, jboolean isMainFrame, jboolean hasUserGesture, - jstring method, - jobjectArray requestHeaderNames, - jobjectArray requestHeaderValues) { + const JavaRef& method, + const JavaRef& requestHeaderNames, + const JavaRef& requestHeaderValues) { return Java_AwContentsBackgroundThreadClient_shouldInterceptRequestFromNative( env, obj, url, isMainFrame, hasUserGesture, method, requestHeaderNames, requestHeaderValues); diff --git a/android_webview/native/aw_contents_background_thread_client.h b/android_webview/native/aw_contents_background_thread_client.h index 88939e11114e01..d08cea195d602b 100644 --- a/android_webview/native/aw_contents_background_thread_client.h +++ b/android_webview/native/aw_contents_background_thread_client.h @@ -13,13 +13,13 @@ class AwContentsBackgroundThreadClient { public: static base::android::ScopedJavaLocalRef shouldInterceptRequest( JNIEnv* env, - jobject obj, - jstring url, + const base::android::JavaRef& obj, + const base::android::JavaRef& url, jboolean isMainFrame, jboolean hasUserGesture, - jstring method, - jobjectArray requestHeaderNames, - jobjectArray requestHeaderValues); + const base::android::JavaRef& method, + const base::android::JavaRef& requestHeaderNames, + const base::android::JavaRef& requestHeaderValues); }; } diff --git a/android_webview/native/aw_contents_client_bridge.cc b/android_webview/native/aw_contents_client_bridge.cc index d25dc84ab8f626..f9f8faf913954b 100644 --- a/android_webview/native/aw_contents_client_bridge.cc +++ b/android_webview/native/aw_contents_client_bridge.cc @@ -52,9 +52,10 @@ void RecordClientCertificateKey( } // namespace -AwContentsClientBridge::AwContentsClientBridge(JNIEnv* env, jobject obj) +AwContentsClientBridge::AwContentsClientBridge(JNIEnv* env, + const JavaRef& obj) : java_ref_(env, obj) { - DCHECK(obj); + DCHECK(!obj.is_null()); Java_AwContentsClientBridge_setNativeContentsClientBridge( env, obj, reinterpret_cast(this)); } diff --git a/android_webview/native/aw_contents_client_bridge.h b/android_webview/native/aw_contents_client_bridge.h index fc8799d01132b5..406138d01d17a1 100644 --- a/android_webview/native/aw_contents_client_bridge.h +++ b/android_webview/native/aw_contents_client_bridge.h @@ -29,7 +29,8 @@ namespace android_webview { // any references. class AwContentsClientBridge : public AwContentsClientBridgeBase { public: - AwContentsClientBridge(JNIEnv* env, jobject obj); + AwContentsClientBridge(JNIEnv* env, + const base::android::JavaRef& obj); ~AwContentsClientBridge() override; // AwContentsClientBridgeBase implementation diff --git a/android_webview/native/aw_contents_client_bridge_unittest.cc b/android_webview/native/aw_contents_client_bridge_unittest.cc index e4b15731c26f4b..1b100e3dd85388 100644 --- a/android_webview/native/aw_contents_client_bridge_unittest.cc +++ b/android_webview/native/aw_contents_client_bridge_unittest.cc @@ -80,7 +80,7 @@ void AwContentsClientBridgeTest::SetUp() { ASSERT_TRUE(net::android::RegisterJni(env_)); jbridge_.Reset(env_, Java_MockAwContentsClientBridge_getAwContentsClientBridge(env_).obj()); - bridge_.reset(new AwContentsClientBridge(env_, jbridge_.obj())); + bridge_.reset(new AwContentsClientBridge(env_, jbridge_)); selected_cert_ = nullptr; cert_selected_callbacks_ = 0; cert_request_info_ = new net::SSLCertRequestInfo; diff --git a/android_webview/native/aw_contents_io_thread_client_impl.cc b/android_webview/native/aw_contents_io_thread_client_impl.cc index 264066723b9b97..4080b9b5317a08 100644 --- a/android_webview/native/aw_contents_io_thread_client_impl.cc +++ b/android_webview/native/aw_contents_io_thread_client_impl.cc @@ -328,14 +328,10 @@ std::unique_ptr RunShouldInterceptRequest( "shouldInterceptRequest"); ScopedJavaLocalRef ret = AwContentsBackgroundThreadClient::shouldInterceptRequest( - env, - obj.obj(), - web_request.jstring_url.obj(), - web_request.is_main_frame, - web_request.has_user_gesture, - web_request.jstring_method.obj(), - web_request.jstringArray_header_names.obj(), - web_request.jstringArray_header_values.obj()); + env, obj, web_request.jstring_url, web_request.is_main_frame, + web_request.has_user_gesture, web_request.jstring_method, + web_request.jstringArray_header_names, + web_request.jstringArray_header_values); return std::unique_ptr( ret.is_null() ? nullptr : new AwWebResourceResponseImpl(ret)); } diff --git a/android_webview/native/aw_contents_statics.cc b/android_webview/native/aw_contents_statics.cc index c82790379fbaa1..6e2948c750f40a 100644 --- a/android_webview/native/aw_contents_statics.cc +++ b/android_webview/native/aw_contents_statics.cc @@ -31,7 +31,7 @@ namespace { void ClientCertificatesCleared(ScopedJavaGlobalRef* callback) { DCHECK_CURRENTLY_ON(BrowserThread::UI); JNIEnv* env = AttachCurrentThread(); - Java_AwContentsStatics_clientCertificatesCleared(env, callback->obj()); + Java_AwContentsStatics_clientCertificatesCleared(env, *callback); } void NotifyClientCertificatesChanged() { diff --git a/android_webview/native/aw_message_port_service_impl.cc b/android_webview/native/aw_message_port_service_impl.cc index 28365302968a34..bc55c23bb74386 100644 --- a/android_webview/native/aw_message_port_service_impl.cc +++ b/android_webview/native/aw_message_port_service_impl.cc @@ -215,7 +215,7 @@ void AwMessagePortServiceImpl::OnMessageChannelCreated( if (obj.is_null()) return; Java_AwMessagePortService_onMessageChannelCreated(env, obj, *port1, *port2, - ports->obj()); + *ports); } // Adds a new port to the message port service. diff --git a/android_webview/native/aw_pdf_exporter.cc b/android_webview/native/aw_pdf_exporter.cc index a30bac6d74feb8..7b39667d44459b 100644 --- a/android_webview/native/aw_pdf_exporter.cc +++ b/android_webview/native/aw_pdf_exporter.cc @@ -12,16 +12,16 @@ #include "printing/units.h" using base::android::JavaParamRef; +using base::android::JavaRef; using base::android::ScopedJavaLocalRef; namespace android_webview { AwPdfExporter::AwPdfExporter(JNIEnv* env, - jobject obj, + const JavaRef& obj, content::WebContents* web_contents) - : java_ref_(env, obj), - web_contents_(web_contents) { - DCHECK(obj); + : java_ref_(env, obj), web_contents_(web_contents) { + DCHECK(!obj.is_null()); Java_AwPdfExporter_setNativeAwPdfExporter( env, obj, reinterpret_cast(this)); } @@ -59,7 +59,7 @@ int MilsToDots(int val, int dpi) { } // anonymous namespace void AwPdfExporter::InitPdfSettings(JNIEnv* env, - jobject obj, + const JavaRef& obj, printing::PrintSettings& settings) { int dpi = Java_AwPdfExporter_getDpi(env, obj); int width = Java_AwPdfExporter_getPageWidth(env, obj); diff --git a/android_webview/native/aw_pdf_exporter.h b/android_webview/native/aw_pdf_exporter.h index fd67b80800e676..aa08b5f67d6aa7 100644 --- a/android_webview/native/aw_pdf_exporter.h +++ b/android_webview/native/aw_pdf_exporter.h @@ -24,7 +24,7 @@ namespace android_webview { class AwPdfExporter { public: AwPdfExporter(JNIEnv* env, - jobject obj, + const base::android::JavaRef& obj, content::WebContents* web_contents); ~AwPdfExporter(); @@ -36,7 +36,7 @@ class AwPdfExporter { private: void InitPdfSettings(JNIEnv* env, - jobject obj, + const base::android::JavaRef& obj, printing::PrintSettings& settings); void DidExportPdf(int fd, bool success); diff --git a/android_webview/native/aw_settings.cc b/android_webview/native/aw_settings.cc index 77892fd59a0e81..5f0745d0249719 100644 --- a/android_webview/native/aw_settings.cc +++ b/android_webview/native/aw_settings.cc @@ -90,9 +90,9 @@ AwSettings::~AwSettings() { JNIEnv* env = base::android::AttachCurrentThread(); ScopedJavaLocalRef scoped_obj = aw_settings_.get(env); - jobject obj = scoped_obj.obj(); - if (!obj) return; - Java_AwSettings_nativeAwSettingsGone(env, obj, + if (scoped_obj.is_null()) + return; + Java_AwSettings_nativeAwSettingsGone(env, scoped_obj, reinterpret_cast(this)); } @@ -122,10 +122,10 @@ void AwSettings::UpdateEverything() { JNIEnv* env = base::android::AttachCurrentThread(); CHECK(env); ScopedJavaLocalRef scoped_obj = aw_settings_.get(env); - jobject obj = scoped_obj.obj(); - if (!obj) return; + if (scoped_obj.is_null()) + return; // Grab the lock and call UpdateEverythingLocked. - Java_AwSettings_updateEverything(env, obj); + Java_AwSettings_updateEverything(env, scoped_obj); } void AwSettings::UpdateEverythingLocked(JNIEnv* env, @@ -260,11 +260,11 @@ void AwSettings::PopulateWebPreferences(WebPreferences* web_prefs) { JNIEnv* env = base::android::AttachCurrentThread(); CHECK(env); ScopedJavaLocalRef scoped_obj = aw_settings_.get(env); - jobject obj = scoped_obj.obj(); - if (!obj) return; + if (scoped_obj.is_null()) + return; // Grab the lock and call PopulateWebPreferencesLocked. - Java_AwSettings_populateWebPreferences( - env, obj, reinterpret_cast(web_prefs)); + Java_AwSettings_populateWebPreferences(env, scoped_obj, + reinterpret_cast(web_prefs)); } void AwSettings::PopulateWebPreferencesLocked(JNIEnv* env, diff --git a/android_webview/native/aw_web_contents_delegate.cc b/android_webview/native/aw_web_contents_delegate.cc index ad7e7e316dc5fc..a8f04a29358710 100644 --- a/android_webview/native/aw_web_contents_delegate.cc +++ b/android_webview/native/aw_web_contents_delegate.cc @@ -116,17 +116,15 @@ void AwWebContentsDelegate::RunFileChooser( DCHECK_EQ(FileChooserParams::Open, params.mode); } Java_AwWebContentsDelegate_runFileChooser( - env, java_delegate.obj(), render_frame_host->GetProcess()->GetID(), + env, java_delegate, render_frame_host->GetProcess()->GetID(), render_frame_host->GetRoutingID(), mode_flags, ConvertUTF16ToJavaString( - env, base::JoinString(params.accept_types, base::ASCIIToUTF16(","))) - .obj(), - params.title.empty() ? NULL - : ConvertUTF16ToJavaString(env, params.title).obj(), + env, base::JoinString(params.accept_types, base::ASCIIToUTF16(","))), + params.title.empty() ? nullptr + : ConvertUTF16ToJavaString(env, params.title), params.default_file_name.empty() - ? NULL - : ConvertUTF8ToJavaString(env, params.default_file_name.value()) - .obj(), + ? nullptr + : ConvertUTF8ToJavaString(env, params.default_file_name.value()), params.capture); } diff --git a/android_webview/native/input_stream_impl.cc b/android_webview/native/input_stream_impl.cc index efcf31184790da..a2310cf246fc04 100644 --- a/android_webview/native/input_stream_impl.cc +++ b/android_webview/native/input_stream_impl.cc @@ -85,13 +85,12 @@ bool InputStreamImpl::Read(net::IOBuffer* dest, int length, int* bytes_read) { int remaining_length = length; char* dest_write_ptr = dest->data(); - jbyteArray buffer = buffer_.obj(); *bytes_read = 0; while (remaining_length > 0) { const int max_transfer_length = std::min(remaining_length, kBufferSize); const int transfer_length = Java_InputStreamUtil_read( - env, jobject_, buffer, 0, max_transfer_length); + env, jobject_, buffer_, 0, max_transfer_length); if (transfer_length == kExceptionThrownStatusCode) return false; @@ -105,7 +104,7 @@ bool InputStreamImpl::Read(net::IOBuffer* dest, int length, int* bytes_read) { continue; DCHECK_GE(max_transfer_length, transfer_length); - DCHECK_GE(env->GetArrayLength(buffer), transfer_length); + DCHECK_GE(env->GetArrayLength(buffer_.obj()), transfer_length); // This check is to prevent a malicious InputStream implementation from // overrunning the |dest| buffer. @@ -114,8 +113,8 @@ bool InputStreamImpl::Read(net::IOBuffer* dest, int length, int* bytes_read) { // Copy the data over to the provided C++ IOBuffer. DCHECK_GE(remaining_length, transfer_length); - env->GetByteArrayRegion(buffer, 0, transfer_length, - reinterpret_cast(dest_write_ptr)); + env->GetByteArrayRegion(buffer_.obj(), 0, transfer_length, + reinterpret_cast(dest_write_ptr)); if (ClearException(env)) return false; diff --git a/android_webview/native/input_stream_impl.h b/android_webview/native/input_stream_impl.h index e78ad76d1f9738..c50566308674d6 100644 --- a/android_webview/native/input_stream_impl.h +++ b/android_webview/native/input_stream_impl.h @@ -32,7 +32,7 @@ class InputStreamImpl : public InputStream { ~InputStreamImpl() override; // Gets the underlying Java object. Guaranteed non-NULL. - jobject jobj() const { return jobject_.obj(); } + const base::android::JavaRef& jobj() const { return jobject_; } // InputStream implementation. bool BytesAvailable(int* bytes_available) const override;