author | Neil Rashbrook <neil@parkwaycc.co.uk> |
Fri, 10 Jan 2014 08:35:46 +0000 | |
changeset 162915 | c64703059abd6a0658e27db44ff2ad669516d96c |
parent 162914 | 6e5d4c425fccf24c0d80b1591af5469aa087beb3 |
child 162916 | fbc1d2e697f19fc98173112b36c6c77df92412f9 |
push id | 25975 |
push user | ryanvm@gmail.com |
push date | Fri, 10 Jan 2014 19:46:47 +0000 |
treeherder | autoland@e89afc241513 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | smaug |
bugs | 952087 |
milestone | 29.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/content/base/src/nsDocument.cpp +++ b/content/base/src/nsDocument.cpp @@ -8813,16 +8813,20 @@ nsDocument::SetScrollToRef(nsIURI *aDocu mScrollToRef = Substring(start, end); } } void nsDocument::ScrollToRef() { if (mScrolledToRefAlready) { + nsCOMPtr<nsIPresShell> shell = GetShell(); + if (shell) { + shell->ScrollToAnchor(); + } return; } if (mScrollToRef.IsEmpty()) { return; } char* tmpstr = ToNewCString(mScrollToRef);
--- a/layout/base/nsDocumentViewer.cpp +++ b/layout/base/nsDocumentViewer.cpp @@ -1020,25 +1020,30 @@ nsDocumentViewer::LoadComplete(nsresult bool isInUnload; if (docShell && NS_SUCCEEDED(docShell->GetIsInUnload(&isInUnload)) && !isInUnload) { mDocument->OnPageShow(restoring, nullptr); } } } - // Now that the document has loaded, we can tell the presshell - // to unsuppress painting. - if (mPresShell && !mStopped) { - nsCOMPtr<nsIPresShell> shellDeathGrip(mPresShell); - mPresShell->UnsuppressPainting(); - // mPresShell could have been removed now, see bug 378682/421432 + if (!mStopped) { + if (mDocument) { + mDocument->ScrollToRef(); + } + + // Now that the document has loaded, we can tell the presshell + // to unsuppress painting. if (mPresShell) { - mPresShell->ScrollToAnchor(); - mPresShell->LoadComplete(); + nsCOMPtr<nsIPresShell> shellDeathGrip(mPresShell); + mPresShell->UnsuppressPainting(); + // mPresShell could have been removed now, see bug 378682/421432 + if (mPresShell) { + mPresShell->LoadComplete(); + } } } nsJSContext::LoadEnd(); #ifdef NS_PRINTING // Check to see if someone tried to print during the load if (mPrintIsPending) {
new file mode 100644 --- /dev/null +++ b/layout/reftests/scrolling/deferred-anchor-ref.xhtml @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +</head> +<body style="margin: 0;"> +<div style="height: 50px; width: 50px; background-color: red;"/> +<div style="height: 1000px;"/> +<div id="d" style="height: 50px; width: 50px; background-color: green;"/> +<div style="height: 1000px;"/> +</body> +</html>
new file mode 100644 --- /dev/null +++ b/layout/reftests/scrolling/deferred-anchor.xhtml @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<script> +var xhr = new XMLHttpRequest(); +xhr.onprogress = function() { +}; +xhr.onload = function() { + document.documentElement.innerHTML = this.responseXML.documentElement.innerHTML; +}; +xhr.open("get", "deferred-anchor-ref.xhtml"); +xhr.send(); +</script> +</head> +</html>
--- a/layout/reftests/scrolling/reftest.list +++ b/layout/reftests/scrolling/reftest.list @@ -1,8 +1,9 @@ +HTTP == deferred-anchor.xhtml#d deferred-anchor-ref.xhtml#d HTTP == fixed-1.html fixed-1.html?ref HTTP == fixed-opacity-1.html fixed-opacity-1.html?ref skip-if(B2G) HTTP == fixed-opacity-2.html fixed-opacity-2.html?ref skip-if(B2G) random-if(gtk2Widget) fuzzy-if(Android,3,60) HTTP == fixed-text-1.html fixed-text-1.html?ref HTTP == fixed-text-2.html fixed-text-2.html?ref random-if(Android&&!browserIsRemote) == iframe-border-radius.html iframe-border-radius-ref.html # bug 760269 random-if(Android) HTTP == image-1.html image-1.html?ref random-if(Android&&!browserIsRemote) HTTP == opacity-mixed-scrolling-1.html opacity-mixed-scrolling-1.html?ref # bug 760269