Bug 1252262 - Don't combine the client offset into the outer rect for the child process. r=jimm, a=ritu

MozReview-Commit-ID: BslkWk7ndkx
This commit is contained in:
Kartikaya Gupta 2016-03-08 14:14:43 -05:00
parent 65a85c376e
commit dab3b4a83f
6 changed files with 24 additions and 16 deletions

View File

@ -531,6 +531,7 @@ child:
async UpdateDimensions(CSSRect rect, CSSSize size,
ScreenOrientationInternal orientation,
LayoutDeviceIntPoint clientOffset,
LayoutDeviceIntPoint chromeDisp) compressall;
async SizeModeChanged(nsSizeMode sizeMode);

View File

@ -1637,6 +1637,7 @@ TabChild::RecvShow(const ScreenIntSize& aSize,
bool
TabChild::RecvUpdateDimensions(const CSSRect& rect, const CSSSize& size,
const ScreenOrientationInternal& orientation,
const LayoutDeviceIntPoint& clientOffset,
const LayoutDeviceIntPoint& chromeDisp)
{
if (!mRemoteFrame) {
@ -1644,6 +1645,7 @@ TabChild::RecvUpdateDimensions(const CSSRect& rect, const CSSSize& size,
}
mUnscaledOuterRect = rect;
mClientOffset = clientOffset;
mChromeDisp = chromeDisp;
mOrientation = orientation;
@ -1662,8 +1664,8 @@ TabChild::RecvUpdateDimensions(const CSSRect& rect, const CSSSize& size,
baseWin->SetPositionAndSize(0, 0, screenSize.width, screenSize.height,
true);
mPuppetWidget->Resize(screenRect.x + chromeDisp.x,
screenRect.y + chromeDisp.y,
mPuppetWidget->Resize(screenRect.x + clientOffset.x + chromeDisp.x,
screenRect.y + clientOffset.y + chromeDisp.y,
screenSize.width, screenSize.height, true);
return true;
@ -2940,8 +2942,8 @@ TabChild::RecvUIResolutionChanged(const float& aDpi, const double& aScale)
ScreenIntSize screenSize = GetInnerSize();
if (mHasValidInnerSize && oldScreenSize != screenSize) {
ScreenIntRect screenRect = GetOuterRect();
mPuppetWidget->Resize(screenRect.x + mChromeDisp.x,
screenRect.y + mChromeDisp.y,
mPuppetWidget->Resize(screenRect.x + mClientOffset.x + mChromeDisp.x,
screenRect.y + mClientOffset.y + mChromeDisp.y,
screenSize.width, screenSize.height, true);
nsCOMPtr<nsIBaseWindow> baseWin = do_QueryInterface(WebNavigation());

View File

@ -333,6 +333,7 @@ public:
RecvUpdateDimensions(const CSSRect& aRect,
const CSSSize& aSize,
const ScreenOrientationInternal& aOrientation,
const LayoutDeviceIntPoint& aClientOffset,
const LayoutDeviceIntPoint& aChromeDisp) override;
virtual bool
RecvSizeModeChanged(const nsSizeMode& aSizeMode) override;
@ -578,6 +579,7 @@ public:
nsresult CreatePluginWidget(nsIWidget* aParent, nsIWidget** aOut);
LayoutDeviceIntPoint GetClientOffset() const { return mClientOffset; }
LayoutDeviceIntPoint GetChromeDisplacement() const { return mChromeDisp; };
bool IPCOpen() const { return mIPCOpen; }
@ -729,6 +731,8 @@ private:
SetAllowedTouchBehaviorCallback mSetAllowedTouchBehaviorCallback;
bool mHasValidInnerSize;
bool mDestroyed;
// Position of client area relative to the outer window
LayoutDeviceIntPoint mClientOffset;
// Position of tab, relative to parent widget (typically the window)
LayoutDeviceIntPoint mChromeDisp;
TabId mUniqueId;

View File

@ -960,28 +960,28 @@ TabParent::UpdateDimensions(const nsIntRect& rect, const ScreenIntSize& size)
if (mIsDestroyed) {
return;
}
hal::ScreenConfiguration config;
hal::GetCurrentScreenConfiguration(&config);
ScreenOrientationInternal orientation = config.orientation();
LayoutDeviceIntPoint chromeOffset = -GetChildProcessOffset();
nsCOMPtr<nsIWidget> widget = GetWidget();
if (!widget) {
NS_WARNING("No widget found in TabParent::UpdateDimensions");
return;
}
nsIntRect contentRect = rect;
contentRect.x += widget->GetClientOffset().x;
contentRect.y += widget->GetClientOffset().y;
hal::ScreenConfiguration config;
hal::GetCurrentScreenConfiguration(&config);
ScreenOrientationInternal orientation = config.orientation();
LayoutDeviceIntPoint clientOffset = widget->GetClientOffset();
LayoutDeviceIntPoint chromeOffset = -GetChildProcessOffset();
if (!mUpdatedDimensions || mOrientation != orientation ||
mDimensions != size || !mRect.IsEqualEdges(contentRect) ||
mDimensions != size || !mRect.IsEqualEdges(rect) ||
clientOffset != mClientOffset ||
chromeOffset != mChromeOffset) {
mUpdatedDimensions = true;
mRect = contentRect;
mRect = rect;
mDimensions = size;
mOrientation = orientation;
mClientOffset = clientOffset;
mChromeOffset = chromeOffset;
CSSToLayoutDeviceScale widgetScale = widget->GetDefaultScale();
@ -996,7 +996,7 @@ TabParent::UpdateDimensions(const nsIntRect& rect, const ScreenIntSize& size)
CSSRect unscaledRect = devicePixelRect / widgetScale;
CSSSize unscaledSize = devicePixelSize / widgetScale;
Unused << SendUpdateDimensions(unscaledRect, unscaledSize,
orientation, chromeOffset);
orientation, clientOffset, chromeOffset);
}
}

View File

@ -603,6 +603,7 @@ protected:
CSSToLayoutDeviceScale mDefaultScale;
bool mUpdatedDimensions;
nsSizeMode mSizeMode;
LayoutDeviceIntPoint mClientOffset;
LayoutDeviceIntPoint mChromeOffset;
private:

View File

@ -1234,7 +1234,7 @@ PuppetWidget::GetWindowPosition()
int32_t winX, winY, winW, winH;
NS_ENSURE_SUCCESS(GetOwningTabChild()->GetDimensions(0, &winX, &winY, &winW, &winH), nsIntPoint());
return nsIntPoint(winX, winY);
return nsIntPoint(winX, winY) + GetOwningTabChild()->GetClientOffset().ToUnknownPoint();
}
NS_METHOD