From 19e61e8bbfd288bd9bf211069dd66e51ffadce15 Mon Sep 17 00:00:00 2001 From: Ben Murdoch Date: Mon, 16 Nov 2009 18:14:02 +0000 Subject: Add support for returning the anchor text back to Java land. Change-Id: Ic092a6fbacd577dab363896be38c882166230c3a --- WebKit/android/jni/WebViewCore.cpp | 39 +++++++++++++++++++++++++++++++++----- WebKit/android/jni/WebViewCore.h | 5 +++++ 2 files changed, 39 insertions(+), 5 deletions(-) (limited to 'WebKit/android') diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp index 0578081..7874598 100644 --- a/WebKit/android/jni/WebViewCore.cpp +++ b/WebKit/android/jni/WebViewCore.cpp @@ -1182,14 +1182,25 @@ void WebViewCore::dumpNavTree() #endif } -WebCore::String WebViewCore::retrieveHref(WebCore::Frame* frame, WebCore::Node* node) +WebCore::HTMLAnchorElement* WebViewCore::retrieveAnchorElement(WebCore::Frame* frame, WebCore::Node* node) { if (!CacheBuilder::validNode(m_mainFrame, frame, node)) - return WebCore::String(); + return 0; if (!node->hasTagName(WebCore::HTMLNames::aTag)) - return WebCore::String(); - WebCore::HTMLAnchorElement* anchor = static_cast(node); - return anchor->href(); + return 0; + return static_cast(node); +} + +WebCore::String WebViewCore::retrieveHref(WebCore::Frame* frame, WebCore::Node* node) +{ + WebCore::HTMLAnchorElement* anchor = retrieveAnchorElement(frame, node); + return anchor ? anchor->href() : WebCore::String(); +} + +WebCore::String WebViewCore::retrieveAnchorText(WebCore::Frame* frame, WebCore::Node* node) +{ + WebCore::HTMLAnchorElement* anchor = retrieveAnchorElement(frame, node); + return anchor ? anchor->text() : WebCore::String(); } void WebViewCore::updateCacheOnNodeChange() @@ -2796,6 +2807,22 @@ static jstring RetrieveHref(JNIEnv *env, jobject obj, jint frame, return 0; } +static jstring RetrieveAnchorText(JNIEnv *env, jobject obj, jint frame, + jint node) +{ +#ifdef ANDROID_INSTRUMENT + TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter); +#endif + WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj); + LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__); + WebCore::String result = viewImpl->retrieveAnchorText((WebCore::Frame*) frame, + (WebCore::Node*) node); + if (!result.isEmpty()) + return WebCoreStringToJString(env, result); + return 0; +} + + static void MoveMouse(JNIEnv *env, jobject obj, jint frame, jint x, jint y) { @@ -3124,6 +3151,8 @@ static JNINativeMethod gJavaWebViewCoreMethods[] = { (void*) TouchUp }, { "nativeRetrieveHref", "(II)Ljava/lang/String;", (void*) RetrieveHref }, + { "nativeRetrieveAnchorText", "(II)Ljava/lang/String;", + (void*) RetrieveAnchorText }, { "nativeUpdateFrameCache", "()V", (void*) UpdateFrameCache }, { "nativeGetContentMinPrefWidth", "()I", diff --git a/WebKit/android/jni/WebViewCore.h b/WebKit/android/jni/WebViewCore.h index 9702d3e..1ff5678 100644 --- a/WebKit/android/jni/WebViewCore.h +++ b/WebKit/android/jni/WebViewCore.h @@ -46,6 +46,7 @@ namespace WebCore { class AtomicString; class Color; class FrameView; + class HTMLAnchorElement; class HTMLSelectElement; class RenderPart; class RenderText; @@ -237,7 +238,9 @@ namespace android { // Followings support calls from Java to native WebCore // + WebCore::String retrieveHref(WebCore::Frame* frame, WebCore::Node* node); + WebCore::String retrieveAnchorText(WebCore::Frame* frame, WebCore::Node* node); WebCore::String getSelection(SkRegion* ); @@ -500,6 +503,8 @@ namespace android { void rebuildPictureSet(PictureSet* ); void sendNotifyProgressFinished(); bool handleMouseClick(WebCore::Frame* framePtr, WebCore::Node* nodePtr); + WebCore::HTMLAnchorElement* retrieveAnchorElement(WebCore::Frame* frame, WebCore::Node* node); + #if DEBUG_NAV_UI uint32_t m_now; #endif -- cgit v1.1