summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/android/jni
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit/android/jni')
-rw-r--r--Source/WebKit/android/jni/WebCoreFrameBridge.cpp1
-rw-r--r--Source/WebKit/android/jni/WebCoreFrameBridge.h8
-rw-r--r--Source/WebKit/android/jni/WebCoreJni.cpp4
-rw-r--r--Source/WebKit/android/jni/WebViewCore.cpp192
-rw-r--r--Source/WebKit/android/jni/WebViewCore.h20
5 files changed, 40 insertions, 185 deletions
diff --git a/Source/WebKit/android/jni/WebCoreFrameBridge.cpp b/Source/WebKit/android/jni/WebCoreFrameBridge.cpp
index d0f3830..7a2971a 100644
--- a/Source/WebKit/android/jni/WebCoreFrameBridge.cpp
+++ b/Source/WebKit/android/jni/WebCoreFrameBridge.cpp
@@ -316,7 +316,6 @@ WebFrame::WebFrame(JNIEnv* env, jobject obj, jobject historyList, WebCore::Page*
ALOG_ASSERT(mJavaFrame->mAutoLogin, "Could not find method autoLogin");
mUserAgent = WTF::String();
- mUserInitiatedAction = false;
mBlockNetworkLoads = false;
m_renderSkins = 0;
}
diff --git a/Source/WebKit/android/jni/WebCoreFrameBridge.h b/Source/WebKit/android/jni/WebCoreFrameBridge.h
index 13f99af..30c1d83 100644
--- a/Source/WebKit/android/jni/WebCoreFrameBridge.h
+++ b/Source/WebKit/android/jni/WebCoreFrameBridge.h
@@ -128,13 +128,6 @@ class WebFrame : public WebCoreRefObject {
// application.
void autoLogin(const std::string& loginHeader);
- /**
- * When the user initiates a click, we set mUserInitiatedAction to true.
- * If a load happens due to this click, then we ask the application if it wants
- * to override the load. Otherwise, we attempt to load the resource internally.
- */
- void setUserInitiatedAction(bool userInitiatedAction) { mUserInitiatedAction = userInitiatedAction; }
-
WebCore::Page* page() const { return mPage; }
// Currently used only by the chrome net stack. A similar field is used by
@@ -163,7 +156,6 @@ class WebFrame : public WebCoreRefObject {
WebCore::Page* mPage;
WTF::String mUserAgent;
bool mBlockNetworkLoads;
- bool mUserInitiatedAction;
WebCore::RenderSkinAndroid* m_renderSkins;
};
diff --git a/Source/WebKit/android/jni/WebCoreJni.cpp b/Source/WebKit/android/jni/WebCoreJni.cpp
index 6dfc9f1..72ded59 100644
--- a/Source/WebKit/android/jni/WebCoreJni.cpp
+++ b/Source/WebKit/android/jni/WebCoreJni.cpp
@@ -118,8 +118,10 @@ jobject intRectToRect(JNIEnv* env, const WebCore::IntRect& rect)
ALOG_ASSERT(rectClass, "Could not find android/graphics/Rect");
jmethodID rectInit = env->GetMethodID(rectClass, "<init>", "(IIII)V");
ALOG_ASSERT(rectInit, "Could not find init method on Rect");
- return env->NewObject(rectClass, rectInit, rect.x(), rect.y(),
+ jobject jrect = env->NewObject(rectClass, rectInit, rect.x(), rect.y(),
rect.maxX(), rect.maxY());
+ env->DeleteLocalRef(rectClass);
+ return jrect;
}
jobjectArray intRectVectorToRectArray(JNIEnv* env, Vector<WebCore::IntRect>& rects)
diff --git a/Source/WebKit/android/jni/WebViewCore.cpp b/Source/WebKit/android/jni/WebViewCore.cpp
index 558f424..ae00941 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"
@@ -323,7 +324,6 @@ struct WebViewCore::JavaGlue {
jweak m_obj;
jmethodID m_scrollTo;
jmethodID m_contentDraw;
- jmethodID m_layersDraw;
jmethodID m_requestListBox;
jmethodID m_openFileChooser;
jmethodID m_requestSingleListBox;
@@ -456,7 +456,6 @@ WebViewCore::WebViewCore(JNIEnv* env, jobject javaWebViewCore, WebCore::Frame* m
m_javaGlue->m_obj = env->NewWeakGlobalRef(javaWebViewCore);
m_javaGlue->m_scrollTo = GetJMethod(env, clazz, "contentScrollTo", "(IIZZ)V");
m_javaGlue->m_contentDraw = GetJMethod(env, clazz, "contentDraw", "()V");
- m_javaGlue->m_layersDraw = GetJMethod(env, clazz, "layersDraw", "()V");
m_javaGlue->m_requestListBox = GetJMethod(env, clazz, "requestListBox", "([Ljava/lang/String;[I[I)V");
m_javaGlue->m_openFileChooser = GetJMethod(env, clazz, "openFileChooser", "(Ljava/lang/String;)Ljava/lang/String;");
m_javaGlue->m_requestSingleListBox = GetJMethod(env, clazz, "requestListBox", "([Ljava/lang/String;[II)V");
@@ -858,18 +857,6 @@ void WebViewCore::rebuildPictureSet(PictureSet* pictureSet)
#endif
}
-bool WebViewCore::updateLayers(LayerAndroid* layers)
-{
- // We update the layers
- ChromeClientAndroid* chromeC = static_cast<ChromeClientAndroid*>(m_mainFrame->page()->chrome()->client());
- GraphicsLayerAndroid* root = static_cast<GraphicsLayerAndroid*>(chromeC->layersSync());
- if (root) {
- LayerAndroid* updatedLayer = root->contentLayer();
- return layers->updateWithTree(updatedLayer);
- }
- return true;
-}
-
void WebViewCore::notifyAnimationStarted()
{
// We notify webkit that the animations have begun
@@ -1020,16 +1007,6 @@ void WebViewCore::contentDraw()
checkException(env);
}
-void WebViewCore::layersDraw()
-{
- JNIEnv* env = JSC::Bindings::getJNIEnv();
- AutoJObject javaObject = m_javaGlue->object(env);
- if (!javaObject.get())
- return;
- env->CallVoidMethod(javaObject.get(), m_javaGlue->m_layersDraw);
- checkException(env);
-}
-
void WebViewCore::contentInvalidate(const WebCore::IntRect &r)
{
DBG_SET_LOGD("rect={%d,%d,w=%d,h=%d}", r.x(), r.y(), r.width(), r.height());
@@ -3147,27 +3124,6 @@ void WebViewCore::chromeTakeFocus(FocusDirection direction)
env->CallVoidMethod(javaObject.get(), m_javaGlue->m_chromeTakeFocus, direction);
}
-// For when the user clicks the trackball, presses dpad center, or types into an
-// unfocused textfield. In the latter case, 'fake' will be true
-void WebViewCore::click(WebCore::Frame* frame, WebCore::Node* node, bool fake) {
- if (!node) {
- WebCore::IntPoint pt = m_mousePos;
- pt.move(m_scrollOffsetX, m_scrollOffsetY);
- WebCore::HitTestResult hitTestResult = m_mainFrame->eventHandler()->
- hitTestResultAtPoint(pt, false);
- node = hitTestResult.innerNode();
- frame = node->document()->frame();
- }
- if (node) {
- EditorClientAndroid* client
- = static_cast<EditorClientAndroid*>(
- m_mainFrame->editor()->client());
- client->setShouldChangeSelectedRange(false);
- handleMouseClick(frame, node, fake);
- client->setShouldChangeSelectedRange(true);
- }
-}
-
#if USE(ACCELERATED_COMPOSITING)
GraphicsLayerAndroid* WebViewCore::graphicsRootLayer() const
{
@@ -3222,14 +3178,6 @@ bool WebViewCore::handleTouchEvent(int action, Vector<int>& ids, Vector<IntPoint
type = WebCore::TouchEnd;
defaultTouchState = WebCore::PlatformTouchPoint::TouchStationary;
break;
- case 0x100: // WebViewCore.ACTION_LONGPRESS
- type = WebCore::TouchLongPress;
- defaultTouchState = WebCore::PlatformTouchPoint::TouchPressed;
- break;
- case 0x200: // WebViewCore.ACTION_DOUBLETAP
- type = WebCore::TouchDoubleTap;
- defaultTouchState = WebCore::PlatformTouchPoint::TouchPressed;
- break;
default:
// We do not support other kinds of touch event inside WebCore
// at the moment.
@@ -3263,29 +3211,21 @@ bool WebViewCore::handleTouchEvent(int action, Vector<int>& ids, Vector<IntPoint
return preventDefault;
}
-void WebViewCore::touchUp(int touchGeneration,
- WebCore::Frame* frame, WebCore::Node* node, int x, int y)
+bool WebViewCore::performMouseClick()
{
- if (touchGeneration == 0) {
- // m_mousePos should be set in getTouchHighlightRects()
- WebCore::HitTestResult hitTestResult = m_mainFrame->eventHandler()->hitTestResultAtPoint(m_mousePos, false);
- node = hitTestResult.innerNode();
- if (node)
- frame = node->document()->frame();
- else
- frame = 0;
- } else {
- if (m_touchGeneration > touchGeneration)
- return; // short circuit if a newer touch has been generated
- // This moves m_mousePos to the correct place, and handleMouseClick uses
- // m_mousePos to determine where the click happens.
- moveMouse(x, y);
- m_lastGeneration = touchGeneration;
- }
- if (frame && validNode(m_mainFrame, frame, 0)) {
- frame->loader()->resetMultipleFormSubmissionProtection();
- }
- handleMouseClick(frame, node, false);
+ WebCore::PlatformMouseEvent mouseDown(m_mousePos, m_mousePos, WebCore::LeftButton,
+ WebCore::MouseEventPressed, 1, false, false, false, false,
+ WTF::currentTime());
+ // ignore the return from as it will return true if the hit point can trigger selection change
+ m_mainFrame->eventHandler()->handleMousePressEvent(mouseDown);
+ WebCore::PlatformMouseEvent mouseUp(m_mousePos, m_mousePos, WebCore::LeftButton,
+ WebCore::MouseEventReleased, 1, false, false, false, false,
+ WTF::currentTime());
+ bool handled = m_mainFrame->eventHandler()->handleMouseReleaseEvent(mouseUp);
+
+ WebCore::Node* focusNode = currentFocus();
+ initializeTextInput(focusNode, false);
+ return handled;
}
// Check for the "x-webkit-soft-keyboard" attribute. If it is there and
@@ -3304,42 +3244,6 @@ static bool shouldSuppressKeyboard(const WebCore::Node* node) {
return false;
}
-// Common code for both clicking with the trackball and touchUp
-// Also used when typing into a non-focused textfield to give the textfield focus,
-// in which case, 'fake' is set to true
-bool WebViewCore::handleMouseClick(WebCore::Frame* framePtr, WebCore::Node* nodePtr, bool fake)
-{
- bool valid = !framePtr || validNode(m_mainFrame, framePtr, nodePtr);
- WebFrame* webFrame = WebFrame::getWebFrame(m_mainFrame);
- if (valid && nodePtr) {
- // Need to special case area tags because an image map could have an area element in the middle
- // so when attempting to get the default, the point chosen would be follow the wrong link.
- if (nodePtr->hasTagName(WebCore::HTMLNames::areaTag)) {
- webFrame->setUserInitiatedAction(true);
- nodePtr->dispatchSimulatedClick(0, true, true);
- webFrame->setUserInitiatedAction(false);
- return true;
- }
- }
- if (!valid || !framePtr)
- framePtr = m_mainFrame;
- webFrame->setUserInitiatedAction(true);
- WebCore::PlatformMouseEvent mouseDown(m_mousePos, m_mousePos, WebCore::LeftButton,
- WebCore::MouseEventPressed, 1, false, false, false, false,
- WTF::currentTime());
- // ignore the return from as it will return true if the hit point can trigger selection change
- framePtr->eventHandler()->handleMousePressEvent(mouseDown);
- WebCore::PlatformMouseEvent mouseUp(m_mousePos, m_mousePos, WebCore::LeftButton,
- WebCore::MouseEventReleased, 1, false, false, false, false,
- WTF::currentTime());
- bool handled = framePtr->eventHandler()->handleMouseReleaseEvent(mouseUp);
- webFrame->setUserInitiatedAction(false);
-
- WebCore::Node* focusNode = currentFocus();
- initializeTextInput(focusNode, fake);
- return handled;
-}
-
WebViewCore::InputType WebViewCore::getInputType(Node* node)
{
WebCore::RenderObject* renderer = node->renderer();
@@ -3433,12 +3337,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 +3358,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 +3378,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 +3394,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);
}
@@ -4485,16 +4393,6 @@ static jboolean Key(JNIEnv* env, jobject obj, jint nativeClass, jint keyCode,
unichar, repeatCount, isDown, isShift, isAlt, isSym));
}
-static void Click(JNIEnv* env, jobject obj, jint nativeClass, int framePtr,
- int nodePtr, jboolean fake)
-{
- WebViewCore* viewImpl = reinterpret_cast<WebViewCore*>(nativeClass);
- ALOG_ASSERT(viewImpl, "viewImpl not set in Click");
-
- viewImpl->click(reinterpret_cast<WebCore::Frame*>(framePtr),
- reinterpret_cast<WebCore::Node*>(nodePtr), fake);
-}
-
static void ContentInvalidateAll(JNIEnv* env, jobject obj, jint nativeClass)
{
reinterpret_cast<WebViewCore*>(nativeClass)->contentInvalidateAll();
@@ -4573,19 +4471,6 @@ void WebViewCore::addVisitedLink(const UChar* string, int length)
m_groupForVisitedLinks->addVisitedLink(string, length);
}
-static bool UpdateLayers(JNIEnv* env, jobject obj, jint nativeClass,
- jint jbaseLayer)
-{
- WebViewCore* viewImpl = (WebViewCore*) nativeClass;
- BaseLayerAndroid* baseLayer = (BaseLayerAndroid*) jbaseLayer;
- if (baseLayer) {
- LayerAndroid* root = static_cast<LayerAndroid*>(baseLayer->getChild(0));
- if (root)
- return viewImpl->updateLayers(root);
- }
- return true;
-}
-
static void NotifyAnimationStarted(JNIEnv* env, jobject obj, jint nativeClass)
{
WebViewCore* viewImpl = (WebViewCore*) nativeClass;
@@ -4685,13 +4570,10 @@ static jboolean HandleTouchEvent(JNIEnv* env, jobject obj, jint nativeClass,
return viewImpl->handleTouchEvent(action, ids, points, actionIndex, metaState);
}
-static void TouchUp(JNIEnv* env, jobject obj, jint nativeClass,
- jint touchGeneration, jint frame, jint node, jint x, jint y)
+static bool MouseClick(JNIEnv* env, jobject obj, jint nativeClass)
{
WebViewCore* viewImpl = reinterpret_cast<WebViewCore*>(nativeClass);
- ALOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
- viewImpl->touchUp(touchGeneration,
- (WebCore::Frame*) frame, (WebCore::Node*) node, x, y);
+ return viewImpl->performMouseClick();
}
static jstring RetrieveHref(JNIEnv* env, jobject obj, jint nativeClass,
@@ -5077,8 +4959,6 @@ static JNINativeMethod gJavaWebViewCoreMethods[] = {
(void*) FocusBoundsChanged } ,
{ "nativeKey", "(IIIIZZZZ)Z",
(void*) Key },
- { "nativeClick", "(IIIZ)V",
- (void*) Click },
{ "nativeContentInvalidateAll", "(I)V",
(void*) ContentInvalidateAll },
{ "nativeSendListBoxChoices", "(I[ZI)V",
@@ -5112,9 +4992,9 @@ static JNINativeMethod gJavaWebViewCoreMethods[] = {
{ "nativeFindAddress", "(Ljava/lang/String;Z)Ljava/lang/String;",
(void*) FindAddress },
{ "nativeHandleTouchEvent", "(II[I[I[IIII)Z",
- (void*) HandleTouchEvent },
- { "nativeTouchUp", "(IIIIII)V",
- (void*) TouchUp },
+ (void*) HandleTouchEvent },
+ { "nativeMouseClick", "(I)Z",
+ (void*) MouseClick },
{ "nativeRetrieveHref", "(III)Ljava/lang/String;",
(void*) RetrieveHref },
{ "nativeRetrieveAnchorText", "(III)Ljava/lang/String;",
@@ -5123,8 +5003,6 @@ static JNINativeMethod gJavaWebViewCoreMethods[] = {
(void*) RetrieveImageSource },
{ "nativeGetContentMinPrefWidth", "(I)I",
(void*) GetContentMinPrefWidth },
- { "nativeUpdateLayers", "(II)Z",
- (void*) UpdateLayers },
{ "nativeNotifyAnimationStarted", "(I)V",
(void*) NotifyAnimationStarted },
{ "nativeRecordContent", "(ILandroid/graphics/Region;Landroid/graphics/Point;)I",
diff --git a/Source/WebKit/android/jni/WebViewCore.h b/Source/WebKit/android/jni/WebViewCore.h
index d3f0e18..82a65cf 100644
--- a/Source/WebKit/android/jni/WebViewCore.h
+++ b/Source/WebKit/android/jni/WebViewCore.h
@@ -323,13 +323,6 @@ namespace android {
void chromeTakeFocus(WebCore::FocusDirection direction);
/**
- * Handle (trackball) click event / dpad center press from Java.
- * Also used when typing into an unfocused textfield, in which case 'fake'
- * will be true.
- */
- void click(WebCore::Frame* frame, WebCore::Node* node, bool fake);
-
- /**
* Handle touch event
*/
bool handleTouchEvent(int action, WTF::Vector<int>& ids,
@@ -337,17 +330,9 @@ namespace android {
int actionIndex, int metaState);
/**
- * Handle motionUp event from the UI thread (called touchUp in the
- * WebCore thread).
- * @param touchGeneration Generation number for touches so we can ignore
- * touches when a newer one has been generated.
- * @param frame Pointer to Frame containing the node that was touched.
- * @param node Pointer to Node that was touched.
- * @param x x-position of the touch.
- * @param y y-position of the touch.
+ * Clicks the mouse at its current location
*/
- void touchUp(int touchGeneration, WebCore::Frame* frame,
- WebCore::Node* node, int x, int y);
+ bool performMouseClick();
/**
* Sets the index of the label from a popup
@@ -654,7 +639,6 @@ namespace android {
* @param fake This is a fake mouse click, used to put a textfield into focus. Do not
* open the IME.
*/
- bool handleMouseClick(WebCore::Frame*, WebCore::Node*, bool fake);
WebCore::HTMLAnchorElement* retrieveAnchorElement(int x, int y);
WebCore::HTMLElement* retrieveElement(int x, int y,
const WebCore::QualifiedName& );