| 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 | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All |
| 7 * rights reserved. | 7 * rights reserved. |
| 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
| 9 * (http://www.torchmobile.com/) | 9 * (http://www.torchmobile.com/) |
| 10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
| (...skipping 1240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1251 // FIXME: We should fix TextEncoding to speak AtomicString anyway. | 1251 // FIXME: We should fix TextEncoding to speak AtomicString anyway. |
| 1252 return AtomicString(encoding().name()); | 1252 return AtomicString(encoding().name()); |
| 1253 } | 1253 } |
| 1254 | 1254 |
| 1255 void Document::setContentLanguage(const AtomicString& language) { | 1255 void Document::setContentLanguage(const AtomicString& language) { |
| 1256 if (m_contentLanguage == language) | 1256 if (m_contentLanguage == language) |
| 1257 return; | 1257 return; |
| 1258 m_contentLanguage = language; | 1258 m_contentLanguage = language; |
| 1259 | 1259 |
| 1260 // Document's style depends on the content language. | 1260 // Document's style depends on the content language. |
| 1261 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create( | 1261 setNeedsStyleRecalc( |
| 1262 StyleChangeReason::Language)); | 1262 SubtreeStyleChange, |
| 1263 StyleChangeReasonForTracing::create(StyleChangeReason::Language)); |
| 1263 } | 1264 } |
| 1264 | 1265 |
| 1265 void Document::setXMLVersion(const String& version, | 1266 void Document::setXMLVersion(const String& version, |
| 1266 ExceptionState& exceptionState) { | 1267 ExceptionState& exceptionState) { |
| 1267 if (!XMLDocumentParser::supportsXMLVersion(version)) { | 1268 if (!XMLDocumentParser::supportsXMLVersion(version)) { |
| 1268 exceptionState.throwDOMException( | 1269 exceptionState.throwDOMException( |
| 1269 NotSupportedError, | 1270 NotSupportedError, |
| 1270 "This document does not support the XML version '" + version + "'."); | 1271 "This document does not support the XML version '" + version + "'."); |
| 1271 return; | 1272 return; |
| 1272 } | 1273 } |
| (...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1879 body->setNeedsStyleRecalc(SubtreeStyleChange, | 1880 body->setNeedsStyleRecalc(SubtreeStyleChange, |
| 1880 StyleChangeReasonForTracing::create( | 1881 StyleChangeReasonForTracing::create( |
| 1881 StyleChangeReason::WritingModeChange)); | 1882 StyleChangeReason::WritingModeChange)); |
| 1882 } | 1883 } |
| 1883 } | 1884 } |
| 1884 | 1885 |
| 1885 if (const ComputedStyle* style = documentElement()->computedStyle()) { | 1886 if (const ComputedStyle* style = documentElement()->computedStyle()) { |
| 1886 if (style->direction() != rootDirection || | 1887 if (style->direction() != rootDirection || |
| 1887 style->getWritingMode() != rootWritingMode) | 1888 style->getWritingMode() != rootWritingMode) |
| 1888 documentElement()->setNeedsStyleRecalc( | 1889 documentElement()->setNeedsStyleRecalc( |
| 1889 SubtreeStyleChange, StyleChangeReasonForTracing::create( | 1890 SubtreeStyleChange, |
| 1890 StyleChangeReason::WritingModeChange)); | 1891 StyleChangeReasonForTracing::create( |
| 1892 StyleChangeReason::WritingModeChange)); |
| 1891 } | 1893 } |
| 1892 } | 1894 } |
| 1893 | 1895 |
| 1894 #if DCHECK_IS_ON() | 1896 #if DCHECK_IS_ON() |
| 1895 static void assertLayoutTreeUpdated(Node& root) { | 1897 static void assertLayoutTreeUpdated(Node& root) { |
| 1896 for (Node& node : NodeTraversal::inclusiveDescendantsOf(root)) { | 1898 for (Node& node : NodeTraversal::inclusiveDescendantsOf(root)) { |
| 1897 // We leave some nodes with dirty bits in the tree because they don't | 1899 // We leave some nodes with dirty bits in the tree because they don't |
| 1898 // matter like Comment and ProcessingInstruction nodes. | 1900 // matter like Comment and ProcessingInstruction nodes. |
| 1899 // TODO(esprehn): Don't even mark those nodes as needing recalcs in the | 1901 // TODO(esprehn): Don't even mark those nodes as needing recalcs in the |
| 1900 // first place. | 1902 // first place. |
| (...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2932 // page. The old i-Bench suite does this. When this happens don't bother | 2934 // page. The old i-Bench suite does this. When this happens don't bother |
| 2933 // painting or laying out. | 2935 // painting or laying out. |
| 2934 m_loadEventProgress = LoadEventCompleted; | 2936 m_loadEventProgress = LoadEventCompleted; |
| 2935 return; | 2937 return; |
| 2936 } | 2938 } |
| 2937 | 2939 |
| 2938 // We used to force a synchronous display and flush here. This really isn't | 2940 // We used to force a synchronous display and flush here. This really isn't |
| 2939 // necessary and can in fact be actively harmful if pages are loading at a | 2941 // necessary and can in fact be actively harmful if pages are loading at a |
| 2940 // rate of > 60fps | 2942 // rate of > 60fps |
| 2941 // (if your platform is syncing flushes and limiting them to 60fps). | 2943 // (if your platform is syncing flushes and limiting them to 60fps). |
| 2942 if (!localOwner() || (localOwner()->layoutObject() && | 2944 if (!localOwner() || |
| 2943 !localOwner()->layoutObject()->needsLayout())) { | 2945 (localOwner()->layoutObject() && |
| 2946 !localOwner()->layoutObject()->needsLayout())) { |
| 2944 updateStyleAndLayoutTree(); | 2947 updateStyleAndLayoutTree(); |
| 2945 | 2948 |
| 2946 // Always do a layout after loading if needed. | 2949 // Always do a layout after loading if needed. |
| 2947 if (view() && !layoutViewItem().isNull() && | 2950 if (view() && !layoutViewItem().isNull() && |
| 2948 (!layoutViewItem().firstChild() || layoutViewItem().needsLayout())) | 2951 (!layoutViewItem().firstChild() || layoutViewItem().needsLayout())) |
| 2949 view()->layout(); | 2952 view()->layout(); |
| 2950 } | 2953 } |
| 2951 | 2954 |
| 2952 m_loadEventProgress = LoadEventCompleted; | 2955 m_loadEventProgress = LoadEventCompleted; |
| 2953 | 2956 |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3436 return *m_elemSheet; | 3439 return *m_elemSheet; |
| 3437 } | 3440 } |
| 3438 | 3441 |
| 3439 void Document::maybeHandleHttpRefresh(const String& content, | 3442 void Document::maybeHandleHttpRefresh(const String& content, |
| 3440 HttpRefreshType httpRefreshType) { | 3443 HttpRefreshType httpRefreshType) { |
| 3441 if (m_isViewSource || !m_frame) | 3444 if (m_isViewSource || !m_frame) |
| 3442 return; | 3445 return; |
| 3443 | 3446 |
| 3444 double delay; | 3447 double delay; |
| 3445 String refreshURLString; | 3448 String refreshURLString; |
| 3446 if (!parseHTTPRefresh(content, httpRefreshType == HttpRefreshFromMetaTag | 3449 if (!parseHTTPRefresh(content, |
| 3447 ? isHTMLSpace<UChar> | 3450 httpRefreshType == HttpRefreshFromMetaTag |
| 3448 : nullptr, | 3451 ? isHTMLSpace<UChar> |
| 3452 : nullptr, |
| 3449 delay, refreshURLString)) | 3453 delay, refreshURLString)) |
| 3450 return; | 3454 return; |
| 3451 KURL refreshURL = | 3455 KURL refreshURL = |
| 3452 refreshURLString.isEmpty() ? url() : completeURL(refreshURLString); | 3456 refreshURLString.isEmpty() ? url() : completeURL(refreshURLString); |
| 3453 | 3457 |
| 3454 if (refreshURL.protocolIsJavaScript()) { | 3458 if (refreshURL.protocolIsJavaScript()) { |
| 3455 String message = | 3459 String message = |
| 3456 "Refused to refresh " + m_url.elidedString() + " to a javascript: URL"; | 3460 "Refused to refresh " + m_url.elidedString() + " to a javascript: URL"; |
| 3457 addConsoleMessage(ConsoleMessage::create(SecurityMessageSource, | 3461 addConsoleMessage(ConsoleMessage::create(SecurityMessageSource, |
| 3458 ErrorMessageLevel, message)); | 3462 ErrorMessageLevel, message)); |
| (...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4084 m_focusedElement.get()); | 4088 m_focusedElement.get()); |
| 4085 | 4089 |
| 4086 SetFocusedElementDone: | 4090 SetFocusedElementDone: |
| 4087 updateStyleAndLayoutTree(); | 4091 updateStyleAndLayoutTree(); |
| 4088 if (LocalFrame* frame = this->frame()) | 4092 if (LocalFrame* frame = this->frame()) |
| 4089 frame->selection().didChangeFocus(); | 4093 frame->selection().didChangeFocus(); |
| 4090 return !focusChangeBlocked; | 4094 return !focusChangeBlocked; |
| 4091 } | 4095 } |
| 4092 | 4096 |
| 4093 void Document::clearFocusedElement() { | 4097 void Document::clearFocusedElement() { |
| 4094 setFocusedElement(nullptr, FocusParams(SelectionBehaviorOnFocus::None, | 4098 setFocusedElement( |
| 4095 WebFocusTypeNone, nullptr)); | 4099 nullptr, |
| 4100 FocusParams(SelectionBehaviorOnFocus::None, WebFocusTypeNone, nullptr)); |
| 4096 } | 4101 } |
| 4097 | 4102 |
| 4098 void Document::setSequentialFocusNavigationStartingPoint(Node* node) { | 4103 void Document::setSequentialFocusNavigationStartingPoint(Node* node) { |
| 4099 if (!m_frame) | 4104 if (!m_frame) |
| 4100 return; | 4105 return; |
| 4101 if (!node) { | 4106 if (!node) { |
| 4102 m_sequentialFocusNavigationStartingPoint = nullptr; | 4107 m_sequentialFocusNavigationStartingPoint = nullptr; |
| 4103 return; | 4108 return; |
| 4104 } | 4109 } |
| 4105 DCHECK_EQ(node->document(), this); | 4110 DCHECK_EQ(node->document(), this); |
| (...skipping 997 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5103 bool newValue = m_designMode; | 5108 bool newValue = m_designMode; |
| 5104 if (equalIgnoringCase(value, "on")) { | 5109 if (equalIgnoringCase(value, "on")) { |
| 5105 newValue = true; | 5110 newValue = true; |
| 5106 UseCounter::count(*this, UseCounter::DocumentDesignModeEnabeld); | 5111 UseCounter::count(*this, UseCounter::DocumentDesignModeEnabeld); |
| 5107 } else if (equalIgnoringCase(value, "off")) { | 5112 } else if (equalIgnoringCase(value, "off")) { |
| 5108 newValue = false; | 5113 newValue = false; |
| 5109 } | 5114 } |
| 5110 if (newValue == m_designMode) | 5115 if (newValue == m_designMode) |
| 5111 return; | 5116 return; |
| 5112 m_designMode = newValue; | 5117 m_designMode = newValue; |
| 5113 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create( | 5118 setNeedsStyleRecalc( |
| 5114 StyleChangeReason::DesignMode)); | 5119 SubtreeStyleChange, |
| 5120 StyleChangeReasonForTracing::create(StyleChangeReason::DesignMode)); |
| 5115 } | 5121 } |
| 5116 | 5122 |
| 5117 Document* Document::parentDocument() const { | 5123 Document* Document::parentDocument() const { |
| 5118 if (!m_frame) | 5124 if (!m_frame) |
| 5119 return 0; | 5125 return 0; |
| 5120 Frame* parent = m_frame->tree().parent(); | 5126 Frame* parent = m_frame->tree().parent(); |
| 5121 if (!parent || !parent->isLocalFrame()) | 5127 if (!parent || !parent->isLocalFrame()) |
| 5122 return 0; | 5128 return 0; |
| 5123 return toLocalFrame(parent)->document(); | 5129 return toLocalFrame(parent)->document(); |
| 5124 } | 5130 } |
| (...skipping 1272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6397 return false; | 6403 return false; |
| 6398 } | 6404 } |
| 6399 return true; | 6405 return true; |
| 6400 } | 6406 } |
| 6401 | 6407 |
| 6402 bool Document::isSecureContext( | 6408 bool Document::isSecureContext( |
| 6403 const SecureContextCheck privilegeContextCheck) const { | 6409 const SecureContextCheck privilegeContextCheck) const { |
| 6404 bool isSecure = isSecureContextImpl(privilegeContextCheck); | 6410 bool isSecure = isSecureContextImpl(privilegeContextCheck); |
| 6405 if (getSandboxFlags() != SandboxNone) { | 6411 if (getSandboxFlags() != SandboxNone) { |
| 6406 UseCounter::count( | 6412 UseCounter::count( |
| 6407 *this, isSecure | 6413 *this, |
| 6408 ? UseCounter::SecureContextCheckForSandboxedOriginPassed | 6414 isSecure ? UseCounter::SecureContextCheckForSandboxedOriginPassed |
| 6409 : UseCounter::SecureContextCheckForSandboxedOriginFailed); | 6415 : UseCounter::SecureContextCheckForSandboxedOriginFailed); |
| 6410 } | 6416 } |
| 6411 UseCounter::count(*this, isSecure ? UseCounter::SecureContextCheckPassed | 6417 UseCounter::count(*this, |
| 6412 : UseCounter::SecureContextCheckFailed); | 6418 isSecure ? UseCounter::SecureContextCheckPassed |
| 6419 : UseCounter::SecureContextCheckFailed); |
| 6413 return isSecure; | 6420 return isSecure; |
| 6414 } | 6421 } |
| 6415 | 6422 |
| 6416 void Document::enforceInsecureRequestPolicy(WebInsecureRequestPolicy policy) { | 6423 void Document::enforceInsecureRequestPolicy(WebInsecureRequestPolicy policy) { |
| 6417 // Combine the new policy with the existing policy, as a base policy may be | 6424 // Combine the new policy with the existing policy, as a base policy may be |
| 6418 // inherited from a remote parent before this page's policy is set. In other | 6425 // inherited from a remote parent before this page's policy is set. In other |
| 6419 // words, insecure requests should be upgraded or blocked if _either_ the | 6426 // words, insecure requests should be upgraded or blocked if _either_ the |
| 6420 // existing policy or the newly enforced policy triggers upgrades or | 6427 // existing policy or the newly enforced policy triggers upgrades or |
| 6421 // blockage. | 6428 // blockage. |
| 6422 setInsecureRequestPolicy(getInsecureRequestPolicy() | policy); | 6429 setInsecureRequestPolicy(getInsecureRequestPolicy() | policy); |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6598 } | 6605 } |
| 6599 | 6606 |
| 6600 void showLiveDocumentInstances() { | 6607 void showLiveDocumentInstances() { |
| 6601 WeakDocumentSet& set = liveDocumentSet(); | 6608 WeakDocumentSet& set = liveDocumentSet(); |
| 6602 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); | 6609 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); |
| 6603 for (blink::Document* document : set) | 6610 for (blink::Document* document : set) |
| 6604 fprintf(stderr, "- Document %p URL: %s\n", document, | 6611 fprintf(stderr, "- Document %p URL: %s\n", document, |
| 6605 document->url().getString().utf8().data()); | 6612 document->url().getString().utf8().data()); |
| 6606 } | 6613 } |
| 6607 #endif | 6614 #endif |
| OLD | NEW |