summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/android/jni/WebViewCore.cpp
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2012-04-11 11:41:55 -0700
committerGeorge Mount <mount@google.com>2012-04-11 14:30:03 -0700
commit0e0cbf51dbd312e919a6c39620b85305bebf5591 (patch)
treede3e85de1e51d87e848b908d22b96e68fcb119f4 /Source/WebKit/android/jni/WebViewCore.cpp
parenta03cddf4df7ce0e81f13ecedabf56471b805f843 (diff)
downloadexternal_webkit-0e0cbf51dbd312e919a6c39620b85305bebf5591.zip
external_webkit-0e0cbf51dbd312e919a6c39620b85305bebf5591.tar.gz
external_webkit-0e0cbf51dbd312e919a6c39620b85305bebf5591.tar.bz2
Free local references as early as possible.
Bug 6300264 Change-Id: I29ffffa9be33884a3e6a1c9fc5bb5cac95585cdc
Diffstat (limited to 'Source/WebKit/android/jni/WebViewCore.cpp')
-rw-r--r--Source/WebKit/android/jni/WebViewCore.cpp27
1 files changed, 16 insertions, 11 deletions
diff --git a/Source/WebKit/android/jni/WebViewCore.cpp b/Source/WebKit/android/jni/WebViewCore.cpp
index 558f424..c608912 100644
--- a/Source/WebKit/android/jni/WebViewCore.cpp
+++ b/Source/WebKit/android/jni/WebViewCore.cpp
@@ -108,6 +108,7 @@
#include "ResourceRequest.h"
#include "RuntimeEnabledFeatures.h"
#include "SchemeRegistry.h"
+#include "ScopedLocalRef.h"
#include "ScriptController.h"
#include "SelectionController.h"
#include "SelectText.h"
@@ -3433,12 +3434,14 @@ jobject WebViewCore::createTextFieldInitData(Node* node)
{
JNIEnv* env = JSC::Bindings::getJNIEnv();
TextFieldInitDataGlue* classDef = m_textFieldInitDataGlue;
- jclass clazz = env->FindClass("android/webkit/WebViewCore$TextFieldInitData");
- jobject initData = env->NewObject(clazz, classDef->m_constructor);
+ ScopedLocalRef<jclass> clazz(env,
+ env->FindClass("android/webkit/WebViewCore$TextFieldInitData"));
+ jobject initData = env->NewObject(clazz.get(), classDef->m_constructor);
env->SetIntField(initData, classDef->m_fieldPointer,
reinterpret_cast<int>(node));
- env->SetObjectField(initData, classDef->m_text,
+ ScopedLocalRef<jstring> inputText(env,
wtfStringToJstring(env, getInputText(node), true));
+ env->SetObjectField(initData, classDef->m_text, inputText.get());
env->SetIntField(initData, classDef->m_type, getInputType(node));
env->SetBooleanField(initData, classDef->m_isSpellCheckEnabled,
isSpellCheckEnabled(node));
@@ -3452,16 +3455,18 @@ jobject WebViewCore::createTextFieldInitData(Node* node)
isTextInput(document->previousFocusableNode(node, tabEvent.get())));
env->SetBooleanField(initData, classDef->m_isAutoCompleteEnabled,
isAutoCompleteEnabled(node));
- env->SetObjectField(initData, classDef->m_name,
+ ScopedLocalRef<jstring> fieldName(env,
wtfStringToJstring(env, getFieldName(node), false));
- env->SetObjectField(initData, classDef->m_name,
+ env->SetObjectField(initData, classDef->m_name, fieldName.get());
+ ScopedLocalRef<jstring> label(env,
wtfStringToJstring(env, requestLabel(document->frame(), node), false));
+ env->SetObjectField(initData, classDef->m_name, label.get());
env->SetIntField(initData, classDef->m_maxLength, getMaxLength(node));
LayerAndroid* layer = 0;
int layerId = platformLayerIdFromNode(node, &layer);
IntRect bounds = absoluteContentRect(node, layer);
- env->SetObjectField(initData, classDef->m_contentBounds,
- intRectToRect(env, bounds));
+ ScopedLocalRef<jobject> jbounds(env, intRectToRect(env, bounds));
+ env->SetObjectField(initData, classDef->m_contentBounds, jbounds.get());
env->SetIntField(initData, classDef->m_nodeLayerId, layerId);
IntRect contentRect;
RenderTextControl* rtc = toRenderTextControl(node);
@@ -3470,8 +3475,8 @@ jobject WebViewCore::createTextFieldInitData(Node* node)
contentRect.setHeight(rtc->scrollHeight());
contentRect.move(-rtc->scrollLeft(), -rtc->scrollTop());
}
- env->SetObjectField(initData, classDef->m_contentRect,
- intRectToRect(env, contentRect));
+ ScopedLocalRef<jobject> jcontentRect(env, intRectToRect(env, contentRect));
+ env->SetObjectField(initData, classDef->m_contentRect, jcontentRect.get());
return initData;
}
@@ -3486,9 +3491,9 @@ void WebViewCore::initEditField(Node* node)
int end = 0;
getSelectionOffsets(node, start, end);
SelectText* selectText = createSelectText(focusedFrame()->selection()->selection());
+ ScopedLocalRef<jobject> initData(env, createTextFieldInitData(node));
env->CallVoidMethod(javaObject.get(), m_javaGlue->m_initEditField,
- start, end, reinterpret_cast<int>(selectText),
- createTextFieldInitData(node));
+ start, end, reinterpret_cast<int>(selectText), initData.get());
checkException(env);
}