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 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 , m_forcedSandboxFlags(SandboxNone) | 172 , m_forcedSandboxFlags(SandboxNone) |
173 { | 173 { |
174 } | 174 } |
175 | 175 |
176 FrameLoader::~FrameLoader() | 176 FrameLoader::~FrameLoader() |
177 { | 177 { |
178 setOpener(0); | 178 setOpener(0); |
179 | 179 |
180 HashSet<Frame*>::iterator end = m_openedFrames.end(); | 180 HashSet<Frame*>::iterator end = m_openedFrames.end(); |
181 for (HashSet<Frame*>::iterator it = m_openedFrames.begin(); it != end; ++it) | 181 for (HashSet<Frame*>::iterator it = m_openedFrames.begin(); it != end; ++it) |
182 (*it)->loader()->m_opener = 0; | 182 (*it)->loader().m_opener = 0; |
183 | 183 |
184 m_client->frameLoaderDestroyed(); | 184 m_client->frameLoaderDestroyed(); |
185 } | 185 } |
186 | 186 |
187 void FrameLoader::init() | 187 void FrameLoader::init() |
188 { | 188 { |
189 // This somewhat odd set of steps gives the frame an initial empty document. | 189 // This somewhat odd set of steps gives the frame an initial empty document. |
190 m_provisionalDocumentLoader = m_client->createDocumentLoader(ResourceRequest
(KURL(ParsedURLString, emptyString())), SubstituteData()); | 190 m_provisionalDocumentLoader = m_client->createDocumentLoader(ResourceRequest
(KURL(ParsedURLString, emptyString())), SubstituteData()); |
191 m_provisionalDocumentLoader->setFrame(m_frame); | 191 m_provisionalDocumentLoader->setFrame(m_frame); |
192 m_provisionalDocumentLoader->startLoadingMainResource(); | 192 m_provisionalDocumentLoader->startLoadingMainResource(); |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 } | 384 } |
385 | 385 |
386 void FrameLoader::loadDone() | 386 void FrameLoader::loadDone() |
387 { | 387 { |
388 checkCompleted(); | 388 checkCompleted(); |
389 } | 389 } |
390 | 390 |
391 bool FrameLoader::allChildrenAreComplete() const | 391 bool FrameLoader::allChildrenAreComplete() const |
392 { | 392 { |
393 for (Frame* child = m_frame->tree().firstChild(); child; child = child->tree
().nextSibling()) { | 393 for (Frame* child = m_frame->tree().firstChild(); child; child = child->tree
().nextSibling()) { |
394 if (!child->loader()->m_isComplete) | 394 if (!child->loader().m_isComplete) |
395 return false; | 395 return false; |
396 } | 396 } |
397 return true; | 397 return true; |
398 } | 398 } |
399 | 399 |
400 bool FrameLoader::allAncestorsAreComplete() const | 400 bool FrameLoader::allAncestorsAreComplete() const |
401 { | 401 { |
402 for (Frame* ancestor = m_frame; ancestor; ancestor = ancestor->tree().parent
()) { | 402 for (Frame* ancestor = m_frame; ancestor; ancestor = ancestor->tree().parent
()) { |
403 if (!ancestor->document()->loadEventFinished()) | 403 if (!ancestor->document()->loadEventFinished()) |
404 return false; | 404 return false; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 { | 481 { |
482 // See http://www.whatwg.org/specs/web-apps/current-work/#fetching-resources | 482 // See http://www.whatwg.org/specs/web-apps/current-work/#fetching-resources |
483 // for why we walk the parent chain for srcdoc documents. | 483 // for why we walk the parent chain for srcdoc documents. |
484 Frame* frame = m_frame; | 484 Frame* frame = m_frame; |
485 while (frame->document()->isSrcdocDocument()) { | 485 while (frame->document()->isSrcdocDocument()) { |
486 frame = frame->tree().parent(); | 486 frame = frame->tree().parent(); |
487 // Srcdoc documents cannot be top-level documents, by definition, | 487 // Srcdoc documents cannot be top-level documents, by definition, |
488 // because they need to be contained in iframes with the srcdoc. | 488 // because they need to be contained in iframes with the srcdoc. |
489 ASSERT(frame); | 489 ASSERT(frame); |
490 } | 490 } |
491 return frame->loader()->m_outgoingReferrer; | 491 return frame->loader().m_outgoingReferrer; |
492 } | 492 } |
493 | 493 |
494 String FrameLoader::outgoingOrigin() const | 494 String FrameLoader::outgoingOrigin() const |
495 { | 495 { |
496 return m_frame->document()->securityOrigin()->toString(); | 496 return m_frame->document()->securityOrigin()->toString(); |
497 } | 497 } |
498 | 498 |
499 Frame* FrameLoader::opener() | 499 Frame* FrameLoader::opener() |
500 { | 500 { |
501 return m_opener; | 501 return m_opener; |
502 } | 502 } |
503 | 503 |
504 void FrameLoader::setOpener(Frame* opener) | 504 void FrameLoader::setOpener(Frame* opener) |
505 { | 505 { |
506 if (m_opener && !opener) | 506 if (m_opener && !opener) |
507 m_client->didDisownOpener(); | 507 m_client->didDisownOpener(); |
508 | 508 |
509 if (m_opener) | 509 if (m_opener) |
510 m_opener->loader()->m_openedFrames.remove(m_frame); | 510 m_opener->loader().m_openedFrames.remove(m_frame); |
511 if (opener) | 511 if (opener) |
512 opener->loader()->m_openedFrames.add(m_frame); | 512 opener->loader().m_openedFrames.add(m_frame); |
513 m_opener = opener; | 513 m_opener = opener; |
514 | 514 |
515 if (m_frame->document()) | 515 if (m_frame->document()) |
516 m_frame->document()->initSecurityContext(); | 516 m_frame->document()->initSecurityContext(); |
517 } | 517 } |
518 | 518 |
519 bool FrameLoader::allowPlugins(ReasonForCallingAllowPlugins reason) | 519 bool FrameLoader::allowPlugins(ReasonForCallingAllowPlugins reason) |
520 { | 520 { |
521 Settings* settings = m_frame->settings(); | 521 Settings* settings = m_frame->settings(); |
522 bool allowed = m_client->allowPlugins(settings && settings->arePluginsEnable
d()); | 522 bool allowed = m_client->allowPlugins(settings && settings->arePluginsEnable
d()); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
601 } | 601 } |
602 | 602 |
603 void FrameLoader::completed() | 603 void FrameLoader::completed() |
604 { | 604 { |
605 RefPtr<Frame> protect(m_frame); | 605 RefPtr<Frame> protect(m_frame); |
606 | 606 |
607 for (Frame* descendant = m_frame->tree().traverseNext(m_frame); descendant;
descendant = descendant->tree().traverseNext(m_frame)) | 607 for (Frame* descendant = m_frame->tree().traverseNext(m_frame); descendant;
descendant = descendant->tree().traverseNext(m_frame)) |
608 descendant->navigationScheduler().startTimer(); | 608 descendant->navigationScheduler().startTimer(); |
609 | 609 |
610 if (Frame* parent = m_frame->tree().parent()) | 610 if (Frame* parent = m_frame->tree().parent()) |
611 parent->loader()->checkCompleted(); | 611 parent->loader().checkCompleted(); |
612 | 612 |
613 if (m_frame->view()) | 613 if (m_frame->view()) |
614 m_frame->view()->maintainScrollPositionAtAnchor(0); | 614 m_frame->view()->maintainScrollPositionAtAnchor(0); |
615 } | 615 } |
616 | 616 |
617 void FrameLoader::started() | 617 void FrameLoader::started() |
618 { | 618 { |
619 for (Frame* frame = m_frame; frame; frame = frame->tree().parent()) | 619 for (Frame* frame = m_frame; frame; frame = frame->tree().parent()) |
620 frame->loader()->m_isComplete = false; | 620 frame->loader().m_isComplete = false; |
621 } | 621 } |
622 | 622 |
623 void FrameLoader::prepareForHistoryNavigation() | 623 void FrameLoader::prepareForHistoryNavigation() |
624 { | 624 { |
625 // If there is no currentItem, but we still want to engage in | 625 // If there is no currentItem, but we still want to engage in |
626 // history navigation we need to manufacture one, and update | 626 // history navigation we need to manufacture one, and update |
627 // the state machine of this frame to impersonate having | 627 // the state machine of this frame to impersonate having |
628 // loaded it. | 628 // loaded it. |
629 RefPtr<HistoryItem> currentItem = history()->currentItem(); | 629 RefPtr<HistoryItem> currentItem = history()->currentItem(); |
630 if (!currentItem) { | 630 if (!currentItem) { |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
726 if (m_inStopAllLoaders) | 726 if (m_inStopAllLoaders) |
727 return; | 727 return; |
728 | 728 |
729 FrameLoadRequest request(passedRequest); | 729 FrameLoadRequest request(passedRequest); |
730 if (!prepareRequestForThisFrame(request)) | 730 if (!prepareRequestForThisFrame(request)) |
731 return; | 731 return; |
732 | 732 |
733 RefPtr<Frame> targetFrame = findFrameForNavigation(request.frameName(), requ
est.formState() ? request.formState()->sourceDocument() : m_frame->document()); | 733 RefPtr<Frame> targetFrame = findFrameForNavigation(request.frameName(), requ
est.formState() ? request.formState()->sourceDocument() : m_frame->document()); |
734 if (targetFrame && targetFrame != m_frame) { | 734 if (targetFrame && targetFrame != m_frame) { |
735 request.setFrameName("_self"); | 735 request.setFrameName("_self"); |
736 targetFrame->loader()->load(request); | 736 targetFrame->loader().load(request); |
737 if (Page* page = targetFrame->page()) | 737 if (Page* page = targetFrame->page()) |
738 page->chrome().focus(); | 738 page->chrome().focus(); |
739 return; | 739 return; |
740 } | 740 } |
741 | 741 |
742 FrameLoadType newLoadType = determineFrameLoadType(request); | 742 FrameLoadType newLoadType = determineFrameLoadType(request); |
743 NavigationAction action(request.resourceRequest(), newLoadType, request.form
State(), request.triggeringEvent()); | 743 NavigationAction action(request.resourceRequest(), newLoadType, request.form
State(), request.triggeringEvent()); |
744 if (shouldOpenInNewWindow(targetFrame.get(), request, action)) { | 744 if (shouldOpenInNewWindow(targetFrame.get(), request, action)) { |
745 TemporaryChange<bool> changeOpener(m_suppressOpenerInNewFrame, request.s
houldSendReferrer() == NeverSendReferrer); | 745 TemporaryChange<bool> changeOpener(m_suppressOpenerInNewFrame, request.s
houldSendReferrer() == NeverSendReferrer); |
746 checkNewWindowPolicyAndContinue(request.formState(), request.frameName()
, action); | 746 checkNewWindowPolicyAndContinue(request.formState(), request.frameName()
, action); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
812 if (m_inStopAllLoaders) | 812 if (m_inStopAllLoaders) |
813 return; | 813 return; |
814 | 814 |
815 // Calling stopLoading() on the provisional document loader can blow away | 815 // Calling stopLoading() on the provisional document loader can blow away |
816 // the frame from underneath. | 816 // the frame from underneath. |
817 RefPtr<Frame> protect(m_frame); | 817 RefPtr<Frame> protect(m_frame); |
818 | 818 |
819 m_inStopAllLoaders = true; | 819 m_inStopAllLoaders = true; |
820 | 820 |
821 for (RefPtr<Frame> child = m_frame->tree().firstChild(); child; child = chil
d->tree().nextSibling()) | 821 for (RefPtr<Frame> child = m_frame->tree().firstChild(); child; child = chil
d->tree().nextSibling()) |
822 child->loader()->stopAllLoaders(); | 822 child->loader().stopAllLoaders(); |
823 if (m_provisionalDocumentLoader) | 823 if (m_provisionalDocumentLoader) |
824 m_provisionalDocumentLoader->stopLoading(); | 824 m_provisionalDocumentLoader->stopLoading(); |
825 if (m_documentLoader) | 825 if (m_documentLoader) |
826 m_documentLoader->stopLoading(); | 826 m_documentLoader->stopLoading(); |
827 | 827 |
828 if (m_provisionalDocumentLoader) | 828 if (m_provisionalDocumentLoader) |
829 m_provisionalDocumentLoader->detachFromFrame(); | 829 m_provisionalDocumentLoader->detachFromFrame(); |
830 m_provisionalDocumentLoader = 0; | 830 m_provisionalDocumentLoader = 0; |
831 | 831 |
832 m_checkTimer.stop(); | 832 m_checkTimer.stop(); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
923 } | 923 } |
924 started(); | 924 started(); |
925 } | 925 } |
926 | 926 |
927 void FrameLoader::closeOldDataSources() | 927 void FrameLoader::closeOldDataSources() |
928 { | 928 { |
929 // FIXME: Is it important for this traversal to be postorder instead of preo
rder? | 929 // FIXME: Is it important for this traversal to be postorder instead of preo
rder? |
930 // If so, add helpers for postorder traversal, and use them. If not, then le
ts not | 930 // If so, add helpers for postorder traversal, and use them. If not, then le
ts not |
931 // use a recursive algorithm here. | 931 // use a recursive algorithm here. |
932 for (Frame* child = m_frame->tree().firstChild(); child; child = child->tree
().nextSibling()) | 932 for (Frame* child = m_frame->tree().firstChild(); child; child = child->tree
().nextSibling()) |
933 child->loader()->closeOldDataSources(); | 933 child->loader().closeOldDataSources(); |
934 | 934 |
935 if (m_documentLoader) | 935 if (m_documentLoader) |
936 m_client->dispatchWillClose(); | 936 m_client->dispatchWillClose(); |
937 } | 937 } |
938 | 938 |
939 bool FrameLoader::isLoadingMainFrame() const | 939 bool FrameLoader::isLoadingMainFrame() const |
940 { | 940 { |
941 Page* page = m_frame->page(); | 941 Page* page = m_frame->page(); |
942 return page && m_frame == page->mainFrame(); | 942 return page && m_frame == page->mainFrame(); |
943 } | 943 } |
944 | 944 |
945 bool FrameLoader::subframeIsLoading() const | 945 bool FrameLoader::subframeIsLoading() const |
946 { | 946 { |
947 // It's most likely that the last added frame is the last to load so we walk
backwards. | 947 // It's most likely that the last added frame is the last to load so we walk
backwards. |
948 for (Frame* child = m_frame->tree().lastChild(); child; child = child->tree(
).previousSibling()) { | 948 for (Frame* child = m_frame->tree().lastChild(); child; child = child->tree(
).previousSibling()) { |
949 FrameLoader* childLoader = child->loader(); | 949 const FrameLoader& childLoader = child->loader(); |
950 DocumentLoader* documentLoader = childLoader->documentLoader(); | 950 DocumentLoader* documentLoader = childLoader.documentLoader(); |
951 if (documentLoader && documentLoader->isLoadingInAPISense()) | 951 if (documentLoader && documentLoader->isLoadingInAPISense()) |
952 return true; | 952 return true; |
953 documentLoader = childLoader->provisionalDocumentLoader(); | 953 documentLoader = childLoader.provisionalDocumentLoader(); |
954 if (documentLoader && documentLoader->isLoadingInAPISense()) | 954 if (documentLoader && documentLoader->isLoadingInAPISense()) |
955 return true; | 955 return true; |
956 documentLoader = childLoader->policyDocumentLoader(); | 956 documentLoader = childLoader.policyDocumentLoader(); |
957 if (documentLoader) | 957 if (documentLoader) |
958 return true; | 958 return true; |
959 } | 959 } |
960 return false; | 960 return false; |
961 } | 961 } |
962 | 962 |
963 FrameLoadType FrameLoader::loadType() const | 963 FrameLoadType FrameLoader::loadType() const |
964 { | 964 { |
965 return m_loadType; | 965 return m_loadType; |
966 } | 966 } |
967 | 967 |
968 CachePolicy FrameLoader::subresourceCachePolicy() const | 968 CachePolicy FrameLoader::subresourceCachePolicy() const |
969 { | 969 { |
970 if (m_frame->document()->loadEventFinished()) | 970 if (m_frame->document()->loadEventFinished()) |
971 return CachePolicyVerify; | 971 return CachePolicyVerify; |
972 | 972 |
973 if (m_loadType == FrameLoadTypeReloadFromOrigin) | 973 if (m_loadType == FrameLoadTypeReloadFromOrigin) |
974 return CachePolicyReload; | 974 return CachePolicyReload; |
975 | 975 |
976 if (Frame* parentFrame = m_frame->tree().parent()) { | 976 if (Frame* parentFrame = m_frame->tree().parent()) { |
977 CachePolicy parentCachePolicy = parentFrame->loader()->subresourceCacheP
olicy(); | 977 CachePolicy parentCachePolicy = parentFrame->loader().subresourceCachePo
licy(); |
978 if (parentCachePolicy != CachePolicyVerify) | 978 if (parentCachePolicy != CachePolicyVerify) |
979 return parentCachePolicy; | 979 return parentCachePolicy; |
980 } | 980 } |
981 | 981 |
982 if (m_loadType == FrameLoadTypeReload) | 982 if (m_loadType == FrameLoadTypeReload) |
983 return CachePolicyRevalidate; | 983 return CachePolicyRevalidate; |
984 | 984 |
985 const ResourceRequest& request(documentLoader()->request()); | 985 const ResourceRequest& request(documentLoader()->request()); |
986 | 986 |
987 if (request.cachePolicy() == ReturnCacheDataElseLoad) | 987 if (request.cachePolicy() == ReturnCacheDataElseLoad) |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1047 | 1047 |
1048 void FrameLoader::detachChildren() | 1048 void FrameLoader::detachChildren() |
1049 { | 1049 { |
1050 typedef Vector<RefPtr<Frame> > FrameVector; | 1050 typedef Vector<RefPtr<Frame> > FrameVector; |
1051 FrameVector childrenToDetach; | 1051 FrameVector childrenToDetach; |
1052 childrenToDetach.reserveCapacity(m_frame->tree().childCount()); | 1052 childrenToDetach.reserveCapacity(m_frame->tree().childCount()); |
1053 for (Frame* child = m_frame->tree().lastChild(); child; child = child->tree(
).previousSibling()) | 1053 for (Frame* child = m_frame->tree().lastChild(); child; child = child->tree(
).previousSibling()) |
1054 childrenToDetach.append(child); | 1054 childrenToDetach.append(child); |
1055 FrameVector::iterator end = childrenToDetach.end(); | 1055 FrameVector::iterator end = childrenToDetach.end(); |
1056 for (FrameVector::iterator it = childrenToDetach.begin(); it != end; it++) | 1056 for (FrameVector::iterator it = childrenToDetach.begin(); it != end; it++) |
1057 (*it)->loader()->detachFromParent(); | 1057 (*it)->loader().detachFromParent(); |
1058 } | 1058 } |
1059 | 1059 |
1060 void FrameLoader::closeAndRemoveChild(Frame* child) | 1060 void FrameLoader::closeAndRemoveChild(Frame* child) |
1061 { | 1061 { |
1062 child->tree().detachFromParent(); | 1062 child->tree().detachFromParent(); |
1063 | 1063 |
1064 child->setView(0); | 1064 child->setView(0); |
1065 if (child->ownerElement() && child->page()) | 1065 if (child->ownerElement() && child->page()) |
1066 child->page()->decrementSubframeCount(); | 1066 child->page()->decrementSubframeCount(); |
1067 child->willDetachPage(); | 1067 child->willDetachPage(); |
1068 child->detachFromPage(); | 1068 child->detachFromPage(); |
1069 | 1069 |
1070 m_frame->tree().removeChild(child); | 1070 m_frame->tree().removeChild(child); |
1071 } | 1071 } |
1072 | 1072 |
1073 // Called every time a resource is completely loaded or an error is received. | 1073 // Called every time a resource is completely loaded or an error is received. |
1074 void FrameLoader::checkLoadComplete() | 1074 void FrameLoader::checkLoadComplete() |
1075 { | 1075 { |
1076 ASSERT(m_client->hasWebView()); | 1076 ASSERT(m_client->hasWebView()); |
1077 | 1077 |
1078 // FIXME: Always traversing the entire frame tree is a bit inefficient, but | 1078 // FIXME: Always traversing the entire frame tree is a bit inefficient, but |
1079 // is currently needed in order to null out the previous history item for al
l frames. | 1079 // is currently needed in order to null out the previous history item for al
l frames. |
1080 if (Page* page = m_frame->page()) { | 1080 if (Page* page = m_frame->page()) { |
1081 Vector<RefPtr<Frame>, 10> frames; | 1081 Vector<RefPtr<Frame>, 10> frames; |
1082 for (RefPtr<Frame> frame = page->mainFrame(); frame; frame = frame->tree
().traverseNext()) | 1082 for (RefPtr<Frame> frame = page->mainFrame(); frame; frame = frame->tree
().traverseNext()) |
1083 frames.append(frame); | 1083 frames.append(frame); |
1084 // To process children before their parents, iterate the vector backward
s. | 1084 // To process children before their parents, iterate the vector backward
s. |
1085 for (size_t i = frames.size(); i; --i) | 1085 for (size_t i = frames.size(); i; --i) |
1086 frames[i - 1]->loader()->checkLoadCompleteForThisFrame(); | 1086 frames[i - 1]->loader().checkLoadCompleteForThisFrame(); |
1087 } | 1087 } |
1088 } | 1088 } |
1089 | 1089 |
1090 void FrameLoader::checkLoadComplete(DocumentLoader* documentLoader) | 1090 void FrameLoader::checkLoadComplete(DocumentLoader* documentLoader) |
1091 { | 1091 { |
1092 if (documentLoader) | 1092 if (documentLoader) |
1093 documentLoader->checkLoadComplete(); | 1093 documentLoader->checkLoadComplete(); |
1094 checkLoadComplete(); | 1094 checkLoadComplete(); |
1095 } | 1095 } |
1096 | 1096 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1135 InspectorInstrumentation::frameDetachedFromParent(m_frame); | 1135 InspectorInstrumentation::frameDetachedFromParent(m_frame); |
1136 | 1136 |
1137 if (m_documentLoader) | 1137 if (m_documentLoader) |
1138 m_documentLoader->detachFromFrame(); | 1138 m_documentLoader->detachFromFrame(); |
1139 m_documentLoader = 0; | 1139 m_documentLoader = 0; |
1140 m_client->detachedFromParent(); | 1140 m_client->detachedFromParent(); |
1141 | 1141 |
1142 m_progressTracker.clear(); | 1142 m_progressTracker.clear(); |
1143 | 1143 |
1144 if (Frame* parent = m_frame->tree().parent()) { | 1144 if (Frame* parent = m_frame->tree().parent()) { |
1145 parent->loader()->closeAndRemoveChild(m_frame); | 1145 parent->loader().closeAndRemoveChild(m_frame); |
1146 parent->loader()->scheduleCheckCompleted(); | 1146 parent->loader().scheduleCheckCompleted(); |
1147 } else { | 1147 } else { |
1148 m_frame->setView(0); | 1148 m_frame->setView(0); |
1149 m_frame->willDetachPage(); | 1149 m_frame->willDetachPage(); |
1150 m_frame->detachFromPage(); | 1150 m_frame->detachFromPage(); |
1151 } | 1151 } |
1152 } | 1152 } |
1153 | 1153 |
1154 void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request) | 1154 void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request) |
1155 { | 1155 { |
1156 bool isMainResource = (request.targetType() == ResourceRequest::TargetIsMain
Frame) || (request.targetType() == ResourceRequest::TargetIsSubframe); | 1156 bool isMainResource = (request.targetType() == ResourceRequest::TargetIsMain
Frame) || (request.targetType() == ResourceRequest::TargetIsSubframe); |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1342 replacesCurrentHistoryItem = true; | 1342 replacesCurrentHistoryItem = true; |
1343 } | 1343 } |
1344 | 1344 |
1345 m_policyDocumentLoader = m_client->createDocumentLoader(request, substituteD
ata.isValid() ? substituteData : defaultSubstituteDataForURL(request.url())); | 1345 m_policyDocumentLoader = m_client->createDocumentLoader(request, substituteD
ata.isValid() ? substituteData : defaultSubstituteDataForURL(request.url())); |
1346 m_policyDocumentLoader->setFrame(m_frame); | 1346 m_policyDocumentLoader->setFrame(m_frame); |
1347 m_policyDocumentLoader->setTriggeringAction(action); | 1347 m_policyDocumentLoader->setTriggeringAction(action); |
1348 m_policyDocumentLoader->setReplacesCurrentHistoryItem(replacesCurrentHistory
Item); | 1348 m_policyDocumentLoader->setReplacesCurrentHistoryItem(replacesCurrentHistory
Item); |
1349 m_policyDocumentLoader->setIsClientRedirect(m_startingClientRedirect); | 1349 m_policyDocumentLoader->setIsClientRedirect(m_startingClientRedirect); |
1350 | 1350 |
1351 if (Frame* parent = m_frame->tree().parent()) | 1351 if (Frame* parent = m_frame->tree().parent()) |
1352 m_policyDocumentLoader->setOverrideEncoding(parent->loader()->documentLo
ader()->overrideEncoding()); | 1352 m_policyDocumentLoader->setOverrideEncoding(parent->loader().documentLoa
der()->overrideEncoding()); |
1353 else if (!overrideEncoding.isEmpty()) | 1353 else if (!overrideEncoding.isEmpty()) |
1354 m_policyDocumentLoader->setOverrideEncoding(overrideEncoding); | 1354 m_policyDocumentLoader->setOverrideEncoding(overrideEncoding); |
1355 else if (m_documentLoader) | 1355 else if (m_documentLoader) |
1356 m_policyDocumentLoader->setOverrideEncoding(m_documentLoader->overrideEn
coding()); | 1356 m_policyDocumentLoader->setOverrideEncoding(m_documentLoader->overrideEn
coding()); |
1357 | 1357 |
1358 // stopAllLoaders can detach the Frame, so protect it. | 1358 // stopAllLoaders can detach the Frame, so protect it. |
1359 RefPtr<Frame> protect(m_frame); | 1359 RefPtr<Frame> protect(m_frame); |
1360 if ((!m_policyDocumentLoader->shouldContinueForNavigationPolicy(request, Doc
umentLoader::PolicyCheckStandard) || !shouldClose()) && m_policyDocumentLoader)
{ | 1360 if ((!m_policyDocumentLoader->shouldContinueForNavigationPolicy(request, Doc
umentLoader::PolicyCheckStandard) || !shouldClose()) && m_policyDocumentLoader)
{ |
1361 m_policyDocumentLoader->detachFromFrame(); | 1361 m_policyDocumentLoader->detachFromFrame(); |
1362 m_policyDocumentLoader = 0; | 1362 m_policyDocumentLoader = 0; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1423 return; | 1423 return; |
1424 mainFrame = newPage->mainFrame(); | 1424 mainFrame = newPage->mainFrame(); |
1425 } | 1425 } |
1426 | 1426 |
1427 if (frameName != "_blank") | 1427 if (frameName != "_blank") |
1428 mainFrame->tree().setName(frameName); | 1428 mainFrame->tree().setName(frameName); |
1429 | 1429 |
1430 mainFrame->page()->setOpenedByDOM(); | 1430 mainFrame->page()->setOpenedByDOM(); |
1431 mainFrame->page()->chrome().show(navigationPolicy); | 1431 mainFrame->page()->chrome().show(navigationPolicy); |
1432 if (!m_suppressOpenerInNewFrame) { | 1432 if (!m_suppressOpenerInNewFrame) { |
1433 mainFrame->loader()->setOpener(frame.get()); | 1433 mainFrame->loader().setOpener(frame.get()); |
1434 mainFrame->document()->setReferrerPolicy(frame->document()->referrerPoli
cy()); | 1434 mainFrame->document()->setReferrerPolicy(frame->document()->referrerPoli
cy()); |
1435 } | 1435 } |
1436 | 1436 |
1437 // FIXME: We can't just send our NavigationAction to the new FrameLoader's l
oadWithNavigationAction(), we need to | 1437 // FIXME: We can't just send our NavigationAction to the new FrameLoader's l
oadWithNavigationAction(), we need to |
1438 // create a new one with a default NavigationType and no triggering event. W
e should figure out why. | 1438 // create a new one with a default NavigationType and no triggering event. W
e should figure out why. |
1439 mainFrame->loader()->loadWithNavigationAction(action.resourceRequest(), Navi
gationAction(action.resourceRequest()), FrameLoadTypeStandard, formState, Substi
tuteData()); | 1439 mainFrame->loader().loadWithNavigationAction(action.resourceRequest(), Navig
ationAction(action.resourceRequest()), FrameLoadTypeStandard, formState, Substit
uteData()); |
1440 } | 1440 } |
1441 | 1441 |
1442 void FrameLoader::applyUserAgent(ResourceRequest& request) | 1442 void FrameLoader::applyUserAgent(ResourceRequest& request) |
1443 { | 1443 { |
1444 String userAgent = this->userAgent(request.url()); | 1444 String userAgent = this->userAgent(request.url()); |
1445 ASSERT(!userAgent.isNull()); | 1445 ASSERT(!userAgent.isNull()); |
1446 request.setHTTPUserAgent(userAgent); | 1446 request.setHTTPUserAgent(userAgent); |
1447 } | 1447 } |
1448 | 1448 |
1449 bool FrameLoader::shouldInterruptLoadForXFrameOptions(const String& content, con
st KURL& url, unsigned long requestIdentifier) | 1449 bool FrameLoader::shouldInterruptLoadForXFrameOptions(const String& content, con
st KURL& url, unsigned long requestIdentifier) |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1600 { | 1600 { |
1601 SandboxFlags flags = m_forcedSandboxFlags; | 1601 SandboxFlags flags = m_forcedSandboxFlags; |
1602 if (Frame* parentFrame = m_frame->tree().parent()) | 1602 if (Frame* parentFrame = m_frame->tree().parent()) |
1603 flags |= parentFrame->document()->sandboxFlags(); | 1603 flags |= parentFrame->document()->sandboxFlags(); |
1604 if (HTMLFrameOwnerElement* ownerElement = m_frame->ownerElement()) | 1604 if (HTMLFrameOwnerElement* ownerElement = m_frame->ownerElement()) |
1605 flags |= ownerElement->sandboxFlags(); | 1605 flags |= ownerElement->sandboxFlags(); |
1606 return flags; | 1606 return flags; |
1607 } | 1607 } |
1608 | 1608 |
1609 } // namespace WebCore | 1609 } // namespace WebCore |
OLD | NEW |