#include "core/dom/shadow/ShadowRoot.h"
#include "core/editing/FrameSelection.h"
#include "core/fetch/ImageResource.h"
+#include "core/frame/LocalFrame.h"
#include "core/html/HTMLAnchorElement.h"
-#include "core/html/HTMLAreaElement.h"
#include "core/html/HTMLImageElement.h"
#include "core/html/HTMLInputElement.h"
#include "core/html/HTMLMediaElement.h"
-#include "core/html/HTMLTextAreaElement.h"
-#include "core/html/HTMLVideoElement.h"
#include "core/html/parser/HTMLParserIdioms.h"
-#include "core/frame/Frame.h"
#include "core/page/FrameTree.h"
-#include "core/platform/Scrollbar.h"
-#include "core/rendering/HitTestLocation.h"
#include "core/rendering/RenderImage.h"
#include "core/rendering/RenderTextFragment.h"
+#include "core/svg/SVGElement.h"
+#include "platform/scroll/Scrollbar.h"
namespace WebCore {
m_scrollbar = s;
}
-Frame* HitTestResult::innerNodeFrame() const
+LocalFrame* HitTestResult::innerNodeFrame() const
{
if (m_innerNonSharedNode)
return m_innerNonSharedNode->document().frame();
return 0;
}
-Frame* HitTestResult::targetFrame() const
-{
- if (!m_innerURLElement)
- return 0;
-
- Frame* frame = m_innerURLElement->document().frame();
- if (!frame)
- return 0;
-
- return frame->tree().find(m_innerURLElement->target());
-}
-
bool HitTestResult::isSelected() const
{
if (!m_innerNonSharedNode)
return false;
- if (Frame* frame = m_innerNonSharedNode->document().frame())
+ if (LocalFrame* frame = m_innerNonSharedNode->document().frame())
return frame->selection().contains(m_hitTestLocation.point());
return false;
}
if (!m_innerNonSharedNode)
return String();
- DocumentMarker* marker = m_innerNonSharedNode->document().markers()->markerContainingPoint(m_hitTestLocation.point(), DocumentMarker::Grammar);
+ DocumentMarker* marker = m_innerNonSharedNode->document().markers().markerContainingPoint(m_hitTestLocation.point(), DocumentMarker::Grammar);
if (!marker)
return String();
return String();
}
-String HitTestResult::altDisplayString() const
+const AtomicString& HitTestResult::altDisplayString() const
{
if (!m_innerNonSharedNode)
- return String();
+ return nullAtom;
- if (m_innerNonSharedNode->hasTagName(imgTag)) {
- HTMLImageElement* image = toHTMLImageElement(m_innerNonSharedNode);
- return image->getAttribute(altAttr);
+ if (isHTMLImageElement(*m_innerNonSharedNode)) {
+ HTMLImageElement& image = toHTMLImageElement(*m_innerNonSharedNode);
+ return image.getAttribute(altAttr);
}
- if (m_innerNonSharedNode->hasTagName(inputTag)) {
- HTMLInputElement* input = toHTMLInputElement(m_innerNonSharedNode);
- return input->alt();
+ if (isHTMLInputElement(*m_innerNonSharedNode)) {
+ HTMLInputElement& input = toHTMLInputElement(*m_innerNonSharedNode);
+ return input.alt();
}
- return String();
+ return nullAtom;
}
Image* HitTestResult::image() const
if (!m_innerNonSharedNode)
return KURL();
- if (!(m_innerNonSharedNode->renderer() && m_innerNonSharedNode->renderer()->isImage()))
+ RenderObject* renderer = m_innerNonSharedNode->renderer();
+ if (!(renderer && (renderer->isImage() || renderer->isCanvas())))
return KURL();
AtomicString urlString;
- if (m_innerNonSharedNode->hasTagName(embedTag)
- || m_innerNonSharedNode->hasTagName(imgTag)
- || m_innerNonSharedNode->hasTagName(inputTag)
- || m_innerNonSharedNode->hasTagName(objectTag)
- || m_innerNonSharedNode->hasTagName(SVGNames::imageTag)
+ if (isHTMLCanvasElement(*m_innerNonSharedNode)
+ || isHTMLEmbedElement(*m_innerNonSharedNode)
+ || isHTMLImageElement(*m_innerNonSharedNode)
+ || isHTMLInputElement(*m_innerNonSharedNode)
+ || isHTMLObjectElement(*m_innerNonSharedNode)
+ || isSVGImageElement(*m_innerNonSharedNode)
) {
- urlString = toElement(m_innerNonSharedNode)->imageSourceURL();
+ urlString = toElement(*m_innerNonSharedNode).imageSourceURL();
} else
return KURL();
if (!(m_innerNonSharedNode->renderer() && m_innerNonSharedNode->renderer()->isMedia()))
return 0;
- if (isHTMLVideoElement(m_innerNonSharedNode.get()) || m_innerNonSharedNode->hasTagName(HTMLNames::audioTag))
- return toHTMLMediaElement(m_innerNonSharedNode.get());
+ if (isHTMLMediaElement(*m_innerNonSharedNode))
+ return toHTMLMediaElement(m_innerNonSharedNode);
return 0;
}
return KURL();
AtomicString urlString;
- if (isHTMLAnchorElement(m_innerURLElement.get()) || isHTMLAreaElement(m_innerURLElement.get()) || m_innerURLElement->hasTagName(linkTag))
+ if (isHTMLAnchorElement(*m_innerURLElement) || isHTMLAreaElement(*m_innerURLElement) || isHTMLLinkElement(*m_innerURLElement))
urlString = m_innerURLElement->getAttribute(hrefAttr);
- else if (m_innerURLElement->hasTagName(SVGNames::aTag))
+ else if (isSVGAElement(*m_innerURLElement))
urlString = m_innerURLElement->getAttribute(XLinkNames::hrefAttr);
else
return KURL();
if (!m_innerURLElement)
return false;
- if (isHTMLAnchorElement(m_innerURLElement.get()))
+ if (isHTMLAnchorElement(*m_innerURLElement))
return toHTMLAnchorElement(m_innerURLElement)->isLiveLink();
- if (m_innerURLElement->hasTagName(SVGNames::aTag))
+ if (isSVGAElement(*m_innerURLElement))
return m_innerURLElement->isLink();
return false;
bool HitTestResult::isMisspelled() const
{
- if (!targetNode())
+ if (!targetNode() || !targetNode()->renderer())
return false;
VisiblePosition pos(targetNode()->renderer()->positionForPoint(localPoint()));
if (pos.isNull())
return false;
- return m_innerNonSharedNode->document().markers()->markersInRange(
+ return m_innerNonSharedNode->document().markers().markersInRange(
makeRange(pos, pos).get(), DocumentMarker::MisspellingMarkers()).size() > 0;
}
return m_innerURLElement && m_innerURLElement->isLink();
}
-String HitTestResult::titleDisplayString() const
-{
- if (!m_innerURLElement)
- return String();
-
- return m_innerURLElement->title();
-}
-
String HitTestResult::textContent() const
{
if (!m_innerURLElement)
if (!m_innerNonSharedNode)
return false;
- if (isHTMLTextAreaElement(m_innerNonSharedNode.get()))
+ if (isHTMLTextAreaElement(*m_innerNonSharedNode))
return true;
- if (m_innerNonSharedNode->hasTagName(inputTag))
- return toHTMLInputElement(m_innerNonSharedNode)->isTextField();
+ if (isHTMLInputElement(*m_innerNonSharedNode))
+ return toHTMLInputElement(*m_innerNonSharedNode).isTextField();
return m_innerNonSharedNode->rendererIsEditable();
}
{
ASSERT(isRectBasedTest() && other.isRectBasedTest());
+ if (!m_scrollbar && other.scrollbar()) {
+ setScrollbar(other.scrollbar());
+ }
+
if (!m_innerNode && other.innerNode()) {
m_innerNode = other.innerNode();
m_innerPossiblyPseudoNode = other.innerPossiblyPseudoNode();
m_localPoint = other.localPoint();
m_pointInInnerNodeFrame = other.m_pointInInnerNodeFrame;
m_innerURLElement = other.URLElement();
- m_scrollbar = other.scrollbar();
m_isOverWidget = other.isOverWidget();
}