CINXE.COM
WebExtensions/Contribution Onramp - MozillaWiki
<!doctype html> <html class="client-nojs" lang="en" dir="ltr"> <head> <base href="https://wiki.mozilla.org/WebExtensions/Contribution_Onramp"> <meta charset="UTF-8"> <title>WebExtensions/Contribution Onramp - MozillaWiki</title> <script>document.documentElement.className="client-js";RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"a3959c7649e37fe573ea9883","wgCSPNonce":false,"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"WebExtensions/Contribution_Onramp","wgTitle":"WebExtensions/Contribution Onramp","wgCurRevisionId":1252322,"wgRevisionId":1252322,"wgArticleId":255883,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"WebExtensions/Contribution_Onramp","wgRelevantArticleId":255883,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":[],"wgRestrictionMove":[], "wgPageFormsTargetName":null,"wgPageFormsAutocompleteValues":[],"wgPageFormsAutocompleteOnAllChars":false,"wgPageFormsFieldProperties":[],"wgPageFormsCargoFields":[],"wgPageFormsDependentFields":[],"wgPageFormsCalendarValues":[],"wgPageFormsCalendarParams":[],"wgPageFormsCalendarHTML":null,"wgPageFormsGridValues":[],"wgPageFormsGridParams":[],"wgPageFormsContLangYes":null,"wgPageFormsContLangNo":null,"wgPageFormsContLangMonths":[],"wgPageFormsHeightForMinimizingInstances":800,"wgPageFormsShowOnSelect":[],"wgPageFormsScriptPath":"/extensions/PageForms","edgValues":null,"wgPageFormsEDSettings":null,"wgAmericanDates":false,"wgMFDisplayWikibaseDescriptions":{"search":false,"nearby":false,"watchlist":false,"tagline":false},"wgVector2022PreviewPages":[]};RLSTATE={"site.styles":"ready","user.styles":"ready","user":"ready","user.options":"loading","skins.vector.styles.legacy":"ready"};RLPAGEMODULES=["site","mediawiki.page.ready","mediawiki.toc","skins.vector.legacy.js","ext.Bugzilla"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.implement("user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"});});});</script> <link rel="stylesheet" href="/load.php?lang=en&modules=skins.vector.styles.legacy&only=styles&skin=vector"> <script async src="/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/load.php?lang=en&modules=site.styles&only=styles&skin=vector"> <meta name="generator" content="MediaWiki 1.39.10"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1000"> <link rel="icon" href="/images/favicon.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/opensearch_desc.php" title="MozillaWiki (en)"> <link rel="EditURI" type="application/rsd+xml" href="https://wiki.mozilla.org/api.php?action=rsd"> <link rel="alternate" type="application/atom+xml" title="MozillaWiki Atom feed" href="/index.php?title=Special:RecentChanges&feed=atom"> <meta http-equiv="X-Translated-By" content="Google"> <meta http-equiv="X-Translated-To" content="iw"> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.SlmlLUpNCG8.O/am=gAE/d=1/rs=AN8SPfrVDwgQMj0EYXdUQwFqbkL3aXptKg/m=corsproxy" data-sourceurl="https://wiki.mozilla.org/WebExtensions/Contribution_Onramp"></script> <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" rel="stylesheet"> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.SlmlLUpNCG8.O/am=gAE/d=1/exm=corsproxy/ed=1/rs=AN8SPfrVDwgQMj0EYXdUQwFqbkL3aXptKg/m=phishing_protection" data-phishing-protection-enabled="false" data-forms-warning-enabled="true" data-source-url="https://wiki.mozilla.org/WebExtensions/Contribution_Onramp"></script> <meta name="robots" content="none"> </head> <body class="mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-WebExtensions_Contribution_Onramp rootpage-WebExtensions skin-vector action-view skin-vector-legacy vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-language-alert-in-sidebar-disabled vector-feature-sticky-header-disabled vector-feature-sticky-header-edit-disabled vector-feature-table-of-contents-disabled vector-feature-visual-enhancement-next-disabled"> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.SlmlLUpNCG8.O/am=gAE/d=1/exm=corsproxy,phishing_protection/ed=1/rs=AN8SPfrVDwgQMj0EYXdUQwFqbkL3aXptKg/m=navigationui" data-environment="prod" data-proxy-url="https://wiki-mozilla-org.translate.goog" data-proxy-full-url="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" data-source-url="https://wiki.mozilla.org/WebExtensions/Contribution_Onramp" data-source-language="pl" data-target-language="iw" data-display-language="en-GB" data-detected-source-language="" data-is-source-untranslated="false" data-source-untranslated-url="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://wiki.mozilla.org/WebExtensions/Contribution_Onramp&anno=2" data-client="tr"></script> <div id="mw-page-base" class="noprint"></div> <div id="mw-head-base" class="noprint"></div> <div id="content" class="mw-body" role="main"><a id="top"></a> <div id="siteNotice"></div> <div class="mw-indicators"> </div> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">WebExtensions/Contribution Onramp</span></h1> <div id="bodyContent" class="vector-body"> <div id="siteSub" class="noprint"> From MozillaWiki </div> <div id="contentSub"> <span class="subpages">< <a href="https://wiki-mozilla-org.translate.goog/WebExtensions?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="WebExtensions">WebExtensions</a></span> </div> <div id="contentSub2"></div> <div id="jump-to-nav"></div><a class="mw-jump-link" href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#mw-head">Jump to navigation</a> <a class="mw-jump-link" href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#searchInput">Jump to search</a> <div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"> <div class="mw-parser-output"> <p>If this is your first contribution to the Firefox codebase, welcome! It can be scary to get started contributing to a large and complex codebase, but we鈥檝e prepared some tips to help you fix a good-first-bug and land a patch in Firefox.</p> <p>If we haven鈥檛 addressed your question in this document, please ask us by leaving a comment in the bug or by joining us on chat.mozilla.org in the #addons room (see <a href="https://wiki-mozilla-org.translate.goog/Matrix?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="Matrix">Matrix</a>). For a general overview of how to contribute to Firefox, please <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/contributing/contributing_to_mozilla.html">go here</a>.</p> <div id="toc" class="toc" role="navigation" aria-labelledby="mw-toc-heading"> <input type="checkbox" role="button" id="toctogglecheckbox" class="toctogglecheckbox" style="display:none"> <div class="toctitle" lang="en" dir="ltr"> <h2 id="mw-toc-heading">Contents</h2><span class="toctogglespan"><label class="toctogglelabel" for="toctogglecheckbox"></label></span> </div> <ul> <li class="toclevel-1 tocsection-1"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#General_Tips"><span class="tocnumber">1</span> <span class="toctext">General Tips</span></a></li> <li class="toclevel-1 tocsection-2"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#Getting_Started"><span class="tocnumber">2</span> <span class="toctext">Getting Started</span></a></li> <li class="toclevel-1 tocsection-3"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#Setting_Up_Developer_Environment"><span class="tocnumber">3</span> <span class="toctext">Setting Up Developer Environment</span></a> <ul> <li class="toclevel-2 tocsection-4"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#WebExtensions_APIs"><span class="tocnumber">3.1</span> <span class="toctext">WebExtensions APIs</span></a></li> </ul></li> <li class="toclevel-1 tocsection-5"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#Fixing_the_Bug!"><span class="tocnumber">4</span> <span class="toctext">Fixing the Bug!</span></a></li> <li class="toclevel-1 tocsection-6"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#Testing"><span class="tocnumber">5</span> <span class="toctext">Testing</span></a> <ul> <li class="toclevel-2 tocsection-7"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#Running_tests"><span class="tocnumber">5.1</span> <span class="toctext">Running tests</span></a></li> <li class="toclevel-2 tocsection-8"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#Adding_new_tests"><span class="tocnumber">5.2</span> <span class="toctext">Adding new tests</span></a></li> <li class="toclevel-2 tocsection-9"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#Linting"><span class="tocnumber">5.3</span> <span class="toctext">Linting</span></a></li> </ul></li> <li class="toclevel-1 tocsection-10"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#Submitting_a_Patch"><span class="tocnumber">6</span> <span class="toctext">Submitting a Patch</span></a></li> <li class="toclevel-1 tocsection-11"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#Try_server"><span class="tocnumber">7</span> <span class="toctext">Try server</span></a></li> </ul> </div> <h2><span class="mw-headline" id="General_Tips">General Tips</span></h2> <ul> <li>If you see a bug that looks interesting, please leave a comment saying that you would like to work on it, or upload your patch to phabricator and request review. Note: we will only assign the bug to you when a patch is uploaded.</li> <li>It's ok to ask questions in Bugzilla comments! It's best if you ask specific questions, like, "Can you help me find the line of code that needs changing," and not general questions like, "can you help me."</li> <li>It's normal to try things out and get stuck when you're working on your bug. When that happens, we encourage you to try a few different approaches before you ask for help. A good rule of thumb is to try to only needinfo your mentor once a day.</li> <li>It might take mentors a day or two to get back to you. If you haven't heard a response in more than two days, please feel free to ping them on chat.mozilla.org in the #addons room (see <a href="https://wiki-mozilla-org.translate.goog/Matrix?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="Matrix">Matrix</a>).</li> </ul> <h2><span class="mw-headline" id="Getting_Started">Getting Started</span></h2> <ul> <li>If you haven't already done so, create an account on <a rel="nofollow" class="external free" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://bugzilla.mozilla.org">https://bugzilla.mozilla.org</a>.</li> <li>Pick a bug you want to work on from the <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://mzl.la/2yq1XA8">good-first-bugs list</a>.</li> <li>Comment on the bug that you would like to work on it and proceed to set up your developer environment.</li> <li>Run unit tests to verify that your environment works as expected, preferably tests related to the bug that you want to work on.</li> </ul> <h2><span class="mw-headline" id="Setting_Up_Developer_Environment">Setting Up Developer Environment</span></h2> <p><b>For a detailed overview, see <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/setup/index.html">Getting Set Up To Work On The Firefox Codebase</a></b>.</p> <p>In short:</p> <ul> <li>Now, you need to set up your development environment by <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/contributing/contribution_quickref.html%23bootstrap-a-copy-of-the-firefox-source-code">cloning the source</a> with mercurial or <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://github.com/glandium/git-cinnabar/wiki/Mozilla:-A-git-workflow-for-Gecko-development">with Git</a>.</li> <li>Then you need to install dependencies with <code>mach bootstrap</code> for building Firefox. There are two ways to do this: <ul> <li>[recommended] Build Firefox using <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/contributing/build/artifact_builds.html">Firefox Artifact builds</a>. If the issue only requires changes to privileged JavaScript code, we recommend you use this method. Artifact builds saves time because it downloads a pre-built version of Firefox sources and applies your local changes on it, instead of rebuilding all of the C++ and Rust pieces from scratch. <ul> <li>To build Firefox for Android, see the <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/mobile/android/geckoview/contributor/geckoview-quick-start.html">GeckoView Contributor guide</a>. For a faster local development experience, we recommend to use the Artifact builds and the Android x86 target (which is especially useful to run the tests locally).</li> </ul></li> <li>[default] Build Firefox from scratch, by running <code>mach build</code> without <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/setup/configuring_build_options.html">.mozconfig</a>. Note: doing this can take some time.</li> </ul></li> </ul> <ul> <li>Next, use <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://searchfox.org">Searchfox</a> to find the code associated with your bug.</li> <li>Before making any changes, use <code>mach test [path to extension test]</code> to verify that you are able to run unit tests. Being able to run existing tests (and modified or new tests) is necessary, to see that your change works as expected.</li> </ul> <h4><span class="mw-headline" id="WebExtensions_APIs">WebExtensions APIs</span></h4> <p>You can learn more about how WebExtensions internals are organized and how to work on them by reading this <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/toolkit/components/extensions/webextensions/index.html">internal API documentation</a> and the <a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Hacking?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="WebExtensions/Hacking">WebExtensions Hacking wiki</a>.</p> <h2><span id="Fixing_the_Bug.21"></span><span class="mw-headline" id="Fixing_the_Bug!">Fixing the Bug!</span></h2> <ul> <li>You get to drive the actual bug fix. :)</li> <li>We encourage you to check in with the mentor to make sure you are on the right path, or ask for feedback on a patch in progress. You can attach your patch to a comment in Bugzilla and needinfo the mentor for review.</li> </ul> <h2><span class="mw-headline" id="Testing">Testing</span></h2> <p>In order to land code in Firefox, you will need to create tests for your patches. For an overview of the different test systems Firefox uses, please see this <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/testing/automated-testing/index.html">overview of automated testing</a>. In the WebExtension API code, most tests are either <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/testing/xpcshell/index.html">xpcshell tests</a> or <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/testing/mochitest-plain/index.html">(browser-chrome) mochitests</a>. Xpcshell tests are preferred because of the lower overhead. Browser tests need to be written when a test interfaces with browser UI, such as tabs or context menus. Browser tests are not supported on mobile; use mochitests if you need to run tests with a real browser on desktop and mobile.</p> <p>The easiest way to get started with tests is to look at existing tests:</p> <ul> <li>Xpcshell tests: <ul> <li>toolkit/components/extensions/test/xpcshell/ (<a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://searchfox.org/mozilla-central/source/toolkit/components/extensions/test/xpcshell">Searchfox link</a>)</li> <li>browser/components/extensions/test/xpcshell/ (<a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://searchfox.org/mozilla-central/source/browser/components/extensions/test/xpcshell">Searchfox link</a>)</li> <li>mobile/shared/components/extensions/test/xpcshell (<a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://searchfox.org/mozilla-central/source/mobile/shared/components/extensions/test/xpcshell">Searchfox link</a>)</li> </ul></li> </ul> <ul> <li>Browser-chrome tests: <ul> <li>toolkit/components/extensions/test/browser/ (<a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://searchfox.org/mozilla-central/source/toolkit/components/extensions/test/browser">Searchfox link</a>)</li> <li>browser/components/extensions/test/browser/ (<a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://searchfox.org/mozilla-central/source/browser/components/extensions/test/browser">Searchfox link</a>)</li> </ul></li> </ul> <ul> <li>Mochitests: <ul> <li>toolkit/components/extensions/test/mochitest/ (<a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://searchfox.org/mozilla-central/source/toolkit/components/extensions/test/mochitest">Searchfox link</a>)</li> </ul></li> </ul> <ul> <li>Firefox for Android mochitests: <ul> <li>mobile/shared/components/extensions/test/mochitest (<a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://searchfox.org/mozilla-central/source/mobile/shared/components/extensions/test/mochitest">Searchfox link</a>)</li> </ul></li> </ul> <h3><span class="mw-headline" id="Running_tests">Running tests</span></h3> <p>These tests can be run with the <code>mach test</code> command. To run specific test(s), pass the name of the test file or directory to <code>mach test</code>. Sometimes <code>mach test</code> has bugs (e.g. <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://bugzilla.mozilla.org/show_bug.cgi?id%3D1498636">bug 1498636</a> and <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://bugzilla.mozilla.org/show_bug.cgi?id%3D1495311">bug 1495311</a>); in that case use <code>mach xpcshell-test</code> or <code>mach mochitest</code> instead of <code>mach test</code> to run the test.</p> <p><code>mach test</code> has minimal output by default. To debug test failures, increase the verbosity of the logs with the <code>--verbose --log-mach-verbose</code> flags. The <code>--sequential</code> flag is not required, but allows for easier debugging because only one test is run at a time (instead of multiple in parallel). Al together, the command to run tests and get maximum debug output is: <code>mach test --verbose --log-mach-verbose --sequential [paths to test files]</code></p> <h3><span class="mw-headline" id="Adding_new_tests">Adding new tests</span></h3> <p>Add your test to an existing file when it is small and fits in that test. Otherwise, create a new test file, and register the test file in one of the .toml files in the same directory as your test, usually browser.toml or xpcshell-common.toml. After creating a new test file, run <code>mach build</code> before running tests. It is not necessary to rebuild if you are changing an existing test file.</p> <p>A test consists of multiple subtasks, which are defined in the test files via add_task(...). Most tests have the following minimal structure:</p> <pre>add_task(async function someShortAndSimpleDescriptionHere() { // Define a test extension. let extension = ExtensionTestUtils.loadExtension( .... ); // Loads the actual extension. await extension.startup(); // Tests here, often using extension.sendMessage and/or extension.awaitMessage // Unload the extension and remove the temporary files. await extension.unload(); }); </pre> <p>ExtensionTestUtils.loadExtension allows you to quickly generate a test extension, and its input parameters are documented at: <a rel="nofollow" class="external free" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://searchfox.org/mozilla-central/rev/aecb006bbb135d707ca4b8cea7572dd8abab6817/toolkit/components/extensions/ExtensionTestCommon.sys.mjs%23483-507">https://searchfox.org/mozilla-central/rev/aecb006bbb135d707ca4b8cea7572dd8abab6817/toolkit/components/extensions/ExtensionTestCommon.sys.mjs#483-507</a></p> <p>Another common action in tests is to load a web page or extension page. In xpcshell-tests, use ExtensionTestUtils.loadContentPage.</p> <p>In browser-chrome tests, the BrowserTestUtils namespace provides many useful test helpers, such as BrowserTestUtils.openNewForegroundTab to open a new tab. BrowserTestUtils is implemented and documented at <a rel="nofollow" class="external free" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://searchfox.org/mozilla-central/source/testing/mochitest/BrowserTestUtils/BrowserTestUtils.sys.mjs">https://searchfox.org/mozilla-central/source/testing/mochitest/BrowserTestUtils/BrowserTestUtils.sys.mjs</a></p> <p>Running the tests (xpcshell tests and Firefox for Android mochitests) on the Android emulator requires some <a rel="nofollow" class="external text" href="https://wiki-mozilla-org.translate.goog/Mobile/Fennec/Android/Testing?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#Running_tests_on_the_Android_emulator">additional setup of the local development environment</a>.</p> <h3><span class="mw-headline" id="Linting">Linting</span></h3> <p>Firefox source code have a consistent formatting and code style, which is enforced through <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/code-quality/lint/index.html">linting</a>. Most extension code is written with JavaScript, which is linted via eslint. It is recommended to set up and run the linter locally (see <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/code-quality/lint/linters/eslint.html">eslint docs</a>). When a patch has been submitted to Phabricator, <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/code-quality/static-analysis/index.html">static analysis</a> will run and report style errors upon completion (which may take a while to run). The Try Server also offers linting (ES for eslint, per <a rel="nofollow" class="external text" href="https://wiki-mozilla-org.translate.goog/WebExtensions/Try_Server?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB">WebExtensions/Try Server</a>).</p> <p>You can run linters on individual files as follows: <code>./mach lint [path(s) to file(s) and/or directories]</code></p> <p>You can also run the linter on all local changes: <code>./mach lint --outgoing</code></p> <h2><span class="mw-headline" id="Submitting_a_Patch">Submitting a Patch</span></h2> <p>For an overview of how to submit a patch, please see <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://firefox-source-docs.mozilla.org/contributing/how_to_submit_a_patch.html">How to submit a patch</a>. In short:</p> <ul> <li>Create a commit with a meaningful commit message, for example <code>Bug [bug ID here] - [short description of patch here] r=[reviewer name here]</code>. <ul> <li>Use <code>hg com --amend</code> or <code>git commit --amend</code> to modify the last commit if you want to change the commit title or content.</li> <li>If you want to combine multiple commits into one: <ul> <li>With mercurial, use <code>hg histedit</code> or <code>hg rebase</code>. For more info, see <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://book.mercurial-scm.org/read/changing-history.html">Mercurial - Changing history</a></li> <li>With git, use <code>git rebase -i</code>. For more info, see <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History">Git - Rewriting History</a>.</li> </ul></li> </ul></li> <li>When you are ready to have your patch reviewed, submit your patch to <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://moz-conduit.readthedocs.io/en/latest/phabricator-user.html">Phabricator</a>: <ul> <li>First, <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://moz-conduit.readthedocs.io/en/latest/phabricator-user.html%23creating-an-account">create an account</a> and install the <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://github.com/mozilla-conduit/review/blob/master/README.md%23installation">moz-phab tool</a>.</li> <li>Then <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://github.com/mozilla-conduit/review/blob/master/README.md%23execution">run moz-phab</a> to upload your commit. Each commit will become a separe patch, so combine them into one if needed.</li> <li>Note that you may go through a few iterations of changes and review before your code is ready to go.</li> </ul></li> <li>If you need to make a change to a patch that has already been submitted to Phabricator, make sure you update the existing revision so the reviewers can check the interdiff and history of changes. <code>moz-phab</code> will automatically modify your commit <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://github.com/mozilla-conduit/review/blob/master/README.md%23associating-a-commit-to-an-existing-phabricator-revision">to add the relevant link</a>.</li> <li>When working on unrelated changes at the same time, it is useful to work on them into separate hg bookmarks (or entire separate mozilla-central clones if you are not yet feeling confident enough with how the hg bookmarks works) or git branches.</li> <li>When the patch is approved, your mentor will use <a rel="nofollow" class="external text" href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://lando.services.mozilla.com/">Lando</a> to land the patch.</li> <li>Once your patch is accepted, you can expect to see your code in an upcoming version of Firefox!</li> </ul> <h2><span class="mw-headline" id="Try_server">Try server</span></h2> <p>To verify that the patch works as intended, your mentor may schedule a try job on the <a href="https://wiki-mozilla-org.translate.goog/ReleaseEngineering/TryServer?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#Try_Server" title="ReleaseEngineering/TryServer">Try Server</a> to run tests. Contributors <a href="https://wiki-mozilla-org.translate.goog/ReleaseEngineering/TryServer?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#Getting_access_to_the_Try_Server" title="ReleaseEngineering/TryServer">with access to the try server</a> can <a href="https://wiki-mozilla-org.translate.goog/ReleaseEngineering/TryServer?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB#How_to_push_to_try" title="ReleaseEngineering/TryServer">push try jobs</a> to run tests themselves.</p> <p>See <a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Try_Server?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="WebExtensions/Try Server">WebExtensions/Try_Server</a> for more information about using the try server to test WebExtension code.</p><!-- NewPP limit report Cached time: 20250226052336 Cache expiry: 86400 Reduced expiry: false Complications: [show鈥恡oc] CPU time usage: 0.018 seconds Real time usage: 0.021 seconds Preprocessor visited node count: 41/1000000 Post鈥恊xpand include size: 0/2097152 bytes Template argument size: 0/2097152 bytes Highest expansion depth: 2/100 Expensive parser function count: 0/100 Unstrip recursion depth: 0/20 Unstrip post鈥恊xpand size: 388/5000000 bytes --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 0.000 1 -total --> <!-- Saved in parser cache with key wiki:pcache:idhash:255883-0!canonical and timestamp 20250226052336 and revision id 1252322. --> </div> <div class="printfooter" data-nosnippet=""> Retrieved from "<a dir="ltr" href="https://wiki-mozilla-org.translate.goog/index.php?title=WebExtensions/Contribution_Onramp&oldid=1252322&_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB">https://wiki.mozilla.org/index.php?title=WebExtensions/Contribution_Onramp&oldid=1252322</a>" </div> </div> <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"></div> </div> </div> <div id="mw-navigation"> <h2>Navigation menu</h2> <div id="mw-head"> <nav id="p-personal" class="vector-menu mw-portlet mw-portlet-personal vector-user-menu-legacy" aria-labelledby="p-personal-label" role="navigation"> <h3 id="p-personal-label" class="vector-menu-heading "><span class="vector-menu-heading-label">Personal tools</span></h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-login" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/index.php?title=Special:UserLogin&returnto=WebExtensions/Contribution+Onramp&_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o"><span>Log in</span></a></li> <li id="pt-createaccount" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/Special:RequestAccount?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="You are encouraged to create an account and log in; however, it is not mandatory"><span>Request account</span></a></li> </ul> </div> </nav> <div id="left-navigation"> <nav id="p-namespaces" class="vector-menu mw-portlet mw-portlet-namespaces vector-menu-tabs vector-menu-tabs-legacy" aria-labelledby="p-namespaces-label" role="navigation"> <h3 id="p-namespaces-label" class="vector-menu-heading "><span class="vector-menu-heading-label">Namespaces</span></h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="View the content page [c]" accesskey="c"><span>Page</span></a></li> <li id="ca-talk" class="new mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/index.php?title=Talk:WebExtensions/Contribution_Onramp&action=edit&redlink=1&_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" rel="discussion" title="Discussion about the content page (page does not exist) [t]" accesskey="t"><span>Discussion</span></a></li> </ul> </div> </nav> <nav id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet vector-menu-dropdown" aria-labelledby="p-variants-label" role="navigation"><input type="checkbox" id="p-variants-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-variants" class="vector-menu-checkbox" aria-labelledby="p-variants-label"> <label id="p-variants-label" aria-label="Change language variant" class="vector-menu-heading "> <span class="vector-menu-heading-label">English</span> </label> <div class="vector-menu-content"> <ul class="vector-menu-content-list"></ul> </div> </nav> </div> <div id="right-navigation"> <nav id="p-views" class="vector-menu mw-portlet mw-portlet-views vector-menu-tabs vector-menu-tabs-legacy" aria-labelledby="p-views-label" role="navigation"> <h3 id="p-views-label" class="vector-menu-heading "><span class="vector-menu-heading-label">Views</span></h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB"><span>Read</span></a></li> <li id="ca-viewsource" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/index.php?title=WebExtensions/Contribution_Onramp&action=edit&_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="This page is protected. You can view its source [e]" accesskey="e"><span>View source</span></a></li> <li id="ca-history" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/index.php?title=WebExtensions/Contribution_Onramp&action=history&_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </nav> <nav id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-menu-dropdown" aria-labelledby="p-cactions-label" role="navigation" title="More options"><input type="checkbox" id="p-cactions-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-cactions" class="vector-menu-checkbox" aria-labelledby="p-cactions-label"> <label id="p-cactions-label" class="vector-menu-heading "> <span class="vector-menu-heading-label">More</span> </label> <div class="vector-menu-content"> <ul class="vector-menu-content-list"></ul> </div> </nav> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <div> <h3><label for="searchInput">Search</label></h3> <form action="/index.php" id="searchform" class="vector-search-box-form"> <div id="simpleSearch" class="vector-search-box-inner" data-search-loc="header-navigation"><input class="vector-search-box-input" type="search" name="search" placeholder="Search MozillaWiki" aria-label="Search MozillaWiki" autocapitalize="sentences" title="Search MozillaWiki [f]" accesskey="f" id="searchInput"> <input type="hidden" name="title" value="Special:Search"> <input id="mw-searchButton" class="searchButton mw-fallbackSearchButton" type="submit" name="fulltext" title="Search the pages for this text" value="Search"> <input id="searchButton" class="searchButton" type="submit" name="go" title="Go to a page with this exact name if it exists" value="Go"> </div> </form> </div> </div> </div> </div> <div id="mw-panel"> <div id="p-logo" role="banner"><a class="mw-wiki-logo" href="https://wiki-mozilla-org.translate.goog/Main_Page?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="Visit the main page"></a> </div> <nav id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation vector-menu-portal portal" aria-labelledby="p-navigation-label" role="navigation"> <h3 id="p-navigation-label" class="vector-menu-heading "><span class="vector-menu-heading-label">Navigation</span></h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/Main_Page?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li> <li id="n-Product-releases" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/Releases?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB"><span>Product releases</span></a></li> <li id="n-newpages" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/Special:NewPages?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB"><span>New pages</span></a></li> <li id="n-recentchanges" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/Special:RecentChanges?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="A list of recent changes in the wiki [r]" accesskey="r"><span>Recent changes</span></a></li> <li id="n-Recent-uploads" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/Special:NewFiles?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB"><span>Recent uploads</span></a></li> <li id="n-randompage" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/Special:Random?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="Load a random page [x]" accesskey="x"><span>Random page</span></a></li> <li id="n-Help" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/MozillaWiki:Help?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="The place to find out"><span>Help</span></a></li> </ul> </div> </nav> <nav id="p-How_to_Contribute" class="vector-menu mw-portlet mw-portlet-How_to_Contribute vector-menu-portal portal" aria-labelledby="p-How_to_Contribute-label" role="navigation"> <h3 id="p-How_to_Contribute-label" class="vector-menu-heading "><span class="vector-menu-heading-label">How to Contribute</span></h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-All-hands-meeting" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/WeeklyUpdates?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB"><span>All-hands meeting</span></a></li> <li id="n-Other-meetings" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/Community_Calendar?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB"><span>Other meetings</span></a></li> <li id="n-Contribute-to-Mozilla" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/Contribute?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB"><span>Contribute to Mozilla</span></a></li> <li id="n-Community-Portal" class="mw-list-item"><a href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://community.mozilla.org" rel="nofollow"><span>Community Portal</span></a></li> <li id="n-Community-Participation-Guidelines" class="mw-list-item"><a href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://www.mozilla.org/en-US/about/governance/policies/participation/" rel="nofollow"><span>Community Participation Guidelines</span></a></li> </ul> </div> </nav> <nav id="p-MozillaWiki" class="vector-menu mw-portlet mw-portlet-MozillaWiki vector-menu-portal portal" aria-labelledby="p-MozillaWiki-label" role="navigation"> <h3 id="p-MozillaWiki-label" class="vector-menu-heading "><span class="vector-menu-heading-label">MozillaWiki</span></h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-About" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/MozillaWiki:About?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB"><span>About</span></a></li> <li id="n-Team" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/MozillaWiki:Team?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB"><span>Team</span></a></li> <li id="n-Policies" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/MozillaWiki:Policies?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB"><span>Policies</span></a></li> <li id="n-Report-a-wiki-bug" class="mw-list-item"><a href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://bugzilla.mozilla.org/enter_bug.cgi?product%3DWebsites%26component%3Dwiki.mozilla.org" rel="nofollow"><span>Report a wiki bug</span></a></li> </ul> </div> </nav> <nav id="p-Around_Mozilla" class="vector-menu mw-portlet mw-portlet-Around_Mozilla vector-menu-portal portal" aria-labelledby="p-Around_Mozilla-label" role="navigation"> <h3 id="p-Around_Mozilla-label" class="vector-menu-heading "><span class="vector-menu-heading-label">Around Mozilla</span></h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-Mozilla-Support" class="mw-list-item"><a href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://support.mozilla.org/" rel="nofollow"><span>Mozilla Support</span></a></li> <li id="n-Mozilla-Developer-Network" class="mw-list-item"><a href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://developer.mozilla.org/" rel="nofollow"><span>Mozilla Developer Network</span></a></li> <li id="n-Planet-Mozilla" class="mw-list-item"><a href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://planet.mozilla.org/" rel="nofollow"><span>Planet Mozilla</span></a></li> <li id="n-Mozilla-Blog" class="mw-list-item"><a href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://blog.mozilla.org/" rel="nofollow"><span>Mozilla Blog</span></a></li> <li id="n-Research" class="mw-list-item"><a href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://www.mozilla.org/research/" rel="nofollow"><span>Research</span></a></li> </ul> </div> </nav> <nav id="p-tb" class="vector-menu mw-portlet mw-portlet-tb vector-menu-portal portal" aria-labelledby="p-tb-label" role="navigation"> <h3 id="p-tb-label" class="vector-menu-heading "><span class="vector-menu-heading-label">Tools</span></h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/Special:WhatLinksHere/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="A list of all wiki pages that link here [j]" accesskey="j"><span>What links here</span></a></li> <li id="t-recentchangeslinked" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/Special:RecentChangesLinked/WebExtensions/Contribution_Onramp?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li> <li id="t-specialpages" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/Special:SpecialPages?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li> <li id="t-print" class="mw-list-item"><a href="javascript:print();?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" rel="alternate" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> <li id="t-permalink" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/index.php?title=WebExtensions/Contribution_Onramp&oldid=1252322&_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li> <li id="t-info" class="mw-list-item"><a href="https://wiki-mozilla-org.translate.goog/index.php?title=WebExtensions/Contribution_Onramp&action=info&_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" title="More information about this page"><span>Page information</span></a></li> </ul> </div> </nav> </div> </div> <footer id="footer" class="mw-footer" role="contentinfo"> <ul id="footer-info"> <li id="footer-info-lastmod">This page was last edited on 6 November 2024, at 14:21.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://wiki-mozilla-org.translate.goog/MozillaWiki:Privacy_policy?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB">Privacy policy</a></li> <li id="footer-places-about"><a href="https://wiki-mozilla-org.translate.goog/MozillaWiki:About?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB">About MozillaWiki</a></li> <li id="footer-places-mobileview"><a href="https://wiki-mozilla-org.translate.goog/index.php?title=WebExtensions/Contribution_Onramp&mobileaction=toggle_view_mobile&_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-poweredbyico"><a href="https://translate.google.com/website?sl=pl&tl=iw&hl=en-GB&u=https://www.mediawiki.org/"><img src="/resources/assets/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" srcset="https://wiki-mozilla-org.translate.goog/resources/assets/poweredby_mediawiki_132x47.png?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB 1.5x,https://wiki-mozilla-org.translate.goog/resources/assets/poweredby_mediawiki_176x62.png?_x_tr_sl=pl&_x_tr_tl=iw&_x_tr_hl=en-GB 2x" width="88" height="31" loading="lazy"></a></li> </ul> </footer> <script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgPageParseReport":{"limitreport":{"cputime":"0.018","walltime":"0.021","ppvisitednodes":{"value":41,"limit":1000000},"postexpandincludesize":{"value":0,"limit":2097152},"templateargumentsize":{"value":0,"limit":2097152},"expansiondepth":{"value":2,"limit":100},"expensivefunctioncount":{"value":0,"limit":100},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":388,"limit":5000000},"timingprofile":["100.00% 0.000 1 -total"]},"cachereport":{"timestamp":"20250226052336","ttl":86400,"transientcontent":false}}});mw.config.set({"wgBackendResponseTime":233});});</script> <script>function gtElInit() {var lib = new google.translate.TranslateService();lib.translatePage('pl', 'iw', function () {});}</script> <script src="https://translate.google.com/translate_a/element.js?cb=gtElInit&hl=en-GB&client=wt" type="text/javascript"></script> </body> </html>