diff options
Diffstat (limited to 'WebKit/android/jni/WebViewCore.cpp')
| -rw-r--r-- | WebKit/android/jni/WebViewCore.cpp | 297 |
1 files changed, 62 insertions, 235 deletions
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp index 1c1384a..d546067 100644 --- a/WebKit/android/jni/WebViewCore.cpp +++ b/WebKit/android/jni/WebViewCore.cpp @@ -178,7 +178,7 @@ struct WebViewCoreFields { // ---------------------------------------------------------------------------- struct WebViewCore::JavaGlue { - jobject m_obj; + jweak m_obj; jmethodID m_spawnScrollTo; jmethodID m_scrollTo; jmethodID m_scrollBy; @@ -260,7 +260,7 @@ WebViewCore::WebViewCore(JNIEnv* env, jobject javaWebViewCore, WebCore::Frame* m jclass clazz = env->GetObjectClass(javaWebViewCore); m_javaGlue = new JavaGlue; - m_javaGlue->m_obj = adoptGlobalRef(env, javaWebViewCore); + m_javaGlue->m_obj = env->NewWeakGlobalRef(javaWebViewCore); m_javaGlue->m_spawnScrollTo = GetJMethod(env, clazz, "contentSpawnScrollTo", "(II)V"); m_javaGlue->m_scrollTo = GetJMethod(env, clazz, "contentScrollTo", "(II)V"); m_javaGlue->m_scrollBy = GetJMethod(env, clazz, "contentScrollBy", "(IIZ)V"); @@ -320,7 +320,7 @@ WebViewCore::~WebViewCore() if (m_javaGlue->m_obj) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - env->DeleteGlobalRef(m_javaGlue->m_obj); + env->DeleteWeakGlobalRef(m_javaGlue->m_obj); m_javaGlue->m_obj = 0; } delete m_javaGlue; @@ -615,13 +615,11 @@ void WebViewCore::recordPictureSet(PictureSet* content) DBG_NAV_LOG("call updateFrameCache"); updateFrameCache(); if (m_findIsUp) { + LOG_ASSERT(m_javaGlue->m_obj, + "A Java widget was not associated with this view bridge!"); JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), m_javaGlue->m_sendFindAgain); + env->CallVoidMethod(m_javaGlue->object(env).get(), + m_javaGlue->m_sendFindAgain); checkException(env); } } @@ -827,12 +825,9 @@ void WebViewCore::scrollTo(int x, int y, bool animate) // LOGD("WebViewCore::scrollTo(%d %d)\n", x, y); JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), animate ? m_javaGlue->m_spawnScrollTo : m_javaGlue->m_scrollTo, x, y); + env->CallVoidMethod(m_javaGlue->object(env).get(), + animate ? m_javaGlue->m_spawnScrollTo : m_javaGlue->m_scrollTo, + x, y); checkException(env); } @@ -840,12 +835,7 @@ void WebViewCore::sendNotifyProgressFinished() { LOG_ASSERT(m_javaGlue->m_obj, "A Java widget was not associated with this view bridge!"); JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), m_javaGlue->m_sendNotifyProgressFinished); + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_sendNotifyProgressFinished); checkException(env); } @@ -853,12 +843,7 @@ void WebViewCore::viewInvalidate(const WebCore::IntRect& rect) { LOG_ASSERT(m_javaGlue->m_obj, "A Java widget was not associated with this view bridge!"); JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_sendViewInvalidate, rect.x(), rect.y(), rect.right(), rect.bottom()); checkException(env); @@ -869,12 +854,7 @@ void WebViewCore::scrollBy(int dx, int dy, bool animate) if (!(dx | dy)) return; JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), m_javaGlue->m_scrollBy, + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_scrollBy, dx, dy, animate); checkException(env); } @@ -882,12 +862,7 @@ void WebViewCore::scrollBy(int dx, int dy, bool animate) void WebViewCore::contentDraw() { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), m_javaGlue->m_contentDraw); + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_contentDraw); checkException(env); } @@ -936,18 +911,14 @@ void WebViewCore::didFirstLayout() WebCore::FrameLoadType loadType = loader->loadType(); JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), m_javaGlue->m_didFirstLayout, + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_didFirstLayout, loadType == WebCore::FrameLoadTypeStandard // When redirect with locked history, we would like to reset the // scale factor. This is important for www.yahoo.com as it is // redirected to www.yahoo.com/?rs=1 on load. || loadType == WebCore::FrameLoadTypeRedirectWithLockedBackForwardList); checkException(env); + DBG_NAV_LOG("call updateFrameCache"); m_check_domtree_version = false; updateFrameCache(); @@ -960,12 +931,7 @@ void WebViewCore::updateViewport() LOG_ASSERT(m_javaGlue->m_obj, "A Java widget was not associated with this view bridge!"); JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), m_javaGlue->m_updateViewport); + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_updateViewport); checkException(env); } @@ -975,12 +941,7 @@ void WebViewCore::restoreScale(int scale) LOG_ASSERT(m_javaGlue->m_obj, "A Java widget was not associated with this view bridge!"); JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), m_javaGlue->m_restoreScale, scale); + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_restoreScale, scale); checkException(env); } @@ -990,12 +951,8 @@ void WebViewCore::restoreScreenWidthScale(int scale) LOG_ASSERT(m_javaGlue->m_obj, "A Java widget was not associated with this view bridge!"); JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), m_javaGlue->m_restoreScreenWidthScale, scale); + env->CallVoidMethod(m_javaGlue->object(env).get(), + m_javaGlue->m_restoreScreenWidthScale, scale); checkException(env); } @@ -1006,12 +963,7 @@ void WebViewCore::needTouchEvents(bool need) #if ENABLE(TOUCH_EVENTS) // Android JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), m_javaGlue->m_needTouchEvents, need); + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_needTouchEvents, need); checkException(env); #endif } @@ -1022,12 +974,7 @@ void WebViewCore::requestKeyboard(bool showKeyboard) LOG_ASSERT(m_javaGlue->m_obj, "A Java widget was not associated with this view bridge!"); JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), m_javaGlue->m_requestKeyboard, showKeyboard); + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_requestKeyboard, showKeyboard); checkException(env); } @@ -1650,7 +1597,7 @@ WebCore::String WebViewCore::getSelection(SkRegion* selRgn) rect.fRight, rect.fBottom); int cy = centerY(rect); WebCore::IntPoint startPt, endPt; - WebCore::Node* node, * endNode; + WebCore::Node* node = NULL, * endNode = NULL; for (int top = rect.fTop + 2; top != cy; top = cy) { startPt = WebCore::IntPoint(rect.fLeft + 1, top); WebCore::HitTestResult hitTestResult = m_mainFrame->eventHandler()-> @@ -2016,11 +1963,6 @@ void WebViewCore::listBoxRequest(WebCoreReply* reply, const uint16_t** labels, s // Create an array of java Strings for the drop down. JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; jobjectArray labelArray = makeLabelArray(env, labels, count); // Create an array determining whether each item is enabled. @@ -2045,11 +1987,15 @@ void WebViewCore::listBoxRequest(WebCoreReply* reply, const uint16_t** labels, s } env->ReleaseIntArrayElements(selectedArray, selArray, 0); - env->CallVoidMethod(obj.get(), m_javaGlue->m_requestListBox, labelArray, enabledArray, selectedArray); + env->CallVoidMethod(m_javaGlue->object(env).get(), + m_javaGlue->m_requestListBox, labelArray, enabledArray, + selectedArray); env->DeleteLocalRef(selectedArray); } else { // Pass up the single selection. - env->CallVoidMethod(obj.get(), m_javaGlue->m_requestSingleListBox, labelArray, enabledArray, selectedCountOrSelection); + env->CallVoidMethod(m_javaGlue->object(env).get(), + m_javaGlue->m_requestSingleListBox, labelArray, enabledArray, + selectedCountOrSelection); } env->DeleteLocalRef(labelArray); @@ -2251,14 +2197,11 @@ void WebViewCore::popupReply(const int* array, int count) void WebViewCore::addMessageToConsole(const WebCore::String& message, unsigned int lineNumber, const WebCore::String& sourceID) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; jstring jMessageStr = env->NewString((unsigned short *)message.characters(), message.length()); jstring jSourceIDStr = env->NewString((unsigned short *)sourceID.characters(), sourceID.length()); - env->CallVoidMethod(obj.get(), m_javaGlue->m_addMessageToConsole, jMessageStr, lineNumber, jSourceIDStr); + env->CallVoidMethod(m_javaGlue->object(env).get(), + m_javaGlue->m_addMessageToConsole, jMessageStr, lineNumber, + jSourceIDStr); env->DeleteLocalRef(jMessageStr); env->DeleteLocalRef(jSourceIDStr); checkException(env); @@ -2267,14 +2210,9 @@ void WebViewCore::addMessageToConsole(const WebCore::String& message, unsigned i void WebViewCore::jsAlert(const WebCore::String& url, const WebCore::String& text) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; jstring jInputStr = env->NewString((unsigned short *)text.characters(), text.length()); jstring jUrlStr = env->NewString((unsigned short *)url.characters(), url.length()); - env->CallVoidMethod(obj.get(), m_javaGlue->m_jsAlert, jUrlStr, jInputStr); + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_jsAlert, jUrlStr, jInputStr); env->DeleteLocalRef(jInputStr); env->DeleteLocalRef(jUrlStr); checkException(env); @@ -2284,14 +2222,11 @@ void WebViewCore::exceededDatabaseQuota(const WebCore::String& url, const WebCor { #if ENABLE(DATABASE) JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; jstring jDatabaseIdentifierStr = env->NewString((unsigned short *)databaseIdentifier.characters(), databaseIdentifier.length()); jstring jUrlStr = env->NewString((unsigned short *)url.characters(), url.length()); - env->CallVoidMethod(obj.get(), m_javaGlue->m_exceededDatabaseQuota, jUrlStr, jDatabaseIdentifierStr, currentQuota, estimatedSize); + env->CallVoidMethod(m_javaGlue->object(env).get(), + m_javaGlue->m_exceededDatabaseQuota, jUrlStr, + jDatabaseIdentifierStr, currentQuota, estimatedSize); env->DeleteLocalRef(jDatabaseIdentifierStr); env->DeleteLocalRef(jUrlStr); checkException(env); @@ -2302,12 +2237,8 @@ void WebViewCore::reachedMaxAppCacheSize(const unsigned long long spaceNeeded) { #if ENABLE(OFFLINE_WEB_APPLICATIONS) JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), m_javaGlue->m_reachedMaxAppCacheSize, spaceNeeded); + env->CallVoidMethod(m_javaGlue->object(env).get(), + m_javaGlue->m_reachedMaxAppCacheSize, spaceNeeded); checkException(env); #endif } @@ -2316,25 +2247,15 @@ void WebViewCore::populateVisitedLinks(WebCore::PageGroup* group) { m_groupForVisitedLinks = group; JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), m_javaGlue->m_populateVisitedLinks); + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_populateVisitedLinks); checkException(env); } void WebViewCore::geolocationPermissionsShowPrompt(const WebCore::String& origin) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; jstring originString = env->NewString((unsigned short *)origin.characters(), origin.length()); - env->CallVoidMethod(obj.get(), + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_geolocationPermissionsShowPrompt, originString); env->DeleteLocalRef(originString); @@ -2344,12 +2265,7 @@ void WebViewCore::geolocationPermissionsShowPrompt(const WebCore::String& origin void WebViewCore::geolocationPermissionsHidePrompt() { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_geolocationPermissionsHidePrompt); checkException(env); } @@ -2357,14 +2273,9 @@ void WebViewCore::geolocationPermissionsHidePrompt() bool WebViewCore::jsConfirm(const WebCore::String& url, const WebCore::String& text) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return false; jstring jInputStr = env->NewString((unsigned short *)text.characters(), text.length()); jstring jUrlStr = env->NewString((unsigned short *)url.characters(), url.length()); - jboolean result = env->CallBooleanMethod(obj.get(), m_javaGlue->m_jsConfirm, jUrlStr, jInputStr); + jboolean result = env->CallBooleanMethod(m_javaGlue->object(env).get(), m_javaGlue->m_jsConfirm, jUrlStr, jInputStr); env->DeleteLocalRef(jInputStr); env->DeleteLocalRef(jUrlStr); checkException(env); @@ -2374,16 +2285,10 @@ bool WebViewCore::jsConfirm(const WebCore::String& url, const WebCore::String& t bool WebViewCore::jsPrompt(const WebCore::String& url, const WebCore::String& text, const WebCore::String& defaultValue, WebCore::String& result) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return false; - jstring jInputStr = env->NewString((unsigned short *)text.characters(), text.length()); jstring jDefaultStr = env->NewString((unsigned short *)defaultValue.characters(), defaultValue.length()); jstring jUrlStr = env->NewString((unsigned short *)url.characters(), url.length()); - jstring returnVal = (jstring) env->CallObjectMethod(obj.get(), m_javaGlue->m_jsPrompt, jUrlStr, jInputStr, jDefaultStr); + jstring returnVal = (jstring) env->CallObjectMethod(m_javaGlue->object(env).get(), m_javaGlue->m_jsPrompt, jUrlStr, jInputStr, jDefaultStr); // If returnVal is null, it means that the user cancelled the dialog. if (!returnVal) return false; @@ -2399,14 +2304,9 @@ bool WebViewCore::jsPrompt(const WebCore::String& url, const WebCore::String& te bool WebViewCore::jsUnload(const WebCore::String& url, const WebCore::String& message) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return false; jstring jInputStr = env->NewString((unsigned short *)message.characters(), message.length()); jstring jUrlStr = env->NewString((unsigned short *)url.characters(), url.length()); - jboolean result = env->CallBooleanMethod(obj.get(), m_javaGlue->m_jsUnload, jUrlStr, jInputStr); + jboolean result = env->CallBooleanMethod(m_javaGlue->object(env).get(), m_javaGlue->m_jsUnload, jUrlStr, jInputStr); env->DeleteLocalRef(jInputStr); env->DeleteLocalRef(jUrlStr); checkException(env); @@ -2416,12 +2316,7 @@ bool WebViewCore::jsUnload(const WebCore::String& url, const WebCore::String& me bool WebViewCore::jsInterrupt() { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return true; // default to interrupt - jboolean result = env->CallBooleanMethod(obj.get(), m_javaGlue->m_jsInterrupt); + jboolean result = env->CallBooleanMethod(m_javaGlue->object(env).get(), m_javaGlue->m_jsInterrupt); checkException(env); return result; } @@ -2436,12 +2331,7 @@ jobject WebViewCore::getWebViewJavaObject() { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return 0; - return env->GetObjectField(obj.get(), gWebViewCoreFields.m_webView); + return env->GetObjectField(m_javaGlue->object(env).get(), gWebViewCoreFields.m_webView); } void WebViewCore::updateTextSelection() { @@ -2453,12 +2343,7 @@ void WebViewCore::updateTextSelection() { return; RenderTextControl* rtc = static_cast<RenderTextControl*>(renderer); JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - env->CallVoidMethod(obj.get(), + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_updateTextSelection, reinterpret_cast<int>(focusNode), rtc->selectionStart(), rtc->selectionEnd(), m_textGeneration); checkException(env); @@ -2470,21 +2355,15 @@ void WebViewCore::updateTextfield(WebCore::Node* ptr, bool changeToPassword, if (m_blockTextfieldUpdates) return; JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - if (changeToPassword) { - env->CallVoidMethod(obj.get(), m_javaGlue->m_updateTextfield, + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_updateTextfield, (int) ptr, true, 0, m_textGeneration); checkException(env); return; } int length = text.length(); jstring string = env->NewString((unsigned short *) text.characters(), length); - env->CallVoidMethod(obj.get(), m_javaGlue->m_updateTextfield, + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_updateTextfield, (int) ptr, false, string, m_textGeneration); env->DeleteLocalRef(string); checkException(env); @@ -2493,13 +2372,8 @@ void WebViewCore::updateTextfield(WebCore::Node* ptr, bool changeToPassword, void WebViewCore::clearTextEntry() { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - - env->CallVoidMethod(obj.get(), m_javaGlue->m_clearTextEntry); + env->CallVoidMethod(m_javaGlue->object(env).get(), + m_javaGlue->m_clearTextEntry); } void WebViewCore::setBackgroundColor(SkColor c) @@ -2517,15 +2391,9 @@ void WebViewCore::setBackgroundColor(SkColor c) jclass WebViewCore::getPluginClass(const WebCore::String& libName, const char* className) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return NULL; - jstring libString = env->NewString(libName.characters(), libName.length()); jstring classString = env->NewStringUTF(className); - jobject pluginClass = env->CallObjectMethod(obj.get(), + jobject pluginClass = env->CallObjectMethod(m_javaGlue->object(env).get(), m_javaGlue->m_getPluginClass, libString, classString); checkException(env); @@ -2544,14 +2412,8 @@ jclass WebViewCore::getPluginClass(const WebCore::String& libName, const char* c jobject WebViewCore::createPluginJavaInstance(const WebCore::String& libName, NPP npp) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return 0; - jstring libString = env->NewString(libName.characters(), libName.length()); - jobject result = env->CallObjectMethod(obj.get(), + jobject result = env->CallObjectMethod(m_javaGlue->object(env).get(), m_javaGlue->m_createPluginJavaInstance, libString, (int) npp); @@ -2566,13 +2428,7 @@ void WebViewCore::showFullScreenPlugin(jobject webkitPlugin, NPP npp, int x, int y, int width, int height) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - - env->CallVoidMethod(obj.get(), + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_showFullScreenPlugin, webkitPlugin, (int)npp, x, y, width, height); checkException(env); @@ -2581,26 +2437,16 @@ void WebViewCore::showFullScreenPlugin(jobject webkitPlugin, NPP npp, int x, void WebViewCore::hideFullScreenPlugin() { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - - env->CallVoidMethod(obj.get(), m_javaGlue->m_hideFullScreenPlugin); + env->CallVoidMethod(m_javaGlue->object(env).get(), + m_javaGlue->m_hideFullScreenPlugin); checkException(env); } void WebViewCore::updateFullScreenPlugin(int x, int y, int width, int height) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - - env->CallVoidMethod(obj.get(), m_javaGlue->m_updateFullScreenPlugin, x, y, + env->CallVoidMethod(m_javaGlue->object(env).get(), + m_javaGlue->m_updateFullScreenPlugin, x, y, width, height); checkException(env); } @@ -2608,13 +2454,7 @@ void WebViewCore::updateFullScreenPlugin(int x, int y, int width, int height) jobject WebViewCore::createSurface(jobject webkitPlugin, int x, int y, int width, int height) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return 0; - - jobject result = env->CallObjectMethod(obj.get(), + jobject result = env->CallObjectMethod(m_javaGlue->object(env).get(), m_javaGlue->m_createSurface, webkitPlugin, x, y, width, height); checkException(env); @@ -2625,27 +2465,15 @@ jobject WebViewCore::createSurface(jobject webkitPlugin, int x, int y, int width void WebViewCore::updateSurface(jobject childView, int x, int y, int width, int height) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - - env->CallVoidMethod(obj.get(), m_javaGlue->m_updateSurface, childView, x, - y, width, height); + env->CallVoidMethod(m_javaGlue->object(env).get(), + m_javaGlue->m_updateSurface, childView, x, y, width, height); checkException(env); } void WebViewCore::destroySurface(jobject childView) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - AutoJObject obj = m_javaGlue->object(env); - // if it is called during DESTROY is handled, the real object of WebViewCore - // can be gone. Check before using it. - if (!obj.get()) - return; - - env->CallVoidMethod(obj.get(), m_javaGlue->m_destroySurface, childView); + env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_destroySurface, childView); checkException(env); } @@ -3240,7 +3068,6 @@ static void ProvideVisitedHistory(JNIEnv *env, jobject obj, jobject hist) env->ReleaseStringChars(item, str); env->DeleteLocalRef(item); } - env->DeleteLocalRef(array); } // Notification from the UI thread that the plugin's full-screen surface has been discarded |
