Bug 2058821 - doc: apply the markdownlint fixes over the tree r=firefox-source-docs-reviewers,ipc-reviewers,devtools-reviewers,releng-reviewers,android-reviewers,bhearsum,nchevobbe,ahal,tcampbell DONTBUILD

Mostly mechanical: `markdownlint-cli2 --fix` over the directories the md
linter covers (blank lines around fences and lists, list indentation, bare
URLs wrapped in angle brackets, stray spaces inside code spans).

A few spots needed to be fixed by hand because they were malformed in the
first place: reference links left dangling by the RST conversion in
ipc/docs/ipdl.md and devtools/docs/user/debugger-api/index.md, an `{image}`
directive whose options had escaped the fence in
docs/contributing/debugging/capturing_minidump.md, and text where a literal
asterisk or underscore was being parsed as emphasis.

Differential Revision: https://phabricator.services.mozilla.com/D315001
This commit is contained in:
Sylvestre Ledru
2026-09-11 17:38:33 +00:00
committed by sledru@mozilla.com
parent b14ad10e3f
commit e173c24599
40 changed files with 267 additions and 105 deletions
+1 -1
View File
@@ -37,7 +37,7 @@ this service at:
* [Source for nsIPrefBranch](https://searchfox.org/firefox-main/source/modules/libpref/nsIPrefBranch.idl)
* [Source for nsIPrefService](https://searchfox.org/firefox-main/source/modules/libpref/nsIPrefService.idl)
### Services.pref.get* and Services.pref.set*
### `Services.pref.get*` and `Services.pref.set*`
The main APIs you will have to know and use are getters and setters.
+2 -2
View File
@@ -55,8 +55,8 @@ Here are some things you can try out yourself that show off some of `Debugger`
While the `Debugger` core API deals only with concepts common to any JavaScript implementation, it also includes some Gecko-specific features:
- [Global tracking][global] supports debugging all the code running in a Gecko instance at once—the chrome debugging model.
- [Object wrapper][wrapper] functions help manipulate object references that cross privilege boundaries.
- {doc}`Global tracking <debugger/index>` supports debugging all the code running in a Gecko instance at once—the chrome debugging model.
- {doc}`Object wrapper <debugger.object/index>` functions help manipulate object references that cross privilege boundaries.
### Source Metadata
+9 -9
View File
@@ -96,12 +96,12 @@ Truncate DOM attributes
Default color unit
: A setting to control how colors are represented in the inspector:
- Hex
- HSL(A)
- RGB(A)
- HWB
- color name
- As authored.
- Hex
- HSL(A)
- RGB(A)
- HWB
- color name
- As authored.
Enable layout panel
: Enable the experimental layout panel. This setting only exists in Firefox Nightly.
@@ -168,9 +168,9 @@ Tab size
Keybindings
: Choose the default CodeMirror keybindings or keybindings from one of several popular editors:
- Vim
- Emacs
- Sublime Text
- Vim
- Emacs
- Sublime Text
(settings-advanced-settings)=
+1 -1
View File
@@ -18,7 +18,7 @@ monitoring, console logs, user input simulation, and Firefox logging. It isn't
complete yet, but can already be useful.
This documentation refers to the official Mozilla MCP for
Firefox development: https://github.com/mozilla/firefox-devtools-mcp
Firefox development: <https://github.com/mozilla/firefox-devtools-mcp>
### Key Features
@@ -150,6 +150,7 @@ will be removed from our queue until you post a comment with the requested
information, and re-add the group.**
Here's what you'll see:
```markdown
You've tagged the accessibility team for review. If you've already spoken
to a team member about your request, please request review from the
+23 -23
View File
@@ -26,7 +26,7 @@ developer friction when landing security patches.
## Process for Security Bugs (Developer Perspective)
One type of security bug is a straightforward vulnerability. A
One type of security bug is a straightforward vulnerability. A
second type is a more casual analysis of a code pattern, an architecture
limitation, or a general observation about bug patterns.
@@ -47,10 +47,10 @@ especially when commenting in bugs with external reporters.
- Try not to discuss problematic code patterns or architecture limitations
in bugs filed by external reporters, or in situations where fixing the
undesirable behavior is likely to be a project that does not complete
within half a year or more. Instead, file a second bug tagged
within half a year or more. Instead, file a second bug tagged
`sec-audit` (for identifying patterns and addressing them) or `sec-want`
(for developing more comprehensive checks or fixing a design), and move
that discussion there. AI is very good at taking patterns and
that discussion there. AI is very good at taking patterns and
descriptions and finding new bugs based on them.
### Developing the Patch
@@ -83,7 +83,7 @@ for more details.
### On Requesting sec-approval
Previously, sec-approval was required for all `sec-high` rated security
bugs in most circumstances. This is now inverted.
bugs in most circumstances. This is now inverted.
**sec-approval is only required for bugs that represent a vulnerability
in the parent process, triggerable from a content process**.
@@ -91,29 +91,29 @@ in the parent process, triggerable from a content process**.
This is typically constrained to bugs with the keywords `sec-high` and
`csectype-sandbox-escape`.
- If a bug does not have a security rating, you are invited to give it
one, following the [Client Severity Guidelines](https://wiki.mozilla.org/Security_Severity_Ratings/Client)
- If a bug is a cross-process bug that does not affect the Parent
Process, the correct keyword is `csectype-priv-escalation`. In the
past, these were given `csectype-sandbox-escape` but this is no longer
correct, and you are invited to fix the keywords if you encounter them
used incorrectly.
- If a bug does not have a security rating, you are invited to give it
one, following the [Client Severity Guidelines](https://wiki.mozilla.org/Security_Severity_Ratings/Client)
- If a bug is a cross-process bug that does not affect the Parent
Process, the correct keyword is `csectype-priv-escalation`. In the
past, these were given `csectype-sandbox-escape` but this is no longer
correct, and you are invited to fix the keywords if you encounter them
used incorrectly.
For the avoidance of doubt, core-security bug fixes can be landed by
a developer without any explicit approval if:
- The bug has a sec-low, sec-moderate, sec-other, or sec-want rating.
- The bug has a sec-high rating, but only affects the content process
- The bug has a sec-high rating, but only affects some other, non-Parent process
- The bug has a sec-high rating, is a cross-process bug, but that target process
is the GPU, RDD, GMP, Utility, Socket, or other non-Parent process
- The bug _is_ a parent process bug _but_ it is a recent regression on
mozilla-central. Meaning:
- A specific regressing check-in has been identified
- The developer can (**and has**) marked the status flags for ESR and
Beta as "unaffected"
- We have not shipped this vulnerability in anything other than a
nightly build
- The bug has a sec-low, sec-moderate, sec-other, or sec-want rating.
- The bug has a sec-high rating, but only affects the content process
- The bug has a sec-high rating, but only affects some other, non-Parent process
- The bug has a sec-high rating, is a cross-process bug, but that target process
is the GPU, RDD, GMP, Utility, Socket, or other non-Parent process
- The bug _is_ a parent process bug _but_ it is a recent regression on
mozilla-central. Meaning:
- A specific regressing check-in has been identified
- The developer can (**and has**) marked the status flags for ESR and
Beta as "unaffected"
- We have not shipped this vulnerability in anything other than a
nightly build
If it meets any of the above criteria, developers do not need to ask for
sec-approval.
@@ -64,9 +64,8 @@ line tool, please follow [Capture a minidump from the command line](#capture-a-m
icons are registered under "Windows Kits" as below.
```{image} img/windbg-in-startmenu.png
:width: 50%
```
:width: 50%
```
2. Connect Firefox to the debugger.
+1 -1
View File
@@ -145,7 +145,7 @@ tear down any dependencies you have in your test fixtures. Avoid
writing integration tests and focus on testing individual units.
:::
See https://hg.mozilla.org/mozilla-central/rev/ed612eec41a44867a for an
See <https://hg.mozilla.org/mozilla-central/rev/ed612eec41a44867a> for an
example of how to add a simple test.
If you're converting an existing C++ unit test to a GTest, [this
-1
View File
@@ -589,7 +589,6 @@ If you've ever used the subscript loader, you might not know that it can
load scripts asynchronously, and return a Promise once they're loaded.
For example:
Services.scriptloader.loadSubScriptWithOptions(myScriptURL, { async: true }).then(() => {
console.log("Script at " + myScriptURL + " loaded asynchronously!");
});
+1 -1
View File
@@ -21,7 +21,7 @@ sudo dtrace -n 'mach_kernel::wakeup { @[ustack()] = count(); }' -p $FIREFOX_PID
Let's break that down further.
- The` -n` option combined with the `mach_kernel::wakeup` selects a
- The `-n` option combined with the `mach_kernel::wakeup` selects a
*probe point*. `mach_kernel` is the *module name* and `wakeup` is
the *probe name*. You can see a complete list of probes by running
`sudo dtrace -l`.
+1 -1
View File
@@ -174,7 +174,7 @@ contains a strong reference to the EventListenerManager
`0x7f0899b4e550`. "[via hash] mListenerManager" is a description of
that strong reference. Together, these lines show a chain of strong
references from an object the cycle collector thinks needs to be kept
alive, `0x7f0899b4e550`, to the object` 0x7f0897082c00` that you asked
alive, `0x7f0899b4e550`, to the object `0x7f0897082c00` that you asked
about. Most of the time, the actual chain is not important, because the
cycle collector can only tell us about what went right. Let us call the
address of the leaking object (`0x7f0882fe3230` in this case)
+1 -1
View File
@@ -21,7 +21,7 @@ Version
7.1)](http://www.microsoft.com/downloads/details.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b&displaylang=en "http://www.microsoft.com/downloads/details.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b&displaylang=en"){.external}.
Use the web installer to install at least the \"Win32 Development
Tools\". Once the SDK installs, execute either `wpt_x86.msi` or
`wpt_x64.msi` in the `Redist/Windows Performance Toolkit `folder of the
`wpt_x64.msi` in the `Redist/Windows Performance Toolkit` folder of the
SDK's install location (typically Program Files/Microsoft
SDKs/Windows/v7.1/Redist/Windows Performance Toolkit) to actually
install the Windows Performance Toolkit tools.
@@ -1,4 +1,5 @@
# RustAdsClient.sys.mjs
```{js:autoclass} RustAdsClient.sys.Other
:members:
:exclude-members: Other
+26
View File
@@ -1,99 +1,125 @@
# RustAutofill.sys.mjs
```{js:autoclass} RustAutofill.sys.Address
:members:
:exclude-members: Address
```
```{js:autoclass} RustAutofill.sys.AddressBulkResultEntry
:members:
:exclude-members: AddressBulkResultEntry
```
```{js:autoclass} RustAutofill.sys.AddressBulkTombstoneResultEntry
:members:
:exclude-members: AddressBulkTombstoneResultEntry
```
```{js:autoclass} RustAutofill.sys.AddressMeta
:members:
:exclude-members: AddressMeta
```
```{js:autoclass} RustAutofill.sys.AddressTombstone
:members:
:exclude-members: AddressTombstone
```
```{js:autoclass} RustAutofill.sys.AddressesBridgedEngine
:members:
:exclude-members: AddressesBridgedEngine
```
```{js:autoclass} RustAutofill.sys.CreditCard
:members:
:exclude-members: CreditCard
```
```{js:autoclass} RustAutofill.sys.CreditCardBulkResultEntry
:members:
:exclude-members: CreditCardBulkResultEntry
```
```{js:autoclass} RustAutofill.sys.CreditCardBulkTombstoneResultEntry
:members:
:exclude-members: CreditCardBulkTombstoneResultEntry
```
```{js:autoclass} RustAutofill.sys.CreditCardMeta
:members:
:exclude-members: CreditCardMeta
```
```{js:autoclass} RustAutofill.sys.CreditCardTombstone
:members:
:exclude-members: CreditCardTombstone
```
```{js:autoclass} RustAutofill.sys.CreditCardsDeletionMetrics
:members:
:exclude-members: CreditCardsDeletionMetrics
```
```{js:autoclass} RustAutofill.sys.CryptoError
:members:
:exclude-members: CryptoError
```
```{js:autoclass} RustAutofill.sys.InterruptedError
:members:
:exclude-members: InterruptedError
```
```{js:autoclass} RustAutofill.sys.NoSuchRecord
:members:
:exclude-members: NoSuchRecord
```
```{js:autoclass} RustAutofill.sys.Passport
:members:
:exclude-members: Passport
```
```{js:autoclass} RustAutofill.sys.SqlError
:members:
:exclude-members: SqlError
```
```{js:autoclass} RustAutofill.sys.UnexpectedAutofillApiError
:members:
:exclude-members: UnexpectedAutofillApiError
```
```{js:autoclass} RustAutofill.sys.UpdatableAddressFields
:members:
:exclude-members: UpdatableAddressFields
```
```{js:autoclass} RustAutofill.sys.UpdatableAddressFieldsWithMeta
:members:
:exclude-members: UpdatableAddressFieldsWithMeta
```
```{js:autoclass} RustAutofill.sys.UpdatableCreditCardFields
:members:
:exclude-members: UpdatableCreditCardFields
```
```{js:autoclass} RustAutofill.sys.UpdatableCreditCardFieldsWithMeta
:members:
:exclude-members: UpdatableCreditCardFieldsWithMeta
```
```{js:autoclass} RustAutofill.sys.UpdatablePassportFields
:members:
:exclude-members: UpdatablePassportFields
```
```{js:autofunction} RustAutofill.sys.createAutofillKey
```
```{js:autofunction} RustAutofill.sys.decryptString
```
```{js:autofunction} RustAutofill.sys.encryptString
```
@@ -1,12 +1,15 @@
# RustBreachAlerts.sys.mjs
```{js:autoclass} RustBreachAlerts.sys.BreachAlertsApiError
:members:
:exclude-members: BreachAlertsApiError
```
```{js:autoclass} RustBreachAlerts.sys.BreachAlertsStore
:members:
:exclude-members: BreachAlertsStore
```
```{js:autoclass} RustBreachAlerts.sys.Unexpected
:members:
:exclude-members: Unexpected
@@ -1,8 +1,10 @@
# RustContextId.sys.mjs
```{js:autoclass} RustContextId.sys.ContextIdComponent
:members:
:exclude-members: ContextIdComponent
```
```{js:autoclass} RustContextId.sys.Other
:members:
:exclude-members: Other
@@ -1,8 +1,10 @@
# RustFilterAdult.sys.mjs
```{js:autoclass} RustFilterAdult.sys.ApiError
:members:
:exclude-members: ApiError
```
```{js:autoclass} RustFilterAdult.sys.Other
:members:
:exclude-members: Other
@@ -1,3 +1,4 @@
# RustInitRustComponents.sys.mjs
```{js:autofunction} RustInitRustComponents.sys.initialize
```
+30
View File
@@ -1,107 +1,137 @@
# RustLogins.sys.mjs
```{js:autoclass} RustLogins.sys.AuthenticationCanceled
:members:
:exclude-members: AuthenticationCanceled
```
```{js:autoclass} RustLogins.sys.AuthenticationError
:members:
:exclude-members: AuthenticationError
```
```{js:autoclass} RustLogins.sys.BulkResultEntry
:members:
:exclude-members: BulkResultEntry
```
```{js:autoclass} RustLogins.sys.DecryptionFailed
:members:
:exclude-members: DecryptionFailed
```
```{js:autoclass} RustLogins.sys.EncryptionFailed
:members:
:exclude-members: EncryptionFailed
```
```{js:autoclass} RustLogins.sys.Interrupted
:members:
:exclude-members: Interrupted
```
```{js:autoclass} RustLogins.sys.InvalidKey
:members:
:exclude-members: InvalidKey
```
```{js:autoclass} RustLogins.sys.InvalidRecord
:members:
:exclude-members: InvalidRecord
```
```{js:autoclass} RustLogins.sys.Login
:members:
:exclude-members: Login
```
```{js:autoclass} RustLogins.sys.LoginCandidate
:members:
:exclude-members: LoginCandidate
```
```{js:autoclass} RustLogins.sys.LoginEntry
:members:
:exclude-members: LoginEntry
```
```{js:autoclass} RustLogins.sys.LoginEntryWithMeta
:members:
:exclude-members: LoginEntryWithMeta
```
```{js:autoclass} RustLogins.sys.LoginMeta
:members:
:exclude-members: LoginMeta
```
```{js:autoclass} RustLogins.sys.LoginsApiError
:members:
:exclude-members: LoginsApiError
```
```{js:autoclass} RustLogins.sys.LoginsBridgedEngine
:members:
:exclude-members: LoginsBridgedEngine
```
```{js:autoclass} RustLogins.sys.LoginsDeletionMetrics
:members:
:exclude-members: LoginsDeletionMetrics
```
```{js:autoclass} RustLogins.sys.MissingKey
:members:
:exclude-members: MissingKey
```
```{js:autoclass} RustLogins.sys.NoSuchRecord
:members:
:exclude-members: NoSuchRecord
```
```{js:autoclass} RustLogins.sys.NssAuthenticationError
:members:
:exclude-members: NssAuthenticationError
```
```{js:autoclass} RustLogins.sys.NssKeyManager
:members:
:exclude-members: NssKeyManager
```
```{js:autoclass} RustLogins.sys.NssUninitialized
:members:
:exclude-members: NssUninitialized
```
```{js:autoclass} RustLogins.sys.PrimaryPasswordAuthenticator
:members:
:exclude-members: PrimaryPasswordAuthenticator
```
```{js:autoclass} RustLogins.sys.UnexpectedLoginsApiError
:members:
:exclude-members: UnexpectedLoginsApiError
```
```{js:autofunction} RustLogins.sys.checkCanary
```
```{js:autofunction} RustLogins.sys.createCanary
```
```{js:autofunction} RustLogins.sys.createKey
```
```{js:autofunction} RustLogins.sys.createLoginStoreWithNssKeymanager
```
```{js:autofunction} RustLogins.sys.createLoginStoreWithStaticKeyManager
```
```{js:autofunction} RustLogins.sys.createManagedEncdec
```
```{js:autofunction} RustLogins.sys.createStaticKeyManager
```
+6
View File
@@ -1,23 +1,29 @@
# RustRelevancy.sys.mjs
```{js:autoclass} RustRelevancy.sys.Interest
:members:
:exclude-members: Interest
```
```{js:autoclass} RustRelevancy.sys.InterestMetrics
:members:
:exclude-members: InterestMetrics
```
```{js:autoclass} RustRelevancy.sys.InterestVector
:members:
:exclude-members: InterestVector
```
```{js:autoclass} RustRelevancy.sys.RelevancyApiError
:members:
:exclude-members: RelevancyApiError
```
```{js:autoclass} RustRelevancy.sys.Unexpected
:members:
:exclude-members: Unexpected
```
```{js:autofunction} RustRelevancy.sys.score
```
@@ -1,48 +1,60 @@
# RustRemoteSettings.sys.mjs
```{js:autoclass} RustRemoteSettings.sys.Attachment
:members:
:exclude-members: Attachment
```
```{js:autoclass} RustRemoteSettings.sys.Backoff
:members:
:exclude-members: Backoff
```
```{js:autoclass} RustRemoteSettings.sys.Network
:members:
:exclude-members: Network
```
```{js:autoclass} RustRemoteSettings.sys.Other
:members:
:exclude-members: Other
```
```{js:autoclass} RustRemoteSettings.sys.RemoteSettingsClient
:members:
:exclude-members: RemoteSettingsClient
```
```{js:autoclass} RustRemoteSettings.sys.RemoteSettingsConfig
:members:
:exclude-members: RemoteSettingsConfig
```
```{js:autoclass} RustRemoteSettings.sys.RemoteSettingsContext
:members:
:exclude-members: RemoteSettingsContext
```
```{js:autoclass} RustRemoteSettings.sys.RemoteSettingsError
:members:
:exclude-members: RemoteSettingsError
```
```{js:autoclass} RustRemoteSettings.sys.RemoteSettingsRecord
:members:
:exclude-members: RemoteSettingsRecord
```
```{js:autoclass} RustRemoteSettings.sys.RemoteSettingsServer
:members:
:exclude-members: RemoteSettingsServer
```
```{js:autoclass} RustRemoteSettings.sys.RemoteSettingsService
:members:
:exclude-members: RemoteSettingsService
```
```{js:autoclass} RustRemoteSettings.sys.SyncStatus
:members:
:exclude-members: SyncStatus
+14
View File
@@ -1,56 +1,70 @@
# RustSearch.sys.mjs
```{js:autoclass} RustSearch.sys.JsonEngineMethod
:members:
:exclude-members: JsonEngineMethod
```
```{js:autoclass} RustSearch.sys.JsonEngineUrl
:members:
:exclude-members: JsonEngineUrl
```
```{js:autoclass} RustSearch.sys.JsonEngineUrls
:members:
:exclude-members: JsonEngineUrls
```
```{js:autoclass} RustSearch.sys.Other
:members:
:exclude-members: Other
```
```{js:autoclass} RustSearch.sys.RefinedSearchConfig
:members:
:exclude-members: RefinedSearchConfig
```
```{js:autoclass} RustSearch.sys.SearchApplicationName
:members:
:exclude-members: SearchApplicationName
```
```{js:autoclass} RustSearch.sys.SearchEngineClassification
:members:
:exclude-members: SearchEngineClassification
```
```{js:autoclass} RustSearch.sys.SearchEngineDefinition
:members:
:exclude-members: SearchEngineDefinition
```
```{js:autoclass} RustSearch.sys.SearchEngineSelector
:members:
:exclude-members: SearchEngineSelector
```
```{js:autoclass} RustSearch.sys.SearchEngineUrl
:members:
:exclude-members: SearchEngineUrl
```
```{js:autoclass} RustSearch.sys.SearchEngineUrls
:members:
:exclude-members: SearchEngineUrls
```
```{js:autoclass} RustSearch.sys.SearchUpdateChannel
:members:
:exclude-members: SearchUpdateChannel
```
```{js:autoclass} RustSearch.sys.SearchUrlParam
:members:
:exclude-members: SearchUrlParam
```
```{js:autoclass} RustSearch.sys.SearchUserEnvironment
:members:
:exclude-members: SearchUserEnvironment
+25
View File
@@ -1,99 +1,124 @@
# RustSuggest.sys.mjs
```{js:autoclass} RustSuggest.sys.AlternateNames
:members:
:exclude-members: AlternateNames
```
```{js:autoclass} RustSuggest.sys.Backoff
:members:
:exclude-members: Backoff
```
```{js:autoclass} RustSuggest.sys.FtsMatchInfo
:members:
:exclude-members: FtsMatchInfo
```
```{js:autoclass} RustSuggest.sys.Geoname
:members:
:exclude-members: Geoname
```
```{js:autoclass} RustSuggest.sys.GeonameAlternates
:members:
:exclude-members: GeonameAlternates
```
```{js:autoclass} RustSuggest.sys.GeonameMatch
:members:
:exclude-members: GeonameMatch
```
```{js:autoclass} RustSuggest.sys.GeonameType
:members:
:exclude-members: GeonameType
```
```{js:autoclass} RustSuggest.sys.InterruptKind
:members:
:exclude-members: InterruptKind
```
```{js:autoclass} RustSuggest.sys.Interrupted
:members:
:exclude-members: Interrupted
```
```{js:autoclass} RustSuggest.sys.LabeledTimingSample
:members:
:exclude-members: LabeledTimingSample
```
```{js:autoclass} RustSuggest.sys.Network
:members:
:exclude-members: Network
```
```{js:autoclass} RustSuggest.sys.Other
:members:
:exclude-members: Other
```
```{js:autoclass} RustSuggest.sys.SuggestApiError
:members:
:exclude-members: SuggestApiError
```
```{js:autoclass} RustSuggest.sys.SuggestGlobalConfig
:members:
:exclude-members: SuggestGlobalConfig
```
```{js:autoclass} RustSuggest.sys.SuggestIngestionConstraints
:members:
:exclude-members: SuggestIngestionConstraints
```
```{js:autoclass} RustSuggest.sys.SuggestIngestionMetrics
:members:
:exclude-members: SuggestIngestionMetrics
```
```{js:autoclass} RustSuggest.sys.SuggestProviderConfig
:members:
:exclude-members: SuggestProviderConfig
```
```{js:autoclass} RustSuggest.sys.SuggestStore
:members:
:exclude-members: SuggestStore
```
```{js:autoclass} RustSuggest.sys.SuggestStoreBuilder
:members:
:exclude-members: SuggestStoreBuilder
```
```{js:autoclass} RustSuggest.sys.Suggestion
:members:
:exclude-members: Suggestion
```
```{js:autoclass} RustSuggest.sys.SuggestionProvider
:members:
:exclude-members: SuggestionProvider
```
```{js:autoclass} RustSuggest.sys.SuggestionProviderConstraints
:members:
:exclude-members: SuggestionProviderConstraints
```
```{js:autoclass} RustSuggest.sys.SuggestionQuery
:members:
:exclude-members: SuggestionQuery
```
```{js:autoclass} RustSuggest.sys.YelpSubjectType
:members:
:exclude-members: YelpSubjectType
```
```{js:autofunction} RustSuggest.sys.rawSuggestionUrlMatches
```
+1
View File
@@ -1,4 +1,5 @@
# RustSync15.sys.mjs
```{js:autoclass} RustSync15.sys.DeviceType
:members:
:exclude-members: DeviceType
+7
View File
@@ -1,28 +1,35 @@
# RustTabs.sys.mjs
```{js:autoclass} RustTabs.sys.PendingCommand
:members:
:exclude-members: PendingCommand
```
```{js:autoclass} RustTabs.sys.RemoteCommand
:members:
:exclude-members: RemoteCommand
```
```{js:autoclass} RustTabs.sys.SqlError
:members:
:exclude-members: SqlError
```
```{js:autoclass} RustTabs.sys.SyncError
:members:
:exclude-members: SyncError
```
```{js:autoclass} RustTabs.sys.TabGroup
:members:
:exclude-members: TabGroup
```
```{js:autoclass} RustTabs.sys.TabsBridgedEngine
:members:
:exclude-members: TabsBridgedEngine
```
```{js:autoclass} RustTabs.sys.UnexpectedTabsError
:members:
:exclude-members: UnexpectedTabsError
+3
View File
@@ -1,9 +1,12 @@
# RustTracing.sys.mjs
```{js:autoclass} RustTracing.sys.EventSinkSpecification
:members:
:exclude-members: EventSinkSpecification
```
```{js:autofunction} RustTracing.sys.registerEventSink
```
```{js:autofunction} RustTracing.sys.unregisterEventSink
```
+24
View File
@@ -1,81 +1,105 @@
# RustViaduct.sys.mjs
```{js:autoclass} RustViaduct.sys.BackendAlreadyInitialized
:members:
:exclude-members: BackendAlreadyInitialized
```
```{js:autoclass} RustViaduct.sys.BackendError
:members:
:exclude-members: BackendError
```
```{js:autoclass} RustViaduct.sys.BackendNotInitialized
:members:
:exclude-members: BackendNotInitialized
```
```{js:autoclass} RustViaduct.sys.Method
:members:
:exclude-members: Method
```
```{js:autoclass} RustViaduct.sys.NetworkError
:members:
:exclude-members: NetworkError
```
```{js:autoclass} RustViaduct.sys.NonTlsUrl
:members:
:exclude-members: NonTlsUrl
```
```{js:autoclass} RustViaduct.sys.OhttpChannelNotConfigured
:members:
:exclude-members: OhttpChannelNotConfigured
```
```{js:autoclass} RustViaduct.sys.OhttpConfig
:members:
:exclude-members: OhttpConfig
```
```{js:autoclass} RustViaduct.sys.OhttpConfigFetchFailed
:members:
:exclude-members: OhttpConfigFetchFailed
```
```{js:autoclass} RustViaduct.sys.OhttpNotSupported
:members:
:exclude-members: OhttpNotSupported
```
```{js:autoclass} RustViaduct.sys.OhttpRequestError
:members:
:exclude-members: OhttpRequestError
```
```{js:autoclass} RustViaduct.sys.OhttpResponseError
:members:
:exclude-members: OhttpResponseError
```
```{js:autoclass} RustViaduct.sys.RequestHeaderError
:members:
:exclude-members: RequestHeaderError
```
```{js:autoclass} RustViaduct.sys.Response
:members:
:exclude-members: Response
```
```{js:autoclass} RustViaduct.sys.SetBackendError
:members:
:exclude-members: SetBackendError
```
```{js:autoclass} RustViaduct.sys.UrlError
:members:
:exclude-members: UrlError
```
```{js:autofunction} RustViaduct.sys.allowAndroidEmulatorLoopback
```
```{js:autofunction} RustViaduct.sys.clearOhttpChannels
```
```{js:autofunction} RustViaduct.sys.configureDefaultOhttpChannels
```
```{js:autofunction} RustViaduct.sys.configureOhttpChannel
```
```{js:autofunction} RustViaduct.sys.initBackend
```
```{js:autofunction} RustViaduct.sys.listOhttpChannels
```
```{js:autofunction} RustViaduct.sys.sendOhttpRequest
```
```{js:autofunction} RustViaduct.sys.setGlobalDefaultUserAgent
```
@@ -1,12 +1,15 @@
# RustWebextstorage.sys.mjs
```{js:autoclass} RustWebextstorage.sys.JsonError
:members:
:exclude-members: JsonError
```
```{js:autoclass} RustWebextstorage.sys.QuotaError
:members:
:exclude-members: QuotaError
```
```{js:autoclass} RustWebextstorage.sys.UnexpectedError
:members:
:exclude-members: UnexpectedError
@@ -36,7 +36,6 @@ Teams that write shared Rust components are responsible for maintaining their he
This includes monitoring error reports and working with application teams to maintain integrations as the application code changes.
Error reports are currently only available for Android, but we will soon be extending this to all platforms.
```{toctree}
:titlesonly:
:maxdepth: 1
@@ -26,8 +26,8 @@ Keep a few things in mind before you create a new set of bindings:
If any of these are blockers for your work, consider discussing it further with the UniFFI devs to see if we can support
your project:
- Chat with us on `#uniffi` on Matrix/Element
- File an issue on [mozilla/uniffi](https://github.com/mozilla/uniffi-rs/)
- Chat with us on `#uniffi` on Matrix/Element
- File an issue on [mozilla/uniffi](https://github.com/mozilla/uniffi-rs/)
## Creating new bindings with UniFFI
@@ -35,32 +35,32 @@ You can see an example of this feature in use: [when application-services swappe
Here's how you can create a new set of bindings using UniFFI:
1. UniFFI your crate (if it isn't already):
- Follow the steps from the [UniFFI user guide](https://mozilla.github.io/uniffi-rs/0.27/) to add support to your crate.
- UDL and proc-macros are both supported.
2. Add your crate as a Firefox dependency (if it isn't already)
- **If the code will exist in the mozilla-central repo:**
- Create a new directory for the Rust crate
- Edit `toolkit/components/uniffi-bindgen-gecko-js/components/Cargo.toml` and add a dependency to your library path
- **If the code exists in an external repo:**
- Edit `toolkit/components/uniffi-bindgen-gecko-js/components/Cargo.toml` and add a dependency to your library URL
- Run `mach vendor rust` to vendor in your Rust code
3. Configure your crate (optional)
- Edit `toolkit/components/uniffi-bindgen-gecko-js/config.toml` and add an entry for your crate.
4. Add scaffolding for your crate
- Edit `toolkit/components/uniffi-bindgen-gecko-js/components/lib.rs` and add an entry for the uniffi scaffolding for your crate.
5. Generate bindings code for your crate
- Run `./mach uniffi generate`
- add your newly generated `Rust{udl-name}.sys.mjs` file to `toolkit/components/uniffi-bindgen-gecko-js/components/moz.build`
- Then simply import your module to the file you want to use it in and start using your APIs!
1. UniFFI your crate (if it isn't already):
- Follow the steps from the [UniFFI user guide](https://mozilla.github.io/uniffi-rs/0.27/) to add support to your crate.
- UDL and proc-macros are both supported.
2. Add your crate as a Firefox dependency (if it isn't already)
- **If the code will exist in the mozilla-central repo:**
- Create a new directory for the Rust crate
- Edit `toolkit/components/uniffi-bindgen-gecko-js/components/Cargo.toml` and add a dependency to your library path
- **If the code exists in an external repo:**
- Edit `toolkit/components/uniffi-bindgen-gecko-js/components/Cargo.toml` and add a dependency to your library URL
- Run `mach vendor rust` to vendor in your Rust code
3. Configure your crate (optional)
- Edit `toolkit/components/uniffi-bindgen-gecko-js/config.toml` and add an entry for your crate.
4. Add scaffolding for your crate
- Edit `toolkit/components/uniffi-bindgen-gecko-js/components/lib.rs` and add an entry for the uniffi scaffolding for your crate.
5. Generate bindings code for your crate
- Run `./mach uniffi generate`
- add your newly generated `Rust{udl-name}.sys.mjs` file to `toolkit/components/uniffi-bindgen-gecko-js/components/moz.build`
- Then simply import your module to the file you want to use it in and start using your APIs!
Example from tabs module:
Example from tabs module:
``` js
ChromeUtils.defineESModuleGetters(lazy, {
...
TabsStore: "moz-src:///toolkit/components/uniffi-bindgen-gecko-js/components/generated/RustTabs.sys.mjs",
});
...
this._rustStore = await lazy.TabsStore.init(path);
```
``` js
ChromeUtils.defineESModuleGetters(lazy, {
...
TabsStore: "moz-src:///toolkit/components/uniffi-bindgen-gecko-js/components/generated/RustTabs.sys.mjs",
});
...
this._rustStore = await lazy.TabsStore.init(path);
```
+2
View File
@@ -269,12 +269,14 @@ if (!iter.Seek(childNode)) {
```
Then, you can iterate the remaining children:
```cpp
for (nsIContent* sibling = iter.GetNextChild(); sibling;
sibling = iter.GetNextChild()) {
// Do something with sibling.
}
```
```cpp
for (nsIContent* sibling = iter.GetPreviousChild(); sibling;
sibling = iter.GetPreviousChild()) {
+11 -11
View File
@@ -378,11 +378,11 @@ e.g. steps 6 and 8 involve IPC, not just "stack unwinding").
1. 1. If the input events landed outside a dispatch-to-content region,
any available events in the input block are processed. These may
trigger behaviours like scrolling or tap gestures.
1. If the input events landed inside a dispatch-to-content region,
the events are left in the queue and a timeout is initiated. If
the timeout expires before step 9 is completed, the APZ assumes
the input block was not cancelled and the tentative target is
correct, and processes them as part of step 10.
1. If the input events landed inside a dispatch-to-content region,
the events are left in the queue and a timeout is initiated. If
the timeout expires before step 9 is completed, the APZ assumes
the input block was not cancelled and the tentative target is
correct, and processes them as part of step 10.
4. The call stack unwinds back to APZCTreeManager::ReceiveInputEvent,
which does an in-place modification of the input event so that any
async transforms are removed.
@@ -407,12 +407,12 @@ e.g. steps 6 and 8 involve IPC, not just "stack unwinding").
depending on the input type.
1. 1. If the events were processed as part of step 4(i), the
notifications from step 8 are ignored and step 10 is skipped.
1. If events were queued as part of step 4(ii), and steps 5-8
complete before the timeout, the arrival of both notifications
from step 8 will mark the input block ready for processing.
2. If events were queued as part of step 4(ii), but steps 5-8 take
longer than the timeout, the notifications from step 8 will be
ignored and step 10 will already have happened.
1. If events were queued as part of step 4(ii), and steps 5-8
complete before the timeout, the arrival of both notifications
from step 8 will mark the input block ready for processing.
2. If events were queued as part of step 4(ii), but steps 5-8 take
longer than the timeout, the notifications from step 8 will be
ignored and step 10 will already have happened.
8. If events were queued as part of step 4(ii) they are now either
processed (if the input block was not cancelled and Gecko detected a
scrollframe under the input event, or if the timeout expired) or
+2 -2
View File
@@ -136,7 +136,7 @@ IPDL compiler](#using-the-ipdl-compiler) for a complete list of required build c
> Write `ParamTraits` for C++ data types that don't have them. See
> [Generating IPDL-Aware C++ Data Types: IPDL Structs and Unions](#generating-ipdl-aware-c-data-types-ipdl-structs-and-unions) for IPDL
> structures. See [Referencing Externally Defined Data Types: IPDL
> Includes][referencing externally defined data types: ipdl includes] and [ParamTraits](#paramtraits) for C++ data types.
> Includes](#referencing-externally-defined-data-types-ipdl-includes) and [ParamTraits](#paramtraits) for C++ data types.
> 3. Write your actor and its messages. See [Defining Actors](#defining-actors).
3. Write C++ code to create and destroy instances of your actor at runtime.
@@ -258,7 +258,7 @@ no concern.
The second line includes the file `MyTypes.ipdlh`, which defines types like
structs and unions, but in IPDL, which means they have behavior that goes
beyond the similar C++ concepts. Details can be found in [Generating
IPDL-Aware C++ Data Types: IPDL Structs and Unions][generating ipdl-aware c++ data types: ipdl structs and unions].
IPDL-Aware C++ Data Types: IPDL Structs and Unions](#generating-ipdl-aware-c-data-types-ipdl-structs-and-unions).
The final lines include types from C++ headers. Additionally, the [RefCounted]
and [MoveOnly] attributes tell IPDL that the types have special functionality
@@ -34,20 +34,20 @@ Created a new subscription: [context data]
**Q. Why are credentials stored in Google Drive?**
* Firebase services require a credential file, typically named `google-services.json`, which are retrieved from the Firebase console for all the applications in that project. Our requirements are somewhat unique, so we generate our own XML file from `google-services.json` and use that.
According to [Firebase engineers](https://groups.google.com/forum/#!msg/firebase-talk/bamCgTDajkw/uVEJXjtiBwAJ), it should be safe to commit our `google-services.json` but we avoid doing that as there are other forks of Fenix that must not use these credentials.
For example, the Google I/O app commits [their release version](https://github.com/google/iosched/blob/b428d2be4bb96bd423e47cb709c906ce5d02150f/mobile/google-services.json) of the file to Github as well.
* Firebase services require a credential file, typically named `google-services.json`, which are retrieved from the Firebase console for all the applications in that project. Our requirements are somewhat unique, so we generate our own XML file from `google-services.json` and use that.
According to [Firebase engineers](https://groups.google.com/forum/#!msg/firebase-talk/bamCgTDajkw/uVEJXjtiBwAJ), it should be safe to commit our `google-services.json` but we avoid doing that as there are other forks of Fenix that must not use these credentials.
For example, the Google I/O app commits [their release version](https://github.com/google/iosched/blob/b428d2be4bb96bd423e47cb709c906ce5d02150f/mobile/google-services.json) of the file to Github as well.
**Q. What are the special requirements which mean we can't directly use `google-services.json`?**
* Following the 'Getting Started' Firebase instructions to initialize the service in Fenix would not work as we explicitly chose not to use the `com.google.gms.google-services` Gradle plugin as the Android service would be initialized with a [`ContentProvider`](https://firebase.blog/posts/2016/12/how-does-firebase-initialize-on-android) eagerly which reduces our control on how the application can start up in a performant way since the Browser startup sequence is quite unique.
* Following the 'Getting Started' Firebase instructions to initialize the service in Fenix would not work as we explicitly chose not to use the `com.google.gms.google-services` Gradle plugin as the Android service would be initialized with a [`ContentProvider`](https://firebase.blog/posts/2016/12/how-does-firebase-initialize-on-android) eagerly which reduces our control on how the application can start up in a performant way since the Browser startup sequence is quite unique.
**Q. Where do we get the `google-services.json` file from?**
* Ask your friendly Release Management teammate if they can access the Cloud Messaging console at `console.firebase.google.com`.
* Ask your friendly Release Management teammate if they can access the Cloud Messaging console at `console.firebase.google.com`.
**Q. How do I generate the XML file from `google-services.json`?**
* The easiest way is to use [this clever web app](https://dandar3.github.io/android/google-services-json-to-xml.html) that does this for you.
* The more official and tedious way, would be to do this manually by following [the instructions on the google services plugin](https://developers.google.com/android/guides/google-services-plugin#adding_the_json_file) site.
* Note that the `google-services.json` file may have the credentials for multiple applications, so ensure you are copying the instructions for the correct project.
* The easiest way is to use [this clever web app](https://dandar3.github.io/android/google-services-json-to-xml.html) that does this for you.
* The more official and tedious way, would be to do this manually by following [the instructions on the google services plugin](https://developers.google.com/android/guides/google-services-plugin#adding_the_json_file) site.
* Note that the `google-services.json` file may have the credentials for multiple applications, so ensure you are copying the instructions for the correct project.
@@ -166,7 +166,7 @@ Calls: [Controllers](#controller), other Interactors
### Description
This is the first object called whenever the user performs an action. Typically this will result in code in the [View](#view) that looks something like `some_button.onClickListener { interactor.onSomeButtonClicked() } `. It is the Interactors job to delegate this button click to whichever object should handle it.
This is the first object called whenever the user performs an action. Typically this will result in code in the [View](#view) that looks something like `some_button.onClickListener { interactor.onSomeButtonClicked() }`. It is the Interactors job to delegate this button click to whichever object should handle it.
Interactors may hold references to multiple other Interactors and Controllers, in which case they delegate specific methods to their appropriate handlers. This helps prevent bloated Controllers that both perform logic and delegate to other objects.
+4 -4
View File
@@ -39,10 +39,10 @@ To create an emulator:
simulator: '**focusX86Debug**' or '**klarX86Debug**'
1. Click on the drop down on the top left of Android Studio below the path view, and select '**Tests**'
2. navigate the sub-directories to the folder locations of the tests to be run. For example, UI Tests are located in **focus-android/app/src/androidTest/java/org.mozilla.focus.activity**
3. To run all tests in folder right click on the folder and select run. For individual tests you will do the same but right click on the specific test.
4. select your simulator or device (connected via ADB).
5. Click on the drop down on the top left of Android Studio below the path view, and select '**Tests**'
6. navigate the sub-directories to the folder locations of the tests to be run. For example, UI Tests are located in **focus-android/app/src/androidTest/java/org.mozilla.focus.activity**
7. To run all tests in folder right click on the folder and select run. For individual tests you will do the same but right click on the specific test.
8. select your simulator or device (connected via ADB).
From there Android Studio will compile and install Focus on the simulator or device and start running the tests.
+2 -2
View File
@@ -164,7 +164,7 @@ bool/int/float values, not strings or complex values.
Each mirror variable is read-only, accessible via a getter function. The base
name of the getter function is the same as the pref's name, but with '.' or '-'
converted to '_'. Sometimes a suffix is added, e.g. _AtStartup for the mirror
converted to '_'. Sometimes a suffix is added, e.g. `_AtStartup` for the mirror
once kind.
Mirror variables have two benefits. First, they allow C++ and Rust code to get
@@ -415,7 +415,7 @@ is subsequently used only to store changed pref values.
When any child process is created, the parent process serializes all pref
values present in the hash table (i.e. those that have changed since the
snapshot was made) _except sanitized prefs__ and stores them in a second,
snapshot was made) *except sanitized prefs* and stores them in a second,
short-lived shared memory region. This represents the set of changes the child
process needs to apply on top of the snapshot, and allows it to build a hash
table which should exactly match the parent's, modulo the sanitized prefs.
+2 -2
View File
@@ -3,8 +3,8 @@
% <https://raw.githubusercontent.com/mozilla/treeherder/HEAD/ui/helpers/constants.js>
% awk -e /thPlatformMap = {/,/};/ constants.js |grep ""|cut -d: -f2|sed -e s/^/ /|sed -e "s/$/ ,, /g"
% TODO:
% * Leverage verify_docs - <https://bugzilla.mozilla.org/show_bug.cgi?id=1636400>
% * Add a new column (when executed ? ie always, rarely, etc)
% - Leverage verify_docs - <https://bugzilla.mozilla.org/show_bug.cgi?id=1636400>
% - Add a new column (when executed ? ie always, rarely, etc)
## Build Platforms
@@ -1,12 +1,14 @@
# {{ module_name }}
{%- for class in classes %}
```{js:autoclass} {{ jsdoc_module_name }}.{{ class }}
:members:
:exclude-members: {{ class }}
```
{%- endfor %}
{%- for function in functions %}
```{js:autofunction} {{ jsdoc_module_name }}.{{ function }}
```
{%- endfor %}
+1 -1
View File
@@ -20,7 +20,7 @@ $ pandoc -t gfm https://github.com/mdn/archived-content/tree/main/files/en-us/mo
4. In the new doc.md, identify the images and wget/curl them into `img/`.
5. Verify the syntax using [./mach lint -l md]
6) If relevant, remove unbreakable spaces (rendered with a "!" on Phabricator)
6. If relevant, remove unbreakable spaces (rendered with a "!" on Phabricator)
```shell
sed -i -e 's/\xc2\xa0/ /g' doc.md