Bug 1374792: Modify a11y handler to only invoke IGeckoBackChannel::put_HandlerControl once; r=eeejay

MozReview-Commit-ID: Bxo0IsAuhBh
This commit is contained in:
Aaron Klotz 2017-06-30 12:04:02 -07:00
Родитель 8bd02d75b7
Коммит 44e203215a
3 изменённых файлов: 23 добавлений и 10 удалений

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

@ -222,17 +222,12 @@ AccessibleHandler::ReadHandlerPayload(IStream* aStream, REFIID aIid)
return S_OK;
}
long pid = static_cast<long>(::GetCurrentProcessId());
RefPtr<IHandlerControl> ctl;
HRESULT hr = gControlFactory.CreateInstance(nullptr, IID_IHandlerControl,
getter_AddRefs(ctl));
if (SUCCEEDED(hr)) {
hr = mCachedData.mGeckoBackChannel->put_HandlerControl(pid, ctl);
MOZ_ASSERT(SUCCEEDED(hr));
RefPtr<AccessibleHandlerControl> ctl(gControlFactory.GetOrCreateSingleton());
if (!ctl) {
return E_OUTOFMEMORY;
}
return hr;
return ctl->Register(WrapNotNull(mCachedData.mGeckoBackChannel));
}
REFIID

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

@ -132,7 +132,8 @@ AccessibleHandlerControl::Create(AccessibleHandlerControl** aOutObject)
}
AccessibleHandlerControl::AccessibleHandlerControl()
: mCacheGen(0)
: mIsRegistered(false)
, mCacheGen(0)
, mIA2Proxy(mscom::RegisterProxy(L"ia2marshal.dll"))
, mHandlerProxy(mscom::RegisterProxy())
{
@ -189,5 +190,19 @@ AccessibleHandlerControl::GetHandlerTypeInfo(ITypeInfo** aOutTypeInfo)
aOutTypeInfo);
}
HRESULT
AccessibleHandlerControl::Register(NotNull<IGeckoBackChannel*> aGecko)
{
if (mIsRegistered) {
return S_OK;
}
long pid = static_cast<long>(::GetCurrentProcessId());
HRESULT hr = aGecko->put_HandlerControl(pid, this);
mIsRegistered = SUCCEEDED(hr);
MOZ_ASSERT(mIsRegistered);
return hr;
}
} // namespace a11y
} // namespace mozilla

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

@ -71,10 +71,13 @@ public:
HRESULT GetHandlerTypeInfo(ITypeInfo** aOutTypeInfo);
HRESULT Register(NotNull<IGeckoBackChannel*> aGecko);
private:
AccessibleHandlerControl();
~AccessibleHandlerControl() = default;
bool mIsRegistered;
uint32_t mCacheGen;
detail::TextChange mTextChange;
UniquePtr<mscom::RegisteredProxy> mIA2Proxy;