OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2008, 2011 Apple Inc. All rights reserved. |
3 * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 21 matching lines...) Expand all Loading... |
32 #include "core/fetch/ImageResource.h" | 32 #include "core/fetch/ImageResource.h" |
33 #include "core/frame/LocalFrame.h" | 33 #include "core/frame/LocalFrame.h" |
34 #include "core/html/HTMLAnchorElement.h" | 34 #include "core/html/HTMLAnchorElement.h" |
35 #include "core/html/HTMLImageElement.h" | 35 #include "core/html/HTMLImageElement.h" |
36 #include "core/html/HTMLInputElement.h" | 36 #include "core/html/HTMLInputElement.h" |
37 #include "core/html/HTMLMediaElement.h" | 37 #include "core/html/HTMLMediaElement.h" |
38 #include "core/html/parser/HTMLParserIdioms.h" | 38 #include "core/html/parser/HTMLParserIdioms.h" |
39 #include "core/page/FrameTree.h" | 39 #include "core/page/FrameTree.h" |
40 #include "core/rendering/RenderImage.h" | 40 #include "core/rendering/RenderImage.h" |
41 #include "core/rendering/RenderTextFragment.h" | 41 #include "core/rendering/RenderTextFragment.h" |
| 42 #include "core/svg/SVGElement.h" |
42 #include "platform/scroll/Scrollbar.h" | 43 #include "platform/scroll/Scrollbar.h" |
43 | 44 |
44 namespace WebCore { | 45 namespace WebCore { |
45 | 46 |
46 using namespace HTMLNames; | 47 using namespace HTMLNames; |
47 | 48 |
48 HitTestResult::HitTestResult() | 49 HitTestResult::HitTestResult() |
49 : m_isOverWidget(false) | 50 : m_isOverWidget(false) |
50 , m_isFirstLetter(false) | 51 , m_isFirstLetter(false) |
51 { | 52 { |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 } | 232 } |
232 } | 233 } |
233 return String(); | 234 return String(); |
234 } | 235 } |
235 | 236 |
236 const AtomicString& HitTestResult::altDisplayString() const | 237 const AtomicString& HitTestResult::altDisplayString() const |
237 { | 238 { |
238 if (!m_innerNonSharedNode) | 239 if (!m_innerNonSharedNode) |
239 return nullAtom; | 240 return nullAtom; |
240 | 241 |
241 if (m_innerNonSharedNode->hasTagName(imgTag)) { | 242 if (isHTMLImageElement(*m_innerNonSharedNode)) { |
242 HTMLImageElement* image = toHTMLImageElement(m_innerNonSharedNode); | 243 HTMLImageElement& image = toHTMLImageElement(*m_innerNonSharedNode); |
243 return image->getAttribute(altAttr); | 244 return image.getAttribute(altAttr); |
244 } | 245 } |
245 | 246 |
246 if (m_innerNonSharedNode->hasTagName(inputTag)) { | 247 if (isHTMLInputElement(*m_innerNonSharedNode)) { |
247 HTMLInputElement* input = toHTMLInputElement(m_innerNonSharedNode); | 248 HTMLInputElement& input = toHTMLInputElement(*m_innerNonSharedNode); |
248 return input->alt(); | 249 return input.alt(); |
249 } | 250 } |
250 | 251 |
251 return nullAtom; | 252 return nullAtom; |
252 } | 253 } |
253 | 254 |
254 Image* HitTestResult::image() const | 255 Image* HitTestResult::image() const |
255 { | 256 { |
256 if (!m_innerNonSharedNode) | 257 if (!m_innerNonSharedNode) |
257 return 0; | 258 return 0; |
258 | 259 |
(...skipping 16 matching lines...) Expand all Loading... |
275 | 276 |
276 KURL HitTestResult::absoluteImageURL() const | 277 KURL HitTestResult::absoluteImageURL() const |
277 { | 278 { |
278 if (!m_innerNonSharedNode) | 279 if (!m_innerNonSharedNode) |
279 return KURL(); | 280 return KURL(); |
280 | 281 |
281 if (!(m_innerNonSharedNode->renderer() && m_innerNonSharedNode->renderer()->
isImage())) | 282 if (!(m_innerNonSharedNode->renderer() && m_innerNonSharedNode->renderer()->
isImage())) |
282 return KURL(); | 283 return KURL(); |
283 | 284 |
284 AtomicString urlString; | 285 AtomicString urlString; |
285 if (m_innerNonSharedNode->hasTagName(embedTag) | 286 if (isHTMLEmbedElement(*m_innerNonSharedNode) |
286 || m_innerNonSharedNode->hasTagName(imgTag) | 287 || isHTMLImageElement(*m_innerNonSharedNode) |
287 || m_innerNonSharedNode->hasTagName(inputTag) | 288 || isHTMLInputElement(*m_innerNonSharedNode) |
288 || m_innerNonSharedNode->hasTagName(objectTag) | 289 || isHTMLObjectElement(*m_innerNonSharedNode) |
289 || m_innerNonSharedNode->hasTagName(SVGNames::imageTag) | 290 || isSVGImageElement(*m_innerNonSharedNode) |
290 ) { | 291 ) { |
291 urlString = toElement(m_innerNonSharedNode)->imageSourceURL(); | 292 urlString = toElement(*m_innerNonSharedNode).imageSourceURL(); |
292 } else | 293 } else |
293 return KURL(); | 294 return KURL(); |
294 | 295 |
295 return m_innerNonSharedNode->document().completeURL(stripLeadingAndTrailingH
TMLSpaces(urlString)); | 296 return m_innerNonSharedNode->document().completeURL(stripLeadingAndTrailingH
TMLSpaces(urlString)); |
296 } | 297 } |
297 | 298 |
298 KURL HitTestResult::absoluteMediaURL() const | 299 KURL HitTestResult::absoluteMediaURL() const |
299 { | 300 { |
300 if (HTMLMediaElement* mediaElt = mediaElement()) | 301 if (HTMLMediaElement* mediaElt = mediaElement()) |
301 return mediaElt->currentSrc(); | 302 return mediaElt->currentSrc(); |
(...skipping 12 matching lines...) Expand all Loading... |
314 return toHTMLMediaElement(m_innerNonSharedNode); | 315 return toHTMLMediaElement(m_innerNonSharedNode); |
315 return 0; | 316 return 0; |
316 } | 317 } |
317 | 318 |
318 KURL HitTestResult::absoluteLinkURL() const | 319 KURL HitTestResult::absoluteLinkURL() const |
319 { | 320 { |
320 if (!m_innerURLElement) | 321 if (!m_innerURLElement) |
321 return KURL(); | 322 return KURL(); |
322 | 323 |
323 AtomicString urlString; | 324 AtomicString urlString; |
324 if (m_innerURLElement->hasTagName(aTag) || m_innerURLElement->hasTagName(are
aTag) || m_innerURLElement->hasTagName(linkTag)) | 325 if (isHTMLAnchorElement(*m_innerURLElement) || isHTMLAreaElement(*m_innerURL
Element) || isHTMLLinkElement(*m_innerURLElement)) |
325 urlString = m_innerURLElement->getAttribute(hrefAttr); | 326 urlString = m_innerURLElement->getAttribute(hrefAttr); |
326 else if (m_innerURLElement->hasTagName(SVGNames::aTag)) | 327 else if (isSVGAElement(*m_innerURLElement)) |
327 urlString = m_innerURLElement->getAttribute(XLinkNames::hrefAttr); | 328 urlString = m_innerURLElement->getAttribute(XLinkNames::hrefAttr); |
328 else | 329 else |
329 return KURL(); | 330 return KURL(); |
330 | 331 |
331 return m_innerURLElement->document().completeURL(stripLeadingAndTrailingHTML
Spaces(urlString)); | 332 return m_innerURLElement->document().completeURL(stripLeadingAndTrailingHTML
Spaces(urlString)); |
332 } | 333 } |
333 | 334 |
334 bool HitTestResult::isLiveLink() const | 335 bool HitTestResult::isLiveLink() const |
335 { | 336 { |
336 if (!m_innerURLElement) | 337 if (!m_innerURLElement) |
337 return false; | 338 return false; |
338 | 339 |
339 if (m_innerURLElement->hasTagName(aTag)) | 340 if (isHTMLAnchorElement(*m_innerURLElement)) |
340 return toHTMLAnchorElement(m_innerURLElement)->isLiveLink(); | 341 return toHTMLAnchorElement(m_innerURLElement)->isLiveLink(); |
341 | 342 |
342 if (m_innerURLElement->hasTagName(SVGNames::aTag)) | 343 if (isSVGAElement(*m_innerURLElement)) |
343 return m_innerURLElement->isLink(); | 344 return m_innerURLElement->isLink(); |
344 | 345 |
345 return false; | 346 return false; |
346 } | 347 } |
347 | 348 |
348 bool HitTestResult::isMisspelled() const | 349 bool HitTestResult::isMisspelled() const |
349 { | 350 { |
350 if (!targetNode() || !targetNode()->renderer()) | 351 if (!targetNode() || !targetNode()->renderer()) |
351 return false; | 352 return false; |
352 VisiblePosition pos(targetNode()->renderer()->positionForPoint(localPoint())
); | 353 VisiblePosition pos(targetNode()->renderer()->positionForPoint(localPoint())
); |
(...skipping 25 matching lines...) Expand all Loading... |
378 | 379 |
379 // FIXME: This function needs a better name and may belong in a different class.
It's not | 380 // FIXME: This function needs a better name and may belong in a different class.
It's not |
380 // really isContentEditable(); it's more like needsEditingContextMenu(). In many
ways, this | 381 // really isContentEditable(); it's more like needsEditingContextMenu(). In many
ways, this |
381 // function would make more sense in the ContextMenu class, except that WebEleme
ntDictionary | 382 // function would make more sense in the ContextMenu class, except that WebEleme
ntDictionary |
382 // hooks into it. Anyway, we should architect this better. | 383 // hooks into it. Anyway, we should architect this better. |
383 bool HitTestResult::isContentEditable() const | 384 bool HitTestResult::isContentEditable() const |
384 { | 385 { |
385 if (!m_innerNonSharedNode) | 386 if (!m_innerNonSharedNode) |
386 return false; | 387 return false; |
387 | 388 |
388 if (m_innerNonSharedNode->hasTagName(textareaTag)) | 389 if (isHTMLTextAreaElement(*m_innerNonSharedNode)) |
389 return true; | 390 return true; |
390 | 391 |
391 if (m_innerNonSharedNode->hasTagName(inputTag)) | 392 if (isHTMLInputElement(*m_innerNonSharedNode)) |
392 return toHTMLInputElement(m_innerNonSharedNode)->isTextField(); | 393 return toHTMLInputElement(*m_innerNonSharedNode).isTextField(); |
393 | 394 |
394 return m_innerNonSharedNode->rendererIsEditable(); | 395 return m_innerNonSharedNode->rendererIsEditable(); |
395 } | 396 } |
396 | 397 |
397 bool HitTestResult::addNodeToRectBasedTestResult(Node* node, const HitTestReques
t& request, const HitTestLocation& locationInContainer, const LayoutRect& rect) | 398 bool HitTestResult::addNodeToRectBasedTestResult(Node* node, const HitTestReques
t& request, const HitTestLocation& locationInContainer, const LayoutRect& rect) |
398 { | 399 { |
399 // If it is not a rect-based hit test, this method has to be no-op. | 400 // If it is not a rect-based hit test, this method has to be no-op. |
400 // Return false, so the hit test stops. | 401 // Return false, so the hit test stops. |
401 if (!isRectBasedTest()) | 402 if (!isRectBasedTest()) |
402 return false; | 403 return false; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 { | 493 { |
493 for (Node* node = m_innerNode.get(); node; node = NodeRenderingTraversal::pa
rent(node)) { | 494 for (Node* node = m_innerNode.get(); node; node = NodeRenderingTraversal::pa
rent(node)) { |
494 if (node->isElementNode()) | 495 if (node->isElementNode()) |
495 return toElement(node); | 496 return toElement(node); |
496 } | 497 } |
497 | 498 |
498 return 0; | 499 return 0; |
499 } | 500 } |
500 | 501 |
501 } // namespace WebCore | 502 } // namespace WebCore |
OLD | NEW |