diff options
author | John Reck <jreck@google.com> | 2012-02-23 13:40:23 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-02-23 13:40:23 -0800 |
commit | 49be9fd5f37bd2633874b9b4236d965933ab24cb (patch) | |
tree | 686962ce413ea8866fd1761114ec26b4e127eba9 /Source/WebKit/android/jni/AndroidHitTestResult.cpp | |
parent | a5460bb8f4d5cad3f45fad39d1745bf31c2b2dac (diff) | |
parent | 773979f92560dd1aead375c82fd75b584a141e5d (diff) | |
download | external_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.cpp | 31 |
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++; |