Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Side by Side Diff: Source/core/dom/Document.cpp

Issue 33523002: Have Frame::script() return a reference (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase on master Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/bindings/v8/custom/V8WindowCustom.cpp ('k') | Source/core/dom/ScriptLoader.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 2316 matching lines...) Expand 10 before | Expand all | Expand 10 after
2327 m_loadEventProgress = LoadEventInProgress; 2327 m_loadEventProgress = LoadEventInProgress;
2328 2328
2329 ScriptableDocumentParser* parser = scriptableDocumentParser(); 2329 ScriptableDocumentParser* parser = scriptableDocumentParser();
2330 m_wellFormed = parser && parser->wellFormed(); 2330 m_wellFormed = parser && parser->wellFormed();
2331 2331
2332 // We have to clear the parser, in case someone document.write()s from the 2332 // We have to clear the parser, in case someone document.write()s from the
2333 // onLoad event handler, as in Radar 3206524. 2333 // onLoad event handler, as in Radar 3206524.
2334 detachParser(); 2334 detachParser();
2335 2335
2336 Frame* f = frame(); 2336 Frame* f = frame();
2337 if (f && f->script()->canExecuteScripts(NotAboutToExecuteScript)) { 2337 if (f && f->script().canExecuteScripts(NotAboutToExecuteScript)) {
2338 ImageLoader::dispatchPendingBeforeLoadEvents(); 2338 ImageLoader::dispatchPendingBeforeLoadEvents();
2339 ImageLoader::dispatchPendingLoadEvents(); 2339 ImageLoader::dispatchPendingLoadEvents();
2340 ImageLoader::dispatchPendingErrorEvents(); 2340 ImageLoader::dispatchPendingErrorEvents();
2341 2341
2342 HTMLLinkElement::dispatchPendingLoadEvents(); 2342 HTMLLinkElement::dispatchPendingLoadEvents();
2343 HTMLStyleElement::dispatchPendingLoadEvents(); 2343 HTMLStyleElement::dispatchPendingLoadEvents();
2344 } 2344 }
2345 2345
2346 // To align the HTML load event and the SVGLoad event for the outermost <svg > element, fire it from 2346 // To align the HTML load event and the SVGLoad event for the outermost <svg > element, fire it from
2347 // here, instead of doing it from SVGElement::finishedParsingChildren (if ex ternalResourcesRequired="false", 2347 // here, instead of doing it from SVGElement::finishedParsingChildren (if ex ternalResourcesRequired="false",
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
2706 String Document::userAgent(const KURL& url) const 2706 String Document::userAgent(const KURL& url) const
2707 { 2707 {
2708 return frame() ? frame()->loader()->userAgent(url) : String(); 2708 return frame() ? frame()->loader()->userAgent(url) : String();
2709 } 2709 }
2710 2710
2711 void Document::disableEval(const String& errorMessage) 2711 void Document::disableEval(const String& errorMessage)
2712 { 2712 {
2713 if (!frame()) 2713 if (!frame())
2714 return; 2714 return;
2715 2715
2716 frame()->script()->disableEval(errorMessage); 2716 frame()->script().disableEval(errorMessage);
2717 } 2717 }
2718 2718
2719 bool Document::canNavigate(Frame* targetFrame) 2719 bool Document::canNavigate(Frame* targetFrame)
2720 { 2720 {
2721 if (!m_frame) 2721 if (!m_frame)
2722 return false; 2722 return false;
2723 2723
2724 // FIXME: We shouldn't call this function without a target frame, but 2724 // FIXME: We shouldn't call this function without a target frame, but
2725 // fast/forms/submit-to-blank-multiple-times.html depends on this function 2725 // fast/forms/submit-to-blank-multiple-times.html depends on this function
2726 // returning true when supplied with a 0 targetFrame. 2726 // returning true when supplied with a 0 targetFrame.
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after
3704 addListenerType(OVERFLOWCHANGED_LISTENER); 3704 addListenerType(OVERFLOWCHANGED_LISTENER);
3705 } else if (eventType == EventTypeNames::webkitAnimationStart || (RuntimeEnab ledFeatures::cssAnimationUnprefixedEnabled() && eventType == EventTypeNames::ani mationstart)) { 3705 } else if (eventType == EventTypeNames::webkitAnimationStart || (RuntimeEnab ledFeatures::cssAnimationUnprefixedEnabled() && eventType == EventTypeNames::ani mationstart)) {
3706 addListenerType(ANIMATIONSTART_LISTENER); 3706 addListenerType(ANIMATIONSTART_LISTENER);
3707 } else if (eventType == EventTypeNames::webkitAnimationEnd || (RuntimeEnable dFeatures::cssAnimationUnprefixedEnabled() && eventType == EventTypeNames::anima tionend)) { 3707 } else if (eventType == EventTypeNames::webkitAnimationEnd || (RuntimeEnable dFeatures::cssAnimationUnprefixedEnabled() && eventType == EventTypeNames::anima tionend)) {
3708 addListenerType(ANIMATIONEND_LISTENER); 3708 addListenerType(ANIMATIONEND_LISTENER);
3709 } else if (eventType == EventTypeNames::webkitAnimationIteration || (Runtime EnabledFeatures::cssAnimationUnprefixedEnabled() && eventType == EventTypeNames: :animationiteration)) { 3709 } else if (eventType == EventTypeNames::webkitAnimationIteration || (Runtime EnabledFeatures::cssAnimationUnprefixedEnabled() && eventType == EventTypeNames: :animationiteration)) {
3710 addListenerType(ANIMATIONITERATION_LISTENER); 3710 addListenerType(ANIMATIONITERATION_LISTENER);
3711 } else if (eventType == EventTypeNames::webkitTransitionEnd || eventType == EventTypeNames::transitionend) { 3711 } else if (eventType == EventTypeNames::webkitTransitionEnd || eventType == EventTypeNames::transitionend) {
3712 addListenerType(TRANSITIONEND_LISTENER); 3712 addListenerType(TRANSITIONEND_LISTENER);
3713 } else if (eventType == EventTypeNames::beforeload) { 3713 } else if (eventType == EventTypeNames::beforeload) {
3714 if (m_frame && m_frame->script()->shouldBypassMainWorldContentSecurityPo licy()) { 3714 if (m_frame && m_frame->script().shouldBypassMainWorldContentSecurityPol icy()) {
3715 UseCounter::count(*this, UseCounter::BeforeLoadEventInIsolatedWorld) ; 3715 UseCounter::count(*this, UseCounter::BeforeLoadEventInIsolatedWorld) ;
3716 } else { 3716 } else {
3717 UseCounter::count(*this, UseCounter::BeforeLoadEvent); 3717 UseCounter::count(*this, UseCounter::BeforeLoadEvent);
3718 } 3718 }
3719 addListenerType(BEFORELOAD_LISTENER); 3719 addListenerType(BEFORELOAD_LISTENER);
3720 } else if (eventType == EventTypeNames::scroll) { 3720 } else if (eventType == EventTypeNames::scroll) {
3721 addListenerType(SCROLL_LISTENER); 3721 addListenerType(SCROLL_LISTENER);
3722 } 3722 }
3723 } 3723 }
3724 3724
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
3812 3812
3813 // If the new domain is the same as the old domain, still call 3813 // If the new domain is the same as the old domain, still call
3814 // securityOrigin()->setDomainForDOM. This will change the 3814 // securityOrigin()->setDomainForDOM. This will change the
3815 // security check behavior. For example, if a page loaded on port 8000 3815 // security check behavior. For example, if a page loaded on port 8000
3816 // assigns its current domain using document.domain, the page will 3816 // assigns its current domain using document.domain, the page will
3817 // allow other pages loaded on different ports in the same domain that 3817 // allow other pages loaded on different ports in the same domain that
3818 // have also assigned to access this page. 3818 // have also assigned to access this page.
3819 if (equalIgnoringCase(domain(), newDomain)) { 3819 if (equalIgnoringCase(domain(), newDomain)) {
3820 securityOrigin()->setDomainFromDOM(newDomain); 3820 securityOrigin()->setDomainFromDOM(newDomain);
3821 if (m_frame) 3821 if (m_frame)
3822 m_frame->script()->updateSecurityOrigin(); 3822 m_frame->script().updateSecurityOrigin();
3823 return; 3823 return;
3824 } 3824 }
3825 3825
3826 int oldLength = domain().length(); 3826 int oldLength = domain().length();
3827 int newLength = newDomain.length(); 3827 int newLength = newDomain.length();
3828 String exceptionMessage = ExceptionMessages::failedToSet("domain", "Documen t", "'" + newDomain + "' is not a suffix of '" + domain() + "'."); 3828 String exceptionMessage = ExceptionMessages::failedToSet("domain", "Documen t", "'" + newDomain + "' is not a suffix of '" + domain() + "'.");
3829 // e.g. newDomain = subdomain.www.example.com (25) and domain() = www.exampl e.com (15) 3829 // e.g. newDomain = subdomain.www.example.com (25) and domain() = www.exampl e.com (15)
3830 if (newLength >= oldLength) { 3830 if (newLength >= oldLength) {
3831 es.throwSecurityError(exceptionMessage); 3831 es.throwSecurityError(exceptionMessage);
3832 return; 3832 return;
3833 } 3833 }
3834 3834
3835 String test = domain(); 3835 String test = domain();
3836 // Check that it's a complete suffix, not e.g. "ample.com" 3836 // Check that it's a complete suffix, not e.g. "ample.com"
3837 if (test[oldLength - newLength - 1] != '.') { 3837 if (test[oldLength - newLength - 1] != '.') {
3838 es.throwSecurityError(exceptionMessage); 3838 es.throwSecurityError(exceptionMessage);
3839 return; 3839 return;
3840 } 3840 }
3841 3841
3842 // Now test is "example.com" from domain() 3842 // Now test is "example.com" from domain()
3843 // and we check that it's the same thing as newDomain 3843 // and we check that it's the same thing as newDomain
3844 test.remove(0, oldLength - newLength); 3844 test.remove(0, oldLength - newLength);
3845 if (test != newDomain) { 3845 if (test != newDomain) {
3846 es.throwSecurityError(exceptionMessage); 3846 es.throwSecurityError(exceptionMessage);
3847 return; 3847 return;
3848 } 3848 }
3849 3849
3850 securityOrigin()->setDomainFromDOM(newDomain); 3850 securityOrigin()->setDomainFromDOM(newDomain);
3851 if (m_frame) 3851 if (m_frame)
3852 m_frame->script()->updateSecurityOrigin(); 3852 m_frame->script().updateSecurityOrigin();
3853 } 3853 }
3854 3854
3855 // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-lastmodified 3855 // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-lastmodified
3856 String Document::lastModified() const 3856 String Document::lastModified() const
3857 { 3857 {
3858 DateComponents date; 3858 DateComponents date;
3859 bool foundDate = false; 3859 bool foundDate = false;
3860 if (m_frame) { 3860 if (m_frame) {
3861 String httpLastModified; 3861 String httpLastModified;
3862 if (DocumentLoader* documentLoader = loader()) 3862 if (DocumentLoader* documentLoader = loader())
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after
4545 { 4545 {
4546 if (!contentSecurityPolicy()->allowInlineEventHandlers(contextURL, contextLi ne)) 4546 if (!contentSecurityPolicy()->allowInlineEventHandlers(contextURL, contextLi ne))
4547 return false; 4547 return false;
4548 4548
4549 // HTML says that inline script needs browsing context to create its executi on environment. 4549 // HTML says that inline script needs browsing context to create its executi on environment.
4550 // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.ht ml#event-handler-attributes 4550 // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.ht ml#event-handler-attributes
4551 // Also, if the listening node came from other document, which happens on co ntext-less event dispatching, 4551 // Also, if the listening node came from other document, which happens on co ntext-less event dispatching,
4552 // we also need to ask the owner document of the node. 4552 // we also need to ask the owner document of the node.
4553 if (!m_frame) 4553 if (!m_frame)
4554 return false; 4554 return false;
4555 if (!m_frame->script()->canExecuteScripts(NotAboutToExecuteScript)) 4555 if (!m_frame->script().canExecuteScripts(NotAboutToExecuteScript))
4556 return false; 4556 return false;
4557 if (node && node->document() != this && !node->document().allowInlineEventHa ndlers(node, listener, contextURL, contextLine)) 4557 if (node && node->document() != this && !node->document().allowInlineEventHa ndlers(node, listener, contextURL, contextLine))
4558 return false; 4558 return false;
4559 4559
4560 return true; 4560 return true;
4561 } 4561 }
4562 4562
4563 bool Document::allowExecutingScripts(Node* node) 4563 bool Document::allowExecutingScripts(Node* node)
4564 { 4564 {
4565 // FIXME: Eventually we'd like to evaluate scripts which are inserted into a 4565 // FIXME: Eventually we'd like to evaluate scripts which are inserted into a
4566 // viewless document but this'll do for now. 4566 // viewless document but this'll do for now.
4567 // See http://bugs.webkit.org/show_bug.cgi?id=5727 4567 // See http://bugs.webkit.org/show_bug.cgi?id=5727
4568 if (!frame() && !import()) 4568 if (!frame() && !import())
4569 return false; 4569 return false;
4570 if (!node->document().frame() && !node->document().import()) 4570 if (!node->document().frame() && !node->document().import())
4571 return false; 4571 return false;
4572 if (!contextDocument().get()->frame()->script()->canExecuteScripts(AboutToEx ecuteScript)) 4572 if (!contextDocument().get()->frame()->script().canExecuteScripts(AboutToExe cuteScript))
4573 return false; 4573 return false;
4574 return true; 4574 return true;
4575 } 4575 }
4576 4576
4577 void Document::didUpdateSecurityOrigin() 4577 void Document::didUpdateSecurityOrigin()
4578 { 4578 {
4579 if (!m_frame) 4579 if (!m_frame)
4580 return; 4580 return;
4581 m_frame->script()->updateSecurityOrigin(); 4581 m_frame->script().updateSecurityOrigin();
4582 } 4582 }
4583 4583
4584 bool Document::isContextThread() const 4584 bool Document::isContextThread() const
4585 { 4585 {
4586 return isMainThread(); 4586 return isMainThread();
4587 } 4587 }
4588 4588
4589 void Document::statePopped(PassRefPtr<SerializedScriptValue> stateObject) 4589 void Document::statePopped(PassRefPtr<SerializedScriptValue> stateObject)
4590 { 4590 {
4591 if (!frame()) 4591 if (!frame())
(...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after
5348 void Document::modifiedStyleSheet(StyleSheet* sheet, RecalcStyleTime when, Style ResolverUpdateMode updateMode) 5348 void Document::modifiedStyleSheet(StyleSheet* sheet, RecalcStyleTime when, Style ResolverUpdateMode updateMode)
5349 { 5349 {
5350 if (!isActive()) 5350 if (!isActive())
5351 return; 5351 return;
5352 5352
5353 styleEngine()->modifiedStyleSheet(sheet); 5353 styleEngine()->modifiedStyleSheet(sheet);
5354 styleResolverChanged(when, updateMode); 5354 styleResolverChanged(when, updateMode);
5355 } 5355 }
5356 5356
5357 } // namespace WebCore 5357 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/bindings/v8/custom/V8WindowCustom.cpp ('k') | Source/core/dom/ScriptLoader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698