Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 124 FrameLoader* DocumentLoader::frameLoader() const { | 124 FrameLoader* DocumentLoader::frameLoader() const { |
| 125 if (!m_frame) | 125 if (!m_frame) |
| 126 return nullptr; | 126 return nullptr; |
| 127 return &m_frame->loader(); | 127 return &m_frame->loader(); |
| 128 } | 128 } |
| 129 | 129 |
| 130 DocumentLoader::~DocumentLoader() { | 130 DocumentLoader::~DocumentLoader() { |
| 131 DCHECK(!m_frame); | 131 DCHECK(!m_frame); |
| 132 DCHECK(!m_mainResource); | 132 DCHECK(!m_mainResource); |
| 133 DCHECK(!m_applicationCacheHost); | 133 DCHECK(!m_applicationCacheHost); |
| 134 DCHECK_EQ(m_state, SentDidFinishLoad); | |
| 134 } | 135 } |
| 135 | 136 |
| 136 DEFINE_TRACE(DocumentLoader) { | 137 DEFINE_TRACE(DocumentLoader) { |
| 137 visitor->trace(m_frame); | 138 visitor->trace(m_frame); |
| 138 visitor->trace(m_fetcher); | 139 visitor->trace(m_fetcher); |
| 139 visitor->trace(m_mainResource); | 140 visitor->trace(m_mainResource); |
| 140 visitor->trace(m_writer); | 141 visitor->trace(m_writer); |
| 141 visitor->trace(m_documentLoadTiming); | 142 visitor->trace(m_documentLoadTiming); |
| 142 visitor->trace(m_applicationCacheHost); | 143 visitor->trace(m_applicationCacheHost); |
| 143 visitor->trace(m_contentSecurityPolicy); | 144 visitor->trace(m_contentSecurityPolicy); |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 273 DCHECK_EQ(m_mainResource, resource); | 274 DCHECK_EQ(m_mainResource, resource); |
| 274 DCHECK(m_mainResource); | 275 DCHECK(m_mainResource); |
| 275 | 276 |
| 276 if (!m_mainResource->errorOccurred() && !m_mainResource->wasCanceled()) { | 277 if (!m_mainResource->errorOccurred() && !m_mainResource->wasCanceled()) { |
| 277 finishedLoading(m_mainResource->loadFinishTime()); | 278 finishedLoading(m_mainResource->loadFinishTime()); |
| 278 return; | 279 return; |
| 279 } | 280 } |
| 280 | 281 |
| 281 if (m_applicationCacheHost) | 282 if (m_applicationCacheHost) |
| 282 m_applicationCacheHost->failedLoadingMainResource(); | 283 m_applicationCacheHost->failedLoadingMainResource(); |
| 283 m_state = MainResourceDone; | |
| 284 frameLoader()->loadFailed(this, m_mainResource->resourceError()); | 284 frameLoader()->loadFailed(this, m_mainResource->resourceError()); |
| 285 clearMainResourceHandle(); | 285 clearMainResourceHandle(); |
| 286 } | 286 } |
| 287 | 287 |
| 288 void DocumentLoader::finishedLoading(double finishTime) { | 288 void DocumentLoader::finishedLoading(double finishTime) { |
| 289 DCHECK(m_frame->loader().stateMachine()->creatingInitialEmptyDocument() || | 289 DCHECK(m_frame->loader().stateMachine()->creatingInitialEmptyDocument() || |
| 290 !m_frame->page()->suspended() || | 290 !m_frame->page()->suspended() || |
| 291 InspectorInstrumentation::isDebuggerPaused(m_frame)); | 291 InspectorInstrumentation::isDebuggerPaused(m_frame)); |
| 292 | 292 |
| 293 double responseEndTime = finishTime; | 293 double responseEndTime = finishTime; |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 307 // the Document. | 307 // the Document. |
| 308 if (!m_writer) | 308 if (!m_writer) |
| 309 commitData(0, 0); | 309 commitData(0, 0); |
| 310 } | 310 } |
| 311 | 311 |
| 312 if (!m_frame) | 312 if (!m_frame) |
| 313 return; | 313 return; |
| 314 | 314 |
| 315 m_applicationCacheHost->finishedLoadingMainResource(); | 315 m_applicationCacheHost->finishedLoadingMainResource(); |
| 316 endWriting(); | 316 endWriting(); |
| 317 if (m_state < MainResourceDone) | |
| 318 m_state = MainResourceDone; | |
| 319 clearMainResourceHandle(); | 317 clearMainResourceHandle(); |
| 320 } | 318 } |
| 321 | 319 |
| 322 bool DocumentLoader::redirectReceived( | 320 bool DocumentLoader::redirectReceived( |
| 323 Resource* resource, | 321 Resource* resource, |
| 324 const ResourceRequest& request, | 322 const ResourceRequest& request, |
| 325 const ResourceResponse& redirectResponse) { | 323 const ResourceResponse& redirectResponse) { |
| 326 DCHECK_EQ(resource, m_mainResource); | 324 DCHECK_EQ(resource, m_mainResource); |
| 327 DCHECK(!redirectResponse.isNull()); | 325 DCHECK(!redirectResponse.isNull()); |
| 328 m_request = request; | 326 m_request = request; |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 543 | 541 |
| 544 m_writer = createWriterFor(init, mimeType, encoding, false, parsingPolicy, | 542 m_writer = createWriterFor(init, mimeType, encoding, false, parsingPolicy, |
| 545 overridingURL); | 543 overridingURL); |
| 546 m_writer->setDocumentWasLoadedAsPartOfNavigation(); | 544 m_writer->setDocumentWasLoadedAsPartOfNavigation(); |
| 547 m_frame->document()->maybeHandleHttpRefresh( | 545 m_frame->document()->maybeHandleHttpRefresh( |
| 548 m_response.httpHeaderField(HTTPNames::Refresh), | 546 m_response.httpHeaderField(HTTPNames::Refresh), |
| 549 Document::HttpRefreshFromHeader); | 547 Document::HttpRefreshFromHeader); |
| 550 } | 548 } |
| 551 | 549 |
| 552 void DocumentLoader::commitData(const char* bytes, size_t length) { | 550 void DocumentLoader::commitData(const char* bytes, size_t length) { |
| 553 DCHECK_LT(m_state, MainResourceDone); | 551 DCHECK_EQ(m_state, Committed); |
| 554 ensureWriter(m_response.mimeType()); | 552 ensureWriter(m_response.mimeType()); |
| 555 | 553 |
| 556 // This can happen if document.close() is called by an event handler while | 554 // This can happen if document.close() is called by an event handler while |
| 557 // there's still pending incoming data. | 555 // there's still pending incoming data. |
| 558 if (m_frame && !m_frame->document()->parsing()) | 556 if (m_frame && !m_frame->document()->parsing()) |
| 559 return; | 557 return; |
| 560 | 558 |
| 561 if (length) | 559 if (length) |
| 562 m_dataReceived = true; | 560 m_dataReceived = true; |
| 563 | 561 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 625 m_redirectChain.append(url); | 623 m_redirectChain.append(url); |
| 626 } | 624 } |
| 627 | 625 |
| 628 void DocumentLoader::detachFromFrame() { | 626 void DocumentLoader::detachFromFrame() { |
| 629 DCHECK(m_frame); | 627 DCHECK(m_frame); |
| 630 | 628 |
| 631 // It never makes sense to have a document loader that is detached from its | 629 // It never makes sense to have a document loader that is detached from its |
| 632 // frame have any loads active, so go ahead and kill all the loads. | 630 // frame have any loads active, so go ahead and kill all the loads. |
| 633 m_fetcher->stopFetching(); | 631 m_fetcher->stopFetching(); |
| 634 | 632 |
| 633 if (frameLoader() && !sentDidFinishLoad()) | |
| 634 frameLoader()->loadFailed(this, ResourceError::cancelledError(url())); | |
|
Nate Chapin
2016/12/12 21:40:37
This feels a little hacky, but it ensures we alway
gsennton
2016/12/13 13:59:55
I'm not sure I understand when we should receive a
| |
| 635 | |
| 635 // If that load cancellation triggered another detach, leave. | 636 // If that load cancellation triggered another detach, leave. |
| 636 // (fast/frames/detach-frame-nested-no-crash.html is an example of this.) | 637 // (fast/frames/detach-frame-nested-no-crash.html is an example of this.) |
| 637 if (!m_frame) | 638 if (!m_frame) |
| 638 return; | 639 return; |
| 639 | 640 |
| 640 m_fetcher->clearContext(); | 641 m_fetcher->clearContext(); |
| 641 m_applicationCacheHost->detachFromDocumentLoader(); | 642 m_applicationCacheHost->detachFromDocumentLoader(); |
| 642 m_applicationCacheHost.clear(); | 643 m_applicationCacheHost.clear(); |
| 643 WeakIdentifierMap<DocumentLoader>::notifyObjectDestroyed(this); | 644 WeakIdentifierMap<DocumentLoader>::notifyObjectDestroyed(this); |
| 644 clearMainResourceHandle(); | 645 clearMainResourceHandle(); |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 801 m_writer ? m_writer->encoding() : emptyAtom, true, | 802 m_writer ? m_writer->encoding() : emptyAtom, true, |
| 802 ForceSynchronousParsing); | 803 ForceSynchronousParsing); |
| 803 if (!source.isNull()) | 804 if (!source.isNull()) |
| 804 m_writer->appendReplacingData(source); | 805 m_writer->appendReplacingData(source); |
| 805 endWriting(); | 806 endWriting(); |
| 806 } | 807 } |
| 807 | 808 |
| 808 DEFINE_WEAK_IDENTIFIER_MAP(DocumentLoader); | 809 DEFINE_WEAK_IDENTIFIER_MAP(DocumentLoader); |
| 809 | 810 |
| 810 } // namespace blink | 811 } // namespace blink |
| OLD | NEW |