`AXPlatformNodeDelegate` provides a default implementation of
`GetUniqueId()` which returns the same value (1) for all nodes.
`AXPlatformNodeWin` relies on a unique ID being returned from this
method in its `GetTargetFromChildID` method.
In the world MSAA accessibility, each `HWND` may have a root
`IAccessible` object associated with it. Events are fired by calling the
`NotifyWinEvent` Win32 call and specifying:
1. The `HWND` (in our case, the one associated with our `WindowWin32`)
2. The target object (`OBJID_CLIENT` for the root `IAccessible`
associated with that `HWND`)
3. A child identifier that uniquely identifies the target node in the
tree
This child identifier can be one of:
* `CHILDID_SELF` for events targeting the root `IAccessible`.
* A positive integer that specifies the index of a direct child of the
root.
* A negative integer which, when negated, specifies the unique ID of a
child within the tree.
On receipt of an accessibility event, `AXPlatformWin` (our `IAccessible`
implementation) looks up the target `IAccessible` from the child ID
specified on the event using its `GetTargetFromChildID` method and
delegates the appropriate method call to that object.
So, why is this implemented on our `AXPlatformNodeDelegate` subclass and
not on `AXPlatformNodeWin` itself? Because the implementation of
`AXPlatformNode::GetUniqueId()` delegates this lookup to the node
delegate.
As background, `AXUniqueId` automatically assigns itself a
globally-unique value in its constructor; it tracks all used values in
an internal static pool.
Issue: https://github.com/flutter/flutter/issues/77838
Dart VM flags are passed to Flutter via an fml::CommandLine::Option that
looks something like:
{"dart-flags, "--max_profile_depth 1,--trace_service"}
We perform a prefix match to handle cases where Dart VM options take
arguments.
Adding the comment since in a recent review I found myself wondering why
we're using a prefix match to begin with. While the original author had
forgotten, the good news is, he wrote a test that covers this exact
case. This comment just removes one level of indirection for future
readers.
Implements DispatchAccessibilityAction: a pass-through method that
forwards to the engine, which calls through the Embedder API back to the
framework.
Issue: https://github.com/flutter/flutter/issues/77838
In download_dart_sdk.py, we previously ran curl with the --verbose flag
when the --verbose flag was passed to the script. This generates vast
quantities of output that is unlikely to be valuable except if we're
attempting to debug a curl download issue. In such a case we could
perhaps pass a separate --verbose-download flag as well.
Issue: https://github.com/flutter/flutter/issues/94492
In the Windows embedder, the data parameter of
FlutterWindowsEngine::DispatchSemanticsAction was a vector of bytes.
Here, we switch it to use MallocMapping since that is the type of the
data paramater on the DispatchAccessibilityAction method of
AccessibilityBridgeDelegate, which calls this method. This avoids an
extra type conversion.
* Consolidate and check JavaScript access
* Remove all `ignore: implicit_dynamic_function`
* Add `js_access_test.dart` that validates JS access
* Make `engine.dart` an exports-only library
* Fix `sdk_rewriter_test.dart` and `ci/analyze.sh` (they skipped some tests)