OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r
ights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r
ights reserved. |
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 #include "core/frame/ContentSecurityPolicy.h" | 112 #include "core/frame/ContentSecurityPolicy.h" |
113 #include "core/frame/DOMWindow.h" | 113 #include "core/frame/DOMWindow.h" |
114 #include "core/frame/FrameHost.h" | 114 #include "core/frame/FrameHost.h" |
115 #include "core/frame/FrameView.h" | 115 #include "core/frame/FrameView.h" |
116 #include "core/frame/History.h" | 116 #include "core/frame/History.h" |
117 #include "core/frame/LocalFrame.h" | 117 #include "core/frame/LocalFrame.h" |
118 #include "core/frame/PageConsole.h" | 118 #include "core/frame/PageConsole.h" |
119 #include "core/frame/Settings.h" | 119 #include "core/frame/Settings.h" |
120 #include "core/html/HTMLAllCollection.h" | 120 #include "core/html/HTMLAllCollection.h" |
121 #include "core/html/HTMLAnchorElement.h" | 121 #include "core/html/HTMLAnchorElement.h" |
| 122 #include "core/html/HTMLBaseElement.h" |
122 #include "core/html/HTMLCanvasElement.h" | 123 #include "core/html/HTMLCanvasElement.h" |
123 #include "core/html/HTMLCollection.h" | 124 #include "core/html/HTMLCollection.h" |
124 #include "core/html/HTMLDialogElement.h" | 125 #include "core/html/HTMLDialogElement.h" |
125 #include "core/html/HTMLDocument.h" | 126 #include "core/html/HTMLDocument.h" |
126 #include "core/html/HTMLFrameOwnerElement.h" | 127 #include "core/html/HTMLFrameOwnerElement.h" |
127 #include "core/html/HTMLHeadElement.h" | 128 #include "core/html/HTMLHeadElement.h" |
128 #include "core/html/HTMLIFrameElement.h" | 129 #include "core/html/HTMLIFrameElement.h" |
129 #include "core/html/HTMLInputElement.h" | 130 #include "core/html/HTMLInputElement.h" |
130 #include "core/html/HTMLLinkElement.h" | 131 #include "core/html/HTMLLinkElement.h" |
131 #include "core/html/HTMLMetaElement.h" | 132 #include "core/html/HTMLMetaElement.h" |
(...skipping 1219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1351 { | 1352 { |
1352 if (m_titleElement != titleElement) | 1353 if (m_titleElement != titleElement) |
1353 return; | 1354 return; |
1354 | 1355 |
1355 m_titleElement = nullptr; | 1356 m_titleElement = nullptr; |
1356 m_titleSetExplicitly = false; | 1357 m_titleSetExplicitly = false; |
1357 | 1358 |
1358 // FIXME: This is broken for SVG. | 1359 // FIXME: This is broken for SVG. |
1359 // Update title based on first title element in the head, if one exists. | 1360 // Update title based on first title element in the head, if one exists. |
1360 if (HTMLElement* headElement = head()) { | 1361 if (HTMLElement* headElement = head()) { |
1361 for (Element* element = ElementTraversal::firstWithin(*headElement); ele
ment; element = ElementTraversal::nextSibling(*element)) { | 1362 if (HTMLTitleElement* title = Traversal<HTMLTitleElement>::firstChild(*h
eadElement)) |
1362 if (!element->hasTagName(titleTag)) | |
1363 continue; | |
1364 HTMLTitleElement* title = toHTMLTitleElement(element); | |
1365 setTitleElement(title->text(), title); | 1363 setTitleElement(title->text(), title); |
1366 break; | |
1367 } | |
1368 } | 1364 } |
1369 | 1365 |
1370 if (!m_titleElement) | 1366 if (!m_titleElement) |
1371 updateTitle(String()); | 1367 updateTitle(String()); |
1372 } | 1368 } |
1373 | 1369 |
1374 PageVisibilityState Document::pageVisibilityState() const | 1370 PageVisibilityState Document::pageVisibilityState() const |
1375 { | 1371 { |
1376 // The visibility of the document is inherited from the visibility of the | 1372 // The visibility of the document is inherited from the visibility of the |
1377 // page. If there is no page associated with the document, we will assume | 1373 // page. If there is no page associated with the document, we will assume |
(...skipping 974 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2352 else | 2348 else |
2353 documentElement()->appendChild(newBody.release(), exceptionState); | 2349 documentElement()->appendChild(newBody.release(), exceptionState); |
2354 } | 2350 } |
2355 | 2351 |
2356 HTMLHeadElement* Document::head() | 2352 HTMLHeadElement* Document::head() |
2357 { | 2353 { |
2358 Node* de = documentElement(); | 2354 Node* de = documentElement(); |
2359 if (!de) | 2355 if (!de) |
2360 return 0; | 2356 return 0; |
2361 | 2357 |
2362 for (Element* child = ElementTraversal::firstWithin(*de); child; child = Ele
mentTraversal::nextSibling(*child)) { | 2358 return Traversal<HTMLHeadElement>::firstChild(*de); |
2363 if (child->hasTagName(headTag)) | |
2364 return toHTMLHeadElement(child); | |
2365 } | |
2366 return 0; | |
2367 } | 2359 } |
2368 | 2360 |
2369 Element* Document::viewportDefiningElement(RenderStyle* rootStyle) const | 2361 Element* Document::viewportDefiningElement(RenderStyle* rootStyle) const |
2370 { | 2362 { |
2371 // If a BODY element sets non-visible overflow, it is to be propagated to th
e viewport, as long | 2363 // If a BODY element sets non-visible overflow, it is to be propagated to th
e viewport, as long |
2372 // as the following conditions are all met: | 2364 // as the following conditions are all met: |
2373 // (1) The root element is HTML. | 2365 // (1) The root element is HTML. |
2374 // (2) It is the primary BODY element (we only assert for this, expecting ca
llers to behave). | 2366 // (2) It is the primary BODY element (we only assert for this, expecting ca
llers to behave). |
2375 // (3) The root element has visible overflow. | 2367 // (3) The root element has visible overflow. |
2376 // Otherwise it's the root element's properties that are to be propagated. | 2368 // Otherwise it's the root element's properties that are to be propagated. |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2733 ASSERT(!m_elemSheet->contents()->ruleCount()); | 2725 ASSERT(!m_elemSheet->contents()->ruleCount()); |
2734 bool usesRemUnits = m_elemSheet->contents()->usesRemUnits(); | 2726 bool usesRemUnits = m_elemSheet->contents()->usesRemUnits(); |
2735 m_elemSheet = CSSStyleSheet::createInline(this, m_baseURL); | 2727 m_elemSheet = CSSStyleSheet::createInline(this, m_baseURL); |
2736 // FIXME: So we are not really the parser. The right fix is to eliminate
the element sheet completely. | 2728 // FIXME: So we are not really the parser. The right fix is to eliminate
the element sheet completely. |
2737 m_elemSheet->contents()->parserSetUsesRemUnits(usesRemUnits); | 2729 m_elemSheet->contents()->parserSetUsesRemUnits(usesRemUnits); |
2738 } | 2730 } |
2739 | 2731 |
2740 if (!equalIgnoringFragmentIdentifier(oldBaseURL, m_baseURL)) { | 2732 if (!equalIgnoringFragmentIdentifier(oldBaseURL, m_baseURL)) { |
2741 // Base URL change changes any relative visited links. | 2733 // Base URL change changes any relative visited links. |
2742 // FIXME: There are other URLs in the tree that would need to be re-eval
uated on dynamic base URL change. Style should be invalidated too. | 2734 // FIXME: There are other URLs in the tree that would need to be re-eval
uated on dynamic base URL change. Style should be invalidated too. |
2743 for (Element* element = ElementTraversal::firstWithin(*this); element; e
lement = ElementTraversal::next(*element)) { | 2735 for (HTMLAnchorElement* anchor = Traversal<HTMLAnchorElement>::firstWith
in(*this); anchor; anchor = Traversal<HTMLAnchorElement>::next(*anchor)) |
2744 if (element->hasTagName(aTag)) | 2736 anchor->invalidateCachedVisitedLinkHash(); |
2745 toHTMLAnchorElement(element)->invalidateCachedVisitedLinkHash(); | |
2746 } | |
2747 } | 2737 } |
2748 } | 2738 } |
2749 | 2739 |
2750 void Document::setBaseURLOverride(const KURL& url) | 2740 void Document::setBaseURLOverride(const KURL& url) |
2751 { | 2741 { |
2752 m_baseURLOverride = url; | 2742 m_baseURLOverride = url; |
2753 updateBaseURL(); | 2743 updateBaseURL(); |
2754 } | 2744 } |
2755 | 2745 |
2756 void Document::processBaseElement() | 2746 void Document::processBaseElement() |
2757 { | 2747 { |
2758 // Find the first href attribute in a base element and the first target attr
ibute in a base element. | 2748 // Find the first href attribute in a base element and the first target attr
ibute in a base element. |
2759 const AtomicString* href = 0; | 2749 const AtomicString* href = 0; |
2760 const AtomicString* target = 0; | 2750 const AtomicString* target = 0; |
2761 for (Element* element = ElementTraversal::firstWithin(*this); element && (!h
ref || !target); element = ElementTraversal::next(*element)) { | 2751 for (HTMLBaseElement* base = Traversal<HTMLBaseElement>::firstWithin(*this);
base && (!href || !target); base = Traversal<HTMLBaseElement>::next(*base)) { |
2762 if (element->hasTagName(baseTag)) { | 2752 if (!href) { |
2763 if (!href) { | 2753 const AtomicString& value = base->fastGetAttribute(hrefAttr); |
2764 const AtomicString& value = element->fastGetAttribute(hrefAttr); | 2754 if (!value.isNull()) |
2765 if (!value.isNull()) | 2755 href = &value; |
2766 href = &value; | |
2767 } | |
2768 if (!target) { | |
2769 const AtomicString& value = element->fastGetAttribute(targetAttr
); | |
2770 if (!value.isNull()) | |
2771 target = &value; | |
2772 } | |
2773 if (contentSecurityPolicy()->isActive()) | |
2774 UseCounter::count(*this, UseCounter::ContentSecurityPolicyWithBa
seElement); | |
2775 } | 2756 } |
| 2757 if (!target) { |
| 2758 const AtomicString& value = base->fastGetAttribute(targetAttr); |
| 2759 if (!value.isNull()) |
| 2760 target = &value; |
| 2761 } |
| 2762 if (contentSecurityPolicy()->isActive()) |
| 2763 UseCounter::count(*this, UseCounter::ContentSecurityPolicyWithBaseEl
ement); |
2776 } | 2764 } |
2777 | 2765 |
2778 // FIXME: Since this doesn't share code with completeURL it may not handle e
ncodings correctly. | 2766 // FIXME: Since this doesn't share code with completeURL it may not handle e
ncodings correctly. |
2779 KURL baseElementURL; | 2767 KURL baseElementURL; |
2780 if (href) { | 2768 if (href) { |
2781 String strippedHref = stripLeadingAndTrailingHTMLSpaces(*href); | 2769 String strippedHref = stripLeadingAndTrailingHTMLSpaces(*href); |
2782 if (!strippedHref.isEmpty()) | 2770 if (!strippedHref.isEmpty()) |
2783 baseElementURL = KURL(url(), strippedHref); | 2771 baseElementURL = KURL(url(), strippedHref); |
2784 } | 2772 } |
2785 if (m_baseElementURL != baseElementURL && contentSecurityPolicy()->allowBase
URI(baseElementURL)) { | 2773 if (m_baseElementURL != baseElementURL && contentSecurityPolicy()->allowBase
URI(baseElementURL)) { |
(...skipping 2648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5434 void Document::defaultEventHandler(Event* event) | 5422 void Document::defaultEventHandler(Event* event) |
5435 { | 5423 { |
5436 if (frame() && frame()->remotePlatformLayer()) { | 5424 if (frame() && frame()->remotePlatformLayer()) { |
5437 frame()->chromeClient().forwardInputEvent(this, event); | 5425 frame()->chromeClient().forwardInputEvent(this, event); |
5438 return; | 5426 return; |
5439 } | 5427 } |
5440 Node::defaultEventHandler(event); | 5428 Node::defaultEventHandler(event); |
5441 } | 5429 } |
5442 | 5430 |
5443 } // namespace WebCore | 5431 } // namespace WebCore |
OLD | NEW |