gecko-dev/layout/base/nsPresState.h
Kartikaya Gupta fa397ea897 Bug 1304689 - Ensure frame reconstructions don't clobber a 'stronger' scroll origin with a 'weaker' one. r=tnikkel
If, within a single refresh driver tick, the scroll position is updated by JS
explicitly, and then subsequently also updated by a frame reconstruction, the
scroll origin from the former (nsGkAtoms::other) can get clobbered by the latter
(to nsGkAtoms::restore). The restore scroll origin is "weaker" in that it can
be ignored by the APZ code in some circumstances. This is undesirable because
it means the JS scroll update also gets ignored. This patch ensures that when
setting the scroll origin we don't do this clobbering of stronger origins with
weaker origins.

MozReview-Commit-ID: DA4EHp1Debu

--HG--
extra : rebase_source : 99fd1f91698a605792b2a622450f1ff31bc89101
2016-10-11 09:36:22 -04:00

127 lines
2.3 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
* a piece of state that is stored in session history when the document
* is not
*/
#ifndef nsPresState_h_
#define nsPresState_h_
#include "nsPoint.h"
#include "gfxPoint.h"
#include "nsAutoPtr.h"
class nsPresState
{
public:
nsPresState()
: mContentData(nullptr)
, mScrollState(0, 0)
, mAllowScrollOriginDowngrade(true)
, mResolution(1.0)
, mScaleToResolution(false)
, mDisabledSet(false)
, mDisabled(false)
, mDroppedDown(false)
{}
void SetScrollState(const nsPoint& aState)
{
mScrollState = aState;
}
nsPoint GetScrollPosition() const
{
return mScrollState;
}
void SetAllowScrollOriginDowngrade(bool aAllowScrollOriginDowngrade)
{
mAllowScrollOriginDowngrade = aAllowScrollOriginDowngrade;
}
bool GetAllowScrollOriginDowngrade()
{
return mAllowScrollOriginDowngrade;
}
void SetResolution(float aSize)
{
mResolution = aSize;
}
float GetResolution() const
{
return mResolution;
}
void SetScaleToResolution(bool aScaleToResolution)
{
mScaleToResolution = aScaleToResolution;
}
bool GetScaleToResolution() const
{
return mScaleToResolution;
}
void ClearNonScrollState()
{
mContentData = nullptr;
mDisabledSet = false;
}
bool GetDisabled() const
{
return mDisabled;
}
void SetDisabled(bool aDisabled)
{
mDisabled = aDisabled;
mDisabledSet = true;
}
bool IsDisabledSet() const
{
return mDisabledSet;
}
nsISupports* GetStateProperty() const
{
return mContentData;
}
void SetStateProperty(nsISupports *aProperty)
{
mContentData = aProperty;
}
void SetDroppedDown(bool aDroppedDown)
{
mDroppedDown = aDroppedDown;
}
bool GetDroppedDown() const
{
return mDroppedDown;
}
// MEMBER VARIABLES
protected:
nsCOMPtr<nsISupports> mContentData;
nsPoint mScrollState;
bool mAllowScrollOriginDowngrade;
float mResolution;
bool mScaleToResolution;
bool mDisabledSet;
bool mDisabled;
bool mDroppedDown;
};
#endif /* nsPresState_h_ */