summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/android/jni/AndroidHitTestResult.cpp
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2012-02-23 13:40:23 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-02-23 13:40:23 -0800
commit49be9fd5f37bd2633874b9b4236d965933ab24cb (patch)
tree686962ce413ea8866fd1761114ec26b4e127eba9 /Source/WebKit/android/jni/AndroidHitTestResult.cpp
parenta5460bb8f4d5cad3f45fad39d1745bf31c2b2dac (diff)
parent773979f92560dd1aead375c82fd75b584a141e5d (diff)
downloadexternal_webkit-49be9fd5f37bd2633874b9b4236d965933ab24cb.zip
external_webkit-49be9fd5f37bd2633874b9b4236d965933ab24cb.tar.gz
external_webkit-49be9fd5f37bd2633874b9b4236d965933ab24cb.tar.bz2
Merge "Support address detection"
Diffstat (limited to 'Source/WebKit/android/jni/AndroidHitTestResult.cpp')
-rw-r--r--Source/WebKit/android/jni/AndroidHitTestResult.cpp31
1 files changed, 28 insertions, 3 deletions
diff --git a/Source/WebKit/android/jni/AndroidHitTestResult.cpp b/Source/WebKit/android/jni/AndroidHitTestResult.cpp
index 6f94488..bd3f458 100644
--- a/Source/WebKit/android/jni/AndroidHitTestResult.cpp
+++ b/Source/WebKit/android/jni/AndroidHitTestResult.cpp
@@ -28,6 +28,8 @@
#include "config.h"
#include "AndroidHitTestResult.h"
+#include "content/address_detector.h"
+#include "android/WebHitTestInfo.h"
#include "Document.h"
#include "Element.h"
#include "Frame.h"
@@ -63,6 +65,7 @@ static struct {
jfieldID m_TapHighlightColor;
jfieldID m_EnclosingParentRects;
jfieldID m_HasFocus;
+ jfieldID m_IntentUrl;
} gHitTestGlue;
struct field {
@@ -89,6 +92,7 @@ static void InitJni(JNIEnv* env)
{ hitTestClass, "mTouchRects", "[Landroid/graphics/Rect;", &gHitTestGlue.m_TouchRects },
{ hitTestClass, "mEditable", "Z", &gHitTestGlue.m_Editable },
{ hitTestClass, "mLinkUrl", "Ljava/lang/String;", &gHitTestGlue.m_LinkUrl },
+ { hitTestClass, "mIntentUrl", "Ljava/lang/String;", &gHitTestGlue.m_IntentUrl },
{ hitTestClass, "mAnchorText", "Ljava/lang/String;", &gHitTestGlue.m_AnchorText },
{ hitTestClass, "mImageUrl", "Ljava/lang/String;", &gHitTestGlue.m_ImageUrl },
{ hitTestClass, "mAltDisplayString", "Ljava/lang/String;", &gHitTestGlue.m_AltDisplayString },
@@ -135,13 +139,25 @@ void AndroidHitTestResult::buildHighlightRects()
RenderObject* renderer = node->renderer();
Vector<FloatQuad> quads;
renderer->absoluteFocusRingQuads(quads);
- for (int i = 0; i < quads.size(); i++) {
+ for (size_t i = 0; i < quads.size(); i++) {
IntRect boundingBox = quads[i].enclosingBoundingBox();
boundingBox.move(-frameOffset.x(), -frameOffset.y());
m_highlightRects.append(boundingBox);
}
}
+void AndroidHitTestResult::searchContentDetectors()
+{
+ AddressDetector address;
+ WebKit::WebHitTestInfo webHitTest(m_hitTestResult);
+ m_searchResult = address.FindTappedContent(webHitTest);
+ if (m_searchResult.valid) {
+ m_highlightRects.clear();
+ RefPtr<Range> range = (PassRefPtr<Range>) m_searchResult.range;
+ range->textRects(m_highlightRects, true);
+ }
+}
+
void setStringField(JNIEnv* env, jobject obj, jfieldID field, const String& str)
{
jstring jstr = wtfStringToJstring(env, str, false);
@@ -149,6 +165,13 @@ void setStringField(JNIEnv* env, jobject obj, jfieldID field, const String& str)
env->DeleteLocalRef(jstr);
}
+void setStringField(JNIEnv* env, jobject obj, jfieldID field, const GURL& url)
+{
+ jstring jstr = stdStringToJstring(env, url.spec(), false);
+ env->SetObjectField(obj, field, jstr);
+ env->DeleteLocalRef(jstr);
+}
+
void setRectArray(JNIEnv* env, jobject obj, jfieldID field, Vector<IntRect> &rects)
{
jobjectArray array = intRectVectorToRectArray(env, rects);
@@ -176,6 +199,8 @@ jobject AndroidHitTestResult::createJavaObject(JNIEnv* env)
SET_BOOL(Editable, m_hitTestResult.isContentEditable());
SET_STRING(LinkUrl, m_hitTestResult.absoluteLinkURL().string());
+ if (m_searchResult.valid)
+ SET_STRING(IntentUrl, m_searchResult.intent_url);
SET_STRING(ImageUrl, m_hitTestResult.absoluteImageURL().string());
SET_STRING(AltDisplayString, m_hitTestResult.altDisplayString());
TextDirection titleTextDirection;
@@ -201,8 +226,8 @@ jobject AndroidHitTestResult::createJavaObject(JNIEnv* env)
Vector<IntRect> AndroidHitTestResult::enclosingParentRects(Node* node)
{
- int lastX;
int count = 0;
+ int lastX = 0;
Vector<IntRect> rects;
while (node && count < 5) {
@@ -214,7 +239,7 @@ Vector<IntRect> AndroidHitTestResult::enclosingParentRects(Node* node)
node->document()->frame());
IntRect rect = render->absoluteBoundingBoxRect();
rect.move(-frameOffset.x(), -frameOffset.y());
- if (rect.x() != lastX) {
+ if (count == 0 || rect.x() != lastX) {
rects.append(rect);
lastX = rect.x();
count++;