summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/android/jni/AndroidHitTestResult.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit/android/jni/AndroidHitTestResult.cpp')
-rw-r--r--Source/WebKit/android/jni/AndroidHitTestResult.cpp37
1 files changed, 35 insertions, 2 deletions
diff --git a/Source/WebKit/android/jni/AndroidHitTestResult.cpp b/Source/WebKit/android/jni/AndroidHitTestResult.cpp
index fd2fc25..0a69007 100644
--- a/Source/WebKit/android/jni/AndroidHitTestResult.cpp
+++ b/Source/WebKit/android/jni/AndroidHitTestResult.cpp
@@ -59,6 +59,7 @@ static struct JavaGlue {
jfieldID m_hitTestEditable;
jfieldID m_hitTestTouchRects;
jfieldID m_hitTestTapHighlightColor;
+ jfieldID m_hitTestEnclosingParentRects;
} gJavaGlue;
struct field {
@@ -90,6 +91,7 @@ static void InitJni(JNIEnv* env)
{ hitTestClass, "mAltDisplayString", "Ljava/lang/String;", &gJavaGlue.m_hitTestAltDisplayString },
{ hitTestClass, "mTitle", "Ljava/lang/String;", &gJavaGlue.m_hitTestTitle },
{ hitTestClass, "mTapHighlightColor", "I", &gJavaGlue.m_hitTestTapHighlightColor },
+ { hitTestClass, "mEnclosingParentRects", "[Landroid/graphics/Rect;", &gJavaGlue.m_hitTestEnclosingParentRects },
{0, 0, 0, 0},
};
@@ -103,8 +105,9 @@ static void InitJni(JNIEnv* env)
gJniInitialized = true;
}
-AndroidHitTestResult::AndroidHitTestResult(WebCore::HitTestResult& hitTestResult)
- : m_hitTestResult(hitTestResult)
+AndroidHitTestResult::AndroidHitTestResult(WebViewCore* webViewCore, WebCore::HitTestResult& hitTestResult)
+ : m_webViewCore(webViewCore)
+ , m_hitTestResult(hitTestResult)
{
}
@@ -137,6 +140,9 @@ jobject AndroidHitTestResult::createJavaObject(JNIEnv* env)
jobject hitTest = env->NewObject(hitTestClass, gJavaGlue.m_hitTestInit);
setRectArray(env, hitTest, gJavaGlue.m_hitTestTouchRects, m_highlightRects);
+ Vector<IntRect> rects = enclosingParentRects(m_hitTestResult.innerNode());
+ setRectArray(env, hitTest, gJavaGlue.m_hitTestEnclosingParentRects, rects);
+
SET_BOOL(Editable, m_hitTestResult.isContentEditable());
SET_STRING(LinkUrl, m_hitTestResult.absoluteLinkURL().string());
SET_STRING(ImageUrl, m_hitTestResult.absoluteImageURL().string());
@@ -157,4 +163,31 @@ jobject AndroidHitTestResult::createJavaObject(JNIEnv* env)
return hitTest;
}
+Vector<IntRect> AndroidHitTestResult::enclosingParentRects(Node* node)
+{
+ int lastX;
+ int count = 0;
+ Vector<IntRect> rects;
+
+ while (node && count < 5) {
+ RenderObject* render = node->renderer();
+ if (!render || render->isBody())
+ break;
+
+ IntPoint frameOffset = m_webViewCore->convertGlobalContentToFrameContent(IntPoint(),
+ node->document()->frame());
+ IntRect rect = render->absoluteBoundingBoxRect();
+ rect.move(-frameOffset.x(), -frameOffset.y());
+ if (rect.x() != lastX) {
+ rects.append(rect);
+ lastX = rect.x();
+ count++;
+ }
+
+ node = node->parentNode();
+ }
+
+ return rects;
+}
+
} /* namespace android */