mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Back out bug 1075670 for causing smoketest failures on B2G, bug 1133518 and friends. rs+a=kats
This commit is contained in:
parent
f31584a15c
commit
648983dd11
@ -3209,7 +3209,8 @@
|
||||
addonInfo: aMessage.data.addonInfo };
|
||||
let popup = browser.ownerDocument.getElementById("contentAreaContextMenu");
|
||||
let event = gContextMenuContentData.event;
|
||||
popup.openPopupAtScreen(event.screenX, event.screenY, true);
|
||||
let pos = browser.mapScreenCoordinatesFromContent(event.screenX, event.screenY);
|
||||
popup.openPopupAtScreen(pos.x, pos.y, true);
|
||||
break;
|
||||
}
|
||||
case "DOMWebNotificationClicked": {
|
||||
|
@ -914,7 +914,8 @@ nsFrameLoader::ShowRemoteFrame(const nsIntSize& size,
|
||||
|
||||
// Don't show remote iframe if we are waiting for the completion of reflow.
|
||||
if (!aFrame || !(aFrame->GetStateBits() & NS_FRAME_FIRST_REFLOW)) {
|
||||
mRemoteBrowser->UpdateDimensions(dimensions, size);
|
||||
nsIntPoint chromeDisp = aFrame->GetChromeDisplacement();
|
||||
mRemoteBrowser->UpdateDimensions(dimensions, size, chromeDisp);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1959,7 +1960,8 @@ nsFrameLoader::UpdatePositionAndSize(nsSubDocumentFrame *aIFrame)
|
||||
nsIntSize size = aIFrame->GetSubdocumentSize();
|
||||
nsIntRect dimensions;
|
||||
NS_ENSURE_SUCCESS(GetWindowDimensions(dimensions), NS_ERROR_FAILURE);
|
||||
mRemoteBrowser->UpdateDimensions(dimensions, size);
|
||||
nsIntPoint chromeDisp = aIFrame->GetChromeDisplacement();
|
||||
mRemoteBrowser->UpdateDimensions(dimensions, size, chromeDisp);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -227,9 +227,6 @@ public:
|
||||
void ActivateUpdateHitRegion();
|
||||
void DeactivateUpdateHitRegion();
|
||||
|
||||
// Properly retrieves documentSize of any subdocument type.
|
||||
nsresult GetWindowDimensions(nsIntRect& aRect);
|
||||
|
||||
private:
|
||||
|
||||
void SetOwnerContent(mozilla::dom::Element* aContent);
|
||||
@ -285,6 +282,9 @@ private:
|
||||
nsresult MaybeCreateDocShell();
|
||||
nsresult EnsureMessageManager();
|
||||
|
||||
// Properly retrieves documentSize of any subdocument type.
|
||||
nsresult GetWindowDimensions(nsIntRect& aRect);
|
||||
|
||||
// Updates the subdocument position and size. This gets called only
|
||||
// when we have our own in-process DocShell.
|
||||
void UpdateBaseWindowPositionAndSize(nsSubDocumentFrame *aIFrame);
|
||||
|
@ -2022,7 +2022,7 @@ TabChild::RecvUpdateDimensions(const nsIntRect& rect, const nsIntSize& size,
|
||||
ScreenIntSize oldScreenSize = mInnerSize;
|
||||
mInnerSize = ScreenIntSize::FromUnknownSize(
|
||||
gfx::IntSize(size.width, size.height));
|
||||
mWidget->Resize(rect.x + chromeDisp.x, rect.y + chromeDisp.y, size.width, size.height,
|
||||
mWidget->Resize(0, 0, size.width, size.height,
|
||||
true);
|
||||
|
||||
nsCOMPtr<nsIBaseWindow> baseWin = do_QueryInterface(WebNavigation());
|
||||
|
@ -80,7 +80,6 @@
|
||||
#include "nsICancelable.h"
|
||||
#include "gfxPrefs.h"
|
||||
#include "nsILoginManagerPrompter.h"
|
||||
#include "nsPIWindowRoot.h"
|
||||
#include <algorithm>
|
||||
|
||||
using namespace mozilla::dom;
|
||||
@ -321,27 +320,7 @@ TabParent::RemoveTabParentFromTable(uint64_t aLayersId)
|
||||
void
|
||||
TabParent::SetOwnerElement(Element* aElement)
|
||||
{
|
||||
// If we held previous content then unregister for its events.
|
||||
if (mFrameElement && mFrameElement->OwnerDoc()->GetWindow()) {
|
||||
nsCOMPtr<nsPIDOMWindow> window = mFrameElement->OwnerDoc()->GetWindow();
|
||||
nsCOMPtr<EventTarget> eventTarget = window->GetTopWindowRoot();
|
||||
if (eventTarget) {
|
||||
eventTarget->RemoveEventListener(NS_LITERAL_STRING("MozUpdateWindowPos"),
|
||||
this, false);
|
||||
}
|
||||
}
|
||||
|
||||
// Update to the new content, and register to listen for events from it.
|
||||
mFrameElement = aElement;
|
||||
if (mFrameElement && mFrameElement->OwnerDoc()->GetWindow()) {
|
||||
nsCOMPtr<nsPIDOMWindow> window = mFrameElement->OwnerDoc()->GetWindow();
|
||||
nsCOMPtr<EventTarget> eventTarget = window->GetTopWindowRoot();
|
||||
if (eventTarget) {
|
||||
eventTarget->AddEventListener(NS_LITERAL_STRING("MozUpdateWindowPos"),
|
||||
this, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
TryCacheDPIAndScale();
|
||||
}
|
||||
|
||||
@ -377,8 +356,6 @@ TabParent::Destroy()
|
||||
return;
|
||||
}
|
||||
|
||||
SetOwnerElement(nullptr);
|
||||
|
||||
// If this fails, it's most likely due to a content-process crash,
|
||||
// and auto-cleanup will kick in. Otherwise, the child side will
|
||||
// destroy itself and send back __delete__().
|
||||
@ -906,7 +883,8 @@ TabParent::RecvSetDimensions(const uint32_t& aFlags,
|
||||
}
|
||||
|
||||
void
|
||||
TabParent::UpdateDimensions(const nsIntRect& rect, const nsIntSize& size)
|
||||
TabParent::UpdateDimensions(const nsIntRect& rect, const nsIntSize& size,
|
||||
const nsIntPoint& aChromeDisp)
|
||||
{
|
||||
if (mIsDestroyed) {
|
||||
return;
|
||||
@ -917,20 +895,12 @@ TabParent::UpdateDimensions(const nsIntRect& rect, const nsIntSize& size)
|
||||
|
||||
if (!mUpdatedDimensions || mOrientation != orientation ||
|
||||
mDimensions != size || !mRect.IsEqualEdges(rect)) {
|
||||
nsCOMPtr<nsIWidget> widget = GetWidget();
|
||||
nsIntRect contentRect = rect;
|
||||
if (widget) {
|
||||
contentRect.x += widget->GetClientOffset().x;
|
||||
contentRect.y += widget->GetClientOffset().y;
|
||||
}
|
||||
|
||||
mUpdatedDimensions = true;
|
||||
mRect = contentRect;
|
||||
mRect = rect;
|
||||
mDimensions = size;
|
||||
mOrientation = orientation;
|
||||
|
||||
nsIntPoint chromeOffset = LayoutDevicePixel::ToUntyped(-GetChildProcessOffset());
|
||||
unused << SendUpdateDimensions(mRect, mDimensions, mOrientation, chromeOffset);
|
||||
unused << SendUpdateDimensions(mRect, mDimensions, mOrientation, aChromeDisp);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2693,27 +2663,6 @@ TabParent::DeallocPPluginWidgetParent(mozilla::plugins::PPluginWidgetParent* aAc
|
||||
return true;
|
||||
}
|
||||
|
||||
nsresult
|
||||
TabParent::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
nsAutoString eventType;
|
||||
aEvent->GetType(eventType);
|
||||
|
||||
if (eventType.EqualsLiteral("MozUpdateWindowPos")) {
|
||||
// This event is sent when the widget moved. Therefore we only update
|
||||
// the position.
|
||||
nsRefPtr<nsFrameLoader> frameLoader = GetFrameLoader();
|
||||
if (!frameLoader) {
|
||||
return NS_OK;
|
||||
}
|
||||
nsIntRect windowDims;
|
||||
NS_ENSURE_SUCCESS(frameLoader->GetWindowDimensions(windowDims), NS_ERROR_FAILURE);
|
||||
UpdateDimensions(windowDims, mDimensions);
|
||||
return NS_OK;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
class FakeChannel MOZ_FINAL : public nsIChannel,
|
||||
public nsIAuthPromptCallback,
|
||||
public nsIInterfaceRequestor,
|
||||
|
@ -22,7 +22,6 @@
|
||||
#include "Units.h"
|
||||
#include "WritingModes.h"
|
||||
#include "js/TypeDecls.h"
|
||||
#include "nsIDOMEventListener.h"
|
||||
|
||||
class nsFrameLoader;
|
||||
class nsIFrameLoader;
|
||||
@ -59,8 +58,7 @@ class nsIContentParent;
|
||||
class Element;
|
||||
struct StructuredCloneData;
|
||||
|
||||
class TabParent : public PBrowserParent
|
||||
, public nsIDOMEventListener
|
||||
class TabParent : public PBrowserParent
|
||||
, public nsITabParent
|
||||
, public nsIAuthPromptProvider
|
||||
, public nsISecureBrowserUI
|
||||
@ -101,9 +99,6 @@ public:
|
||||
mBrowserDOMWindow = aBrowserDOMWindow;
|
||||
}
|
||||
|
||||
// nsIDOMEventListener interfaces
|
||||
NS_DECL_NSIDOMEVENTLISTENER
|
||||
|
||||
already_AddRefed<nsILoadContext> GetLoadContext();
|
||||
|
||||
nsIXULBrowserWindow* GetXULBrowserWindow();
|
||||
@ -241,7 +236,8 @@ public:
|
||||
// message-sending functions under a layer of indirection and
|
||||
// eating the return values
|
||||
void Show(const nsIntSize& size, bool aParentIsActive);
|
||||
void UpdateDimensions(const nsIntRect& rect, const nsIntSize& size);
|
||||
void UpdateDimensions(const nsIntRect& rect, const nsIntSize& size,
|
||||
const nsIntPoint& chromeDisp);
|
||||
void UpdateFrame(const layers::FrameMetrics& aFrameMetrics);
|
||||
void UIResolutionChanged();
|
||||
void AcknowledgeScrollUpdate(const ViewID& aScrollId, const uint32_t& aScrollGeneration);
|
||||
|
@ -789,6 +789,7 @@ NPBool nsPluginInstanceOwner::ConvertPointPuppet(PuppetWidget *widget,
|
||||
tabContentBounds.ScaleInverseRoundOut(scaleFactor);
|
||||
int32_t windowH = tabContentBounds.height + int(chromeSize.y);
|
||||
|
||||
// This is actually relative to window-chrome.
|
||||
nsPoint pluginPosition = AsNsPoint(pluginFrame->GetScreenRect().TopLeft());
|
||||
|
||||
// Convert (sourceX, sourceY) to 'real' (not PuppetWidget) screen space.
|
||||
@ -798,8 +799,8 @@ NPBool nsPluginInstanceOwner::ConvertPointPuppet(PuppetWidget *widget,
|
||||
nsPoint screenPoint;
|
||||
switch (sourceSpace) {
|
||||
case NPCoordinateSpacePlugin:
|
||||
screenPoint = sourcePoint + pluginPosition +
|
||||
pluginFrame->GetContentRectRelativeToSelf().TopLeft() / nsPresContext::AppUnitsPerCSSPixel();
|
||||
screenPoint = sourcePoint + pluginFrame->GetContentRectRelativeToSelf().TopLeft() +
|
||||
chromeSize + pluginPosition + windowPosition;
|
||||
break;
|
||||
case NPCoordinateSpaceWindow:
|
||||
screenPoint = nsPoint(sourcePoint.x, windowH-sourcePoint.y) +
|
||||
@ -822,8 +823,8 @@ NPBool nsPluginInstanceOwner::ConvertPointPuppet(PuppetWidget *widget,
|
||||
nsPoint destPoint;
|
||||
switch (destSpace) {
|
||||
case NPCoordinateSpacePlugin:
|
||||
destPoint = screenPoint - pluginPosition -
|
||||
pluginFrame->GetContentRectRelativeToSelf().TopLeft() / nsPresContext::AppUnitsPerCSSPixel();
|
||||
destPoint = screenPoint - pluginFrame->GetContentRectRelativeToSelf().TopLeft() -
|
||||
chromeSize - pluginPosition - windowPosition;
|
||||
break;
|
||||
case NPCoordinateSpaceWindow:
|
||||
destPoint = screenPoint - windowPosition;
|
||||
|
@ -1453,15 +1453,9 @@ ChromeTooltipListener::sTooltipCallback(nsITimer *aTimer,
|
||||
if (textFound) {
|
||||
nsString tipText(tooltipText);
|
||||
LayoutDeviceIntPoint screenDot = widget->WidgetToScreenOffset();
|
||||
double scaleFactor = 1.0;
|
||||
if (shell->GetPresContext()) {
|
||||
scaleFactor = double(nsPresContext::AppUnitsPerCSSPixel())/
|
||||
shell->GetPresContext()->DeviceContext()->AppUnitsPerDevPixelAtUnitFullZoom();
|
||||
}
|
||||
// ShowTooltip expects widget-relative position.
|
||||
self->ShowTooltip(self->mMouseScreenX - screenDot.x / scaleFactor,
|
||||
self->mMouseScreenY - screenDot.y / scaleFactor,
|
||||
tipText);
|
||||
self->ShowTooltip(self->mMouseScreenX - screenDot.x,
|
||||
self->mMouseScreenY - screenDot.y,
|
||||
tipText);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1274,3 +1274,24 @@ nsSubDocumentFrame::ObtainIntrinsicSizeFrame()
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsIntPoint
|
||||
nsSubDocumentFrame::GetChromeDisplacement()
|
||||
{
|
||||
nsIFrame* nextFrame = nsLayoutUtils::GetCrossDocParentFrame(this);
|
||||
if (!nextFrame) {
|
||||
NS_WARNING("Couldn't find window chrome to calculate displacement to.");
|
||||
return nsIntPoint();
|
||||
}
|
||||
|
||||
nsIFrame* rootFrame = nextFrame;
|
||||
while (nextFrame) {
|
||||
rootFrame = nextFrame;
|
||||
nextFrame = nsLayoutUtils::GetCrossDocParentFrame(rootFrame);
|
||||
}
|
||||
|
||||
nsPoint offset = GetOffsetToCrossDoc(rootFrame);
|
||||
int32_t appUnitsPerDevPixel = rootFrame->PresContext()->AppUnitsPerDevPixel();
|
||||
return nsIntPoint((int)(offset.x/appUnitsPerDevPixel),
|
||||
(int)(offset.y/appUnitsPerDevPixel));
|
||||
}
|
||||
|
@ -127,6 +127,8 @@ public:
|
||||
*/
|
||||
bool PassPointerEventsToChildren();
|
||||
|
||||
nsIntPoint GetChromeDisplacement();
|
||||
|
||||
protected:
|
||||
friend class AsyncFrameInit;
|
||||
|
||||
|
@ -81,8 +81,9 @@ this.AutoCompleteE10S = {
|
||||
this.popup.hidden = false;
|
||||
this.popup.setAttribute("width", rect.width);
|
||||
|
||||
this.x = rect.left;
|
||||
this.y = rect.top + rect.height;
|
||||
let {x, y} = this.browser.mapScreenCoordinatesFromContent(rect.left, rect.top + rect.height);
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
},
|
||||
|
||||
_showPopup: function(results) {
|
||||
|
@ -868,7 +868,8 @@
|
||||
if (!this.autoscrollEnabled) {
|
||||
return false;
|
||||
}
|
||||
this.startScroll(data.scrolldir, data.screenX, data.screenY);
|
||||
let pos = this.mapScreenCoordinatesFromContent(data.screenX, data.screenY);
|
||||
this.startScroll(data.scrolldir, pos.x, pos.y);
|
||||
return true;
|
||||
}
|
||||
case "Autoscroll:Cancel":
|
||||
@ -1049,6 +1050,25 @@
|
||||
</body>
|
||||
</method>
|
||||
|
||||
<!--
|
||||
For out-of-process code, event.screen[XY] is relative to the
|
||||
left/top of the content view. For in-process code,
|
||||
event.screen[XY] is relative to the left/top of the screen. We
|
||||
use this method to map screen coordinates received from a
|
||||
(possibly out-of-process) <browser> element to coordinates
|
||||
that are relative to the screen. This code handles the
|
||||
in-process case, where we return the coordinates unchanged.
|
||||
-->
|
||||
<method name="mapScreenCoordinatesFromContent">
|
||||
<parameter name="aScreenX"/>
|
||||
<parameter name="aScreenY"/>
|
||||
<body>
|
||||
<![CDATA[
|
||||
return { x: aScreenX, y: aScreenY };
|
||||
]]>
|
||||
</body>
|
||||
</method>
|
||||
|
||||
<method name="swapDocShells">
|
||||
<parameter name="aOtherBrowser"/>
|
||||
<body>
|
||||
|
@ -385,6 +385,27 @@
|
||||
]]></body>
|
||||
</method>
|
||||
|
||||
<!--
|
||||
For out-of-process code, event.screen[XY] is relative to the
|
||||
left/top of the content view. For in-process code,
|
||||
event.screen[XY] is relative to the left/top of the screen. We
|
||||
use this method to map screen coordinates received from a
|
||||
(possibly out-of-process) <browser> element to coordinates
|
||||
that are relative to the screen. This code handles the
|
||||
out-of-process case, where we need to translate by the screen
|
||||
position of the <browser> element.
|
||||
-->
|
||||
<method name="mapScreenCoordinatesFromContent">
|
||||
<parameter name="aScreenX"/>
|
||||
<parameter name="aScreenY"/>
|
||||
<body>
|
||||
<![CDATA[
|
||||
return { x: aScreenX + this.boxObject.screenX,
|
||||
y: aScreenY + this.boxObject.screenY };
|
||||
]]>
|
||||
</body>
|
||||
</method>
|
||||
|
||||
<method name="enableDisableCommands">
|
||||
<parameter name="aAction"/>
|
||||
<parameter name="aEnabledLength"/>
|
||||
|
@ -28,7 +28,8 @@ this.SelectParentHelper = {
|
||||
currentBrowser = browser;
|
||||
this._registerListeners(menulist.menupopup);
|
||||
|
||||
menulist.menupopup.openPopupAtScreen(rect.left, rect.top + rect.height);
|
||||
let {x, y} = browser.mapScreenCoordinatesFromContent(rect.left, rect.top + rect.height);
|
||||
menulist.menupopup.openPopupAtScreen(x, y);
|
||||
menulist.selectedItem.scrollIntoView();
|
||||
},
|
||||
|
||||
|
@ -960,13 +960,6 @@ PuppetWidget::GetWindowPosition()
|
||||
return nsIntPoint(winX, winY);
|
||||
}
|
||||
|
||||
NS_METHOD
|
||||
PuppetWidget::GetScreenBounds(nsIntRect &aRect) {
|
||||
aRect.MoveTo(LayoutDeviceIntPoint::ToUntyped(WidgetToScreenOffset()));
|
||||
aRect.SizeTo(mBounds.Size());
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PuppetScreen::PuppetScreen(void *nativeScreen)
|
||||
{
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ public:
|
||||
int32_t* aY) MOZ_OVERRIDE
|
||||
{ *aX = kMaxDimension; *aY = kMaxDimension; return NS_OK; }
|
||||
|
||||
// Widget position is controlled by the parent process via TabChild.
|
||||
// We're always at <0, 0>, and so ignore move requests.
|
||||
NS_IMETHOD Move(double aX, double aY) MOZ_OVERRIDE
|
||||
{ return NS_OK; }
|
||||
|
||||
@ -92,14 +92,8 @@ public:
|
||||
double aWidth,
|
||||
double aHeight,
|
||||
bool aRepaint) MOZ_OVERRIDE
|
||||
{
|
||||
if (mBounds.x != aX || mBounds.y != aY) {
|
||||
NotifyWindowMoved(aX, aY);
|
||||
}
|
||||
mBounds.x = aX;
|
||||
mBounds.y = aY;
|
||||
return Resize(aWidth, aHeight, aRepaint);
|
||||
}
|
||||
// (we're always at <0, 0>)
|
||||
{ return Resize(aWidth, aHeight, aRepaint); }
|
||||
|
||||
// XXX/cjones: copying gtk behavior here; unclear what disabling a
|
||||
// widget is supposed to entail
|
||||
@ -129,8 +123,9 @@ public:
|
||||
NS_IMETHOD SetTitle(const nsAString& aTitle) MOZ_OVERRIDE
|
||||
{ return NS_ERROR_UNEXPECTED; }
|
||||
|
||||
// PuppetWidgets are always at <0, 0>.
|
||||
virtual mozilla::LayoutDeviceIntPoint WidgetToScreenOffset() MOZ_OVERRIDE
|
||||
{ return LayoutDeviceIntPoint::FromUntyped(GetWindowPosition() + GetChromeDimensions()); }
|
||||
{ return mozilla::LayoutDeviceIntPoint(0, 0); }
|
||||
|
||||
void InitEvent(WidgetGUIEvent& aEvent, nsIntPoint* aPoint = nullptr);
|
||||
|
||||
@ -203,8 +198,6 @@ public:
|
||||
// Get the screen position of the application window.
|
||||
nsIntPoint GetWindowPosition();
|
||||
|
||||
NS_IMETHOD GetScreenBounds(nsIntRect &aRect) MOZ_OVERRIDE;
|
||||
|
||||
protected:
|
||||
bool mEnabled;
|
||||
bool mVisible;
|
||||
|
@ -71,8 +71,6 @@
|
||||
#include "mozilla/DebugOnly.h"
|
||||
#include "mozilla/MouseEvents.h"
|
||||
|
||||
#include "nsPIWindowRoot.h"
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
#include "nsINativeMenuService.h"
|
||||
#define USE_NATIVE_MENUS
|
||||
@ -259,15 +257,6 @@ nsWebShellWindow::WindowMoved(nsIWidget* aWidget, int32_t x, int32_t y)
|
||||
pm->AdjustPopupsOnWindowChange(window);
|
||||
}
|
||||
|
||||
// Notify all tabs that the widget moved.
|
||||
if (mDocShell && mDocShell->GetWindow()) {
|
||||
nsCOMPtr<EventTarget> eventTarget = mDocShell->GetWindow()->GetTopWindowRoot();
|
||||
nsContentUtils::DispatchChromeEvent(mDocShell->GetDocument(),
|
||||
eventTarget,
|
||||
NS_LITERAL_STRING("MozUpdateWindowPos"),
|
||||
false, false, nullptr);
|
||||
}
|
||||
|
||||
// Persist position, but not immediately, in case this OS is firing
|
||||
// repeated move events as the user drags the window
|
||||
SetPersistenceTimer(PAD_POSITION);
|
||||
|
Loading…
Reference in New Issue
Block a user