diff options
| -rw-r--r-- | WebKit/android/jni/WebViewCore.cpp | 38 | ||||
| -rw-r--r-- | WebKit/android/jni/WebViewCore.h | 8 |
2 files changed, 39 insertions, 7 deletions
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp index c62ae0e..cbed244 100644 --- a/WebKit/android/jni/WebViewCore.cpp +++ b/WebKit/android/jni/WebViewCore.cpp @@ -1330,7 +1330,8 @@ void WebViewCore::dumpNavTree() #endif } -WebCore::HTMLAnchorElement* WebViewCore::retrieveAnchorElement(int x, int y) +HTMLElement* WebViewCore::retrieveElement(int x, int y, + const QualifiedName& tagName) { HitTestResult hitTestResult = m_mainFrame->eventHandler() ->hitTestResultAtPoint(IntPoint(x, y), false, false, @@ -1347,14 +1348,26 @@ WebCore::HTMLAnchorElement* WebViewCore::retrieveAnchorElement(int x, int y) } Node* node = hitTestResult.innerNode(); Node* element = node; - while (element && !element->isElementNode()) + while (element && (!element->isElementNode() + || !element->hasTagName(tagName))) { element = element->parentNode(); + } DBG_NAV_LOGD("node=%p element=%p x=%d y=%d nodeName=%s tagName=%s", node, element, x, y, node->nodeName().utf8().data(), - ((Element*) element)->tagName().utf8().data()); - if (!element->hasTagName(WebCore::HTMLNames::aTag)) - return 0; - return static_cast<WebCore::HTMLAnchorElement*>(element); + element ? ((Element*) element)->tagName().utf8().data() : "<none>"); + return static_cast<WebCore::HTMLElement*>(element); +} + +HTMLAnchorElement* WebViewCore::retrieveAnchorElement(int x, int y) +{ + return static_cast<HTMLAnchorElement*> + (retrieveElement(x, y, HTMLNames::aTag)); +} + +HTMLImageElement* WebViewCore::retrieveImageElement(int x, int y) +{ + return static_cast<HTMLImageElement*> + (retrieveElement(x, y, HTMLNames::imgTag)); } WTF::String WebViewCore::retrieveHref(int x, int y) @@ -1369,6 +1382,12 @@ WTF::String WebViewCore::retrieveAnchorText(int x, int y) return anchor ? anchor->text() : WTF::String(); } +WTF::String WebViewCore::retrieveImageSource(int x, int y) +{ + HTMLImageElement* image = retrieveImageElement(x, y); + return image ? image->src().string() : WTF::String(); +} + WTF::String WebViewCore::requestLabel(WebCore::Frame* frame, WebCore::Node* node) { @@ -3714,6 +3733,11 @@ static jstring RetrieveAnchorText(JNIEnv *env, jobject obj, jint x, jint y) return 0; } +static jstring RetrieveImageSource(JNIEnv *env, jobject obj, jint x, jint y) +{ + WTF::String result = GET_NATIVE_VIEW(env, obj)->retrieveImageSource(x, y); + return !result.isEmpty() ? WtfStringToJstring(env, result) : 0; +} static void MoveFocus(JNIEnv *env, jobject obj, jint framePtr, jint nodePtr) { @@ -4100,6 +4124,8 @@ static JNINativeMethod gJavaWebViewCoreMethods[] = { (void*) RetrieveHref }, { "nativeRetrieveAnchorText", "(II)Ljava/lang/String;", (void*) RetrieveAnchorText }, + { "nativeRetrieveImageSource", "(II)Ljava/lang/String;", + (void*) RetrieveImageSource }, { "nativeUpdateFrameCache", "()V", (void*) UpdateFrameCache }, { "nativeGetContentMinPrefWidth", "()I", diff --git a/WebKit/android/jni/WebViewCore.h b/WebKit/android/jni/WebViewCore.h index 41dc2e0f..b223191 100644 --- a/WebKit/android/jni/WebViewCore.h +++ b/WebKit/android/jni/WebViewCore.h @@ -50,11 +50,14 @@ namespace WebCore { class Color; class FrameView; class HTMLAnchorElement; + class HTMLElement; + class HTMLImageElement; class HTMLSelectElement; class RenderPart; class RenderText; class Node; class PlatformKeyboardEvent; + class QualifiedName; class RenderTextControl; class ScrollView; class TimerBase; @@ -287,9 +290,9 @@ namespace android { // Followings support calls from Java to native WebCore // - WTF::String retrieveHref(int x, int y); WTF::String retrieveAnchorText(int x, int y); + WTF::String retrieveImageSource(int x, int y); WTF::String requestLabel(WebCore::Frame* , WebCore::Node* ); // If the focus is a textfield (<input>), textarea, or contentEditable, @@ -610,6 +613,9 @@ namespace android { void sendNotifyProgressFinished(); bool handleMouseClick(WebCore::Frame* framePtr, WebCore::Node* nodePtr); WebCore::HTMLAnchorElement* retrieveAnchorElement(int x, int y); + WebCore::HTMLElement* retrieveElement(int x, int y, + const WebCore::QualifiedName& ); + WebCore::HTMLImageElement* retrieveImageElement(int x, int y); // below are members responsible for accessibility support String modifySelectionTextNavigationAxis(DOMSelection* selection, int direction, int granularity); String modifySelectionDomNavigationAxis(DOMSelection* selection, int direction, int granularity); |
