Closed Bug 1601067 Opened 5 years ago Closed 4 years ago

Implement installBuiltIn for extensions

Categories

(GeckoView :: Extensions, enhancement, P1)

Unspecified
All
enhancement

Tracking

(firefox78 fixed)

RESOLVED FIXED
mozilla78
Tracking Status
firefox78 --- fixed

People

(Reporter: agi, Assigned: agi)

References

Details

(Whiteboard: [geckoview:m78])

Attachments

(9 files, 1 obsolete file)

47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
Whiteboard: [geckoview:m1912]
Assignee: nobody → agi
Rank: 2
Priority: P1 → P2
Whiteboard: [geckoview:m1912]

This is being de-prioritized since it's not needed for initial Extension support. If anyone wants to pick this up feel free to reach out to me.

Assignee: agi → nobody
Mentor: agi

on a second thought Secure Proxy really needs this, so I might just finish this up

Assignee: nobody → agi
Mentor: agi

Secure proxy is no longer in scope for Fenix release and so this should be deprioritised in favour of other bugs.

lowering rank as I think other extension bugs will take priority over this

Rank: 2 → 15
Assignee: agi → nobody
Blocks: 1617300
Mentor: agi
Assignee: nobody → agi
Mentor: agi

We use this to send a default action to the embedder, but if no one is
listening there's no point, and it causes problems in tests because sometimes
the delegate is attached / reattached too quickly and the second delegate will
end up getting two messages by mistake.

Sometimes extensions call tabs.create immediately on startup. In that case the
delegate may not be attached yet. To avoid losing these messages we store them
until a delegate is attached.

This also includes a refactoring to unify behavior for delegates. Eventually I
want to factor out delegates similarly to what happens in GeckoSession today.

Installed privileged permissions in GeckoView need to send messages from
content scripts. Today we use ALLOW_CONTENT_MESSAGING, but for installed
extensions we need a way to persist this flag.

This in preparation to making these test extensions installable.

Whiteboard: [geckoview:m78]
Priority: P2 → P1
Blocks: 1634504
Attached file Bug 1601067 - Add ensureBuiltIn. (obsolete) —

This is a version of installBuiltIn that will not install the addon if it's
already installed.

Attachment #9144186 - Attachment description: Bug 1601067 - Add nativeContentMessaging privileged permission. → Bug 1601067 - Add nativeMessagingFromContent privileged permission.
Attachment #9144187 - Attachment description: Bug 1601067 - Add IDs and nativeContentMessaging to tests. → Bug 1601067 - Add IDs and nativeMessagingFromContent to tests.

Comment on attachment 9145117 [details]
Bug 1601067 - Add ensureBuiltIn.

Revision D73503 was moved to bug 1635564. Setting attachment 9145117 [details] to obsolete.

Attachment #9145117 - Attachment is obsolete: true
Pushed by asferro@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/23d021ef34c4
Catch exception thrown by newURI. r=snorp
https://hg.mozilla.org/integration/autoland/rev/b15906852fe4
Only send ActionDelegate:Attached when the delegate is not null. r=snorp
https://hg.mozilla.org/integration/autoland/rev/fe94f4277bfa
Collect NewTab messages until a delegate is registered. r=snorp
https://hg.mozilla.org/integration/autoland/rev/62f5d5d34162
Add nativeMessagingFromContent privileged permission. r=zombie,snorp
https://hg.mozilla.org/integration/autoland/rev/b396fa314c25
Add IDs and nativeMessagingFromContent to tests. r=snorp
https://hg.mozilla.org/integration/autoland/rev/3b4e20521d4b
Implement installBuiltIn. r=mixedpuppy,owlish,snorp
https://hg.mozilla.org/integration/autoland/rev/f5d8f660ba87
Use installBuiltIn in tests instead of registerWebExtension. r=snorp
https://hg.mozilla.org/integration/autoland/rev/d16aa7b33165
Make the test-support extension installable. r=owlish,snorp
https://hg.mozilla.org/integration/autoland/rev/a57940d6af63
Add deprecation notice for registerWebExtension. r=droeh

Backed out 9 changesets (Bug 1601067) for causing gv failures in WebExecutorTest.

Backout link: https://hg.mozilla.org/integration/autoland/rev/d887e6eaea8a68af43a8907d64afc849806d83cb

Push with failures: https://treeherder.mozilla.org/#/jobs?repo=autoland&fromchange=b165ac2f10597dc2f4a553e66924c269b3623f0e&searchStr=android%2C7.0%2Cx86-64%2Copt%2Ctest-android-em-7.0-x86_64%2Fopt-geckoview-junit-e10s%2C%28gv-junit%29&tochange=d887e6eaea8a68af43a8907d64afc849806d83cb&selectedTaskRun=RnRWeW9WQrGVjAx1rUVdGA-0

