It's critical that we fire mutation events first because our RemoteAccessible tree is created thus and we can't fire events on RemoteAccessibles we haven't created yet.
Beyond that, though, focus events are of primary importance.
See the comments in EventQueue::ProcessEventQueue for the reasons.
Differential Revision: https://phabricator.services.mozilla.com/D145319
This code loads automatically as an actor now, so we don't need to register the
module anymore.
Work for this was done in Bug 1645538.
Differential Revision: https://phabricator.services.mozilla.com/D145639
Adding some smoke tests so that we don't regress this feature, additional tests
for fission and for a currently broken case will be addressed later.
Differential Revision: https://phabricator.services.mozilla.com/D145476
This allows waiting for an arbitrary condition in `waitUntilCalled`. To make
this happen, we need to execute delegate calls as they happen, rather than
replaying them all at the end, this is why we need to change a little bit more
code than expected in GeckoSessionTestRule.
This also fixes some weird behavior when calling `waitUntilCalled` while
waiting on a condition that depends on the behavior of the delegate in
`waitUntilCalled`.
Differential Revision: https://phabricator.services.mozilla.com/D143958
We cannot use GeckoBundle anymore because it cannot be constructed in
the UI thread. Instead, have a set of populate methods that take
arguments and set the correct fields in the AccessibilityNodeInfo, or
its optional info objects.
These fields can be called both in the Gecko and UI thread.
Differential Revision: https://phabricator.services.mozilla.com/D144895
About pages run in the parent process. In the following patches we will
be performing some operations like pivot and getting node info in the
Android UI thread. We need to assure that "local" content still works
by calling into the gecko thread since we can't use the remote,
thread-safe cache.
Differential Revision: https://phabricator.services.mozilla.com/D144894
We should add stepValue to DateTimePrompt to support step attribute such as
`<input type="date" step="10">` etc in GeckoView.
Also, we don't have any tests for max/min attribute, so we should add it too.
Differential Revision: https://phabricator.services.mozilla.com/D145221
See the comment in the file explaining it. For a case of logging 100k numbers,
this dropped the time per number from 15 microseconds to 9 with the console
closed, and 55 microseconds to 38 with the console open. I think we could shave
off more with a native approach, but I don't know that it's worth it and it's
much more likely for that to introduce bugs.
Differential Revision: https://phabricator.services.mozilla.com/D143782
Originally, `dateTest` was added by bug 1499396. But it was still disabled.
We should add prompt tests when tapping `<input>` element. Also, since
`type=month` is GeckoView only support, we need it too.
Differential Revision: https://phabricator.services.mozilla.com/D145218
The general idea is that when extensions are installed at startup, they request permissions needed. Some examples of permissions might be access to downloads or bookmarks. This patch implements the ability to request permissions after install during runtime. A common optional permission is geolocation. The app won't request the user's location until needed.
GeckoView will provide a delegate to apps called onOptionalPrompt that provides the extension and the permissions the extension is requesting. They can then query the user to accept or reject the permission. The delegate works by listening to the browser API browser.permissions.request. Any browser API will be linked to a corresponding file and function such as ext-permissions.js::request() in this example. request() notifies observers of the topic webextension-optional-permission-prompt. ExtensionPromptObserver listens to that topic and dispatches an event GeckoView:WebExtension:OptionalPrompt. The geckoview web extension controller listens on that event and pass the extension and permissions to the skeleton delegate functions, that will get implemented by the app.
To verify this works, the test case WebExtensionTest.kt installs an extension through the package xpi. The package is created on build from moz.build to contain the extension's manifest.json and necessary scripts. Once the extension package is installed, we load the html script in the package that states when the page is clicked, trigger the browser API browser.permissions.request. The click is simulated with synthesizeTap. This request is then observed by listeners like mentioned in the previous paragraph. We verify in our skeleton delegate that the permissions provided match the ones requested.
Differential Revision: https://phabricator.services.mozilla.com/D143925
Fenix's Picture-In-Picture uses full screen mode. So it isn't same as Firefox
Desktop. When exiting full screen, Fenix's window may not same as before
entering full screen.
When this occurs,
1. When device is portrait orientation, user changes to full screen by content
script.
2. Fenix enters to full screen then orientation is changed to landscape.
3. User changes that device is changed to landscape by hand.
4. Fenix enters PiP mode. Android (Home screen) change to portrait orientation.
Then PiP window keeps landscape orientation.
5. When exiting PiP, full screen will be exited.
6. Device is landscape (by Step 3.), so Fenix window is landscape. But Gecko
restores 1.'s viewport by `nsIDOMWindowUtils.exitFullScreen`. So viewport
becomes portrait orientation size even if window is landscape orientation.
For PiP mode, although nsIDOMWindowUtils.exitFullScreen is used, it doesn't
consider this situation. So I would like to add non-restore option for it.
Differential Revision: https://phabricator.services.mozilla.com/D143992
MozShowDateTimePicker should be enough for this. We keep using click for
week / month because those don't implement a widget cross-platform.
Differential Revision: https://phabricator.services.mozilla.com/D144801
This adds new version of the GeckoView API
GeckoDisplay.surfaceChanged(), which takes a single argument of a new
type GeckoDisplay.SurfaceInfo. As well as containing fields for each
the the existing surfaceChanged() arguments, this has an additional
SurfaceControl field. This must be provided when rendering in to a
SurfaceView on SDK level 29 or greater. On earlier SDK levels, or when
rendering in to a TextureView or SurfaceTexture, this can be
null. SurfaceViewWrapper and GeckoView classes are updated to handle
this correctly. The old surfaceChanged() methods have been deprecated,
and tests have been updated to use the new version.
When provided, the SurfaceControl is passed along with the Surface
through to the widget and, when enabled, over to the GPU process. The
compositor widget then creates a child Surface from that
SurfaceControl, and renders in to that child Surface rather than the
parent one.
This works around a bug on Android 12 where following the GPU process
dying the Surface was left in an unusable state, meaning subsequent
attempts to initialize a compositor would fail. Because the Surface is
now created by the GPU process it gets destroyed when the process
dies, therefore a new Surface can successfully be created when we
reinitialize the compositor.
Differential Revision: https://phabricator.services.mozilla.com/D143485
And android.view.SurfaceControl$Transaction.
In order to generate these bindings we must increase the maximum SDK
version argument we pass to SDKProcessor to 29. However, doing so
means that we now attempt to generate bindings for both Surface's
Surface(SurfaceTexture) and Surface(SurfaceControl)
constructors. These both translate in to C++ functions with identical
signatures - Surface::New(jni::Object::Param) - causing a compilation
failure.
This patch therefore also allows the stubName property to override
constructor names, and overrides the latter to
Surface::FromSurfaceControl(), thereby avoiding the conflict.
Differential Revision: https://phabricator.services.mozilla.com/D143484
- Remove unsupported tabs API definitions that are gone in MV3.
- Mark content script APIs (superseded by scripting APIs) as MV2-only.
- Re-enable extension.getBackgroundPage in MV2 since it makes sense with
event pages, and we enabled runtime.getBackgroundPage in bug 1759308.
- Add tests that verify API availability in MV3.
Differential Revision: https://phabricator.services.mozilla.com/D143721
GeckoView expects string for "cc-exp-month" and "cc-exp-year", however, the `createNormalizedRecord`
method added in bug 1760834 while submitting a cc form, might change the value from string to number.
Differential Revision: https://phabricator.services.mozilla.com/D143535
Android P+ supports magnify glass and Chrome already supports it.
When accessible caret events are fired for pressing or dragging it, we show
Android's magnifying glass.
Differential Revision: https://phabricator.services.mozilla.com/D137966
For example, the SDK class android.media.MediaDrm$KeyStatus will now
be defined as MediaDrm::KeyStatus rather than just KeyStatus.
Not only does this avoid polluting the top-level namespace, but it
also avoids a bug where invalid type names were generated if the
nested class contains a method with a parameter or return of the outer
class' type.
Differential Revision: https://phabricator.services.mozilla.com/D143043
Added _dismissUi() to GeckoViewPrompter.jsm to send the request to
dismiss the prompt UI. Updated dismiss() to answer the callback to
close the prompt directly and seperatly dismiss the prompt UI.
Removed element_send_keys/user_prompts.py.ini and
tests/perform_actions/user_prompts.py.ini due to resolving the issue that
was causing failures.
Differential Revision: https://phabricator.services.mozilla.com/D142729
This replaces all `instanceof` uses for DOM interfaces, since the operator in priviliged context works same as .isInstance().
Differential Revision: https://phabricator.services.mozilla.com/D141785
Prior behavior for active tabs in an inactive app would have the process priority oom score of 15. Now it's set to a higher priority oom score of 11. This will increase priority for recently used tabs on apps and prevent Android from unloading them.
Differential Revision: https://phabricator.services.mozilla.com/D142386
Apps want to persist a WebNotification so that they can respond to taps on it
when the app is not alive anymore.
To achive this, we make WebNotification serializable through Parcel so that the
app can store it somewhere.
Differential Revision: https://phabricator.services.mozilla.com/D141406
This is an API weirdness. ServiceWorkerDelegate::onNewWindow requires a closed
session and NavigationDelegate::onNewSession requires an open session, even
though they pretty much do the same thing (and we do expect embedders to
implement them the same way).
This patch allows embedders to pass a closed session to onNewWindow so that
they can re-use the implementation of onNewSession.
Differential Revision: https://phabricator.services.mozilla.com/D141405