--- a/accessible/generic/Accessible.cpp
+++ b/accessible/generic/Accessible.cpp
@@ -840,57 +840,57 @@ Accessible::HandleAccEvent(AccEvent* aEv
reinterpret_cast<uintptr_t>(aEvent->GetAccessible());
switch(aEvent->GetEventType()) {
case nsIAccessibleEvent::EVENT_SHOW:
ipcDoc->ShowEvent(downcast_accEvent(aEvent));
break;
case nsIAccessibleEvent::EVENT_HIDE:
- ipcDoc->SendHideEvent(id, aEvent->IsFromUserInput());
+ ipcDoc->HideEvent(id, aEvent->IsFromUserInput());
break;
case nsIAccessibleEvent::EVENT_REORDER:
// reorder events on the application acc aren't necessary to tell the parent
// about new top level documents.
if (!aEvent->GetAccessible()->IsApplication())
ipcDoc->SendEvent(id, aEvent->GetEventType());
break;
case nsIAccessibleEvent::EVENT_STATE_CHANGE: {
- AccStateChangeEvent* event = downcast_accEvent(aEvent);
- ipcDoc->SendStateChangeEvent(id, event->GetState(),
- event->IsStateEnabled());
- break;
- }
+ AccStateChangeEvent* event = downcast_accEvent(aEvent);
+ ipcDoc->SendStateChangeEvent(id, event->GetState(),
+ event->IsStateEnabled());
+ break;
+ }
case nsIAccessibleEvent::EVENT_TEXT_CARET_MOVED: {
AccCaretMoveEvent* event = downcast_accEvent(aEvent);
ipcDoc->SendCaretMoveEvent(id, event->GetCaretOffset());
break;
}
case nsIAccessibleEvent::EVENT_TEXT_INSERTED:
case nsIAccessibleEvent::EVENT_TEXT_REMOVED: {
AccTextChangeEvent* event = downcast_accEvent(aEvent);
ipcDoc->SendTextChangeEvent(id, event->ModifiedText(),
event->GetStartOffset(),
event->GetLength(),
event->IsTextInserted(),
event->IsFromUserInput());
break;
- }
+ }
case nsIAccessibleEvent::EVENT_SELECTION:
case nsIAccessibleEvent::EVENT_SELECTION_ADD:
case nsIAccessibleEvent::EVENT_SELECTION_REMOVE: {
AccSelChangeEvent* selEvent = downcast_accEvent(aEvent);
uint64_t widgetID = selEvent->Widget()->IsDoc() ? 0 :
reinterpret_cast<uintptr_t>(selEvent->Widget());
ipcDoc->SendSelectionEvent(id, widgetID, aEvent->GetEventType());
break;
- }
+ }
default:
- ipcDoc->SendEvent(id, aEvent->GetEventType());
+ ipcDoc->SendEvent(id, aEvent->GetEventType());
}
}
}
if (nsCoreUtils::AccEventObserversExist()) {
nsCoreUtils::DispatchAccEvent(MakeXPCEvent(aEvent));
}
--- a/accessible/generic/DocAccessible.h
+++ b/accessible/generic/DocAccessible.h
@@ -572,17 +572,17 @@ protected:
bool IsLoadEventTarget() const;
/*
* Set the object responsible for communicating with the main process on
* behalf of this document.
*/
void SetIPCDoc(DocAccessibleChild* aIPCDoc) { mIPCDoc = aIPCDoc; }
- friend class DocAccessibleChild;
+ friend class DocAccessibleChildBase;
/**
* Used to fire scrolling end event after page scroll.
*
* @param aTimer [in] the timer object
* @param aClosure [in] the document accessible where scrolling happens
*/
static void ScrollTimerCallback(nsITimer* aTimer, void* aClosure);
--- a/accessible/generic/moz.build
+++ b/accessible/generic/moz.build
@@ -23,24 +23,32 @@ UNIFIED_SOURCES += [
'RootAccessible.cpp',
'TableCellAccessible.cpp',
'TextLeafAccessible.cpp',
]
LOCAL_INCLUDES += [
'/accessible/base',
'/accessible/html',
- '/accessible/ipc',
'/accessible/xpcom',
'/accessible/xul',
'/dom/base',
'/layout/generic',
'/layout/xul',
]
+if CONFIG['OS_ARCH'] == 'WINNT':
+ LOCAL_INCLUDES += [
+ '/accessible/ipc/win',
+ ]
+else:
+ LOCAL_INCLUDES += [
+ '/accessible/ipc/other',
+ ]
+
if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
LOCAL_INCLUDES += [
'/accessible/atk',
]
elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
LOCAL_INCLUDES += [
'/accessible/windows/ia2',
'/accessible/windows/msaa',
new file mode 100644
--- /dev/null
+++ b/accessible/ipc/DocAccessibleChildBase.cpp
@@ -0,0 +1,102 @@
+/* -*- 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 "mozilla/a11y/DocAccessibleChildBase.h"
+
+namespace mozilla {
+namespace a11y {
+
+/* static */ uint32_t
+DocAccessibleChildBase::InterfacesFor(Accessible* aAcc)
+{
+ uint32_t interfaces = 0;
+ if (aAcc->IsHyperText() && aAcc->AsHyperText()->IsTextRole())
+ interfaces |= Interfaces::HYPERTEXT;
+
+ if (aAcc->IsLink())
+ interfaces |= Interfaces::HYPERLINK;
+
+ if (aAcc->HasNumericValue())
+ interfaces |= Interfaces::VALUE;
+
+ if (aAcc->IsImage())
+ interfaces |= Interfaces::IMAGE;
+
+ if (aAcc->IsTable()) {
+ interfaces |= Interfaces::TABLE;
+ }
+
+ if (aAcc->IsTableCell())
+ interfaces |= Interfaces::TABLECELL;
+
+ if (aAcc->IsDoc())
+ interfaces |= Interfaces::DOCUMENT;
+
+ if (aAcc->IsSelect()) {
+ interfaces |= Interfaces::SELECTION;
+ }
+
+ if (aAcc->ActionCount()) {
+ interfaces |= Interfaces::ACTION;
+ }
+
+ return interfaces;
+}
+
+/* static */ void
+DocAccessibleChildBase::SerializeTree(Accessible* aRoot,
+ nsTArray<AccessibleData>& aTree)
+{
+ uint64_t id = reinterpret_cast<uint64_t>(aRoot->UniqueID());
+ uint32_t role = aRoot->Role();
+ uint32_t childCount = aRoot->ChildCount();
+ uint32_t interfaces = InterfacesFor(aRoot);
+
+#if defined(XP_WIN)
+ IAccessibleHolder holder(CreateHolderFromAccessible(aRoot));
+#endif
+
+ // OuterDocAccessibles are special because we don't want to serialize the
+ // child doc here, we'll call PDocAccessibleConstructor in
+ // NotificationController.
+ MOZ_ASSERT(!aRoot->IsDoc(), "documents shouldn't be serialized");
+ if (aRoot->IsOuterDoc()) {
+ childCount = 0;
+ }
+
+#if defined(XP_WIN)
+ aTree.AppendElement(AccessibleData(id, role, childCount, interfaces,
+ holder));
+#else
+ aTree.AppendElement(AccessibleData(id, role, childCount, interfaces));
+#endif
+
+ for (uint32_t i = 0; i < childCount; i++) {
+ SerializeTree(aRoot->GetChildAt(i), aTree);
+ }
+}
+
+void
+DocAccessibleChildBase::ShowEvent(AccShowEvent* aShowEvent)
+{
+ Accessible* parent = aShowEvent->Parent();
+ uint64_t parentID = parent->IsDoc() ? 0 : reinterpret_cast<uint64_t>(parent->UniqueID());
+ uint32_t idxInParent = aShowEvent->InsertionIndex();
+ nsTArray<AccessibleData> shownTree;
+ ShowEventData data(parentID, idxInParent, shownTree);
+ SerializeTree(aShowEvent->GetAccessible(), data.NewTree());
+ SendShowEvent(data, aShowEvent->IsFromUserInput());
+}
+
+void
+DocAccessibleChildBase::HideEvent(const uint64_t& aRootID, const bool& aFromUser)
+{
+ SendHideEvent(aRootID, aFromUser);
+}
+
+} // namespace a11y
+} // namespace mozilla
+
new file mode 100644
--- /dev/null
+++ b/accessible/ipc/DocAccessibleChildBase.h
@@ -0,0 +1,71 @@
+/* -*- 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/. */
+
+#ifndef mozilla_a11y_DocAccessibleChildBase_h
+#define mozilla_a11y_DocAccessibleChildBase_h
+
+#include "mozilla/a11y/DocAccessible.h"
+#include "mozilla/a11y/PDocAccessibleChild.h"
+#include "nsISupportsImpl.h"
+
+namespace mozilla {
+namespace a11y {
+
+class Accessible;
+class AccShowEvent;
+
+class DocAccessibleChildBase : public PDocAccessibleChild
+{
+public:
+ explicit DocAccessibleChildBase(DocAccessible* aDoc)
+ : mDoc(aDoc)
+ {
+ MOZ_COUNT_CTOR(DocAccessibleChildBase);
+ }
+
+ ~DocAccessibleChildBase()
+ {
+ // Shutdown() should have been called, but maybe it isn't if the process is
+ // killed?
+ MOZ_ASSERT(!mDoc);
+ if (mDoc) {
+ mDoc->SetIPCDoc(nullptr);
+ }
+
+ MOZ_COUNT_DTOR(DocAccessibleChildBase);
+ }
+
+ void Shutdown()
+ {
+ mDoc->SetIPCDoc(nullptr);
+ mDoc = nullptr;
+ SendShutdown();
+ }
+
+ void ShowEvent(AccShowEvent* aShowEvent);
+ void HideEvent(const uint64_t& aRootID, const bool& aFromUser);
+
+ virtual void ActorDestroy(ActorDestroyReason) override
+ {
+ if (!mDoc) {
+ return;
+ }
+
+ mDoc->SetIPCDoc(nullptr);
+ mDoc = nullptr;
+ }
+
+protected:
+ static uint32_t InterfacesFor(Accessible* aAcc);
+ static void SerializeTree(Accessible* aRoot, nsTArray<AccessibleData>& aTree);
+
+ DocAccessible* mDoc;
+};
+
+} // namespace a11y
+} // namespace mozilla
+
+#endif // mozilla_a11y_DocAccessibleChildBase_h
--- a/accessible/ipc/DocAccessibleParent.cpp
+++ b/accessible/ipc/DocAccessibleParent.cpp
@@ -1,17 +1,16 @@
/* -*- 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 "DocAccessibleParent.h"
#include "mozilla/a11y/Platform.h"
-#include "ProxyAccessible.h"
#include "mozilla/dom/TabParent.h"
#include "xpcAccessibleDocument.h"
#include "xpcAccEvents.h"
#include "nsAccUtils.h"
#include "nsCoreUtils.h"
namespace mozilla {
namespace a11y {
@@ -98,19 +97,34 @@ DocAccessibleParent::AddSubtree(ProxyAcc
}
if (mAccessibles.Contains(newChild.ID())) {
NS_ERROR("ID already in use");
return 0;
}
auto role = static_cast<a11y::role>(newChild.Role());
+
+#if defined(XP_WIN)
+ const IAccessibleHolder& proxyStream = newChild.COMProxy();
+ RefPtr<IAccessible> comPtr(proxyStream.Get());
+ if (!comPtr) {
+ NS_ERROR("Could not obtain remote IAccessible interface");
+ return 0;
+ }
+
+ ProxyAccessible* newProxy =
+ new ProxyAccessible(newChild.ID(), aParent, this, role,
+ newChild.Interfaces(), comPtr);
+#else
ProxyAccessible* newProxy =
new ProxyAccessible(newChild.ID(), aParent, this, role,
newChild.Interfaces());
+#endif
+
aParent->AddChildAt(aIdxInParent, newProxy);
mAccessibles.PutEntry(newChild.ID())->mProxy = newProxy;
ProxyCreated(newProxy, newChild.Interfaces());
uint32_t accessibles = 1;
uint32_t kids = newChild.ChildrenCount();
for (uint32_t i = 0; i < kids; i++) {
uint32_t consumed = AddSubtree(newProxy, aNewTree, aIdx + accessibles, i);
@@ -447,10 +461,31 @@ DocAccessibleParent::CheckDocTree() cons
xpcAccessibleGeneric*
DocAccessibleParent::GetXPCAccessible(ProxyAccessible* aProxy)
{
xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this);
MOZ_ASSERT(doc);
return doc->GetXPCAccessible(aProxy);
}
+
+#if defined(XP_WIN)
+bool
+DocAccessibleParent::RecvCOMProxy(const IAccessibleHolder& aCOMProxy,
+ IAccessibleHolder* aParentCOMProxy)
+{
+ RefPtr<IAccessible> ptr(aCOMProxy.Get());
+ SetCOMInterface(ptr);
+
+ Accessible* outerDoc = OuterDocOfRemoteBrowser();
+ MOZ_ASSERT(outerDoc);
+ IAccessible* rawNative = nullptr;
+ if (outerDoc) {
+ outerDoc->GetNativeInterface((void**) &rawNative);
+ }
+
+ aParentCOMProxy->Set(IAccessibleHolder::COMPtrType(rawNative));
+ return true;
+}
+#endif // defined(XP_WIN)
+
} // a11y
} // mozilla
--- a/accessible/ipc/DocAccessibleParent.h
+++ b/accessible/ipc/DocAccessibleParent.h
@@ -3,18 +3,18 @@
/* 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/. */
#ifndef mozilla_a11y_DocAccessibleParent_h
#define mozilla_a11y_DocAccessibleParent_h
#include "nsAccessibilityService.h"
-#include "ProxyAccessible.h"
#include "mozilla/a11y/PDocAccessibleParent.h"
+#include "mozilla/a11y/ProxyAccessible.h"
#include "nsClassHashtable.h"
#include "nsHashKeys.h"
#include "nsISupportsImpl.h"
namespace mozilla {
namespace a11y {
class xpcAccessibleGeneric;
@@ -137,16 +137,21 @@ public:
const ProxyAccessible* GetAccessible(uintptr_t aID) const
{ return const_cast<DocAccessibleParent*>(this)->GetAccessible(aID); }
size_t ChildDocCount() const { return mChildDocs.Length(); }
const DocAccessibleParent* ChildDocAt(size_t aIdx) const
{ return mChildDocs[aIdx]; }
+#if defined(XP_WIN)
+ virtual bool RecvCOMProxy(const IAccessibleHolder& aCOMProxy,
+ IAccessibleHolder* aParentCOMProxy) override;
+#endif
+
private:
class ProxyEntry : public PLDHashEntryHdr
{
public:
explicit ProxyEntry(const void*) : mProxy(nullptr) {}
ProxyEntry(ProxyEntry&& aOther) :
mProxy(aOther.mProxy) { aOther.mProxy = nullptr; }
--- a/accessible/ipc/moz.build
+++ b/accessible/ipc/moz.build
@@ -1,53 +1,42 @@
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# 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/.
-IPDL_SOURCES += ['PDocAccessible.ipdl']
+if CONFIG['OS_ARCH'] == 'WINNT':
+ DIRS += ['win']
+ LOCAL_INCLUDES += [
+ '/accessible/windows/ia2',
+ '/accessible/windows/msaa',
+ ]
+else:
+ DIRS += ['other']
+
+if CONFIG['GNU_CXX']:
+ CXXFLAGS += ['-Wno-error=shadow']
# with --disable-accessibility we need to compile PDocAccessible.ipdl, but not
# the C++.
if CONFIG['ACCESSIBILITY']:
EXPORTS.mozilla.a11y += [
- 'DocAccessibleChild.h',
+ 'DocAccessibleChildBase.h',
'DocAccessibleParent.h',
'ProxyAccessible.h'
]
- SOURCES += [
- 'DocAccessibleChild.cpp',
+ UNIFIED_SOURCES += [
+ 'DocAccessibleChildBase.cpp',
'DocAccessibleParent.cpp',
'ProxyAccessible.cpp'
]
LOCAL_INCLUDES += [
- '../base',
- '../generic',
- '../xpcom',
+ '/accessible/base',
+ '/accessible/generic',
+ '/accessible/xpcom',
]
- if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
- LOCAL_INCLUDES += [
- '/accessible/atk',
- ]
- elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
- LOCAL_INCLUDES += [
- '/accessible/windows/ia2',
- '/accessible/windows/msaa',
- ]
- elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
- LOCAL_INCLUDES += [
- '/accessible/mac',
- ]
- else:
- LOCAL_INCLUDES += [
- '/accessible/other',
- ]
-
- FINAL_LIBRARY = 'xul'
-
include('/ipc/chromium/chromium-config.mozbuild')
-if CONFIG['GNU_CXX']:
- CXXFLAGS += ['-Wno-error=shadow']
+FINAL_LIBRARY = 'xul'
rename from accessible/ipc/DocAccessibleChild.cpp
rename to accessible/ipc/other/DocAccessibleChild.cpp
--- a/accessible/ipc/DocAccessibleChild.cpp
+++ b/accessible/ipc/other/DocAccessibleChild.cpp
@@ -19,73 +19,16 @@
#include "nsAccUtils.h"
#ifdef MOZ_ACCESSIBILITY_ATK
#include "AccessibleWrap.h"
#endif
namespace mozilla {
namespace a11y {
-static uint32_t
-InterfacesFor(Accessible* aAcc)
-{
- uint32_t interfaces = 0;
- if (aAcc->IsHyperText() && aAcc->AsHyperText()->IsTextRole())
- interfaces |= Interfaces::HYPERTEXT;
-
- if (aAcc->IsLink())
- interfaces |= Interfaces::HYPERLINK;
-
- if (aAcc->HasNumericValue())
- interfaces |= Interfaces::VALUE;
-
- if (aAcc->IsImage())
- interfaces |= Interfaces::IMAGE;
-
- if (aAcc->IsTable()) {
- interfaces |= Interfaces::TABLE;
- }
-
- if (aAcc->IsTableCell())
- interfaces |= Interfaces::TABLECELL;
-
- if (aAcc->IsDoc())
- interfaces |= Interfaces::DOCUMENT;
-
- if (aAcc->IsSelect()) {
- interfaces |= Interfaces::SELECTION;
- }
-
- if (aAcc->ActionCount()) {
- interfaces |= Interfaces::ACTION;
- }
-
- return interfaces;
-}
-
-static void
-SerializeTree(Accessible* aRoot, nsTArray<AccessibleData>& aTree)
-{
- uint64_t id = reinterpret_cast<uint64_t>(aRoot->UniqueID());
- uint32_t role = aRoot->Role();
- uint32_t childCount = aRoot->ChildCount();
- uint32_t interfaces = InterfacesFor(aRoot);
-
- // OuterDocAccessibles are special because we don't want to serialize the
- // child doc here, we'll call PDocAccessibleConstructor in
- // NotificationController.
- MOZ_ASSERT(!aRoot->IsDoc(), "documents shouldn't be serialized");
- if (aRoot->IsOuterDoc())
- childCount = 0;
-
- aTree.AppendElement(AccessibleData(id, role, childCount, interfaces));
- for (uint32_t i = 0; i < childCount; i++)
- SerializeTree(aRoot->GetChildAt(i), aTree);
-}
-
Accessible*
DocAccessibleChild::IdToAccessible(const uint64_t& aID) const
{
if (!aID)
return mDoc;
if (!mDoc)
return nullptr;
@@ -137,28 +80,16 @@ DocAccessibleChild::IdToTableCellAccessi
TableAccessible*
DocAccessibleChild::IdToTableAccessible(const uint64_t& aID) const
{
Accessible* acc = IdToAccessible(aID);
return (acc && acc->IsTable()) ? acc->AsTable() : nullptr;
}
-void
-DocAccessibleChild::ShowEvent(AccShowEvent* aShowEvent)
-{
- Accessible* parent = aShowEvent->Parent();
- uint64_t parentID = parent->IsDoc() ? 0 : reinterpret_cast<uint64_t>(parent->UniqueID());
- uint32_t idxInParent = aShowEvent->InsertionIndex();
- nsTArray<AccessibleData> shownTree;
- ShowEventData data(parentID, idxInParent, shownTree);
- SerializeTree(aShowEvent->GetAccessible(), data.NewTree());
- SendShowEvent(data, aShowEvent->IsFromUserInput());
-}
-
bool
DocAccessibleChild::RecvState(const uint64_t& aID, uint64_t* aState)
{
Accessible* acc = IdToAccessible(aID);
if (!acc) {
*aState = states::DEFUNCT;
return true;
}
rename from accessible/ipc/DocAccessibleChild.h
rename to accessible/ipc/other/DocAccessibleChild.h
--- a/accessible/ipc/DocAccessibleChild.h
+++ b/accessible/ipc/other/DocAccessibleChild.h
@@ -2,68 +2,46 @@
/* 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/. */
#ifndef mozilla_a11y_DocAccessibleChild_h
#define mozilla_a11y_DocAccessibleChild_h
-#include "mozilla/a11y/DocAccessible.h"
-#include "mozilla/a11y/PDocAccessibleChild.h"
-#include "nsISupportsImpl.h"
+#include "mozilla/a11y/DocAccessibleChildBase.h"
namespace mozilla {
namespace a11y {
+
class Accessible;
class HyperTextAccessible;
class TextLeafAccessible;
class ImageAccessible;
class TableAccessible;
class TableCellAccessible;
-class AccShowEvent;
- /*
- * These objects handle content side communication for an accessible document,
- * and their lifetime is the same as the document they represent.
- */
-class DocAccessibleChild : public PDocAccessibleChild
+/*
+ * These objects handle content side communication for an accessible document,
+ * and their lifetime is the same as the document they represent.
+ */
+class DocAccessibleChild : public DocAccessibleChildBase
{
public:
- explicit DocAccessibleChild(DocAccessible* aDoc) :
- mDoc(aDoc)
- { MOZ_COUNT_CTOR(DocAccessibleChild); }
+ explicit DocAccessibleChild(DocAccessible* aDoc)
+ : DocAccessibleChildBase(aDoc)
+ {
+ MOZ_COUNT_CTOR_INHERITED(DocAccessibleChild, DocAccessibleChildBase);
+ }
+
~DocAccessibleChild()
{
- // Shutdown() should have been called, but maybe it isn't if the process is
- // killed?
- MOZ_ASSERT(!mDoc);
- if (mDoc)
- mDoc->SetIPCDoc(nullptr);
- MOZ_COUNT_DTOR(DocAccessibleChild);
+ MOZ_COUNT_DTOR_INHERITED(DocAccessibleChild, DocAccessibleChildBase);
}
- void Shutdown()
- {
- mDoc->SetIPCDoc(nullptr);
- mDoc = nullptr;
- SendShutdown();
- }
-
- virtual void ActorDestroy(ActorDestroyReason) override
- {
- if (!mDoc)
- return;
-
- mDoc->SetIPCDoc(nullptr);
- mDoc = nullptr;
- }
-
- void ShowEvent(AccShowEvent* aShowEvent);
-
/*
* Return the state for the accessible with given ID.
*/
virtual bool RecvState(const uint64_t& aID, uint64_t* aState) override;
/*
* Return the native state for the accessible with given ID.
*/
@@ -491,16 +469,14 @@ private:
HyperTextAccessible* IdToHyperTextAccessible(const uint64_t& aID) const;
TextLeafAccessible* IdToTextLeafAccessible(const uint64_t& aID) const;
ImageAccessible* IdToImageAccessible(const uint64_t& aID) const;
TableCellAccessible* IdToTableCellAccessible(const uint64_t& aID) const;
TableAccessible* IdToTableAccessible(const uint64_t& aID) const;
bool PersistentPropertiesToArray(nsIPersistentProperties* aProps,
nsTArray<Attribute>* aAttributes);
-
- DocAccessible* mDoc;
};
}
}
#endif
rename from accessible/ipc/PDocAccessible.ipdl
rename to accessible/ipc/other/PDocAccessible.ipdl
copy from accessible/ipc/moz.build
copy to accessible/ipc/other/moz.build
--- a/accessible/ipc/moz.build
+++ b/accessible/ipc/other/moz.build
@@ -6,48 +6,39 @@
IPDL_SOURCES += ['PDocAccessible.ipdl']
# with --disable-accessibility we need to compile PDocAccessible.ipdl, but not
# the C++.
if CONFIG['ACCESSIBILITY']:
EXPORTS.mozilla.a11y += [
'DocAccessibleChild.h',
- 'DocAccessibleParent.h',
'ProxyAccessible.h'
]
SOURCES += [
'DocAccessibleChild.cpp',
- 'DocAccessibleParent.cpp',
'ProxyAccessible.cpp'
]
LOCAL_INCLUDES += [
- '../base',
- '../generic',
- '../xpcom',
+ '../../base',
+ '../../generic',
+ '../../xpcom',
]
if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
LOCAL_INCLUDES += [
'/accessible/atk',
]
- elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
- LOCAL_INCLUDES += [
- '/accessible/windows/ia2',
- '/accessible/windows/msaa',
- ]
elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
LOCAL_INCLUDES += [
'/accessible/mac',
]
else:
LOCAL_INCLUDES += [
'/accessible/other',
]
- FINAL_LIBRARY = 'xul'
-
include('/ipc/chromium/chromium-config.mozbuild')
if CONFIG['GNU_CXX']:
CXXFLAGS += ['-Wno-error=shadow']
new file mode 100644
--- /dev/null
+++ b/accessible/ipc/win/COMPtrTypes.cpp
@@ -0,0 +1,50 @@
+/* -*- 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 "mozilla/a11y/COMPtrTypes.h"
+
+#include "MainThreadUtils.h"
+#include "mozilla/a11y/Accessible.h"
+#include "mozilla/Move.h"
+#include "mozilla/mscom/MainThreadHandoff.h"
+#include "mozilla/RefPtr.h"
+
+using mozilla::mscom::MainThreadHandoff;
+using mozilla::mscom::STAUniquePtr;
+
+namespace mozilla {
+namespace a11y {
+
+IAccessibleHolder
+CreateHolderFromAccessible(Accessible* aAccToWrap)
+{
+ MOZ_ASSERT(aAccToWrap && NS_IsMainThread());
+ if (!aAccToWrap) {
+ return nullptr;
+ }
+
+ IAccessible* rawNative = nullptr;
+ aAccToWrap->GetNativeInterface((void**)&rawNative);
+ MOZ_ASSERT(rawNative);
+ if (!rawNative) {
+ return nullptr;
+ }
+
+ STAUniquePtr<IAccessible> iaToProxy(rawNative);
+
+ IAccessible* rawIntercepted = nullptr;
+ HRESULT hr = MainThreadHandoff::WrapInterface(iaToProxy, &rawIntercepted);
+ MOZ_ASSERT(SUCCEEDED(hr));
+ if (FAILED(hr)) {
+ return nullptr;
+ }
+
+ IAccessibleHolder::COMPtrType iaIntercepted(rawIntercepted);
+ return IAccessibleHolder(Move(iaIntercepted));
+}
+
+} // namespace a11y
+} // namespace mozilla
new file mode 100644
--- /dev/null
+++ b/accessible/ipc/win/COMPtrTypes.h
@@ -0,0 +1,27 @@
+/* -*- 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/. */
+
+#ifndef mozilla_a11y_COMPtrTypes_h
+#define mozilla_a11y_COMPtrTypes_h
+
+#include "mozilla/mscom/COMPtrHolder.h"
+
+#include <oleacc.h>
+
+namespace mozilla {
+namespace a11y {
+
+typedef mozilla::mscom::COMPtrHolder<IAccessible, IID_IAccessible> IAccessibleHolder;
+
+class Accessible;
+
+IAccessibleHolder
+CreateHolderFromAccessible(Accessible* aAccToWrap);
+
+} // namespace a11y
+} // namespace mozilla
+
+#endif // mozilla_a11y_COMPtrTypes_h
new file mode 100644
--- /dev/null
+++ b/accessible/ipc/win/DocAccessibleChild.cpp
@@ -0,0 +1,36 @@
+/* -*- 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 "DocAccessibleChild.h"
+
+#include "Accessible-inl.h"
+
+namespace mozilla {
+namespace a11y {
+
+DocAccessibleChild::DocAccessibleChild(DocAccessible* aDoc)
+ : DocAccessibleChildBase(aDoc)
+{
+ MOZ_COUNT_CTOR_INHERITED(DocAccessibleChild, DocAccessibleChildBase);
+}
+
+DocAccessibleChild::~DocAccessibleChild()
+{
+ MOZ_COUNT_DTOR_INHERITED(DocAccessibleChild, DocAccessibleChildBase);
+}
+
+void
+DocAccessibleChild::SendCOMProxy(const IAccessibleHolder& aProxy)
+{
+ IAccessibleHolder parentProxy;
+ PDocAccessibleChild::SendCOMProxy(aProxy, &parentProxy);
+ mParentProxy.reset(parentProxy.Release());
+ MOZ_ASSERT(mParentProxy);
+}
+
+} // namespace a11y
+} // namespace mozilla
+
new file mode 100644
--- /dev/null
+++ b/accessible/ipc/win/DocAccessibleChild.h
@@ -0,0 +1,37 @@
+/* -*- 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/. */
+
+#ifndef mozilla_a11y_DocAccessibleChild_h
+#define mozilla_a11y_DocAccessibleChild_h
+
+#include "mozilla/a11y/COMPtrTypes.h"
+#include "mozilla/a11y/DocAccessibleChildBase.h"
+#include "mozilla/mscom/Ptr.h"
+
+namespace mozilla {
+namespace a11y {
+
+/*
+ * These objects handle content side communication for an accessible document,
+ * and their lifetime is the same as the document they represent.
+ */
+class DocAccessibleChild : public DocAccessibleChildBase
+{
+public:
+ explicit DocAccessibleChild(DocAccessible* aDoc);
+ ~DocAccessibleChild();
+
+ void SendCOMProxy(const IAccessibleHolder& aProxy);
+ IAccessible* GetParentIAccessible() const { return mParentProxy.get(); }
+
+private:
+ mscom::ProxyUniquePtr<IAccessible> mParentProxy;
+};
+
+} // namespace a11y
+} // namespace mozilla
+
+#endif // mozilla_a11y_DocAccessibleChild_h
copy from accessible/ipc/PDocAccessible.ipdl
copy to accessible/ipc/win/PDocAccessible.ipdl
--- a/accessible/ipc/PDocAccessible.ipdl
+++ b/accessible/ipc/win/PDocAccessible.ipdl
@@ -1,54 +1,44 @@
/* -*- 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 protocol PFileDescriptorSet;
include protocol PBrowser;
-include "mozilla/GfxMessageUtils.h";
-
-using nsIntRect from "nsRect.h";
-using mozilla::gfx::IntSize from "mozilla/gfx/Point.h";
-using mozilla::gfx::IntPoint from "mozilla/gfx/Point.h";
+using mozilla::a11y::IAccessibleHolder from "mozilla/a11y/COMPtrTypes.h";
namespace mozilla {
namespace a11y {
struct AccessibleData
{
uint64_t ID;
uint32_t Role;
uint32_t ChildrenCount;
uint32_t Interfaces;
+ IAccessibleHolder COMProxy;
};
struct ShowEventData
{
uint64_t ID;
uint32_t Idx;
AccessibleData[] NewTree;
};
struct Attribute
{
nsCString Name;
nsString Value;
};
-struct RelationTargets
-{
- uint32_t Type;
- uint64_t[] Targets;
-};
-
-prio(normal upto high) sync protocol PDocAccessible
+sync protocol PDocAccessible
{
manager PBrowser;
parent:
async Shutdown();
/*
* Notify the parent process the document in the child process is firing an
@@ -65,197 +55,19 @@ parent:
async RoleChangedEvent(uint32_t aRole);
/*
* Tell the parent document to bind the existing document as a new child
* document.
*/
async BindChildDoc(PDocAccessible aChildDoc, uint64_t aID);
+ // For now we'll add the command to send the proxy here. This might move to
+ // PDocAccessible constructor in PBrowser.
+ sync COMProxy(IAccessibleHolder aDocCOMProxy)
+ returns(IAccessibleHolder aParentCOMProxy);
+
child:
async __delete__();
-
- // Accessible
- prio(high) sync State(uint64_t aID) returns(uint64_t states);
- prio(high) sync NativeState(uint64_t aID) returns(uint64_t states);
- prio(high) sync Name(uint64_t aID) returns(nsString name);
- prio(high) sync Value(uint64_t aID) returns(nsString value);
- prio(high) sync Help(uint64_t aID) returns(nsString help);
- prio(high) sync Description(uint64_t aID) returns(nsString desc);
- prio(high) sync Attributes(uint64_t aID) returns(Attribute[] attributes);
- prio(high) sync RelationByType(uint64_t aID, uint32_t aRelationType)
- returns(uint64_t[] targets);
- prio(high) sync Relations(uint64_t aID) returns(RelationTargets[] relations);
- prio(high) sync IsSearchbox(uint64_t aID) returns(bool retval);
- prio(high) sync LandmarkRole(uint64_t aID) returns(nsString landmark);
- prio(high) sync ARIARoleAtom(uint64_t aID) returns(nsString role);
- prio(high) sync GetLevelInternal(uint64_t aID) returns(int32_t aLevel);
- async ScrollTo(uint64_t aID, uint32_t aScrollType);
- async ScrollToPoint(uint64_t aID, uint32_t aScrollType, int32_t aX,
- int32_t aY);
-
- // AccessibleText
-
- // TextSubstring is getText in IDL.
- prio(high) sync CaretLineNumber(uint64_t aID) returns(int32_t aLineNumber);
- prio(high) sync CaretOffset(uint64_t aID) returns(int32_t aOffset);
- async SetCaretOffset(uint64_t aID, int32_t aOffset);
- prio(high) sync CharacterCount(uint64_t aID) returns(int32_t aCount);
- prio(high) sync SelectionCount(uint64_t aID) returns(int32_t aCount);
- prio(high) sync TextSubstring(uint64_t aID, int32_t aStartOffset, int32_t
- aEndOffset) returns(nsString aText, bool aValid);
- prio(high) sync GetTextAfterOffset(uint64_t aID, int32_t aOffset, int32_t aBoundaryType)
- returns(nsString aText, int32_t aStartOffset, int32_t aEndOffset);
- prio(high) sync GetTextAtOffset(uint64_t aID, int32_t aOffset, int32_t aBoundaryType)
- returns(nsString aText, int32_t aStartOffset, int32_t aEndOffset);
-
- prio(high) sync GetTextBeforeOffset(uint64_t aID, int32_t aOffset, int32_t aBoundaryType)
- returns(nsString aText, int32_t aStartOffset, int32_t aEndOffset);
- prio(high) sync CharAt(uint64_t aID, int32_t aOffset) returns(uint16_t aChar);
-
- prio(high) sync TextAttributes(uint64_t aID, bool aIncludeDefAttrs, int32_t aOffset)
- returns(Attribute[] aAttributes, int32_t aStartOffset, int32_t aEndOffset);
- prio(high) sync DefaultTextAttributes(uint64_t aID) returns(Attribute[] aAttributes);
-
- prio(high) sync TextBounds(uint64_t aID, int32_t aStartOffset, int32_t aEndOffset,
- uint32_t aCoordType)
- returns(nsIntRect aRetVal);
- prio(high) sync CharBounds(uint64_t aID, int32_t aOffset, uint32_t aCoordType)
- returns(nsIntRect aRetVal);
-
- prio(high) sync OffsetAtPoint(uint64_t aID, int32_t aX, int32_t aY, uint32_t aCoordType)
- returns(int32_t aRetVal);
-
- prio(high) sync SelectionBoundsAt(uint64_t aID, int32_t aSelectionNum)
- returns(bool aSucceeded, nsString aData, int32_t aStartOffset, int32_t aEndOffset);
- prio(high) sync SetSelectionBoundsAt(uint64_t aID, int32_t aSelectionNum,
- int32_t aStartOffset, int32_t aEndOffset)
- returns(bool aSucceeded);
- prio(high) sync AddToSelection(uint64_t aID, int32_t aStartOffset, int32_t aEndOffset)
- returns(bool aSucceeded);
- prio(high) sync RemoveFromSelection(uint64_t aID, int32_t aSelectionNum)
- returns(bool aSucceeded);
-
- async ScrollSubstringTo(uint64_t aID, int32_t aStartOffset, int32_t aEndOffset,
- uint32_t aScrollType);
- async ScrollSubstringToPoint(uint64_t aID,
- int32_t aStartOffset,
- int32_t aEndOffset,
- uint32_t aCoordinateType,
- int32_t aX, int32_t aY);
-
- prio(high) sync Text(uint64_t aID) returns(nsString aText);
- prio(high) sync ReplaceText(uint64_t aID, nsString aText);
- prio(high) sync InsertText(uint64_t aID, nsString aText, int32_t aPosition)
- returns(bool aValid);
- prio(high) sync CopyText(uint64_t aID, int32_t aStartPos, int32_t aEndPos)
- returns(bool aValid);
- prio(high) sync CutText(uint64_t aID, int32_t aStartPos, int32_t aEndPos)
- returns(bool aValid);
- prio(high) sync DeleteText(uint64_t aID, int32_t aStartPos, int32_t aEndPos)
- returns(bool aValid);
- prio(high) sync PasteText(uint64_t aID, int32_t aPosition)
- returns(bool aValid);
-
- prio(high) sync ImagePosition(uint64_t aID, uint32_t aCoordType) returns(IntPoint aRetVal);
- prio(high) sync ImageSize(uint64_t aID) returns(IntSize aRetVal);
-
- prio(high) sync StartOffset(uint64_t aID) returns(uint32_t aRetVal, bool aOk);
- prio(high) sync EndOffset(uint64_t aID) returns(uint32_t aRetVal, bool aOk);
- prio(high) sync IsLinkValid(uint64_t aID) returns(bool aRetVal);
- prio(high) sync AnchorCount(uint64_t aID) returns(uint32_t aRetVal, bool aOk);
- prio(high) sync AnchorURIAt(uint64_t aID, uint32_t aIndex) returns(nsCString aURI, bool aOk);
- prio(high) sync AnchorAt(uint64_t aID, uint32_t aIndex) returns(uint64_t aIDOfAnchor, bool aOk);
-
- prio(high) sync LinkCount(uint64_t aID) returns(uint32_t aCount);
- prio(high) sync LinkAt(uint64_t aID, uint32_t aIndex) returns(uint64_t aIDOfLink, bool aOk);
- prio(high) sync LinkIndexOf(uint64_t aID, uint64_t aLinkID) returns(int32_t aIndex);
- prio(high) sync LinkIndexAtOffset(uint64_t aID, uint32_t aOffset) returns(int32_t aIndex);
-
- prio(high) sync TableOfACell(uint64_t aID) returns(uint64_t aTableID, bool aOk);
- prio(high) sync ColIdx(uint64_t aID) returns(uint32_t aIndex);
- prio(high) sync RowIdx(uint64_t aID) returns(uint32_t aIndex);
- prio(high) sync ColExtent(uint64_t aID) returns(uint32_t aExtent);
- prio(high) sync RowExtent(uint64_t aID) returns(uint32_t aExtent);
- prio(high) sync ColHeaderCells(uint64_t aID) returns(uint64_t[] aCells);
- prio(high) sync RowHeaderCells(uint64_t aID) returns(uint64_t[] aCells);
- prio(high) sync IsCellSelected(uint64_t aID) returns(bool aSelected);
-
- prio(high) sync TableCaption(uint64_t aID) returns(uint64_t aCaptionID, bool aOk);
- prio(high) sync TableSummary(uint64_t aID) returns(nsString aSummary);
- prio(high) sync TableColumnCount(uint64_t aID) returns(uint32_t aColCount);
- prio(high) sync TableRowCount(uint64_t aID) returns(uint32_t aRowCount);
- prio(high) sync TableCellAt(uint64_t aID, uint32_t aRow, uint32_t aCol) returns(uint64_t aCellID, bool aOk);
- prio(high) sync TableCellIndexAt(uint64_t aID, uint32_t aRow, uint32_t aCol) returns(int32_t aIndex);
- prio(high) sync TableColumnIndexAt(uint64_t aID, uint32_t aCellIndex) returns(int32_t aCol);
- prio(high) sync TableRowIndexAt(uint64_t aID, uint32_t aCellIndex) returns(int32_t aRow);
- prio(high) sync TableRowAndColumnIndicesAt(uint64_t aID, uint32_t aCellIndex) returns(int32_t aRow, int32_t aCol);
- prio(high) sync TableColumnExtentAt(uint64_t aID, uint32_t aRow, uint32_t aCol) returns(uint32_t aExtent);
- prio(high) sync TableRowExtentAt(uint64_t aID, uint32_t aRow, uint32_t aCol) returns(uint32_t aExtent);
- prio(high) sync TableColumnDescription(uint64_t aID, uint32_t aCol) returns(nsString aDescription);
- prio(high) sync TableRowDescription(uint64_t aID, uint32_t aRow) returns(nsString aDescription);
- prio(high) sync TableColumnSelected(uint64_t aID, uint32_t aCol) returns(bool aSelected);
- prio(high) sync TableRowSelected(uint64_t aID, uint32_t aRow) returns(bool aSelected);
- prio(high) sync TableCellSelected(uint64_t aID, uint32_t aRow, uint32_t aCol) returns(bool aSelected);
- prio(high) sync TableSelectedCellCount(uint64_t aID) returns(uint32_t aSelectedCells);
- prio(high) sync TableSelectedColumnCount(uint64_t aID) returns(uint32_t aSelectedColumns);
- prio(high) sync TableSelectedRowCount(uint64_t aID) returns(uint32_t aSelectedRows);
- prio(high) sync TableSelectedCells(uint64_t aID) returns(uint64_t[] aCellIDs);
- prio(high) sync TableSelectedCellIndices(uint64_t aID) returns(uint32_t[] aCellIndeces);
- prio(high) sync TableSelectedColumnIndices(uint64_t aID) returns(uint32_t[] aColumnIndeces);
- prio(high) sync TableSelectedRowIndices(uint64_t aID) returns(uint32_t[] aRowIndeces);
- prio(high) sync TableSelectColumn(uint64_t aID, uint32_t aCol);
- prio(high) sync TableSelectRow(uint64_t aID, uint32_t aRow);
- prio(high) sync TableUnselectColumn(uint64_t aID, uint32_t aCol);
- prio(high) sync TableUnselectRow(uint64_t aID, uint32_t aRow);
- prio(high) sync TableIsProbablyForLayout(uint64_t aID) returns(bool aForLayout);
- prio(high) sync AtkTableColumnHeader(uint64_t aID, int32_t aCol)
- returns(uint64_t aHeaderID, bool aOk);
- prio(high) sync AtkTableRowHeader(uint64_t aID, int32_t aRow)
- returns(uint64_t aHeaderID, bool aOk);
-
- prio(high) sync SelectedItems(uint64_t aID) returns(uint64_t[] aSelectedItemIDs);
- prio(high) sync SelectedItemCount(uint64_t aID) returns(uint32_t aCount);
- prio(high) sync GetSelectedItem(uint64_t aID, uint32_t aIndex) returns(uint64_t aSelected, bool aOk);
- prio(high) sync IsItemSelected(uint64_t aID, uint32_t aIndex) returns(bool aSelected);
- prio(high) sync AddItemToSelection(uint64_t aID, uint32_t aIndex) returns(bool aSuccess);
- prio(high) sync RemoveItemFromSelection(uint64_t aID, uint32_t aIndex) returns(bool aSuccess);
- prio(high) sync SelectAll(uint64_t aID) returns(bool aSuccess);
- prio(high) sync UnselectAll(uint64_t aID) returns(bool aSuccess);
-
- async TakeSelection(uint64_t aID);
- async SetSelected(uint64_t aID, bool aSelected);
-
- prio(high) sync DoAction(uint64_t aID, uint8_t aIndex) returns(bool aSuccess);
- prio(high) sync ActionCount(uint64_t aID) returns(uint8_t aCount);
- prio(high) sync ActionDescriptionAt(uint64_t aID, uint8_t aIndex) returns(nsString aDescription);
- prio(high) sync ActionNameAt(uint64_t aID, uint8_t aIndex) returns(nsString aName);
- prio(high) sync AccessKey(uint64_t aID) returns(uint32_t aKey, uint32_t aModifierMask);
- prio(high) sync KeyboardShortcut(uint64_t aID) returns(uint32_t aKey, uint32_t aModifierMask);
- prio(high) sync AtkKeyBinding(uint64_t aID) returns(nsString aResult);
-
- prio(high) sync CurValue(uint64_t aID) returns(double aValue);
- prio(high) sync SetCurValue(uint64_t aID, double aValue) returns(bool aRetVal);
- prio(high) sync MinValue(uint64_t aID) returns(double aValue);
- prio(high) sync MaxValue(uint64_t aID) returns(double aValue);
- prio(high) sync Step(uint64_t aID) returns(double aStep);
-
- async TakeFocus(uint64_t aID);
- prio(high) sync FocusedChild(uint64_t aID)
- returns(uint64_t aChild, bool aOk);
-
- prio(high) sync Language(uint64_t aID) returns(nsString aLocale);
- prio(high) sync DocType(uint64_t aID) returns(nsString aType);
- prio(high) sync Title(uint64_t aID) returns(nsString aTitle);
- prio(high) sync URL(uint64_t aID) returns(nsString aURL);
- prio(high) sync MimeType(uint64_t aID) returns(nsString aMime);
- prio(high) sync URLDocTypeMimeType(uint64_t aID) returns(nsString aURL, nsString aDocType, nsString aMimeType);
-
- prio(high) sync AccessibleAtPoint(uint64_t aID, int32_t aX, int32_t aY, bool aNeedsScreenCoords, uint32_t aWhich)
- returns(uint64_t aResult, bool aOk);
-
- prio(high) sync Extents(uint64_t aID, bool aNeedsScreenCoords)
- returns(int32_t aX, int32_t aY, int32_t aWidth, int32_t aHeight);
- prio(high) sync DOMNodeID(uint64_t aID) returns(nsString aDOMNodeID);
};
}
}
new file mode 100644
--- /dev/null
+++ b/accessible/ipc/win/moz.build
@@ -0,0 +1,32 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# 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/.
+
+IPDL_SOURCES += ['PDocAccessible.ipdl']
+
+# with --disable-accessibility we need to compile PDocAccessible.ipdl, but not
+# the C++.
+if CONFIG['ACCESSIBILITY']:
+ EXPORTS.mozilla.a11y += [
+ 'COMPtrTypes.h',
+ 'DocAccessibleChild.h',
+ ]
+
+ SOURCES += [
+ 'COMPtrTypes.cpp',
+ 'DocAccessibleChild.cpp',
+ ]
+
+ LOCAL_INCLUDES += [
+ '/accessible/base',
+ '/accessible/generic',
+ '/accessible/windows/ia2',
+ '/accessible/windows/msaa',
+ '/accessible/xpcom',
+ ]
+
+include('/ipc/chromium/chromium-config.mozbuild')
+
+FINAL_LIBRARY = 'xul'