Chromium Code Reviews| Index: Source/core/layout/HitTestResult.cpp |
| diff --git a/Source/core/layout/HitTestResult.cpp b/Source/core/layout/HitTestResult.cpp |
| index 67ff7574695ae358d378b24caf21c635c7a567a9..1b8e0352cc63c2d58a4668f3cad5cfdde35837d0 100644 |
| --- a/Source/core/layout/HitTestResult.cpp |
| +++ b/Source/core/layout/HitTestResult.cpp |
| @@ -153,12 +153,36 @@ void HitTestResult::setToShadowHostIfInUserAgentShadowRoot() |
| } |
| } |
| +HTMLAreaElement* HitTestResult::imageAreaForImage() |
|
pdr.
2015/04/26 02:59:15
Lets make this function const since it doesn't mod
|
| +{ |
| + HTMLImageElement* imageElement = nullptr; |
|
pdr.
2015/04/26 02:59:15
Even though we check it all over, I don't think m_
|
| + if (isHTMLImageElement(innerNode())) |
| + imageElement = toHTMLImageElement(innerNode()); |
| + else if (isHTMLImageElement(innerNode()->shadowHost())) |
|
pdr.
2015/04/26 02:59:15
I think we need to limit this to user agent shadow
|
| + imageElement = toHTMLImageElement(innerNode()->shadowHost()); |
| + |
| + if (!imageElement) |
| + return nullptr; |
| + |
| + LayoutBox* box = toLayoutBox(layoutObject()); |
|
pdr.
2015/04/26 02:59:15
Nit: this can be moved inside the map conditional
|
| + LayoutRect contentBox = box->contentBoxRect(); |
| + float scaleFactor = 1 / box->style()->effectiveZoom(); |
| + LayoutPoint location = localPoint(); |
| + location.scale(scaleFactor, scaleFactor); |
| + |
| + if (HTMLMapElement* map = imageElement->treeScope().getImageMap(imageElement->fastGetAttribute(usemapAttr))) |
| + return map->areaForPoint(location, contentBox.size()); |
| + return nullptr; |
| +} |
| + |
| void HitTestResult::setInnerNode(Node* n) |
| { |
| m_innerPossiblyPseudoNode = n; |
| if (n && n->isPseudoElement()) |
| n = toPseudoElement(n)->findAssociatedNode(); |
| m_innerNode = n; |
| + if (HTMLAreaElement* area = imageAreaForImage()) |
| + m_innerNode = area; |
| } |
| void HitTestResult::setURLElement(Element* n) |