Failure log: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=300944964&repo=autoland&lineNumber=12682

[task 2020-05-05T22:46:09.942Z] 22:46:09     INFO -  TEST-START | org.mozilla.geckoview.test.WebExecutorTest.readTimeout
[task 2020-05-05T22:46:39.993Z] 22:46:39     INFO -  org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: numtests=721
[task 2020-05-05T22:46:39.993Z] 22:46:39     INFO -  org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: stream=
[task 2020-05-05T22:46:39.994Z] 22:46:39     INFO -  org.mozilla.geckoview.test | Error in readTimeout(org.mozilla.geckoview.test.WebExecutorTest):
[task 2020-05-05T22:46:39.994Z] 22:46:39     INFO -  org.mozilla.geckoview.test | java.lang.Exception: Unexpected exception, expected<java.io.IOException> but was<java.util.concurrent.TimeoutException>
[task 2020-05-05T22:46:39.994Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:28)
[task 2020-05-05T22:46:39.994Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
[task 2020-05-05T22:46:39.994Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61)
[task 2020-05-05T22:46:39.994Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
[task 2020-05-05T22:46:39.995Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
[task 2020-05-05T22:46:39.995Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
[task 2020-05-05T22:46:39.995Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
[task 2020-05-05T22:46:39.995Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
[task 2020-05-05T22:46:39.995Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
[task 2020-05-05T22:46:39.995Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
[task 2020-05-05T22:46:39.995Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
[task 2020-05-05T22:46:39.996Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
[task 2020-05-05T22:46:39.996Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
[task 2020-05-05T22:46:39.996Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
[task 2020-05-05T22:46:39.996Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at androidx.test.ext.junit.runners.AndroidJUnit4.run(AndroidJUnit4.java:104)
[task 2020-05-05T22:46:39.996Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.Suite.runChild(Suite.java:128)
[task 2020-05-05T22:46:39.996Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.Suite.runChild(Suite.java:27)
[task 2020-05-05T22:46:39.996Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
[task 2020-05-05T22:46:39.997Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
[task 2020-05-05T22:46:39.997Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
[task 2020-05-05T22:46:39.997Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
[task 2020-05-05T22:46:39.997Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
[task 2020-05-05T22:46:39.997Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
[task 2020-05-05T22:46:39.997Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
[task 2020-05-05T22:46:39.997Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
[task 2020-05-05T22:46:39.997Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
[task 2020-05-05T22:46:39.998Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:388)
[task 2020-05-05T22:46:39.998Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1932)
[task 2020-05-05T22:46:39.998Z] 22:46:39     INFO -  org.mozilla.geckoview.test | Caused by: java.util.concurrent.TimeoutException
[task 2020-05-05T22:46:39.998Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.mozilla.geckoview.GeckoResult.poll(GeckoResult.java:775)
[task 2020-05-05T22:46:39.998Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.mozilla.geckoview.test.GeckoResultTestKt.pollDefault(GeckoResultTest.kt:16)
[task 2020-05-05T22:46:39.998Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.mozilla.geckoview.test.WebExecutorTest.readTimeout(WebExecutorTest.kt:359)
[task 2020-05-05T22:46:39.998Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at java.lang.reflect.Method.invoke(Native Method)
[task 2020-05-05T22:46:39.998Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
[task 2020-05-05T22:46:39.999Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
[task 2020-05-05T22:46:39.999Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
[task 2020-05-05T22:46:39.999Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
[task 2020-05-05T22:46:39.999Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:19)
[task 2020-05-05T22:46:39.999Z] 22:46:39     INFO -  org.mozilla.geckoview.test | 	... 27 more
[task 2020-05-05T22:46:39.999Z] 22:46:39     INFO -  org.mozilla.geckoview.test |
[task 2020-05-05T22:46:39.999Z] 22:46:39     INFO -  org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
[task 2020-05-05T22:46:39.999Z] 22:46:39     INFO -  org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: test=readTimeout
[task 2020-05-05T22:46:40.000Z] 22:46:40     INFO -  org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: class=org.mozilla.geckoview.test.WebExecutorTest
[task 2020-05-05T22:46:40.000Z] 22:46:40     INFO -  org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: stack=java.lang.Exception: Unexpected exception, expected<java.io.IOException> but was<java.util.concurrent.TimeoutException>
[task 2020-05-05T22:46:40.000Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:28)
[task 2020-05-05T22:46:40.000Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
[task 2020-05-05T22:46:40.000Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61)
[task 2020-05-05T22:46:40.000Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
[task 2020-05-05T22:46:40.001Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
[task 2020-05-05T22:46:40.001Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
[task 2020-05-05T22:46:40.001Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
[task 2020-05-05T22:46:40.001Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
[task 2020-05-05T22:46:40.001Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
[task 2020-05-05T22:46:40.001Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
[task 2020-05-05T22:46:40.002Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
[task 2020-05-05T22:46:40.002Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
[task 2020-05-05T22:46:40.002Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
[task 2020-05-05T22:46:40.002Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
[task 2020-05-05T22:46:40.002Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at androidx.test.ext.junit.runners.AndroidJUnit4.run(AndroidJUnit4.java:104)
[task 2020-05-05T22:46:40.002Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.Suite.runChild(Suite.java:128)
[task 2020-05-05T22:46:40.002Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.Suite.runChild(Suite.java:27)
[task 2020-05-05T22:46:40.002Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
[task 2020-05-05T22:46:40.003Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
[task 2020-05-05T22:46:40.003Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
[task 2020-05-05T22:46:40.003Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
[task 2020-05-05T22:46:40.003Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
[task 2020-05-05T22:46:40.003Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
[task 2020-05-05T22:46:40.003Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
[task 2020-05-05T22:46:40.003Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
[task 2020-05-05T22:46:40.003Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
[task 2020-05-05T22:46:40.004Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:388)
[task 2020-05-05T22:46:40.004Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1932)
[task 2020-05-05T22:46:40.004Z] 22:46:40     INFO -  org.mozilla.geckoview.test | Caused by: java.util.concurrent.TimeoutException
[task 2020-05-05T22:46:40.004Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.mozilla.geckoview.GeckoResult.poll(GeckoResult.java:775)
[task 2020-05-05T22:46:40.004Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.mozilla.geckoview.test.GeckoResultTestKt.pollDefault(GeckoResultTest.kt:16)
[task 2020-05-05T22:46:40.004Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.mozilla.geckoview.test.WebExecutorTest.readTimeout(WebExecutorTest.kt:359)
[task 2020-05-05T22:46:40.005Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at java.lang.reflect.Method.invoke(Native Method)
[task 2020-05-05T22:46:40.005Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
[task 2020-05-05T22:46:40.005Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
[task 2020-05-05T22:46:40.005Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
[task 2020-05-05T22:46:40.005Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
[task 2020-05-05T22:46:40.005Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:19)
[task 2020-05-05T22:46:40.005Z] 22:46:40     INFO -  org.mozilla.geckoview.test | 	... 27 more
[task 2020-05-05T22:46:40.005Z] 22:46:40     INFO -  org.mozilla.geckoview.test |
[task 2020-05-05T22:46:40.006Z] 22:46:40     INFO -  org.mozilla.geckoview.test | INSTRUMENTATION_STATUS: current=644
[task 2020-05-05T22:46:40.006Z] 22:46:40     INFO -  org.mozilla.geckoview.test | INSTRUMENTATION_STATUS_CODE: -2
[task 2020-05-05T22:46:40.006Z] 22:46:40  WARNING -  TEST-UNEXPECTED-FAIL | org.mozilla.geckoview.test.WebExecutorTest.readTimeout | java.lang.Exception: Unexpected exception, expected<java.io.IOException> but was<java.util.concurrent.TimeoutException>
[task 2020-05-05T22:46:40.006Z] 22:46:40     INFO -  TEST-INFO took 30059ms
Flags: needinfo?(agi)
Pushed by asferro@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/a324be3f18c5
Catch exception thrown by newURI. r=snorp
https://hg.mozilla.org/integration/autoland/rev/c837429d83c0
Only send ActionDelegate:Attached when the delegate is not null. r=snorp
https://hg.mozilla.org/integration/autoland/rev/604268c82e23
Collect NewTab messages until a delegate is registered. r=snorp
https://hg.mozilla.org/integration/autoland/rev/7fbcf8b8e0bf
Add nativeMessagingFromContent privileged permission. r=zombie,snorp
https://hg.mozilla.org/integration/autoland/rev/f6eea4ab6cfb
Add IDs and nativeMessagingFromContent to tests. r=snorp
https://hg.mozilla.org/integration/autoland/rev/999a674a5c42
Implement installBuiltIn. r=mixedpuppy,owlish,snorp
https://hg.mozilla.org/integration/autoland/rev/e5179f522184
Use installBuiltIn in tests instead of registerWebExtension. r=snorp
https://hg.mozilla.org/integration/autoland/rev/26d2567ff94a
Make the test-support extension installable. r=owlish,snorp
https://hg.mozilla.org/integration/autoland/rev/9bc60d63c9b4
Add deprecation notice for registerWebExtension. r=droeh

Thanks!

Flags: needinfo?(agi)
See Also: → 1609221
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: