Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights |
| 3 * reserved. | 3 * reserved. |
| 4 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 4 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 5 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 5 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
| 6 * (http://www.torchmobile.com/) | 6 * (http://www.torchmobile.com/) |
| 7 * Copyright (C) 2008 Alp Toker <alp@atoker.com> | 7 * Copyright (C) 2008 Alp Toker <alp@atoker.com> |
| 8 * Copyright (C) Research In Motion Limited 2009. All rights reserved. | 8 * Copyright (C) Research In Motion Limited 2009. All rights reserved. |
| 9 * Copyright (C) 2011 Kris Jordan <krisjordan@gmail.com> | 9 * Copyright (C) 2011 Kris Jordan <krisjordan@gmail.com> |
| 10 * Copyright (C) 2011 Google Inc. All rights reserved. | 10 * Copyright (C) 2011 Google Inc. All rights reserved. |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 219 initialRequest.setFrameType(m_frame->isMainFrame() | 219 initialRequest.setFrameType(m_frame->isMainFrame() |
| 220 ? WebURLRequest::FrameTypeTopLevel | 220 ? WebURLRequest::FrameTypeTopLevel |
| 221 : WebURLRequest::FrameTypeNested); | 221 : WebURLRequest::FrameTypeNested); |
| 222 m_provisionalDocumentLoader = | 222 m_provisionalDocumentLoader = |
| 223 client()->createDocumentLoader(m_frame, initialRequest, SubstituteData(), | 223 client()->createDocumentLoader(m_frame, initialRequest, SubstituteData(), |
| 224 ClientRedirectPolicy::NotClientRedirect); | 224 ClientRedirectPolicy::NotClientRedirect); |
| 225 m_provisionalDocumentLoader->startLoadingMainResource(); | 225 m_provisionalDocumentLoader->startLoadingMainResource(); |
| 226 m_frame->document()->cancelParsing(); | 226 m_frame->document()->cancelParsing(); |
| 227 m_stateMachine.advanceTo( | 227 m_stateMachine.advanceTo( |
| 228 FrameLoaderStateMachine::DisplayingInitialEmptyDocument); | 228 FrameLoaderStateMachine::DisplayingInitialEmptyDocument); |
| 229 // Suppress finish notifications for inital empty documents, since they don't | |
| 230 // generate start notifications. | |
|
dcheng
2016/12/14 23:01:28
Unrelated, but do you think it'd be problematic to
Nate Chapin
2016/12/14 23:59:18
Extensions might inject content scripts into initi
| |
| 231 if (m_documentLoader) | |
| 232 m_documentLoader->setSentDidFinishLoad(); | |
| 229 // Self-suspend if created in an already suspended Page. Note that both | 233 // Self-suspend if created in an already suspended Page. Note that both |
| 230 // startLoadingMainResource() and cancelParsing() may have already detached | 234 // startLoadingMainResource() and cancelParsing() may have already detached |
| 231 // the frame, since they both fire JS events. | 235 // the frame, since they both fire JS events. |
| 232 if (m_frame->page() && m_frame->page()->suspended()) | 236 if (m_frame->page() && m_frame->page()->suspended()) |
| 233 setDefersLoading(true); | 237 setDefersLoading(true); |
| 234 takeObjectSnapshot(); | 238 takeObjectSnapshot(); |
| 235 } | 239 } |
| 236 | 240 |
| 237 FrameLoaderClient* FrameLoader::client() const { | 241 FrameLoaderClient* FrameLoader::client() const { |
| 238 return static_cast<FrameLoaderClient*>(m_frame->client()); | 242 return static_cast<FrameLoaderClient*>(m_frame->client()); |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 666 if (!document->haveImportsLoaded()) | 670 if (!document->haveImportsLoaded()) |
| 667 return false; | 671 return false; |
| 668 if (document->fetcher()->requestCount()) | 672 if (document->fetcher()->requestCount()) |
| 669 return false; | 673 return false; |
| 670 if (document->isDelayingLoadEvent()) | 674 if (document->isDelayingLoadEvent()) |
| 671 return false; | 675 return false; |
| 672 return allDescendantsAreComplete(document->frame()); | 676 return allDescendantsAreComplete(document->frame()); |
| 673 } | 677 } |
| 674 | 678 |
| 675 static bool shouldSendFinishNotification(LocalFrame* frame) { | 679 static bool shouldSendFinishNotification(LocalFrame* frame) { |
| 676 // Don't send stop notifications for inital empty documents, since they don't | |
| 677 // generate start notifications. | |
| 678 if (!frame->loader().stateMachine()->committedFirstRealDocumentLoad()) | |
|
Nate Chapin
2016/12/12 21:40:38
setSentDidFinishLoad() in init() instead.
| |
| 679 return false; | |
| 680 | |
| 681 // Don't send didFinishLoad more than once per DocumentLoader. | 680 // Don't send didFinishLoad more than once per DocumentLoader. |
| 682 if (frame->loader().documentLoader()->sentDidFinishLoad()) | 681 if (frame->loader().documentLoader()->sentDidFinishLoad()) |
| 683 return false; | 682 return false; |
| 684 | 683 |
| 685 // We might have declined to run the load event due to an imminent | 684 // We might have declined to run the load event due to an imminent |
| 686 // content-initiated navigation. | 685 // content-initiated navigation. |
| 687 if (!frame->document()->loadEventFinished()) | 686 if (!frame->document()->loadEventFinished()) |
| 688 return false; | 687 return false; |
| 689 | 688 |
| 690 // An event might have restarted a child frame. | 689 // An event might have restarted a child frame. |
| (...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1462 void FrameLoader::loadFailed(DocumentLoader* loader, | 1461 void FrameLoader::loadFailed(DocumentLoader* loader, |
| 1463 const ResourceError& error) { | 1462 const ResourceError& error) { |
| 1464 if (!error.isCancellation() && m_frame->owner()) { | 1463 if (!error.isCancellation() && m_frame->owner()) { |
| 1465 // FIXME: For now, fallback content doesn't work cross process. | 1464 // FIXME: For now, fallback content doesn't work cross process. |
| 1466 if (m_frame->owner()->isLocal()) | 1465 if (m_frame->owner()->isLocal()) |
| 1467 m_frame->deprecatedLocalOwner()->renderFallbackContent(); | 1466 m_frame->deprecatedLocalOwner()->renderFallbackContent(); |
| 1468 } | 1467 } |
| 1469 | 1468 |
| 1470 HistoryCommitType historyCommitType = loadTypeToCommitType(m_loadType); | 1469 HistoryCommitType historyCommitType = loadTypeToCommitType(m_loadType); |
| 1471 if (loader == m_provisionalDocumentLoader) { | 1470 if (loader == m_provisionalDocumentLoader) { |
| 1471 m_provisionalDocumentLoader->setSentDidFinishLoad(); | |
| 1472 client()->dispatchDidFailProvisionalLoad(error, historyCommitType); | 1472 client()->dispatchDidFailProvisionalLoad(error, historyCommitType); |
| 1473 if (loader != m_provisionalDocumentLoader) | 1473 if (loader != m_provisionalDocumentLoader) |
| 1474 return; | 1474 return; |
| 1475 detachDocumentLoader(m_provisionalDocumentLoader); | 1475 detachDocumentLoader(m_provisionalDocumentLoader); |
| 1476 m_progressTracker->progressCompleted(); | |
|
Nate Chapin
2016/12/12 21:40:38
progressCompleted() should be called if appropriat
dcheng
2016/12/14 23:01:28
Seems subtle, but I agree this should work.
| |
| 1477 } else { | 1476 } else { |
| 1478 DCHECK_EQ(loader, m_documentLoader); | 1477 DCHECK_EQ(loader, m_documentLoader); |
| 1479 if (m_frame->document()->parser()) | 1478 if (m_frame->document()->parser()) |
| 1480 m_frame->document()->parser()->stopParsing(); | 1479 m_frame->document()->parser()->stopParsing(); |
| 1481 m_documentLoader->setSentDidFinishLoad(); | 1480 if (!m_documentLoader->sentDidFinishLoad()) { |
| 1482 if (!m_provisionalDocumentLoader && m_frame->isLoading()) { | 1481 m_documentLoader->setSentDidFinishLoad(); |
| 1483 client()->dispatchDidFailLoad(error, historyCommitType); | 1482 client()->dispatchDidFailLoad(error, historyCommitType); |
| 1484 m_progressTracker->progressCompleted(); | |
| 1485 } | 1483 } |
| 1486 } | 1484 } |
| 1487 checkCompleted(); | 1485 checkCompleted(); |
| 1488 } | 1486 } |
| 1489 | 1487 |
| 1490 bool FrameLoader::shouldPerformFragmentNavigation(bool isFormSubmission, | 1488 bool FrameLoader::shouldPerformFragmentNavigation(bool isFormSubmission, |
| 1491 const String& httpMethod, | 1489 const String& httpMethod, |
| 1492 FrameLoadType loadType, | 1490 FrameLoadType loadType, |
| 1493 const KURL& url) { | 1491 const KURL& url) { |
| 1494 // We don't do this if we are submitting a form with method other than "GET", | 1492 // We don't do this if we are submitting a form with method other than "GET", |
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1959 m_documentLoader ? m_documentLoader->url() : String()); | 1957 m_documentLoader ? m_documentLoader->url() : String()); |
| 1960 return tracedValue; | 1958 return tracedValue; |
| 1961 } | 1959 } |
| 1962 | 1960 |
| 1963 inline void FrameLoader::takeObjectSnapshot() const { | 1961 inline void FrameLoader::takeObjectSnapshot() const { |
| 1964 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID("loading", "FrameLoader", this, | 1962 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID("loading", "FrameLoader", this, |
| 1965 toTracedValue()); | 1963 toTracedValue()); |
| 1966 } | 1964 } |
| 1967 | 1965 |
| 1968 } // namespace blink | 1966 } // namespace blink |
| OLD | NEW |