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 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 client()->dispatchDidFinishDocumentLoad(); | 417 client()->dispatchDidFinishDocumentLoad(); |
418 | 418 |
419 checkCompleted(); | 419 checkCompleted(); |
420 | 420 |
421 if (!m_frame->view()) | 421 if (!m_frame->view()) |
422 return; // We are being destroyed by something checkCompleted called. | 422 return; // We are being destroyed by something checkCompleted called. |
423 | 423 |
424 // Check if the scrollbars are really needed for the content. | 424 // Check if the scrollbars are really needed for the content. |
425 // If not, remove them, relayout, and repaint. | 425 // If not, remove them, relayout, and repaint. |
426 m_frame->view()->restoreScrollbar(); | 426 m_frame->view()->restoreScrollbar(); |
427 if (!documentLoader()->initialScrollState().didRestoreFromHistory) | 427 processFragment(m_frame->document()->url(), false); |
428 scrollToFragmentWithParentBoundary(m_frame->document()->url()); | |
429 } | 428 } |
430 | 429 |
431 static bool allDescendantsAreComplete(Frame* frame) | 430 static bool allDescendantsAreComplete(Frame* frame) |
432 { | 431 { |
433 for (Frame* child = frame->tree().firstChild(); child; child = child->tree()
.traverseNext(frame)) { | 432 for (Frame* child = frame->tree().firstChild(); child; child = child->tree()
.traverseNext(frame)) { |
434 if (child->isLoading()) | 433 if (child->isLoading()) |
435 return false; | 434 return false; |
436 } | 435 } |
437 return true; | 436 return true; |
438 } | 437 } |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
618 m_frame->eventHandler().stopAutoscroll(); | 617 m_frame->eventHandler().stopAutoscroll(); |
619 m_frame->localDOMWindow()->enqueueHashchangeEvent(oldURL, url); | 618 m_frame->localDOMWindow()->enqueueHashchangeEvent(oldURL, url); |
620 } | 619 } |
621 m_documentLoader->setIsClientRedirect(clientRedirect == ClientRedirect); | 620 m_documentLoader->setIsClientRedirect(clientRedirect == ClientRedirect); |
622 updateForSameDocumentNavigation(url, SameDocumentNavigationDefault, nullptr,
ScrollRestorationAuto, type); | 621 updateForSameDocumentNavigation(url, SameDocumentNavigationDefault, nullptr,
ScrollRestorationAuto, type); |
623 | 622 |
624 m_frame->view()->setWasScrolledByUser(false); | 623 m_frame->view()->setWasScrolledByUser(false); |
625 | 624 |
626 // We need to scroll to the fragment whether or not a hash change occurred,
since | 625 // We need to scroll to the fragment whether or not a hash change occurred,
since |
627 // the user might have scrolled since the previous navigation. | 626 // the user might have scrolled since the previous navigation. |
628 scrollToFragmentWithParentBoundary(url); | 627 processFragment(url, true); |
629 checkCompleted(); | 628 checkCompleted(); |
630 | 629 |
631 m_frame->localDOMWindow()->statePopped(stateObject ? stateObject : Serialize
dScriptValue::nullValue()); | 630 m_frame->localDOMWindow()->statePopped(stateObject ? stateObject : Serialize
dScriptValue::nullValue()); |
632 } | 631 } |
633 | 632 |
634 void FrameLoader::setReferrerForFrameRequest(ResourceRequest& request, ShouldSen
dReferrer shouldSendReferrer, Document* originDocument) | 633 void FrameLoader::setReferrerForFrameRequest(ResourceRequest& request, ShouldSen
dReferrer shouldSendReferrer, Document* originDocument) |
635 { | 634 { |
636 if (!originDocument) | 635 if (!originDocument) |
637 return; | 636 return; |
638 // FIXME: This should be an assertion, but there's some plugin code in the c
hromium repo | 637 // FIXME: This should be an assertion, but there's some plugin code in the c
hromium repo |
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1139 && loadType != FrameLoadTypeReload | 1138 && loadType != FrameLoadTypeReload |
1140 && loadType != FrameLoadTypeSame | 1139 && loadType != FrameLoadTypeSame |
1141 && loadType != FrameLoadTypeBackForward | 1140 && loadType != FrameLoadTypeBackForward |
1142 && url.hasFragmentIdentifier() | 1141 && url.hasFragmentIdentifier() |
1143 && equalIgnoringFragmentIdentifier(m_frame->document()->url(), url) | 1142 && equalIgnoringFragmentIdentifier(m_frame->document()->url(), url) |
1144 // We don't want to just scroll if a link from within a | 1143 // We don't want to just scroll if a link from within a |
1145 // frameset is trying to reload the frameset into _top. | 1144 // frameset is trying to reload the frameset into _top. |
1146 && !m_frame->document()->isFrameSet(); | 1145 && !m_frame->document()->isFrameSet(); |
1147 } | 1146 } |
1148 | 1147 |
1149 void FrameLoader::scrollToFragmentWithParentBoundary(const KURL& url) | 1148 void FrameLoader::processFragment(const KURL& url, bool isSameDocument) |
1150 { | 1149 { |
1151 FrameView* view = m_frame->view(); | 1150 FrameView* view = m_frame->view(); |
1152 if (!view) | 1151 if (!view) |
1153 return; | 1152 return; |
1154 | 1153 |
1155 // Leaking scroll position to a cross-origin ancestor would permit the so-ca
lled "framesniffing" attack. | 1154 // Leaking scroll position to a cross-origin ancestor would permit the so-ca
lled "framesniffing" attack. |
1156 RefPtrWillBeRawPtr<Frame> boundaryFrame = url.hasFragmentIdentifier() ? m_fr
ame->findUnsafeParentScrollPropagationBoundary() : 0; | 1155 RefPtrWillBeRawPtr<Frame> boundaryFrame = url.hasFragmentIdentifier() ? m_fr
ame->findUnsafeParentScrollPropagationBoundary() : 0; |
1157 | 1156 |
1158 // FIXME: Handle RemoteFrames | 1157 // FIXME: Handle RemoteFrames |
1159 if (boundaryFrame && boundaryFrame->isLocalFrame()) | 1158 if (boundaryFrame && boundaryFrame->isLocalFrame()) |
1160 toLocalFrame(boundaryFrame.get())->view()->setSafeToPropagateScrollToPar
ent(false); | 1159 toLocalFrame(boundaryFrame.get())->view()->setSafeToPropagateScrollToPar
ent(false); |
1161 | 1160 |
1162 view->scrollToFragment(url); | 1161 view->processUrlFragment(url, |
| 1162 !isSameDocument && documentLoader()->initialScrollState().didRestoreFrom
History ? |
| 1163 FrameView::UrlFragmentDontScroll : FrameView::UrlFragmentScroll); |
1163 | 1164 |
1164 if (boundaryFrame && boundaryFrame->isLocalFrame()) | 1165 if (boundaryFrame && boundaryFrame->isLocalFrame()) |
1165 toLocalFrame(boundaryFrame.get())->view()->setSafeToPropagateScrollToPar
ent(true); | 1166 toLocalFrame(boundaryFrame.get())->view()->setSafeToPropagateScrollToPar
ent(true); |
1166 } | 1167 } |
1167 | 1168 |
1168 bool FrameLoader::shouldClose() | 1169 bool FrameLoader::shouldClose() |
1169 { | 1170 { |
1170 Page* page = m_frame->page(); | 1171 Page* page = m_frame->page(); |
1171 if (!page || !page->chromeClient().canOpenBeforeUnloadConfirmPanel()) | 1172 if (!page || !page->chromeClient().canOpenBeforeUnloadConfirmPanel()) |
1172 return true; | 1173 return true; |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1444 // FIXME: We need a way to propagate insecure requests policy flags to | 1445 // FIXME: We need a way to propagate insecure requests policy flags to |
1445 // out-of-process frames. For now, we'll always use default behavior. | 1446 // out-of-process frames. For now, we'll always use default behavior. |
1446 if (!parentFrame->isLocalFrame()) | 1447 if (!parentFrame->isLocalFrame()) |
1447 return nullptr; | 1448 return nullptr; |
1448 | 1449 |
1449 ASSERT(toLocalFrame(parentFrame)->document()); | 1450 ASSERT(toLocalFrame(parentFrame)->document()); |
1450 return toLocalFrame(parentFrame)->document()->insecureNavigationsToUpgrade()
; | 1451 return toLocalFrame(parentFrame)->document()->insecureNavigationsToUpgrade()
; |
1451 } | 1452 } |
1452 | 1453 |
1453 } // namespace blink | 1454 } // namespace blink |
OLD | NEW |