#endif
}
-WebCore::HTMLAnchorElement* WebViewCore::retrieveAnchorElement(WebCore::Frame* frame, WebCore::Node* node)
+WebCore::HTMLAnchorElement* WebViewCore::retrieveAnchorElement(int x, int y)
{
- if (!CacheBuilder::validNode(m_mainFrame, frame, node))
+ HitTestResult hitTestResult = m_mainFrame->eventHandler()
+ ->hitTestResultAtPoint(IntPoint(x, y), false, false,
+ DontHitTestScrollbars, HitTestRequest::Active | HitTestRequest::ReadOnly,
+ IntSize(1, 1));
+ if (!hitTestResult.innerNode() || !hitTestResult.innerNode()->inDocument()) {
+ LOGE("Should not happen: no in document Node found");
+ return 0;
+ }
+ const ListHashSet<RefPtr<Node> >& list = hitTestResult.rectBasedTestResult();
+ if (list.isEmpty()) {
+ LOGE("Should not happen: no rect-based-test nodes found");
return 0;
+ }
+ Node* node = hitTestResult.innerNode();
if (!node->hasTagName(WebCore::HTMLNames::aTag))
return 0;
return static_cast<WebCore::HTMLAnchorElement*>(node);
}
-WTF::String WebViewCore::retrieveHref(WebCore::Frame* frame, WebCore::Node* node)
+WTF::String WebViewCore::retrieveHref(int x, int y)
{
- WebCore::HTMLAnchorElement* anchor = retrieveAnchorElement(frame, node);
+ WebCore::HTMLAnchorElement* anchor = retrieveAnchorElement(x, y);
return anchor ? anchor->href() : WTF::String();
}
-WTF::String WebViewCore::retrieveAnchorText(WebCore::Frame* frame, WebCore::Node* node)
+WTF::String WebViewCore::retrieveAnchorText(int x, int y)
{
- WebCore::HTMLAnchorElement* anchor = retrieveAnchorElement(frame, node);
+ WebCore::HTMLAnchorElement* anchor = retrieveAnchorElement(x, y);
return anchor ? anchor->text() : WTF::String();
}
(WebCore::Frame*) frame, (WebCore::Node*) node, x, y);
}
-static jstring RetrieveHref(JNIEnv *env, jobject obj, jint frame,
- jint node)
+static jstring RetrieveHref(JNIEnv *env, jobject obj, jint x, jint y)
{
#ifdef ANDROID_INSTRUMENT
TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
- WTF::String result = viewImpl->retrieveHref((WebCore::Frame*) frame,
- (WebCore::Node*) node);
+ WTF::String result = viewImpl->retrieveHref(x, y);
if (!result.isEmpty())
return WtfStringToJstring(env, result);
return 0;
}
-static jstring RetrieveAnchorText(JNIEnv *env, jobject obj, jint frame,
- jint node)
+static jstring RetrieveAnchorText(JNIEnv *env, jobject obj, jint x, jint y)
{
#ifdef ANDROID_INSTRUMENT
TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
- WTF::String result = viewImpl->retrieveAnchorText((WebCore::Frame*) frame,
- (WebCore::Node*) node);
+ WTF::String result = viewImpl->retrieveAnchorText(x, y);
if (!result.isEmpty())
return WtfStringToJstring(env, result);
return 0;
//
- WTF::String retrieveHref(WebCore::Frame* frame, WebCore::Node* node);
- WTF::String retrieveAnchorText(WebCore::Frame* frame, WebCore::Node* node);
+ WTF::String retrieveHref(int x, int y);
+ WTF::String retrieveAnchorText(int x, int y);
WTF::String requestLabel(WebCore::Frame* , WebCore::Node* );
// If the focus is a textfield (<input>), textarea, or contentEditable,
void rebuildPictureSet(PictureSet* );
void sendNotifyProgressFinished();
bool handleMouseClick(WebCore::Frame* framePtr, WebCore::Node* nodePtr);
- WebCore::HTMLAnchorElement* retrieveAnchorElement(WebCore::Frame* frame, WebCore::Node* node);
+ WebCore::HTMLAnchorElement* retrieveAnchorElement(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);