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

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

Issue 31063004: Have Frame::loader() return a reference (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: 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/core/dom/DOMImplementation.cpp ('k') | Source/core/dom/DocumentInit.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 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 , m_templateDocumentHost(0) 466 , m_templateDocumentHost(0)
467 , m_fonts(0) 467 , m_fonts(0)
468 , m_didAssociateFormControlsTimer(this, &Document::didAssociateFormControlsT imerFired) 468 , m_didAssociateFormControlsTimer(this, &Document::didAssociateFormControlsT imerFired)
469 { 469 {
470 setClient(this); 470 setClient(this);
471 ScriptWrappable::init(this); 471 ScriptWrappable::init(this);
472 472
473 if (m_frame) { 473 if (m_frame) {
474 provideContextFeaturesToDocumentFrom(this, m_frame->page()); 474 provideContextFeaturesToDocumentFrom(this, m_frame->page());
475 475
476 m_fetcher = m_frame->loader()->activeDocumentLoader()->fetcher(); 476 m_fetcher = m_frame->loader().activeDocumentLoader()->fetcher();
477 } 477 }
478 478
479 if (!m_fetcher) 479 if (!m_fetcher)
480 m_fetcher = ResourceFetcher::create(0); 480 m_fetcher = ResourceFetcher::create(0);
481 m_fetcher->setDocument(this); 481 m_fetcher->setDocument(this);
482 482
483 // We depend on the url getting immediately set in subframes, but we 483 // We depend on the url getting immediately set in subframes, but we
484 // also depend on the url NOT getting immediately set in opened windows. 484 // also depend on the url NOT getting immediately set in opened windows.
485 // See fast/dom/early-frame-url.html 485 // See fast/dom/early-frame-url.html
486 // and fast/dom/location-new-window-no-crash.html, respectively. 486 // and fast/dom/location-new-window-no-crash.html, respectively.
(...skipping 814 matching lines...) Expand 10 before | Expand all | Expand 10 after
1301 String oldTitle = m_title; 1301 String oldTitle = m_title;
1302 if (m_rawTitle.isEmpty()) 1302 if (m_rawTitle.isEmpty())
1303 m_title = String(); 1303 m_title = String();
1304 else if (m_rawTitle.is8Bit()) 1304 else if (m_rawTitle.is8Bit())
1305 m_title = canonicalizedTitle<LChar>(this, m_rawTitle); 1305 m_title = canonicalizedTitle<LChar>(this, m_rawTitle);
1306 else 1306 else
1307 m_title = canonicalizedTitle<UChar>(this, m_rawTitle); 1307 m_title = canonicalizedTitle<UChar>(this, m_rawTitle);
1308 1308
1309 if (!m_frame || oldTitle == m_title) 1309 if (!m_frame || oldTitle == m_title)
1310 return; 1310 return;
1311 m_frame->loader()->client()->dispatchDidReceiveTitle(m_title); 1311 m_frame->loader().client()->dispatchDidReceiveTitle(m_title);
1312 } 1312 }
1313 1313
1314 void Document::setTitle(const String& title) 1314 void Document::setTitle(const String& title)
1315 { 1315 {
1316 // Title set by JavaScript -- overrides any title elements. 1316 // Title set by JavaScript -- overrides any title elements.
1317 m_titleSetExplicitly = true; 1317 m_titleSetExplicitly = true;
1318 if (!isHTMLDocument() && !isXHTMLDocument()) 1318 if (!isHTMLDocument() && !isXHTMLDocument())
1319 m_titleElement = 0; 1319 m_titleElement = 0;
1320 else if (!m_titleElement) { 1320 else if (!m_titleElement) {
1321 if (HTMLElement* headElement = head()) { 1321 if (HTMLElement* headElement = head()) {
(...skipping 844 matching lines...) Expand 10 before | Expand all | Expand 10 after
2166 if (parser->isParsing()) { 2166 if (parser->isParsing()) {
2167 // FIXME: HTML5 doesn't tell us to check this, it might not be c orrect. 2167 // FIXME: HTML5 doesn't tell us to check this, it might not be c orrect.
2168 if (parser->isExecutingScript()) 2168 if (parser->isExecutingScript())
2169 return; 2169 return;
2170 2170
2171 if (!parser->wasCreatedByScript() && parser->hasInsertionPoint() ) 2171 if (!parser->wasCreatedByScript() && parser->hasInsertionPoint() )
2172 return; 2172 return;
2173 } 2173 }
2174 } 2174 }
2175 2175
2176 if (m_frame->loader()->state() == FrameStateProvisional) 2176 if (m_frame->loader().state() == FrameStateProvisional)
2177 m_frame->loader()->stopAllLoaders(); 2177 m_frame->loader().stopAllLoaders();
2178 } 2178 }
2179 2179
2180 removeAllEventListeners(); 2180 removeAllEventListeners();
2181 implicitOpen(); 2181 implicitOpen();
2182 if (ScriptableDocumentParser* parser = scriptableDocumentParser()) 2182 if (ScriptableDocumentParser* parser = scriptableDocumentParser())
2183 parser->setWasCreatedByScript(true); 2183 parser->setWasCreatedByScript(true);
2184 2184
2185 if (m_frame) 2185 if (m_frame)
2186 m_frame->loader()->didExplicitOpen(); 2186 m_frame->loader().didExplicitOpen();
2187 if (m_loadEventProgress != LoadEventInProgress && m_loadEventProgress != Unl oadEventInProgress) 2187 if (m_loadEventProgress != LoadEventInProgress && m_loadEventProgress != Unl oadEventInProgress)
2188 m_loadEventProgress = LoadEventNotRun; 2188 m_loadEventProgress = LoadEventNotRun;
2189 } 2189 }
2190 2190
2191 void Document::detachParser() 2191 void Document::detachParser()
2192 { 2192 {
2193 if (!m_parser) 2193 if (!m_parser)
2194 return; 2194 return;
2195 m_parser->detach(); 2195 m_parser->detach();
2196 m_parser.clear(); 2196 m_parser.clear();
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
2298 parser->finish(); 2298 parser->finish();
2299 2299
2300 if (!m_frame) { 2300 if (!m_frame) {
2301 // Because we have no frame, we don't know if all loading has completed, 2301 // Because we have no frame, we don't know if all loading has completed,
2302 // so we just call implicitClose() immediately. FIXME: This might fire 2302 // so we just call implicitClose() immediately. FIXME: This might fire
2303 // the load event prematurely <http://bugs.webkit.org/show_bug.cgi?id=14 568>. 2303 // the load event prematurely <http://bugs.webkit.org/show_bug.cgi?id=14 568>.
2304 implicitClose(); 2304 implicitClose();
2305 return; 2305 return;
2306 } 2306 }
2307 2307
2308 m_frame->loader()->checkCompleted(); 2308 m_frame->loader().checkCompleted();
2309 } 2309 }
2310 2310
2311 void Document::implicitClose() 2311 void Document::implicitClose()
2312 { 2312 {
2313 ASSERT(!inStyleRecalc()); 2313 ASSERT(!inStyleRecalc());
2314 2314
2315 bool wasLocationChangePending = frame() && frame()->navigationScheduler().lo cationChangePending(); 2315 bool wasLocationChangePending = frame() && frame()->navigationScheduler().lo cationChangePending();
2316 bool doload = !parsing() && m_parser && !processingLoadEvent() && !wasLocati onChangePending; 2316 bool doload = !parsing() && m_parser && !processingLoadEvent() && !wasLocati onChangePending;
2317 2317
2318 // If the load was blocked because of a pending location change and the loca tion change triggers a same document 2318 // If the load was blocked because of a pending location change and the loca tion change triggers a same document
(...skipping 30 matching lines...) Expand all
2349 // here, instead of doing it from SVGElement::finishedParsingChildren (if ex ternalResourcesRequired="false", 2349 // here, instead of doing it from SVGElement::finishedParsingChildren (if ex ternalResourcesRequired="false",
2350 // which is the default, for ='true' its fired at a later time, once all ext ernal resources finished loading). 2350 // which is the default, for ='true' its fired at a later time, once all ext ernal resources finished loading).
2351 if (svgExtensions()) 2351 if (svgExtensions())
2352 accessSVGExtensions()->dispatchSVGLoadEventToOutermostSVGElements(); 2352 accessSVGExtensions()->dispatchSVGLoadEventToOutermostSVGElements();
2353 2353
2354 dispatchWindowLoadEvent(); 2354 dispatchWindowLoadEvent();
2355 enqueuePageshowEvent(PageshowEventNotPersisted); 2355 enqueuePageshowEvent(PageshowEventNotPersisted);
2356 enqueuePopstateEvent(m_pendingStateObject ? m_pendingStateObject.release() : SerializedScriptValue::nullValue()); 2356 enqueuePopstateEvent(m_pendingStateObject ? m_pendingStateObject.release() : SerializedScriptValue::nullValue());
2357 2357
2358 if (frame()) { 2358 if (frame()) {
2359 frame()->loader()->client()->dispatchDidHandleOnloadEvents(); 2359 frame()->loader().client()->dispatchDidHandleOnloadEvents();
2360 loader()->applicationCacheHost()->stopDeferringEvents(); 2360 loader()->applicationCacheHost()->stopDeferringEvents();
2361 } 2361 }
2362 2362
2363 // An event handler may have removed the frame 2363 // An event handler may have removed the frame
2364 if (!frame()) { 2364 if (!frame()) {
2365 m_loadEventProgress = LoadEventCompleted; 2365 m_loadEventProgress = LoadEventCompleted;
2366 return; 2366 return;
2367 } 2367 }
2368 2368
2369 // Make sure both the initial layout and reflow happen after the onload 2369 // Make sure both the initial layout and reflow happen after the onload
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
2459 toHTMLInputElement(currentFocusedElement)->endEditing(); 2459 toHTMLInputElement(currentFocusedElement)->endEditing();
2460 if (m_loadEventProgress < PageHideInProgress) { 2460 if (m_loadEventProgress < PageHideInProgress) {
2461 m_loadEventProgress = PageHideInProgress; 2461 m_loadEventProgress = PageHideInProgress;
2462 dispatchWindowEvent(PageTransitionEvent::create(EventTypeNames::page hide, false), this); 2462 dispatchWindowEvent(PageTransitionEvent::create(EventTypeNames::page hide, false), this);
2463 if (!m_frame) 2463 if (!m_frame)
2464 return; 2464 return;
2465 2465
2466 // The DocumentLoader (and thus its DocumentLoadTiming) might get de stroyed 2466 // The DocumentLoader (and thus its DocumentLoadTiming) might get de stroyed
2467 // while dispatching the event, so protect it to prevent writing the end 2467 // while dispatching the event, so protect it to prevent writing the end
2468 // time into freed memory. 2468 // time into freed memory.
2469 RefPtr<DocumentLoader> documentLoader = m_frame->loader()->provisio nalDocumentLoader(); 2469 RefPtr<DocumentLoader> documentLoader = m_frame->loader().provision alDocumentLoader();
2470 m_loadEventProgress = UnloadEventInProgress; 2470 m_loadEventProgress = UnloadEventInProgress;
2471 RefPtr<Event> unloadEvent(Event::create(EventTypeNames::unload)); 2471 RefPtr<Event> unloadEvent(Event::create(EventTypeNames::unload));
2472 if (documentLoader && !documentLoader->timing()->unloadEventStart() && !documentLoader->timing()->unloadEventEnd()) { 2472 if (documentLoader && !documentLoader->timing()->unloadEventStart() && !documentLoader->timing()->unloadEventEnd()) {
2473 DocumentLoadTiming* timing = documentLoader->timing(); 2473 DocumentLoadTiming* timing = documentLoader->timing();
2474 ASSERT(timing->navigationStart()); 2474 ASSERT(timing->navigationStart());
2475 timing->markUnloadEventStart(); 2475 timing->markUnloadEventStart();
2476 dispatchWindowEvent(unloadEvent, this); 2476 dispatchWindowEvent(unloadEvent, this);
2477 timing->markUnloadEventEnd(); 2477 timing->markUnloadEventEnd();
2478 } else { 2478 } else {
2479 m_frame->domWindow()->dispatchEvent(unloadEvent, m_frame->docume nt()); 2479 m_frame->domWindow()->dispatchEvent(unloadEvent, m_frame->docume nt());
2480 } 2480 }
2481 } 2481 }
2482 updateStyleIfNeeded(); 2482 updateStyleIfNeeded();
2483 m_loadEventProgress = UnloadEventHandled; 2483 m_loadEventProgress = UnloadEventHandled;
2484 } 2484 }
2485 2485
2486 if (!m_frame) 2486 if (!m_frame)
2487 return; 2487 return;
2488 2488
2489 // Don't remove event listeners from a transitional empty document (see http s://bugs.webkit.org/show_bug.cgi?id=28716 for more information). 2489 // Don't remove event listeners from a transitional empty document (see http s://bugs.webkit.org/show_bug.cgi?id=28716 for more information).
2490 bool keepEventListeners = m_frame->loader()->stateMachine()->isDisplayingIni tialEmptyDocument() && m_frame->loader()->provisionalDocumentLoader() 2490 bool keepEventListeners = m_frame->loader().stateMachine()->isDisplayingInit ialEmptyDocument() && m_frame->loader().provisionalDocumentLoader()
2491 && isSecureTransitionTo(m_frame->loader()->provisionalDocumentLoader()-> url()); 2491 && isSecureTransitionTo(m_frame->loader().provisionalDocumentLoader()->u rl());
2492 if (!keepEventListeners) 2492 if (!keepEventListeners)
2493 removeAllEventListeners(); 2493 removeAllEventListeners();
2494 } 2494 }
2495 2495
2496 Document::PageDismissalType Document::pageDismissalEventBeingDispatched() const 2496 Document::PageDismissalType Document::pageDismissalEventBeingDispatched() const
2497 { 2497 {
2498 if (m_loadEventProgress == BeforeUnloadEventInProgress) 2498 if (m_loadEventProgress == BeforeUnloadEventInProgress)
2499 return BeforeUnloadDismissal; 2499 return BeforeUnloadDismissal;
2500 if (m_loadEventProgress == PageHideInProgress) 2500 if (m_loadEventProgress == PageHideInProgress)
2501 return PageHideDismissal; 2501 return PageHideDismissal;
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
2700 if (m_baseElementURL != baseElementURL && contentSecurityPolicy()->allowBase URI(baseElementURL)) { 2700 if (m_baseElementURL != baseElementURL && contentSecurityPolicy()->allowBase URI(baseElementURL)) {
2701 m_baseElementURL = baseElementURL; 2701 m_baseElementURL = baseElementURL;
2702 updateBaseURL(); 2702 updateBaseURL();
2703 } 2703 }
2704 2704
2705 m_baseTarget = target ? *target : nullAtom; 2705 m_baseTarget = target ? *target : nullAtom;
2706 } 2706 }
2707 2707
2708 String Document::userAgent(const KURL& url) const 2708 String Document::userAgent(const KURL& url) const
2709 { 2709 {
2710 return frame() ? frame()->loader()->userAgent(url) : String(); 2710 return frame() ? frame()->loader().userAgent(url) : String();
2711 } 2711 }
2712 2712
2713 void Document::disableEval(const String& errorMessage) 2713 void Document::disableEval(const String& errorMessage)
2714 { 2714 {
2715 if (!frame()) 2715 if (!frame())
2716 return; 2716 return;
2717 2717
2718 frame()->script().disableEval(errorMessage); 2718 frame()->script().disableEval(errorMessage);
2719 } 2719 }
2720 2720
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2760 // are still some restrictions on navigation to avoid nuisance attacks. 2760 // are still some restrictions on navigation to avoid nuisance attacks.
2761 // Specifically, a document can navigate a top-level frame if that frame 2761 // Specifically, a document can navigate a top-level frame if that frame
2762 // opened the document or if the document is the same-origin with any of 2762 // opened the document or if the document is the same-origin with any of
2763 // the top-level frame's opener's ancestors (in the frame hierarchy). 2763 // the top-level frame's opener's ancestors (in the frame hierarchy).
2764 // 2764 //
2765 // In both of these cases, the document performing the navigation is in 2765 // In both of these cases, the document performing the navigation is in
2766 // some way related to the frame being navigate (e.g., by the "opener" 2766 // some way related to the frame being navigate (e.g., by the "opener"
2767 // and/or "parent" relation). Requiring some sort of relation prevents a 2767 // and/or "parent" relation). Requiring some sort of relation prevents a
2768 // document from navigating arbitrary, unrelated top-level frames. 2768 // document from navigating arbitrary, unrelated top-level frames.
2769 if (!targetFrame->tree().parent()) { 2769 if (!targetFrame->tree().parent()) {
2770 if (targetFrame == m_frame->loader()->opener()) 2770 if (targetFrame == m_frame->loader().opener())
2771 return true; 2771 return true;
2772 2772
2773 if (canAccessAncestor(securityOrigin(), targetFrame->loader()->opener()) ) 2773 if (canAccessAncestor(securityOrigin(), targetFrame->loader().opener()))
2774 return true; 2774 return true;
2775 } 2775 }
2776 2776
2777 printNavigationErrorMessage(targetFrame, url(), "The frame attempting naviga tion is neither same-origin with the target, nor is it the target's parent or op ener."); 2777 printNavigationErrorMessage(targetFrame, url(), "The frame attempting naviga tion is neither same-origin with the target, nor is it the target's parent or op ener.");
2778 return false; 2778 return false;
2779 } 2779 }
2780 2780
2781 Frame* Document::findUnsafeParentScrollPropagationBoundary() 2781 Frame* Document::findUnsafeParentScrollPropagationBoundary()
2782 { 2782 {
2783 Frame* currentFrame = m_frame; 2783 Frame* currentFrame = m_frame;
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
2919 // Exception (for sandboxed documents) ignored. 2919 // Exception (for sandboxed documents) ignored.
2920 toHTMLDocument(this)->setCookie(content, IGNORE_EXCEPTION); 2920 toHTMLDocument(this)->setCookie(content, IGNORE_EXCEPTION);
2921 } 2921 }
2922 2922
2923 void Document::processHttpEquivXFrameOptions(const String& content) 2923 void Document::processHttpEquivXFrameOptions(const String& content)
2924 { 2924 {
2925 Frame* frame = this->frame(); 2925 Frame* frame = this->frame();
2926 if (!frame) 2926 if (!frame)
2927 return; 2927 return;
2928 2928
2929 FrameLoader* frameLoader = frame->loader(); 2929 FrameLoader& frameLoader = frame->loader();
2930 unsigned long requestIdentifier = loader()->mainResourceIdentifier(); 2930 unsigned long requestIdentifier = loader()->mainResourceIdentifier();
2931 if (frameLoader->shouldInterruptLoadForXFrameOptions(content, url(), request Identifier)) { 2931 if (frameLoader.shouldInterruptLoadForXFrameOptions(content, url(), requestI dentifier)) {
2932 String message = "Refused to display '" + url().elidedString() + "' in a frame because it set 'X-Frame-Options' to '" + content + "'."; 2932 String message = "Refused to display '" + url().elidedString() + "' in a frame because it set 'X-Frame-Options' to '" + content + "'.";
2933 frameLoader->stopAllLoaders(); 2933 frameLoader.stopAllLoaders();
2934 // Stopping the loader isn't enough, as we're already parsing the docume nt; to honor the header's 2934 // Stopping the loader isn't enough, as we're already parsing the docume nt; to honor the header's
2935 // intent, we must navigate away from the possibly partially-rendered do cument to a location that 2935 // intent, we must navigate away from the possibly partially-rendered do cument to a location that
2936 // doesn't inherit the parent's SecurityOrigin. 2936 // doesn't inherit the parent's SecurityOrigin.
2937 frame->navigationScheduler().scheduleLocationChange(securityOrigin(), Se curityOrigin::urlWithUniqueSecurityOrigin(), String()); 2937 frame->navigationScheduler().scheduleLocationChange(securityOrigin(), Se curityOrigin::urlWithUniqueSecurityOrigin(), String());
2938 addConsoleMessageWithRequestIdentifier(SecurityMessageSource, ErrorMessa geLevel, message, requestIdentifier); 2938 addConsoleMessageWithRequestIdentifier(SecurityMessageSource, ErrorMessa geLevel, message, requestIdentifier);
2939 } 2939 }
2940 } 2940 }
2941 2941
2942 bool Document::shouldMergeWithLegacyDescription(ViewportDescription::Type origin ) 2942 bool Document::shouldMergeWithLegacyDescription(ViewportDescription::Type origin )
2943 { 2943 {
(...skipping 1173 matching lines...) Expand 10 before | Expand all | Expand 10 after
4117 KURL Document::openSearchDescriptionURL() 4117 KURL Document::openSearchDescriptionURL()
4118 { 4118 {
4119 static const char* const openSearchMIMEType = "application/opensearchdescrip tion+xml"; 4119 static const char* const openSearchMIMEType = "application/opensearchdescrip tion+xml";
4120 static const char* const openSearchRelation = "search"; 4120 static const char* const openSearchRelation = "search";
4121 4121
4122 // FIXME: Why do only top-level frames have openSearchDescriptionURLs? 4122 // FIXME: Why do only top-level frames have openSearchDescriptionURLs?
4123 if (!frame() || frame()->tree().parent()) 4123 if (!frame() || frame()->tree().parent())
4124 return KURL(); 4124 return KURL();
4125 4125
4126 // FIXME: Why do we need to wait for FrameStateComplete? 4126 // FIXME: Why do we need to wait for FrameStateComplete?
4127 if (frame()->loader()->state() != FrameStateComplete) 4127 if (frame()->loader().state() != FrameStateComplete)
4128 return KURL(); 4128 return KURL();
4129 4129
4130 if (!head()) 4130 if (!head())
4131 return KURL(); 4131 return KURL();
4132 4132
4133 RefPtr<HTMLCollection> children = head()->children(); 4133 RefPtr<HTMLCollection> children = head()->children();
4134 for (unsigned i = 0; Node* child = children->item(i); i++) { 4134 for (unsigned i = 0; Node* child = children->item(i); i++) {
4135 if (!child->hasTagName(linkTag)) 4135 if (!child->hasTagName(linkTag))
4136 continue; 4136 continue;
4137 HTMLLinkElement* linkElement = toHTMLLinkElement(child); 4137 HTMLLinkElement* linkElement = toHTMLLinkElement(child);
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
4353 if (RefPtr<Frame> f = frame()) { 4353 if (RefPtr<Frame> f = frame()) {
4354 // FrameLoader::finishedParsing() might end up calling Document::implici tClose() if all 4354 // FrameLoader::finishedParsing() might end up calling Document::implici tClose() if all
4355 // resource loads are complete. HTMLObjectElements can start loading the ir resources from 4355 // resource loads are complete. HTMLObjectElements can start loading the ir resources from
4356 // post attach callbacks triggered by recalcStyle(). This means if we p arse out an <object> 4356 // post attach callbacks triggered by recalcStyle(). This means if we p arse out an <object>
4357 // tag and then reach the end of the document without updating styles, w e might not have yet 4357 // tag and then reach the end of the document without updating styles, w e might not have yet
4358 // started the resource load and might fire the window load event too ea rly. To avoid this 4358 // started the resource load and might fire the window load event too ea rly. To avoid this
4359 // we force the styles to be up to date before calling FrameLoader::fini shedParsing(). 4359 // we force the styles to be up to date before calling FrameLoader::fini shedParsing().
4360 // See https://bugs.webkit.org/show_bug.cgi?id=36864 starting around com ment 35. 4360 // See https://bugs.webkit.org/show_bug.cgi?id=36864 starting around com ment 35.
4361 updateStyleIfNeeded(); 4361 updateStyleIfNeeded();
4362 4362
4363 f->loader()->finishedParsing(); 4363 f->loader().finishedParsing();
4364 4364
4365 InspectorInstrumentation::domContentLoadedEventFired(f.get()); 4365 InspectorInstrumentation::domContentLoadedEventFired(f.get());
4366 } 4366 }
4367 4367
4368 // Schedule dropping of the DocumentSharedObjectPool. We keep it alive for a while after parsing finishes 4368 // Schedule dropping of the DocumentSharedObjectPool. We keep it alive for a while after parsing finishes
4369 // so that dynamically inserted content can also benefit from sharing optimi zations. 4369 // so that dynamically inserted content can also benefit from sharing optimi zations.
4370 // Note that we don't refresh the timer on pool access since that could lead to huge caches being kept 4370 // Note that we don't refresh the timer on pool access since that could lead to huge caches being kept
4371 // alive indefinitely by something innocuous like JS setting .innerHTML repe atedly on a timer. 4371 // alive indefinitely by something innocuous like JS setting .innerHTML repe atedly on a timer.
4372 static const int timeToKeepSharedObjectPoolAliveAfterParsingFinishedInSecond s = 10; 4372 static const int timeToKeepSharedObjectPoolAliveAfterParsingFinishedInSecond s = 10;
4373 m_sharedObjectPoolClearTimer.startOneShot(timeToKeepSharedObjectPoolAliveAft erParsingFinishedInSeconds); 4373 m_sharedObjectPoolClearTimer.startOneShot(timeToKeepSharedObjectPoolAliveAft erParsingFinishedInSeconds);
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
4886 ASSERT(m_loadEventDelayCount); 4886 ASSERT(m_loadEventDelayCount);
4887 --m_loadEventDelayCount; 4887 --m_loadEventDelayCount;
4888 4888
4889 if (frame() && !m_loadEventDelayCount && !m_loadEventDelayTimer.isActive()) 4889 if (frame() && !m_loadEventDelayCount && !m_loadEventDelayTimer.isActive())
4890 m_loadEventDelayTimer.startOneShot(0); 4890 m_loadEventDelayTimer.startOneShot(0);
4891 } 4891 }
4892 4892
4893 void Document::loadEventDelayTimerFired(Timer<Document>*) 4893 void Document::loadEventDelayTimerFired(Timer<Document>*)
4894 { 4894 {
4895 if (frame()) 4895 if (frame())
4896 frame()->loader()->checkCompleted(); 4896 frame()->loader().checkCompleted();
4897 } 4897 }
4898 4898
4899 ScriptedAnimationController& Document::ensureScriptedAnimationController() 4899 ScriptedAnimationController& Document::ensureScriptedAnimationController()
4900 { 4900 {
4901 if (!m_scriptedAnimationController) { 4901 if (!m_scriptedAnimationController) {
4902 m_scriptedAnimationController = ScriptedAnimationController::create(this ); 4902 m_scriptedAnimationController = ScriptedAnimationController::create(this );
4903 // We need to make sure that we don't start up the animation controller on a background tab, for example. 4903 // We need to make sure that we don't start up the animation controller on a background tab, for example.
4904 if (!page()) 4904 if (!page())
4905 m_scriptedAnimationController->suspend(); 4905 m_scriptedAnimationController->suspend();
4906 } 4906 }
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
5016 if (!ownerElement) 5016 if (!ownerElement)
5017 return false; 5017 return false;
5018 return m_mayDisplaySeamlesslyWithParent && ownerElement->hasTagName(iframeTa g) && ownerElement->fastHasAttribute(seamlessAttr); 5018 return m_mayDisplaySeamlesslyWithParent && ownerElement->hasTagName(iframeTa g) && ownerElement->fastHasAttribute(seamlessAttr);
5019 } 5019 }
5020 5020
5021 DocumentLoader* Document::loader() const 5021 DocumentLoader* Document::loader() const
5022 { 5022 {
5023 if (!m_frame) 5023 if (!m_frame)
5024 return 0; 5024 return 0;
5025 5025
5026 DocumentLoader* loader = m_frame->loader()->documentLoader(); 5026 DocumentLoader* loader = m_frame->loader().documentLoader();
5027 if (!loader) 5027 if (!loader)
5028 return 0; 5028 return 0;
5029 5029
5030 if (m_frame->document() != this) 5030 if (m_frame->document() != this)
5031 return 0; 5031 return 0;
5032 5032
5033 return loader; 5033 return loader;
5034 } 5034 }
5035 5035
5036 IntSize Document::initialViewportSize() const 5036 IntSize Document::initialViewportSize() const
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
5085 5085
5086 void Document::decrementActiveParserCount() 5086 void Document::decrementActiveParserCount()
5087 { 5087 {
5088 --m_activeParserCount; 5088 --m_activeParserCount;
5089 if (!frame()) 5089 if (!frame())
5090 return; 5090 return;
5091 // FIXME: This should always be enabled, but it seems to cause 5091 // FIXME: This should always be enabled, but it seems to cause
5092 // http/tests/security/feed-urls-from-remote.html to timeout on Mac WK1 5092 // http/tests/security/feed-urls-from-remote.html to timeout on Mac WK1
5093 // see http://webkit.org/b/110554 and http://webkit.org/b/110401 5093 // see http://webkit.org/b/110554 and http://webkit.org/b/110401
5094 loader()->checkLoadComplete(); 5094 loader()->checkLoadComplete();
5095 frame()->loader()->checkLoadComplete(); 5095 frame()->loader().checkLoadComplete();
5096 } 5096 }
5097 5097
5098 void Document::setContextFeatures(PassRefPtr<ContextFeatures> features) 5098 void Document::setContextFeatures(PassRefPtr<ContextFeatures> features)
5099 { 5099 {
5100 m_contextFeatures = features; 5100 m_contextFeatures = features;
5101 } 5101 }
5102 5102
5103 static RenderObject* nearestCommonHoverAncestor(RenderObject* obj1, RenderObject * obj2) 5103 static RenderObject* nearestCommonHoverAncestor(RenderObject* obj1, RenderObject * obj2)
5104 { 5104 {
5105 if (!obj1 || !obj2) 5105 if (!obj1 || !obj2)
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
5350 void Document::modifiedStyleSheet(StyleSheet* sheet, RecalcStyleTime when, Style ResolverUpdateMode updateMode) 5350 void Document::modifiedStyleSheet(StyleSheet* sheet, RecalcStyleTime when, Style ResolverUpdateMode updateMode)
5351 { 5351 {
5352 if (!isActive()) 5352 if (!isActive())
5353 return; 5353 return;
5354 5354
5355 styleEngine()->modifiedStyleSheet(sheet); 5355 styleEngine()->modifiedStyleSheet(sheet);
5356 styleResolverChanged(when, updateMode); 5356 styleResolverChanged(when, updateMode);
5357 } 5357 }
5358 5358
5359 } // namespace WebCore 5359 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/dom/DOMImplementation.cpp ('k') | Source/core/dom/DocumentInit.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698