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 1059 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1070 RefPtr<FormState> formState = prpFormState; | 1070 RefPtr<FormState> formState = prpFormState; |
1071 bool isFormSubmission = formState; | 1071 bool isFormSubmission = formState; |
1072 | 1072 |
1073 ResourceRequest request(newURL); | 1073 ResourceRequest request(newURL); |
1074 if (!referrer.isEmpty()) { | 1074 if (!referrer.isEmpty()) { |
1075 request.setHTTPReferrer(referrer); | 1075 request.setHTTPReferrer(referrer); |
1076 RefPtr<SecurityOrigin> referrerOrigin = SecurityOrigin::createFromString
(referrer); | 1076 RefPtr<SecurityOrigin> referrerOrigin = SecurityOrigin::createFromString
(referrer); |
1077 addHTTPOriginIfNeeded(request, referrerOrigin->toString()); | 1077 addHTTPOriginIfNeeded(request, referrerOrigin->toString()); |
1078 } | 1078 } |
1079 | 1079 |
| 1080 ASSERT(newLoadType != FrameLoadTypeSame); |
| 1081 |
1080 // The search for a target frame is done earlier in the case of form submiss
ion. | 1082 // The search for a target frame is done earlier in the case of form submiss
ion. |
1081 Frame* targetFrame = isFormSubmission ? 0 : findFrameForNavigation(frameName
); | 1083 Frame* targetFrame = isFormSubmission ? 0 : findFrameForNavigation(frameName
); |
1082 if (targetFrame && targetFrame != m_frame) { | 1084 if (targetFrame && targetFrame != m_frame) { |
1083 targetFrame->loader()->loadURL(newURL, referrer, "_self", newLoadType, e
vent, formState.release()); | 1085 targetFrame->loader()->loadURL(newURL, referrer, "_self", newLoadType, e
vent, formState.release()); |
1084 return; | 1086 return; |
1085 } | 1087 } |
1086 | 1088 |
1087 if (m_pageDismissalEventBeingDispatched != NoDismissal) | 1089 if (m_pageDismissalEventBeingDispatched != NoDismissal) |
1088 return; | 1090 return; |
1089 | 1091 |
1090 NavigationAction action(request, newLoadType, isFormSubmission, event); | 1092 NavigationAction action(request, newLoadType, isFormSubmission, event); |
1091 | 1093 |
1092 if (!targetFrame && !frameName.isEmpty()) { | 1094 if (!targetFrame && !frameName.isEmpty()) { |
1093 checkNewWindowPolicyAndContinue(formState.release(), frameName, action); | 1095 checkNewWindowPolicyAndContinue(formState.release(), frameName, action); |
1094 return; | 1096 return; |
1095 } | 1097 } |
1096 | 1098 |
| 1099 bool sameURL = shouldTreatURLAsSameAsCurrent(newURL); |
1097 loadWithNavigationAction(request, action, newLoadType, formState.release(),
defaultSubstituteDataForURL(request.url())); | 1100 loadWithNavigationAction(request, action, newLoadType, formState.release(),
defaultSubstituteDataForURL(request.url())); |
| 1101 // Example of this case are sites that reload the same URL with a different
cookie |
| 1102 // driving the generated content, or a master frame with links that drive a
target |
| 1103 // frame, where the user has clicked on the same link repeatedly. |
| 1104 if (sameURL && newLoadType != FrameLoadTypeReload && newLoadType != FrameLoa
dTypeReloadFromOrigin) |
| 1105 m_loadType = FrameLoadTypeSame; |
1098 } | 1106 } |
1099 | 1107 |
1100 SubstituteData FrameLoader::defaultSubstituteDataForURL(const KURL& url) | 1108 SubstituteData FrameLoader::defaultSubstituteDataForURL(const KURL& url) |
1101 { | 1109 { |
1102 if (!shouldTreatURLAsSrcdocDocument(url)) | 1110 if (!shouldTreatURLAsSrcdocDocument(url)) |
1103 return SubstituteData(); | 1111 return SubstituteData(); |
1104 String srcdoc = m_frame->ownerElement()->fastGetAttribute(srcdocAttr); | 1112 String srcdoc = m_frame->ownerElement()->fastGetAttribute(srcdocAttr); |
1105 ASSERT(!srcdoc.isNull()); | 1113 ASSERT(!srcdoc.isNull()); |
1106 CString encodedSrcdoc = srcdoc.utf8(); | 1114 CString encodedSrcdoc = srcdoc.utf8(); |
1107 return SubstituteData(SharedBuffer::create(encodedSrcdoc.data(), encodedSrcd
oc.length()), "text/html", "UTF-8", KURL()); | 1115 return SubstituteData(SharedBuffer::create(encodedSrcdoc.data(), encodedSrcd
oc.length()), "text/html", "UTF-8", KURL()); |
(...skipping 15 matching lines...) Expand all Loading... |
1123 } | 1131 } |
1124 | 1132 |
1125 if (!request.hasSubstituteData()) | 1133 if (!request.hasSubstituteData()) |
1126 request.setSubstituteData(defaultSubstituteDataForURL(request.resourceRe
quest().url())); | 1134 request.setSubstituteData(defaultSubstituteDataForURL(request.resourceRe
quest().url())); |
1127 | 1135 |
1128 ResourceRequest& r = request.resourceRequest(); | 1136 ResourceRequest& r = request.resourceRequest(); |
1129 const KURL& unreachableURL = request.substituteData().failingURL(); | 1137 const KURL& unreachableURL = request.substituteData().failingURL(); |
1130 | 1138 |
1131 FrameLoadType type; | 1139 FrameLoadType type; |
1132 if (shouldTreatURLAsSameAsCurrent(r.url())) | 1140 if (shouldTreatURLAsSameAsCurrent(r.url())) |
1133 type = FrameLoadTypeReload; | 1141 type = FrameLoadTypeSame; |
1134 else if (shouldTreatURLAsSameAsCurrent(unreachableURL) && m_loadType == Fram
eLoadTypeReload) | 1142 else if (shouldTreatURLAsSameAsCurrent(unreachableURL) && m_loadType == Fram
eLoadTypeReload) |
1135 type = FrameLoadTypeReload; | 1143 type = FrameLoadTypeReload; |
1136 else | 1144 else |
1137 type = FrameLoadTypeStandard; | 1145 type = FrameLoadTypeStandard; |
1138 | 1146 |
1139 // When we loading alternate content for an unreachable URL that we're | 1147 // When we loading alternate content for an unreachable URL that we're |
1140 // visiting in the history list, we treat it as a reload so the history list
| 1148 // visiting in the history list, we treat it as a reload so the history list
|
1141 // is appropriately maintained. | 1149 // is appropriately maintained. |
1142 // | 1150 // |
1143 // FIXME: This seems like a dangerous overloading of the meaning of "FrameLo
adTypeReload" ... | 1151 // FIXME: This seems like a dangerous overloading of the meaning of "FrameLo
adTypeReload" ... |
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2058 { | 2066 { |
2059 // We don't do this if we are submitting a form with method other than "GET"
, explicitly reloading, | 2067 // We don't do this if we are submitting a form with method other than "GET"
, explicitly reloading, |
2060 // currently displaying a frameset, or if the URL does not have a fragment. | 2068 // currently displaying a frameset, or if the URL does not have a fragment. |
2061 // These rules were originally based on what KHTML was doing in KHTMLPart::o
penURL. | 2069 // These rules were originally based on what KHTML was doing in KHTMLPart::o
penURL. |
2062 | 2070 |
2063 // FIXME: What about load types other than Standard and Reload? | 2071 // FIXME: What about load types other than Standard and Reload? |
2064 | 2072 |
2065 return (!isFormSubmission || equalIgnoringCase(httpMethod, "GET")) | 2073 return (!isFormSubmission || equalIgnoringCase(httpMethod, "GET")) |
2066 && loadType != FrameLoadTypeReload | 2074 && loadType != FrameLoadTypeReload |
2067 && loadType != FrameLoadTypeReloadFromOrigin | 2075 && loadType != FrameLoadTypeReloadFromOrigin |
| 2076 && loadType != FrameLoadTypeSame |
2068 && !shouldReload(m_frame->document()->url(), url) | 2077 && !shouldReload(m_frame->document()->url(), url) |
2069 // We don't want to just scroll if a link from within a | 2078 // We don't want to just scroll if a link from within a |
2070 // frameset is trying to reload the frameset into _top. | 2079 // frameset is trying to reload the frameset into _top. |
2071 && !m_frame->document()->isFrameSet(); | 2080 && !m_frame->document()->isFrameSet(); |
2072 } | 2081 } |
2073 | 2082 |
2074 void FrameLoader::scrollToFragmentWithParentBoundary(const KURL& url) | 2083 void FrameLoader::scrollToFragmentWithParentBoundary(const KURL& url) |
2075 { | 2084 { |
2076 FrameView* view = m_frame->view(); | 2085 FrameView* view = m_frame->view(); |
2077 if (!view) | 2086 if (!view) |
(...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2684 FloatRect newWindowRect = DOMWindow::adjustWindowRect(page, windowRect); | 2693 FloatRect newWindowRect = DOMWindow::adjustWindowRect(page, windowRect); |
2685 | 2694 |
2686 page->chrome()->setWindowRect(newWindowRect); | 2695 page->chrome()->setWindowRect(newWindowRect); |
2687 page->chrome()->show(); | 2696 page->chrome()->show(); |
2688 | 2697 |
2689 created = true; | 2698 created = true; |
2690 return frame; | 2699 return frame; |
2691 } | 2700 } |
2692 | 2701 |
2693 } // namespace WebCore | 2702 } // namespace WebCore |
OLD | NEW |