Bug 1297549: Part 2 - Propagate changes in tab native window down to content for a11y; r=jimm

MozReview-Commit-ID: E96pONRnHt0

--HG--
extra : rebase_source : 10d653b125c0916d7c432a42a9011a7dc7985630
This commit is contained in:
Aaron Klotz 2016-09-15 13:37:04 -06:00
Родитель 2f2f607a11
Коммит cd649a45e3
4 изменённых файлов: 44 добавлений и 0 удалений

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

@ -824,6 +824,14 @@ child:
*/
async Print(uint64_t aOuterWindowID, PrintData aPrintData);
/**
* Update the child with the tab's current top-level native window handle.
* This is used by a11y objects who must expose their native window.
*
* @param aNewHandle The native window handle of the tab's top-level window.
*/
async UpdateNativeWindowHandle(uintptr_t aNewHandle);
/*
* FIXME: write protocol!

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

@ -546,6 +546,9 @@ TabChild::TabChild(nsIContentChild* aManager,
, mDidSetRealShowInfo(false)
, mDidLoadURLInit(false)
, mAPZChild(nullptr)
#if defined(XP_WIN) && defined(ACCESSIBILITY)
, mNativeWindowHandle(0)
#endif
{
// In the general case having the TabParent tell us if APZ is enabled or not
// doesn't really work because the TabParent itself may not have a reference
@ -2531,6 +2534,17 @@ TabChild::RecvPrint(const uint64_t& aOuterWindowID, const PrintData& aPrintData)
return true;
}
bool
TabChild::RecvUpdateNativeWindowHandle(const uintptr_t& aNewHandle)
{
#if defined(XP_WIN) && defined(ACCESSIBILITY)
mNativeWindowHandle = aNewHandle;
return true;
#else
return false;
#endif
}
bool
TabChild::RecvDestroy()
{

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

@ -590,6 +590,8 @@ public:
virtual bool RecvPrint(const uint64_t& aOuterWindowID,
const PrintData& aPrintData) override;
virtual bool RecvUpdateNativeWindowHandle(const uintptr_t& aNewHandle) override;
/**
* Native widget remoting protocol for use with windowed plugins with e10s.
*/
@ -648,6 +650,10 @@ public:
mAPZChild = aAPZChild;
}
#if defined(XP_WIN) && defined(ACCESSIBILITY)
uintptr_t GetNativeWindowHandle() const { return mNativeWindowHandle; }
#endif
protected:
virtual ~TabChild();
@ -782,6 +788,11 @@ private:
// dangling pointer.
layers::APZChild* mAPZChild;
#if defined(XP_WIN) && defined(ACCESSIBILITY)
// The handle associated with the native window that contains this tab
uintptr_t mNativeWindowHandle;
#endif // defined(XP_WIN)
DISALLOW_EVIL_CONSTRUCTORS(TabChild);
};

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

@ -398,6 +398,17 @@ TabParent::SetOwnerElement(Element* aElement)
Unused << SendSetUseGlobalHistory(useGlobalHistory);
}
#if defined(XP_WIN) && defined(ACCESSIBILITY)
if (!mIsDestroyed) {
uintptr_t newWindowHandle = 0;
if (nsCOMPtr<nsIWidget> widget = GetWidget()) {
newWindowHandle =
reinterpret_cast<uintptr_t>(widget->GetNativeData(NS_NATIVE_WINDOW));
}
Unused << SendUpdateNativeWindowHandle(newWindowHandle);
}
#endif
AddWindowListeners();
TryCacheDPIAndScale();
}