author | Robert O'Callahan <robert@ocallahan.org> |
Wed, 14 Nov 2012 22:40:28 -0800 | |
changeset 113352 | 34a4de5feafe590343d1346e51f969909fbf51d4 |
parent 113351 | 3493741d8e8df82bc46a6b074ff277003cf40d61 |
child 113353 | ec87a47d93ca487b77ef43c4671ff18780071b3b |
push id | 23869 |
push user | emorley@mozilla.com |
push date | Thu, 15 Nov 2012 16:18:16 +0000 |
treeherder | mozilla-central@a37525d304d9 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | mats |
bugs | 811301 |
milestone | 19.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/layout/base/nsDocumentViewer.cpp +++ b/layout/base/nsDocumentViewer.cpp @@ -2062,17 +2062,17 @@ DocumentViewerImpl::Hide(void) // just because the window is hidden. return NS_OK; } nsCOMPtr<nsIDocShell> docShell(do_QueryReferent(mContainer)); if (docShell) { nsCOMPtr<nsILayoutHistoryState> layoutState; - mPresShell->CaptureHistoryState(getter_AddRefs(layoutState), true); + mPresShell->CaptureHistoryState(getter_AddRefs(layoutState)); } DestroyPresShell(); DestroyPresContext(); mViewManager = nullptr; mWindow = nullptr;
--- a/layout/base/nsIPresShell.h +++ b/layout/base/nsIPresShell.h @@ -109,20 +109,20 @@ typedef struct CapturingContentInfo { // capture should only be allowed during a mousedown event bool mAllowed; bool mPointerLock; bool mRetargetToElement; bool mPreventDrag; nsIContent* mContent; } CapturingContentInfo; -// 307910dd-7355-4535-84e7-6b95a4edffbe +// 0d3bfc0e-661c-4e70-933e-98efc912a75b #define NS_IPRESSHELL_IID \ -{ 0x307910dd, 0x7355, 0x4535, \ - { 0x84, 0xe7, 0x6b, 0x95, 0xa4, 0xed, 0xff, 0xbe } } +{ 0x0d3bfc0e, 0x661c, 0x4e70, \ + { 0x93, 0x3e, 0x98, 0xef, 0xc9, 0x12, 0xa7, 0x5b } } // debug VerifyReflow flags #define VERIFY_REFLOW_ON 0x01 #define VERIFY_REFLOW_NOISY 0x02 #define VERIFY_REFLOW_ALL 0x04 #define VERIFY_REFLOW_DUMP_COMMANDS 0x08 #define VERIFY_REFLOW_NOISY_RC 0x10 #define VERIFY_REFLOW_REALLY_NOISY_RC 0x20 @@ -780,17 +780,17 @@ public: * Gets the current target event frame from the PresShell */ virtual NS_HIDDEN_(already_AddRefed<nsIContent>) GetEventTargetContent(nsEvent* aEvent) = 0; /** * Get and set the history state for the current document */ - virtual NS_HIDDEN_(nsresult) CaptureHistoryState(nsILayoutHistoryState** aLayoutHistoryState, bool aLeavingPage = false) = 0; + virtual NS_HIDDEN_(nsresult) CaptureHistoryState(nsILayoutHistoryState** aLayoutHistoryState) = 0; /** * Determine if reflow is currently locked * returns true if reflow is locked, false otherwise */ bool IsReflowLocked() const { return mIsReflowing; } /**
--- a/layout/base/nsPresShell.cpp +++ b/layout/base/nsPresShell.cpp @@ -2423,37 +2423,20 @@ PresShell::EndUpdate(nsIDocument *aDocum } mFrameConstructor->EndUpdate(); } void PresShell::RestoreRootScrollPosition() { - // Restore frame state for the root scroll frame - nsCOMPtr<nsILayoutHistoryState> historyState = - mDocument->GetLayoutHistoryState(); - // Make sure we don't reenter reflow via the sync paint that happens while - // we're scrolling to our restored position. Entering reflow for the - // scrollable frame will cause it to reenter ScrollToRestoredPosition(), and - // it'll get all confused. - nsAutoScriptBlocker scriptBlocker; - ++mChangeNestCount; - - if (historyState) { - nsIFrame* scrollFrame = GetRootScrollFrame(); - if (scrollFrame) { - nsIScrollableFrame* scrollableFrame = do_QueryFrame(scrollFrame); - if (scrollableFrame) { - scrollableFrame->ScrollToRestoredPosition(); - } - } - } - - --mChangeNestCount; + nsIScrollableFrame* scrollableFrame = GetRootScrollFrameAsScrollable(); + if (scrollableFrame) { + scrollableFrame->ScrollToRestoredPosition(); + } } void PresShell::BeginLoad(nsIDocument *aDocument) { mDocumentLoading = true; } @@ -3533,17 +3516,17 @@ nsIPresShell::ClearMouseCapture(nsIFrame if (nsLayoutUtils::IsAncestorFrameCrossDoc(aFrame, capturingFrame)) { NS_RELEASE(gCaptureInfo.mContent); gCaptureInfo.mAllowed = false; } } nsresult -PresShell::CaptureHistoryState(nsILayoutHistoryState** aState, bool aLeavingPage) +PresShell::CaptureHistoryState(nsILayoutHistoryState** aState) { nsresult rv = NS_OK; NS_PRECONDITION(nullptr != aState, "null state pointer"); // We actually have to mess with the docshell here, since we want to // store the state back in it. // XXXbz this isn't really right, since this is being called in the @@ -3573,25 +3556,16 @@ PresShell::CaptureHistoryState(nsILayout } *aState = historyState; NS_IF_ADDREF(*aState); // Capture frame state for the entire frame hierarchy nsIFrame* rootFrame = mFrameConstructor->GetRootFrame(); if (!rootFrame) return NS_OK; - // Capture frame state for the root scroll frame - // Don't capture state when first creating doc element hierarchy - // As the scroll position is 0 and this will cause us to lose - // our previously saved place! - if (aLeavingPage) { - nsIFrame* scrollFrame = GetRootScrollFrame(); - if (scrollFrame) { - } - } mFrameConstructor->CaptureFrameState(rootFrame, historyState); return NS_OK; } void PresShell::UnsuppressAndInvalidate()
--- a/layout/base/nsPresShell.h +++ b/layout/base/nsPresShell.h @@ -130,17 +130,17 @@ public: uint32_t aFlags); virtual nsRectVisibility GetRectVisibility(nsIFrame *aFrame, const nsRect &aRect, nscoord aMinTwips) const; virtual NS_HIDDEN_(void) SetIgnoreFrameDestruction(bool aIgnore); virtual NS_HIDDEN_(void) NotifyDestroyingFrame(nsIFrame* aFrame); - virtual NS_HIDDEN_(nsresult) CaptureHistoryState(nsILayoutHistoryState** aLayoutHistoryState, bool aLeavingPage); + virtual NS_HIDDEN_(nsresult) CaptureHistoryState(nsILayoutHistoryState** aLayoutHistoryState); virtual NS_HIDDEN_(void) UnsuppressPainting(); virtual nsresult GetAgentStyleSheets(nsCOMArray<nsIStyleSheet>& aSheets); virtual nsresult SetAgentStyleSheets(const nsCOMArray<nsIStyleSheet>& aSheets); virtual nsresult AddOverrideStyleSheet(nsIStyleSheet *aSheet); virtual nsresult RemoveOverrideStyleSheet(nsIStyleSheet *aSheet);