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 | |
145 FrameLoader::FrameLoader(LocalFrame* frame, FrameLoaderClient* client) | 108 FrameLoader::FrameLoader(LocalFrame* frame, FrameLoaderClient* client) |
146 : m_frame(frame) | 109 : m_frame(frame) |
147 , m_client(client) | 110 , m_client(client) |
148 , m_mixedContentChecker(frame) | 111 , m_mixedContentChecker(frame) |
149 , m_progressTracker(FrameProgressTracker::create(m_frame)) | 112 , m_progressTracker(ProgressTracker::create(frame)) |
150 , m_state(FrameStateProvisional) | 113 , m_state(FrameStateProvisional) |
151 , m_loadType(FrameLoadTypeStandard) | 114 , m_loadType(FrameLoadTypeStandard) |
152 , m_fetchContext(FrameFetchContext::create(frame)) | 115 , m_fetchContext(FrameFetchContext::create(frame)) |
153 , m_inStopAllLoaders(false) | 116 , m_inStopAllLoaders(false) |
154 , m_isComplete(false) | 117 , m_isComplete(false) |
155 , m_checkTimer(this, &FrameLoader::checkTimerFired) | 118 , m_checkTimer(this, &FrameLoader::checkTimerFired) |
156 , m_shouldCallCheckCompleted(false) | 119 , m_shouldCallCheckCompleted(false) |
157 , m_didAccessInitialDocument(false) | 120 , m_didAccessInitialDocument(false) |
158 , m_didAccessInitialDocumentTimer(this, &FrameLoader::didAccessInitialDocume
ntTimerFired) | 121 , m_didAccessInitialDocumentTimer(this, &FrameLoader::didAccessInitialDocume
ntTimerFired) |
159 , m_forcedSandboxFlags(SandboxNone) | 122 , m_forcedSandboxFlags(SandboxNone) |
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
566 void FrameLoader::updateForSameDocumentNavigation(const KURL& newURL, SameDocume
ntNavigationSource sameDocumentNavigationSource, PassRefPtr<SerializedScriptValu
e> data, UpdateBackForwardListPolicy updateBackForwardList) | 529 void FrameLoader::updateForSameDocumentNavigation(const KURL& newURL, SameDocume
ntNavigationSource sameDocumentNavigationSource, PassRefPtr<SerializedScriptValu
e> data, UpdateBackForwardListPolicy updateBackForwardList) |
567 { | 530 { |
568 // Update the data source's request with the new URL to fake the URL change | 531 // Update the data source's request with the new URL to fake the URL change |
569 m_frame->document()->setURL(newURL); | 532 m_frame->document()->setURL(newURL); |
570 documentLoader()->updateForSameDocumentNavigation(newURL); | 533 documentLoader()->updateForSameDocumentNavigation(newURL); |
571 | 534 |
572 // Generate start and stop notifications only when loader is completed so th
at we | 535 // Generate start and stop notifications only when loader is completed so th
at we |
573 // don't fire them for fragment redirection that happens in window.onload ha
ndler. | 536 // don't fire them for fragment redirection that happens in window.onload ha
ndler. |
574 // See https://bugs.webkit.org/show_bug.cgi?id=31838 | 537 // See https://bugs.webkit.org/show_bug.cgi?id=31838 |
575 if (m_frame->document()->loadEventFinished()) | 538 if (m_frame->document()->loadEventFinished()) |
576 m_client->postProgressStartedNotification(NavigationWithinSameDocument); | 539 m_client->didStartLoading(NavigationWithinSameDocument); |
577 | 540 |
578 HistoryCommitType historyCommitType = updateBackForwardList == UpdateBackFor
wardList && m_currentItem ? StandardCommit : HistoryInertCommit; | 541 HistoryCommitType historyCommitType = updateBackForwardList == UpdateBackFor
wardList && m_currentItem ? StandardCommit : HistoryInertCommit; |
579 setHistoryItemStateForCommit(historyCommitType, sameDocumentNavigationSource
== SameDocumentNavigationHistoryApi, data); | 542 setHistoryItemStateForCommit(historyCommitType, sameDocumentNavigationSource
== SameDocumentNavigationHistoryApi, data); |
580 m_client->dispatchDidNavigateWithinPage(m_currentItem.get(), historyCommitTy
pe); | 543 m_client->dispatchDidNavigateWithinPage(m_currentItem.get(), historyCommitTy
pe); |
581 m_client->dispatchDidReceiveTitle(m_frame->document()->title()); | 544 m_client->dispatchDidReceiveTitle(m_frame->document()->title()); |
582 if (m_frame->document()->loadEventFinished()) | 545 if (m_frame->document()->loadEventFinished()) |
583 m_client->postProgressFinishedNotification(); | 546 m_client->didStopLoading(); |
584 } | 547 } |
585 | 548 |
586 void FrameLoader::loadInSameDocument(const KURL& url, PassRefPtr<SerializedScrip
tValue> stateObject, UpdateBackForwardListPolicy updateBackForwardList, ClientRe
directPolicy clientRedirect) | 549 void FrameLoader::loadInSameDocument(const KURL& url, PassRefPtr<SerializedScrip
tValue> stateObject, UpdateBackForwardListPolicy updateBackForwardList, ClientRe
directPolicy clientRedirect) |
587 { | 550 { |
588 // If we have a state object, we cannot also be a new navigation. | 551 // If we have a state object, we cannot also be a new navigation. |
589 ASSERT(!stateObject || updateBackForwardList == DoNotUpdateBackForwardList); | 552 ASSERT(!stateObject || updateBackForwardList == DoNotUpdateBackForwardList); |
590 | 553 |
591 // If we have a provisional request for a different document, a fragment scr
oll should cancel it. | 554 // If we have a provisional request for a different document, a fragment scr
oll should cancel it. |
592 if (m_provisionalDocumentLoader) { | 555 if (m_provisionalDocumentLoader) { |
593 m_provisionalDocumentLoader->stopLoading(); | 556 m_provisionalDocumentLoader->stopLoading(); |
(...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1081 page->mainFrame()->loader().checkLoadCompleteForThisFrame(); | 1044 page->mainFrame()->loader().checkLoadCompleteForThisFrame(); |
1082 } | 1045 } |
1083 | 1046 |
1084 void FrameLoader::checkLoadComplete(DocumentLoader* documentLoader) | 1047 void FrameLoader::checkLoadComplete(DocumentLoader* documentLoader) |
1085 { | 1048 { |
1086 if (documentLoader) | 1049 if (documentLoader) |
1087 documentLoader->checkLoadComplete(); | 1050 documentLoader->checkLoadComplete(); |
1088 checkLoadComplete(); | 1051 checkLoadComplete(); |
1089 } | 1052 } |
1090 | 1053 |
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 | |
1102 String FrameLoader::userAgent(const KURL& url) const | 1054 String FrameLoader::userAgent(const KURL& url) const |
1103 { | 1055 { |
1104 String userAgent = m_client->userAgent(url); | 1056 String userAgent = m_client->userAgent(url); |
1105 InspectorInstrumentation::applyUserAgentOverride(m_frame, &userAgent); | 1057 InspectorInstrumentation::applyUserAgentOverride(m_frame, &userAgent); |
1106 return userAgent; | 1058 return userAgent; |
1107 } | 1059 } |
1108 | 1060 |
1109 void FrameLoader::frameDetached() | 1061 void FrameLoader::frameDetached() |
1110 { | 1062 { |
1111 // stopAllLoaders can detach the LocalFrame, so protect it. | 1063 // stopAllLoaders can detach the LocalFrame, so protect it. |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1473 { | 1425 { |
1474 SandboxFlags flags = m_forcedSandboxFlags; | 1426 SandboxFlags flags = m_forcedSandboxFlags; |
1475 if (LocalFrame* parentFrame = m_frame->tree().parent()) | 1427 if (LocalFrame* parentFrame = m_frame->tree().parent()) |
1476 flags |= parentFrame->document()->sandboxFlags(); | 1428 flags |= parentFrame->document()->sandboxFlags(); |
1477 if (HTMLFrameOwnerElement* ownerElement = m_frame->ownerElement()) | 1429 if (HTMLFrameOwnerElement* ownerElement = m_frame->ownerElement()) |
1478 flags |= ownerElement->sandboxFlags(); | 1430 flags |= ownerElement->sandboxFlags(); |
1479 return flags; | 1431 return flags; |
1480 } | 1432 } |
1481 | 1433 |
1482 } // namespace WebCore | 1434 } // namespace WebCore |
OLD | NEW |