diff options
author | Cary Clark <cary@android.com> | 2010-12-15 11:27:24 -0500 |
---|---|---|
committer | Cary Clark <cary@android.com> | 2010-12-15 15:23:12 -0500 |
commit | d331bd5120eaafe86ad76f1e9364524a2daf2e78 (patch) | |
tree | f187c8829596de69db103066fe00febaced28150 /WebKit/android/jni/WebViewCore.cpp | |
parent | ff8665d820cc087df2b169dc727396c2a57e65ae (diff) | |
download | external_webkit-d331bd5120eaafe86ad76f1e9364524a2daf2e78.zip external_webkit-d331bd5120eaafe86ad76f1e9364524a2daf2e78.tar.gz external_webkit-d331bd5120eaafe86ad76f1e9364524a2daf2e78.tar.bz2 |
extract anchor href and image src separately
Long pressing a link may return an anchor, an image, or an
image in an anchor. Sometimes we want one, sometimes the other.
Make both available so the context menu can choose.
Companion changes are in packages/apps/Browser, frameworks/base
bug:3282745
bug:3263340
Change-Id: I422db224ad67147f0cbacc4078df305b1cf8564d
Diffstat (limited to 'WebKit/android/jni/WebViewCore.cpp')
-rw-r--r-- | WebKit/android/jni/WebViewCore.cpp | 38 |
1 files changed, 32 insertions, 6 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", |