Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Unified Diff: content/browser/android/content_view_core_impl.cc

Issue 10827125: Use JavaObjectWeakGlobalRef in ContentViewCore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/android/content_view_core_impl.h ('k') | content/browser/android/download_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/android/content_view_core_impl.cc
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc
index ec8703b3dc0fefc8b5d3180e01670c79a6ff8bbc..f50b048c97c9dc96cae95ecff48cda792ad41937 100644
--- a/content/browser/android/content_view_core_impl.cc
+++ b/content/browser/android/content_view_core_impl.cc
@@ -56,11 +56,7 @@ jfieldID g_native_content_view;
namespace content {
struct ContentViewCoreImpl::JavaObject {
- jweak obj;
- ScopedJavaLocalRef<jobject> View(JNIEnv* env) {
- return GetRealObject(env, obj);
- }
};
// ----------------------------------------------------------------------------
@@ -81,7 +77,8 @@ ContentViewCore* ContentViewCore::GetNativeContentViewCore(JNIEnv* env,
ContentViewCoreImpl::ContentViewCoreImpl(JNIEnv* env, jobject obj,
WebContents* web_contents)
- : web_contents_(static_cast<WebContentsImpl*>(web_contents)),
+ : java_ref_(env, obj),
+ web_contents_(static_cast<WebContentsImpl*>(web_contents)),
tab_crashed_(false) {
DCHECK(web_contents) <<
"A ContentViewCoreImpl should be created with a valid WebContents.";
@@ -98,12 +95,9 @@ ContentViewCoreImpl::~ContentViewCoreImpl() {
// down.
notification_registrar_.RemoveAll();
- if (java_object_) {
- JNIEnv* env = AttachCurrentThread();
- env->DeleteWeakGlobalRef(java_object_->obj);
- delete java_object_;
- java_object_ = 0;
- }
+ delete java_object_;
+ java_object_ = NULL;
+ java_ref_.reset();
}
void ContentViewCoreImpl::Destroy(JNIEnv* env, jobject obj) {
@@ -125,11 +119,12 @@ void ContentViewCoreImpl::Observe(int type,
Details<std::pair<int, Value*> >(details).ptr();
std::string json;
base::JSONWriter::Write(result_pair->second, &json);
- ScopedJavaLocalRef<jstring> j_json = ConvertUTF8ToJavaString(env,
- json);
- Java_ContentViewCore_onEvaluateJavaScriptResult(env,
- java_object_->View(env).obj(),
- static_cast<jint>(result_pair->first), j_json.obj());
+ ScopedJavaLocalRef<jstring> j_json = ConvertUTF8ToJavaString(env, json);
+ ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
+ if (!j_obj.is_null()) {
+ Java_ContentViewCore_onEvaluateJavaScriptResult(env, j_obj.obj(),
+ static_cast<jint>(result_pair->first), j_json.obj());
+ }
break;
}
}
@@ -139,7 +134,6 @@ void ContentViewCoreImpl::Observe(int type,
void ContentViewCoreImpl::InitJNI(JNIEnv* env, jobject obj) {
java_object_ = new JavaObject;
- java_object_->obj = env->NewWeakGlobalRef(obj);
}
RenderWidgetHostViewAndroid*
@@ -466,6 +460,9 @@ void ContentViewCoreImpl::SetTitle(const string16& title) {
void ContentViewCoreImpl::ShowSelectPopupMenu(
const std::vector<WebMenuItem>& items, int selected_item, bool multiple) {
JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
+ if (j_obj.is_null())
+ return;
// For multi-select list popups we find the list of previous selections by
// iterating through the items. But for single selection popups we take the
@@ -502,24 +499,26 @@ void ContentViewCoreImpl::ShowSelectPopupMenu(
}
ScopedJavaLocalRef<jobjectArray> items_array(
base::android::ToJavaArrayOfStrings(env, labels));
- Java_ContentViewCore_showSelectPopup(env, java_object_->View(env).obj(),
+ Java_ContentViewCore_showSelectPopup(env, j_obj.obj(),
items_array.obj(), enabled_array.obj(),
multiple, selected_array.obj());
}
void ContentViewCoreImpl::ConfirmTouchEvent(bool handled) {
- // TODO(yusufo): Upstream changes for http://crbug/139386 to match upstream
- // to downstream.
JNIEnv* env = AttachCurrentThread();
- Java_ContentViewCore_confirmTouchEvent(env,
- java_object_->View(env).obj(),
- handled);
+ ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
+ if (j_obj.is_null())
+ return;
+ Java_ContentViewCore_confirmTouchEvent(env, j_obj.obj(), handled);
}
void ContentViewCoreImpl::DidSetNeedTouchEvents(bool need_touch_events) {
JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
+ if (j_obj.is_null())
+ return;
Java_ContentViewCore_didSetNeedTouchEvents(env,
- java_object_->View(env).obj(),
+ j_obj.obj(),
need_touch_events);
}
@@ -544,7 +543,10 @@ void ContentViewCoreImpl::OnSelectionBoundsChanged(
void ContentViewCoreImpl::DidStartLoading() {
JNIEnv* env = AttachCurrentThread();
- Java_ContentViewCore_didStartLoading(env, java_object_->View(env).obj());
+ ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
+ if (j_obj.is_null())
+ return;
+ Java_ContentViewCore_didStartLoading(env, j_obj.obj());
}
void ContentViewCoreImpl::OnAcceleratedCompositingStateChange(
@@ -554,10 +556,13 @@ void ContentViewCoreImpl::OnAcceleratedCompositingStateChange(
void ContentViewCoreImpl::StartContentIntent(const GURL& content_url) {
JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
+ if (j_obj.is_null())
+ return;
ScopedJavaLocalRef<jstring> jcontent_url =
ConvertUTF8ToJavaString(env, content_url.spec());
Java_ContentViewCore_startContentIntent(env,
- java_object_->View(env).obj(),
+ j_obj.obj(),
jcontent_url.obj());
}
« no previous file with comments | « content/browser/android/content_view_core_impl.h ('k') | content/browser/android/download_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698