Bug 1383367: Part 1 - Add JS helper to determine if a layout flush is required. r=mconley

This lets us decide whether to defer operations if they might trigger a
reflow.

MozReview-Commit-ID: 4M13HKAuZ7M

--HG--
extra : rebase_source : d30a423b2fb9eb7a189b84d8aebb7263ab0b3f27
This commit is contained in:
Kris Maglione 2017-07-24 20:07:39 -07:00
Родитель 50e245c88e
Коммит 2fa79c4f93
2 изменённых файлов: 42 добавлений и 0 удалений

Просмотреть файл

@ -1851,6 +1851,39 @@ nsDOMWindowUtils::GetBoundsWithoutFlushing(nsIDOMElement *aElement,
return NS_OK;
}
NS_IMETHODIMP
nsDOMWindowUtils::NeedsFlush(int32_t aFlushType, bool* aResult)
{
MOZ_ASSERT(aResult);
nsCOMPtr<nsIDocument> doc = GetDocument();
NS_ENSURE_STATE(doc);
nsIPresShell* presShell = doc->GetShell();
NS_ENSURE_STATE(presShell);
FlushType flushType;
switch (aFlushType) {
case FLUSH_STYLE:
flushType = FlushType::Style;
break;
case FLUSH_LAYOUT:
flushType = FlushType::Layout;
break;
case FLUSH_DISPLAY:
flushType = FlushType::Display;
break;
default:
return NS_ERROR_INVALID_ARG;
}
*aResult = presShell->NeedFlush(flushType);
return NS_OK;
}
NS_IMETHODIMP
nsDOMWindowUtils::GetRootBounds(nsIDOMClientRect** aResult)
{

Просмотреть файл

@ -995,6 +995,15 @@ interface nsIDOMWindowUtils : nsISupports {
*/
nsIDOMClientRect getBoundsWithoutFlushing(in nsIDOMElement aElement);
const long FLUSH_STYLE = 0;
const long FLUSH_LAYOUT = 1;
const long FLUSH_DISPLAY = 2;
/**
* Returns true if a flush of the given type is needed.
*/
bool needsFlush(in long aFlushtype);
/**
* Returns the bounds of the window's currently loaded document. This will
* generally be (0, 0, pageWidth, pageHeight) but in some cases (e.g. RTL