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 921 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
932 if (document->hasActiveParser()) | 932 if (document->hasActiveParser()) |
933 return false; | 933 return false; |
934 return true; | 934 return true; |
935 } | 935 } |
936 | 936 |
937 bool FrameLoader::checkLoadCompleteForThisFrame() | 937 bool FrameLoader::checkLoadCompleteForThisFrame() |
938 { | 938 { |
939 ASSERT(client()->hasWebView()); | 939 ASSERT(client()->hasWebView()); |
940 RefPtr<LocalFrame> protect(m_frame); | 940 RefPtr<LocalFrame> protect(m_frame); |
941 | 941 |
| 942 bool allChildrenAreDoneLoading = true; |
| 943 for (LocalFrame* child = m_frame->tree().firstChild(); child; child = child-
>tree().nextSibling()) |
| 944 allChildrenAreDoneLoading &= child->loader().checkLoadCompleteForThisFra
me(); |
| 945 |
942 if (m_state == FrameStateProvisional && m_provisionalDocumentLoader) { | 946 if (m_state == FrameStateProvisional && m_provisionalDocumentLoader) { |
943 const ResourceError& error = m_provisionalDocumentLoader->mainDocumentEr
ror(); | 947 const ResourceError& error = m_provisionalDocumentLoader->mainDocumentEr
ror(); |
944 if (error.isNull()) | 948 if (error.isNull()) |
945 return false; | 949 return false; |
946 RefPtr<DocumentLoader> loader = m_provisionalDocumentLoader; | 950 RefPtr<DocumentLoader> loader = m_provisionalDocumentLoader; |
947 client()->dispatchDidFailProvisionalLoad(error); | 951 client()->dispatchDidFailProvisionalLoad(error); |
948 if (loader != m_provisionalDocumentLoader) | 952 if (loader != m_provisionalDocumentLoader) |
949 return false; | 953 return false; |
950 m_provisionalDocumentLoader->detachFromFrame(); | 954 m_provisionalDocumentLoader->detachFromFrame(); |
951 m_provisionalDocumentLoader = nullptr; | 955 m_provisionalDocumentLoader = nullptr; |
952 m_progressTracker->progressCompleted(); | 956 m_progressTracker->progressCompleted(); |
953 m_state = FrameStateComplete; | 957 m_state = FrameStateComplete; |
954 return true; | 958 return true; |
955 } | 959 } |
956 | 960 |
957 bool allChildrenAreDoneLoading = true; | |
958 for (LocalFrame* child = m_frame->tree().firstChild(); child; child = child-
>tree().nextSibling()) | |
959 allChildrenAreDoneLoading &= child->loader().checkLoadCompleteForThisFra
me(); | |
960 if (!allChildrenAreDoneLoading) | 961 if (!allChildrenAreDoneLoading) |
961 return false; | 962 return false; |
962 | 963 |
963 if (m_state == FrameStateComplete) | 964 if (m_state == FrameStateComplete) |
964 return true; | 965 return true; |
965 if (m_provisionalDocumentLoader || !m_documentLoader) | 966 if (m_provisionalDocumentLoader || !m_documentLoader) |
966 return false; | 967 return false; |
967 if (!isDocumentDoneLoading(m_frame->document()) && !m_inStopAllLoaders) | 968 if (!isDocumentDoneLoading(m_frame->document()) && !m_inStopAllLoaders) |
968 return false; | 969 return false; |
969 | 970 |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1284 m_policyDocumentLoader->setOverrideEncoding(m_documentLoader->overrideEn
coding()); | 1285 m_policyDocumentLoader->setOverrideEncoding(m_documentLoader->overrideEn
coding()); |
1285 | 1286 |
1286 // stopAllLoaders can detach the LocalFrame, so protect it. | 1287 // stopAllLoaders can detach the LocalFrame, so protect it. |
1287 RefPtr<LocalFrame> protect(m_frame); | 1288 RefPtr<LocalFrame> protect(m_frame); |
1288 if ((!m_policyDocumentLoader->shouldContinueForNavigationPolicy(request) ||
!shouldClose()) && m_policyDocumentLoader) { | 1289 if ((!m_policyDocumentLoader->shouldContinueForNavigationPolicy(request) ||
!shouldClose()) && m_policyDocumentLoader) { |
1289 m_policyDocumentLoader->detachFromFrame(); | 1290 m_policyDocumentLoader->detachFromFrame(); |
1290 m_policyDocumentLoader = nullptr; | 1291 m_policyDocumentLoader = nullptr; |
1291 return; | 1292 return; |
1292 } | 1293 } |
1293 | 1294 |
1294 // A new navigation is in progress, so don't clear the history's provisional
item. | 1295 if (m_provisionalDocumentLoader) { |
1295 stopAllLoaders(); | 1296 m_provisionalDocumentLoader->stopLoading(); |
| 1297 if (m_provisionalDocumentLoader) |
| 1298 m_provisionalDocumentLoader->detachFromFrame(); |
| 1299 m_provisionalDocumentLoader = nullptr; |
| 1300 } |
| 1301 m_checkTimer.stop(); |
1296 | 1302 |
1297 // <rdar://problem/6250856> - In certain circumstances on pages with multipl
e frames, stopAllLoaders() | 1303 // <rdar://problem/6250856> - In certain circumstances on pages with multipl
e frames, stopAllLoaders() |
1298 // might detach the current FrameLoader, in which case we should bail on thi
s newly defunct load. | 1304 // might detach the current FrameLoader, in which case we should bail on thi
s newly defunct load. |
1299 if (!m_frame->page() || !m_policyDocumentLoader) | 1305 if (!m_frame->page() || !m_policyDocumentLoader) |
1300 return; | 1306 return; |
1301 | 1307 |
1302 if (isLoadingMainFrame()) | 1308 if (isLoadingMainFrame()) |
1303 m_frame->page()->inspectorController().resume(); | 1309 m_frame->page()->inspectorController().resume(); |
1304 m_frame->navigationScheduler().cancel(); | 1310 m_frame->navigationScheduler().cancel(); |
1305 | 1311 |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1439 { | 1445 { |
1440 SandboxFlags flags = m_forcedSandboxFlags; | 1446 SandboxFlags flags = m_forcedSandboxFlags; |
1441 if (LocalFrame* parentFrame = m_frame->tree().parent()) | 1447 if (LocalFrame* parentFrame = m_frame->tree().parent()) |
1442 flags |= parentFrame->document()->sandboxFlags(); | 1448 flags |= parentFrame->document()->sandboxFlags(); |
1443 if (FrameOwner* frameOwner = m_frame->ownerElement()) | 1449 if (FrameOwner* frameOwner = m_frame->ownerElement()) |
1444 flags |= frameOwner->sandboxFlags(); | 1450 flags |= frameOwner->sandboxFlags(); |
1445 return flags; | 1451 return flags; |
1446 } | 1452 } |
1447 | 1453 |
1448 } // namespace WebCore | 1454 } // namespace WebCore |
OLD | NEW |