WebExtensionController::mPendingMessages should be per-native app
Categories
(GeckoView :: Extensions, defect)
Tracking
(firefox84 fixed)
Tracking | Status | |
---|---|---|
firefox84 | --- | fixed |
People
(Reporter: agi, Assigned: agi)
Details
Attachments
(1 file)
(deleted),
text/x-phabricator-request
|
Details |
WebExtensionController::mPendingMessages
is currently grouped by extension, which means that when an embedder sets the MessageDelegate
for a native app, all messages for the extension are flushed, regardless of whether the native app has a delegate or not.
Instead, we should make mPendingMessages
per-native app so that only the relevant messages are flushed.
Assignee | ||
Updated•4 years ago
|
Assignee | ||
Comment 1•4 years ago
|
||
The extension code tries to flush messages when the relevant delegate is attached.
The logic, however, is pretty flawed: we currently only flush runtime-messages
(i.e. not coming from a WebExtension Page) and we flush all messages when the
first delegate is attached, even though there could be messages for different
nativeApp values which don't have a delegate attached yet.
We also erroneusly return a rejected promise to javascript when a message is queued up.
This patch addresses the above by:
- Never rejecting a pending connection request, the connection request will be
resolved when the delegate for the right nativeApp is attached. - Making the pending messages queue per-nativeApp and per-session.
- Flushing pending messages when a session delegate is attached.
Comment 3•4 years ago
|
||
Backed out for geckoview failures
backout: https://hg.mozilla.org/integration/autoland/rev/bae851e5b1be84eb612ae7de6ea700711a84dec3
failure log: https://treeherder.mozilla.org/logviewer?job_id=321497766&repo=autoland&lineNumber=14687
[task 2020-11-11T21:40:12.643Z] 21:40:12 INFO - TEST-START | org.mozilla.geckoview.test.WebExtensionTest.testRestoringExtensionPagePreservesMessages
[task 2020-11-11T21:40:42.981Z] 21:40:42 INFO - org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: numtests=766
[task 2020-11-11T21:40:42.981Z] 21:40:42 INFO - org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: stream=
[task 2020-11-11T21:40:42.981Z] 21:40:42 INFO - org.mozilla.geckoview.test | Error in testRestoringExtensionPagePreservesMessages(org.mozilla.geckoview.test.WebExtensionTest):
[task 2020-11-11T21:40:42.982Z] 21:40:42 INFO - org.mozilla.geckoview.test | org.mozilla.geckoview.test.util.UiThreadUtils$TimeoutException: Timed out after 30000ms
[task 2020-11-11T21:40:42.982Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.util.UiThreadUtils$TimeoutRunnable.run(UiThreadUtils.java:52)
[task 2020-11-11T21:40:42.982Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.os.Handler.handleCallback(Handler.java:751)
[task 2020-11-11T21:40:42.982Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.os.Handler.dispatchMessage(Handler.java:95)
[task 2020-11-11T21:40:42.982Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.util.UiThreadUtils.waitForCondition(UiThreadUtils.java:155)
[task 2020-11-11T21:40:42.982Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.rule.GeckoSessionTestRule.waitUntilCalled(GeckoSessionTestRule.java:1587)
[task 2020-11-11T21:40:42.983Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.rule.GeckoSessionTestRule.waitUntilCalled(GeckoSessionTestRule.java:1529)
[task 2020-11-11T21:40:42.983Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.rule.GeckoSessionTestRule.waitUntilCalled(GeckoSessionTestRule.java:1482)
[task 2020-11-11T21:40:42.983Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.WebExtensionTest.testRestoringExtensionPagePreservesMessages(WebExtensionTest.kt:838)
[task 2020-11-11T21:40:42.983Z] 21:40:42 INFO - org.mozilla.geckoview.test | at java.lang.reflect.Method.invoke(Native Method)
[task 2020-11-11T21:40:42.983Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
[task 2020-11-11T21:40:42.983Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
[task 2020-11-11T21:40:42.984Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
[task 2020-11-11T21:40:42.984Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
[task 2020-11-11T21:40:42.984Z] 21:40:42 INFO - org.mozilla.geckoview.test | at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
[task 2020-11-11T21:40:42.984Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.rule.GeckoSessionTestRule$2.lambda$evaluate$0$GeckoSessionTestRule$2(GeckoSessionTestRule.java:1313)
[task 2020-11-11T21:40:42.984Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.rule.-$$Lambda$GeckoSessionTestRule$2$sIbRNaZJgAu-QrUVWSGD8JbPSWM.run(lambda)
[task 2020-11-11T21:40:42.984Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:1950)
[task 2020-11-11T21:40:42.985Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.os.Handler.handleCallback(Handler.java:751)
[task 2020-11-11T21:40:42.985Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.os.Handler.dispatchMessage(Handler.java:95)
[task 2020-11-11T21:40:42.985Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.os.Looper.loop(Looper.java:154)
[task 2020-11-11T21:40:42.985Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.app.ActivityThread.main(ActivityThread.java:6077)
[task 2020-11-11T21:40:42.985Z] 21:40:42 INFO - org.mozilla.geckoview.test | at java.lang.reflect.Method.invoke(Native Method)
[task 2020-11-11T21:40:42.985Z] 21:40:42 INFO - org.mozilla.geckoview.test | at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
[task 2020-11-11T21:40:42.985Z] 21:40:42 INFO - org.mozilla.geckoview.test | at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
[task 2020-11-11T21:40:42.986Z] 21:40:42 INFO - org.mozilla.geckoview.test |
[task 2020-11-11T21:40:42.986Z] 21:40:42 INFO - org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
[task 2020-11-11T21:40:42.986Z] 21:40:42 INFO - org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: test=testRestoringExtensionPagePreservesMessages
[task 2020-11-11T21:40:42.986Z] 21:40:42 INFO - org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: class=org.mozilla.geckoview.test.WebExtensionTest
[task 2020-11-11T21:40:42.986Z] 21:40:42 INFO - org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: stack=org.mozilla.geckoview.test.util.UiThreadUtils$TimeoutException: Timed out after 30000ms
[task 2020-11-11T21:40:42.986Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.util.UiThreadUtils$TimeoutRunnable.run(UiThreadUtils.java:52)
[task 2020-11-11T21:40:42.986Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.os.Handler.handleCallback(Handler.java:751)
[task 2020-11-11T21:40:42.987Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.os.Handler.dispatchMessage(Handler.java:95)
[task 2020-11-11T21:40:42.987Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.util.UiThreadUtils.waitForCondition(UiThreadUtils.java:155)
[task 2020-11-11T21:40:42.987Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.rule.GeckoSessionTestRule.waitUntilCalled(GeckoSessionTestRule.java:1587)
[task 2020-11-11T21:40:42.987Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.rule.GeckoSessionTestRule.waitUntilCalled(GeckoSessionTestRule.java:1529)
[task 2020-11-11T21:40:42.987Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.rule.GeckoSessionTestRule.waitUntilCalled(GeckoSessionTestRule.java:1482)
[task 2020-11-11T21:40:42.987Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.WebExtensionTest.testRestoringExtensionPagePreservesMessages(WebExtensionTest.kt:838)
[task 2020-11-11T21:40:42.987Z] 21:40:42 INFO - org.mozilla.geckoview.test | at java.lang.reflect.Method.invoke(Native Method)
[task 2020-11-11T21:40:42.987Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
[task 2020-11-11T21:40:42.987Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.rule.GeckoSessionTestRule$2.lambda$evaluate$0$GeckoSessionTestRule$2(GeckoSessionTestRule.java:1313)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at org.mozilla.geckoview.test.rule.-$$Lambda$GeckoSessionTestRule$2$sIbRNaZJgAu-QrUVWSGD8JbPSWM.run(lambda)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:1950)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.os.Handler.handleCallback(Handler.java:751)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.os.Handler.dispatchMessage(Handler.java:95)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.os.Looper.loop(Looper.java:154)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at android.app.ActivityThread.main(ActivityThread.java:6077)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at java.lang.reflect.Method.invoke(Native Method)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test | at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
[task 2020-11-11T21:40:42.988Z] 21:40:42 INFO - org.mozilla.geckoview.test |
[task 2020-11-11T21:40:42.989Z] 21:40:42 INFO - org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: current=704
[task 2020-11-11T21:40:42.989Z] 21:40:42 INFO - org.mozilla.geckoview.test | INSTRUMENTATION_STATUS_CODE: -2
[task 2020-11-11T21:40:42.989Z] 21:40:42 WARNING - TEST-UNEXPECTED-FAIL | org.mozilla.geckoview.test.WebExtensionTest.testRestoringExtensionPagePreservesMessages | org.mozilla.geckoview.test.util.UiThreadUtils$TimeoutException: Timed out after 30000ms
[task 2020-11-11T21:40:42.989Z] 21:40:42 INFO - TEST-INFO took 30345ms
Comment 5•4 years ago
|
||
bugherder |
Description
•