This patch adds a new GeckoView build variant dubbed "lite". We are in the
process of adding some optional dependencies to GeckoView that are needed by
Fenix (like Glean and Nimbus) which are likely not going to be used by anyone
else at Mozilla. To avoid bloating third party consumers, we provide a
geckoview-lite build that doesn't contain any optional dependency.
The min SDK version of GeckoView (non-lite) is being increased to 21 to match
Glean's min SDK. Given that Fenix's min SDK version is already 21 and that the
lite version's min SDK is still at 16 this change is safe to do and will not
incur in any loss of usability.
Differential Revision: https://phabricator.services.mozilla.com/D114370
The ARM emulator images have very poor support and haven't been updated for a
long time.
Normally x86_64 images need KVM acceleration which is not available on build
machines (see Bug 1545497). We can work around this by starting the emulator
with the command line |--no-accel|.
Differential Revision: https://phabricator.services.mozilla.com/D119223
This step removes all the dependencies of mach commands to
having a MachCommandBase as the `self` by using the `command_context`
argument instead. This also removes any remaining statefulness from those
classes that implement mach commands, ultimately making it easier to move
existing commands out of classes in a follow-up.
Differential Revision: https://phabricator.services.mozilla.com/D118058
The ARM emulator images have very poor support and haven't been updated for a
long time.
Normally x86_64 images need KVM acceleration which is not available on build
machines (see Bug 1545497). We can work around this by starting the emulator
with the command line |--no-accel|.
Differential Revision: https://phabricator.services.mozilla.com/D119223
The fact that we were checking for `extensions` seems like a typo to me? We
never set anything other than `fidoAppId` in the `extensions` bundle, which
makes sense to me (authenticatorAttachment is not an extension from what I can
tell).
Differential Revision: https://phabricator.services.mozilla.com/D119675
Package a summary of the RemoteSettings dumps with the application, so
that RemoteSettings clients can look up the last_modified value of a
dump without loading the whole JSON dump file.
For simplicity, the initial version of `gen_last_modified.py` generates
only one entry for the only present use case. A more generic version of
the script will be implemented in bug 1719560.
Differential Revision: https://phabricator.services.mozilla.com/D119336
By bug 1697680, Gecko removes Presentation API. `Wifi:GetIPAddress` was only used on this API implementation.
So now, this is unused.
Differential Revision: https://phabricator.services.mozilla.com/D118911
When landing bug 1711626, I reuse /assets/www/forms.html for this issue. But
this causes unexpected issue. Although this HTML has iframe,
`loadTestPath(FORMS_HTML_PATH)` doesn't wait for iframe content, so then,
it seems to cause unexpected form initialization and editorInfo becomes
invalid value.
So I would like to rewrite this test.
InputConnection is updated asynchronously, so we need to check whether it is
created. Then even if it is created, editorInfo may not be ready. So we need
to flush IC's thread task.
Differential Revision: https://phabricator.services.mozilla.com/D118371
This is slightly complicated by the fact that the editor code wants to be able
to set this from the content process, so we really need separate
BrowsingContext and WindowContext flags, the latter of which can be set by the
owning process.
Differential Revision: https://phabricator.services.mozilla.com/D114899
Extension.jsm, ContextualIdentityService.jsm and GeckoViewConsole.jsm still reference browser.properties.
Depends on D117622
Differential Revision: https://phabricator.services.mozilla.com/D117623
`GeckoHlsPlayer.release()` releases `ExoPlayer` object on player thread. But it
doesn't wait for whether it calls stop and callback is released. But
`HLSDecoder` calls `GeckoHLSResourceWrapper.destroy()` then dispose JNI
callback object immediately. So `GeckoHlsPlayer` may calls callback even if
callback is disposed.
We should check `mReleasing` before calling callback.
Differential Revision: https://phabricator.services.mozilla.com/D117505
CLOSED TREE
Backed out changeset d8f2f3cc4da7 (bug 1709640)
Backed out changeset 3a6a274dae0d (bug 1709640)
Backed out changeset decc4edd47f9 (bug 1709640)
Gecko's text API has a hint whether text change notification is by IME
composing. If by IME composing, it is unnecessary to synchronize it by
onSelectionChange because JavaScript doesn't block/change inputted text.
It means that shadow (Java) text is always matched to Gecko text.
So we don't have to synchronize shadow text during composing.
Differential Revision: https://phabricator.services.mozilla.com/D116476
This patch adds a new GeckoView build variant dubbed "lite". We are in the
process of adding some optional dependencies to GeckoView that are needed by
Fenix (like Glean and Nimbus) which are likely not going to be used by anyone
else at Mozilla. To avoid bloating third party consumers, we provide a
geckoview-lite build that doesn't contain any optional dependency.
The min SDK version of GeckoView (non-lite) is being increased to 21 to match
Glean's min SDK. Given that Fenix's min SDK version is already 21 and that the
lite version's min SDK is still at 16 this change is safe to do and will not
incur in any loss of usability.
Differential Revision: https://phabricator.services.mozilla.com/D114370
Actually, we set auto-capitalize flag if current `<input>` element isn't text
due to bug 871884.
Most 3rd party keyboard ignores this flag if it is password. But Samsung's
default keyboard uses this flag even if this is password.
So we shouldn't set auto-capitalize flag if `<input>` element is password.
Also, we also set this on `type=email` and `type=url`. But when I check Chrome
behaviour, they don't set this flag on these types. So I would like not to set
this flag to these types too.
Differential Revision: https://phabricator.services.mozilla.com/D115677
https://accounts.firefox.com runs the following script.
```
input.addEventListener("keyup", () => {
// Update <datalist>
temporaryElement.focus();
input.focus();
}
```
Since `input.focus()` is called, `GeckoViewSupport` sends current value of
focused `<input>` element to `GeckoEditable`, but we don't cancel previous
text transaction unfortunately. Then it may cause unexpected behaviours such
as reported issue.
So we should dispose previous text transaction when getting new focus.
Also it is difficult to write unit test for this. Because,
- Mochitest cannot test this since this issue is native IME behaviour.
- No way to create this timing on geckoview-junit.
Differential Revision: https://phabricator.services.mozilla.com/D116681
We don't offer API splits any more, and with the separation of GeckoView with
the rest of the front-end it's increasingly unlikely that we will in the
future.
This change makes it so that the build name doesn't contain the API version so
that we can update it without breaking all the automation that relies on the
build name.
Differential Revision: https://phabricator.services.mozilla.com/D114369
We don't offer API splits any more, and with the separation of GeckoView with
the rest of the front-end it's increasingly unlikely that we will in the
future.
This change makes it so that the build name doesn't contain the API version so
that we can update it without breaking all the automation that relies on the
build name.
Differential Revision: https://phabricator.services.mozilla.com/D114369
- Require the blocklist v3 everywhere except on Android,
as Android support will be done in bug 1639050.
On Firefox desktop it is not possible to switch back to blocklist v2.
- The application size (Firefox/Thunderbird) shrinks by 1 MB
because the addons.json dump no longer needs to be packaged.
- Thunderbird will now use blocklist v3 instead of v2.
Doesn't matter because it didn't use the blocklist in practice.
Differential Revision: https://phabricator.services.mozilla.com/D116418
- Require the blocklist v3 everywhere except on Android,
as Android support will be done in bug 1639050.
On Firefox desktop it is not possible to switch back to blocklist v2.
- The application size (Firefox/Thunderbird) shrinks by 1 MB
because the addons.json dump no longer needs to be packaged.
- Thunderbird will now use blocklist v3 instead of v2.
Doesn't matter because it didn't use the blocklist in practice.
Differential Revision: https://phabricator.services.mozilla.com/D116418
At the same time, move the option to python configure, which changes how
to disable it (setting to an empty value rather than 0).
Differential Revision: https://phabricator.services.mozilla.com/D115844
The 500ms value was completely arbitrary (we're trying to test that the rAF
rate is reduced, not that it's exactly 500ms), looks like in some cases we get
updates _just_ below the 500ms mark, so to avoid false failures we can reduce
the value to 450ms.
Differential Revision: https://phabricator.services.mozilla.com/D115744
We call initMouseAsTouch when creating GeckoSession, normally this happens
after a GeckoRuntime has been created, so GeckoAppShell.getApplicationContext()
will return a non-null value.
If the GeckoSession is created before then, however, that method will return
null causing a NullPointerException (a AC unit test does that).
We fix this problem by initializing sTreatMouseAsTouch lazily, and not assuming
that the Context is present.
Differential Revision: https://phabricator.services.mozilla.com/D115727
Android 12 introduces a new type of overscroll effect named TYPE_STRETCH which
stretches the whole surface when overscrolling.
Unforunately, given how it's implemented, SurfaceView does not support this
type of effect, similarly to many other View effects.
The OverscrollEffect is currently crashing on Android 12 builds so we restore the
type to the previous (and only) default to fix the crash.
Note that Overscroll is still not displayed, I'll open a new bug to fix that
part.
This patch also avoids using reflection for setBlendMode on API 29 and later
where an API is actually available. Using reflection to access private APIs is
not available since Android 9 so this code was a no-op before this patch.
Differential Revision: https://phabricator.services.mozilla.com/D115031
Android 12 introduces a new type of overscroll effect named TYPE_STRETCH which
stretches the whole surface when overscrolling.
Unforunately, given how it's implemented, SurfaceView does not support this
type of effect, similarly to many other View effects.
The OverscrollEffect is currently crashing on Android 12 builds so we restore the
type to the previous (and only) default to fix the crash.
Note that Overscroll is still not displayed, I'll open a new bug to fix that
part.
This patch also avoids using reflection for setBlendMode on API 29 and later
where an API is actually available. Using reflection to access private APIs is
not available since Android 9 so this code was a no-op before this patch.
Differential Revision: https://phabricator.services.mozilla.com/D115031
As an intermediate step to allow mach commands as standalone functions, the MachCommandBase
subclass instance that currently corresponds to self has to be made available as a separate
argument (named command_context).
Differential Revision: https://phabricator.services.mozilla.com/D109650
When taking focus on <input> element that has large text such as 1MB, we
cannot pass current text to InputConnection.
Since we use binder call to set initial text to InputConnection, large text
causes TransactionTooLargeException exception. So we use small chunked data
(64K length) instead.
Differential Revision: https://phabricator.services.mozilla.com/D114710
I'm changing this to be unconditional so that it may ride the trains.
If we later decide that we need to hold it back for another release, we can
revert this in Beta.
I'm talking to data people about analyzing Fenix's tab retention probes. I'll
obviously be keeping an eye on those numbers as this change propagates.
Differential Revision: https://phabricator.services.mozilla.com/D114404
HangData is the only member left in the union and SLOW_SCRIPT is the only member left in the enum.
This patch also migrates the one remaining (invalid) use of PLUGIN_HANG in testing to work as a SLOW_SCRIPT instead.
Differential Revision: https://phabricator.services.mozilla.com/D113885
Marionette enables itself only when --marionette is passed in. Given that
command line arguments can only be passed in using the debug configuration, it
is safe to send this event all the time.
Differential Revision: https://phabricator.services.mozilla.com/D113829
The latest version of GBoard seems to call `InputConnection.closeConnection`
without calling `InputConnection.endBatchEdit`. Since we recycle
`InputConnection` object, we have to reset batch edit count on
`closeConnection`.
Also there is no way to write GV-junit and mochitests because we cannot check
whether current text transaction is batch mode or not.
Differential Revision: https://phabricator.services.mozilla.com/D113297
Marionette uses GVE and sometimes closes the last tab and calls |Quit| at the
same time. When the last tab is closed, GVE will try to open a new tab with the
same content in it, to avoid leaving the browser in the "zero tabs" state. This
causes a race condition where the browser is shutting down and a new tab is
being created, which trips an assertion in our widget code.
During real life usage of the browser, calling Quit only happens during errors.
Because of that, and the fact that we're not seing this crash in the wild,
it should be safe to just fix the problem in GVE instead of supporting this
edge case in GeckoView.
To support the Marionette case, we allow GVE to stay at zero tabs. Some menu
elements need to be disabled (like reload tab and the url bar).
This has the added benefit of being able to test the "no windows" case in GVE
which wasn't possible until now.
Differential Revision: https://phabricator.services.mozilla.com/D113202
As an intermediate step to allow mach commands as standalone functions, the MachCommandBase
subclass instance that currently corresponds to self has to be made available as a separate
argument (named command_context).
Differential Revision: https://phabricator.services.mozilla.com/D109650
This reverts commit e542e8826b92f70dbabaf577d80a32273c684d1b.
In hindsight, this was a pretty bad change. It introduces a third place where
the EventDispatcher can be shutdown (JavaScript) and doesn't do a good job at
communicating this across all consumers.
I introduced this change in Bug 1567341 to fix some leaks in xpcshell tests at
xpcom shutdown, and it was never meant to affect a normal browser use (turns
out, it does).
I ran the tests again in try and they are still green when reverting this
change, I suspect that the actual failures I was seeing were due to a separate
leak that I fixed while developing the patches.
Differential Revision: https://phabricator.services.mozilla.com/D112637
As an intermediate step to allow mach commands as standalone functions, the MachCommandBase
subclass instance that currently corresponds to self has to be made available as a separate
argument (named command_context).
Differential Revision: https://phabricator.services.mozilla.com/D109650
The default setting for the number of COOP+COEP processes is 1, which I believe
is causing various test failures. While this is not the final configuration,
I'd like to use this value (total content processes - number of e10s web content
processes) to test this out.
Differential Revision: https://phabricator.services.mozilla.com/D111729
deleteSurroundingText may create multiple text transactions. This test
failure occurs when multiple text transactions are dispatched to Gecko.
GeckoEditableSupport records text changes by Gecko then it notifies Java
of text changes. And it merges old text changes with new text changes by
AddIMETextChange to reduce JNI/Binder calls if possible.
This issue is that AddIMETextChange creates incorrect text change range
by merging text change ranges.
Actually, TextChangeData already has merge function now, so we should use it
instead of own merge function in GeckoEditableSupport.
Differential Revision: https://phabricator.services.mozilla.com/D111207
Now that we can report long URI errors to the app using `NavigationDelegate`,
I have updated the tests accordingly.
I also added a test to ensure that long `data:` URIs are still accepted when we
are not dealing with a toplevel document. We generate a PNG image filled with
randomness, which compresses poorly (and thus is "large") and yet is a valid PNG
file. We expect its `onload` event to fire.
Differential Revision: https://phabricator.services.mozilla.com/D109429
While I evaluated multiple approaches to this problem, I selected two:
The first is to handle the case in `GeckoSession.load` directly from within
Java, as this allows us to avoid a Java to Native string conversion, as well as
giving us better opportunities to report the exact nature of the failure back to
the embedding app.
We add a new error code specifically for this case.
In the case where no `NavigationDelegate` is registered, I used
`GeckoSession.load` throwing an exception as a crude way of notifying the app.
In the case where the load request originates from within web content, we deny
the request from within `nsWindow` to avoid requiring any conversion of the
URI spec from native into Java.
Differential Revision: https://phabricator.services.mozilla.com/D109427
Having a null WeakReference<> object is a little unexpected, to avoid confusion
we set mOwner to a WeakReference<>(null) value instead to avoid
a NullPointerException.
Differential Revision: https://phabricator.services.mozilla.com/D110976
This also fixes links in top or in-process subframes and out-of-process subframes in extensions sidebars and panels so that they open in new tabs.
Differential Revision: https://phabricator.services.mozilla.com/D110102
This never actually worked, because nothing ever listened to the notification
sent in XPCJSContext (kill-content-script-sandbox). We're also removing the
"Temporarily disable extension" button in the slow addon notification, which
was the primary caller of this - however, that's in a separate patch.
Differential Revision: https://phabricator.services.mozilla.com/D110583
The code as written does not remove the connection from both
mContentConnections and mNonStartedContentConnections since && short circuits.
Since the connection is always present in mContentConnections, we just check
that.
Differential Revision: https://phabricator.services.mozilla.com/D109443
This service, based off of TestRunnerActivity, can be used to run an
xpcshell-test instance.
It supports up to 10 concurrent instances, although we can add more if we need
to.
Local testing indicates that with more than 4 concurrent instances there's not
gain in test running performance.
This also adds a new intent action
|org.mozilla.geckoview.test.XPCSHELL_TEST_MAIN| that can be used by the test
harness to start the main application and gain foreground priority without
starting Gecko (which would interfere with the xpcshell runner services).
Differential Revision: https://phabricator.services.mozilla.com/D106212
This commit adds a new command line option |-xpcshell| that, when passed, will
run an xpcshell instead of launching a full Gecko instance.
This command line option is restricted to org.mozilla.geckoview.test for now,
as it's really hard to use and not really a usecase outside mozilla. We can
revisit this if there's interest.
Differential Revision: https://phabricator.services.mozilla.com/D106211
When getting the *-extension-installed messages we should always notify
GeckoViewWebExtension.
This currently works because we always install the test support extension which
causes us to initialize GeckoViewWebExtension. On xpcshel tests, however, there
is no support extension so we need to account for that in GeckoViewStartup.
Differential Revision: https://phabricator.services.mozilla.com/D106319
We don't need to initialize SafeBrowsing _immediately_ at startup and we can
wait until the InitLater stage.
This has the added benefit of not crashing xpcshell-test which doesn't have
SafeBrowsing support.
Differential Revision: https://phabricator.services.mozilla.com/D106200
The code as written does not remove the connection from both
mContentConnections and mNonStartedContentConnections since && short circuits.
Since the connection is always present in mContentConnections, we just check
that.
Differential Revision: https://phabricator.services.mozilla.com/D109443
This service, based off of TestRunnerActivity, can be used to run an
xpcshell-test instance.
It supports up to 10 concurrent instances, although we can add more if we need
to.
Local testing indicates that with more than 4 concurrent instances there's not
gain in test running performance.
This also adds a new intent action
|org.mozilla.geckoview.test.XPCSHELL_TEST_MAIN| that can be used by the test
harness to start the main application and gain foreground priority without
starting Gecko (which would interfere with the xpcshell runner services).
Differential Revision: https://phabricator.services.mozilla.com/D106212
This commit adds a new command line option |-xpcshell| that, when passed, will
run an xpcshell instead of launching a full Gecko instance.
This command line option is restricted to org.mozilla.geckoview.test for now,
as it's really hard to use and not really a usecase outside mozilla. We can
revisit this if there's interest.
Differential Revision: https://phabricator.services.mozilla.com/D106211
When getting the *-extension-installed messages we should always notify
GeckoViewWebExtension.
This currently works because we always install the test support extension which
causes us to initialize GeckoViewWebExtension. On xpcshel tests, however, there
is no support extension so we need to account for that in GeckoViewStartup.
Differential Revision: https://phabricator.services.mozilla.com/D106319
We don't need to initialize SafeBrowsing _immediately_ at startup and we can
wait until the InitLater stage.
This has the added benefit of not crashing xpcshell-test which doesn't have
SafeBrowsing support.
Differential Revision: https://phabricator.services.mozilla.com/D106200
Bug 1650705's geckoview-junit test counts the number of input event times.
It is unnecessary to wait for selection event and Gecko may not sometimes
fire selection event on input or textarea element. So use
InputConnection.setSelection directly instead of waiting for DOM event.
Differential Revision: https://phabricator.services.mozilla.com/D109354
Note that this removes `window.ondeviceproximity` and `window.onuserproximity` which unexpectedly have been exposed unconditionally.
Differential Revision: https://phabricator.services.mozilla.com/D109160
We used to support having a null delegateController because WebExtension could
be constructed from the app. Now that we can only go through the Controller we
don't need to do that anymore.
Differential Revision: https://phabricator.services.mozilla.com/D108695
Android R+ has new API to set initial surrounding text.
According to Android commit log [*], it can improve IME start up performance
when setting initial surrounding text that is new API from Android API 30.
* c486acc4d2
Differential Revision: https://phabricator.services.mozilla.com/D108736
As discussed in the bug, when the app calls `loadUri` without
`LOAD_FLAGS_EXTERNAL` and there is no referrer session, we may always use the
system principal as the requesting principal.
I removed all the special-casing of the other various schemes under the
expectation that, under the conditions described above, they are also subject
to the same policy.
Differential Revision: https://phabricator.services.mozilla.com/D107517
* We remove the reference to `MOZ_ANDROID_DATA_DIR`, since it appears to have no
more references in mozilla-central. There is one reference in the xpcshell
harness for which I have filed a follow-up bug.
* Given that the following variables are not useful by content, we restrict
their retrieval to the parent process:
* `DOWNLOADS_DIRECTORY`
* `UPDATES_DIRECTORY`
* `EXTERNAL_STORAGE`
* `CACHE_DIRECTORY`
* `PUBLIC_STORAGE`
* Initial prefs
* `TMPDIR` is still used by the XPCOM directory service. Given that we can still
retrieve this value safely under `isolatedProcess`, we leave this in for now.
We can revisit this one in the future.
* We restrict retrieval of the user serial number to the parent process. AFAICT
we do send this value along with crash reports, so I modified `IChildProcess.start`
to accept this value and propagate it into the child process's environment
so that an isolated process crash may still include it.
* The remaining envrionment variables remain safe to retrieve when isolated.
Differential Revision: https://phabricator.services.mozilla.com/D108507
This dates back to a time before the browser console where the normal content
console could optionally show chrome code messages. Today it serves no use.
Differential Revision: https://phabricator.services.mozilla.com/D108130
Before this patch, when the profile is locked on Android, we would call "ps",
parse the human-readable output and kill any other Gecko process that we could
find.
But this is completely unnecessary, as we know exactly that the PID of the
process holding the lock is.
In this patch we just kill the process holding the lock since this is
equivalent to the previous behavior.
Differential Revision: https://phabricator.services.mozilla.com/D106186
Updates `./mach bootstrap` to use `--no-interactive` from global args.
Ensures all bootstrap prompts have a default option.
Differential Revision: https://phabricator.services.mozilla.com/D106814