Bug 1840493 - doc/rst: fix some languages declaration r=firefox-source-docs-reviewers,webdriver-reviewers,necko-reviewers,geckoview-reviewers,devtools-reviewers,profiler-reviewers,championshuttler,whimboo,nchevobbe,julienw,amejiamarmol

Differential Revision: https://phabricator.services.mozilla.com/D196268
This commit is contained in:
ogiorgis 2023-12-13 18:32:20 +00:00
Родитель 9666a364e6
Коммит 111705f5fd
41 изменённых файлов: 279 добавлений и 281 удалений

Просмотреть файл

@ -57,8 +57,7 @@ and so on. Inputs are defined in the ``gBuiltInInputs`` object `in that file`_.
When creating a new object in ``gBuiltInInputs``, the available properties are
documented in the JSDoc for ``TouchBarInput``:
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
/**
* A representation of a Touch Bar input.
@ -131,8 +130,7 @@ Popover
be defined in the ``children`` property of the parent. Popovers can also be
shown and hidden programmatically, by calling
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
gTouchBarUpdater.showPopover(
TouchBarHelper.baseWindow,
@ -160,8 +158,8 @@ Examples
Some examples of ``gBuiltInInputs`` objects follow.
A simple button
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
Back: {
title: "back",
@ -176,8 +174,7 @@ A simple button
The search popover
This is the input that occupies the Touch Bar when the address bar is focused.
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
SearchPopover: {
title: "search-popover",

Просмотреть файл

@ -22,8 +22,7 @@ The UrlbarQueryContext
The *UrlbarQueryContext* object describes a single instance of a search.
It is augmented as it progresses through the system, with various information:
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
UrlbarQueryContext {
allowAutofill; // {boolean} If true, providers are allowed to return
@ -101,8 +100,7 @@ used by the user to restrict the search to specific result type (See the
The tokenizer uses heuristics to determine each token's type, as such the
consumer may want to check the value before applying filters.
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
UrlbarProvidersManager {
registerProvider(providerObj);
@ -135,8 +133,7 @@ implementation details may vary deeply among different providers.
Internal providers can access the Places database through the
*PlacesUtils.promiseLargeCacheDBConnection* utility.
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
class UrlbarProvider {
/**
@ -213,8 +210,7 @@ indicated by the UrlbarQueryContext.muxer property.
The Muxer is a replaceable component, as such what is described here is a
reference for the default View, but may not be valid for other implementations.
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
class UrlbarMuxer {
/**
@ -248,8 +244,7 @@ View (e.g. showing/hiding a panel). It is also responsible for reporting Telemet
Each *View* has a different *Controller* instance.
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
UrlbarController {
async startQuery(queryContext);
@ -278,8 +273,7 @@ user and handling their input.
Implements an input box *View*, owns an *UrlbarView*.
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
UrlbarInput {
constructor(options = { textbox, panel });
@ -323,8 +317,7 @@ Implements an input box *View*, owns an *UrlbarView*.
Represents the base *View* implementation, communicates with the *Controller*.
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
UrlbarView {
// Manage View visibility.
@ -359,7 +352,7 @@ properties, supported by all of the results.
Result types are also enumerated by *UrlbarUtils.RESULT_TYPE*.
.. code-block::
.. code-block:: JavaScript
UrlbarResult {
constructor(resultType, payload);
@ -384,8 +377,7 @@ properties, supported by all of the results.
The following RESULT_TYPEs are supported:
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
// An open tab.
// Payload: { icon, url, userContextId }

Просмотреть файл

@ -9,8 +9,7 @@ Various modules provide shared utilities to the other components:
Implements a Map-like storage or urlbar related preferences. The values are kept
up-to-date.
.. highlight:: JavaScript
.. code::
.. code:: JavaScript
// Always use browser.urlbar. relative branch, except for the preferences in
// PREF_OTHER_DEFAULTS.

Просмотреть файл

@ -65,7 +65,7 @@ takes the action identified by that line, otherwise the chrome registry
ignores that line (and prints a warning message in the runtime error
console).
.. code::
.. code:: text
locale packagename localename path/to/files
skin packagename skinname path/to/files
@ -81,7 +81,7 @@ Manifest instructions
comments
~~~~~~~~
.. code::
.. code:: text
# this line is a comment - you can put here whatever you want
@ -152,7 +152,7 @@ locale
A locale package is registered with the line:
.. code::
.. code:: text
locale packagename localename uri/to/files/ [flags]
@ -167,7 +167,7 @@ skin
A skin package is registered with the line:
.. code::
.. code:: text
skin packagename skinname uri/to/files/ [flags]
@ -183,7 +183,7 @@ style
Style overlays (custom CSS which will be applied to a chrome page) are
registered with the following syntax:
.. code::
.. code:: text
style chrome://URI-to-style chrome://stylesheet-URI [flags]
@ -195,7 +195,7 @@ file provided by the application or XULRunner. In order to allow for
this, the chrome registration manifest allows for "override"
instructions:
.. code::
.. code:: text
override chrome://package/type/original-uri.whatever new-resolved-URI [flags]
@ -212,7 +212,7 @@ resource
Aliases can be created using the ``resource`` instruction:
.. code::
.. code:: text
resource aliasname uri/to/files/ [flags]
@ -239,7 +239,7 @@ Extensions may install into multiple applications. There may be chrome
registration lines which only apply to one particular application. The
flag
.. code::
.. code:: text
application=app-ID
@ -264,7 +264,7 @@ Extensions may install into multiple versions of an application. There
may be chrome registration lines which only apply to a particular
application version. The flag
.. code::
.. code:: text
appversion=version
appversion<version
@ -287,7 +287,7 @@ This is particularly true for binary components. If there are chrome
registration lines which only apply to a particular Gecko version, the
flag
.. code::
.. code:: text
platformversion=version
platformversion<version
@ -333,7 +333,7 @@ Extensions (or themes) may offer different features depending on the
operating system on which Firefox is running. The value is compared to
the value of `OS_TARGET` for the platform.
.. code::
.. code:: text
os=WINNT
os=Darwin
@ -345,7 +345,7 @@ An extension or theme may need to operate differently depending on which
version of an operating system is running. For example, a theme may wish
to adopt a different look on Mac OS X 10.5 than 10.4:
.. code::
.. code:: text
osversion>=10.5

Просмотреть файл

@ -229,7 +229,7 @@ file:
``Foo.h``
.. code-block:: c++
.. code-block:: cpp
class Foo final : public nsISupports {
public:
@ -238,7 +238,7 @@ file:
``Foo.cpp``
.. code-block:: c++
.. code-block:: cpp
already_AddRefed<Foo> Foo::GetSingleton() {
// ...
@ -257,7 +257,7 @@ using a template specialization on an incomplete type:
``Foo.cpp``
.. code-block:: c++
.. code-block:: cpp
NS_IMPL_COMPONENT_FACTORY(Foo) {
return do_AddRef(new Foo()).downcast<nsISupports>();

Просмотреть файл

@ -188,11 +188,11 @@ localization ecosystem at Mozilla, and `the documentation about the
file format <http://moz-l10n-config.readthedocs.io/en/latest/fileformat.html>`_
explains how to set them up, and what the entries mean. In short, you find
.. code-block::
.. code-block:: toml
[[paths]]
reference = browser/locales/en-US/**
l10n = {l}browser/**
[paths]
reference = browser/locales/en-US/**
l10n = {l}browser/**
to add a directory for all localizations. Changes to these files are best
submitted for review by :Pike or :flod.
@ -285,10 +285,10 @@ a ``key``, and an action. An example like
.. code-block:: toml
[[filters]]
path = "{l}calendar/chrome/calendar/calendar-event-dialog.properties"
key = "re:.*Nounclass[1-9].*"
action = "ignore"
[filters]
path = "{l}calendar/chrome/calendar/calendar-event-dialog.properties"
key = "re:.*Nounclass[1-9].*"
action = "ignore"
indicates that the matching messages in ``calendar-event-dialog.properties`` are optional.

Просмотреть файл

@ -27,7 +27,7 @@ You can open the Browser Console in one of two ways:
You can also start the Browser Console by launching Firefox from the command line and passing the ``-jsconsole`` argument:
.. code-block::
.. code-block:: bash
/Applications/FirefoxAurora.app/Contents/MacOS/firefox-bin -jsconsole

Просмотреть файл

@ -30,7 +30,7 @@ gDevTools
The ``gDevTools`` API can be used to register new tools, themes and handle toolboxes for different tabs and windows. To use the ``gDevTools`` API from an add-on, it can be imported with following snippet
.. code-block::
.. code-block:: JavaScript
const { gDevTools } = require("resource:///modules/devtools/gDevTools.jsm");
@ -501,7 +501,7 @@ Example
Here's a minimal definition for a tool.
.. code-block:: javascript
.. code-block:: JavaScript
let def = {
id: "my-tool",
@ -561,7 +561,7 @@ Example
Here's a basic template for a ToolPanel implementation.
.. code-block:: javascript
.. code-block:: JavaScript
// In the ToolDefinition object, do
// build: (window, target) => new MyPanel(window, target),
@ -642,7 +642,7 @@ Examples
Here's a few examples using the ``gDevTools`` object.
.. code-block:: javascript
.. code-block:: JavaScript
let onInit = (eventName, toolbox, netmonitor) => console.log("Netmonitor initialized!");
@ -751,7 +751,7 @@ Examples
Register a tool
.. code-block:: javascript
.. code-block:: JavaScript
gDevTools.registerTool({
// FIXME: missing key related properties.
@ -775,7 +775,7 @@ Register a tool
Open a tool, or select it if the toolbox is already open:
.. code-block:: javascript
.. code-block:: JavaScript
let target = TargetFactory.forTab(gBrowser.selectedTab);
let toolbox = gDevTools.openToolbox(target, null, "inspector");
@ -788,7 +788,7 @@ Open a tool, or select it if the toolbox is already open:
Add a sidebar to an existing tool:
.. code-block:: javascript
.. code-block:: JavaScript
let sidebar = new ToolSidebar(xulTabbox, toolPanel, "toolId");
sidebar.addTab("tab1", "chrome://browser/content/.../tab1.xhtml", true);

Просмотреть файл

@ -748,7 +748,7 @@ globals affect startup time! But sometimes we have to do ugly things.)
Non-portable example:
.. code-block:: c++
.. code-block:: cpp
FooBarClass static_object(87, 92);
@ -766,7 +766,7 @@ probably long gone by now, but even with the feature working correctly,
there are so many problems with correctly ordering C++ constructors that
it's easier to just have an init function:
.. code-block:: c++
.. code-block:: cpp
static FooBarClass* static_object;
@ -840,7 +840,7 @@ Make header files compatible with C and C++
Non-portable example:
.. code-block:: c++
.. code-block:: cpp
/*oldCheader.h*/
int existingCfunction(char*);
@ -866,7 +866,7 @@ fine.)
Portable example:
.. code-block:: c++
.. code-block:: cpp
/* oldCheader.h*/
PR_BEGIN_EXTERN_C
@ -906,7 +906,7 @@ constructor as private and not supply a definition. While you're at it,
do the same for the assignment operator used for assignment of objects
of the same class. Example:
.. code-block:: c++
.. code-block:: cpp
class Foo {
...
@ -936,7 +936,7 @@ Type scalar constants to avoid unexpected ambiguities
Non-portable code:
.. code-block:: c++
.. code-block:: cpp
class FooClass {
// having such similar signatures
@ -959,7 +959,7 @@ method calls.
Portable code:
.. code-block:: c++
.. code-block:: cpp
class FooClass {
// having such similar signatures
@ -1017,7 +1017,7 @@ favorite platform that you never use.
Bad code example:
.. code-block:: c++
.. code-block:: cpp
#ifdef MOZ_ENABLE_JPEG_FOUR_BILLION
#include <stdlib.h> // <--- don't do this
@ -1051,7 +1051,7 @@ Some compilers do not pack the bits when different bitfields are given
different types. For example, the following struct might have a size of
8 bytes, even though it would fit in 1:
.. code-block:: c++
.. code-block:: cpp
struct {
char ch: 1;

Просмотреть файл

@ -128,7 +128,7 @@ which will be placed in `$OBJDIR/dist/include/mozilla/intl/`.
Finally, include the generated header into a C++ file and call the function.
```c++
```cpp
#include "mozilla/intl/unic_langid_ffi_generated.h"
using namespace mozilla::intl::ffi;
@ -159,7 +159,7 @@ extern "C" {
}
```
```c++
```cpp
ffi::FluentPlatform FluentBuiltInGetPlatform() {
return ffi::FluentPlatform::Linux;
}
@ -201,7 +201,7 @@ pub unsafe extern "C" fn unic_langid_as_string(
Next, in a C++ header define a destructor via `DefaultDelete`.
```c++
```cpp
#include "mozilla/intl/unic_langid_ffi_generated.h"
#include "mozilla/UniquePtr.h"
@ -224,7 +224,7 @@ free the code, which might lead to strange behaviour!)
Finally, implement the class.
```c++
```cpp
class Locale {
public:
explicit Locale(const nsACString& aLocale)

Просмотреть файл

@ -258,7 +258,7 @@ Expanded principal
An expanded principal is specified as an array of origins:
.. code::
.. code:: JavaScript
["http://mozilla.org", "http://moz.org"]

Просмотреть файл

@ -52,7 +52,7 @@ Created Content Structure
The created content is laid out in the directory in the same structure as
the files in ``l10n-central``. The localizable files end up like this:
.. code-block::
.. code-block:: text
browser/
browser/

Просмотреть файл

@ -2,7 +2,7 @@
:language: html
.. role:: js(code)
:language: javascript
:language: JavaScript
=============================
Fluent for Firefox Developers
@ -231,7 +231,7 @@ Fluent will overlay the translation onto the source fragment preserving attribut
:code:`class` and :code:`href` from the source and adding translations for the elements
inside. The resulting localized content will look like this:
.. code-block::
.. code-block:: html
<p data-l10n-id="update-application-info" data-l10n-args='{"version": "60.0"}'">
You are using Firefox Version: 60.0.
@ -284,7 +284,7 @@ localization context for this document and exposes it to runtime code as well.
With a focus on `declarative localization`__, the primary method of localization is
to alter the localization attributes in the DOM. Fluent provides a method to facilitate this:
.. code-block:: javascript
.. code-block:: JavaScript
document.l10n.setAttributes(element, "new-panel-header");
@ -293,7 +293,7 @@ animation frame.
This API can be used to set both the ID and the arguments at the same time.
.. code-block:: javascript
.. code-block:: JavaScript
document.l10n.setAttributes(element, "containers-disable-alert-ok-button", {
tabCount: 5
@ -302,7 +302,7 @@ This API can be used to set both the ID and the arguments at the same time.
If only the arguments need to be updated, then it's possible to use the :code:`setArgs`
method.
.. code-block:: javascript
.. code-block:: JavaScript
document.l10n.setArgs(element, {
tabCount: 5
@ -321,7 +321,7 @@ Non-Markup Localization
In rare cases, when the runtime code needs to retrieve the translation and not
apply it onto the DOM, Fluent provides an API to retrieve it:
.. code-block:: javascript
.. code-block:: JavaScript
let [ msg ] = await document.l10n.formatValues([
{id: "remove-containers-description"}
@ -351,7 +351,7 @@ developer or localizer.
__ https://github.com/projectfluent/fluent/wiki/BiDi-in-Fluent
.. code-block:: javascript
.. code-block:: JavaScript
document.l10n.setAttributes(element, "welcome-message", {
userName: "اليسع",
@ -376,7 +376,7 @@ standard called `Plural Rules`_.
In order to allow localizers to use it, all the developer has to do is to pass
an external argument number:
.. code-block:: javascript
.. code-block:: JavaScript
document.l10n.setAttributes(element, "unread-warning", { unreadCount: 5 });
@ -442,7 +442,7 @@ but its default formatting will be pretty expressive. In most cases, the develop
may want to use some of the :js:`Intl.DateTimeFormat` options to select the default
representation of the date in string:
.. code-block:: javascript
.. code-block:: JavaScript
document.l10n.formatValue("welcome-message", {
startDate: FluentDateTime(new Date(), {
@ -518,7 +518,7 @@ In rare edge cases where the developer needs to fetch additional resources, or
the same resources in another language, it is possible to create additional
Localization object manually using the `Localization` class:
.. code-block:: javascript
.. code-block:: JavaScript
const myL10n = new Localization([
"branding/brand.ftl",
@ -547,7 +547,7 @@ one by passing an `sync = false` argument to the constructor, or calling the `Se
on the class.
.. code-block:: javascript
.. code-block:: JavaScript
const myL10n = new Localization([
"branding/brand.ftl",
@ -584,7 +584,7 @@ In case of raw i18n the :js:`resolvedOptions` method on all :js:`Intl.*` formatt
makes it relatively easy. In case of localization, the recommended way is to test that
the code sets the right :code:`l10n-id`/:code:`l10n-args` attributes like this:
.. code-block:: javascript
.. code-block:: JavaScript
testedFunction();
@ -600,7 +600,7 @@ the code sets the right :code:`l10n-id`/:code:`l10n-args` attributes like this:
If the code really has to test for particular values in the localized UI, it is
always better to scan for a variable:
.. code-block:: javascript
.. code-block:: JavaScript
testedFunction();

Просмотреть файл

@ -245,7 +245,7 @@ Referencing Externally Defined Data Types: IPDL Includes
Let's begin with ``PMyManager.ipdl``. It starts by including types that it
will need from other places:
.. code-block:: c++
.. code-block:: cpp
include protocol PMyManaged;
include MyTypes; // for MyActorPair
@ -286,7 +286,7 @@ Namespaces
From the IPDL file:
.. code-block:: c++
.. code-block:: cpp
namespace mozilla {
namespace myns {
@ -314,7 +314,7 @@ Generating IPDL-Aware C++ Data Types: IPDL Structs and Unions
``PMyManager.ipdl`` and ``MyTypes.ipdlh`` define:
.. code-block:: c++
.. code-block:: cpp
[Comparable] union MyUnion {
float;
@ -349,7 +349,7 @@ The real point of any ``.ipdl`` file is that each defines exactly one actor
protocol. The definition always matches the ``.ipdl`` filename. Repeating the
one in ``PMyManager.ipdl``:
.. code-block:: c++
.. code-block:: cpp
sync protocol PMyManager {
manages PMyManaged;
@ -412,7 +412,7 @@ protocol, it must also be the case that ``PMyManaged.ipdl`` includes
``PMyManager`` and declares that ``PMyManaged`` is ``managed`` by
``PMyManager``. Recalling the code:
.. code-block:: c++
.. code-block:: cpp
// PMyManaged.ipdl
include protocol PMyManager;
@ -451,7 +451,7 @@ Declaring IPDL Messages
The final part of the actor definition is the declaration of messages:
.. code-block:: c++
.. code-block:: cpp
sync protocol PMyManager {
// ...
@ -767,7 +767,7 @@ binary data format for a type. Both options are available.
We haven't seen any of this C++ yet. Let's look at the data types included
from ``MyDataTypes.h``:
.. code-block:: c++
.. code-block:: cpp
// MyDataTypes.h
namespace mozilla::myns {
@ -840,7 +840,7 @@ should only allocate a ``MyUnusedData`` to return if it so desires.
These are straight-forward implementations of the ``ParamTraits`` methods for
``MyData``:
.. code-block:: c++
.. code-block:: cpp
/* static */ void IPC::ParamTraits<MyData>::Write(MessageWriter* m, const paramType& in) {
WriteParam(m, in.s);
@ -893,7 +893,7 @@ them. The generated ``ParamTraits`` confirm that the enum is in valid range;
``Read`` will return false otherwise. As an example, here is the
``MyActorEnum`` included from ``MyActorUtils.h``:
.. code-block:: c++
.. code-block:: cpp
enum MyActorEnum { e1, e2, e3, e4, e5 };
@ -908,7 +908,7 @@ IPDL structs and unions become C++ classes that provide interfaces that are
fairly self-explanatory. Recalling ``MyUnion`` and ``MyActorPair`` from
`IPDL Structs and Unions`_ :
.. code-block:: c++
.. code-block:: cpp
union MyUnion {
float;
@ -922,7 +922,7 @@ fairly self-explanatory. Recalling ``MyUnion`` and ``MyActorPair`` from
These compile to:
.. code-block:: c++
.. code-block:: cpp
class MyUnion {
enum Type { Tfloat, TMyOtherData };
@ -985,7 +985,7 @@ that declare our actor implementation subclasses (``MyManagerParent.h`` and
So ``MyManagerParent.h`` looks like this:
.. code-block:: c++
.. code-block:: cpp
#include "PMyManagerParent.h"
@ -1041,7 +1041,7 @@ returns a value: ``AnotherMsg``. This is done with ``SendAnotherMsg``, which
is defined automatically by IPDL in the base class ``PMyManagerParent``. There
are two signatures for ``Send`` and they look like this:
.. code-block:: c++
.. code-block:: cpp
// Return a Promise that IPDL will resolve with the response or reject.
RefPtr<MozPromise<MyOtherData, ResponseRejectReason, true>>
@ -1074,7 +1074,7 @@ simpler form; they return a ``bool`` indicating success or failure and return
response values in non-const parameters, as the ``Recv`` methods do. For
example, ``PMyManagerChild`` defines this to send the sync message ``SomeMsg``:
.. code-block:: c++
.. code-block:: cpp
// generated in PMyManagerChild
bool SendSomeMsg(const Maybe<MyActorPair>& aActors, const nsTArray<MyData>& aMyData,
@ -1192,7 +1192,7 @@ beneficial to have it receive some final data.
The relevant part of the parent class looks like this:
.. code-block:: c++
.. code-block:: cpp
class MyManagerParent : public PMyManagerParent {
already_AddRefed<PMyManagedParent> AllocPMyManagedParent();
@ -1218,7 +1218,7 @@ operational.
The ``Send`` method for a constructor is similarly different from other
``Send`` methods. In the child actor, ours looks like this:
.. code-block:: c++
.. code-block:: cpp
IPCResult SendPMyManagedConstructor(PMyManagedChild* aActor);
@ -1244,7 +1244,7 @@ endpoint.
cannot safely be a class instance method. Instead, unlike other ``Send``
methods, it's a ``static`` class method and takes the actor as a parameter:
.. code-block:: c++
.. code-block:: cpp
static IPCResult Send__delete__(PMyManagerChild* aToDelete);
@ -1358,7 +1358,7 @@ The most common way to create new top level actors is by creating a pair of
connected Endpoints and sending one to the other actor. This is done exactly
the way it sounds. For example:
.. code-block:: c++
.. code-block:: cpp
bool MyPreexistingActorParent::MakeMyActor() {
Endpoint<PMyActorParent> parentEnd;
@ -1395,7 +1395,7 @@ receiving them as well.
``MyPreexistingActorChild`` still has to receive the create message. The code
for that handler is pretty similar:
.. code-block:: c++
.. code-block:: cpp
IPCResult MyPreexistingActorChild::RecvCreateMyActorChild(Endpoint<PMyActorChild>&& childEnd) {
RefPtr<MyActorChild> child = new MyActorChild;
@ -1519,7 +1519,7 @@ with normal managees but, instead of ``new``-ing the child actor and then
passing it in a ``SendFooConstructor`` call, background actors issue the send
call to the ``BackgroundChild`` manager, which returns the new child:
.. code-block:: c++
.. code-block:: cpp
// Bind our new PMyBackgroundActorChild to the current thread.
PBackgroundChild* bc = BackgroundChild::GetOrCreateForCurrentThread();

Просмотреть файл

@ -561,7 +561,7 @@ Creating the New Process
The sample does this in ``DemoParent::LaunchDemoProcess``. The core
behavior is fairly clear:
.. code-block:: c++
.. code-block:: cpp
/* static */
bool DemoParent::LaunchDemoProcess(
@ -612,7 +612,7 @@ by IPDL, which is why it doesn't get assigned to anything. This simplifies the
design dramatically. IPDL takes ownership when the actor calls ``Bind`` from
the ``Init`` method:
.. code-block:: c++
.. code-block:: cpp
DemoParent::DemoParent(UniqueHost&& aHost)
: mHost(std::move(aHost)) {}
@ -648,7 +648,7 @@ main thread will run (this is discussed later) and we need to create our
``ProcessChild`` subclass. This is not an insignificant choice so pay close
attention to the `MessageLoop` options:
.. code-block:: c++
.. code-block:: cpp
MessageLoop::Type uiLoopType;
switch (XRE_GetProcessType()) {
@ -679,7 +679,7 @@ to be overridden to parse them. It does this, binds our actor by
calling ``Bind`` as was done with the parent, then initializes a bunch of
components that the process expects to use:
.. code-block:: c++
.. code-block:: cpp
bool DemoChild::Init(int aArgc, char* aArgv[]) {
#if defined(MOZ_SANDBOX) && defined(XP_WIN)
@ -759,7 +759,7 @@ normal top-level actor (or any managed actor after calling
when some (as yet unwritten) **Demo** process code calls
``DemoChild::Shutdown``.
.. code-block:: c++
.. code-block:: cpp
/* static */
void DemoChild::Shutdown() {
@ -803,7 +803,7 @@ The comment in the code makes two important points:
We can also see that, once the ``EmptyMessageQueue`` response is run, we are
releasing ``gDemoChild``, which will result in the termination of the process.
.. code-block:: c++
.. code-block:: cpp
DemoChild::~DemoChild() {
// ...
@ -814,7 +814,7 @@ At this point, the ``DemoParent`` in the main process is alerted to the
channel closure because IPDL will call its :ref:`ActorDestroy <Actor Lifetimes
in C++>` method.
.. code-block:: c++
.. code-block:: cpp
void DemoParent::ActorDestroy(ActorDestroyReason aWhy) {
if (aWhy == AbnormalShutdown) {
@ -841,7 +841,7 @@ responsible for our intended behavior, not just bootstrapping the new process.
Above, we saw that this is started by ``Host::MakeBridgeAndResolve`` after the
``DemoParent`` connection is established.
.. code-block:: c++
.. code-block:: cpp
bool DemoParent::Host::MakeBridgeAndResolve() {
ipc::Endpoint<PDemoHelplineParent> parent;
@ -871,7 +871,7 @@ actors, then we send the child one to the new process and resolve a promise
with the other. The **Demo** process creates its ``PDemoHelplineChild``
easily:
.. code-block:: c++
.. code-block:: cpp
mozilla::ipc::IPCResult DemoChild::RecvCreateDemoHelplineChild(
Endpoint<PDemoHelplineChild>&& aEndpoint) {
@ -884,7 +884,7 @@ easily:
``MakeProcessAndGetAssistance`` binds the same way:
.. code-block:: c++
.. code-block:: cpp
RefPtr<DemoHelplineParent> demoHelplineParent = new DemoHelplineParent();
if (!endpoint.Bind(demoHelplineParent)) {
@ -914,7 +914,7 @@ process, we simply write an async ``PContent`` message that calls
``DemoParent::LaunchDemoProcess`` and use the message handler's promise as
our promise:
.. code-block:: c++
.. code-block:: cpp
/* static */
bool DemoHelplineParent::MakeProcessAndGetAssistance(
@ -990,7 +990,7 @@ We have covered the main parts needed for the sample. Now we just need to wire
it all up. First, we add the new JS command to ``Navigator.webidl`` and
``Navigator.h``/``Navigator.cpp``:
.. code-block:: c++
.. code-block:: cpp
partial interface Navigator {
[Throws]
@ -1020,7 +1020,7 @@ Then, we need to add the part that gets the string we use to resolve the
promise in ``MakeProcessAndGetAssistance`` (or reject it if it hasn't been
resolved by the time ``ActorDestroy`` is called):
.. code-block:: c++
.. code-block:: cpp
using DemoPromise = MozPromise<nsString, nsresult, true>;
@ -1064,7 +1064,7 @@ that the string was received. During closing, the actor's ``ActorDestroy``
method then calls the ``DemoChild::Shutdown`` method we defined in `Destroying
the New Process`_:
.. code-block:: c++
.. code-block:: cpp
mozilla::ipc::IPCResult DemoHelplineChild::RecvRequestAssistance() {
RefPtr<DemoHelplineChild> me = this;
@ -1124,7 +1124,7 @@ because it is likely to be intermittent and may manifest more easily on some
platforms/architectures than others. To create this bug, replace the
``SendEmptyMessageQueue`` call in ``DemoChild::Shutdown``:
.. code-block:: c++
.. code-block:: cpp
auto dc = gDemoChild;
RefPtr<nsIRunnable> runnable = NS_NewRunnableFunction(
@ -1138,7 +1138,7 @@ platforms/architectures than others. To create this bug, replace the
with just an (asynchronous) call to ``Close``:
.. code-block:: c++
.. code-block:: cpp
NS_DispatchToMainThread(NS_NewRunnableFunction(
"DemoChild::FinishShutdown",

Просмотреть файл

@ -35,7 +35,7 @@ have.
A basic ``MOZCONFIG`` file for doing a debug build, put into ``$HOME/mozconfigs/debug`` looks like this
.. code::
.. code:: text
# Build only the JS shell
ac_add_options --enable-project=js
@ -53,7 +53,7 @@ A basic ``MOZCONFIG`` file for doing a debug build, put into ``$HOME/mozconfigs/
To activate a particular ``MOZCONFIG``, set the environment variable:
.. code::
.. code:: text
export MOZCONFIG=$HOME/mozconfigs/debug
@ -64,7 +64,7 @@ Once you have activated a ``MOZCONFIG`` by setting the environment variable
you can then ask ``mach``, located in the top directory of your checkout,
to do your build:
.. code::
.. code:: console
$ cd <path to mozilla-central>
$ ./mach build
@ -98,7 +98,7 @@ Testing
Once built, you can then use ``mach`` to run the ``jit-tests``:
.. code::
.. code:: console
$ ./mach jit-test
@ -106,7 +106,7 @@ Similarly you can use also run ``jstests``. These include a local,
intermittently updated, copy of all `test262 <https://github.com/tc39/test262/>`_
tests.
.. code::
.. code:: console
$ ./mach jstests
@ -119,7 +119,7 @@ To switch to an optimized build, such as for performance testing, one need only
have an optimized build ``MOZCONFIG``, and then activate it. An example
``$HOME/mozconfigs/optimized`` ``MOZCONFIG`` looks like this:
.. code::
.. code:: text
# Build only the JS shell
ac_add_options --enable-project=js
@ -148,7 +148,7 @@ Building SpiderMonkey on Android
your `PATH` environment. You can do this by running the following line in a
shell, or adding it to a shell profile init file:
.. code::
.. code:: console
$ export PATH="$PATH:~/.mozbuild/android-sdk-linux/platform-tools"
@ -156,9 +156,9 @@ Building SpiderMonkey on Android
the :ref:`Setting up a MOZCONFIG` documentation, and include the following
line:
.. code::
.. code:: console
ac_add_options --target=aarch64-linux-android
$ ac_add_options --target=aarch64-linux-android
- Then compile as usual with `mach build` with this `MOZCONFIG` file.
@ -169,9 +169,9 @@ Running jit-tests on Android
as described above, or make sure it is on the same subnetwork as the host. It
should appear in the list of devices seen by `adb`:
.. code::
.. code:: console
adb devices
$ adb devices
This command should show you a device ID with the name of the device. If it
doesn't, make sure that you have enabled Developer options on your device, as
@ -192,9 +192,9 @@ the host machine.
- Upload the `gdbserver` precompiled binary from the NDK from the host machine
to the Android device, using this command on the host:
.. code::
.. code:: console
adb push \
$ adb push \
~/.mozbuild/android-ndk-r23c/prebuilt/android-arm64/gdbserver/gdbserver \
/data/local/tmp/test_root/bin
@ -205,16 +205,16 @@ the host machine.
so we can connect to a local port from the host, without needing to find what
the IP address of the Android device is:
.. code::
.. code:: console
adb forward tcp:5039 tcp:5039
$ adb forward tcp:5039 tcp:5039
- Start `gdbserver` on the phone, passing the JS shell command line arguments
to gdbserver:
.. code::
.. code:: console
adb shell export LD_LIBRARY_PATH=/data/local/tmp/test_root/bin '&&' /data/local/tmp/test_root/bin/gdbserver :5039 /data/local/tmp/test_root/bin/js /path/to/test.js
$ adb shell export LD_LIBRARY_PATH=/data/local/tmp/test_root/bin '&&' /data/local/tmp/test_root/bin/gdbserver :5039 /data/local/tmp/test_root/bin/js /path/to/test.js
.. note::
@ -234,14 +234,14 @@ the host machine.
- On the host, start the precompiled NDK version of GDB that matches your host
architecture, passing it the path to the shell compiled with `mach` above:
.. code::
.. code:: console
~/.mozbuild/android-ndk-r23c/prebuilt/linux-x86_64/bin/gdb /path/to/objdir-aarch64-linux-android/dist/bin/js
$ ~/.mozbuild/android-ndk-r23c/prebuilt/linux-x86_64/bin/gdb /path/to/objdir-aarch64-linux-android/dist/bin/js
- Then connect remotely to the GDB server that's listening on the Android
device:
.. code::
.. code:: console
(gdb) target remote :5039
(gdb) continue
$(gdb) target remote :5039
$(gdb) continue

Просмотреть файл

@ -14,7 +14,7 @@ Running Test262 locally
The jstests shell harness is in ``js/src/tests/jstests.py``. It can be invoked using
.. code::
.. code:: bash
./mach jstests
@ -22,7 +22,7 @@ Note that mach will generally find the JS shell itself; the --shell argument can
Test262 includes a lot of tests. When working on a specific feature, it is often useful to specify a subset of tests:
.. code::
.. code:: bash
./mach jstests TEST_PATH_SUBSTRING [TEST_PATH_SUBSTRING_2 ...]
@ -35,13 +35,13 @@ This runs all tests whose paths contain any TEST_PATH_SUBSTRING. To exclude test
For a complete list of options, use:
.. code::
.. code:: bash
./mach jstests -- -h
The Test262 tests can also be run in the browser, using:
.. code::
.. code:: bash
./mach jstestbrowser
@ -54,13 +54,13 @@ Running jit-tests locally
The jit-test shell harness is in ``js/src/jit-test/jit_test.py``. It can be invoked using
.. code::
.. code:: bash
./mach jit-test
Basic usage of ``mach jit-test`` is similar to ``mach jstests``. A subset of tests can be specified:
.. code::
.. code:: bash
./mach jit-test TEST_PATH_SUBSTRING [TEST_PATH_SUBSTRING_2 ...]

Просмотреть файл

@ -123,7 +123,7 @@ Note: extension can only send messages from content scripts if
explicitly authorized by the app by adding
``nativeMessagingFromContent`` in the manifest.json file, e.g.
.. code::
.. code:: json
"permissions": [
"nativeMessaging",
@ -219,7 +219,7 @@ found on the page. Note that our ``nativeApp`` identifier used for
/assets/messaging/messaging.js
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code:: javascript
.. code:: JavaScript
let manifest = document.querySelector("head > link[rel=manifest]");
if (manifest) {
@ -301,7 +301,7 @@ For this example, the extension side will do the following:
/assets/messaging/background.js
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code:: javascript
.. code:: JavaScript
// Establish connection with app
let port = browser.runtime.connectNative("browser");

Просмотреть файл

@ -392,7 +392,7 @@ be declared in GeckoView's ``AndroidManifest.xml``.
For example, this is the definition of the ``media`` process:
.. code-block::
.. code-block:: xml
<service
android:name="org.mozilla.gecko.media.MediaManager"

Просмотреть файл

@ -25,7 +25,7 @@ Perform a debug build of Gecko.
1. Edit your ``mozconfig`` file and add the following lines. These will
ensure that the build includes debug checks and symbols.
.. code::
.. code:: text
ac_add_options --enable-debug
@ -33,7 +33,7 @@ Perform a debug build of Gecko.
``mozconfig`` if present. ``./mach configure`` will not allow
artifact builds to be enabled when generating a debug build.
.. code::
.. code:: text
# ac_add_options --enable-artifact-builds
@ -113,7 +113,7 @@ Debug Native code in Android Studio
debug window, and then select the ``lldb`` console tab. Type the
following into the console:
.. code::
.. code:: text
b <file>.cpp:<line number>
@ -200,7 +200,7 @@ track allocations correctly Gecko must be built with ``jemalloc`` disabled.
Additionally, the native memory profiler appears to only work with ``aarch64``
builds. The following must therefore be present in your ``mozconfig`` file:
.. code::
.. code:: text
ac_add_options --target=aarch64
ac_add_options --disable-jemalloc
@ -212,7 +212,7 @@ found, therefore in order for the profile to be symbolicated you must prevent
symbols being stripped during the build process. To do so, add the following to
your ``mozconfig``:
.. code::
.. code:: text
ac_add_options STRIP_FLAGS=--strip-debug

Просмотреть файл

@ -338,7 +338,7 @@ arguments of :ref:`nsILoadContextInfo <nsILoadContextInfo>`. The form is followi
pending in `bug
968593 <https://bugzilla.mozilla.org/show_bug.cgi?id=968593>`__):
.. code::
.. code:: JavaScript
a,b,i1009,p,

Просмотреть файл

@ -69,13 +69,13 @@ Running the server
From test suites, the server should be importable as a testing-only JS
module:
.. code:: javascript
.. code:: JavaScript
ChromeUtils.import("resource://testing-common/httpd.js");
Once you've done that, you can create a new server as follows:
.. code:: javascript
.. code:: JavaScript
let server = new HttpServer(); // Or nsHttpServer() if you don't use ChromeUtils.import.
@ -128,7 +128,7 @@ handlers) it serves. To modify the headers for a file, create a sibling
file with the first file's name followed by ``^headers^``. Here's an
example of how such a file might look:
.. code::
.. code:: text
HTTP 404 I want a cool HTTP description!
Content-Type: text/plain
@ -164,7 +164,7 @@ will generate. That function acts exactly like the ``handle`` function
on the ``nsIHttpRequestHandler`` interface. First, tell the server what
extension you're using:
.. code:: javascript
.. code:: JavaScript
const SJS_EXTENSION = "cgi";
server.registerContentType(SJS_EXTENSION, "sjs");
@ -172,7 +172,7 @@ extension you're using:
Now just create an SJS with the extension ``cgi`` and write whatever you
want. For example:
.. code:: javascript
.. code:: JavaScript
function handleRequest(request, response)
{
@ -201,7 +201,7 @@ every time processing occurs. To support stateful SJS behavior, the
following functions have been added to the global scope in which a SJS
handler executes, providing a simple key-value state storage mechanism:
.. code::
.. code:: JavaScript
/*
* v : T means v is of type T
@ -247,7 +247,7 @@ request handler needs to store information from a first request of it
for use in processing a second request of it — say, for example, if you
wanted to implement a request handler implementing a counter:
.. code:: javascript
.. code:: JavaScript
/**
* Generates a response whose body is "0", "1", "2", and so on. each time a
@ -323,7 +323,7 @@ when a particular event occurs.
single string argument and returns the object or ``null`` directly. In
SJS, however, the process to return the value is slightly different:
.. code:: javascript
.. code:: JavaScript
function handleRequest(request, response)
{
@ -366,7 +366,7 @@ that the response will be written and finished by the handler. Here's an
example of an SJS file which writes some data, waits five seconds, and
then writes some more data and finishes the response:
.. code:: javascript
.. code:: JavaScript
var timer = null;
@ -423,7 +423,7 @@ through httpd.js would throw an exception) and which has a header that
spans multiple lines (httpd.js responses otherwise generate only
single-line headers):
.. code:: javascript
.. code:: JavaScript
function handleRequest(request, response)
{

Просмотреть файл

@ -90,13 +90,13 @@ your calling file, and link against the compiled library.
There are many ways to call Snappy, but the simplest possible is
```c++
```cpp
snappy::Compress(input.data(), input.size(), &output);
```
and similarly
```c++
```cpp
snappy::Uncompress(input.data(), input.size(), &output);
```

Просмотреть файл

@ -47,7 +47,7 @@ There's two ways of using 3rd-party Python dependencies:
To add a ``pip install``-d package dependency, add it to your site's
``python/sites/<site>.txt`` manifest file:
.. code::
.. code:: text
...
pypi:new-package==<version>
@ -74,7 +74,7 @@ Next, add that package and any new transitive dependencies (you'll see them adde
``third_party/python/requirements.txt``) to the associated site's dependency manifest in
``python/sites/<site>.txt``:
.. code::
.. code:: text
...
vendored:third_party/python/new-package

Просмотреть файл

@ -96,7 +96,7 @@ If you're using Git with Cinnabar, follow its `setup instructions <https://githu
If you're using Powershell, Windows will raise an error by default when you try to invoke
``.\mach.ps1``:
.. code::
.. code:: text
.\mach : File <topsrcdir>\mach.ps1 cannot be loaded because running scripts is disabled on this system. For
more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.

Просмотреть файл

@ -24,8 +24,9 @@ Getting the Client
The Python client is officially supported. To install it, first make sure you
have `pip installed`_ then run:
.. parsed-literal::
pip install marionette_driver
.. code-block:: bash
$ pip install marionette_driver
It's highly recommended to use virtualenv_ when installing Marionette to avoid
package conflicts and other general nastiness.
@ -53,7 +54,8 @@ A session is a single instance of a Marionette client connected to a Marionette
server. Before you can start executing commands, you need to start a session
with :func:`start_session() <Marionette.start_session>`:
.. parsed-literal::
.. code-block:: python
from marionette_driver.marionette import Marionette
client = Marionette('127.0.0.1', port=2828)
@ -77,7 +79,8 @@ appropriate context.
Use :func:`~Marionette.switch_to_window` to execute commands in the context of a
new window:
.. parsed-literal::
.. code-block:: python
original_window = client.current_window_handle
for handle in client.window_handles:
if handle != original_window:
@ -88,7 +91,8 @@ new window:
Similarly, use :func:`~Marionette.switch_to_frame` to execute commands in the
context of a new frame (e.g an <iframe> element):
.. parsed-literal::
.. code-block:: python
iframe = client.find_element(By.TAG_NAME, 'iframe')
client.switch_to_frame(iframe)
@ -97,12 +101,13 @@ privileged scope where you can access things like the Firefox UI itself.
Content scope is where things like webpages live. You can switch between
`chrome` and `content` using the :func:`~Marionette.set_context` and :func:`~Marionette.using_context` functions:
.. parsed-literal::
.. code-block:: python
client.set_context(client.CONTEXT_CONTENT)
# content scope
with client.using_context(client.CONTEXT_CHROME):
#chrome scope
... do stuff ...
pass # ... do stuff ...
# content scope restored
@ -114,7 +119,8 @@ move through the back/forward cache using :func:`~Marionette.go_forward` and
:func:`~Marionette.go_back` respectively. To retrieve the currently
open website, use :func:`~Marionette.get_url`:
.. parsed-literal::
.. code-block:: python
url = 'http://mozilla.org'
client.navigate(url)
client.go_back()
@ -129,7 +135,8 @@ In order to inspect or manipulate actual DOM elements, they must first be found
using the :func:`~Marionette.find_element` or :func:`~Marionette.find_elements`
methods:
.. parsed-literal::
.. code-block:: python
from marionette_driver.marionette import WebElement
element = client.find_element(By.ID, 'my-id')
assert type(element) == WebElement
@ -140,7 +147,8 @@ For a full list of valid search strategies, see :doc:`advanced/findelement`.
Now that an element has been found, it's possible to manipulate it:
.. parsed-literal::
.. code-block:: python
element.click()
element.send_keys('hello!')
print(element.get_attribute('style'))
@ -162,7 +170,8 @@ functions. They accomplish what their names suggest, the former executes some
synchronous JavaScript, while the latter provides a callback mechanism for
running asynchronous JavaScript:
.. parsed-literal::
.. code-block:: python
result = client.execute_script("return arguments[0] + arguments[1];",
script_args=[2, 3])
assert result == 5
@ -170,7 +179,8 @@ running asynchronous JavaScript:
The async method works the same way, except it won't return until the
`resolve()` function is called:
.. parsed-literal::
.. code-block:: python
result = client.execute_async_script("""
let [resolve] = arguments;
setTimeout(function() {

14
third_party/function2/Readme.md поставляемый
Просмотреть файл

@ -63,7 +63,7 @@ Use `fu2::function` as a wrapper for copyable function wrappers and `fu2::unique
The standard implementation `std::function` and `fu2::function` are convertible to each other, see [the chapter convertibility of functions](#convertibility-of-functions) for details.
A function wrapper is declared as following:
```c++
```cpp
fu2::function<void(int, float) const>
// Return type ~^ ^ ^ ^
// Parameters ~~~~~|~~~~~| ^
@ -98,7 +98,7 @@ fu2::function<void(int, float) const>
`fu2::function` and `fu2::unique_function` (non copyable) are easy to use:
```c++
```cpp
fu2::function<void() const> fun = [] {
// ...
};
@ -111,7 +111,7 @@ fun();
`fu2::unique_function` also works with non copyable functors/ lambdas.
```c++
```cpp
fu2::unique_function<bool() const> fun = [ptr = std::make_unique<bool>(true)] {
return *ptr;
};
@ -127,7 +127,7 @@ otherfun();
A `fu2::function_view` can be used to create a non owning view on a persistent object. Note that the view is only valid as long as the object lives.
```c++
```cpp
auto callable = [ptr = std::make_unique<bool>(true)] {
return *ptr;
};
@ -164,7 +164,7 @@ fu2::function_view<bool() const> view(callable);
| fu2::unique_function | No | Yes | No |
| std::function | Yes | Yes | Yes |
```c++
```cpp
fu2::function<void()> fun = []{};
// OK
std::function<void()> std_fun = fun;
@ -197,14 +197,14 @@ struct my_capacity {
The following code defines an owning function with a variadic signature which is copyable and sfo optimization is disabled:
```c++
```cpp
template<typename Signature>
using my_function = fu2::function_base<true, true, fu2::capacity_none, true, false, Signature>;
```
The following code defines a non copyable function which just takes 1 argument, and has a huge capacity for internal sfo optimization. Also it must be called as r-value.
```c++
```cpp
template<typename Arg>
using my_consumer = fu2::function_base<true, false, fu2::capacity_fixed<100U>,
true, false, void(Arg)&&>;

28
third_party/picosha2/README.md поставляемый
Просмотреть файл

@ -13,7 +13,7 @@ PicoSHA2 is a tiny SHA256 hash generator for C++ with following properties:
## Generating SHA256 hash and hash hex string
```c++
```cpp
// any STL sequantial container (vector, list, dequeue...)
std::string src_str = "The quick brown fox jumps over the lazy dog";
@ -25,7 +25,7 @@ std::string hex_str = picosha2::bytes_to_hex_string(hash.begin(), hash.end());
## Generating SHA256 hash and hash hex string from byte stream
```c++
```cpp
picosha2::hash256_one_by_one hasher;
...
hasher.process(block.begin(), block.end());
@ -42,7 +42,7 @@ The file `example/interactive_hasher.cpp` has more detailed information.
## Generating SHA256 hash from a binary file
```c++
```cpp
std::ifstream f("file.txt", std::ios::binary);
std::vector<unsigned char> s(picosha2::k_digest_size);
picosha2::hash256(f, s.begin(), s.end());
@ -52,7 +52,7 @@ This `hash256` may use less memory than reading whole of the file.
## Generating SHA256 hash hex string from std::string
```c++
```cpp
std::string src_str = "The quick brown fox jumps over the lazy dog";
std::string hash_hex_str;
picosha2::hash256_hex_string(src_str, hash_hex_str);
@ -60,14 +60,14 @@ std::cout << hash_hex_str << std::endl;
//this output is "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592"
```
```c++
```cpp
std::string src_str = "The quick brown fox jumps over the lazy dog";
std::string hash_hex_str = picosha2::hash256_hex_string(src_str);
std::cout << hash_hex_str << std::endl;
//this output is "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592"
```
```c++
```cpp
std::string src_str = "The quick brown fox jumps over the lazy dog.";//add '.'
std::string hash_hex_str = picosha2::hash256_hex_string(src_str.begin(), src_str.end());
std::cout << hash_hex_str << std::endl;
@ -76,24 +76,24 @@ std::cout << hash_hex_str << std::endl;
## Generating SHA256 hash hex string from byte sequence
```c++
```cpp
std::vector<unsigned char> src_vect(...);
std::string hash_hex_str;
picosha2::hash256_hex_string(src_vect, hash_hex_str);
```
```c++
```cpp
std::vector<unsigned char> src_vect(...);
std::string hash_hex_str = picosha2::hash256_hex_string(src_vect);
```
```c++
```cpp
unsigned char src_c_array[picosha2::k_digest_size] = {...};
std::string hash_hex_str;
picosha2::hash256_hex_string(src_c_array, src_c_array+picosha2::k_digest_size, hash_hex_str);
```
```c++
```cpp
unsigned char src_c_array[picosha2::k_digest_size] = {...};
std::string hash_hex_str = picosha2::hash256_hex_string(src_c_array, src_c_array+picosha2::k_digest_size);
```
@ -101,7 +101,7 @@ std::string hash_hex_str = picosha2::hash256_hex_string(src_c_array, src_c_array
## Generating SHA256 hash byte sequence from STL sequential container
```c++
```cpp
//any STL sequantial container (vector, list, dequeue...)
std::string src_str = "The quick brown fox jumps over the lazy dog";
@ -112,7 +112,7 @@ std::vector<unsigned char> hash(picosha2::k_digest_size);
picosha2::hash256(src_str, hash);
```
```c++
```cpp
//any STL sequantial container (vector, list, dequeue...)
std::string src_str = "The quick brown fox jumps over the lazy dog";
@ -123,14 +123,14 @@ std::vector<unsigned char> hash(picosha2::k_digest_size);
picosha2::hash256(src_str.begin(), src_str.end(), hash);
```
```c++
```cpp
std::string src_str = "The quick brown fox jumps over the lazy dog";
unsigned char hash_byte_c_array[picosha2::k_digest_size];
// in: container, out: iterator(pointer) pair
picosha2::hash256(src_str, hash_byte_c_array, hash_byte_c_array+picosha2::k_digest_size);
```
```c++
```cpp
std::string src_str = "The quick brown fox jumps over the lazy dog";
std::vector<unsigned char> hash(picosha2::k_digest_size);
// in: iterator pair, out: iterator pair

Просмотреть файл

@ -21,7 +21,7 @@ Example: how to execute GenerateWebIDLBindings.py
As an example, the following shell command generates (or regenerates if one exists) the webidl bindings
for the `runtime` API namespace:
.. code-block:: sh
.. code-block:: bash
$ export SCRIPT_DIR="toolkit/components/extensions/webidl-api"
$ mach python $SCRIPT_DIR/GenerateWebIDLBindings.py -- runtime
@ -38,7 +38,7 @@ this command will generates a `.webdil` file named `dom/webidl/ExtensionRuntime.
offer to print a diff of the changes (or just continue without changing the existing webidl file
if the content is exactly the same):
.. code-block::
.. code-block:: console
$ mach python $SCRIPT_DIR/GenerateWebIDLBindings.py -- runtime

Просмотреть файл

@ -83,7 +83,7 @@ For example, this interface defines the following method:
As you will notice, the 3rd arg is another interface, `mozIExtensionStorageCallback`, also
defined in that IDL file. This is a small, generic interface defined as:
.. code-block::
.. code-block:: cpp
interface mozIExtensionStorageCallback : nsISupports {
// Called when the operation completes. Operations that return a result,

Просмотреть файл

@ -201,7 +201,7 @@ While running the test files locally they will be executed once for each manifes
where they are included, to restrict the run to just the "background service
workers mode" specify the ``sw-webextensions`` tag:
.. code-block::
.. code-block:: bash
mach xpcshell-test --tag sw-webextensions path/to/test/file.js
@ -241,6 +241,6 @@ While executing the test files locally they will run once for each manifest file
where they are included, to restrict the run to just the "background service
workers mode" specify the ``sw-webextensions`` tag:
.. code-block::
.. code-block:: bash
mach mochitest --tag sw-webextensions path/to/test/file.js

Просмотреть файл

@ -9,7 +9,7 @@ added in alphabetic order and nearby the other WebExtensions API bindings alread
(look for the ``ExtensionBrowser`` webidl definition and the other existing WebIDL bindings related to the
WebExtensions APIs):
.. code-block::
.. code-block:: text
# WebExtension API
...
@ -33,12 +33,12 @@ The new ``.webidl`` file has to be also listed in "dom/webidl/moz.build", it sho
API bindings, **if the generated `.webidl` includes preprocessing macros** (e.g. when part of an API
is not available in all builds, e.g. subset of APIs that are only available in Desktop builds).
.. code-block::
.. code-block:: text
# WebExtensions API.
WEBIDL_FILES += [
...
"ExtensionRuntime.webidl"
"ExtensionRuntime.webidl",
...
]
@ -62,7 +62,7 @@ where the other WebIDL bindings are being listed. Similarly, the new ``.h`` coun
``EXPORTS.mozilla.extensions`` (which ensures that the header file will be placed into the path set earlier
in ``dom/bindings/Bindings.conf``):
.. code-block::
.. code-block:: text
# WebExtensions API namespaces.
UNIFIED_SOURCES += [
@ -83,7 +83,7 @@ Wiring up the new API into ``dom/webidl/ExtensionBrowser.webidl``
To make the new WebIDL bindings part of the ``browser`` global, a new attribute has to be added to
``dom/webidl/ExtensionBrowser.webidl``:
.. code-block::
.. code-block:: cpp
// `browser.runtime` API namespace.
[Replaceable, SameObject, BinaryName="GetExtensionRuntime",
@ -103,7 +103,7 @@ C++ class as defined in ``toolkit/components/extensions/webidl-api/ExtensionBrow
- the definition of a new corresponding **public method** (by convention named ``GetExtensionMyNamespace``)
- a ``RefPtr`` as a new **private data member named** (by convention named ``mExtensionMyNamespace``)
.. code-block::
.. code-block:: cpp
...
namespace extensions {
@ -130,7 +130,7 @@ And then in its ``toolkit/components/extensions/webidl-api/ExtensionBrowser.cpp`
- the addition of the new private member data ``RefPtr`` in the ``NS_IMPL_CYCLE_COLLECTION_UNLINK``
and ``NS_IMPL_CYCLE_COLLECTION_TRAVERSE`` macros
.. code-block::
.. code-block:: cpp
...
#include "mozilla/extensions/ExtensionRuntime.h"

Просмотреть файл

@ -223,7 +223,7 @@ Add a notice at the top of both examples that these APIs are only available in F
> **Note**: C++ APIs are only available in Firefox Desktop.
```c++
```cpp
#include "mozilla/glean/GleanMetrics.h"
mozilla::glean::category_name::metric_name.Api(args);
@ -231,7 +231,7 @@ mozilla::glean::category_name::metric_name.Api(args);
There are test APIs available too:
```c++
```cpp
#include "mozilla/glean/GleanMetrics.h"
ASSERT_EQ(value, mozilla::glean::category_name::metric_name.TestGetValue().ref());

Просмотреть файл

@ -47,7 +47,7 @@ When the user closes the tab or navigates to a different URI, prompts associated
with the given tab are closed.
In this case an exception will be thrown:
.. code-block::
.. code-block:: JavaScript
/*
Exception: prompt aborted by user

Просмотреть файл

@ -104,7 +104,7 @@ The same prompt as above, but called async:
C++ Sync
~~~~~~~~
.. code-block:: c++
.. code-block:: cpp
nsCOMPtr<nsIPromptService> promptSvc =
do_GetService("@mozilla.org/prompter;1");
@ -135,7 +135,7 @@ C++ Sync
C++ Async
~~~~~~~~~
.. code-block:: c++
.. code-block:: cpp
nsCOMPtr<nsIPromptService> promptSvc =
do_GetService("@mozilla.org/prompter;1");
@ -165,7 +165,7 @@ C++ Async
Then, in your promise handler callback function:
.. code-block:: c++
.. code-block:: cpp
void PromptHandler::ResolvedCallback(JSContext* aCx,
JS::Handle<JS::Value> aValue) {

Просмотреть файл

@ -19,7 +19,7 @@ Short example, details below.
Note: Most marker-related identifiers are in the ``mozilla`` namespace, to be added where necessary.
.. code-block:: c++
.. code-block:: cpp
// Record a simple marker with the category of DOM.
PROFILER_MARKER_UNTYPED("Marker Name", DOM);
@ -30,7 +30,7 @@ Note: Most marker-related identifiers are in the ``mozilla`` namespace, to be ad
// Record a custom marker of type `ExampleNumberMarker` (see definition below).
PROFILER_MARKER("Number", OTHER, MarkerOptions{}, ExampleNumberMarker, 42);
.. code-block:: c++
.. code-block:: cpp
// Marker type definition.
struct ExampleNumberMarker {
@ -60,7 +60,7 @@ Header to Include
If the compilation unit only defines and records untyped, text, and/or its own markers, include
`the main profiler markers header <https://searchfox.org/mozilla-central/source/tools/profiler/public/ProfilerMarkers.h>`_:
.. code-block:: c++
.. code-block:: cpp
#include "mozilla/ProfilerMarkers.h"
@ -68,7 +68,7 @@ If it also records one of the other common markers defined in
`ProfilerMarkerTypes.h <https://searchfox.org/mozilla-central/source/tools/profiler/public/ProfilerMarkerTypes.h>`_,
include that one instead:
.. code-block:: c++
.. code-block:: cpp
#include "mozilla/ProfilerMarkerTypes.h"
@ -76,7 +76,7 @@ And if it uses any other profiler functions (e.g., labels), use
`the main Gecko Profiler header <https://searchfox.org/mozilla-central/source/tools/profiler/public/GeckoProfiler.h>`_
instead:
.. code-block:: c++
.. code-block:: cpp
#include "GeckoProfiler.h"
@ -84,7 +84,7 @@ The above works from source files that end up in libxul, which is true for the m
of Firefox source code. But some files live outside of libxul, such as mfbt, in which
case the advice is the same but the equivalent headers are from the Base Profiler instead:
.. code-block:: c++
.. code-block:: cpp
#include "mozilla/BaseProfilerMarkers.h" // Only own/untyped/text markers
#include "mozilla/BaseProfilerMarkerTypes.h" // Only common markers
@ -96,7 +96,7 @@ Untyped Markers
Untyped markers don't carry any information apart from common marker data:
Name, category, options.
.. code-block:: c++
.. code-block:: cpp
PROFILER_MARKER_UNTYPED(
// Name, and category pair.
@ -151,7 +151,7 @@ Text Markers
Text markers are very common, they carry an extra text as a fourth argument, in addition to
the marker name. Use the following macro:
.. code-block:: c++
.. code-block:: cpp
PROFILER_MARKER_TEXT(
// Name, category pair, options.
@ -173,7 +173,7 @@ Other Typed Markers
From C++ code, a marker of some type ``YourMarker`` (details about type definition follow) can be
recorded like this:
.. code-block:: c++
.. code-block:: cpp
PROFILER_MARKER(
"YourMarker name", OTHER,
@ -193,7 +193,7 @@ After the first three common arguments (like in ``PROFILER_MARKER_UNTYPED``), th
To capture time intervals around some important operations, it is common to store a timestamp, do the work,
and then record a marker, e.g.:
.. code-block:: c++
.. code-block:: cpp
void DoTimedWork() {
TimeStamp start = TimeStamp::Now();
@ -208,7 +208,7 @@ This is especially useful if there are multiple scope exit points.
``AUTO_PROFILER_MARKER_TEXT`` is `the only one implemented <https://searchfox.org/mozilla-central/search?q=id%3AAUTO_PROFILER_MARKER_TEXT`_ at this time.
.. code-block:: c++
.. code-block:: cpp
void MaybeDoTimedWork(bool aDoIt) {
AUTO_PROFILER_MARKER_TEXT("Timed work", OTHER, "Details");
@ -249,7 +249,7 @@ markers of that type in C++.
By convention, the suffix "Marker" is recommended to better distinguish them
from non-profiler entities in the source.
.. code-block:: c++
.. code-block:: cpp
struct YourMarker {
@ -262,7 +262,7 @@ markers in the profiler storage, and to identify them uniquely on profiler.firef
This name is defined in a special static member function ``MarkerTypeName``:
.. code-block:: c++
.. code-block:: cpp
// …
static constexpr Span<const char> MarkerTypeName() {
@ -284,7 +284,7 @@ The first function parameters is always ``SpliceableJSONWriter& aWriter``,
it will be used to stream the data as JSON, to later be read by
profiler.firefox.com.
.. code-block:: c++
.. code-block:: cpp
// …
static void StreamJSONMarkerData(SpliceableJSONWriter& aWriter,
@ -310,7 +310,7 @@ in binary form (i.e., there are no optimizable ``move`` operations).
For example, here's how to handle a string, a 64-bit number, another string, and
a timestamp:
.. code-block:: c++
.. code-block:: cpp
// …
const ProfilerString8View& aString,
@ -334,7 +334,7 @@ how it should be displayed on profiler.firefox.com (see next section).
Here's how the above functions parameters could be streamed:
.. code-block:: c++
.. code-block:: cpp
// …
aWriter.StringProperty("myString", aString);
@ -355,7 +355,7 @@ displayed on profiler.firefox.com.
The static member function ``MarkerTypeDisplay`` returns an opaque ``MarkerSchema``
object, which will be forwarded to profiler.firefox.com.
.. code-block:: c++
.. code-block:: cpp
// …
static MarkerSchema MarkerTypeDisplay() {
@ -363,7 +363,7 @@ object, which will be forwarded to profiler.firefox.com.
The ``MarkerSchema`` type will be used repeatedly, so for convenience we can define
a local type alias:
.. code-block:: c++
.. code-block:: cpp
// …
using MS = MarkerSchema;
@ -377,7 +377,7 @@ full list <https://searchfox.org/mozilla-central/define?q=T_mozilla%3A%3AMarkerS
Here is the most common set of locations, showing markers of that type in both the
Marker Chart and the Marker Table panels:
.. code-block:: c++
.. code-block:: cpp
// …
MS schema(MS::Location::MarkerChart, MS::Location::MarkerTable);
@ -394,7 +394,7 @@ The arguments is a string that may refer to marker data within braces:
For example, here's how to set the Marker Chart label to show the marker name and the
``myBytes`` number of bytes:
.. code-block:: c++
.. code-block:: cpp
// …
schema.SetChartLabel("{marker.name} – {marker.data.myBytes}");
@ -424,7 +424,7 @@ Each row may either be:
* Or a fixed label and value strings, using ``MarkerSchema::AddStaticLabelValue``.
.. code-block:: c++
.. code-block:: cpp
// …
schema.AddKeyLabelFormatSearchable(
@ -438,7 +438,7 @@ Each row may either be:
Finally the ``schema`` object is returned from the function:
.. code-block:: c++
.. code-block:: cpp
// …
return schema;
@ -449,7 +449,7 @@ compulsory functions, to make the code clearer.
And that is the end of the marker definition ``struct``.
.. code-block:: c++
.. code-block:: cpp
// …
};

Просмотреть файл

@ -64,7 +64,7 @@ Adjusting the build configuration
Create the build configuration file ``.mozconfig`` with the following
content in your Mozilla-central directory:
.. code::
.. code:: bash
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir-ff-msan
@ -139,7 +139,7 @@ execute this script in the ``js/src/`` subdirectory and pass a directory
name as the first parameter. The build will then be created in a new
subdirectory with that name.
.. code::
.. code:: bash
#! /bin/sh
@ -156,7 +156,7 @@ subdirectory with that name.
CXX="$LLVM_ROOT/build/bin/clang++" \
CFLAGS="-fsanitize=memory" \
CXXFLAGS="-fsanitize=memory" \
LDFLAGS=""-fsanitize=memory" \
LDFLAGS="-fsanitize=memory" \
../configure --enable-debug --enable-optimize --enable-memory-sanitizer --disable-jemalloc --enable-posix-nspr-emulation
make -j 8
fi

Просмотреть файл

@ -12,7 +12,7 @@ tasks should run on your push.
To use:
.. code-block::
.. code-block:: bash
$ mach try auto

Просмотреть файл

@ -408,7 +408,7 @@ Declaring a Log Module
Note: Log module names can only contain specific characters. The first character must be a lowercase or uppercase ASCII char, underscore, dash, or dot. Subsequent characters may be any of those, or an ASCII digit.
.. code-block:: c++
.. code-block:: cpp
#include "mozilla/Logging.h"
@ -455,7 +455,7 @@ A basic interface is provided in the form of 2 macros and an enum class.
Example Usage
-------------
.. code-block:: c++
.. code-block:: cpp
#include "mozilla/Logging.h"

Просмотреть файл

@ -130,7 +130,7 @@ As function parameters
In general, use ``nsA[C]String`` references to pass strings across modules. For example:
.. code-block:: c++
.. code-block:: cpp
// when passing a string to a method, use const nsAString&
nsFoo::PrintString(const nsAString& str);
@ -204,7 +204,7 @@ Iterators
Because Mozilla strings are always a single buffer, iteration over the
characters in the string is done using raw pointers:
.. code-block:: c++
.. code-block:: cpp
/**
* Find whether there is a tab character in `data`
@ -226,7 +226,7 @@ It should never be dereferenced.
Writing to a mutable string is also simple:
.. code-block:: c++
.. code-block:: cpp
/**
* Replace every tab character in `data` with a space.
@ -247,7 +247,7 @@ Iterators become invalid after changing the length of a string. If a string
buffer becomes smaller while writing it, use ``SetLength`` to inform the
string class of the new size:
.. code-block:: c++
.. code-block:: cpp
/**
* Remove every tab character from `data`
@ -353,7 +353,7 @@ Searching strings - looking for substrings, characters, etc.
The ``nsReadableUtils.h`` header provides helper methods for searching in runnables.
.. code-block:: c++
.. code-block:: cpp
bool FindInReadable(const nsAString& pattern,
nsAString::const_iterator start, nsAString::const_iterator end,
@ -367,7 +367,7 @@ whether or not the string was found.
An example:
.. code-block:: c++
.. code-block:: cpp
const nsAString& str = GetSomeString();
nsAString::const_iterator start, end;
@ -403,7 +403,7 @@ actually allocating new space and copying the characters into that substring.
``Substring()`` is the preferred method to create a reference to such a
string.
.. code-block:: c++
.. code-block:: cpp
void ProcessString(const nsAString& str) {
const nsAString& firstFive = Substring(str, 0, 5); // from index 0, length 5
@ -534,7 +534,7 @@ UTF-8 / UTF-16 conversion
or ``const char*`` to a 16-bit UTF-16 string. If you need a ``const
char16_t*`` buffer, you can use the ``.get()`` method. For example:
.. code-block:: c++
.. code-block:: cpp
/* signature: void HandleUnicodeString(const nsAString& str); */
object->HandleUnicodeString(NS_ConvertUTF8toUTF16(utf8String));
@ -548,7 +548,7 @@ UTF-8 / UTF-16 conversion
to a UTF-8 encoded string. As above, you can use ``.get()`` to access a
``const char*`` buffer.
.. code-block:: c++
.. code-block:: cpp
/* signature: void HandleUTF8String(const nsACString& str); */
object->HandleUTF8String(NS_ConvertUTF16toUTF8(utf16String));
@ -560,7 +560,7 @@ UTF-8 / UTF-16 conversion
converts and copies:
.. code-block:: c++
.. code-block:: cpp
// return a UTF-16 value
void Foo::GetUnicodeValue(nsAString& result) {
@ -571,7 +571,7 @@ UTF-8 / UTF-16 conversion
converts and appends:
.. code-block:: c++
.. code-block:: cpp
// return a UTF-16 value
void Foo::GetUnicodeValue(nsAString& result) {
@ -583,7 +583,7 @@ UTF-8 / UTF-16 conversion
converts and copies:
.. code-block:: c++
.. code-block:: cpp
// return a UTF-8 value
void Foo::GetUTF8Value(nsACString& result) {
@ -594,7 +594,7 @@ UTF-8 / UTF-16 conversion
converts and appends:
.. code-block:: c++
.. code-block:: cpp
// return a UTF-8 value
void Foo::GetUnicodeValue(nsACString& result) {
@ -709,7 +709,7 @@ advantage of the user-defined literals is twofold.
Here are some examples of proper usage of the literals (both standard and
user-defined):
.. code-block:: c++
.. code-block:: cpp
// call Init(const nsLiteralString&) - enforces that it's only called with literals
Init(u"start value"_ns);
@ -746,7 +746,7 @@ least as long as the ``nsSubstringTuple`` object.
For example, you can use the value of two strings and pass their
concatenation on to another function which takes an ``const nsAString&``:
.. code-block:: c++
.. code-block:: cpp
void HandleTwoStrings(const nsAString& one, const nsAString& two) {
// call HandleString(const nsAString&)
@ -760,7 +760,7 @@ buffer will be shared in this case negating the cost of the intermediate
temporary. You can concatenate N strings and store the result in a temporary
variable:
.. code-block:: c++
.. code-block:: cpp
constexpr auto start = u"start "_ns;
constexpr auto middle = u"middle "_ns;
@ -775,7 +775,7 @@ It is safe to concatenate user-defined literals because the temporary
``nsLiteral[C]String`` objects will live as long as the temporary
concatenation object (of type ``nsSubstringTuple``).
.. code-block:: c++
.. code-block:: cpp
// call HandlePage(const nsAString&);
// safe because the concatenated-string will live as long as its substrings
@ -794,7 +794,7 @@ dealing with small strings. ``nsAutoStringN``/``nsAutoCStringN`` are more
general alternatives that let you choose the number of characters in the
inline buffer.
.. code-block:: c++
.. code-block:: cpp
...
nsAutoString value;
@ -808,7 +808,7 @@ Member Variables
In general, you should use the concrete classes ``nsString`` and
``nsCString`` for member variables.
.. code-block:: c++
.. code-block:: cpp
class Foo {
...
@ -836,7 +836,7 @@ buffer if necessary. This is most often used in order to pass an
In the following example, an ``nsAString`` is combined with a literal string,
and the result is passed to an API which requires a simple character buffer.
.. code-block:: c++
.. code-block:: cpp
// Modify the URL and pass to AddPage(const char16_t* url)
void AddModifiedPage(const nsAString& url) {
@ -850,7 +850,7 @@ and the result is passed to an API which requires a simple character buffer.
``PromiseFlatString()`` is smart when handed a string that is already
null-terminated. It avoids creating the temporary buffer in such cases.
.. code-block:: c++
.. code-block:: cpp
// Modify the URL and pass to AddPage(const char16_t* url)
void AddModifiedPage(const nsAString& url, PRBool addPrefix) {
@ -881,7 +881,7 @@ For debugging, it's useful to ``printf`` a UTF-16 string (``nsString``,
``nsAutoString``, etc). To do this usually requires converting it to an 8-bit
string, because that's what ``printf`` expects. Use:
.. code-block:: c++
.. code-block:: cpp
printf("%s\n", NS_ConvertUTF16toUTF8(yourString).get());
@ -983,14 +983,14 @@ In XPIDL, ``in`` parameters are read-only, and the C++ signatures for
nsAString&`` for these parameters. ``out`` and ``inout`` parameters are
defined simply as ``nsAString&`` so that the callee can write to them.
.. code-block::
.. code-block:: cpp
interface nsIFoo : nsISupports {
attribute AString utf16String;
AUTF8String getValue(in ACString key);
};
.. code-block:: c++
.. code-block:: cpp
class nsIFoo : public nsISupports {
NS_IMETHOD GetUtf16String(nsAString& aResult) = 0;

Просмотреть файл

@ -122,7 +122,7 @@ WebIDL Interfaces
WebIDL interfaces are also valid XPIDL types. To declare a WebIDL interface in
XPIDL, write:
.. code-block::
.. code-block:: JavaScript
webidl InterfaceName;
@ -148,7 +148,7 @@ the ``cenum`` construct can be used to group constants together. Constants
grouped in a ``cenum`` will be reflected as-if they were declared directly on
the interface, in Rust and Javascript code.
.. code-block::
.. code-block:: JavaScript
cenum MyCEnum : 8 {
eSomeValue, // starts at 0