/* -*- 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 PBrowser; include DocAccessibleTypes; include "mozilla/GfxMessageUtils.h"; using mozilla::a11y::role from "mozilla/a11y/IPCTypes.h"; using mozilla::a11y::IAccessibleHolder from "mozilla/a11y/IPCTypes.h"; using mozilla::a11y::IDispatchHolder from "mozilla/a11y/IPCTypes.h"; using mozilla::a11y::AccType from "mozilla/a11y/IPCTypes.h"; using mozilla::a11y::AccGenericType from "mozilla/a11y/IPCTypes.h"; using mozilla::a11y::CacheUpdateType from "mozilla/a11y/IPCTypes.h"; [RefCounted] using mozilla::a11y::AccAttributes from "mozilla/a11y/IPCTypes.h"; using mozilla::WindowsHandle from "mozilla/ipc/IPCTypes.h"; using mozilla::LayoutDeviceIntRect from "Units.h"; using mozilla::gfx::Matrix4x4 from "mozilla/gfx/Matrix.h"; namespace mozilla { namespace a11y { struct AccessibleData { uint64_t ID; int32_t MsaaID; role Role; uint32_t ChildrenCount; AccType Type; AccGenericType GenericTypes; uint8_t RoleMapEntryIndex; }; struct ShowEventData { uint64_t ID; uint32_t Idx; AccessibleData[] NewTree; bool EventSuppressed; }; struct TextRangeData { uint64_t StartID; uint64_t EndID; int32_t StartOffset; int32_t EndOffset; }; [ManualDealloc, ChildImpl=virtual, ParentImpl=virtual] sync protocol PDocAccessible { manager PBrowser; parent: async Shutdown(); /* * Notify the parent process the document in the child process is firing an * event. */ async Event(uint64_t aID, uint32_t type); async ShowEvent(ShowEventData data, bool aFromUser); async HideEvent(uint64_t aRootID, bool aFromUser); async StateChangeEvent(uint64_t aID, uint64_t aState, bool aEnabled); async CaretMoveEvent(uint64_t aID, LayoutDeviceIntRect aCaretRect, int32_t aOffset, bool aIsAtEndOfLine, bool aIsSelectionCollapsed, int32_t aGranularity); async TextChangeEvent(uint64_t aID, nsString aStr, int32_t aStart, uint32_t aLen, bool aIsInsert, bool aFromUser); sync SyncTextChangeEvent(uint64_t aID, nsString aStr, int32_t aStart, uint32_t aLen, bool aIsInsert, bool aFromUser); async SelectionEvent(uint64_t aID, uint64_t aWidgetID, uint32_t aType); async RoleChangedEvent(role aRole, uint8_t aRoleMapEntryIndex); async FocusEvent(uint64_t aID, LayoutDeviceIntRect aCaretRect); async VirtualCursorChangeEvent(uint64_t aID, uint64_t aOldPosition, int32_t aOldStartOffset, int32_t aOldEndOffset, uint64_t aPosition, int32_t aStartOffset, int32_t aEndOffset, int16_t aReason, int16_t aBoundaryType, bool aFromUservcEvent); async ScrollingEvent(uint64_t aID, uint64_t aType, uint32_t aScrollX, uint32_t aScrollY, uint32_t aMaxScrollX, uint32_t aMaxScrollY); async TextSelectionChangeEvent(uint64_t aID, TextRangeData[] aSelection); /* * Tell the parent document to bind the existing document as a new child * document. */ async BindChildDoc(PDocAccessible aChildDoc, uint64_t aID); /* * Cache The World * aDispatchShowEvent is true when a show event with the first accessible in * the cache list as the target should be dispatched after the cache is * populated. The show event will have a from-user flag value of false. */ async Cache(CacheUpdateType aUpdateType, CacheData[] aData, bool aDispatchShowEvent); /* * Lists of accessibles that either gained or lost a selected state. */ async SelectedAccessiblesChanged(uint64_t[] aSelectedIDs, uint64_t[] aUnselectedIDs); /* * Tell the parent process that the given Accessibles are about to be moved * via subsequent hide and show events. */ async AccessiblesWillMove(uint64_t[] aIDs); child: /** * We use IDispatchHolder instead of IAccessibleHolder for the following two * methods because of sandboxing. IAccessible::get_accParent returns the parent * as an IDispatch. COM is not smart enough to understand that IAccessible is * derived from IDispatch, so during marshaling it attempts to QueryInterface * on the parent's proxy for IDispatch. This will fail with E_ACCESSDENIED * thanks to the sandbox. We can avoid this entirely by just giving content * the correct interface to begin with: IDispatch. */ async ParentCOMProxy(IDispatchHolder aParentCOMProxy); async EmulatedWindow(WindowsHandle aEmulatedWindowHandle, IDispatchHolder aEmulatedWindowCOMProxy); async TopLevelDocCOMProxy(IAccessibleHolder aCOMProxy); /* * Called as a result of focus shifting from chrome to content * elements through keyboard navigation. */ async RestoreFocus(); async TakeFocus(uint64_t aID); async TakeSelection(uint64_t aID); async SetSelected(uint64_t aID, bool aSelected); async ScrollTo(uint64_t aID, uint32_t aScrollType); /* * Verify the cache. Used for testing purposes. */ async VerifyCache(uint64_t aID, uint64_t aCacheDomain, AccAttributes aFields); async DoActionAsync(uint64_t aID, uint8_t aIndex); async SetCaretOffset(uint64_t aID, int32_t aOffset); async __delete__(); }; } }