Files
tubestation/accessible/windows/msaa/DocAccessibleWrap.cpp
James Teh 4a4509a537 Bug 1954418 part 1: Remove ISimpleDOM code that only works for LocalAccessible. r=morgan
We have a lot of ISimpleDOM code which only works for LocalAccessible.
Because all web content uses RemoteAccessible now, practically, the only usable ISimpleDOM functionality is that which works for RemoteAccessible.
Therefore, remove all code that only works for LocalAccessible.

Differential Revision: https://phabricator.services.mozilla.com/D241805
2025-03-18 07:10:39 +00:00

100 lines
3.3 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* 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/. */
#include "DocAccessibleWrap.h"
#include "Compatibility.h"
#include "mozilla/PresShell.h"
#include "mozilla/dom/BrowsingContext.h"
#include "mozilla/dom/Document.h"
#include "DocAccessibleChild.h"
#include "nsWinUtils.h"
#include "RootAccessible.h"
#include "Statistics.h"
using namespace mozilla;
using namespace mozilla::a11y;
////////////////////////////////////////////////////////////////////////////////
// DocAccessibleWrap
////////////////////////////////////////////////////////////////////////////////
DocAccessibleWrap::DocAccessibleWrap(dom::Document* aDocument,
PresShell* aPresShell)
: DocAccessible(aDocument, aPresShell), mHWND(nullptr) {}
DocAccessibleWrap::~DocAccessibleWrap() {}
////////////////////////////////////////////////////////////////////////////////
// LocalAccessible
void DocAccessibleWrap::Shutdown() {
// Do window emulation specific shutdown if emulation was started.
if (nsWinUtils::IsWindowEmulationStarted()) {
// Destroy window created for root document.
if (mDocFlags & eTopLevelContentDocInProcess) {
MOZ_ASSERT(XRE_IsParentProcess());
HWND hWnd = static_cast<HWND>(mHWND);
::RemovePropW(hWnd, kPropNameDocAcc);
::DestroyWindow(hWnd);
}
mHWND = nullptr;
}
DocAccessible::Shutdown();
}
////////////////////////////////////////////////////////////////////////////////
// DocAccessible public
void* DocAccessibleWrap::GetNativeWindow() const {
if (mHWND) {
return mHWND;
}
return DocAccessible::GetNativeWindow();
}
////////////////////////////////////////////////////////////////////////////////
// DocAccessible protected
void DocAccessibleWrap::DoInitialUpdate() {
DocAccessible::DoInitialUpdate();
if (nsWinUtils::IsWindowEmulationStarted()) {
// Create window for tab document.
if (mDocFlags & eTopLevelContentDocInProcess) {
MOZ_ASSERT(XRE_IsParentProcess());
a11y::RootAccessible* rootDocument = RootAccessible();
bool isActive = true;
LayoutDeviceIntRect rect(CW_USEDEFAULT, CW_USEDEFAULT, 0, 0);
if (Compatibility::IsDolphin()) {
rect = Bounds();
LayoutDeviceIntRect rootRect = rootDocument->Bounds();
rect.MoveToX(rootRect.X() - rect.X());
rect.MoveByY(-rootRect.Y());
auto* bc = mDocumentNode->GetBrowsingContext();
isActive = bc && bc->IsActive();
}
RefPtr<DocAccessibleWrap> self(this);
nsWinUtils::NativeWindowCreateProc onCreate([self](HWND aHwnd) -> void {
::SetPropW(aHwnd, kPropNameDocAcc,
reinterpret_cast<HANDLE>(self.get()));
});
HWND parentWnd = reinterpret_cast<HWND>(rootDocument->GetNativeWindow());
mHWND = nsWinUtils::CreateNativeWindow(
kClassNameTabContent, parentWnd, rect.X(), rect.Y(), rect.Width(),
rect.Height(), isActive, &onCreate);
} else {
DocAccessible* parentDocument = ParentDocument();
if (parentDocument) mHWND = parentDocument->GetNativeWindow();
}
}
}