| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. |
| 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
| 5 * Copyright (C) 2008 Alp Toker <alp@atoker.com> | 5 * Copyright (C) 2008 Alp Toker <alp@atoker.com> |
| 6 * Copyright (C) Research In Motion Limited 2009. All rights reserved. | 6 * Copyright (C) Research In Motion Limited 2009. All rights reserved. |
| 7 * Copyright (C) 2011 Kris Jordan <krisjordan@gmail.com> | 7 * Copyright (C) 2011 Kris Jordan <krisjordan@gmail.com> |
| 8 * Copyright (C) 2011 Google Inc. All rights reserved. | 8 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 9 * | 9 * |
| 10 * Redistribution and use in source and binary forms, with or without | 10 * Redistribution and use in source and binary forms, with or without |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 bool isBackForwardLoadType(FrameLoadType type) | 98 bool isBackForwardLoadType(FrameLoadType type) |
| 99 { | 99 { |
| 100 return type == FrameLoadTypeBackForward; | 100 return type == FrameLoadTypeBackForward; |
| 101 } | 101 } |
| 102 | 102 |
| 103 static bool needsHistoryItemRestore(FrameLoadType type) | 103 static bool needsHistoryItemRestore(FrameLoadType type) |
| 104 { | 104 { |
| 105 return type == FrameLoadTypeBackForward || type == FrameLoadTypeReload || ty
pe == FrameLoadTypeReloadFromOrigin; | 105 return type == FrameLoadTypeBackForward || type == FrameLoadTypeReload || ty
pe == FrameLoadTypeReloadFromOrigin; |
| 106 } | 106 } |
| 107 | 107 |
| 108 class FrameLoader::FrameProgressTracker { |
| 109 public: |
| 110 static PassOwnPtr<FrameProgressTracker> create(LocalFrame* frame) { return a
doptPtr(new FrameProgressTracker(frame)); } |
| 111 ~FrameProgressTracker() |
| 112 { |
| 113 ASSERT(!m_inProgress || m_frame->page()); |
| 114 if (m_inProgress) |
| 115 m_frame->page()->progress().progressCompleted(m_frame); |
| 116 } |
| 117 |
| 118 void progressStarted() |
| 119 { |
| 120 ASSERT(m_frame->page()); |
| 121 if (!m_inProgress) |
| 122 m_frame->page()->progress().progressStarted(m_frame); |
| 123 m_inProgress = true; |
| 124 } |
| 125 |
| 126 void progressCompleted() |
| 127 { |
| 128 ASSERT(m_inProgress); |
| 129 ASSERT(m_frame->page()); |
| 130 m_inProgress = false; |
| 131 m_frame->page()->progress().progressCompleted(m_frame); |
| 132 } |
| 133 |
| 134 private: |
| 135 FrameProgressTracker(LocalFrame* frame) |
| 136 : m_frame(frame) |
| 137 , m_inProgress(false) |
| 138 { |
| 139 } |
| 140 |
| 141 LocalFrame* m_frame; |
| 142 bool m_inProgress; |
| 143 }; |
| 144 |
| 108 FrameLoader::FrameLoader(LocalFrame* frame, FrameLoaderClient* client) | 145 FrameLoader::FrameLoader(LocalFrame* frame, FrameLoaderClient* client) |
| 109 : m_frame(frame) | 146 : m_frame(frame) |
| 110 , m_client(client) | 147 , m_client(client) |
| 111 , m_mixedContentChecker(frame) | 148 , m_mixedContentChecker(frame) |
| 112 , m_progressTracker(ProgressTracker::create(frame)) | 149 , m_progressTracker(FrameProgressTracker::create(m_frame)) |
| 113 , m_state(FrameStateProvisional) | 150 , m_state(FrameStateProvisional) |
| 114 , m_loadType(FrameLoadTypeStandard) | 151 , m_loadType(FrameLoadTypeStandard) |
| 115 , m_fetchContext(FrameFetchContext::create(frame)) | 152 , m_fetchContext(FrameFetchContext::create(frame)) |
| 116 , m_inStopAllLoaders(false) | 153 , m_inStopAllLoaders(false) |
| 117 , m_isComplete(false) | 154 , m_isComplete(false) |
| 118 , m_checkTimer(this, &FrameLoader::checkTimerFired) | 155 , m_checkTimer(this, &FrameLoader::checkTimerFired) |
| 119 , m_shouldCallCheckCompleted(false) | 156 , m_shouldCallCheckCompleted(false) |
| 120 , m_didAccessInitialDocument(false) | 157 , m_didAccessInitialDocument(false) |
| 121 , m_didAccessInitialDocumentTimer(this, &FrameLoader::didAccessInitialDocume
ntTimerFired) | 158 , m_didAccessInitialDocumentTimer(this, &FrameLoader::didAccessInitialDocume
ntTimerFired) |
| 122 , m_forcedSandboxFlags(SandboxNone) | 159 , m_forcedSandboxFlags(SandboxNone) |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 void FrameLoader::updateForSameDocumentNavigation(const KURL& newURL, SameDocume
ntNavigationSource sameDocumentNavigationSource, PassRefPtr<SerializedScriptValu
e> data, UpdateBackForwardListPolicy updateBackForwardList) | 566 void FrameLoader::updateForSameDocumentNavigation(const KURL& newURL, SameDocume
ntNavigationSource sameDocumentNavigationSource, PassRefPtr<SerializedScriptValu
e> data, UpdateBackForwardListPolicy updateBackForwardList) |
| 530 { | 567 { |
| 531 // Update the data source's request with the new URL to fake the URL change | 568 // Update the data source's request with the new URL to fake the URL change |
| 532 m_frame->document()->setURL(newURL); | 569 m_frame->document()->setURL(newURL); |
| 533 documentLoader()->updateForSameDocumentNavigation(newURL); | 570 documentLoader()->updateForSameDocumentNavigation(newURL); |
| 534 | 571 |
| 535 // Generate start and stop notifications only when loader is completed so th
at we | 572 // Generate start and stop notifications only when loader is completed so th
at we |
| 536 // don't fire them for fragment redirection that happens in window.onload ha
ndler. | 573 // don't fire them for fragment redirection that happens in window.onload ha
ndler. |
| 537 // See https://bugs.webkit.org/show_bug.cgi?id=31838 | 574 // See https://bugs.webkit.org/show_bug.cgi?id=31838 |
| 538 if (m_frame->document()->loadEventFinished()) | 575 if (m_frame->document()->loadEventFinished()) |
| 539 m_client->didStartLoading(NavigationWithinSameDocument); | 576 m_client->postProgressStartedNotification(NavigationWithinSameDocument); |
| 540 | 577 |
| 541 HistoryCommitType historyCommitType = updateBackForwardList == UpdateBackFor
wardList && m_currentItem ? StandardCommit : HistoryInertCommit; | 578 HistoryCommitType historyCommitType = updateBackForwardList == UpdateBackFor
wardList && m_currentItem ? StandardCommit : HistoryInertCommit; |
| 542 setHistoryItemStateForCommit(historyCommitType, sameDocumentNavigationSource
== SameDocumentNavigationHistoryApi, data); | 579 setHistoryItemStateForCommit(historyCommitType, sameDocumentNavigationSource
== SameDocumentNavigationHistoryApi, data); |
| 543 m_client->dispatchDidNavigateWithinPage(m_currentItem.get(), historyCommitTy
pe); | 580 m_client->dispatchDidNavigateWithinPage(m_currentItem.get(), historyCommitTy
pe); |
| 544 m_client->dispatchDidReceiveTitle(m_frame->document()->title()); | 581 m_client->dispatchDidReceiveTitle(m_frame->document()->title()); |
| 545 if (m_frame->document()->loadEventFinished()) | 582 if (m_frame->document()->loadEventFinished()) |
| 546 m_client->didStopLoading(); | 583 m_client->postProgressFinishedNotification(); |
| 547 } | 584 } |
| 548 | 585 |
| 549 void FrameLoader::loadInSameDocument(const KURL& url, PassRefPtr<SerializedScrip
tValue> stateObject, UpdateBackForwardListPolicy updateBackForwardList, ClientRe
directPolicy clientRedirect) | 586 void FrameLoader::loadInSameDocument(const KURL& url, PassRefPtr<SerializedScrip
tValue> stateObject, UpdateBackForwardListPolicy updateBackForwardList, ClientRe
directPolicy clientRedirect) |
| 550 { | 587 { |
| 551 // If we have a state object, we cannot also be a new navigation. | 588 // If we have a state object, we cannot also be a new navigation. |
| 552 ASSERT(!stateObject || updateBackForwardList == DoNotUpdateBackForwardList); | 589 ASSERT(!stateObject || updateBackForwardList == DoNotUpdateBackForwardList); |
| 553 | 590 |
| 554 // If we have a provisional request for a different document, a fragment scr
oll should cancel it. | 591 // If we have a provisional request for a different document, a fragment scr
oll should cancel it. |
| 555 if (m_provisionalDocumentLoader) { | 592 if (m_provisionalDocumentLoader) { |
| 556 m_provisionalDocumentLoader->stopLoading(); | 593 m_provisionalDocumentLoader->stopLoading(); |
| (...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1044 page->mainFrame()->loader().checkLoadCompleteForThisFrame(); | 1081 page->mainFrame()->loader().checkLoadCompleteForThisFrame(); |
| 1045 } | 1082 } |
| 1046 | 1083 |
| 1047 void FrameLoader::checkLoadComplete(DocumentLoader* documentLoader) | 1084 void FrameLoader::checkLoadComplete(DocumentLoader* documentLoader) |
| 1048 { | 1085 { |
| 1049 if (documentLoader) | 1086 if (documentLoader) |
| 1050 documentLoader->checkLoadComplete(); | 1087 documentLoader->checkLoadComplete(); |
| 1051 checkLoadComplete(); | 1088 checkLoadComplete(); |
| 1052 } | 1089 } |
| 1053 | 1090 |
| 1091 int FrameLoader::numPendingOrLoadingRequests(bool recurse) const |
| 1092 { |
| 1093 if (!recurse) |
| 1094 return m_frame->document()->fetcher()->requestCount(); |
| 1095 |
| 1096 int count = 0; |
| 1097 for (LocalFrame* frame = m_frame; frame; frame = frame->tree().traverseNext(
m_frame)) |
| 1098 count += frame->document()->fetcher()->requestCount(); |
| 1099 return count; |
| 1100 } |
| 1101 |
| 1054 String FrameLoader::userAgent(const KURL& url) const | 1102 String FrameLoader::userAgent(const KURL& url) const |
| 1055 { | 1103 { |
| 1056 String userAgent = m_client->userAgent(url); | 1104 String userAgent = m_client->userAgent(url); |
| 1057 InspectorInstrumentation::applyUserAgentOverride(m_frame, &userAgent); | 1105 InspectorInstrumentation::applyUserAgentOverride(m_frame, &userAgent); |
| 1058 return userAgent; | 1106 return userAgent; |
| 1059 } | 1107 } |
| 1060 | 1108 |
| 1061 void FrameLoader::frameDetached() | 1109 void FrameLoader::frameDetached() |
| 1062 { | 1110 { |
| 1063 // stopAllLoaders can detach the LocalFrame, so protect it. | 1111 // stopAllLoaders can detach the LocalFrame, so protect it. |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1425 { | 1473 { |
| 1426 SandboxFlags flags = m_forcedSandboxFlags; | 1474 SandboxFlags flags = m_forcedSandboxFlags; |
| 1427 if (LocalFrame* parentFrame = m_frame->tree().parent()) | 1475 if (LocalFrame* parentFrame = m_frame->tree().parent()) |
| 1428 flags |= parentFrame->document()->sandboxFlags(); | 1476 flags |= parentFrame->document()->sandboxFlags(); |
| 1429 if (HTMLFrameOwnerElement* ownerElement = m_frame->ownerElement()) | 1477 if (HTMLFrameOwnerElement* ownerElement = m_frame->ownerElement()) |
| 1430 flags |= ownerElement->sandboxFlags(); | 1478 flags |= ownerElement->sandboxFlags(); |
| 1431 return flags; | 1479 return flags; |
| 1432 } | 1480 } |
| 1433 | 1481 |
| 1434 } // namespace WebCore | 1482 } // namespace WebCore |
| OLD | NEW |