<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jorend</id>
	<title>MozillaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jorend"/>
	<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/Special:Contributions/Jorend"/>
	<updated>2026-04-17T07:57:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1234335</id>
		<title>Modules/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1234335"/>
		<updated>2021-03-10T01:15:13Z</updated>

		<summary type="html">&lt;p&gt;Jorend: Change JS engine owner, delete some dead email addresses, fold js-ctypes module into JS engine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Only module owners may edit this page.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
They may:&lt;br /&gt;
&lt;br /&gt;
* update any information about their module except the name of the owner&lt;br /&gt;
* add or remove sub-modules&lt;br /&gt;
* change the owner of a sub-module &lt;br /&gt;
* add emeritus owners or peers&lt;br /&gt;
&lt;br /&gt;
Other changes, including changes of module owner or addition/removal of modules, must be agreed with the Module Ownership Module group, probably via a discussion in [https://www.mozilla.org/about/forums/#governance mozilla.governance].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Accessibility&lt;br /&gt;
|description=Support for platform accessibility APIs. Accessibility APIs are used by 3rd party software like screen readers, screen magnifiers, and voice dictation software, which need information about document content and UI controls, as well as important events like changes of focus.&lt;br /&gt;
|owner=[mailto:jteh@mozilla.com Jamie Teh]&lt;br /&gt;
|peers=[mailto:eitan@monotonous.org Eitan Isaacson], [mailto:mzehe@mozilla.com Marco Zehe], [mailto:mreschenberg@mozilla.com Morgan Reschenberg]&lt;br /&gt;
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal], [mailto:surkov.alexander@gmail.com Alexander Surkov]&lt;br /&gt;
|peersemeritus=[mailto:dbolter@mozilla.com David Bolter], [mailto:tbsaunde+mozbugs@tbsaunde.org Trevor Saunders], [mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan, [mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Animation&lt;br /&gt;
|description=Declarative animations: CSS animations, CSS transitions, Web Animations API, and off-main thread animations.&lt;br /&gt;
|owner=[mailto:brian@birchill.co.jp Brian Birtles] (:birtles)&lt;br /&gt;
|peers=[mailto:boris@mozilla.com Boris Chiou] (:boris), [mailto:hikezoe.birchill@mozilla.com Hiroyuki Ikezoe] (:hiro), [mailto:mwoodrow@mozilla.com Matt Woodrow] (:mattwoodrow)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/animation; and animation-related and interpolation-related code in layout/style, gfx/layers, servo/components/style and servo/ports/gecko&lt;br /&gt;
|components=Core::DOM::Animation, Core::CSS Transitions and Animations&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Anti-Tracking&lt;br /&gt;
|description=Tracking detection and content-blocking.&lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:dlee@mozilla.com Dimi Lee], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:ewright@mozilla.com Erica Wright], [mailto:xeonchen@gmail.com Gary Chen], [mailto:jhofmann@mozilla.com Johann Hofmann], [mailto:tihuang@mozilla.com Tim Huang]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=toolkit/components/antitracking/, several files under browser/ and netwerk/url-classifier/&lt;br /&gt;
|components=Core::Privacy: Anti-Tracking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Browser WebAPI&lt;br /&gt;
|description=Web API for rendering apps, browser windows and widgets.&lt;br /&gt;
|owner=[mailto:Olli.Pettay@helsinki.fi Olli Pettay]&lt;br /&gt;
|peers=[mailto:fabrice@mozilla.com Fabrice Desré]&lt;br /&gt;
|ownersemeritus=[mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/browser-element/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build and Release Tools&lt;br /&gt;
|description=Tools related to build and release automation and configuration of release builds.&lt;br /&gt;
|owner=[mailto:bhearsum@mozilla.com Ben Hearsum]&lt;br /&gt;
|peers=[mailto:aki@mozilla.com Aki Sasaki]&lt;br /&gt;
|group=release-engineering&lt;br /&gt;
|source_dirs=tools/update-packaging/ tools/update-verify&lt;br /&gt;
|url=https://wiki.mozilla.org/ReleaseEngineering&lt;br /&gt;
|components=Release Engineering::*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config&lt;br /&gt;
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.&lt;br /&gt;
|owner=[mailto:mh@glandium.org Mike Hommey] (:glandium)&lt;br /&gt;
|peers=[mailto:dmajor@mozilla.com David Major] (:dmajor), [mailto:mhentges@mozilla.com Mitchell Hentges]&lt;br /&gt;
|ownersemeritus=Chris Manchester (2019-2020), Gregory Szorc (2013-2019), Ted Mielczarek (2008-[https://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/ 2013]), Benjamin Smedberg (???-[http://benjamin.smedbergs.us/blog/2008-04-30/more-changing-of-the-guard-ted-mielczarek/ 2008]), &lt;br /&gt;
|peersemeritus=Ted Mielczarek, Ralph Giles, Gregory Szorc, Chris Manchester, Mike Shal, Nathan Froyd, Ricky Stewart&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=build/, config/, python/mozbuild, tools/cross-commit, tools/cvs2hg-import.py, tools/cvsmgmt/, tools/elf-dynstr-gc/, tools/trees.pl, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=http://www.mozilla.org/build/&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Code Analysis and Debugging Tools&lt;br /&gt;
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-performance&lt;br /&gt;
|source_dirs=tools/codesighs/, tools/debug/, tools/dreftool/, tools/dumpdeps/, tools/jprof/, tools/leak-gauge/, tools/leaky/, tools/memory/, tools/module-deps/, tools/performance/, tools/post_compile/, tools/preloader/, tools/rb/, tools/reorder/, tools/trace-malloc/, tools/uuiddeps/, &lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content Security&lt;br /&gt;
|description=Native content-based security features enforced in the ContentSecurityManager, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Referrer Policy, Subresource Integrity (SRI), Cross-Origin Resource Sharing (CORS) and top-level data: URI blocking.&lt;br /&gt;
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peers=[mailto:tvyas@mozilla.com Tanvi Vyas], [mailto:dveditz@mozilla.com Dan Veditz], [mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:jkt@mozilla.com Jonathan Kingston], [mailto:tnguyen@mozilla.com Thomas Nguyen]&lt;br /&gt;
|peersemeritus=[mailto:mozilla@sidstamm.com Sid Stamm], [mailto:jonas@sicking.cc Jonas Sicking], François Marier&lt;br /&gt;
|group=dev-security&lt;br /&gt;
|source_dirs=dom/security&lt;br /&gt;
|components=Core::DOM: Security&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cookies&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:amarchesini@mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:honzab.moz@firemni.cz Honza Bambas] &lt;br /&gt;
|ownersemeritus=Monica Chew&lt;br /&gt;
|peersemeritus=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=netwerk/cookie/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Networking: Cookies&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Permissions&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:honzab.moz@firemni.cz Honza Bambas]&lt;br /&gt;
|ownersemeritus=Monica Chew&lt;br /&gt;
|peersemeritus=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=extensions/permissions/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core :: Permission Manager&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cycle Collector&lt;br /&gt;
|description=Code to break and collect objects within reference cycles&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]&lt;br /&gt;
|peers=Peter Van der Beken, Olli Pettay&lt;br /&gt;
|peersemeritus=David Baron&lt;br /&gt;
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=C++/Rust usage, tools, and style&lt;br /&gt;
|description=Aspects of C++ use such as language feature usage, standard library versions/usage, compiler/toolchain versions, formatting and naming style, and aspects of Rust use as needs arise&lt;br /&gt;
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:glandium@mozilla.com Mike Hommey], [mailto:jwalden@mozilla.com Jeff Walden], [mailto:sgiesecke@mozilla.com Simon Giesecke]&lt;br /&gt;
|source_dirs=non-third-party C++ and Rust code in the tree&lt;br /&gt;
|components=Various components&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=docshell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peers=[mailto:peterv@propagandism.org Peter Van der Beken], [mailto:afarre@mozilla.com Andreas Farre]&lt;br /&gt;
|ownersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:justin.lebar@gmail.com Justin Lebar], [mailto:sawang@mozilla.com Samael Wang], [mailto:kyle@nonpolynomial.com Kyle Machulis]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=docshell/, uriloader/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Document Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Document Object Model&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:hsivonen@iki.fi Henri Sivonen], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:baku@mozilla.com Andrea Marchesini],&lt;br /&gt;
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:nika@thelayzells.com Nika Layzell], [mailto:afarre@mozilla.com Andreas Farre], [mailto:emilio@crisal.io Emilio Cobos], [mailto:asuth@mozilla.com Andrew Sutherland], [mailto:echen@mozilla.com Edgar Chen]&lt;br /&gt;
|ownersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|peersemeritus=[mailto:justin.lebar@gmail.com Justin Lebar], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:bent.mozilla@gmail.com Ben Turner], [mailto:mounir@lamouri.fr Mounir Lamouri], [mailto:me@kylehuey.com Kyle Huey], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:ben@wanderview.com Ben Kelly], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:kyle@nonpolynomial.com Kyle Machulis], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/*, except directories covered by other modules&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core &amp;amp; HTML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=DOM File&lt;br /&gt;
|description=DOM Blob, File and FileSystem APIs &lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:olli@pettay.fi Olli Pettay]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/file, dom/filesystem&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: File&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Event Handling&lt;br /&gt;
|description=DOM Events and Event Handling &lt;br /&gt;
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:echen@mozilla.com Edgar Chen]&lt;br /&gt;
|peersemeritus=[mailto:sshih@mozilla.com Stone Shih]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/events and event handling related code elsewhere &lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: Events, Core::DOM: UI Events &amp;amp; Focus Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Workers&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:asuth@mozilla.com Andrew Sutherland]&lt;br /&gt;
|peers=[mailto:baku@mozilla.com Andrea Marchesini], [mailto:ytausky@mozilla.com Yaron Tausky]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|peersemeritus=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:bkelly@mozilla.com Ben Kelly]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/workers/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_web_workers&lt;br /&gt;
|components=Core::DOM: Workers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IndexedDB&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|peers=[mailto:btseng@mozilla.com Bevis Tseng], [mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/indexedDB/&lt;br /&gt;
|url=https://developer.mozilla.org/en/IndexedDB&lt;br /&gt;
|components=Core::DOM: IndexedDB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Editor&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=editor/&lt;br /&gt;
|url=http://www.mozilla.org/editor/&lt;br /&gt;
|components=Core::Editor&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Gecko Profiler&lt;br /&gt;
|description=Gecko&#039;s built-in profiler&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:gsquelart@mozilla.com Gerald Squelart], [mailto:gtatum@mozilla.com Greg Tatum], [mailto:canaltinova@mozilla.com Nazim Can Altinova], [mailto:jseward@mozilla.com Julian Seward] (LUL), [mailto:kvijayan@mozilla.com Kannan Vijayan] (JS integration), [mailto:brennie@mozilla.com Barret Rennie] (Screenshots).&lt;br /&gt;
|ownersemeritus=[mailto:b56girard@gmail.com Benoit Girard]&lt;br /&gt;
|peersemeritus=[mailto:shu@mozilla.com Shu-yu Guo] (JS integration), [mailto:tlee@mozilla.com Thinker Lee] (TaskTracer), [mailto:cyu@mozilla.com Cervantes Yu] (TaskTracer), Nicholas Nethercote&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=tools/profiler/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler&lt;br /&gt;
|components=Core::Gecko Profiler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Global Key Bindings&lt;br /&gt;
|description=Global hot keys in Mozilla for the browser, editor, mail-news and widgets. Does not include underlined menu accelerators and the like, as those are part of i18n.&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=dom/events (and platform specific directories under it)&lt;br /&gt;
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html&lt;br /&gt;
|components=Core::Keyboard: Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Graphics&lt;br /&gt;
|description=Mozilla graphics API&lt;br /&gt;
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bas.schouten@live.nl Bas Schouten](Layers, Windows), [mailto:jgilbert@mozilla.com Jeff Gilbert](WebGL, ANGLE), [mailto:mwoodrow@mozilla.com Matt Woodrow](Layers API), [mailto:jfkthame@googlemail.com Jonathan Kew](text/fonts), [mailto:nsilva@mozilla.com  Nicolas Silva](MozSurface), [mailto:ncameron@mozilla.com Nick Cameron], [mailto:sikeda@mozilla.com Sotaro Ikeda](B2G), [mailto:jnicol@mozilla.com Jamie Nicol](Android), [mailto:mstange@themasta.com Markus Stange](OS X), [mailto:lsalzman@mozilla.com Lee Salzman](Skia, Canvas2D), [mailto:rhunt@mozilla.com Ryan Hunt](OMTP), [mailto:gwatson@mozilla.com Glenn Watson ](WebRender), [mailto:dmalyshau@mozilla.com Dzmitry Malyshau](WebRender)&lt;br /&gt;
|peersemeritus=[mailto:bgirard@mozilla.com Benoit Girard](Compositor, Performance), [mailto:ajuma.bugzilla@alijuma.com Ali Juma], [mailto:george@mozilla.com George Wright](Canvas2D), [mailto:mchang@mozilla.com Mason Chang], [mailto:dvander@mozilla.com David Anderson], [mailto:clord@mozilla.com Christopher Lord], [mailto:jdaggett@mozilla.com John Daggett](text/fonts), [mailto:bjacob@mozilla.com Benoit Jacob](gfx/gl), [mailto:jdrew@mozilla.com Joe Drew], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:snorp@mozilla.com James Willcox](Android),&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/, dom/canvas/&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch&lt;br /&gt;
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::Graphics: WebRender, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebGPU (Graphics submodule)&lt;br /&gt;
|description=WebGPU implementation&lt;br /&gt;
|owner=[mailto:dmalyshau@mozilla.com Dzmitry Malyshau]&lt;br /&gt;
|peers=[mailto:josh@joshgroves.com Joshua Groves], [mailto:jgilbert@mozilla.com Jeff Gilbert],&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/webgpu&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/WebGPU&lt;br /&gt;
|components=Core::Graphics::WebGPU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=APZ (Graphics submodule)&lt;br /&gt;
|description=Asynchronous panning and zooming&lt;br /&gt;
|owner=[mailto:bballo@mozilla.com Botond Ballo]&lt;br /&gt;
|ownersemeritus=[mailto:kgupta@mozilla.staktrace.com Kartikaya Gupta]&lt;br /&gt;
|peers=[mailto:kgupta@mozilla.staktrace.com Kartikaya Gupta], [mailto:tnikkel@mozilla.com Timothy Nikkel], [mailto:rhunt@mozilla.com Ryan Hunt], [mailto:mstange@mozilla.com Markus Stange]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/layers/apz&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/APZ&lt;br /&gt;
|components=Core::Panning and Zooming&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Moz2D (Graphics submodule)&lt;br /&gt;
|description=Platform independent 2D graphics API&lt;br /&gt;
|owner=[mailto:bschouten@mozilla.com Bas Schouten]&lt;br /&gt;
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/2d&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D&lt;br /&gt;
|components=Core::Graphics&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Legacy HTML Parser&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:rbs@maths.uq.edu.au rbs@maths.uq.edu.au]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|source_dirs=parser/htmlparser&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/doc/parser.html&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HAL&lt;br /&gt;
|description=Hardware Abstraction Layer&lt;br /&gt;
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=hal/&lt;br /&gt;
|components=Core::Hardware Abstraction Layer (HAL)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HTML Parser&lt;br /&gt;
|description=The HTML Parser transforms HTML source code into a DOM. It conforms to the HTML specification, and is mostly translated automatically from Java to C++.&lt;br /&gt;
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|peers=[mailto:wchen@mozilla.com William Chen]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=parser/html&lt;br /&gt;
|url=http://about.validator.nu/&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=I18N Library&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:hsivonen@hsivonen.fi Henri Sivonen (encoding)], [mailto:jfkthame@gmail.com Jonathan Kew (except to encoding)]&lt;br /&gt;
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura], [mailto:gandalf@aviary.pl Zibi Braniecki], [mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|group=dev-i18n&lt;br /&gt;
|source_dirs=intl/&lt;br /&gt;
|url=http://mozilla.org/projects/intl/index.html&lt;br /&gt;
|components=Core::Internationalization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=ImageLib&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:tnikkel@gmail.com Timothy Nikkel]&lt;br /&gt;
|peers=[mailto:aosmond@mozilla.com Andrew Osmond], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar]&lt;br /&gt;
|peersemeritus=[mailto:seth.bugzilla@blackhail.net Seth Fowler], [mailto:netzen@gmail.com Brian Bondy], [mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::ImageLib&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IPC&lt;br /&gt;
|description=Native message-passing between threads and processes&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|ownersemeritus=Chris Jones, Bill McCloskey&lt;br /&gt;
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:jmathies@mozilla.com Jim Mathies], [mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|peersemeritus=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bent.mozilla@gmail.com Ben Turner], David Anderson, Kan-Ru Chen, Bevis Tseng, Ben Kelly&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript&lt;br /&gt;
|description=JavaScript engine (SpiderMonkey)&lt;br /&gt;
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]&lt;br /&gt;
|peers=André Bargull, [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:jcoppeard@mozilla.com Jon Coppeard], [mailto:sphink@gmail.com Steve Fink], [mailto:arai.unmht@gmail.com Tooru Fujisawa], [mailto:evilpies@gmail.com Tom Schuster], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:jwalden@mit.edu Jeff Walden], [mailto:ystartsev@mozilla.com Yulia Startsev], [mailto:mgaudet@mozilla.com Matthew Gaudet], [mailto:iireland@mozilla.com Iain Ireland], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:ccullen@mozilla.com Caroline Cullen], [mailto:nfitzgerald@mozilla.com Nick Fitzgerald], [mailto:luke@mozilla.com Luke Wagner], [mailto:sunfish@mozilla.com Dan Gohman], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:wmccloskey@mozilla.com Bill McCloskey], Shu-yu Guo, Niko Matsakis, Eddy Bruel, [mailto:danderson@mozilla.com David Anderson], [mailto:igor@mir2.org Igor Bukanov], Andreas Gal, Eric Faust, Ashley Hauck, [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:till@tillschneidereit.net Till Schneidereit], Nicholas Nethercote, Jason Orendorff&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey,&lt;br /&gt;
http://developer.mozilla.org/en/docs/About_JavaScript&lt;br /&gt;
|components=Core::JavaScript Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript JIT&lt;br /&gt;
|description=JavaScript engine&#039;s JIT compilers (IonMonkey, Baseline)&lt;br /&gt;
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]&lt;br /&gt;
|peers=André Bargull, [mailto:bbouvier@mozilla.com Benjamin Bouvier], [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:ccullen@mozilla.com Caroline Cullen], [mailto:mgaudet@mozilla.com Matthew Gaudet], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:iireland@mozilla.com Iain Ireland], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:evilpies@gmail.com  Tom Schuster], [mailto:sstangl@mozilla.com Sean Stangl], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:luke@mozilla.com Luke Wagner]&lt;br /&gt;
|peersemeritus=[mailto:danderson@mozilla.com David Anderson], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:hv1989@gmail.com Hannes Verschore]&lt;br /&gt;
|group=dev-tech-js-engine-internals&lt;br /&gt;
|source_dirs=js/src/jit&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey&lt;br /&gt;
|components=Core::JavaScript Engine: JIT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=jsat&lt;br /&gt;
|description=Javascript screen reader that is used in Android and B2G&lt;br /&gt;
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]&lt;br /&gt;
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/jsat/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-tests&lt;br /&gt;
|description=JavaScript test suite&lt;br /&gt;
|owner=[mailto:bclary@bclary.com Bob Clary]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tests/&lt;br /&gt;
|url=http://www.mozilla.org/js/tests/library.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Layout Engine&lt;br /&gt;
|description=rendering tree construction, layout (reflow), etc.&lt;br /&gt;
|owner=[mailto:dholbert@mozilla.com Daniel Holbert]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:jfkthame@gmail.com Jonathan Kew], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:matt.woodrow@gmail.com Matt Woodrow], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:emilio@crisal.io Emilio Cobos Álvarez], [mailto:mats@mozilla.com Mats Palmgren], [mailto:tlin@mozilla.com Ting-Yu Lin]&lt;br /&gt;
|ownersemeritus=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/printing/, layout/tables/, layout/tools/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Layout&lt;br /&gt;
|components=Core::Layout, Core::Layout: Block and Inline, Core::Layout: Columns, Core::Layout: Flexbox, Core::Layout: Floats, Core::Layout: Form Controls, Core::Layout: Generated Content, Lists, and Counters, Core::Layout: Grid, Core::Layout: Images, Video, and HTML Frames, Core::Layout: Positioned, Core::Layout: Ruby, Core::Layout: Scrolling and Overflow, Core::Layout: Tables, Core::Layout: Text and Fonts, Core::Print Preview, Core::Printing: Output&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=libjar&lt;br /&gt;
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|ownersemeritus=Taras Glek, Michael Wu&lt;br /&gt;
|peers=[mailto:mnovotny@mozilla.com Michal Novotny], [mailto:vgosu@mozilla.com Valentin Gosu]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libjar&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MathML&lt;br /&gt;
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-tech-mathml&lt;br /&gt;
|source_dirs=layout/mathml/&lt;br /&gt;
|url=http://www.mozilla.org/projects/mathml/&lt;br /&gt;
|components=Core::MathML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Playback&lt;br /&gt;
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).&lt;br /&gt;
|owner=[mailto:jyavenard@mozilla.com Jean-Yves Avenard]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:cpearce@mozilla.com Chris Pearce]&lt;br /&gt;
|peers=[mailto:kinetik@flim.org Matthew Gregan], [mailto:bvandyk@mozilla.com Bryce Van Dyk], [mailto:jolin@mozilla.com John Lin], [mailto:alwu@mozilla.com Alastor Wu], [mailto:jwwang@mozilla.com JW Wang]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=dom/media, media/gmp-clearkey/, media/libcubeb/, media/libnestegg/, media/libogg/, media/libopus/, media/libstagefright/, media/libtheora/, media/libtremor/, media/libvorbis/, media/libvpx/, media/omx-plugin/, media/rlz/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Audio/Video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Transport&lt;br /&gt;
|description=Pluggable transport for real-time media&lt;br /&gt;
|owner=[mailto:ekr@rtfm.com Eric Rescorla]&lt;br /&gt;
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/mtransport&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::WebRTC::Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Memory Allocator&lt;br /&gt;
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=&lt;br /&gt;
|peersemeritus=Eric Rahm, Nicholas Nethercote&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=memory/&lt;br /&gt;
|components=Core::DMD, Core::jemalloc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mfbt&lt;br /&gt;
|description=mfbt is a collection of headers, macros, data structures, methods, and other functionality available for use and reuse throughout all Mozilla code (including SpiderMonkey and Gecko more broadly).&lt;br /&gt;
|owner=[mailto:jwalden@mit.edu Jeff Walden]&lt;br /&gt;
|peers=[mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mfbt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::MFBT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Mozglue&lt;br /&gt;
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:kgupta@mozilla.com Kartikaya Gupta] (mozglue/android), [mailto:nchen@mozilla.com Jim Chen] (mozglue/android), [mailto:aklotz@mozilla.com Aaron Klotz] (Windows Dll Blocklist/Interceptor)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mozglue/&lt;br /&gt;
|components=Core::mozglue&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozilla-toplevel&lt;br /&gt;
|description=The top level directory for the mozilla tree.&lt;br /&gt;
|owner=[[Modules/Firefox_Technical_Leadership|Firefox Technical Leadership module]]&lt;br /&gt;
|ownersemeritus=[mailto:brendan@mozilla.org Brendan Eich]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=tools/README&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MSCOM&lt;br /&gt;
|description=Integration with Microsoft Distributed COM&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|peers=[mailto:jteh@mozilla.com James Teh], [mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/mscom/%&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC: MSCOM}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Necko&lt;br /&gt;
|description=The Mozilla Networking Library&lt;br /&gt;
|owner=[mailto:dd.mozilla@gmail.com  Dragana Damjanovic]&lt;br /&gt;
|peers= [mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:mnovotny@mozilla.com Michal Novotny], [mailto:valentin.gosu@gmail.com Valentin Gosu], [mailto:kershaw@mozilla.com Kershaw Chang], [mailto:juhsu@mozilla.com Junior Hsu]&lt;br /&gt;
|ownersemeritus=[mailto:mcmanus@ducksong.com Patrick McManus], [mailto:cbiesinger@gmail.com Christian Biesinger] |peersemeritus= Shih-Chiang Chien, [mailto:bzbarsky@mit.edu Boris Zbarsky], Steve Workman, Nick Hurley, [mailto:daniel@haxx.se Daniel Stenberg ], [mailto:jduell.mcbugs@gmail.com Jason Duell]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=netwerk/%, netwerk/base/, netwerk/build/, netwerk/cache/, netwerk/dns/, netwerk/locales/, netwerk/mime/, netwerk/protocol/, netwerk/resources/, netwerk/socket/, netwerk/streamconv/, netwerk/system/, netwerk/test/, netwerk/testserver/&lt;br /&gt;
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko&lt;br /&gt;
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NodeJS usage, tools, and style&lt;br /&gt;
|description=Advises on the use of NodeJS and npm packages at build and runtime. Reviews additions/upgrades/removals of vendored npm packages. Works with appropriate teams to maintain automated license and security audits of npm packages. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored npm packages.&lt;br /&gt;
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]&lt;br /&gt;
|peers=[mailto:mbanner@mozilla.com Mark Banner], [mailto:dcoates@mozilla.com Danny Coates], [mailto:khudson@mozilla.com Kate Hudson], [mailto:elee@mozilla.com Ed Lee], [mailto:dtownsend@mozilla.com Dave Townsend]&lt;br /&gt;
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate&lt;br /&gt;
|components=Various components&lt;br /&gt;
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev], #nodejs on slack&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NSPR&lt;br /&gt;
|description=Netscape Portable Runtime&lt;br /&gt;
|owner=[mailto:kaie@kuix.de Kai Engert]&lt;br /&gt;
|peers=[mailto:mh@glandium.org Mike Hommey]&lt;br /&gt;
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|group=dev-tech-nspr&lt;br /&gt;
|source_dirs=nsprpub/&lt;br /&gt;
|url=http://www.mozilla.org/projects/nspr/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/reference/html/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/release-notes/&lt;br /&gt;
|components=NSPR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PDF&lt;br /&gt;
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF&#039; format.&lt;br /&gt;
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]&lt;br /&gt;
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:vnicolas@mozilla.com Vivien Nicolas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/pdf/&lt;br /&gt;
|url=https://github.com/mozilla/pdf.js&lt;br /&gt;
|components=Core::PDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Plugins&lt;br /&gt;
|description= NPAPI Plugin support.&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:davidp99@gmail.com David Parks]&lt;br /&gt;
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:jstenback@gmail.com Johnny Stenback], Benjamin Smedberg&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/plugins/, modules/plugin/&lt;br /&gt;
|url=https://wiki.mozilla.org/Plugins&lt;br /&gt;
|components=Core::Plug-ins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=Preference library&lt;br /&gt;
|owner=[mailto:kwright@mozilla.com Kris Wright]&lt;br /&gt;
|peers=[mailto:glandium@mozilla.com Mike Hommey], [mailto:kwright@mozilla.com Kris Wright]&lt;br /&gt;
|ownersemeritus=Nicholas Nethercote&lt;br /&gt;
|peersemeritus=Felipe Gomes, Eric Rahm&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libpref/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Preferences: Backend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Private Browsing&lt;br /&gt;
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.&lt;br /&gt;
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.net Josh Matthews]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. &lt;br /&gt;
|url=https://wiki.mozilla.org/Private_Browsing&lt;br /&gt;
|components=Firefox::Private Browsing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Privilege Manager&lt;br /&gt;
|description=&amp;quot;caps&amp;quot;&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:dveditz@mozilla.com Dan Veditz]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=caps/&lt;br /&gt;
|url=http://www.mozilla.org/projects/security/components/index.html&lt;br /&gt;
|components=Core::Security: CAPS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Push Notifications&lt;br /&gt;
|description=Push is a way for application developers to send messages to their web applications.&lt;br /&gt;
|owners=[mailto:lina@mozilla.com Lina Cambridge]&lt;br /&gt;
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:mt@lowentropy.net Martin Thomson], [mailto:ddamjanovic@mozilla.com Dragana Damjanovic]&lt;br /&gt;
|peersemeritus=[mailto:nsm.nikhil@gmail.com Nikhil Marathe]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/push&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM: Push Notifications&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=security&lt;br /&gt;
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)&lt;br /&gt;
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:mt@lowentropy.net Martin Thomson]&lt;br /&gt;
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang], [mailto:ttaubert@mozilla.com Tim Taubert]&lt;br /&gt;
|peers=[mailto:kaie@kuix.de Kai Engert], [mailto:ryan.sleevi@gmail.com Ryan Sleevi], [mailto:ekr@rtfm.com Eric Rescorla], [mailto:franziskuskiefer@gmail.com Franziskus Kiefer], [mailto:dueno@redhat.com Daiki Ueno]&lt;br /&gt;
|peersemeritus=[mailto:emaldona@redhat.com Elio Maldonado]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/&lt;br /&gt;
|url=http://mozilla.org/projects/security/pki/&lt;br /&gt;
|components=NSS, JSS, Core::Security, Core::Security: S/MIME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security - Mozilla PSM Glue&lt;br /&gt;
|description=Personal Security Manager&lt;br /&gt;
|owner=[mailto:dkeeler@mozilla.com Dana Keeler]&lt;br /&gt;
|ownersemeritus=[mailto:kaie@kuix.de Kai Engert (2001-2012)]&lt;br /&gt;
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka], [mailto:jc@mozilla.com J.C. Jones], [mailto:fkiefer@mozilla.com Franziskus Kiefer]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=security/manager/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Security: PSM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Static analysis &amp;amp; rewriting for C++&lt;br /&gt;
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.&lt;br /&gt;
|owner=[mailto:andi@mozilla.com Andi-Bogdan Postelnicu]&lt;br /&gt;
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:sfink@mozilla.com Steve Fink], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peersemeritus=[mailto:birunthan@mohanathas.com Birunthan Mohanathas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Rewriting &amp;amp; Analysis&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=storage&lt;br /&gt;
|description=Storage APIs with a SQLite backend&lt;br /&gt;
|owner=[mailto:mak77@bonardo.net Marco Bonardo]&lt;br /&gt;
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=db/sqlite3/, storage/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/Storage&lt;br /&gt;
|components=Toolkit::Storage, Core::SQL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=String&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=string/, xpcom/string/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide&lt;br /&gt;
|components=Core::String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Style System&lt;br /&gt;
|description=CSS style sheet handling; style data computation&lt;br /&gt;
|owner=[mailto:emilio@crisal.io Emilio Cobos Álvarez]&lt;br /&gt;
|ownersemeritus=[mailto:dbaron@dbaron.org David Baron], [mailto:cam@mcc.id.au Cameron McCormack]&lt;br /&gt;
|peers=[mailto:bobbyholley@gmail.com Bobby Holley], [mailto:xidorn+moz@upsuper.org Xidorn Quan]&lt;br /&gt;
|peersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=layout/style/, servo/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System&lt;br /&gt;
|components=Core::CSS Parsing and Computation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=SVG&lt;br /&gt;
|description=Scalable Vector Graphics&lt;br /&gt;
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]&lt;br /&gt;
|group=dev-tech-svg&lt;br /&gt;
|source_dirs=dom/svg/, layout/svg/, dom/smil/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Web/SVG&lt;br /&gt;
|components=Core::SVG&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=UA String&lt;br /&gt;
|description=User Agent String&lt;br /&gt;
|owner=[mailto:tantek@mozilla.com Tantek Çelik]&lt;br /&gt;
|peers=[mailto:kdubost@mozilla.com Karl Dubost], [mailto:cpeterson@mozilla.com Chris Peterson], [mailto:hsivonen@mozilla.com Henri Sivonen] &lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=netwerk/protocol/http/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox&lt;br /&gt;
|components=Core::Networking: HTTP&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=View System&lt;br /&gt;
|description=The View Manager is responsible for handling &amp;quot;heavyweight&amp;quot; rendering (some clipping, compositing) and event handling tasks.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=view/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Audio&lt;br /&gt;
|description=Support for the W3C Web Audio API specification.&lt;br /&gt;
|owner=[mailto:padenot@mozilla.com Paul Adenot]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/media/webaudio&lt;br /&gt;
|url=https://wiki.mozilla.org/Web_Audio_API&lt;br /&gt;
|components=Core::Web Audio&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Painting&lt;br /&gt;
|description=painting, display lists, and layer construction&lt;br /&gt;
|owner=[mailto:matt.woodrow@gmail.com Matt Woodrow]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dbaron@dbaron.org David Baron],   [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:mstange@themasta.com Markus Stange], [mailto:mmynttinen@mozilla.com Miko Mynttinen], [mailto:jnicol@mozilla.com Jamie Nicol]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs= layout/painting, the display list and layer related methods on nsIFrame and its subclasses&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout: Web Painting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC&lt;br /&gt;
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=netwerk/sctp (also see submodules &amp;quot;WebRTC Media&amp;quot; and &amp;quot;WebRTC Signaling&amp;quot;)&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC, Core::WebRTC Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebVR&lt;br /&gt;
|description=Gecko&#039;s implementation of WebVR (Virtual Reality) functionality, including API, devices, graphics and integration&lt;br /&gt;
|owner=[mailto:kgilbert@mozilla.com Kearwood (Kip) Gilbert]&lt;br /&gt;
|peers=[mailto:dmu@mozilla.com Daosheng Mu], [mailto:igorostizaga@mozilla.com Imanol Fernández]&lt;br /&gt;
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/vr, gfx/vr&lt;br /&gt;
|url=https://mozvr.com/&lt;br /&gt;
|components=Core::WebVR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget&lt;br /&gt;
|description=Top level Widget&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|ownersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], &lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/, widget/xpwidgets/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Android&lt;br /&gt;
|description=Android widget support&lt;br /&gt;
|owner=[mailto:jwillcox@mozilla.com James Willcox]&lt;br /&gt;
|peers=&lt;br /&gt;
|ownersemeritus=[mailto:blassey.bugs@lassey.us Brad Lassey]&lt;br /&gt;
|group=dev-platforms-mobile&lt;br /&gt;
|source_dirs=widget/android/, embedding/android&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Android&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - GTK&lt;br /&gt;
|description=GTK widget support&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:stransky@redhat.com Martin Stránský]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/&lt;br /&gt;
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/&lt;br /&gt;
|components=Core::Widget: Gtk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Headless&lt;br /&gt;
|description=Headless widget support&lt;br /&gt;
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]&lt;br /&gt;
|peers=&lt;br /&gt;
|ownersemeritus=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/headless/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Headless&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - macOS&lt;br /&gt;
|description= macOS widget support&lt;br /&gt;
|owner=[mailto:spohl@mozilla.com Stephen A Pohl]&lt;br /&gt;
|peers=[mailto:mstange@themasta.com Markus Stange], [mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:b56girard@gmail.com Benoit Girard], [mailto:smichaud@pobox.com Steven Michaud]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/cocoa/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Cocoa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Windows&lt;br /&gt;
|description=Windows widget support&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:cmartin@mozilla.com Chris Martin], [mailto:tkikuchi@mozilla.com Toshihito Kikuchi], [mailto:mhowell@mozilla.com Molly Howell], [mailto:aklotz@mozilla.com Aaron Klotz], [mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peersemeritus=[mailto:robert.strong.bugs@gmail.com Rob Strong], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:doug.turner@gmail.com Doug Turner], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref], [mailto:robarnold@cmu.edu Rob Arnold]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/windows/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Win32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XML&lt;br /&gt;
|description=XML in Mozilla, including XML, XHTML, Namespaces in XML, Associating Style Sheets with XML Documents, XML Linking and XML Extras. XML-related things that are not covered by more specific projects.&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-tech-xml&lt;br /&gt;
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/xml/&lt;br /&gt;
|components=Core::XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPApps&lt;br /&gt;
|description=Cross-Platform Applications, mostly Navigator front end and application shell.&lt;br /&gt;
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-apps-seamonkey&lt;br /&gt;
|source_dirs=xpfe/&lt;br /&gt;
|url=http://www.mozilla.org/xpapps/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCOM&lt;br /&gt;
|description=The cross-platform object model and core data structures.&lt;br /&gt;
|owner=[mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peers=[mailto:kmaglione@mozilla.com Kris Maglione], [mailto:sgiesecke@mozilla.com Simon Giesecke]&lt;br /&gt;
|ownersemeritus=Benjamin Smedberg&lt;br /&gt;
|peersemeritus=[https://mozillians.org/en-US/u/dougt/ Doug Turner], [mailto:erahm@mozilla.com Eric Rahm], &lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=startupcache/, xpcom/%, xpcom/base/, xpcom/build/, xpcom/components/, xpcom/ds/, xpcom/glue/, xpcom/proxy/, xpcom/sample/, xpcom/stub/, xpcom/tests/, xpcom/threads/, xpcom/tools/, xpcom/windbgdlg/&lt;br /&gt;
|url=http://developer.mozilla.org/en/XPCOM&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPConnect&lt;br /&gt;
|description=Deep Magic&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:kmaglione@mozilla.com Kris Maglione], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peersemeritus=[mailto:gal@uci.edu Andreas Gal], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=js/xpconnect/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::XPConnect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPIDL&lt;br /&gt;
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.&lt;br /&gt;
|owner=[mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peers=[mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|ownersemeritus=[mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=xpcom/typelib/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xpidl&lt;br /&gt;
http://www.mozilla.org/scriptable&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XSLT Processor&lt;br /&gt;
|description=XSLT transformations processor&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:axel@pike.org Axel Hecht], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-tech-xslt&lt;br /&gt;
|source_dirs=dom/xslt/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html&lt;br /&gt;
|components=Core::XSLT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Windows &lt;br /&gt;
|description=Sandboxing for the Windows platform &lt;br /&gt;
|owner=[mailto:bobowencode@gmail.com Bob Owen] (:bobowen)&lt;br /&gt;
|peers=[mailto:aklotz@mozilla.com Aaron Klotz] (:aklotz), [mailto:davidp99@gmail.com David Parks] (:handyman), [mailto:jimm@mozilla.com Jim Mathies] (:jimm), [mailto:tkikuchi@mozilla.com Toshihito Kikuchi] (:toshi)&lt;br /&gt;
|ownersemeritus=[https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes]&lt;br /&gt;
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/win &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - OSX &lt;br /&gt;
|description=Sandboxing for the OSX platform &lt;br /&gt;
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox/mac &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Linux&lt;br /&gt;
|description=Sandboxing for the Linux platform&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|peers=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/linux&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Crash reporting&lt;br /&gt;
|description=Infrastructure and tools used to generate, submit and process crash reports. This includes the in-tree google-breakpad fork, the crash report generation machinery as well as the host tools used to dump symbols, analyse minidumps and generate stack traces.&lt;br /&gt;
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto] (:gsvelto)&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=toolkit/crashreporter, toolkit/components/crashes, tools/crashreporter, ipc/glue/CrashReporter*, mobile/android/geckoview/src/main/java/org/mozilla/geckoview/CrashReporter.java&lt;br /&gt;
|url=https://firefox-source-docs.mozilla.org/toolkit/crashreporter/crashreporter/index.html&lt;br /&gt;
|components=Toolkit::Crash Reporting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Submodules===&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Fennec&lt;br /&gt;
|description=Submodule of the build config covering Fennec&#039;s build system in mobile/android.&lt;br /&gt;
|owner=[mailto:nalexander@mozilla.com Nicholas Alexander]&lt;br /&gt;
|peers=Same as Build Config&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Taskgraph&lt;br /&gt;
|description=Support for task-graph generation in decision, action, and cron tasks, including configuration of all tasks including those for CI, nightlies, and releases; as well as Docker and VM images used to execute those tasks.&lt;br /&gt;
|owner=[mailto:mozilla@hocat.ca Tom Prince]&lt;br /&gt;
|peers=[mailto:ahal@mozilla.com Andrew Halberstadt], [mailto:aki@mozilla.com Aki Sasaki], [mailto:bstack@mozilla.com Brian Stack], [mailto:mh@glandium.org Mike Hommey], [mailto:gps@mozilla.com Gregory Szorc], [mailto:jmaher@mozilla.com Joel Maher], [mailto:callek@mozilla.com Justin Wood], [mailto:dustin@mozilla.com Dustin Mitchell]&lt;br /&gt;
|components=Firefox Build System::Task Configuration&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Media&lt;br /&gt;
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:jib@mozilla.com Jan-Ivar Bruaroey], [mailto:dminor@mozilla.com Dan Minor], [mailto:apehrson@mozilla.com Andreas Pehrson], &lt;br /&gt;
|peersemeritus=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc, /dom/media/webrtc, /dom/media/systemservices&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Audio/Video)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Signaling&lt;br /&gt;
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling&lt;br /&gt;
|owner=[mailto:bcampen@mozilla.com Byron Campen]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:abr@mozilla.com Adam Roach], [mailto:rjesup@mozilla.com Randell Jesup], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc/signaling/&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Signaling)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unassigned Bugzilla Components===&lt;br /&gt;
&lt;br /&gt;
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Core::Find Backend&lt;br /&gt;
Core::General&lt;br /&gt;
Core::History: Global&lt;br /&gt;
Core::Image Blocking&lt;br /&gt;
Core::Localization&lt;br /&gt;
Core::Networking: Domain Lists&lt;br /&gt;
Core::Selection&lt;br /&gt;
Core::Serializers&lt;br /&gt;
Core::Spelling checker&lt;br /&gt;
Core::X-remote&lt;br /&gt;
Core::XUL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1228408</id>
		<title>Modules/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1228408"/>
		<updated>2020-06-23T18:13:46Z</updated>

		<summary type="html">&lt;p&gt;Jorend: Remove two JS peers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Only module owners may edit this page.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
They may:&lt;br /&gt;
&lt;br /&gt;
* update any information about their module except the name of the owner&lt;br /&gt;
* add or remove sub-modules&lt;br /&gt;
* change the owner of a sub-module &lt;br /&gt;
* add emeritus owners or peers&lt;br /&gt;
&lt;br /&gt;
Other changes, including changes of module owner or addition/removal of modules, must be agreed with the Module Ownership Module group, probably via a discussion in [https://www.mozilla.org/about/forums/#governance mozilla.governance].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Accessibility&lt;br /&gt;
|description=Support for platform accessibility APIs. Accessibility APIs are used by 3rd party software like screen readers, screen magnifiers, and voice dictation software, which need information about document content and UI controls, as well as important events like changes of focus.&lt;br /&gt;
|owner=[mailto:jteh@mozilla.com Jamie Teh]&lt;br /&gt;
|peers=[mailto:eitan@monotonous.org Eitan Isaacson], [mailto:jteh@mozilla.com James Teh],  [mailto:mzehe@mozilla.com Marco Zehe], [mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal], [mailto:surkov.alexander@gmail.com Alexander Surkov]&lt;br /&gt;
|peersemeritus=[mailto:dbolter@mozilla.com David Bolter], [mailto:tbsaunde+mozbugs@tbsaunde.org Trevor Saunders], [mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Animation&lt;br /&gt;
|description=Declarative animations: CSS animations, CSS transitions, Web Animations API, and off-main thread animations.&lt;br /&gt;
|owner=[mailto:bbirtles@mozilla.com Brian Birtles] (:birtles)&lt;br /&gt;
|peers=[mailto:hiro@mozilla.com Hiroyuki Ikezoe] (:hiro), [mailto:mwoodrow@mozilla.com Matt Woodrow] (:mattwoodrow)&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=dom/animation; and animation-related and interpolation-related code in layout/style, gfx/layers, servo/components/style and servo/ports/gecko&lt;br /&gt;
|components=Core::DOM::Animation, Core::CSS Transitions and Animations&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Anti-Tracking&lt;br /&gt;
|description=Tracking detection and content-blocking.&lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:dlee@mozilla.com Dimi Lee], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:ewright@mozilla.com Erica Wright], [mailto:xeonchen@gmail.com Gary Chen], [mailto:jhofmann@mozilla.com Johann Hofmann], [mailto:tihuang@mozilla.com Tim Huang]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=toolkit/components/antitracking/, several files under browser/ and netwerk/url-classifier/&lt;br /&gt;
|components=Core::Privacy: Anti-Tracking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Browser WebAPI&lt;br /&gt;
|description=Web API for rendering apps, browser windows and widgets.&lt;br /&gt;
|owner=[mailto:Olli.Pettay@helsinki.fi Olli Pettay]&lt;br /&gt;
|peers=[mailto:fabrice@mozilla.com Fabrice Desré]&lt;br /&gt;
|ownersemeritus=[mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/browser-element/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build and Release Tools&lt;br /&gt;
|description=Tools related to build and release automation and configuration of release builds.&lt;br /&gt;
|owner=[mailto:nthomas@mozilla.com Nick Thomas]&lt;br /&gt;
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]&lt;br /&gt;
|group=release-engineering&lt;br /&gt;
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/&lt;br /&gt;
|url=https://wiki.mozilla.org/ReleaseEngineering&lt;br /&gt;
|components=Release Engineering::*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config&lt;br /&gt;
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.&lt;br /&gt;
|owner=[mailto:mh@glandium.org Mike Hommey] (:glandium)&lt;br /&gt;
|peers=[mailto:mshal@mozilla.com Mike Shal] (:mshal), [mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj), [mailto:dmajor@mozilla.com David Major] (:dmajor), [mailto:rstewart@mozilla.com Ricky Stewart] (:ricky)&lt;br /&gt;
|ownersemeritus=Chris Manchester (2019-2020), Gregory Szorc (2013-2019), Ted Mielczarek (2008-[https://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/ 2013]), Benjamin Smedberg (???-[http://benjamin.smedbergs.us/blog/2008-04-30/more-changing-of-the-guard-ted-mielczarek/ 2008]), &lt;br /&gt;
|peersemeritus=Ted Mielczarek, Ralph Giles, Gregory Szorc, Chris Manchester&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=build/, config/, python/mozbuild, tools/cross-commit, tools/cvs2hg-import.py, tools/cvsmgmt/, tools/elf-dynstr-gc/, tools/trees.pl, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=http://www.mozilla.org/build/&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Code Analysis and Debugging Tools&lt;br /&gt;
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-performance&lt;br /&gt;
|source_dirs=tools/codesighs/, tools/debug/, tools/dreftool/, tools/dumpdeps/, tools/jprof/, tools/leak-gauge/, tools/leaky/, tools/memory/, tools/module-deps/, tools/performance/, tools/post_compile/, tools/preloader/, tools/rb/, tools/reorder/, tools/trace-malloc/, tools/uuiddeps/, &lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content Security&lt;br /&gt;
|description=Native content-based security features enforced in the ContentSecurityManager, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Referrer Policy, Subresource Integrity (SRI), Cross-Origin Resource Sharing (CORS) and top-level data: URI blocking.&lt;br /&gt;
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peers=[mailto:tvyas@mozilla.com Tanvi Vyas], [mailto:dveditz@mozilla.com Dan Veditz], [mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:jkt@mozilla.com Jonathan Kingston], [mailto:tnguyen@mozilla.com Thomas Nguyen]&lt;br /&gt;
|peersemeritus=[mailto:mozilla@sidstamm.com Sid Stamm], [mailto:jonas@sicking.cc Jonas Sicking], François Marier&lt;br /&gt;
|group=dev-security&lt;br /&gt;
|source_dirs=dom/security&lt;br /&gt;
|components=Core::DOM: Security&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cookies&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:amarchesini@mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:honzab.moz@firemni.cz Honza Bambas] &lt;br /&gt;
|ownersemeritus=Monica Chew&lt;br /&gt;
|peersemeritus=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=netwerk/cookie/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Networking: Cookies&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Permissions&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:honzab.moz@firemni.cz Honza Bambas]&lt;br /&gt;
|ownersemeritus=Monica Chew&lt;br /&gt;
|peersemeritus=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=extensions/permissions/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core :: Permission Manager&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cycle Collector&lt;br /&gt;
|description=Code to break and collect objects within reference cycles&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]&lt;br /&gt;
|peers=Peter Van der Beken, Olli Pettay, David Baron&lt;br /&gt;
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=C++/Rust usage, tools, and style&lt;br /&gt;
|description=Aspects of C++ use such as language feature usage, standard library versions/usage, compiler/toolchain versions, formatting and naming style, and aspects of Rust use as needs arise&lt;br /&gt;
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:bballo@mozilla.com Botond Ballo], [mailto:glandium@mozilla.com Mike Hommey], [mailto:jwalden@mozilla.com Jeff Walden], [mailto:sgiesecke@mozilla.com Simon Giesecke]&lt;br /&gt;
|source_dirs=non-third-party C++ and Rust code in the tree&lt;br /&gt;
|components=Various components&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=docshell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peers=[mailto:peterv@propagandism.org Peter Van der Beken], [mailto:afarre@mozilla.com Andreas Farre]&lt;br /&gt;
|ownersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:justin.lebar@gmail.com Justin Lebar], [mailto:sawang@mozilla.com Samael Wang], [mailto:kyle@nonpolynomial.com Kyle Machulis]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=docshell/, uriloader/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Document Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Document Object Model&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:hsivonen@iki.fi Henri Sivonen], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:baku@mozilla.com Andrea Marchesini],&lt;br /&gt;
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:nika@thelayzells.com Nika Layzell], [mailto:afarre@mozilla.com Andreas Farre], [mailto:emilio@crisal.io Emilio Cobos]&lt;br /&gt;
|ownersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|peersemeritus=[mailto:justin.lebar@gmail.com Justin Lebar], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:bent.mozilla@gmail.com Ben Turner], [mailto:mounir@lamouri.fr Mounir Lamouri], [mailto:me@kylehuey.com Kyle Huey], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:ben@wanderview.com Ben Kelly], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:kyle@nonpolynomial.com Kyle Machulis], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/*, except directories covered by other modules&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core &amp;amp; HTML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=DOM File&lt;br /&gt;
|description=DOM Blob, File and FileSystem APIs &lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:olli@pettay.fi Olli Pettay]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/file, dom/filesystem&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: File&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Event Handling&lt;br /&gt;
|description=DOM Events and Event Handling &lt;br /&gt;
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:echen@mozilla.com Edgar Chen]&lt;br /&gt;
|peersemeritus=[mailto:sshih@mozilla.com Stone Shih]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/events and event handling related code elsewhere &lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: Events, Core::DOM: UI Events &amp;amp; Focus Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Workers&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:asuth@mozilla.com Andrew Sutherland], [mailto:ytausky@mozilla.com Yaron Tausky]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/workers/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_web_workers&lt;br /&gt;
|components=Core::DOM: Workers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IndexedDB&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|peers=[mailto:btseng@mozilla.com Bevis Tseng], [mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/indexedDB/&lt;br /&gt;
|url=https://developer.mozilla.org/en/IndexedDB&lt;br /&gt;
|components=Core::DOM: IndexedDB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Editor&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=editor/&lt;br /&gt;
|url=http://www.mozilla.org/editor/&lt;br /&gt;
|components=Core::Editor&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Gecko Profiler&lt;br /&gt;
|description=Gecko&#039;s built-in profiler&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:nnethercote@mozilla.com Nicholas Nethercote], [mailto:gsquelart@mozilla.com Gerald Squelart], [mailto:gtatum@mozilla.com Greg Tatum], [mailto:canaltinova@mozilla.com Nazim Can Altinova], [mailto:jseward@mozilla.com Julian Seward] (LUL), [mailto:kvijayan@mozilla.com Kannan Vijayan] (JS integration), [mailto:brennie@mozilla.com Barret Rennie] (Screenshots).&lt;br /&gt;
|ownersemeritus=[mailto:b56girard@gmail.com Benoit Girard]&lt;br /&gt;
|peersemeritus=[mailto:shu@mozilla.com Shu-yu Guo] (JS integration), [mailto:tlee@mozilla.com Thinker Lee] (TaskTracer), [mailto:cyu@mozilla.com Cervantes Yu] (TaskTracer)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=tools/profiler/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler&lt;br /&gt;
|components=Core::Gecko Profiler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Global Key Bindings&lt;br /&gt;
|description=Global hot keys in Mozilla for the browser, editor, mail-news and widgets. Does not include underlined menu accelerators and the like, as those are part of i18n.&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=dom/events (and platform specific directories under it)&lt;br /&gt;
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html&lt;br /&gt;
|components=Core::Keyboard: Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Graphics&lt;br /&gt;
|description=Mozilla graphics API&lt;br /&gt;
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bas.schouten@live.nl Bas Schouten](Layers, Windows), [mailto:jgilbert@mozilla.com Jeff Gilbert](WebGL, ANGLE), [mailto:mwoodrow@mozilla.com Matt Woodrow](Layers API), [mailto:jfkthame@googlemail.com Jonathan Kew](text/fonts), [mailto:nsilva@mozilla.com  Nicolas Silva](MozSurface), [mailto:ncameron@mozilla.com Nick Cameron], [mailto:sikeda@mozilla.com Sotaro Ikeda](B2G), [mailto:jnicol@mozilla.com Jamie Nicol](Android), [mailto:snorp@mozilla.com James Willcox](Android), [mailto:mstange@themasta.com Markus Stange](OS X), [mailto:lsalzman@mozilla.com Lee Salzman](Skia, Canvas2D), [mailto:rhunt@mozilla.com Ryan Hunt](OMTP), [mailto:gwatson@mozilla.com Glenn Watson ](WebRender), [mailto:dmalyshau@mozilla.com Dzmitry Malyshau](WebRender)&lt;br /&gt;
|peersemeritus=[mailto:bgirard@mozilla.com Benoit Girard](Compositor, Performance), [mailto:ajuma.bugzilla@alijuma.com Ali Juma], [mailto:george@mozilla.com George Wright](Canvas2D), [mailto:mchang@mozilla.com Mason Chang], [mailto:dvander@mozilla.com David Anderson], [mailto:clord@mozilla.com Christopher Lord], [mailto:jdaggett@mozilla.com John Daggett](text/fonts), [mailto:bjacob@mozilla.com Benoit Jacob](gfx/gl), [mailto:jdrew@mozilla.com Joe Drew], [mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/, dom/canvas/&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch&lt;br /&gt;
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::Graphics: WebRender, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebGPU (Graphics submodule)&lt;br /&gt;
|description=WebGPU implementation&lt;br /&gt;
|owner=[mailto:dmalyshau@mozilla.com Dzmitry Malyshau]&lt;br /&gt;
|peers=[mailto:josh@joshgroves.com Joshua Groves], [mailto:jgilbert@mozilla.com Jeff Gilbert],&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/webgpu&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/WebGPU&lt;br /&gt;
|components=Core::Graphics::WebGPU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=APZ (Graphics submodule)&lt;br /&gt;
|description=Asynchronous panning and zooming&lt;br /&gt;
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:tnikkel@mozilla.com Timothy Nikkel], [mailto:rhunt@mozilla.com Ryan Hunt], [mailto:mstange@mozilla.com Markus Stange]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/layers/apz&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/APZ&lt;br /&gt;
|components=Core::Panning and Zooming&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Moz2D (Graphics submodule)&lt;br /&gt;
|description=Platform independent 2D graphics API&lt;br /&gt;
|owner=[mailto:bschouten@mozilla.com Bas Schouten]&lt;br /&gt;
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/2d&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D&lt;br /&gt;
|components=Core::Graphics&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Legacy HTML Parser&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:rbs@maths.uq.edu.au rbs@maths.uq.edu.au]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|source_dirs=parser/htmlparser&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/doc/parser.html&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HAL&lt;br /&gt;
|description=Hardware Abstraction Layer&lt;br /&gt;
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=hal/&lt;br /&gt;
|components=Core::Hardware Abstraction Layer (HAL)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HTML Parser&lt;br /&gt;
|description=The HTML Parser transforms HTML source code into a DOM. It conforms to the HTML specification, and is mostly translated automatically from Java to C++.&lt;br /&gt;
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|peers=[mailto:wchen@mozilla.com William Chen]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=parser/html&lt;br /&gt;
|url=http://about.validator.nu/&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=I18N Library&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:hsivonen@hsivonen.fi Henri Sivonen (encoding)], [mailto:jfkthame@gmail.com Jonathan Kew (except to encoding)]&lt;br /&gt;
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura], [mailto:gandalf@aviary.pl Zibi Braniecki], [mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|group=dev-i18n&lt;br /&gt;
|source_dirs=intl/&lt;br /&gt;
|url=http://mozilla.org/projects/intl/index.html&lt;br /&gt;
|components=Core::Internationalization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=ImageLib&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:tnikkel@gmail.com Timothy Nikkel]&lt;br /&gt;
|peers=[mailto:aosmond@mozilla.com Andrew Osmond], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar]&lt;br /&gt;
|peersemeritus=[mailto:seth.bugzilla@blackhail.net Seth Fowler], [mailto:netzen@gmail.com Brian Bondy], [mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::ImageLib&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IPC&lt;br /&gt;
|description=Native message-passing between threads and processes&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|ownersemeritus=Chris Jones, Bill McCloskey&lt;br /&gt;
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:jmathies@mozilla.com Jim Mathies], [mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|peersemeritus=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bent.mozilla@gmail.com Ben Turner], David Anderson, Kan-Ru Chen, Bevis Tseng, Ben Kelly&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript&lt;br /&gt;
|description=JavaScript engine (SpiderMonkey)&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:jdemooij@mozilla.com Jan de Mooij], André Bargull, [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:jcoppeard@mozilla.com Jon Coppeard], [mailto:sphink@gmail.com Steve Fink], [mailto:arai.unmht@gmail.com Tooru Fujisawa], [mailto:evilpies@gmail.com Tom Schuster], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:jwalden@mit.edu Jeff Walden], [mailto:ystartsev@mozilla.com Yulia Startsev], [mailto:mgaudet@mozilla.com Matthew Gaudet], [mailto:iireland@mozilla.com Iain Ireland], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:ccullen@mozilla.com Caroline Cullen], [mailto:nfitzgerald@mozilla.com Nick Fitzgerald], [mailto:nnethercote@mozilla.com Nick Nethercote], [mailto:luke@mozilla.com Luke Wagner], [mailto:sunfish@mozilla.com Dan Gohman], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:nmatsakis@mozilla.com Niko Matsakis], [mailto:ejpbruel@mozilla.com Eddy Bruel], [mailto:danderson@mozilla.com David Anderson], [mailto:igor@mir2.org Igor Bukanov], Andreas Gal, [mailto:efaust@mozilla.com Eric Faust], [mailto:khyperia@mozilla.com Ashley Hauck], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:till@tillschneidereit.net Till Schneidereit]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey,&lt;br /&gt;
http://developer.mozilla.org/en/docs/About_JavaScript&lt;br /&gt;
|components=Core::JavaScript Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript JIT&lt;br /&gt;
|description=JavaScript engine&#039;s JIT compilers (IonMonkey, Baseline)&lt;br /&gt;
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]&lt;br /&gt;
|peers=André Bargull, [mailto:bbouvier@mozilla.com Benjamin Bouvier], [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:ccullen@mozilla.com Caroline Cullen], [mailto:mgaudet@mozilla.com Matthew Gaudet], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:iireland@mozilla.com Iain Ireland], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:evilpies@gmail.com  Tom Schuster], [mailto:sstangl@mozilla.com Sean Stangl], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:luke@mozilla.com Luke Wagner]&lt;br /&gt;
|peersemeritus=[mailto:danderson@mozilla.com David Anderson], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:hv1989@gmail.com Hannes Verschore]&lt;br /&gt;
|group=dev-tech-js-engine-internals&lt;br /&gt;
|source_dirs=js/src/jit&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey&lt;br /&gt;
|components=Core::JavaScript Engine: JIT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=jsat&lt;br /&gt;
|description=Javascript screen reader that is used in Android and B2G&lt;br /&gt;
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]&lt;br /&gt;
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/jsat/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-ctypes&lt;br /&gt;
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src/ctypes/&lt;br /&gt;
|url=https://wiki.mozilla.org/JSctypes&lt;br /&gt;
|components=Core::js-ctypes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-tests&lt;br /&gt;
|description=JavaScript test suite&lt;br /&gt;
|owner=[mailto:bclary@bclary.com Bob Clary]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tests/&lt;br /&gt;
|url=http://www.mozilla.org/js/tests/library.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Layout Engine&lt;br /&gt;
|description=rendering tree construction, layout (reflow), etc.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:jfkthame@gmail.com Jonathan Kew], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:matt.woodrow@gmail.com Matt Woodrow], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:emilio@crisal.io Emilio Cobos Álvarez]&lt;br /&gt;
|peersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/printing/, layout/tables/, layout/tools/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Layout&lt;br /&gt;
|components=Core::Layout, Core::Layout: Block and Inline, Core::Layout: Columns, Core::Layout: Flexbox, Core::Layout: Floats, Core::Layout: Form Controls, Core::Layout: Generated Content, Lists, and Counters, Core::Layout: Grid, Core::Layout: Images, Video, and HTML Frames, Core::Layout: Positioned, Core::Layout: Ruby, Core::Layout: Scrolling and Overflow, Core::Layout: Tables, Core::Layout: Text and Fonts, Core::Print Preview, Core::Printing: Output&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=libjar&lt;br /&gt;
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|ownersemeritus=Taras Glek, Michael Wu&lt;br /&gt;
|peers=[mailto:mnovotny@mozilla.com Michal Novotny], [mailto:vgosu@mozilla.com Valentin Gosu]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libjar&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MathML&lt;br /&gt;
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-tech-mathml&lt;br /&gt;
|source_dirs=layout/mathml/&lt;br /&gt;
|url=http://www.mozilla.org/projects/mathml/&lt;br /&gt;
|components=Core::MathML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Playback&lt;br /&gt;
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).&lt;br /&gt;
|owner=[mailto:jyavenard@mozilla.com Jean-Yves Avenard]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:cpearce@mozilla.com Chris Pearce]&lt;br /&gt;
|peers=[mailto:kinetik@flim.org Matthew Gregan], [mailto:bvandyk@mozilla.com Bryce Van Dyk], [mailto:jolin@mozilla.com John Lin], [mailto:alwu@mozilla.com Alastor Wu], [mailto:jwwang@mozilla.com JW Wang]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=dom/media, media/gmp-clearkey/, media/libcubeb/, media/libnestegg/, media/libogg/, media/libopus/, media/libstagefright/, media/libtheora/, media/libtremor/, media/libvorbis/, media/libvpx/, media/omx-plugin/, media/rlz/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Audio/Video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Transport&lt;br /&gt;
|description=Pluggable transport for real-time media&lt;br /&gt;
|owner=[mailto:ekr@rtfm.com Eric Rescorla]&lt;br /&gt;
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/mtransport&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::WebRTC::Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Memory Allocator&lt;br /&gt;
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=memory/&lt;br /&gt;
|components=Core::DMD, Core::jemalloc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mfbt&lt;br /&gt;
|description=mfbt is a collection of headers, macros, data structures, methods, and other functionality available for use and reuse throughout all Mozilla code (including SpiderMonkey and Gecko more broadly).&lt;br /&gt;
|owner=[mailto:jwalden@mit.edu Jeff Walden]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mfbt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::MFBT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Mozglue&lt;br /&gt;
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd] (mozglue/linker), [mailto:kgupta@mozilla.com Kartikaya Gupta] (mozglue/android), [mailto:nchen@mozilla.com Jim Chen] (mozglue/android), [mailto:aklotz@mozilla.com Aaron Klotz] (Windows Dll Blocklist/Interceptor)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mozglue/&lt;br /&gt;
|components=Core::mozglue&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozilla-toplevel&lt;br /&gt;
|description=The top level directory for the mozilla tree.&lt;br /&gt;
|owner=[[Modules/Firefox_Technical_Leadership|Firefox Technical Leadership module]]&lt;br /&gt;
|ownersemeritus=[mailto:brendan@mozilla.org Brendan Eich]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=tools/README&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MSCOM&lt;br /&gt;
|description=Integration with Microsoft Distributed COM&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|peers=[mailto:jteh@mozilla.com James Teh], [mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/mscom/%&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC: MSCOM}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Necko&lt;br /&gt;
|description=The Mozilla Networking Library&lt;br /&gt;
|owner=[mailto:dd.mozilla@gmail.com  Dragana Damjanovic]&lt;br /&gt;
|peers= [mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:mnovotny@mozilla.com Michal Novotny], [mailto:valentin.gosu@gmail.com Valentin Gosu], [mailto:kershaw@mozilla.com Kershaw Chang], [mailto:juhsu@mozilla.com Junior Hsu]&lt;br /&gt;
|ownersemeritus=[mailto:mcmanus@ducksong.com Patrick McManus], [mailto:cbiesinger@gmail.com Christian Biesinger] |peersemeritus= Shih-Chiang Chien, [mailto:bzbarsky@mit.edu Boris Zbarsky], Steve Workman, Nick Hurley, [mailto:daniel@haxx.se Daniel Stenberg ], [mailto:jduell.mcbugs@gmail.com Jason Duell]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=netwerk/%, netwerk/base/, netwerk/build/, netwerk/cache/, netwerk/dns/, netwerk/locales/, netwerk/mime/, netwerk/protocol/, netwerk/resources/, netwerk/socket/, netwerk/streamconv/, netwerk/system/, netwerk/test/, netwerk/testserver/&lt;br /&gt;
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko&lt;br /&gt;
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NodeJS usage, tools, and style&lt;br /&gt;
|description=Advises on the use of NodeJS and npm packages at build and runtime. Reviews additions/upgrades/removals of vendored npm packages. Works with appropriate teams to maintain automated license and security audits of npm packages. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored npm packages.&lt;br /&gt;
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]&lt;br /&gt;
|peers=[mailto:mbanner@mozilla.com Mark Banner], [mailto:dcoates@mozilla.com Danny Coates], [mailto:khudson@mozilla.com Kate Hudson], [mailto:jlaster@mozilla.com Jason Laster], [mailto:elee@mozilla.com Ed Lee], [mailto:dtownsend@mozilla.com Dave Townsend]&lt;br /&gt;
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate&lt;br /&gt;
|components=Various components&lt;br /&gt;
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev], #nodejs on slack&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NSPR&lt;br /&gt;
|description=Netscape Portable Runtime&lt;br /&gt;
|owner=[mailto:kaie@kuix.de Kai Engert]&lt;br /&gt;
|peers=[mailto:mh@glandium.org Mike Hommey]&lt;br /&gt;
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|group=dev-tech-nspr&lt;br /&gt;
|source_dirs=nsprpub/&lt;br /&gt;
|url=http://www.mozilla.org/projects/nspr/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/reference/html/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/release-notes/&lt;br /&gt;
|components=NSPR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PDF&lt;br /&gt;
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF&#039; format.&lt;br /&gt;
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]&lt;br /&gt;
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:vnicolas@mozilla.com Vivien Nicolas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/pdf/&lt;br /&gt;
|url=https://github.com/mozilla/pdf.js&lt;br /&gt;
|components=Core::PDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Plugins&lt;br /&gt;
|description= NPAPI Plugin support.&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:davidp99@gmail.com David Parks]&lt;br /&gt;
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:jstenback@gmail.com Johnny Stenback], Benjamin Smedberg&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/plugins/, modules/plugin/&lt;br /&gt;
|url=https://wiki.mozilla.org/Plugins&lt;br /&gt;
|components=Core::Plug-ins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=Preference library&lt;br /&gt;
|owner=[mailto:nnethercote@mozilla.com Nicholas Nethercote]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:glandium@mozilla.com Mike Hommey], [mailto:erahm@mozilla.com Eric Rahm], [mailto:kwright@mozilla.com Kristen Wright]&lt;br /&gt;
|peersemeritus=Felipe Gomes&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libpref/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Preferences: Backend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Private Browsing&lt;br /&gt;
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.&lt;br /&gt;
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.net Josh Matthews]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. &lt;br /&gt;
|url=https://wiki.mozilla.org/Private_Browsing&lt;br /&gt;
|components=Firefox::Private Browsing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Privilege Manager&lt;br /&gt;
|description=&amp;quot;caps&amp;quot;&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:dveditz@mozilla.com Dan Veditz]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=caps/&lt;br /&gt;
|url=http://www.mozilla.org/projects/security/components/index.html&lt;br /&gt;
|components=Core::Security: CAPS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Push Notifications&lt;br /&gt;
|description=Push is a way for application developers to send messages to their web applications.&lt;br /&gt;
|owners=[mailto:lina@mozilla.com Lina Cambridge]&lt;br /&gt;
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:mt@lowentropy.net Martin Thomson], [mailto:ddamjanovic@mozilla.com Dragana Damjanovic]&lt;br /&gt;
|peersemeritus=[mailto:nsm.nikhil@gmail.com Nikhil Marathe]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/push&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM: Push Notifications&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=security&lt;br /&gt;
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)&lt;br /&gt;
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:mt@lowentropy.net Martin Thomson]&lt;br /&gt;
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang], [mailto:ttaubert@mozilla.com Tim Taubert]&lt;br /&gt;
|peers=[mailto:kaie@kuix.de Kai Engert], [mailto:ryan.sleevi@gmail.com Ryan Sleevi], [mailto:ekr@rtfm.com Eric Rescorla], [mailto:franziskuskiefer@gmail.com Franziskus Kiefer], [mailto:dueno@redhat.com Daiki Ueno]&lt;br /&gt;
|peersemeritus=[mailto:emaldona@redhat.com Elio Maldonado]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/&lt;br /&gt;
|url=http://mozilla.org/projects/security/pki/&lt;br /&gt;
|components=NSS, JSS, Core::Security, Core::Security: S/MIME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security - Mozilla PSM Glue&lt;br /&gt;
|description=Personal Security Manager&lt;br /&gt;
|owner=[mailto:dkeeler@mozilla.com Dana Keeler]&lt;br /&gt;
|ownersemeritus=[mailto:kaie@kuix.de Kai Engert (2001-2012)]&lt;br /&gt;
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka], [mailto:jc@mozilla.com J.C. Jones], [mailto:fkiefer@mozilla.com Franziskus Kiefer]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=security/manager/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Security: PSM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Static analysis &amp;amp; rewriting for C++&lt;br /&gt;
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.&lt;br /&gt;
|owner=[mailto:andi@mozilla.com Andi-Bogdan Postelnicu]&lt;br /&gt;
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:sfink@mozilla.com Steve Fink], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peersemeritus=[mailto:birunthan@mohanathas.com Birunthan Mohanathas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Rewriting &amp;amp; Analysis&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=storage&lt;br /&gt;
|description=Storage APIs with a SQLite backend&lt;br /&gt;
|owner=[mailto:mak77@bonardo.net Marco Bonardo]&lt;br /&gt;
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=db/sqlite3/, storage/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/Storage&lt;br /&gt;
|components=Toolkit::Storage, Core::SQL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=String&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=string/, xpcom/string/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide&lt;br /&gt;
|components=Core::String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Style System&lt;br /&gt;
|description=CSS style sheet handling; style data computation&lt;br /&gt;
|owner=[mailto:cam@mcc.id.au Cameron McCormack]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:emilio@crisal.io Emilio Cobos Álvarez], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/style/, servo/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System&lt;br /&gt;
|components=Core::CSS Parsing and Computation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=SVG&lt;br /&gt;
|description=Scalable Vector Graphics&lt;br /&gt;
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]&lt;br /&gt;
|group=dev-tech-svg&lt;br /&gt;
|source_dirs=dom/svg/, layout/svg/, dom/smil/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Web/SVG&lt;br /&gt;
|components=Core::SVG&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=View System&lt;br /&gt;
|description=The View Manager is responsible for handling &amp;quot;heavyweight&amp;quot; rendering (some clipping, compositing) and event handling tasks.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=view/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Audio&lt;br /&gt;
|description=Support for the W3C Web Audio API specification.&lt;br /&gt;
|owner=[mailto:padenot@mozilla.com Paul Adenot]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/media/webaudio&lt;br /&gt;
|url=https://wiki.mozilla.org/Web_Audio_API&lt;br /&gt;
|components=Core::Web Audio&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Painting&lt;br /&gt;
|description=painting, display lists, and layer construction&lt;br /&gt;
|owner=[mailto:matt.woodrow@gmail.com Matt Woodrow]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dbaron@dbaron.org David Baron],   [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:mstange@themasta.com Markus Stange], [mailto:mmynttinen@mozilla.com Miko Mynttinen], [mailto:jnicol@mozilla.com Jamie Nicol]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs= layout/painting, the display list and layer related methods on nsIFrame and its subclasses&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout: Web Painting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC&lt;br /&gt;
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=netwerk/sctp (also see submodules &amp;quot;WebRTC Media&amp;quot; and &amp;quot;WebRTC Signaling&amp;quot;)&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC, Core::WebRTC Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebVR&lt;br /&gt;
|description=Gecko&#039;s implementation of WebVR (Virtual Reality) functionality, including API, devices, graphics and integration&lt;br /&gt;
|owner=[mailto:kgilbert@mozilla.com Kearwood (Kip) Gilbert]&lt;br /&gt;
|peers=[mailto:dmu@mozilla.com Daosheng Mu], [mailto:igorostizaga@mozilla.com Imanol Fernández]&lt;br /&gt;
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/vr, gfx/vr&lt;br /&gt;
|url=https://mozvr.com/&lt;br /&gt;
|components=Core::WebVR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget&lt;br /&gt;
|description=Top level Widget&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|ownersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], &lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/, widget/xpwidgets/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Android&lt;br /&gt;
|description=Android widget support&lt;br /&gt;
|owner=[mailto:jwillcox@mozilla.com James Willcox]&lt;br /&gt;
|peers=&lt;br /&gt;
|ownersemeritus=[mailto:blassey.bugs@lassey.us Brad Lassey]&lt;br /&gt;
|group=dev-platforms-mobile&lt;br /&gt;
|source_dirs=widget/android/, embedding/android&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Android&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - GTK&lt;br /&gt;
|description=GTK widget support&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:stransky@redhat.com Martin Stránský]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/&lt;br /&gt;
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/&lt;br /&gt;
|components=Core::Widget: Gtk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Headless&lt;br /&gt;
|description=Headless widget support&lt;br /&gt;
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]&lt;br /&gt;
|peers=&lt;br /&gt;
|ownersemeritus=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/headless/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Headless&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - macOS&lt;br /&gt;
|description= macOS widget support&lt;br /&gt;
|owner=[mailto:spohl@mozilla.com Stephen A Pohl]&lt;br /&gt;
|peers=[mailto:mstange@themasta.com Markus Stange], [mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:b56girard@gmail.com Benoit Girard], [mailto:smichaud@pobox.com Steven Michaud]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/cocoa/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Cocoa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Windows&lt;br /&gt;
|description=Windows widget support&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:robert.strong.bugs@gmail.com Rob Strong], [mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:doug.turner@gmail.com Doug Turner], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref], [mailto:robarnold@cmu.edu Rob Arnold]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/windows/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Win32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XML&lt;br /&gt;
|description=XML in Mozilla, including XML, XHTML, Namespaces in XML, Associating Style Sheets with XML Documents, XML Linking and XML Extras. XML-related things that are not covered by more specific projects.&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-xml&lt;br /&gt;
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/xml/&lt;br /&gt;
|components=Core::XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPApps&lt;br /&gt;
|description=Cross-Platform Applications, mostly Navigator front end and application shell.&lt;br /&gt;
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-apps-seamonkey&lt;br /&gt;
|source_dirs=xpfe/&lt;br /&gt;
|url=http://www.mozilla.org/xpapps/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCOM&lt;br /&gt;
|description=The cross-platform object model and core data structures.&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]&lt;br /&gt;
|peers=[mailto:erahm@mozilla.com Eric Rahm], [mailto:nika@thelayzells.com Nika Layzell], [mailto:kmaglione@mozilla.com Kris Maglione]&lt;br /&gt;
|ownersemeritus=Benjamin Smedberg&lt;br /&gt;
|peersemeritus=[https://mozillians.org/en-US/u/dougt/ Doug Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=startupcache/, xpcom/%, xpcom/base/, xpcom/build/, xpcom/components/, xpcom/ds/, xpcom/glue/, xpcom/proxy/, xpcom/sample/, xpcom/stub/, xpcom/tests/, xpcom/threads/, xpcom/tools/, xpcom/windbgdlg/&lt;br /&gt;
|url=http://developer.mozilla.org/en/XPCOM&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPConnect&lt;br /&gt;
|description=Deep Magic&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:kmaglione@mozilla.com Kris Maglione], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peersemeritus=[mailto:gal@uci.edu Andreas Gal], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=js/xpconnect/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::XPConnect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPIDL&lt;br /&gt;
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.&lt;br /&gt;
|owner=[mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|ownersemeritus=[mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=xpcom/typelib/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xpidl&lt;br /&gt;
http://www.mozilla.org/scriptable&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XSLT Processor&lt;br /&gt;
|description=XSLT transformations processor&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xslt&lt;br /&gt;
|source_dirs=dom/xslt/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html&lt;br /&gt;
|components=Core::XSLT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Windows &lt;br /&gt;
|description=Sandboxing for the Windows platform &lt;br /&gt;
|owner=[mailto:bobowencode@gmail.com Bob Owen] (:bobowen)&lt;br /&gt;
|peers=[mailto:aklotz@mozilla.com Aaron Klotz] (:aklotz), [mailto:jimm@mozilla.com Jim Mathies] (:jimm), [mailto:davidp99@gmail.com David Parks] (:handyman)&lt;br /&gt;
|ownersemeritus=[https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes]&lt;br /&gt;
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/win &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - OSX &lt;br /&gt;
|description=Sandboxing for the OSX platform &lt;br /&gt;
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox/mac &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Linux&lt;br /&gt;
|description=Sandboxing for the Linux platform&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|peers=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/linux&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Crash reporting&lt;br /&gt;
|description=Infrastructure and tools used to generate, submit and process crash reports. This includes the in-tree google-breakpad fork, the crash report generation machinery as well as the host tools used to dump symbols, analyse minidumps and generate stack traces.&lt;br /&gt;
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto] (:gsvelto)&lt;br /&gt;
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=toolkit/crashreporter, toolkit/components/crashes, tools/crashreporter, ipc/glue/CrashReporter*, mobile/android/geckoview/src/main/java/org/mozilla/geckoview/CrashReporter.java&lt;br /&gt;
|url=https://firefox-source-docs.mozilla.org/toolkit/crashreporter/crashreporter/index.html&lt;br /&gt;
|components=Toolkit::Crash Reporting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Submodules===&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Fennec&lt;br /&gt;
|description=Submodule of the build config covering Fennec&#039;s build system in mobile/android.&lt;br /&gt;
|owner=[mailto:nalexander@mozilla.com Nicholas Alexander]&lt;br /&gt;
|peers=Same as Build Config&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Taskgraph&lt;br /&gt;
|description=Support for task-graph generation in decision, action, and cron tasks, including configuration of all tasks including those for CI, nightlies, and releases; as well as Docker and VM images used to execute those tasks.&lt;br /&gt;
|owner=[mailto:mozilla@hocat.ca Tom Prince]&lt;br /&gt;
|peers=[mailto:ahal@mozilla.com Andrew Halberstadt], [mailto:aki@mozilla.com Aki Sasaki], [mailto:bstack@mozilla.com Brian Stack], [mailto:mh@glandium.org Mike Hommey], [mailto:gps@mozilla.com Gregory Szorc], [mailto:jmaher@mozilla.com Joel Maher], [mailto:callek@mozilla.com Justin Wood], [mailto:dustin@mozilla.com Dustin Mitchell]&lt;br /&gt;
|components=Firefox Build System::Task Configuration&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Media&lt;br /&gt;
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:jib@mozilla.com Jan-Ivar Bruaroey], [mailto:dminor@mozilla.com Dan Minor], [mailto:apehrson@mozilla.com Andreas Pehrson], &lt;br /&gt;
|peersemeritus=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc, /dom/media/webrtc, /dom/media/systemservices&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Audio/Video)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Signaling&lt;br /&gt;
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling&lt;br /&gt;
|owner=[mailto:bcampen@mozilla.com Byron Campen]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:abr@mozilla.com Adam Roach], [mailto:rjesup@mozilla.com Randell Jesup], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc/signaling/&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Signaling)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unassigned Bugzilla Components===&lt;br /&gt;
&lt;br /&gt;
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Core::Find Backend&lt;br /&gt;
Core::General&lt;br /&gt;
Core::History: Global&lt;br /&gt;
Core::Image Blocking&lt;br /&gt;
Core::Localization&lt;br /&gt;
Core::Networking: Domain Lists&lt;br /&gt;
Core::Selection&lt;br /&gt;
Core::Serializers&lt;br /&gt;
Core::Spelling checker&lt;br /&gt;
Core::X-remote&lt;br /&gt;
Core::XUL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1228399</id>
		<title>Modules/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1228399"/>
		<updated>2020-06-23T15:42:30Z</updated>

		<summary type="html">&lt;p&gt;Jorend: Add JS peer: caroline&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Only module owners may edit this page.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
They may:&lt;br /&gt;
&lt;br /&gt;
* update any information about their module except the name of the owner&lt;br /&gt;
* add or remove sub-modules&lt;br /&gt;
* change the owner of a sub-module &lt;br /&gt;
* add emeritus owners or peers&lt;br /&gt;
&lt;br /&gt;
Other changes, including changes of module owner or addition/removal of modules, must be agreed with the Module Ownership Module group, probably via a discussion in [https://www.mozilla.org/about/forums/#governance mozilla.governance].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Accessibility&lt;br /&gt;
|description=Support for platform accessibility APIs. Accessibility APIs are used by 3rd party software like screen readers, screen magnifiers, and voice dictation software, which need information about document content and UI controls, as well as important events like changes of focus.&lt;br /&gt;
|owner=[mailto:jteh@mozilla.com Jamie Teh]&lt;br /&gt;
|peers=[mailto:eitan@monotonous.org Eitan Isaacson], [mailto:jteh@mozilla.com James Teh],  [mailto:mzehe@mozilla.com Marco Zehe], [mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal], [mailto:surkov.alexander@gmail.com Alexander Surkov]&lt;br /&gt;
|peersemeritus=[mailto:dbolter@mozilla.com David Bolter], [mailto:tbsaunde+mozbugs@tbsaunde.org Trevor Saunders], [mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Animation&lt;br /&gt;
|description=Declarative animations: CSS animations, CSS transitions, Web Animations API, and off-main thread animations.&lt;br /&gt;
|owner=[mailto:bbirtles@mozilla.com Brian Birtles] (:birtles)&lt;br /&gt;
|peers=[mailto:hiro@mozilla.com Hiroyuki Ikezoe] (:hiro), [mailto:mwoodrow@mozilla.com Matt Woodrow] (:mattwoodrow)&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=dom/animation; and animation-related and interpolation-related code in layout/style, gfx/layers, servo/components/style and servo/ports/gecko&lt;br /&gt;
|components=Core::DOM::Animation, Core::CSS Transitions and Animations&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Anti-Tracking&lt;br /&gt;
|description=Tracking detection and content-blocking.&lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:dlee@mozilla.com Dimi Lee], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:ewright@mozilla.com Erica Wright], [mailto:xeonchen@gmail.com Gary Chen], [mailto:jhofmann@mozilla.com Johann Hofmann], [mailto:tihuang@mozilla.com Tim Huang]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=toolkit/components/antitracking/, several files under browser/ and netwerk/url-classifier/&lt;br /&gt;
|components=Core::Privacy: Anti-Tracking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Browser WebAPI&lt;br /&gt;
|description=Web API for rendering apps, browser windows and widgets.&lt;br /&gt;
|owner=[mailto:Olli.Pettay@helsinki.fi Olli Pettay]&lt;br /&gt;
|peers=[mailto:fabrice@mozilla.com Fabrice Desré]&lt;br /&gt;
|ownersemeritus=[mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/browser-element/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build and Release Tools&lt;br /&gt;
|description=Tools related to build and release automation and configuration of release builds.&lt;br /&gt;
|owner=[mailto:nthomas@mozilla.com Nick Thomas]&lt;br /&gt;
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]&lt;br /&gt;
|group=release-engineering&lt;br /&gt;
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/&lt;br /&gt;
|url=https://wiki.mozilla.org/ReleaseEngineering&lt;br /&gt;
|components=Release Engineering::*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config&lt;br /&gt;
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.&lt;br /&gt;
|owner=[mailto:mh@glandium.org Mike Hommey] (:glandium)&lt;br /&gt;
|peers=[mailto:mshal@mozilla.com Mike Shal] (:mshal), [mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj), [mailto:dmajor@mozilla.com David Major] (:dmajor), [mailto:rstewart@mozilla.com Ricky Stewart] (:ricky)&lt;br /&gt;
|ownersemeritus=Chris Manchester (2019-2020), Gregory Szorc (2013-2019), Ted Mielczarek (2008-[https://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/ 2013]), Benjamin Smedberg (???-[http://benjamin.smedbergs.us/blog/2008-04-30/more-changing-of-the-guard-ted-mielczarek/ 2008]), &lt;br /&gt;
|peersemeritus=Ted Mielczarek, Ralph Giles, Gregory Szorc, Chris Manchester&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=build/, config/, python/mozbuild, tools/cross-commit, tools/cvs2hg-import.py, tools/cvsmgmt/, tools/elf-dynstr-gc/, tools/trees.pl, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=http://www.mozilla.org/build/&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Code Analysis and Debugging Tools&lt;br /&gt;
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-performance&lt;br /&gt;
|source_dirs=tools/codesighs/, tools/debug/, tools/dreftool/, tools/dumpdeps/, tools/jprof/, tools/leak-gauge/, tools/leaky/, tools/memory/, tools/module-deps/, tools/performance/, tools/post_compile/, tools/preloader/, tools/rb/, tools/reorder/, tools/trace-malloc/, tools/uuiddeps/, &lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content Security&lt;br /&gt;
|description=Native content-based security features enforced in the ContentSecurityManager, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Referrer Policy, Subresource Integrity (SRI), Cross-Origin Resource Sharing (CORS) and top-level data: URI blocking.&lt;br /&gt;
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peers=[mailto:tvyas@mozilla.com Tanvi Vyas], [mailto:dveditz@mozilla.com Dan Veditz], [mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:jkt@mozilla.com Jonathan Kingston], [mailto:tnguyen@mozilla.com Thomas Nguyen]&lt;br /&gt;
|peersemeritus=[mailto:mozilla@sidstamm.com Sid Stamm], [mailto:jonas@sicking.cc Jonas Sicking], François Marier&lt;br /&gt;
|group=dev-security&lt;br /&gt;
|source_dirs=dom/security&lt;br /&gt;
|components=Core::DOM: Security&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cookies&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:amarchesini@mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:honzab.moz@firemni.cz Honza Bambas] &lt;br /&gt;
|ownersemeritus=Monica Chew&lt;br /&gt;
|peersemeritus=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=netwerk/cookie/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Networking: Cookies&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Permissions&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:honzab.moz@firemni.cz Honza Bambas]&lt;br /&gt;
|ownersemeritus=Monica Chew&lt;br /&gt;
|peersemeritus=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=extensions/permissions/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core :: Permission Manager&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cycle Collector&lt;br /&gt;
|description=Code to break and collect objects within reference cycles&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]&lt;br /&gt;
|peers=Peter Van der Beken, Olli Pettay, David Baron&lt;br /&gt;
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=C++/Rust usage, tools, and style&lt;br /&gt;
|description=Aspects of C++ use such as language feature usage, standard library versions/usage, compiler/toolchain versions, formatting and naming style, and aspects of Rust use as needs arise&lt;br /&gt;
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:bballo@mozilla.com Botond Ballo], [mailto:glandium@mozilla.com Mike Hommey], [mailto:jwalden@mozilla.com Jeff Walden], [mailto:sgiesecke@mozilla.com Simon Giesecke]&lt;br /&gt;
|source_dirs=non-third-party C++ and Rust code in the tree&lt;br /&gt;
|components=Various components&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=docshell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peers=[mailto:peterv@propagandism.org Peter Van der Beken], [mailto:afarre@mozilla.com Andreas Farre]&lt;br /&gt;
|ownersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:justin.lebar@gmail.com Justin Lebar], [mailto:sawang@mozilla.com Samael Wang], [mailto:kyle@nonpolynomial.com Kyle Machulis]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=docshell/, uriloader/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Document Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Document Object Model&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:hsivonen@iki.fi Henri Sivonen], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:baku@mozilla.com Andrea Marchesini],&lt;br /&gt;
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:nika@thelayzells.com Nika Layzell], [mailto:afarre@mozilla.com Andreas Farre], [mailto:emilio@crisal.io Emilio Cobos]&lt;br /&gt;
|ownersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|peersemeritus=[mailto:justin.lebar@gmail.com Justin Lebar], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:bent.mozilla@gmail.com Ben Turner], [mailto:mounir@lamouri.fr Mounir Lamouri], [mailto:me@kylehuey.com Kyle Huey], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:ben@wanderview.com Ben Kelly], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:kyle@nonpolynomial.com Kyle Machulis], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/*, except directories covered by other modules&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core &amp;amp; HTML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=DOM File&lt;br /&gt;
|description=DOM Blob, File and FileSystem APIs &lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:olli@pettay.fi Olli Pettay]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/file, dom/filesystem&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: File&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Event Handling&lt;br /&gt;
|description=DOM Events and Event Handling &lt;br /&gt;
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:echen@mozilla.com Edgar Chen]&lt;br /&gt;
|peersemeritus=[mailto:sshih@mozilla.com Stone Shih]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/events and event handling related code elsewhere &lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: Events, Core::DOM: UI Events &amp;amp; Focus Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Workers&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:asuth@mozilla.com Andrew Sutherland], [mailto:ytausky@mozilla.com Yaron Tausky]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/workers/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_web_workers&lt;br /&gt;
|components=Core::DOM: Workers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IndexedDB&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|peers=[mailto:btseng@mozilla.com Bevis Tseng], [mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/indexedDB/&lt;br /&gt;
|url=https://developer.mozilla.org/en/IndexedDB&lt;br /&gt;
|components=Core::DOM: IndexedDB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Editor&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=editor/&lt;br /&gt;
|url=http://www.mozilla.org/editor/&lt;br /&gt;
|components=Core::Editor&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Gecko Profiler&lt;br /&gt;
|description=Gecko&#039;s built-in profiler&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:nnethercote@mozilla.com Nicholas Nethercote], [mailto:gsquelart@mozilla.com Gerald Squelart], [mailto:gtatum@mozilla.com Greg Tatum], [mailto:canaltinova@mozilla.com Nazim Can Altinova], [mailto:jseward@mozilla.com Julian Seward] (LUL), [mailto:kvijayan@mozilla.com Kannan Vijayan] (JS integration), [mailto:brennie@mozilla.com Barret Rennie] (Screenshots).&lt;br /&gt;
|ownersemeritus=[mailto:b56girard@gmail.com Benoit Girard]&lt;br /&gt;
|peersemeritus=[mailto:shu@mozilla.com Shu-yu Guo] (JS integration), [mailto:tlee@mozilla.com Thinker Lee] (TaskTracer), [mailto:cyu@mozilla.com Cervantes Yu] (TaskTracer)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=tools/profiler/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler&lt;br /&gt;
|components=Core::Gecko Profiler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Global Key Bindings&lt;br /&gt;
|description=Global hot keys in Mozilla for the browser, editor, mail-news and widgets. Does not include underlined menu accelerators and the like, as those are part of i18n.&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=dom/events (and platform specific directories under it)&lt;br /&gt;
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html&lt;br /&gt;
|components=Core::Keyboard: Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Graphics&lt;br /&gt;
|description=Mozilla graphics API&lt;br /&gt;
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bas.schouten@live.nl Bas Schouten](Layers, Windows), [mailto:jgilbert@mozilla.com Jeff Gilbert](WebGL, ANGLE), [mailto:mwoodrow@mozilla.com Matt Woodrow](Layers API), [mailto:jfkthame@googlemail.com Jonathan Kew](text/fonts), [mailto:nsilva@mozilla.com  Nicolas Silva](MozSurface), [mailto:ncameron@mozilla.com Nick Cameron], [mailto:sikeda@mozilla.com Sotaro Ikeda](B2G), [mailto:jnicol@mozilla.com Jamie Nicol](Android), [mailto:snorp@mozilla.com James Willcox](Android), [mailto:mstange@themasta.com Markus Stange](OS X), [mailto:lsalzman@mozilla.com Lee Salzman](Skia, Canvas2D), [mailto:rhunt@mozilla.com Ryan Hunt](OMTP), [mailto:gwatson@mozilla.com Glenn Watson ](WebRender), [mailto:dmalyshau@mozilla.com Dzmitry Malyshau](WebRender)&lt;br /&gt;
|peersemeritus=[mailto:bgirard@mozilla.com Benoit Girard](Compositor, Performance), [mailto:ajuma.bugzilla@alijuma.com Ali Juma], [mailto:george@mozilla.com George Wright](Canvas2D), [mailto:mchang@mozilla.com Mason Chang], [mailto:dvander@mozilla.com David Anderson], [mailto:clord@mozilla.com Christopher Lord], [mailto:jdaggett@mozilla.com John Daggett](text/fonts), [mailto:bjacob@mozilla.com Benoit Jacob](gfx/gl), [mailto:jdrew@mozilla.com Joe Drew], [mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/, dom/canvas/&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch&lt;br /&gt;
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::Graphics: WebRender, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebGPU (Graphics submodule)&lt;br /&gt;
|description=WebGPU implementation&lt;br /&gt;
|owner=[mailto:dmalyshau@mozilla.com Dzmitry Malyshau]&lt;br /&gt;
|peers=[mailto:josh@joshgroves.com Joshua Groves], [mailto:jgilbert@mozilla.com Jeff Gilbert],&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/webgpu&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/WebGPU&lt;br /&gt;
|components=Core::Graphics::WebGPU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=APZ (Graphics submodule)&lt;br /&gt;
|description=Asynchronous panning and zooming&lt;br /&gt;
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:tnikkel@mozilla.com Timothy Nikkel], [mailto:rhunt@mozilla.com Ryan Hunt], [mailto:mstange@mozilla.com Markus Stange]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/layers/apz&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/APZ&lt;br /&gt;
|components=Core::Panning and Zooming&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Moz2D (Graphics submodule)&lt;br /&gt;
|description=Platform independent 2D graphics API&lt;br /&gt;
|owner=[mailto:bschouten@mozilla.com Bas Schouten]&lt;br /&gt;
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/2d&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D&lt;br /&gt;
|components=Core::Graphics&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Legacy HTML Parser&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:rbs@maths.uq.edu.au rbs@maths.uq.edu.au]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|source_dirs=parser/htmlparser&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/doc/parser.html&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HAL&lt;br /&gt;
|description=Hardware Abstraction Layer&lt;br /&gt;
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=hal/&lt;br /&gt;
|components=Core::Hardware Abstraction Layer (HAL)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HTML Parser&lt;br /&gt;
|description=The HTML Parser transforms HTML source code into a DOM. It conforms to the HTML specification, and is mostly translated automatically from Java to C++.&lt;br /&gt;
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|peers=[mailto:wchen@mozilla.com William Chen]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=parser/html&lt;br /&gt;
|url=http://about.validator.nu/&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=I18N Library&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:hsivonen@hsivonen.fi Henri Sivonen (encoding)], [mailto:jfkthame@gmail.com Jonathan Kew (except to encoding)]&lt;br /&gt;
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura], [mailto:gandalf@aviary.pl Zibi Braniecki], [mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|group=dev-i18n&lt;br /&gt;
|source_dirs=intl/&lt;br /&gt;
|url=http://mozilla.org/projects/intl/index.html&lt;br /&gt;
|components=Core::Internationalization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=ImageLib&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:tnikkel@gmail.com Timothy Nikkel]&lt;br /&gt;
|peers=[mailto:aosmond@mozilla.com Andrew Osmond], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar]&lt;br /&gt;
|peersemeritus=[mailto:seth.bugzilla@blackhail.net Seth Fowler], [mailto:netzen@gmail.com Brian Bondy], [mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::ImageLib&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IPC&lt;br /&gt;
|description=Native message-passing between threads and processes&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|ownersemeritus=Chris Jones, Bill McCloskey&lt;br /&gt;
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:jmathies@mozilla.com Jim Mathies], [mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|peersemeritus=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bent.mozilla@gmail.com Ben Turner], David Anderson, Kan-Ru Chen, Bevis Tseng, Ben Kelly&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript&lt;br /&gt;
|description=JavaScript engine (SpiderMonkey)&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:jdemooij@mozilla.com Jan de Mooij], André Bargull, [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:jcoppeard@mozilla.com Jon Coppeard], [mailto:sphink@gmail.com Steve Fink], [mailto:arai.unmht@gmail.com Tooru Fujisawa], [mailto:evilpies@gmail.com Tom Schuster], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:jwalden@mit.edu Jeff Walden], [mailto:ystartsev@mozilla.com Yulia Startsev], [mailto:mgaudet@mozilla.com Matthew Gaudet], [mailto:iireland@mozilla.com Iain Ireland], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:ccullen@mozilla.com Caroline Cullen] [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:till@tillschneidereit.net Till Schneidereit], [mailto:nfitzgerald@mozilla.com Nick Fitzgerald], [mailto:nnethercote@mozilla.com Nick Nethercote], [mailto:luke@mozilla.com Luke Wagner], [mailto:sunfish@mozilla.com Dan Gohman], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:nmatsakis@mozilla.com Niko Matsakis], [mailto:ejpbruel@mozilla.com Eddy Bruel], [mailto:danderson@mozilla.com David Anderson], [mailto:igor@mir2.org Igor Bukanov], Andreas Gal, [mailto:efaust@mozilla.com Eric Faust], [mailto:khyperia@mozilla.com Ashley Hauck]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey,&lt;br /&gt;
http://developer.mozilla.org/en/docs/About_JavaScript&lt;br /&gt;
|components=Core::JavaScript Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript JIT&lt;br /&gt;
|description=JavaScript engine&#039;s JIT compilers (IonMonkey, Baseline)&lt;br /&gt;
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]&lt;br /&gt;
|peers=[mailto:bbouvier@mozilla.com Benjamin Bouvier], [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:mgaudet@mozilla.com Matthew Gaudet], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:iireland@mozilla.com Iain Ireland], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:evilpies@gmail.com  Tom Schuster], [mailto:sstangl@mozilla.com Sean Stangl], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:luke@mozilla.com Luke Wagner]&lt;br /&gt;
|peersemeritus=[mailto:danderson@mozilla.com David Anderson], [mailto:hv1989@gmail.com Hannes Verschore]&lt;br /&gt;
|group=dev-tech-js-engine-internals&lt;br /&gt;
|source_dirs=js/src/jit&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey&lt;br /&gt;
|components=Core::JavaScript Engine: JIT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=jsat&lt;br /&gt;
|description=Javascript screen reader that is used in Android and B2G&lt;br /&gt;
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]&lt;br /&gt;
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/jsat/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-ctypes&lt;br /&gt;
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src/ctypes/&lt;br /&gt;
|url=https://wiki.mozilla.org/JSctypes&lt;br /&gt;
|components=Core::js-ctypes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-tests&lt;br /&gt;
|description=JavaScript test suite&lt;br /&gt;
|owner=[mailto:bclary@bclary.com Bob Clary]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tests/&lt;br /&gt;
|url=http://www.mozilla.org/js/tests/library.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Layout Engine&lt;br /&gt;
|description=rendering tree construction, layout (reflow), etc.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:jfkthame@gmail.com Jonathan Kew], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:matt.woodrow@gmail.com Matt Woodrow], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:emilio@crisal.io Emilio Cobos Álvarez]&lt;br /&gt;
|peersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/printing/, layout/tables/, layout/tools/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Layout&lt;br /&gt;
|components=Core::Layout, Core::Layout: Block and Inline, Core::Layout: Columns, Core::Layout: Flexbox, Core::Layout: Floats, Core::Layout: Form Controls, Core::Layout: Generated Content, Lists, and Counters, Core::Layout: Grid, Core::Layout: Images, Video, and HTML Frames, Core::Layout: Positioned, Core::Layout: Ruby, Core::Layout: Scrolling and Overflow, Core::Layout: Tables, Core::Layout: Text and Fonts, Core::Print Preview, Core::Printing: Output&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=libjar&lt;br /&gt;
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|ownersemeritus=Taras Glek, Michael Wu&lt;br /&gt;
|peers=[mailto:mnovotny@mozilla.com Michal Novotny], [mailto:vgosu@mozilla.com Valentin Gosu]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libjar&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MathML&lt;br /&gt;
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-tech-mathml&lt;br /&gt;
|source_dirs=layout/mathml/&lt;br /&gt;
|url=http://www.mozilla.org/projects/mathml/&lt;br /&gt;
|components=Core::MathML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Playback&lt;br /&gt;
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).&lt;br /&gt;
|owner=[mailto:jyavenard@mozilla.com Jean-Yves Avenard]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:cpearce@mozilla.com Chris Pearce]&lt;br /&gt;
|peers=[mailto:kinetik@flim.org Matthew Gregan], [mailto:bvandyk@mozilla.com Bryce Van Dyk], [mailto:jolin@mozilla.com John Lin], [mailto:alwu@mozilla.com Alastor Wu], [mailto:jwwang@mozilla.com JW Wang]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=dom/media, media/gmp-clearkey/, media/libcubeb/, media/libnestegg/, media/libogg/, media/libopus/, media/libstagefright/, media/libtheora/, media/libtremor/, media/libvorbis/, media/libvpx/, media/omx-plugin/, media/rlz/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Audio/Video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Transport&lt;br /&gt;
|description=Pluggable transport for real-time media&lt;br /&gt;
|owner=[mailto:ekr@rtfm.com Eric Rescorla]&lt;br /&gt;
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/mtransport&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::WebRTC::Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Memory Allocator&lt;br /&gt;
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=memory/&lt;br /&gt;
|components=Core::DMD, Core::jemalloc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mfbt&lt;br /&gt;
|description=mfbt is a collection of headers, macros, data structures, methods, and other functionality available for use and reuse throughout all Mozilla code (including SpiderMonkey and Gecko more broadly).&lt;br /&gt;
|owner=[mailto:jwalden@mit.edu Jeff Walden]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mfbt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::MFBT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Mozglue&lt;br /&gt;
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd] (mozglue/linker), [mailto:kgupta@mozilla.com Kartikaya Gupta] (mozglue/android), [mailto:nchen@mozilla.com Jim Chen] (mozglue/android), [mailto:aklotz@mozilla.com Aaron Klotz] (Windows Dll Blocklist/Interceptor)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mozglue/&lt;br /&gt;
|components=Core::mozglue&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozilla-toplevel&lt;br /&gt;
|description=The top level directory for the mozilla tree.&lt;br /&gt;
|owner=[[Modules/Firefox_Technical_Leadership|Firefox Technical Leadership module]]&lt;br /&gt;
|ownersemeritus=[mailto:brendan@mozilla.org Brendan Eich]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=tools/README&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MSCOM&lt;br /&gt;
|description=Integration with Microsoft Distributed COM&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|peers=[mailto:jteh@mozilla.com James Teh], [mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/mscom/%&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC: MSCOM}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Necko&lt;br /&gt;
|description=The Mozilla Networking Library&lt;br /&gt;
|owner=[mailto:dd.mozilla@gmail.com  Dragana Damjanovic]&lt;br /&gt;
|peers= [mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:mnovotny@mozilla.com Michal Novotny], [mailto:valentin.gosu@gmail.com Valentin Gosu], [mailto:kershaw@mozilla.com Kershaw Chang], [mailto:juhsu@mozilla.com Junior Hsu]&lt;br /&gt;
|ownersemeritus=[mailto:mcmanus@ducksong.com Patrick McManus], [mailto:cbiesinger@gmail.com Christian Biesinger] |peersemeritus= Shih-Chiang Chien, [mailto:bzbarsky@mit.edu Boris Zbarsky], Steve Workman, Nick Hurley, [mailto:daniel@haxx.se Daniel Stenberg ], [mailto:jduell.mcbugs@gmail.com Jason Duell]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=netwerk/%, netwerk/base/, netwerk/build/, netwerk/cache/, netwerk/dns/, netwerk/locales/, netwerk/mime/, netwerk/protocol/, netwerk/resources/, netwerk/socket/, netwerk/streamconv/, netwerk/system/, netwerk/test/, netwerk/testserver/&lt;br /&gt;
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko&lt;br /&gt;
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NodeJS usage, tools, and style&lt;br /&gt;
|description=Advises on the use of NodeJS and npm packages at build and runtime. Reviews additions/upgrades/removals of vendored npm packages. Works with appropriate teams to maintain automated license and security audits of npm packages. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored npm packages.&lt;br /&gt;
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]&lt;br /&gt;
|peers=[mailto:mbanner@mozilla.com Mark Banner], [mailto:dcoates@mozilla.com Danny Coates], [mailto:khudson@mozilla.com Kate Hudson], [mailto:jlaster@mozilla.com Jason Laster], [mailto:elee@mozilla.com Ed Lee], [mailto:dtownsend@mozilla.com Dave Townsend]&lt;br /&gt;
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate&lt;br /&gt;
|components=Various components&lt;br /&gt;
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev], #nodejs on slack&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NSPR&lt;br /&gt;
|description=Netscape Portable Runtime&lt;br /&gt;
|owner=[mailto:kaie@kuix.de Kai Engert]&lt;br /&gt;
|peers=[mailto:mh@glandium.org Mike Hommey]&lt;br /&gt;
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|group=dev-tech-nspr&lt;br /&gt;
|source_dirs=nsprpub/&lt;br /&gt;
|url=http://www.mozilla.org/projects/nspr/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/reference/html/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/release-notes/&lt;br /&gt;
|components=NSPR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PDF&lt;br /&gt;
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF&#039; format.&lt;br /&gt;
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]&lt;br /&gt;
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:vnicolas@mozilla.com Vivien Nicolas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/pdf/&lt;br /&gt;
|url=https://github.com/mozilla/pdf.js&lt;br /&gt;
|components=Core::PDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Plugins&lt;br /&gt;
|description= NPAPI Plugin support.&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:davidp99@gmail.com David Parks]&lt;br /&gt;
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:jstenback@gmail.com Johnny Stenback], Benjamin Smedberg&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/plugins/, modules/plugin/&lt;br /&gt;
|url=https://wiki.mozilla.org/Plugins&lt;br /&gt;
|components=Core::Plug-ins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=Preference library&lt;br /&gt;
|owner=[mailto:nnethercote@mozilla.com Nicholas Nethercote]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:glandium@mozilla.com Mike Hommey], [mailto:erahm@mozilla.com Eric Rahm], [mailto:kwright@mozilla.com Kristen Wright]&lt;br /&gt;
|peersemeritus=Felipe Gomes&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libpref/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Preferences: Backend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Private Browsing&lt;br /&gt;
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.&lt;br /&gt;
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.net Josh Matthews]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. &lt;br /&gt;
|url=https://wiki.mozilla.org/Private_Browsing&lt;br /&gt;
|components=Firefox::Private Browsing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Privilege Manager&lt;br /&gt;
|description=&amp;quot;caps&amp;quot;&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:dveditz@mozilla.com Dan Veditz]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=caps/&lt;br /&gt;
|url=http://www.mozilla.org/projects/security/components/index.html&lt;br /&gt;
|components=Core::Security: CAPS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Push Notifications&lt;br /&gt;
|description=Push is a way for application developers to send messages to their web applications.&lt;br /&gt;
|owners=[mailto:lina@mozilla.com Lina Cambridge]&lt;br /&gt;
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:mt@lowentropy.net Martin Thomson], [mailto:ddamjanovic@mozilla.com Dragana Damjanovic]&lt;br /&gt;
|peersemeritus=[mailto:nsm.nikhil@gmail.com Nikhil Marathe]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/push&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM: Push Notifications&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=security&lt;br /&gt;
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)&lt;br /&gt;
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:mt@lowentropy.net Martin Thomson]&lt;br /&gt;
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang], [mailto:ttaubert@mozilla.com Tim Taubert]&lt;br /&gt;
|peers=[mailto:kaie@kuix.de Kai Engert], [mailto:ryan.sleevi@gmail.com Ryan Sleevi], [mailto:ekr@rtfm.com Eric Rescorla], [mailto:franziskuskiefer@gmail.com Franziskus Kiefer], [mailto:dueno@redhat.com Daiki Ueno]&lt;br /&gt;
|peersemeritus=[mailto:emaldona@redhat.com Elio Maldonado]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/&lt;br /&gt;
|url=http://mozilla.org/projects/security/pki/&lt;br /&gt;
|components=NSS, JSS, Core::Security, Core::Security: S/MIME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security - Mozilla PSM Glue&lt;br /&gt;
|description=Personal Security Manager&lt;br /&gt;
|owner=[mailto:dkeeler@mozilla.com Dana Keeler]&lt;br /&gt;
|ownersemeritus=[mailto:kaie@kuix.de Kai Engert (2001-2012)]&lt;br /&gt;
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka], [mailto:jc@mozilla.com J.C. Jones], [mailto:fkiefer@mozilla.com Franziskus Kiefer]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=security/manager/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Security: PSM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Static analysis &amp;amp; rewriting for C++&lt;br /&gt;
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.&lt;br /&gt;
|owner=[mailto:andi@mozilla.com Andi-Bogdan Postelnicu]&lt;br /&gt;
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:sfink@mozilla.com Steve Fink], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peersemeritus=[mailto:birunthan@mohanathas.com Birunthan Mohanathas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Rewriting &amp;amp; Analysis&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=storage&lt;br /&gt;
|description=Storage APIs with a SQLite backend&lt;br /&gt;
|owner=[mailto:mak77@bonardo.net Marco Bonardo]&lt;br /&gt;
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=db/sqlite3/, storage/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/Storage&lt;br /&gt;
|components=Toolkit::Storage, Core::SQL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=String&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=string/, xpcom/string/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide&lt;br /&gt;
|components=Core::String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Style System&lt;br /&gt;
|description=CSS style sheet handling; style data computation&lt;br /&gt;
|owner=[mailto:cam@mcc.id.au Cameron McCormack]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:emilio@crisal.io Emilio Cobos Álvarez], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/style/, servo/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System&lt;br /&gt;
|components=Core::CSS Parsing and Computation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=SVG&lt;br /&gt;
|description=Scalable Vector Graphics&lt;br /&gt;
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]&lt;br /&gt;
|group=dev-tech-svg&lt;br /&gt;
|source_dirs=dom/svg/, layout/svg/, dom/smil/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Web/SVG&lt;br /&gt;
|components=Core::SVG&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=View System&lt;br /&gt;
|description=The View Manager is responsible for handling &amp;quot;heavyweight&amp;quot; rendering (some clipping, compositing) and event handling tasks.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=view/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Audio&lt;br /&gt;
|description=Support for the W3C Web Audio API specification.&lt;br /&gt;
|owner=[mailto:padenot@mozilla.com Paul Adenot]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/media/webaudio&lt;br /&gt;
|url=https://wiki.mozilla.org/Web_Audio_API&lt;br /&gt;
|components=Core::Web Audio&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Painting&lt;br /&gt;
|description=painting, display lists, and layer construction&lt;br /&gt;
|owner=[mailto:matt.woodrow@gmail.com Matt Woodrow]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dbaron@dbaron.org David Baron],   [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:mstange@themasta.com Markus Stange], [mailto:mmynttinen@mozilla.com Miko Mynttinen], [mailto:jnicol@mozilla.com Jamie Nicol]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs= layout/painting, the display list and layer related methods on nsIFrame and its subclasses&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout: Web Painting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC&lt;br /&gt;
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=netwerk/sctp (also see submodules &amp;quot;WebRTC Media&amp;quot; and &amp;quot;WebRTC Signaling&amp;quot;)&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC, Core::WebRTC Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebVR&lt;br /&gt;
|description=Gecko&#039;s implementation of WebVR (Virtual Reality) functionality, including API, devices, graphics and integration&lt;br /&gt;
|owner=[mailto:kgilbert@mozilla.com Kearwood (Kip) Gilbert]&lt;br /&gt;
|peers=[mailto:dmu@mozilla.com Daosheng Mu], [mailto:igorostizaga@mozilla.com Imanol Fernández]&lt;br /&gt;
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/vr, gfx/vr&lt;br /&gt;
|url=https://mozvr.com/&lt;br /&gt;
|components=Core::WebVR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget&lt;br /&gt;
|description=Top level Widget&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|ownersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], &lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/, widget/xpwidgets/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Android&lt;br /&gt;
|description=Android widget support&lt;br /&gt;
|owner=[mailto:jwillcox@mozilla.com James Willcox]&lt;br /&gt;
|peers=&lt;br /&gt;
|ownersemeritus=[mailto:blassey.bugs@lassey.us Brad Lassey]&lt;br /&gt;
|group=dev-platforms-mobile&lt;br /&gt;
|source_dirs=widget/android/, embedding/android&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Android&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - GTK&lt;br /&gt;
|description=GTK widget support&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:stransky@redhat.com Martin Stránský]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/&lt;br /&gt;
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/&lt;br /&gt;
|components=Core::Widget: Gtk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Headless&lt;br /&gt;
|description=Headless widget support&lt;br /&gt;
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]&lt;br /&gt;
|peers=&lt;br /&gt;
|ownersemeritus=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/headless/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Headless&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - macOS&lt;br /&gt;
|description= macOS widget support&lt;br /&gt;
|owner=[mailto:spohl@mozilla.com Stephen A Pohl]&lt;br /&gt;
|peers=[mailto:mstange@themasta.com Markus Stange], [mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:b56girard@gmail.com Benoit Girard], [mailto:smichaud@pobox.com Steven Michaud]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/cocoa/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Cocoa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Windows&lt;br /&gt;
|description=Windows widget support&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:robert.strong.bugs@gmail.com Rob Strong], [mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:doug.turner@gmail.com Doug Turner], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref], [mailto:robarnold@cmu.edu Rob Arnold]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/windows/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Win32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XML&lt;br /&gt;
|description=XML in Mozilla, including XML, XHTML, Namespaces in XML, Associating Style Sheets with XML Documents, XML Linking and XML Extras. XML-related things that are not covered by more specific projects.&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-xml&lt;br /&gt;
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/xml/&lt;br /&gt;
|components=Core::XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPApps&lt;br /&gt;
|description=Cross-Platform Applications, mostly Navigator front end and application shell.&lt;br /&gt;
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-apps-seamonkey&lt;br /&gt;
|source_dirs=xpfe/&lt;br /&gt;
|url=http://www.mozilla.org/xpapps/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCOM&lt;br /&gt;
|description=The cross-platform object model and core data structures.&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]&lt;br /&gt;
|peers=[mailto:erahm@mozilla.com Eric Rahm], [mailto:nika@thelayzells.com Nika Layzell], [mailto:kmaglione@mozilla.com Kris Maglione]&lt;br /&gt;
|ownersemeritus=Benjamin Smedberg&lt;br /&gt;
|peersemeritus=[https://mozillians.org/en-US/u/dougt/ Doug Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=startupcache/, xpcom/%, xpcom/base/, xpcom/build/, xpcom/components/, xpcom/ds/, xpcom/glue/, xpcom/proxy/, xpcom/sample/, xpcom/stub/, xpcom/tests/, xpcom/threads/, xpcom/tools/, xpcom/windbgdlg/&lt;br /&gt;
|url=http://developer.mozilla.org/en/XPCOM&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPConnect&lt;br /&gt;
|description=Deep Magic&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:kmaglione@mozilla.com Kris Maglione], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peersemeritus=[mailto:gal@uci.edu Andreas Gal], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=js/xpconnect/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::XPConnect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPIDL&lt;br /&gt;
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.&lt;br /&gt;
|owner=[mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|ownersemeritus=[mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=xpcom/typelib/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xpidl&lt;br /&gt;
http://www.mozilla.org/scriptable&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XSLT Processor&lt;br /&gt;
|description=XSLT transformations processor&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xslt&lt;br /&gt;
|source_dirs=dom/xslt/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html&lt;br /&gt;
|components=Core::XSLT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Windows &lt;br /&gt;
|description=Sandboxing for the Windows platform &lt;br /&gt;
|owner=[mailto:bobowencode@gmail.com Bob Owen] (:bobowen)&lt;br /&gt;
|peers=[mailto:aklotz@mozilla.com Aaron Klotz] (:aklotz), [mailto:jimm@mozilla.com Jim Mathies] (:jimm), [mailto:davidp99@gmail.com David Parks] (:handyman)&lt;br /&gt;
|ownersemeritus=[https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes]&lt;br /&gt;
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/win &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - OSX &lt;br /&gt;
|description=Sandboxing for the OSX platform &lt;br /&gt;
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox/mac &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Linux&lt;br /&gt;
|description=Sandboxing for the Linux platform&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|peers=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/linux&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Crash reporting&lt;br /&gt;
|description=Infrastructure and tools used to generate, submit and process crash reports. This includes the in-tree google-breakpad fork, the crash report generation machinery as well as the host tools used to dump symbols, analyse minidumps and generate stack traces.&lt;br /&gt;
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto] (:gsvelto)&lt;br /&gt;
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=toolkit/crashreporter, toolkit/components/crashes, tools/crashreporter, ipc/glue/CrashReporter*, mobile/android/geckoview/src/main/java/org/mozilla/geckoview/CrashReporter.java&lt;br /&gt;
|url=https://firefox-source-docs.mozilla.org/toolkit/crashreporter/crashreporter/index.html&lt;br /&gt;
|components=Toolkit::Crash Reporting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Submodules===&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Fennec&lt;br /&gt;
|description=Submodule of the build config covering Fennec&#039;s build system in mobile/android.&lt;br /&gt;
|owner=[mailto:nalexander@mozilla.com Nicholas Alexander]&lt;br /&gt;
|peers=Same as Build Config&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Taskgraph&lt;br /&gt;
|description=Support for task-graph generation in decision, action, and cron tasks, including configuration of all tasks including those for CI, nightlies, and releases; as well as Docker and VM images used to execute those tasks.&lt;br /&gt;
|owner=[mailto:mozilla@hocat.ca Tom Prince]&lt;br /&gt;
|peers=[mailto:ahal@mozilla.com Andrew Halberstadt], [mailto:aki@mozilla.com Aki Sasaki], [mailto:bstack@mozilla.com Brian Stack], [mailto:mh@glandium.org Mike Hommey], [mailto:gps@mozilla.com Gregory Szorc], [mailto:jmaher@mozilla.com Joel Maher], [mailto:callek@mozilla.com Justin Wood], [mailto:dustin@mozilla.com Dustin Mitchell]&lt;br /&gt;
|components=Firefox Build System::Task Configuration&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Media&lt;br /&gt;
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:jib@mozilla.com Jan-Ivar Bruaroey], [mailto:dminor@mozilla.com Dan Minor], [mailto:apehrson@mozilla.com Andreas Pehrson], &lt;br /&gt;
|peersemeritus=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc, /dom/media/webrtc, /dom/media/systemservices&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Audio/Video)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Signaling&lt;br /&gt;
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling&lt;br /&gt;
|owner=[mailto:bcampen@mozilla.com Byron Campen]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:abr@mozilla.com Adam Roach], [mailto:rjesup@mozilla.com Randell Jesup], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc/signaling/&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Signaling)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unassigned Bugzilla Components===&lt;br /&gt;
&lt;br /&gt;
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Core::Find Backend&lt;br /&gt;
Core::General&lt;br /&gt;
Core::History: Global&lt;br /&gt;
Core::Image Blocking&lt;br /&gt;
Core::Localization&lt;br /&gt;
Core::Networking: Domain Lists&lt;br /&gt;
Core::Selection&lt;br /&gt;
Core::Serializers&lt;br /&gt;
Core::Spelling checker&lt;br /&gt;
Core::X-remote&lt;br /&gt;
Core::XUL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1228397</id>
		<title>Modules/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1228397"/>
		<updated>2020-06-23T15:03:00Z</updated>

		<summary type="html">&lt;p&gt;Jorend: Add three JS peers: nbp, iain, mgaudet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Only module owners may edit this page.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
They may:&lt;br /&gt;
&lt;br /&gt;
* update any information about their module except the name of the owner&lt;br /&gt;
* add or remove sub-modules&lt;br /&gt;
* change the owner of a sub-module &lt;br /&gt;
* add emeritus owners or peers&lt;br /&gt;
&lt;br /&gt;
Other changes, including changes of module owner or addition/removal of modules, must be agreed with the Module Ownership Module group, probably via a discussion in [https://www.mozilla.org/about/forums/#governance mozilla.governance].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Accessibility&lt;br /&gt;
|description=Support for platform accessibility APIs. Accessibility APIs are used by 3rd party software like screen readers, screen magnifiers, and voice dictation software, which need information about document content and UI controls, as well as important events like changes of focus.&lt;br /&gt;
|owner=[mailto:jteh@mozilla.com Jamie Teh]&lt;br /&gt;
|peers=[mailto:eitan@monotonous.org Eitan Isaacson], [mailto:jteh@mozilla.com James Teh],  [mailto:mzehe@mozilla.com Marco Zehe], [mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal], [mailto:surkov.alexander@gmail.com Alexander Surkov]&lt;br /&gt;
|peersemeritus=[mailto:dbolter@mozilla.com David Bolter], [mailto:tbsaunde+mozbugs@tbsaunde.org Trevor Saunders], [mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Animation&lt;br /&gt;
|description=Declarative animations: CSS animations, CSS transitions, Web Animations API, and off-main thread animations.&lt;br /&gt;
|owner=[mailto:bbirtles@mozilla.com Brian Birtles] (:birtles)&lt;br /&gt;
|peers=[mailto:hiro@mozilla.com Hiroyuki Ikezoe] (:hiro), [mailto:mwoodrow@mozilla.com Matt Woodrow] (:mattwoodrow)&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=dom/animation; and animation-related and interpolation-related code in layout/style, gfx/layers, servo/components/style and servo/ports/gecko&lt;br /&gt;
|components=Core::DOM::Animation, Core::CSS Transitions and Animations&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Anti-Tracking&lt;br /&gt;
|description=Tracking detection and content-blocking.&lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:dlee@mozilla.com Dimi Lee], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:ewright@mozilla.com Erica Wright], [mailto:xeonchen@gmail.com Gary Chen], [mailto:jhofmann@mozilla.com Johann Hofmann], [mailto:tihuang@mozilla.com Tim Huang]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=toolkit/components/antitracking/, several files under browser/ and netwerk/url-classifier/&lt;br /&gt;
|components=Core::Privacy: Anti-Tracking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Browser WebAPI&lt;br /&gt;
|description=Web API for rendering apps, browser windows and widgets.&lt;br /&gt;
|owner=[mailto:Olli.Pettay@helsinki.fi Olli Pettay]&lt;br /&gt;
|peers=[mailto:fabrice@mozilla.com Fabrice Desré]&lt;br /&gt;
|ownersemeritus=[mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/browser-element/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build and Release Tools&lt;br /&gt;
|description=Tools related to build and release automation and configuration of release builds.&lt;br /&gt;
|owner=[mailto:nthomas@mozilla.com Nick Thomas]&lt;br /&gt;
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]&lt;br /&gt;
|group=release-engineering&lt;br /&gt;
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/&lt;br /&gt;
|url=https://wiki.mozilla.org/ReleaseEngineering&lt;br /&gt;
|components=Release Engineering::*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config&lt;br /&gt;
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.&lt;br /&gt;
|owner=[mailto:mh@glandium.org Mike Hommey] (:glandium)&lt;br /&gt;
|peers=[mailto:mshal@mozilla.com Mike Shal] (:mshal), [mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj), [mailto:dmajor@mozilla.com David Major] (:dmajor), [mailto:rstewart@mozilla.com Ricky Stewart] (:ricky)&lt;br /&gt;
|ownersemeritus=Chris Manchester (2019-2020), Gregory Szorc (2013-2019), Ted Mielczarek (2008-[https://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/ 2013]), Benjamin Smedberg (???-[http://benjamin.smedbergs.us/blog/2008-04-30/more-changing-of-the-guard-ted-mielczarek/ 2008]), &lt;br /&gt;
|peersemeritus=Ted Mielczarek, Ralph Giles, Gregory Szorc, Chris Manchester&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=build/, config/, python/mozbuild, tools/cross-commit, tools/cvs2hg-import.py, tools/cvsmgmt/, tools/elf-dynstr-gc/, tools/trees.pl, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=http://www.mozilla.org/build/&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Code Analysis and Debugging Tools&lt;br /&gt;
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-performance&lt;br /&gt;
|source_dirs=tools/codesighs/, tools/debug/, tools/dreftool/, tools/dumpdeps/, tools/jprof/, tools/leak-gauge/, tools/leaky/, tools/memory/, tools/module-deps/, tools/performance/, tools/post_compile/, tools/preloader/, tools/rb/, tools/reorder/, tools/trace-malloc/, tools/uuiddeps/, &lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content Security&lt;br /&gt;
|description=Native content-based security features enforced in the ContentSecurityManager, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Referrer Policy, Subresource Integrity (SRI), Cross-Origin Resource Sharing (CORS) and top-level data: URI blocking.&lt;br /&gt;
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peers=[mailto:tvyas@mozilla.com Tanvi Vyas], [mailto:dveditz@mozilla.com Dan Veditz], [mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:jkt@mozilla.com Jonathan Kingston], [mailto:tnguyen@mozilla.com Thomas Nguyen]&lt;br /&gt;
|peersemeritus=[mailto:mozilla@sidstamm.com Sid Stamm], [mailto:jonas@sicking.cc Jonas Sicking], François Marier&lt;br /&gt;
|group=dev-security&lt;br /&gt;
|source_dirs=dom/security&lt;br /&gt;
|components=Core::DOM: Security&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cookies&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:amarchesini@mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:honzab.moz@firemni.cz Honza Bambas] &lt;br /&gt;
|ownersemeritus=Monica Chew&lt;br /&gt;
|peersemeritus=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=netwerk/cookie/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Networking: Cookies&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Permissions&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:honzab.moz@firemni.cz Honza Bambas]&lt;br /&gt;
|ownersemeritus=Monica Chew&lt;br /&gt;
|peersemeritus=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=extensions/permissions/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core :: Permission Manager&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cycle Collector&lt;br /&gt;
|description=Code to break and collect objects within reference cycles&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]&lt;br /&gt;
|peers=Peter Van der Beken, Olli Pettay, David Baron&lt;br /&gt;
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=C++/Rust usage, tools, and style&lt;br /&gt;
|description=Aspects of C++ use such as language feature usage, standard library versions/usage, compiler/toolchain versions, formatting and naming style, and aspects of Rust use as needs arise&lt;br /&gt;
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:bballo@mozilla.com Botond Ballo], [mailto:glandium@mozilla.com Mike Hommey], [mailto:jwalden@mozilla.com Jeff Walden], [mailto:sgiesecke@mozilla.com Simon Giesecke]&lt;br /&gt;
|source_dirs=non-third-party C++ and Rust code in the tree&lt;br /&gt;
|components=Various components&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=docshell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peers=[mailto:peterv@propagandism.org Peter Van der Beken], [mailto:afarre@mozilla.com Andreas Farre]&lt;br /&gt;
|ownersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:justin.lebar@gmail.com Justin Lebar], [mailto:sawang@mozilla.com Samael Wang], [mailto:kyle@nonpolynomial.com Kyle Machulis]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=docshell/, uriloader/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Document Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Document Object Model&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:hsivonen@iki.fi Henri Sivonen], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:baku@mozilla.com Andrea Marchesini],&lt;br /&gt;
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:nika@thelayzells.com Nika Layzell], [mailto:afarre@mozilla.com Andreas Farre], [mailto:emilio@crisal.io Emilio Cobos]&lt;br /&gt;
|ownersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|peersemeritus=[mailto:justin.lebar@gmail.com Justin Lebar], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:bent.mozilla@gmail.com Ben Turner], [mailto:mounir@lamouri.fr Mounir Lamouri], [mailto:me@kylehuey.com Kyle Huey], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:ben@wanderview.com Ben Kelly], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:kyle@nonpolynomial.com Kyle Machulis], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/*, except directories covered by other modules&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core &amp;amp; HTML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=DOM File&lt;br /&gt;
|description=DOM Blob, File and FileSystem APIs &lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:olli@pettay.fi Olli Pettay]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/file, dom/filesystem&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: File&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Event Handling&lt;br /&gt;
|description=DOM Events and Event Handling &lt;br /&gt;
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:echen@mozilla.com Edgar Chen]&lt;br /&gt;
|peersemeritus=[mailto:sshih@mozilla.com Stone Shih]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/events and event handling related code elsewhere &lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: Events, Core::DOM: UI Events &amp;amp; Focus Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Workers&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:asuth@mozilla.com Andrew Sutherland], [mailto:ytausky@mozilla.com Yaron Tausky]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/workers/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_web_workers&lt;br /&gt;
|components=Core::DOM: Workers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IndexedDB&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|peers=[mailto:btseng@mozilla.com Bevis Tseng], [mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/indexedDB/&lt;br /&gt;
|url=https://developer.mozilla.org/en/IndexedDB&lt;br /&gt;
|components=Core::DOM: IndexedDB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Editor&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=editor/&lt;br /&gt;
|url=http://www.mozilla.org/editor/&lt;br /&gt;
|components=Core::Editor&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Gecko Profiler&lt;br /&gt;
|description=Gecko&#039;s built-in profiler&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:nnethercote@mozilla.com Nicholas Nethercote], [mailto:gsquelart@mozilla.com Gerald Squelart], [mailto:gtatum@mozilla.com Greg Tatum], [mailto:canaltinova@mozilla.com Nazim Can Altinova], [mailto:jseward@mozilla.com Julian Seward] (LUL), [mailto:kvijayan@mozilla.com Kannan Vijayan] (JS integration), [mailto:brennie@mozilla.com Barret Rennie] (Screenshots).&lt;br /&gt;
|ownersemeritus=[mailto:b56girard@gmail.com Benoit Girard]&lt;br /&gt;
|peersemeritus=[mailto:shu@mozilla.com Shu-yu Guo] (JS integration), [mailto:tlee@mozilla.com Thinker Lee] (TaskTracer), [mailto:cyu@mozilla.com Cervantes Yu] (TaskTracer)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=tools/profiler/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler&lt;br /&gt;
|components=Core::Gecko Profiler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Global Key Bindings&lt;br /&gt;
|description=Global hot keys in Mozilla for the browser, editor, mail-news and widgets. Does not include underlined menu accelerators and the like, as those are part of i18n.&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=dom/events (and platform specific directories under it)&lt;br /&gt;
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html&lt;br /&gt;
|components=Core::Keyboard: Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Graphics&lt;br /&gt;
|description=Mozilla graphics API&lt;br /&gt;
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bas.schouten@live.nl Bas Schouten](Layers, Windows), [mailto:jgilbert@mozilla.com Jeff Gilbert](WebGL, ANGLE), [mailto:mwoodrow@mozilla.com Matt Woodrow](Layers API), [mailto:jfkthame@googlemail.com Jonathan Kew](text/fonts), [mailto:nsilva@mozilla.com  Nicolas Silva](MozSurface), [mailto:ncameron@mozilla.com Nick Cameron], [mailto:sikeda@mozilla.com Sotaro Ikeda](B2G), [mailto:jnicol@mozilla.com Jamie Nicol](Android), [mailto:snorp@mozilla.com James Willcox](Android), [mailto:mstange@themasta.com Markus Stange](OS X), [mailto:lsalzman@mozilla.com Lee Salzman](Skia, Canvas2D), [mailto:rhunt@mozilla.com Ryan Hunt](OMTP), [mailto:gwatson@mozilla.com Glenn Watson ](WebRender), [mailto:dmalyshau@mozilla.com Dzmitry Malyshau](WebRender)&lt;br /&gt;
|peersemeritus=[mailto:bgirard@mozilla.com Benoit Girard](Compositor, Performance), [mailto:ajuma.bugzilla@alijuma.com Ali Juma], [mailto:george@mozilla.com George Wright](Canvas2D), [mailto:mchang@mozilla.com Mason Chang], [mailto:dvander@mozilla.com David Anderson], [mailto:clord@mozilla.com Christopher Lord], [mailto:jdaggett@mozilla.com John Daggett](text/fonts), [mailto:bjacob@mozilla.com Benoit Jacob](gfx/gl), [mailto:jdrew@mozilla.com Joe Drew], [mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/, dom/canvas/&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch&lt;br /&gt;
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::Graphics: WebRender, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebGPU (Graphics submodule)&lt;br /&gt;
|description=WebGPU implementation&lt;br /&gt;
|owner=[mailto:dmalyshau@mozilla.com Dzmitry Malyshau]&lt;br /&gt;
|peers=[mailto:josh@joshgroves.com Joshua Groves], [mailto:jgilbert@mozilla.com Jeff Gilbert],&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/webgpu&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/WebGPU&lt;br /&gt;
|components=Core::Graphics::WebGPU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=APZ (Graphics submodule)&lt;br /&gt;
|description=Asynchronous panning and zooming&lt;br /&gt;
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:tnikkel@mozilla.com Timothy Nikkel], [mailto:rhunt@mozilla.com Ryan Hunt], [mailto:mstange@mozilla.com Markus Stange]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/layers/apz&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/APZ&lt;br /&gt;
|components=Core::Panning and Zooming&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Moz2D (Graphics submodule)&lt;br /&gt;
|description=Platform independent 2D graphics API&lt;br /&gt;
|owner=[mailto:bschouten@mozilla.com Bas Schouten]&lt;br /&gt;
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/2d&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D&lt;br /&gt;
|components=Core::Graphics&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Legacy HTML Parser&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:rbs@maths.uq.edu.au rbs@maths.uq.edu.au]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|source_dirs=parser/htmlparser&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/doc/parser.html&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HAL&lt;br /&gt;
|description=Hardware Abstraction Layer&lt;br /&gt;
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=hal/&lt;br /&gt;
|components=Core::Hardware Abstraction Layer (HAL)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HTML Parser&lt;br /&gt;
|description=The HTML Parser transforms HTML source code into a DOM. It conforms to the HTML specification, and is mostly translated automatically from Java to C++.&lt;br /&gt;
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|peers=[mailto:wchen@mozilla.com William Chen]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=parser/html&lt;br /&gt;
|url=http://about.validator.nu/&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=I18N Library&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:hsivonen@hsivonen.fi Henri Sivonen (encoding)], [mailto:jfkthame@gmail.com Jonathan Kew (except to encoding)]&lt;br /&gt;
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura], [mailto:gandalf@aviary.pl Zibi Braniecki], [mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|group=dev-i18n&lt;br /&gt;
|source_dirs=intl/&lt;br /&gt;
|url=http://mozilla.org/projects/intl/index.html&lt;br /&gt;
|components=Core::Internationalization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=ImageLib&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:tnikkel@gmail.com Timothy Nikkel]&lt;br /&gt;
|peers=[mailto:aosmond@mozilla.com Andrew Osmond], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar]&lt;br /&gt;
|peersemeritus=[mailto:seth.bugzilla@blackhail.net Seth Fowler], [mailto:netzen@gmail.com Brian Bondy], [mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::ImageLib&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IPC&lt;br /&gt;
|description=Native message-passing between threads and processes&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|ownersemeritus=Chris Jones, Bill McCloskey&lt;br /&gt;
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:jmathies@mozilla.com Jim Mathies], [mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|peersemeritus=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bent.mozilla@gmail.com Ben Turner], David Anderson, Kan-Ru Chen, Bevis Tseng, Ben Kelly&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript&lt;br /&gt;
|description=JavaScript engine (SpiderMonkey)&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:jdemooij@mozilla.com Jan de Mooij], André Bargull, [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:jcoppeard@mozilla.com Jon Coppeard], [mailto:sphink@gmail.com Steve Fink], [mailto:arai.unmht@gmail.com Tooru Fujisawa], [mailto:evilpies@gmail.com Tom Schuster], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:jwalden@mit.edu Jeff Walden], [mailto:ystartsev@mozilla.com Yulia Startsev], [mailto:mgaudet@mozilla.com Matthew Gaudet], [mailto:iireland@mozilla.com Iain Ireland], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:till@tillschneidereit.net Till Schneidereit], [mailto:nfitzgerald@mozilla.com Nick Fitzgerald], [mailto:nnethercote@mozilla.com Nick Nethercote], [mailto:luke@mozilla.com Luke Wagner], [mailto:sunfish@mozilla.com Dan Gohman], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:nmatsakis@mozilla.com Niko Matsakis], [mailto:ejpbruel@mozilla.com Eddy Bruel], [mailto:danderson@mozilla.com David Anderson], [mailto:igor@mir2.org Igor Bukanov], Andreas Gal, [mailto:efaust@mozilla.com Eric Faust], [mailto:khyperia@mozilla.com Ashley Hauck]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey,&lt;br /&gt;
http://developer.mozilla.org/en/docs/About_JavaScript&lt;br /&gt;
|components=Core::JavaScript Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript JIT&lt;br /&gt;
|description=JavaScript engine&#039;s JIT compilers (IonMonkey, Baseline)&lt;br /&gt;
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]&lt;br /&gt;
|peers=[mailto:bbouvier@mozilla.com Benjamin Bouvier], [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:mgaudet@mozilla.com Matthew Gaudet], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:iireland@mozilla.com Iain Ireland], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:evilpies@gmail.com  Tom Schuster], [mailto:sstangl@mozilla.com Sean Stangl], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:luke@mozilla.com Luke Wagner]&lt;br /&gt;
|peersemeritus=[mailto:danderson@mozilla.com David Anderson], [mailto:hv1989@gmail.com Hannes Verschore]&lt;br /&gt;
|group=dev-tech-js-engine-internals&lt;br /&gt;
|source_dirs=js/src/jit&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey&lt;br /&gt;
|components=Core::JavaScript Engine: JIT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=jsat&lt;br /&gt;
|description=Javascript screen reader that is used in Android and B2G&lt;br /&gt;
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]&lt;br /&gt;
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/jsat/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-ctypes&lt;br /&gt;
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src/ctypes/&lt;br /&gt;
|url=https://wiki.mozilla.org/JSctypes&lt;br /&gt;
|components=Core::js-ctypes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-tests&lt;br /&gt;
|description=JavaScript test suite&lt;br /&gt;
|owner=[mailto:bclary@bclary.com Bob Clary]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tests/&lt;br /&gt;
|url=http://www.mozilla.org/js/tests/library.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Layout Engine&lt;br /&gt;
|description=rendering tree construction, layout (reflow), etc.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:jfkthame@gmail.com Jonathan Kew], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:matt.woodrow@gmail.com Matt Woodrow], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:emilio@crisal.io Emilio Cobos Álvarez]&lt;br /&gt;
|peersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/printing/, layout/tables/, layout/tools/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Layout&lt;br /&gt;
|components=Core::Layout, Core::Layout: Block and Inline, Core::Layout: Columns, Core::Layout: Flexbox, Core::Layout: Floats, Core::Layout: Form Controls, Core::Layout: Generated Content, Lists, and Counters, Core::Layout: Grid, Core::Layout: Images, Video, and HTML Frames, Core::Layout: Positioned, Core::Layout: Ruby, Core::Layout: Scrolling and Overflow, Core::Layout: Tables, Core::Layout: Text and Fonts, Core::Print Preview, Core::Printing: Output&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=libjar&lt;br /&gt;
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|ownersemeritus=Taras Glek, Michael Wu&lt;br /&gt;
|peers=[mailto:mnovotny@mozilla.com Michal Novotny], [mailto:vgosu@mozilla.com Valentin Gosu]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libjar&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MathML&lt;br /&gt;
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-tech-mathml&lt;br /&gt;
|source_dirs=layout/mathml/&lt;br /&gt;
|url=http://www.mozilla.org/projects/mathml/&lt;br /&gt;
|components=Core::MathML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Playback&lt;br /&gt;
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).&lt;br /&gt;
|owner=[mailto:jyavenard@mozilla.com Jean-Yves Avenard]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:cpearce@mozilla.com Chris Pearce]&lt;br /&gt;
|peers=[mailto:kinetik@flim.org Matthew Gregan], [mailto:bvandyk@mozilla.com Bryce Van Dyk], [mailto:jolin@mozilla.com John Lin], [mailto:alwu@mozilla.com Alastor Wu], [mailto:jwwang@mozilla.com JW Wang]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=dom/media, media/gmp-clearkey/, media/libcubeb/, media/libnestegg/, media/libogg/, media/libopus/, media/libstagefright/, media/libtheora/, media/libtremor/, media/libvorbis/, media/libvpx/, media/omx-plugin/, media/rlz/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Audio/Video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Transport&lt;br /&gt;
|description=Pluggable transport for real-time media&lt;br /&gt;
|owner=[mailto:ekr@rtfm.com Eric Rescorla]&lt;br /&gt;
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/mtransport&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::WebRTC::Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Memory Allocator&lt;br /&gt;
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=memory/&lt;br /&gt;
|components=Core::DMD, Core::jemalloc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mfbt&lt;br /&gt;
|description=mfbt is a collection of headers, macros, data structures, methods, and other functionality available for use and reuse throughout all Mozilla code (including SpiderMonkey and Gecko more broadly).&lt;br /&gt;
|owner=[mailto:jwalden@mit.edu Jeff Walden]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mfbt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::MFBT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Mozglue&lt;br /&gt;
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd] (mozglue/linker), [mailto:kgupta@mozilla.com Kartikaya Gupta] (mozglue/android), [mailto:nchen@mozilla.com Jim Chen] (mozglue/android), [mailto:aklotz@mozilla.com Aaron Klotz] (Windows Dll Blocklist/Interceptor)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mozglue/&lt;br /&gt;
|components=Core::mozglue&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozilla-toplevel&lt;br /&gt;
|description=The top level directory for the mozilla tree.&lt;br /&gt;
|owner=[[Modules/Firefox_Technical_Leadership|Firefox Technical Leadership module]]&lt;br /&gt;
|ownersemeritus=[mailto:brendan@mozilla.org Brendan Eich]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=tools/README&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MSCOM&lt;br /&gt;
|description=Integration with Microsoft Distributed COM&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|peers=[mailto:jteh@mozilla.com James Teh], [mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/mscom/%&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC: MSCOM}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Necko&lt;br /&gt;
|description=The Mozilla Networking Library&lt;br /&gt;
|owner=[mailto:dd.mozilla@gmail.com  Dragana Damjanovic]&lt;br /&gt;
|peers= [mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:mnovotny@mozilla.com Michal Novotny], [mailto:valentin.gosu@gmail.com Valentin Gosu], [mailto:kershaw@mozilla.com Kershaw Chang], [mailto:juhsu@mozilla.com Junior Hsu]&lt;br /&gt;
|ownersemeritus=[mailto:mcmanus@ducksong.com Patrick McManus], [mailto:cbiesinger@gmail.com Christian Biesinger] |peersemeritus= Shih-Chiang Chien, [mailto:bzbarsky@mit.edu Boris Zbarsky], Steve Workman, Nick Hurley, [mailto:daniel@haxx.se Daniel Stenberg ], [mailto:jduell.mcbugs@gmail.com Jason Duell]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=netwerk/%, netwerk/base/, netwerk/build/, netwerk/cache/, netwerk/dns/, netwerk/locales/, netwerk/mime/, netwerk/protocol/, netwerk/resources/, netwerk/socket/, netwerk/streamconv/, netwerk/system/, netwerk/test/, netwerk/testserver/&lt;br /&gt;
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko&lt;br /&gt;
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NodeJS usage, tools, and style&lt;br /&gt;
|description=Advises on the use of NodeJS and npm packages at build and runtime. Reviews additions/upgrades/removals of vendored npm packages. Works with appropriate teams to maintain automated license and security audits of npm packages. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored npm packages.&lt;br /&gt;
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]&lt;br /&gt;
|peers=[mailto:mbanner@mozilla.com Mark Banner], [mailto:dcoates@mozilla.com Danny Coates], [mailto:khudson@mozilla.com Kate Hudson], [mailto:jlaster@mozilla.com Jason Laster], [mailto:elee@mozilla.com Ed Lee], [mailto:dtownsend@mozilla.com Dave Townsend]&lt;br /&gt;
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate&lt;br /&gt;
|components=Various components&lt;br /&gt;
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev], #nodejs on slack&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NSPR&lt;br /&gt;
|description=Netscape Portable Runtime&lt;br /&gt;
|owner=[mailto:kaie@kuix.de Kai Engert]&lt;br /&gt;
|peers=[mailto:mh@glandium.org Mike Hommey]&lt;br /&gt;
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|group=dev-tech-nspr&lt;br /&gt;
|source_dirs=nsprpub/&lt;br /&gt;
|url=http://www.mozilla.org/projects/nspr/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/reference/html/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/release-notes/&lt;br /&gt;
|components=NSPR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PDF&lt;br /&gt;
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF&#039; format.&lt;br /&gt;
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]&lt;br /&gt;
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:vnicolas@mozilla.com Vivien Nicolas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/pdf/&lt;br /&gt;
|url=https://github.com/mozilla/pdf.js&lt;br /&gt;
|components=Core::PDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Plugins&lt;br /&gt;
|description= NPAPI Plugin support.&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:davidp99@gmail.com David Parks]&lt;br /&gt;
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:jstenback@gmail.com Johnny Stenback], Benjamin Smedberg&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/plugins/, modules/plugin/&lt;br /&gt;
|url=https://wiki.mozilla.org/Plugins&lt;br /&gt;
|components=Core::Plug-ins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=Preference library&lt;br /&gt;
|owner=[mailto:nnethercote@mozilla.com Nicholas Nethercote]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:glandium@mozilla.com Mike Hommey], [mailto:erahm@mozilla.com Eric Rahm], [mailto:kwright@mozilla.com Kristen Wright]&lt;br /&gt;
|peersemeritus=Felipe Gomes&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libpref/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Preferences: Backend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Private Browsing&lt;br /&gt;
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.&lt;br /&gt;
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.net Josh Matthews]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. &lt;br /&gt;
|url=https://wiki.mozilla.org/Private_Browsing&lt;br /&gt;
|components=Firefox::Private Browsing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Privilege Manager&lt;br /&gt;
|description=&amp;quot;caps&amp;quot;&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:dveditz@mozilla.com Dan Veditz]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=caps/&lt;br /&gt;
|url=http://www.mozilla.org/projects/security/components/index.html&lt;br /&gt;
|components=Core::Security: CAPS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Push Notifications&lt;br /&gt;
|description=Push is a way for application developers to send messages to their web applications.&lt;br /&gt;
|owners=[mailto:lina@mozilla.com Lina Cambridge]&lt;br /&gt;
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:mt@lowentropy.net Martin Thomson], [mailto:ddamjanovic@mozilla.com Dragana Damjanovic]&lt;br /&gt;
|peersemeritus=[mailto:nsm.nikhil@gmail.com Nikhil Marathe]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/push&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM: Push Notifications&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=security&lt;br /&gt;
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)&lt;br /&gt;
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:mt@lowentropy.net Martin Thomson]&lt;br /&gt;
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang], [mailto:ttaubert@mozilla.com Tim Taubert]&lt;br /&gt;
|peers=[mailto:kaie@kuix.de Kai Engert], [mailto:ryan.sleevi@gmail.com Ryan Sleevi], [mailto:ekr@rtfm.com Eric Rescorla], [mailto:franziskuskiefer@gmail.com Franziskus Kiefer], [mailto:dueno@redhat.com Daiki Ueno]&lt;br /&gt;
|peersemeritus=[mailto:emaldona@redhat.com Elio Maldonado]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/&lt;br /&gt;
|url=http://mozilla.org/projects/security/pki/&lt;br /&gt;
|components=NSS, JSS, Core::Security, Core::Security: S/MIME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security - Mozilla PSM Glue&lt;br /&gt;
|description=Personal Security Manager&lt;br /&gt;
|owner=[mailto:dkeeler@mozilla.com Dana Keeler]&lt;br /&gt;
|ownersemeritus=[mailto:kaie@kuix.de Kai Engert (2001-2012)]&lt;br /&gt;
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka], [mailto:jc@mozilla.com J.C. Jones], [mailto:fkiefer@mozilla.com Franziskus Kiefer]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=security/manager/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Security: PSM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Static analysis &amp;amp; rewriting for C++&lt;br /&gt;
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.&lt;br /&gt;
|owner=[mailto:andi@mozilla.com Andi-Bogdan Postelnicu]&lt;br /&gt;
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:sfink@mozilla.com Steve Fink], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peersemeritus=[mailto:birunthan@mohanathas.com Birunthan Mohanathas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Rewriting &amp;amp; Analysis&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=storage&lt;br /&gt;
|description=Storage APIs with a SQLite backend&lt;br /&gt;
|owner=[mailto:mak77@bonardo.net Marco Bonardo]&lt;br /&gt;
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=db/sqlite3/, storage/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/Storage&lt;br /&gt;
|components=Toolkit::Storage, Core::SQL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=String&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=string/, xpcom/string/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide&lt;br /&gt;
|components=Core::String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Style System&lt;br /&gt;
|description=CSS style sheet handling; style data computation&lt;br /&gt;
|owner=[mailto:cam@mcc.id.au Cameron McCormack]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:emilio@crisal.io Emilio Cobos Álvarez], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/style/, servo/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System&lt;br /&gt;
|components=Core::CSS Parsing and Computation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=SVG&lt;br /&gt;
|description=Scalable Vector Graphics&lt;br /&gt;
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]&lt;br /&gt;
|group=dev-tech-svg&lt;br /&gt;
|source_dirs=dom/svg/, layout/svg/, dom/smil/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Web/SVG&lt;br /&gt;
|components=Core::SVG&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=View System&lt;br /&gt;
|description=The View Manager is responsible for handling &amp;quot;heavyweight&amp;quot; rendering (some clipping, compositing) and event handling tasks.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=view/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Audio&lt;br /&gt;
|description=Support for the W3C Web Audio API specification.&lt;br /&gt;
|owner=[mailto:padenot@mozilla.com Paul Adenot]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/media/webaudio&lt;br /&gt;
|url=https://wiki.mozilla.org/Web_Audio_API&lt;br /&gt;
|components=Core::Web Audio&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Painting&lt;br /&gt;
|description=painting, display lists, and layer construction&lt;br /&gt;
|owner=[mailto:matt.woodrow@gmail.com Matt Woodrow]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dbaron@dbaron.org David Baron],   [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:mstange@themasta.com Markus Stange], [mailto:mmynttinen@mozilla.com Miko Mynttinen], [mailto:jnicol@mozilla.com Jamie Nicol]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs= layout/painting, the display list and layer related methods on nsIFrame and its subclasses&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout: Web Painting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC&lt;br /&gt;
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=netwerk/sctp (also see submodules &amp;quot;WebRTC Media&amp;quot; and &amp;quot;WebRTC Signaling&amp;quot;)&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC, Core::WebRTC Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebVR&lt;br /&gt;
|description=Gecko&#039;s implementation of WebVR (Virtual Reality) functionality, including API, devices, graphics and integration&lt;br /&gt;
|owner=[mailto:kgilbert@mozilla.com Kearwood (Kip) Gilbert]&lt;br /&gt;
|peers=[mailto:dmu@mozilla.com Daosheng Mu], [mailto:igorostizaga@mozilla.com Imanol Fernández]&lt;br /&gt;
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/vr, gfx/vr&lt;br /&gt;
|url=https://mozvr.com/&lt;br /&gt;
|components=Core::WebVR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget&lt;br /&gt;
|description=Top level Widget&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|ownersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], &lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/, widget/xpwidgets/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Android&lt;br /&gt;
|description=Android widget support&lt;br /&gt;
|owner=[mailto:jwillcox@mozilla.com James Willcox]&lt;br /&gt;
|peers=&lt;br /&gt;
|ownersemeritus=[mailto:blassey.bugs@lassey.us Brad Lassey]&lt;br /&gt;
|group=dev-platforms-mobile&lt;br /&gt;
|source_dirs=widget/android/, embedding/android&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Android&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - GTK&lt;br /&gt;
|description=GTK widget support&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:stransky@redhat.com Martin Stránský]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/&lt;br /&gt;
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/&lt;br /&gt;
|components=Core::Widget: Gtk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Headless&lt;br /&gt;
|description=Headless widget support&lt;br /&gt;
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]&lt;br /&gt;
|peers=&lt;br /&gt;
|ownersemeritus=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/headless/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Headless&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - macOS&lt;br /&gt;
|description= macOS widget support&lt;br /&gt;
|owner=[mailto:spohl@mozilla.com Stephen A Pohl]&lt;br /&gt;
|peers=[mailto:mstange@themasta.com Markus Stange], [mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:b56girard@gmail.com Benoit Girard], [mailto:smichaud@pobox.com Steven Michaud]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/cocoa/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Cocoa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Windows&lt;br /&gt;
|description=Windows widget support&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:robert.strong.bugs@gmail.com Rob Strong], [mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:doug.turner@gmail.com Doug Turner], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref], [mailto:robarnold@cmu.edu Rob Arnold]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/windows/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Win32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XML&lt;br /&gt;
|description=XML in Mozilla, including XML, XHTML, Namespaces in XML, Associating Style Sheets with XML Documents, XML Linking and XML Extras. XML-related things that are not covered by more specific projects.&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-xml&lt;br /&gt;
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/xml/&lt;br /&gt;
|components=Core::XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPApps&lt;br /&gt;
|description=Cross-Platform Applications, mostly Navigator front end and application shell.&lt;br /&gt;
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-apps-seamonkey&lt;br /&gt;
|source_dirs=xpfe/&lt;br /&gt;
|url=http://www.mozilla.org/xpapps/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCOM&lt;br /&gt;
|description=The cross-platform object model and core data structures.&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]&lt;br /&gt;
|peers=[mailto:erahm@mozilla.com Eric Rahm], [mailto:nika@thelayzells.com Nika Layzell], [mailto:kmaglione@mozilla.com Kris Maglione]&lt;br /&gt;
|ownersemeritus=Benjamin Smedberg&lt;br /&gt;
|peersemeritus=[https://mozillians.org/en-US/u/dougt/ Doug Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=startupcache/, xpcom/%, xpcom/base/, xpcom/build/, xpcom/components/, xpcom/ds/, xpcom/glue/, xpcom/proxy/, xpcom/sample/, xpcom/stub/, xpcom/tests/, xpcom/threads/, xpcom/tools/, xpcom/windbgdlg/&lt;br /&gt;
|url=http://developer.mozilla.org/en/XPCOM&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPConnect&lt;br /&gt;
|description=Deep Magic&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:kmaglione@mozilla.com Kris Maglione], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peersemeritus=[mailto:gal@uci.edu Andreas Gal], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=js/xpconnect/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::XPConnect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPIDL&lt;br /&gt;
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.&lt;br /&gt;
|owner=[mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|ownersemeritus=[mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=xpcom/typelib/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xpidl&lt;br /&gt;
http://www.mozilla.org/scriptable&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XSLT Processor&lt;br /&gt;
|description=XSLT transformations processor&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xslt&lt;br /&gt;
|source_dirs=dom/xslt/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html&lt;br /&gt;
|components=Core::XSLT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Windows &lt;br /&gt;
|description=Sandboxing for the Windows platform &lt;br /&gt;
|owner=[mailto:bobowencode@gmail.com Bob Owen] (:bobowen)&lt;br /&gt;
|peers=[mailto:aklotz@mozilla.com Aaron Klotz] (:aklotz), [mailto:jimm@mozilla.com Jim Mathies] (:jimm), [mailto:davidp99@gmail.com David Parks] (:handyman)&lt;br /&gt;
|ownersemeritus=[https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes]&lt;br /&gt;
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/win &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - OSX &lt;br /&gt;
|description=Sandboxing for the OSX platform &lt;br /&gt;
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox/mac &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Linux&lt;br /&gt;
|description=Sandboxing for the Linux platform&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|peers=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/linux&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Crash reporting&lt;br /&gt;
|description=Infrastructure and tools used to generate, submit and process crash reports. This includes the in-tree google-breakpad fork, the crash report generation machinery as well as the host tools used to dump symbols, analyse minidumps and generate stack traces.&lt;br /&gt;
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto] (:gsvelto)&lt;br /&gt;
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=toolkit/crashreporter, toolkit/components/crashes, tools/crashreporter, ipc/glue/CrashReporter*, mobile/android/geckoview/src/main/java/org/mozilla/geckoview/CrashReporter.java&lt;br /&gt;
|url=https://firefox-source-docs.mozilla.org/toolkit/crashreporter/crashreporter/index.html&lt;br /&gt;
|components=Toolkit::Crash Reporting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Submodules===&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Fennec&lt;br /&gt;
|description=Submodule of the build config covering Fennec&#039;s build system in mobile/android.&lt;br /&gt;
|owner=[mailto:nalexander@mozilla.com Nicholas Alexander]&lt;br /&gt;
|peers=Same as Build Config&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Taskgraph&lt;br /&gt;
|description=Support for task-graph generation in decision, action, and cron tasks, including configuration of all tasks including those for CI, nightlies, and releases; as well as Docker and VM images used to execute those tasks.&lt;br /&gt;
|owner=[mailto:mozilla@hocat.ca Tom Prince]&lt;br /&gt;
|peers=[mailto:ahal@mozilla.com Andrew Halberstadt], [mailto:aki@mozilla.com Aki Sasaki], [mailto:bstack@mozilla.com Brian Stack], [mailto:mh@glandium.org Mike Hommey], [mailto:gps@mozilla.com Gregory Szorc], [mailto:jmaher@mozilla.com Joel Maher], [mailto:callek@mozilla.com Justin Wood], [mailto:dustin@mozilla.com Dustin Mitchell]&lt;br /&gt;
|components=Firefox Build System::Task Configuration&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Media&lt;br /&gt;
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:jib@mozilla.com Jan-Ivar Bruaroey], [mailto:dminor@mozilla.com Dan Minor], [mailto:apehrson@mozilla.com Andreas Pehrson], &lt;br /&gt;
|peersemeritus=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc, /dom/media/webrtc, /dom/media/systemservices&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Audio/Video)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Signaling&lt;br /&gt;
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling&lt;br /&gt;
|owner=[mailto:bcampen@mozilla.com Byron Campen]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:abr@mozilla.com Adam Roach], [mailto:rjesup@mozilla.com Randell Jesup], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc/signaling/&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Signaling)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unassigned Bugzilla Components===&lt;br /&gt;
&lt;br /&gt;
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Core::Find Backend&lt;br /&gt;
Core::General&lt;br /&gt;
Core::History: Global&lt;br /&gt;
Core::Image Blocking&lt;br /&gt;
Core::Localization&lt;br /&gt;
Core::Networking: Domain Lists&lt;br /&gt;
Core::Selection&lt;br /&gt;
Core::Serializers&lt;br /&gt;
Core::Spelling checker&lt;br /&gt;
Core::X-remote&lt;br /&gt;
Core::XUL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1228395</id>
		<title>Modules/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1228395"/>
		<updated>2020-06-23T14:57:43Z</updated>

		<summary type="html">&lt;p&gt;Jorend: Add Yulia Startsev as JS peer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Only module owners may edit this page.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
They may:&lt;br /&gt;
&lt;br /&gt;
* update any information about their module except the name of the owner&lt;br /&gt;
* add or remove sub-modules&lt;br /&gt;
* change the owner of a sub-module &lt;br /&gt;
* add emeritus owners or peers&lt;br /&gt;
&lt;br /&gt;
Other changes, including changes of module owner or addition/removal of modules, must be agreed with the Module Ownership Module group, probably via a discussion in [https://www.mozilla.org/about/forums/#governance mozilla.governance].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Accessibility&lt;br /&gt;
|description=Support for platform accessibility APIs. Accessibility APIs are used by 3rd party software like screen readers, screen magnifiers, and voice dictation software, which need information about document content and UI controls, as well as important events like changes of focus.&lt;br /&gt;
|owner=[mailto:jteh@mozilla.com Jamie Teh]&lt;br /&gt;
|peers=[mailto:eitan@monotonous.org Eitan Isaacson], [mailto:jteh@mozilla.com James Teh],  [mailto:mzehe@mozilla.com Marco Zehe], [mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal], [mailto:surkov.alexander@gmail.com Alexander Surkov]&lt;br /&gt;
|peersemeritus=[mailto:dbolter@mozilla.com David Bolter], [mailto:tbsaunde+mozbugs@tbsaunde.org Trevor Saunders], [mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Animation&lt;br /&gt;
|description=Declarative animations: CSS animations, CSS transitions, Web Animations API, and off-main thread animations.&lt;br /&gt;
|owner=[mailto:bbirtles@mozilla.com Brian Birtles] (:birtles)&lt;br /&gt;
|peers=[mailto:hiro@mozilla.com Hiroyuki Ikezoe] (:hiro), [mailto:mwoodrow@mozilla.com Matt Woodrow] (:mattwoodrow)&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=dom/animation; and animation-related and interpolation-related code in layout/style, gfx/layers, servo/components/style and servo/ports/gecko&lt;br /&gt;
|components=Core::DOM::Animation, Core::CSS Transitions and Animations&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Anti-Tracking&lt;br /&gt;
|description=Tracking detection and content-blocking.&lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:dlee@mozilla.com Dimi Lee], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:ewright@mozilla.com Erica Wright], [mailto:xeonchen@gmail.com Gary Chen], [mailto:jhofmann@mozilla.com Johann Hofmann], [mailto:tihuang@mozilla.com Tim Huang]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=toolkit/components/antitracking/, several files under browser/ and netwerk/url-classifier/&lt;br /&gt;
|components=Core::Privacy: Anti-Tracking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Browser WebAPI&lt;br /&gt;
|description=Web API for rendering apps, browser windows and widgets.&lt;br /&gt;
|owner=[mailto:Olli.Pettay@helsinki.fi Olli Pettay]&lt;br /&gt;
|peers=[mailto:fabrice@mozilla.com Fabrice Desré]&lt;br /&gt;
|ownersemeritus=[mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/browser-element/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build and Release Tools&lt;br /&gt;
|description=Tools related to build and release automation and configuration of release builds.&lt;br /&gt;
|owner=[mailto:nthomas@mozilla.com Nick Thomas]&lt;br /&gt;
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]&lt;br /&gt;
|group=release-engineering&lt;br /&gt;
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/&lt;br /&gt;
|url=https://wiki.mozilla.org/ReleaseEngineering&lt;br /&gt;
|components=Release Engineering::*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config&lt;br /&gt;
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.&lt;br /&gt;
|owner=[mailto:mh@glandium.org Mike Hommey] (:glandium)&lt;br /&gt;
|peers=[mailto:mshal@mozilla.com Mike Shal] (:mshal), [mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj), [mailto:dmajor@mozilla.com David Major] (:dmajor), [mailto:rstewart@mozilla.com Ricky Stewart] (:ricky)&lt;br /&gt;
|ownersemeritus=Chris Manchester (2019-2020), Gregory Szorc (2013-2019), Ted Mielczarek (2008-[https://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/ 2013]), Benjamin Smedberg (???-[http://benjamin.smedbergs.us/blog/2008-04-30/more-changing-of-the-guard-ted-mielczarek/ 2008]), &lt;br /&gt;
|peersemeritus=Ted Mielczarek, Ralph Giles, Gregory Szorc, Chris Manchester&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=build/, config/, python/mozbuild, tools/cross-commit, tools/cvs2hg-import.py, tools/cvsmgmt/, tools/elf-dynstr-gc/, tools/trees.pl, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=http://www.mozilla.org/build/&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Code Analysis and Debugging Tools&lt;br /&gt;
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-performance&lt;br /&gt;
|source_dirs=tools/codesighs/, tools/debug/, tools/dreftool/, tools/dumpdeps/, tools/jprof/, tools/leak-gauge/, tools/leaky/, tools/memory/, tools/module-deps/, tools/performance/, tools/post_compile/, tools/preloader/, tools/rb/, tools/reorder/, tools/trace-malloc/, tools/uuiddeps/, &lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content Security&lt;br /&gt;
|description=Native content-based security features enforced in the ContentSecurityManager, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Referrer Policy, Subresource Integrity (SRI), Cross-Origin Resource Sharing (CORS) and top-level data: URI blocking.&lt;br /&gt;
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peers=[mailto:tvyas@mozilla.com Tanvi Vyas], [mailto:dveditz@mozilla.com Dan Veditz], [mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:jkt@mozilla.com Jonathan Kingston], [mailto:tnguyen@mozilla.com Thomas Nguyen]&lt;br /&gt;
|peersemeritus=[mailto:mozilla@sidstamm.com Sid Stamm], [mailto:jonas@sicking.cc Jonas Sicking], François Marier&lt;br /&gt;
|group=dev-security&lt;br /&gt;
|source_dirs=dom/security&lt;br /&gt;
|components=Core::DOM: Security&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cookies&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:amarchesini@mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:honzab.moz@firemni.cz Honza Bambas] &lt;br /&gt;
|ownersemeritus=Monica Chew&lt;br /&gt;
|peersemeritus=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=netwerk/cookie/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Networking: Cookies&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Permissions&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:honzab.moz@firemni.cz Honza Bambas]&lt;br /&gt;
|ownersemeritus=Monica Chew&lt;br /&gt;
|peersemeritus=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=extensions/permissions/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core :: Permission Manager&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cycle Collector&lt;br /&gt;
|description=Code to break and collect objects within reference cycles&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]&lt;br /&gt;
|peers=Peter Van der Beken, Olli Pettay, David Baron&lt;br /&gt;
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=C++/Rust usage, tools, and style&lt;br /&gt;
|description=Aspects of C++ use such as language feature usage, standard library versions/usage, compiler/toolchain versions, formatting and naming style, and aspects of Rust use as needs arise&lt;br /&gt;
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:bballo@mozilla.com Botond Ballo], [mailto:glandium@mozilla.com Mike Hommey], [mailto:jwalden@mozilla.com Jeff Walden], [mailto:sgiesecke@mozilla.com Simon Giesecke]&lt;br /&gt;
|source_dirs=non-third-party C++ and Rust code in the tree&lt;br /&gt;
|components=Various components&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=docshell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peers=[mailto:peterv@propagandism.org Peter Van der Beken], [mailto:afarre@mozilla.com Andreas Farre]&lt;br /&gt;
|ownersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:justin.lebar@gmail.com Justin Lebar], [mailto:sawang@mozilla.com Samael Wang], [mailto:kyle@nonpolynomial.com Kyle Machulis]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=docshell/, uriloader/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Document Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Document Object Model&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:hsivonen@iki.fi Henri Sivonen], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:baku@mozilla.com Andrea Marchesini],&lt;br /&gt;
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:nika@thelayzells.com Nika Layzell], [mailto:afarre@mozilla.com Andreas Farre], [mailto:emilio@crisal.io Emilio Cobos]&lt;br /&gt;
|ownersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|peersemeritus=[mailto:justin.lebar@gmail.com Justin Lebar], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:bent.mozilla@gmail.com Ben Turner], [mailto:mounir@lamouri.fr Mounir Lamouri], [mailto:me@kylehuey.com Kyle Huey], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:ben@wanderview.com Ben Kelly], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:kyle@nonpolynomial.com Kyle Machulis], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/*, except directories covered by other modules&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core &amp;amp; HTML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=DOM File&lt;br /&gt;
|description=DOM Blob, File and FileSystem APIs &lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:olli@pettay.fi Olli Pettay]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/file, dom/filesystem&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: File&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Event Handling&lt;br /&gt;
|description=DOM Events and Event Handling &lt;br /&gt;
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:echen@mozilla.com Edgar Chen]&lt;br /&gt;
|peersemeritus=[mailto:sshih@mozilla.com Stone Shih]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/events and event handling related code elsewhere &lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: Events, Core::DOM: UI Events &amp;amp; Focus Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Workers&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:asuth@mozilla.com Andrew Sutherland], [mailto:ytausky@mozilla.com Yaron Tausky]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/workers/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_web_workers&lt;br /&gt;
|components=Core::DOM: Workers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IndexedDB&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|peers=[mailto:btseng@mozilla.com Bevis Tseng], [mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/indexedDB/&lt;br /&gt;
|url=https://developer.mozilla.org/en/IndexedDB&lt;br /&gt;
|components=Core::DOM: IndexedDB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Editor&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=editor/&lt;br /&gt;
|url=http://www.mozilla.org/editor/&lt;br /&gt;
|components=Core::Editor&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Gecko Profiler&lt;br /&gt;
|description=Gecko&#039;s built-in profiler&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:nnethercote@mozilla.com Nicholas Nethercote], [mailto:gsquelart@mozilla.com Gerald Squelart], [mailto:gtatum@mozilla.com Greg Tatum], [mailto:canaltinova@mozilla.com Nazim Can Altinova], [mailto:jseward@mozilla.com Julian Seward] (LUL), [mailto:kvijayan@mozilla.com Kannan Vijayan] (JS integration), [mailto:brennie@mozilla.com Barret Rennie] (Screenshots).&lt;br /&gt;
|ownersemeritus=[mailto:b56girard@gmail.com Benoit Girard]&lt;br /&gt;
|peersemeritus=[mailto:shu@mozilla.com Shu-yu Guo] (JS integration), [mailto:tlee@mozilla.com Thinker Lee] (TaskTracer), [mailto:cyu@mozilla.com Cervantes Yu] (TaskTracer)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=tools/profiler/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler&lt;br /&gt;
|components=Core::Gecko Profiler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Global Key Bindings&lt;br /&gt;
|description=Global hot keys in Mozilla for the browser, editor, mail-news and widgets. Does not include underlined menu accelerators and the like, as those are part of i18n.&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=dom/events (and platform specific directories under it)&lt;br /&gt;
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html&lt;br /&gt;
|components=Core::Keyboard: Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Graphics&lt;br /&gt;
|description=Mozilla graphics API&lt;br /&gt;
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bas.schouten@live.nl Bas Schouten](Layers, Windows), [mailto:jgilbert@mozilla.com Jeff Gilbert](WebGL, ANGLE), [mailto:mwoodrow@mozilla.com Matt Woodrow](Layers API), [mailto:jfkthame@googlemail.com Jonathan Kew](text/fonts), [mailto:nsilva@mozilla.com  Nicolas Silva](MozSurface), [mailto:ncameron@mozilla.com Nick Cameron], [mailto:sikeda@mozilla.com Sotaro Ikeda](B2G), [mailto:jnicol@mozilla.com Jamie Nicol](Android), [mailto:snorp@mozilla.com James Willcox](Android), [mailto:mstange@themasta.com Markus Stange](OS X), [mailto:lsalzman@mozilla.com Lee Salzman](Skia, Canvas2D), [mailto:rhunt@mozilla.com Ryan Hunt](OMTP), [mailto:gwatson@mozilla.com Glenn Watson ](WebRender), [mailto:dmalyshau@mozilla.com Dzmitry Malyshau](WebRender)&lt;br /&gt;
|peersemeritus=[mailto:bgirard@mozilla.com Benoit Girard](Compositor, Performance), [mailto:ajuma.bugzilla@alijuma.com Ali Juma], [mailto:george@mozilla.com George Wright](Canvas2D), [mailto:mchang@mozilla.com Mason Chang], [mailto:dvander@mozilla.com David Anderson], [mailto:clord@mozilla.com Christopher Lord], [mailto:jdaggett@mozilla.com John Daggett](text/fonts), [mailto:bjacob@mozilla.com Benoit Jacob](gfx/gl), [mailto:jdrew@mozilla.com Joe Drew], [mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/, dom/canvas/&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch&lt;br /&gt;
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::Graphics: WebRender, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebGPU (Graphics submodule)&lt;br /&gt;
|description=WebGPU implementation&lt;br /&gt;
|owner=[mailto:dmalyshau@mozilla.com Dzmitry Malyshau]&lt;br /&gt;
|peers=[mailto:josh@joshgroves.com Joshua Groves], [mailto:jgilbert@mozilla.com Jeff Gilbert],&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/webgpu&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/WebGPU&lt;br /&gt;
|components=Core::Graphics::WebGPU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=APZ (Graphics submodule)&lt;br /&gt;
|description=Asynchronous panning and zooming&lt;br /&gt;
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:tnikkel@mozilla.com Timothy Nikkel], [mailto:rhunt@mozilla.com Ryan Hunt], [mailto:mstange@mozilla.com Markus Stange]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/layers/apz&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/APZ&lt;br /&gt;
|components=Core::Panning and Zooming&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Moz2D (Graphics submodule)&lt;br /&gt;
|description=Platform independent 2D graphics API&lt;br /&gt;
|owner=[mailto:bschouten@mozilla.com Bas Schouten]&lt;br /&gt;
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/2d&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D&lt;br /&gt;
|components=Core::Graphics&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Legacy HTML Parser&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:rbs@maths.uq.edu.au rbs@maths.uq.edu.au]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|source_dirs=parser/htmlparser&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/doc/parser.html&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HAL&lt;br /&gt;
|description=Hardware Abstraction Layer&lt;br /&gt;
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=hal/&lt;br /&gt;
|components=Core::Hardware Abstraction Layer (HAL)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HTML Parser&lt;br /&gt;
|description=The HTML Parser transforms HTML source code into a DOM. It conforms to the HTML specification, and is mostly translated automatically from Java to C++.&lt;br /&gt;
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|peers=[mailto:wchen@mozilla.com William Chen]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=parser/html&lt;br /&gt;
|url=http://about.validator.nu/&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=I18N Library&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:hsivonen@hsivonen.fi Henri Sivonen (encoding)], [mailto:jfkthame@gmail.com Jonathan Kew (except to encoding)]&lt;br /&gt;
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura], [mailto:gandalf@aviary.pl Zibi Braniecki], [mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|group=dev-i18n&lt;br /&gt;
|source_dirs=intl/&lt;br /&gt;
|url=http://mozilla.org/projects/intl/index.html&lt;br /&gt;
|components=Core::Internationalization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=ImageLib&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:tnikkel@gmail.com Timothy Nikkel]&lt;br /&gt;
|peers=[mailto:aosmond@mozilla.com Andrew Osmond], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar]&lt;br /&gt;
|peersemeritus=[mailto:seth.bugzilla@blackhail.net Seth Fowler], [mailto:netzen@gmail.com Brian Bondy], [mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::ImageLib&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IPC&lt;br /&gt;
|description=Native message-passing between threads and processes&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|ownersemeritus=Chris Jones, Bill McCloskey&lt;br /&gt;
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:jmathies@mozilla.com Jim Mathies], [mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|peersemeritus=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bent.mozilla@gmail.com Ben Turner], David Anderson, Kan-Ru Chen, Bevis Tseng, Ben Kelly&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript&lt;br /&gt;
|description=JavaScript engine (SpiderMonkey)&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:jdemooij@mozilla.com Jan de Mooij], André Bargull, [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:jcoppeard@mozilla.com Jon Coppeard], [mailto:sphink@gmail.com Steve Fink], [mailto:arai.unmht@gmail.com Tooru Fujisawa], [mailto:evilpies@gmail.com Tom Schuster], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:jwalden@mit.edu Jeff Walden], [mailto:ystartsev@mozilla.com Yulia Startsev], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:till@tillschneidereit.net Till Schneidereit], [mailto:nfitzgerald@mozilla.com Nick Fitzgerald], [mailto:nnethercote@mozilla.com Nick Nethercote], [mailto:luke@mozilla.com Luke Wagner], [mailto:sunfish@mozilla.com Dan Gohman], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:nmatsakis@mozilla.com Niko Matsakis], [mailto:ejpbruel@mozilla.com Eddy Bruel], [mailto:danderson@mozilla.com David Anderson], [mailto:igor@mir2.org Igor Bukanov], Andreas Gal, [mailto:efaust@mozilla.com Eric Faust], [mailto:khyperia@mozilla.com Ashley Hauck]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey,&lt;br /&gt;
http://developer.mozilla.org/en/docs/About_JavaScript&lt;br /&gt;
|components=Core::JavaScript Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript JIT&lt;br /&gt;
|description=JavaScript engine&#039;s JIT compilers (IonMonkey, Baseline)&lt;br /&gt;
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]&lt;br /&gt;
|peers=[mailto:bbouvier@mozilla.com Benjamin Bouvier], [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:mgaudet@mozilla.com Matthew Gaudet], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:iireland@mozilla.com Iain Ireland], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:evilpies@gmail.com  Tom Schuster], [mailto:sstangl@mozilla.com Sean Stangl], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:luke@mozilla.com Luke Wagner]&lt;br /&gt;
|peersemeritus=[mailto:danderson@mozilla.com David Anderson], [mailto:hv1989@gmail.com Hannes Verschore]&lt;br /&gt;
|group=dev-tech-js-engine-internals&lt;br /&gt;
|source_dirs=js/src/jit&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey&lt;br /&gt;
|components=Core::JavaScript Engine: JIT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=jsat&lt;br /&gt;
|description=Javascript screen reader that is used in Android and B2G&lt;br /&gt;
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]&lt;br /&gt;
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/jsat/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-ctypes&lt;br /&gt;
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src/ctypes/&lt;br /&gt;
|url=https://wiki.mozilla.org/JSctypes&lt;br /&gt;
|components=Core::js-ctypes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-tests&lt;br /&gt;
|description=JavaScript test suite&lt;br /&gt;
|owner=[mailto:bclary@bclary.com Bob Clary]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tests/&lt;br /&gt;
|url=http://www.mozilla.org/js/tests/library.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Layout Engine&lt;br /&gt;
|description=rendering tree construction, layout (reflow), etc.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:jfkthame@gmail.com Jonathan Kew], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:matt.woodrow@gmail.com Matt Woodrow], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:emilio@crisal.io Emilio Cobos Álvarez]&lt;br /&gt;
|peersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/printing/, layout/tables/, layout/tools/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Layout&lt;br /&gt;
|components=Core::Layout, Core::Layout: Block and Inline, Core::Layout: Columns, Core::Layout: Flexbox, Core::Layout: Floats, Core::Layout: Form Controls, Core::Layout: Generated Content, Lists, and Counters, Core::Layout: Grid, Core::Layout: Images, Video, and HTML Frames, Core::Layout: Positioned, Core::Layout: Ruby, Core::Layout: Scrolling and Overflow, Core::Layout: Tables, Core::Layout: Text and Fonts, Core::Print Preview, Core::Printing: Output&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=libjar&lt;br /&gt;
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|ownersemeritus=Taras Glek, Michael Wu&lt;br /&gt;
|peers=[mailto:mnovotny@mozilla.com Michal Novotny], [mailto:vgosu@mozilla.com Valentin Gosu]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libjar&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MathML&lt;br /&gt;
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-tech-mathml&lt;br /&gt;
|source_dirs=layout/mathml/&lt;br /&gt;
|url=http://www.mozilla.org/projects/mathml/&lt;br /&gt;
|components=Core::MathML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Playback&lt;br /&gt;
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).&lt;br /&gt;
|owner=[mailto:jyavenard@mozilla.com Jean-Yves Avenard]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:cpearce@mozilla.com Chris Pearce]&lt;br /&gt;
|peers=[mailto:kinetik@flim.org Matthew Gregan], [mailto:bvandyk@mozilla.com Bryce Van Dyk], [mailto:jolin@mozilla.com John Lin], [mailto:alwu@mozilla.com Alastor Wu], [mailto:jwwang@mozilla.com JW Wang]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=dom/media, media/gmp-clearkey/, media/libcubeb/, media/libnestegg/, media/libogg/, media/libopus/, media/libstagefright/, media/libtheora/, media/libtremor/, media/libvorbis/, media/libvpx/, media/omx-plugin/, media/rlz/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Audio/Video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Transport&lt;br /&gt;
|description=Pluggable transport for real-time media&lt;br /&gt;
|owner=[mailto:ekr@rtfm.com Eric Rescorla]&lt;br /&gt;
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/mtransport&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::WebRTC::Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Memory Allocator&lt;br /&gt;
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=memory/&lt;br /&gt;
|components=Core::DMD, Core::jemalloc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mfbt&lt;br /&gt;
|description=mfbt is a collection of headers, macros, data structures, methods, and other functionality available for use and reuse throughout all Mozilla code (including SpiderMonkey and Gecko more broadly).&lt;br /&gt;
|owner=[mailto:jwalden@mit.edu Jeff Walden]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mfbt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::MFBT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Mozglue&lt;br /&gt;
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd] (mozglue/linker), [mailto:kgupta@mozilla.com Kartikaya Gupta] (mozglue/android), [mailto:nchen@mozilla.com Jim Chen] (mozglue/android), [mailto:aklotz@mozilla.com Aaron Klotz] (Windows Dll Blocklist/Interceptor)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mozglue/&lt;br /&gt;
|components=Core::mozglue&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozilla-toplevel&lt;br /&gt;
|description=The top level directory for the mozilla tree.&lt;br /&gt;
|owner=[[Modules/Firefox_Technical_Leadership|Firefox Technical Leadership module]]&lt;br /&gt;
|ownersemeritus=[mailto:brendan@mozilla.org Brendan Eich]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=tools/README&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MSCOM&lt;br /&gt;
|description=Integration with Microsoft Distributed COM&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|peers=[mailto:jteh@mozilla.com James Teh], [mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/mscom/%&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC: MSCOM}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Necko&lt;br /&gt;
|description=The Mozilla Networking Library&lt;br /&gt;
|owner=[mailto:dd.mozilla@gmail.com  Dragana Damjanovic]&lt;br /&gt;
|peers= [mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:mnovotny@mozilla.com Michal Novotny], [mailto:valentin.gosu@gmail.com Valentin Gosu], [mailto:kershaw@mozilla.com Kershaw Chang], [mailto:juhsu@mozilla.com Junior Hsu]&lt;br /&gt;
|ownersemeritus=[mailto:mcmanus@ducksong.com Patrick McManus], [mailto:cbiesinger@gmail.com Christian Biesinger] |peersemeritus= Shih-Chiang Chien, [mailto:bzbarsky@mit.edu Boris Zbarsky], Steve Workman, Nick Hurley, [mailto:daniel@haxx.se Daniel Stenberg ], [mailto:jduell.mcbugs@gmail.com Jason Duell]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=netwerk/%, netwerk/base/, netwerk/build/, netwerk/cache/, netwerk/dns/, netwerk/locales/, netwerk/mime/, netwerk/protocol/, netwerk/resources/, netwerk/socket/, netwerk/streamconv/, netwerk/system/, netwerk/test/, netwerk/testserver/&lt;br /&gt;
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko&lt;br /&gt;
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NodeJS usage, tools, and style&lt;br /&gt;
|description=Advises on the use of NodeJS and npm packages at build and runtime. Reviews additions/upgrades/removals of vendored npm packages. Works with appropriate teams to maintain automated license and security audits of npm packages. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored npm packages.&lt;br /&gt;
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]&lt;br /&gt;
|peers=[mailto:mbanner@mozilla.com Mark Banner], [mailto:dcoates@mozilla.com Danny Coates], [mailto:khudson@mozilla.com Kate Hudson], [mailto:jlaster@mozilla.com Jason Laster], [mailto:elee@mozilla.com Ed Lee], [mailto:dtownsend@mozilla.com Dave Townsend]&lt;br /&gt;
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate&lt;br /&gt;
|components=Various components&lt;br /&gt;
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev], #nodejs on slack&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NSPR&lt;br /&gt;
|description=Netscape Portable Runtime&lt;br /&gt;
|owner=[mailto:kaie@kuix.de Kai Engert]&lt;br /&gt;
|peers=[mailto:mh@glandium.org Mike Hommey]&lt;br /&gt;
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|group=dev-tech-nspr&lt;br /&gt;
|source_dirs=nsprpub/&lt;br /&gt;
|url=http://www.mozilla.org/projects/nspr/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/reference/html/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/release-notes/&lt;br /&gt;
|components=NSPR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PDF&lt;br /&gt;
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF&#039; format.&lt;br /&gt;
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]&lt;br /&gt;
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:vnicolas@mozilla.com Vivien Nicolas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/pdf/&lt;br /&gt;
|url=https://github.com/mozilla/pdf.js&lt;br /&gt;
|components=Core::PDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Plugins&lt;br /&gt;
|description= NPAPI Plugin support.&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:davidp99@gmail.com David Parks]&lt;br /&gt;
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:jstenback@gmail.com Johnny Stenback], Benjamin Smedberg&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/plugins/, modules/plugin/&lt;br /&gt;
|url=https://wiki.mozilla.org/Plugins&lt;br /&gt;
|components=Core::Plug-ins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=Preference library&lt;br /&gt;
|owner=[mailto:nnethercote@mozilla.com Nicholas Nethercote]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:glandium@mozilla.com Mike Hommey], [mailto:erahm@mozilla.com Eric Rahm], [mailto:kwright@mozilla.com Kristen Wright]&lt;br /&gt;
|peersemeritus=Felipe Gomes&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libpref/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Preferences: Backend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Private Browsing&lt;br /&gt;
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.&lt;br /&gt;
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.net Josh Matthews]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. &lt;br /&gt;
|url=https://wiki.mozilla.org/Private_Browsing&lt;br /&gt;
|components=Firefox::Private Browsing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Privilege Manager&lt;br /&gt;
|description=&amp;quot;caps&amp;quot;&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:dveditz@mozilla.com Dan Veditz]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=caps/&lt;br /&gt;
|url=http://www.mozilla.org/projects/security/components/index.html&lt;br /&gt;
|components=Core::Security: CAPS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Push Notifications&lt;br /&gt;
|description=Push is a way for application developers to send messages to their web applications.&lt;br /&gt;
|owners=[mailto:lina@mozilla.com Lina Cambridge]&lt;br /&gt;
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:mt@lowentropy.net Martin Thomson], [mailto:ddamjanovic@mozilla.com Dragana Damjanovic]&lt;br /&gt;
|peersemeritus=[mailto:nsm.nikhil@gmail.com Nikhil Marathe]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/push&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM: Push Notifications&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=security&lt;br /&gt;
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)&lt;br /&gt;
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:mt@lowentropy.net Martin Thomson]&lt;br /&gt;
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang], [mailto:ttaubert@mozilla.com Tim Taubert]&lt;br /&gt;
|peers=[mailto:kaie@kuix.de Kai Engert], [mailto:ryan.sleevi@gmail.com Ryan Sleevi], [mailto:ekr@rtfm.com Eric Rescorla], [mailto:franziskuskiefer@gmail.com Franziskus Kiefer], [mailto:dueno@redhat.com Daiki Ueno]&lt;br /&gt;
|peersemeritus=[mailto:emaldona@redhat.com Elio Maldonado]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/&lt;br /&gt;
|url=http://mozilla.org/projects/security/pki/&lt;br /&gt;
|components=NSS, JSS, Core::Security, Core::Security: S/MIME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security - Mozilla PSM Glue&lt;br /&gt;
|description=Personal Security Manager&lt;br /&gt;
|owner=[mailto:dkeeler@mozilla.com Dana Keeler]&lt;br /&gt;
|ownersemeritus=[mailto:kaie@kuix.de Kai Engert (2001-2012)]&lt;br /&gt;
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka], [mailto:jc@mozilla.com J.C. Jones], [mailto:fkiefer@mozilla.com Franziskus Kiefer]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=security/manager/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Security: PSM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Static analysis &amp;amp; rewriting for C++&lt;br /&gt;
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.&lt;br /&gt;
|owner=[mailto:andi@mozilla.com Andi-Bogdan Postelnicu]&lt;br /&gt;
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:sfink@mozilla.com Steve Fink], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:eakhgari@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peersemeritus=[mailto:birunthan@mohanathas.com Birunthan Mohanathas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Rewriting &amp;amp; Analysis&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=storage&lt;br /&gt;
|description=Storage APIs with a SQLite backend&lt;br /&gt;
|owner=[mailto:mak77@bonardo.net Marco Bonardo]&lt;br /&gt;
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=db/sqlite3/, storage/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/Storage&lt;br /&gt;
|components=Toolkit::Storage, Core::SQL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=String&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=string/, xpcom/string/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide&lt;br /&gt;
|components=Core::String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Style System&lt;br /&gt;
|description=CSS style sheet handling; style data computation&lt;br /&gt;
|owner=[mailto:cam@mcc.id.au Cameron McCormack]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:emilio@crisal.io Emilio Cobos Álvarez], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/style/, servo/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System&lt;br /&gt;
|components=Core::CSS Parsing and Computation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=SVG&lt;br /&gt;
|description=Scalable Vector Graphics&lt;br /&gt;
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]&lt;br /&gt;
|group=dev-tech-svg&lt;br /&gt;
|source_dirs=dom/svg/, layout/svg/, dom/smil/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Web/SVG&lt;br /&gt;
|components=Core::SVG&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=View System&lt;br /&gt;
|description=The View Manager is responsible for handling &amp;quot;heavyweight&amp;quot; rendering (some clipping, compositing) and event handling tasks.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=view/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Audio&lt;br /&gt;
|description=Support for the W3C Web Audio API specification.&lt;br /&gt;
|owner=[mailto:padenot@mozilla.com Paul Adenot]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/media/webaudio&lt;br /&gt;
|url=https://wiki.mozilla.org/Web_Audio_API&lt;br /&gt;
|components=Core::Web Audio&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Painting&lt;br /&gt;
|description=painting, display lists, and layer construction&lt;br /&gt;
|owner=[mailto:matt.woodrow@gmail.com Matt Woodrow]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dbaron@dbaron.org David Baron],   [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:mstange@themasta.com Markus Stange], [mailto:mmynttinen@mozilla.com Miko Mynttinen], [mailto:jnicol@mozilla.com Jamie Nicol]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs= layout/painting, the display list and layer related methods on nsIFrame and its subclasses&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout: Web Painting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC&lt;br /&gt;
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=netwerk/sctp (also see submodules &amp;quot;WebRTC Media&amp;quot; and &amp;quot;WebRTC Signaling&amp;quot;)&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC, Core::WebRTC Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebVR&lt;br /&gt;
|description=Gecko&#039;s implementation of WebVR (Virtual Reality) functionality, including API, devices, graphics and integration&lt;br /&gt;
|owner=[mailto:kgilbert@mozilla.com Kearwood (Kip) Gilbert]&lt;br /&gt;
|peers=[mailto:dmu@mozilla.com Daosheng Mu], [mailto:igorostizaga@mozilla.com Imanol Fernández]&lt;br /&gt;
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/vr, gfx/vr&lt;br /&gt;
|url=https://mozvr.com/&lt;br /&gt;
|components=Core::WebVR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget&lt;br /&gt;
|description=Top level Widget&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|ownersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], &lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/, widget/xpwidgets/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Android&lt;br /&gt;
|description=Android widget support&lt;br /&gt;
|owner=[mailto:jwillcox@mozilla.com James Willcox]&lt;br /&gt;
|peers=&lt;br /&gt;
|ownersemeritus=[mailto:blassey.bugs@lassey.us Brad Lassey]&lt;br /&gt;
|group=dev-platforms-mobile&lt;br /&gt;
|source_dirs=widget/android/, embedding/android&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Android&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - GTK&lt;br /&gt;
|description=GTK widget support&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:stransky@redhat.com Martin Stránský]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/&lt;br /&gt;
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/&lt;br /&gt;
|components=Core::Widget: Gtk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Headless&lt;br /&gt;
|description=Headless widget support&lt;br /&gt;
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]&lt;br /&gt;
|peers=&lt;br /&gt;
|ownersemeritus=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/headless/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Headless&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - macOS&lt;br /&gt;
|description= macOS widget support&lt;br /&gt;
|owner=[mailto:spohl@mozilla.com Stephen A Pohl]&lt;br /&gt;
|peers=[mailto:mstange@themasta.com Markus Stange], [mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:b56girard@gmail.com Benoit Girard], [mailto:smichaud@pobox.com Steven Michaud]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/cocoa/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Cocoa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Windows&lt;br /&gt;
|description=Windows widget support&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:robert.strong.bugs@gmail.com Rob Strong], [mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:doug.turner@gmail.com Doug Turner], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref], [mailto:robarnold@cmu.edu Rob Arnold]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/windows/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Win32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XML&lt;br /&gt;
|description=XML in Mozilla, including XML, XHTML, Namespaces in XML, Associating Style Sheets with XML Documents, XML Linking and XML Extras. XML-related things that are not covered by more specific projects.&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-xml&lt;br /&gt;
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/xml/&lt;br /&gt;
|components=Core::XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPApps&lt;br /&gt;
|description=Cross-Platform Applications, mostly Navigator front end and application shell.&lt;br /&gt;
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-apps-seamonkey&lt;br /&gt;
|source_dirs=xpfe/&lt;br /&gt;
|url=http://www.mozilla.org/xpapps/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCOM&lt;br /&gt;
|description=The cross-platform object model and core data structures.&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]&lt;br /&gt;
|peers=[mailto:erahm@mozilla.com Eric Rahm], [mailto:nika@thelayzells.com Nika Layzell], [mailto:kmaglione@mozilla.com Kris Maglione]&lt;br /&gt;
|ownersemeritus=Benjamin Smedberg&lt;br /&gt;
|peersemeritus=[https://mozillians.org/en-US/u/dougt/ Doug Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=startupcache/, xpcom/%, xpcom/base/, xpcom/build/, xpcom/components/, xpcom/ds/, xpcom/glue/, xpcom/proxy/, xpcom/sample/, xpcom/stub/, xpcom/tests/, xpcom/threads/, xpcom/tools/, xpcom/windbgdlg/&lt;br /&gt;
|url=http://developer.mozilla.org/en/XPCOM&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPConnect&lt;br /&gt;
|description=Deep Magic&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:kmaglione@mozilla.com Kris Maglione], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peersemeritus=[mailto:gal@uci.edu Andreas Gal], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=js/xpconnect/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::XPConnect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPIDL&lt;br /&gt;
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.&lt;br /&gt;
|owner=[mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|ownersemeritus=[mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=xpcom/typelib/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xpidl&lt;br /&gt;
http://www.mozilla.org/scriptable&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XSLT Processor&lt;br /&gt;
|description=XSLT transformations processor&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xslt&lt;br /&gt;
|source_dirs=dom/xslt/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html&lt;br /&gt;
|components=Core::XSLT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Windows &lt;br /&gt;
|description=Sandboxing for the Windows platform &lt;br /&gt;
|owner=[mailto:bobowencode@gmail.com Bob Owen] (:bobowen)&lt;br /&gt;
|peers=[mailto:aklotz@mozilla.com Aaron Klotz] (:aklotz), [mailto:jimm@mozilla.com Jim Mathies] (:jimm), [mailto:davidp99@gmail.com David Parks] (:handyman)&lt;br /&gt;
|ownersemeritus=[https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes]&lt;br /&gt;
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/win &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - OSX &lt;br /&gt;
|description=Sandboxing for the OSX platform &lt;br /&gt;
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox/mac &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Linux&lt;br /&gt;
|description=Sandboxing for the Linux platform&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|peers=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/linux&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Crash reporting&lt;br /&gt;
|description=Infrastructure and tools used to generate, submit and process crash reports. This includes the in-tree google-breakpad fork, the crash report generation machinery as well as the host tools used to dump symbols, analyse minidumps and generate stack traces.&lt;br /&gt;
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto] (:gsvelto)&lt;br /&gt;
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=toolkit/crashreporter, toolkit/components/crashes, tools/crashreporter, ipc/glue/CrashReporter*, mobile/android/geckoview/src/main/java/org/mozilla/geckoview/CrashReporter.java&lt;br /&gt;
|url=https://firefox-source-docs.mozilla.org/toolkit/crashreporter/crashreporter/index.html&lt;br /&gt;
|components=Toolkit::Crash Reporting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Submodules===&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Fennec&lt;br /&gt;
|description=Submodule of the build config covering Fennec&#039;s build system in mobile/android.&lt;br /&gt;
|owner=[mailto:nalexander@mozilla.com Nicholas Alexander]&lt;br /&gt;
|peers=Same as Build Config&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Taskgraph&lt;br /&gt;
|description=Support for task-graph generation in decision, action, and cron tasks, including configuration of all tasks including those for CI, nightlies, and releases; as well as Docker and VM images used to execute those tasks.&lt;br /&gt;
|owner=[mailto:mozilla@hocat.ca Tom Prince]&lt;br /&gt;
|peers=[mailto:ahal@mozilla.com Andrew Halberstadt], [mailto:aki@mozilla.com Aki Sasaki], [mailto:bstack@mozilla.com Brian Stack], [mailto:mh@glandium.org Mike Hommey], [mailto:gps@mozilla.com Gregory Szorc], [mailto:jmaher@mozilla.com Joel Maher], [mailto:callek@mozilla.com Justin Wood], [mailto:dustin@mozilla.com Dustin Mitchell]&lt;br /&gt;
|components=Firefox Build System::Task Configuration&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Media&lt;br /&gt;
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:jib@mozilla.com Jan-Ivar Bruaroey], [mailto:dminor@mozilla.com Dan Minor], [mailto:apehrson@mozilla.com Andreas Pehrson], &lt;br /&gt;
|peersemeritus=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc, /dom/media/webrtc, /dom/media/systemservices&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Audio/Video)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Signaling&lt;br /&gt;
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling&lt;br /&gt;
|owner=[mailto:bcampen@mozilla.com Byron Campen]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:abr@mozilla.com Adam Roach], [mailto:rjesup@mozilla.com Randell Jesup], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc/signaling/&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Signaling)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unassigned Bugzilla Components===&lt;br /&gt;
&lt;br /&gt;
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Core::Find Backend&lt;br /&gt;
Core::General&lt;br /&gt;
Core::History: Global&lt;br /&gt;
Core::Image Blocking&lt;br /&gt;
Core::Localization&lt;br /&gt;
Core::Networking: Domain Lists&lt;br /&gt;
Core::Selection&lt;br /&gt;
Core::Serializers&lt;br /&gt;
Core::Spelling checker&lt;br /&gt;
Core::X-remote&lt;br /&gt;
Core::XUL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1213988</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1213988"/>
		<updated>2019-06-19T18:01:30Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Proposed */ why rust&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code in and around Firefox. &lt;br /&gt;
&lt;br /&gt;
Rust support has been required on all platforms since Firefox 54, and the first major Rust components were shipped in Firefox 56 (encoding_rs) and 57 (Stylo). Moving forward, the goal of Oxidation is to make it easier and more pleasant to use Rust in Firefox, and correspondingly to increase the amount of Rust code in Firefox.&lt;br /&gt;
&lt;br /&gt;
This page is intended to serve as the starting point for all matters relating to Rust code in Firefox: the what, the why, and the how.&lt;br /&gt;
&lt;br /&gt;
= Guidelines =&lt;br /&gt;
&lt;br /&gt;
The goal of this section is to provide some high-level guidelines about when Rust should be used. &lt;br /&gt;
&lt;br /&gt;
In summary, Rust should be used in the following situations.&lt;br /&gt;
* For new components and completely rewritten components there should be a strong bias towards using Rust, especially for code around Firefox but not within Firefox.&lt;br /&gt;
* For existing components it&#039;s more complicated!&lt;br /&gt;
&lt;br /&gt;
The following sections have more detail. Ultimately, choice of language for a code component is an engineering decision, with corresponding trade-offs, and is best decided by individual teams.&lt;br /&gt;
&lt;br /&gt;
== Rust Strengths ==&lt;br /&gt;
&lt;br /&gt;
Rust has the following strengths.&lt;br /&gt;
* Memory safety, which prevents crashes and security vulnerabilities.&lt;br /&gt;
* Thread safety, which enables improved performance via parallelism.&lt;br /&gt;
* Nimbleness: the safety makes it easy to make significant changes quickly and with confidence.&lt;br /&gt;
* Pleasant to use, particularly once a moderate level of experience has been reached.&lt;br /&gt;
* A great community.&lt;br /&gt;
&lt;br /&gt;
== Rust Weaknesses ==&lt;br /&gt;
&lt;br /&gt;
One major issue with Rust relates to personnel.&lt;br /&gt;
* There is a wide variety of experience levels within Mozilla, for both coding and reviewing.&lt;br /&gt;
* Rust&#039;s learning curve is steep at the start, which can be intimidating.&lt;br /&gt;
&lt;br /&gt;
There are also technical challenges.&lt;br /&gt;
* Compilation is slow.&lt;br /&gt;
* Crossing the C++/Rust boundary can be difficult.&lt;br /&gt;
&lt;br /&gt;
See &amp;quot;Blockers and obstacles&amp;quot; below for more details about work being done to remedy these weaknesses.&lt;br /&gt;
&lt;br /&gt;
== Recommendations ==&lt;br /&gt;
&lt;br /&gt;
Therefore, Rust is most suitable in the following situations.&lt;br /&gt;
* For components that are relatively standalone, with small and simple APIs.&lt;br /&gt;
** This minimizes the C++/Rust boundary layer issues.&lt;br /&gt;
** Infrastructure tools that are standalone programs are ideal.&lt;br /&gt;
** Note that it&#039;s good software engineering practice to write loosely-coupled components anyway.&lt;br /&gt;
* For components that process untrusted input, e.g. parsers.&lt;br /&gt;
** Rust&#039;s memory safety is a big help here.&lt;br /&gt;
** See the [http://spw17.langsec.org/papers/chifflier-parsing-in-2017.pdf &amp;quot;Writing parsers like it is 2017&amp;quot;] paper for lots of good details.&lt;br /&gt;
* For components where parallelism can provide big performance wins.&lt;br /&gt;
* For components where Servo has demonstrated success.&lt;br /&gt;
&lt;br /&gt;
In terms of where to keep Rust crates, there are three options.&lt;br /&gt;
* Put the crate in mozilla-central or in Servo&#039;s repository.&lt;br /&gt;
** For binding code, the decision to put it into Gecko or Servo can be difficult. The best choice depends on the details of the binding code in question.&lt;br /&gt;
* Put the crate on [https://crates.io crates.io] and use Cargo to access it at build-time.&lt;br /&gt;
** This is only suitable for highly general-purpose crates, such as &amp;lt;tt&amp;gt;smallvec&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Put the crate somewhere else (e.g. a separate GitHub repository), and regularly vendor it into mozilla-central.&lt;br /&gt;
** This makes sense for pre-existing third-party crates that we choose to import.&lt;br /&gt;
** Otherwise, this option is not recommended, because vendoring is something of a hassle.&lt;br /&gt;
&lt;br /&gt;
In general, erring on the side of tighter coupling is advisable. For example, the &amp;lt;tt&amp;gt;heapsize&amp;lt;/tt&amp;gt; crate used in memory reporting was moved to crates.io, and then other crates came to depend on it. Later on it needed major API changes, and we ended up replacing it with a new crate called &amp;lt;tt&amp;gt;malloc_size_of&amp;lt;/tt&amp;gt; (stored in Servo&#039;s repository) because that was easier than modifying &amp;lt;tt&amp;gt;heapsize&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Documentation and assistance =&lt;br /&gt;
&lt;br /&gt;
== Rust in general ==&lt;br /&gt;
&lt;br /&gt;
* The [https://www.rust-lang.org/learn Rust Documentation] page is the best place to start. In particular, the [https://doc.rust-lang.org/book/ The Rust Programming Language] provides a good overview.&lt;br /&gt;
* [https://www.rust-lang.org/en-US/community.html The Rust Community] page lists IRC channels, forums, and other places where Rust assistance can be obtained.&lt;br /&gt;
* [http://shop.oreilly.com/product/0636920040385.do Programming Rust: Fast, Safe Systems Development], by Jim Blandy &amp;amp; Jason Orendorff, is a detailed guide to the language.&lt;br /&gt;
* [https://github.com/ctjhoa/rust-learning rust-learning] is a huge collection of assorted Rust resources.&lt;br /&gt;
&lt;br /&gt;
== Rust in Firefox ==&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
* [https://firefox-source-docs.mozilla.org/build/buildsystem/rust.html Build System Documentation]&lt;br /&gt;
* [[Rust_Update_Policy_for_Firefox|Rust Update Policy for Firefox]]&lt;br /&gt;
* The #servo IRC channel contains lots of people who know about both Rust and Gecko.&lt;br /&gt;
* Are you new to Rust and not sure if your Rust code could be improved? The following people can review Rust patches for Firefox from an &amp;quot;is this good Rust code?&amp;quot; point of view.&lt;br /&gt;
** Alexis Beingessner (:gankro)&lt;br /&gt;
** Josh Bowman-Matthews (:jdm)&lt;br /&gt;
** Emilio Cobos Alvarez (:emilio)&lt;br /&gt;
** Manish Goregaokar (:manishearth)&lt;br /&gt;
** Nika Layzell (:mystor)&lt;br /&gt;
** Cameron McCormack (:heycam)&lt;br /&gt;
&lt;br /&gt;
= Rust Components =&lt;br /&gt;
&lt;br /&gt;
== Within Firefox ==&lt;br /&gt;
&lt;br /&gt;
=== Shipped ===&lt;br /&gt;
&lt;br /&gt;
* MP4 metadata parser: {{bug|1161350}} (shipped for desktop in Firefox 48)&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Parses untrusted input, replaces libstagefright, a 3rd-party library with a history of security vulnerabilities.&lt;br /&gt;
* Replace uconv with encoding-rs: {{bug|1261841}} (shipped in Firefox 56)&lt;br /&gt;
* CSS style calculation (from Servo): {{bug|stylo}} (shipped for desktop in Firefox 57)&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Code taken from Servo, uses parallel algorithms.&lt;br /&gt;
* U2F HID backend: {{bug|1388843}} (shipped in Firefox 57)&lt;br /&gt;
* XPIDL binding generator ({{bug|1293362}}) (shipped in Firefox 60)&lt;br /&gt;
* New prefs parser: {{bug|1423840}} (shipped in Firefox 60)&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Old parser needed replacing. Well-separated component, simple interface, parses untrusted input.&lt;br /&gt;
* Audio remoting for Linux: {{bug|1434156}} (shipped in Firefox 60)&lt;br /&gt;
* WebRender: {{bug|webrender}} (shipped in Firefox 67, enabled for users with appropriate hardware)&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Code taken from Servo, has high performance; Rust&#039;s memory and thread safety provides protection against complexity.&lt;br /&gt;
&lt;br /&gt;
=== In progress ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/CraneStation/cranelift/ cranelift, a low-level retargetable code generator]: {{bug|1469027}}&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; It&#039;s a new, well-separated component with a clear interface. Also, Rust is a great language for writing compilers, due to algebraic data types and pattern matching.&lt;br /&gt;
* Audio remoting for Windows: {{bug|1432303}}&lt;br /&gt;
* Audio remoting for Mac OS: {{bug|1425788}}&lt;br /&gt;
* SDP parsing in WebRTC: {{bug|1365792}}&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; SDP is a complex text protocol and the existing parser in C has a history of security issues.&lt;br /&gt;
* Linebreaking with xi-unicode: {{bug|1290022}} (last update late 2016)&lt;br /&gt;
&lt;br /&gt;
=== Proposed ===&lt;br /&gt;
&lt;br /&gt;
* Parallel layout&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Existing code from Servo, parallel performance.&lt;br /&gt;
* Replace the XML parser&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Parses untrusted input, replaces expat, a 3rd-party library with a history of frequent security vulnerabilities.&lt;br /&gt;
* WebMIDI: {{bug|1201593}}, {{bug|1201596}}, {{bug|1201598}}&lt;br /&gt;
* Gamepad code: {{bug|1286699}}&lt;br /&gt;
* Replace the telemetry module(?)&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; The existing C++ code has a history of threading problems.&lt;br /&gt;
* Replace DOM serializers (XML, HTML for Save As.., plain text)&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Need a rewrite anyway. Minor history of security vulnerabilities.&lt;br /&gt;
* Image decoders?&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Parsing untrusted input, some history of security vulnerabilities.&lt;br /&gt;
* Expose Rust API to JS Debugger: {{bug|1263317}}&lt;br /&gt;
* Generate Rust bindings for IPDL actors ({{bug|1379739}})&lt;br /&gt;
* WebM demuxer: {{bug|1267492}}&lt;br /&gt;
* Parallel JS parsing: fast preparse to find function boundaries, parse non-overlapping functions in parallel with a unification step to handle free names and such (no bug on file yet)&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Parses untrusted input. Requires safe threading. And generally, Rust is a better language than C++ for parsers, due to strong typing, algebraic data types, and pattern matching.&lt;br /&gt;
&lt;br /&gt;
== Outside Firefox ==&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
&lt;br /&gt;
* Testing&lt;br /&gt;
** GeckoDriver, a WebDriver implementation for Firefox integrated via marionette protocol: {{bug|1340637}} ([https://github.com/mozilla/geckodriver/releases standalone releases])&lt;br /&gt;
** [https://github.com/mozilla/grcov grcov], a tool to collect and aggregate code coverage data for multiple source files, used in Firefox CI.&lt;br /&gt;
* Build system, etc.&lt;br /&gt;
** [https://github.com/mozilla/sccache/ sccache], compiler cache with s3 storage. Caching C++ and Rust compilation, used in Firefox CI.&lt;br /&gt;
** Parts of [https://github.com/mozsearch/mozsearch mozsearch], the backend for the [http://searchfox.org Searchfox] code indexing tool.&lt;br /&gt;
** [https://github.com/luser/rust-makecab makecab], a reimplementation of Microsoft&#039;s makecab tool. Used to compress PDB files before uploading to symbol server in Firefox CI.&lt;br /&gt;
* Application Services, server-side&lt;br /&gt;
** [https://github.com/mozilla-services/autopush-rs autopush-rs] Rust async based websocket server that implements Mozilla&#039;s push/webpush/broadcast protocols.&lt;br /&gt;
*** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Concise code with the memory efficiency of C.&lt;br /&gt;
** [https://github.com/mozilla-services/megaphone/ Megaphone], a real-time update broadcast server for Firefox.&lt;br /&gt;
** [https://github.com/mozilla/fxa-email-service/ fxa_email_service], a service for sending email to Firefox Accounts.&lt;br /&gt;
** [https://github.com/mozilla-services/pairsona/ pairsona], a tool to associate instances of firefox.&lt;br /&gt;
* Application Services, client-side&lt;br /&gt;
** [https://github.com/mozilla/application-services/tree/master/fxa-rust-client fxa-rust-client], a cross-compiled FxA Rust client that can work with Firefox Sync keys and more.&lt;br /&gt;
&lt;br /&gt;
=== In Progress ===&lt;br /&gt;
&lt;br /&gt;
* IPDL Parser: {{bug|1316754}}&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Rust is a much better language than Python for writing compilers, due to strong typing, algebraic data types, and pattern matching.&lt;br /&gt;
&lt;br /&gt;
= Blockers and obstacles =&lt;br /&gt;
&lt;br /&gt;
This section lists areas where Rust integration could be improved.&lt;br /&gt;
* Tracking bug: Make the developer experience for Firefox + Rust great: {{Bug|rust-great}}&lt;br /&gt;
* Compile speed and memory usage&lt;br /&gt;
** Incremental compilation ([https://github.com/rust-lang/rust/labels/A-incr-comp A-incr-comp issues], [https://github.com/rust-lang/rust/labels/WG-compiler-incr WG-compiler-incr issues])&lt;br /&gt;
** [https://users.rust-lang.org/t/contract-opportunity-mozilla-distributed-compilation-cache-written-in-rust/13898 Distributed compilation cache]&lt;br /&gt;
** [https://github.com/rust-lang/cargo/issues/1997 Artifact caching]?&lt;br /&gt;
* Inlining between C++ and Rust would reduce cost of crossing the language barrier&lt;br /&gt;
* Debugging: improve gdb and lldb support for Rust. The first step is to establish Rust language support in DWARF distinct from the existing C++ support.&lt;br /&gt;
* Bindings/interop&lt;br /&gt;
** Immature rust-bindgen and cbindgen tools for general cross-language support. Working aroudn clang bugs in different versions and on different platforms can be tricky.&lt;br /&gt;
** No IPDL binding generator ({{bug|1379739}})&lt;br /&gt;
** No WebIDL binding generator for DOM components (Servo must have something here?)&lt;br /&gt;
* Remaining minor crash report issues {{bug|1348896}}&lt;br /&gt;
* IDE/symbol lookup support?&lt;br /&gt;
* Code coverage?&lt;br /&gt;
* Profiling improvements? Especially for parallel code&lt;br /&gt;
* Test integration?&lt;br /&gt;
* Are Rust&#039;s Vec, HashSet/HashMap as performant as Gecko&#039;s equivalents? {{bug|1425770}}&lt;br /&gt;
&lt;br /&gt;
= Meetings =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/servo/servo/wiki/Orlando-Oxidation-2018 Orlando, Dec 2018]&lt;br /&gt;
* [https://github.com/servo/servo/wiki/San-Francisco-Oxidation San Francisco, Jun 2018]&lt;br /&gt;
* [https://github.com/servo/servo/wiki/Austin-Oxidation Austin, Dec 2017]&lt;br /&gt;
* [https://github.com/servo/servo/wiki/Mozlando-Oxidation Mozlando, Dec 2015]&lt;br /&gt;
* [https://github.com/servo/servo/wiki/Oxidation-2015-11-05 Oxidation, Nov 2015]&lt;br /&gt;
* [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko Whistler, June 2015]&lt;br /&gt;
* [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko Mozlandia, Dec 2014]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
* Tom Tromey: debugging&lt;br /&gt;
* Boris Zbarsky: Stylo, Gecko&lt;br /&gt;
* Nathan Froyd: build system, integration, Cargo&lt;br /&gt;
* Ted Mielczarek: build system, crash reporting, releng&lt;br /&gt;
* Emilio Cobos Álvarez: Stylo&lt;br /&gt;
* Manish Goregaokar: Stylo, Rust internals&lt;br /&gt;
* Kartikaya Gupta: gfx, WebRender&lt;br /&gt;
* Bobby Holley: Stylo, Gecko&lt;br /&gt;
* Nicholas Nethercote: coordination, rustc perf&lt;br /&gt;
* Anthony Jones: coordination&lt;br /&gt;
* Selena Deckelmann: coordination&lt;br /&gt;
* Nick Fitzgerald: bindgen&lt;br /&gt;
* Nika Layzell: bindings&lt;br /&gt;
* Alex Crichton: rustc, Cargo&lt;br /&gt;
* Michael Woerister: rustc&lt;br /&gt;
* Mike Hommey: build system, allocator, Linux distros&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1213761</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1213761"/>
		<updated>2019-06-13T19:32:38Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Triage */ fmt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off the following lists:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine%3A+JIT&amp;amp;component=JavaScript%3A+GC&amp;amp;component=JavaScript%3A+Internationalization+API&amp;amp;component=JavaScript%3A+Standard+Library&amp;amp;component=Javascript%3A+WebAssembly&amp;amp;component=js-ctypes&amp;amp;owner= List of non-prioritized bugs]&#039;&#039;&#039; - This list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes needinfo? people.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet]&#039;&#039;&#039; - Scroll down to the bottom, under &amp;quot;Pending Untriaged (defects only)&amp;quot;. This reports per-component the number of bugs which need to be triaged.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://wiki.mozilla.org/Platform#Bug_Lists Regressions]&#039;&#039;&#039; - The queries there are used by the regression triage meeting. [https://bugzilla.mozilla.org/buglist.cgi?cmdtype=dorem&amp;amp;remaction=run&amp;amp;namedcmd=SpiderMonkey-Regression-67-68-69&amp;amp;sharer_id=607698&amp;amp;list_id=14761639 Convenient summary query for 67-68-69 regressions]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://bugzilla.mozilla.org/buglist.cgi?keywords=sec-critical%2Csec-high&amp;amp;keywords_type=anywords&amp;amp;o2=notsubstring&amp;amp;v2=stalled&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;f2=keywords&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14762036 Security bugs]&#039;&#039;&#039; - Also, [https://bugzilla.mozilla.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;f2=keywords&amp;amp;f3=bug_group&amp;amp;o2=notsubstring&amp;amp;o3=anywords&amp;amp;product=Core&amp;amp;resolution=---&amp;amp;v2=stalled&amp;amp;v3=javascript-core-security&amp;amp;list_id=14673658 this query] is the same but not limited to sec-high and sec-critical bugs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-03-18&amp;amp;f4=cf_status_firefox67&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox67&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx67 List of P1 affecting Firefox 67]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-01-28&amp;amp;f4=cf_status_firefox66&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox66&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx66 List of P1 affecting Firefox 66]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1213760</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1213760"/>
		<updated>2019-06-13T19:32:23Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Triage */ 25&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off the following lists:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine%3A+JIT&amp;amp;component=JavaScript%3A+GC&amp;amp;component=JavaScript%3A+Internationalization+API&amp;amp;component=JavaScript%3A+Standard+Library&amp;amp;component=Javascript%3A+WebAssembly&amp;amp;component=js-ctypes&amp;amp;owner= List of non-prioritized bugs]&#039;&#039;&#039; - This list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes needinfo? people.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet]&#039;&#039;&#039; - Scroll down to the bottom, under &amp;quot;Pending Untriaged (defects only)&amp;quot;. This reports per-component the number of bugs which need to be triaged.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://wiki.mozilla.org/Platform#Bug_Lists Regressions]&#039;&#039;&#039; - The queries there are used by the regression triage meeting. [https://bugzilla.mozilla.org/buglist.cgi?cmdtype=dorem&amp;amp;remaction=run&amp;amp;namedcmd=SpiderMonkey-Regression-67-68-69&amp;amp;sharer_id=607698&amp;amp;list_id=14761639 Convenient summary query for 67-68-69 regressions]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://bugzilla.mozilla.org/buglist.cgi?keywords=sec-critical%2Csec-high&amp;amp;keywords_type=anywords&amp;amp;o2=notsubstring&amp;amp;v2=stalled&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;f2=keywords&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14762036 Security bugs]``` - Also, [https://bugzilla.mozilla.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;f2=keywords&amp;amp;f3=bug_group&amp;amp;o2=notsubstring&amp;amp;o3=anywords&amp;amp;product=Core&amp;amp;resolution=---&amp;amp;v2=stalled&amp;amp;v3=javascript-core-security&amp;amp;list_id=14673658 this query] is the same but not limited to sec-high and sec-critical bugs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-03-18&amp;amp;f4=cf_status_firefox67&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox67&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx67 List of P1 affecting Firefox 67]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-01-28&amp;amp;f4=cf_status_firefox66&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox66&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx66 List of P1 affecting Firefox 66]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1213751</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1213751"/>
		<updated>2019-06-13T15:33:18Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Triage */ clarify link is version-specific&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off the following lists:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine%3A+JIT&amp;amp;component=JavaScript%3A+GC&amp;amp;component=JavaScript%3A+Internationalization+API&amp;amp;component=JavaScript%3A+Standard+Library&amp;amp;component=Javascript%3A+WebAssembly&amp;amp;component=js-ctypes&amp;amp;owner= List of non-prioritized bugs]&#039;&#039;&#039; - This list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes needinfo? people.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet]&#039;&#039;&#039; - Scroll down to the bottom, under &amp;quot;Pending Untriaged (defects only)&amp;quot;. This reports per-component the number of bugs which need to be triaged.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://wiki.mozilla.org/Platform#Bug_Lists Regressions]&#039;&#039;&#039; - The queries there are used by the regression triage meeting. [https://bugzilla.mozilla.org/buglist.cgi?cmdtype=dorem&amp;amp;remaction=run&amp;amp;namedcmd=SpiderMonkey-Regression-67-68-69&amp;amp;sharer_id=607698&amp;amp;list_id=14761639 Convenient summary query for 67-68-69 regressions]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://bugzilla.mozilla.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;f2=keywords&amp;amp;f3=bug_group&amp;amp;o2=notsubstring&amp;amp;o3=anywords&amp;amp;product=Core&amp;amp;resolution=---&amp;amp;v2=stalled&amp;amp;v3=javascript-core-security&amp;amp;list_id=14673658 Security bugs]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-03-18&amp;amp;f4=cf_status_firefox67&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox67&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx67 List of P1 affecting Firefox 67]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-01-28&amp;amp;f4=cf_status_firefox66&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox66&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx66 List of P1 affecting Firefox 66]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1213750</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1213750"/>
		<updated>2019-06-13T15:32:46Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Triage */ add sdetar&amp;#039;s regression query&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off the following lists:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine%3A+JIT&amp;amp;component=JavaScript%3A+GC&amp;amp;component=JavaScript%3A+Internationalization+API&amp;amp;component=JavaScript%3A+Standard+Library&amp;amp;component=Javascript%3A+WebAssembly&amp;amp;component=js-ctypes&amp;amp;owner= List of non-prioritized bugs]&#039;&#039;&#039; - This list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes needinfo? people.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet]&#039;&#039;&#039; - Scroll down to the bottom, under &amp;quot;Pending Untriaged (defects only)&amp;quot;. This reports per-component the number of bugs which need to be triaged.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://wiki.mozilla.org/Platform#Bug_Lists Regressions]&#039;&#039;&#039; - The queries there are used by the regression triage meeting. [https://bugzilla.mozilla.org/buglist.cgi?cmdtype=dorem&amp;amp;remaction=run&amp;amp;namedcmd=SpiderMonkey-Regression-67-68-69&amp;amp;sharer_id=607698&amp;amp;list_id=14761639 Convenient summary query]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://bugzilla.mozilla.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;f2=keywords&amp;amp;f3=bug_group&amp;amp;o2=notsubstring&amp;amp;o3=anywords&amp;amp;product=Core&amp;amp;resolution=---&amp;amp;v2=stalled&amp;amp;v3=javascript-core-security&amp;amp;list_id=14673658 Security bugs]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-03-18&amp;amp;f4=cf_status_firefox67&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox67&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx67 List of P1 affecting Firefox 67]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-01-28&amp;amp;f4=cf_status_firefox66&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox66&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx66 List of P1 affecting Firefox 66]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1210864</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1210864"/>
		<updated>2019-04-18T15:48:05Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Triage */ wefgrwaef&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off the following lists:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine%3A+JIT&amp;amp;component=JavaScript%3A+GC&amp;amp;component=JavaScript%3A+Internationalization+API&amp;amp;component=JavaScript%3A+Standard+Library&amp;amp;component=Javascript%3A+WebAssembly&amp;amp;component=js-ctypes&amp;amp;owner= List of non-prioritized bugs]&#039;&#039;&#039; - This list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes needinfo? people.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet]&#039;&#039;&#039; - Scroll down to the bottom, under &amp;quot;Pending Untriaged (defects only)&amp;quot;. This reports per-component the number of bugs which need to be triaged.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://wiki.mozilla.org/Platform#Bug_Lists Regressions]&#039;&#039;&#039; - The queries there are used by the regression triage meeting.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://bugzilla.mozilla.org/buglist.cgi?keywords=sec-high%2C%20sec-critical%2C%20&amp;amp;keywords_type=anywords&amp;amp;list_id=14673624&amp;amp;v11=stalled&amp;amp;f10=CP&amp;amp;f8=CP&amp;amp;o11=notsubstring&amp;amp;columnlist=component%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Cstatus_whiteboard%2Ckeywords%2Cbug_type%2Cflagtypes.name%2Cpriority&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f11=keywords&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;product=Core Security bugs]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-03-18&amp;amp;f4=cf_status_firefox67&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox67&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx67 List of P1 affecting Firefox 67]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-01-28&amp;amp;f4=cf_status_firefox66&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox66&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx66 List of P1 affecting Firefox 66]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1210863</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1210863"/>
		<updated>2019-04-18T15:47:29Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Triage */ waefgaregserthergwe&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off the following lists:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine%3A+JIT&amp;amp;component=JavaScript%3A+GC&amp;amp;component=JavaScript%3A+Internationalization+API&amp;amp;component=JavaScript%3A+Standard+Library&amp;amp;component=Javascript%3A+WebAssembly&amp;amp;component=js-ctypes&amp;amp;owner= List of non-prioritized bugs]&#039;&#039;&#039; - This list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes needinfo? people.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet]&#039;&#039;&#039; - Scroll down to the bottom. This reports per-component the number of bugs which need to be triaged.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://wiki.mozilla.org/Platform#Bug_Lists Regressions]&#039;&#039;&#039; - The queries there are used by the regression triage meeting.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://bugzilla.mozilla.org/buglist.cgi?keywords=sec-high%2C%20sec-critical%2C%20&amp;amp;keywords_type=anywords&amp;amp;list_id=14673624&amp;amp;v11=stalled&amp;amp;f10=CP&amp;amp;f8=CP&amp;amp;o11=notsubstring&amp;amp;columnlist=component%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Cstatus_whiteboard%2Ckeywords%2Cbug_type%2Cflagtypes.name%2Cpriority&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f11=keywords&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;product=Core Security bugs]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-03-18&amp;amp;f4=cf_status_firefox67&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox67&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx67 List of P1 affecting Firefox 67]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-01-28&amp;amp;f4=cf_status_firefox66&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox66&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx66 List of P1 affecting Firefox 66]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1210862</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1210862"/>
		<updated>2019-04-18T15:41:49Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Triage */ waefawijefiwajue&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off this list:&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine%3A+JIT&amp;amp;component=JavaScript%3A+GC&amp;amp;component=JavaScript%3A+Internationalization+API&amp;amp;component=JavaScript%3A+Standard+Library&amp;amp;component=Javascript%3A+WebAssembly&amp;amp;component=js-ctypes&amp;amp;owner= List of non-prioritized bugs]&lt;br /&gt;
&lt;br /&gt;
The list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes requesting feedback from other members of the team.&lt;br /&gt;
&lt;br /&gt;
=== Are we triaged yet? ===&lt;br /&gt;
&lt;br /&gt;
[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet] is currently used as a dashboard for reporting per-component the number of bugs which needs to be given priorities, or status flags.&lt;br /&gt;
&lt;br /&gt;
=== Regressions ===&lt;br /&gt;
&lt;br /&gt;
The queries listed here are used by the regression triage meeting: https://wiki.mozilla.org/Platform#Bug_Lists&lt;br /&gt;
&lt;br /&gt;
=== Security bugs ===&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.mozilla.org/buglist.cgi?keywords=sec-high%2C%20sec-critical%2C%20&amp;amp;keywords_type=anywords&amp;amp;list_id=14673624&amp;amp;v11=stalled&amp;amp;f10=CP&amp;amp;f8=CP&amp;amp;o11=notsubstring&amp;amp;columnlist=component%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Cstatus_whiteboard%2Ckeywords%2Cbug_type%2Cflagtypes.name%2Cpriority&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f11=keywords&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;product=Core Security bugs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-03-18&amp;amp;f4=cf_status_firefox67&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox67&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx67 List of P1 affecting Firefox 67]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-01-28&amp;amp;f4=cf_status_firefox66&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox66&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx66 List of P1 affecting Firefox 66]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1210861</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1210861"/>
		<updated>2019-04-18T15:26:08Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Triage */ awuierhwauiejjugser&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off this list:&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine%3A+JIT&amp;amp;component=JavaScript%3A+GC&amp;amp;component=JavaScript%3A+Internationalization+API&amp;amp;component=JavaScript%3A+Standard+Library&amp;amp;component=Javascript%3A+WebAssembly&amp;amp;component=js-ctypes&amp;amp;owner= List of non-prioritized bugs]&lt;br /&gt;
&lt;br /&gt;
The list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes requesting feedback from other members of the team.&lt;br /&gt;
&lt;br /&gt;
=== Are we triaged yet? ===&lt;br /&gt;
&lt;br /&gt;
[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet] is currently used as a dashboard for reporting per-component the number of bugs which needs to be given priorities, or status flags.&lt;br /&gt;
&lt;br /&gt;
=== Regressions ===&lt;br /&gt;
&lt;br /&gt;
The New Bugs list linked here is used.&lt;br /&gt;
&lt;br /&gt;
https://wiki.mozilla.org/Platform#Bug_Lists&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-03-18&amp;amp;f4=cf_status_firefox67&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox67&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx67 List of P1 affecting Firefox 67]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-01-28&amp;amp;f4=cf_status_firefox66&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox66&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx66 List of P1 affecting Firefox 66]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=sec-critical%2Csec-high%2C&amp;amp;keywords_type=anywords&amp;amp;resolution=---&amp;amp;o2=notsubstring&amp;amp;query_format=advanced&amp;amp;f2=keywords&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A10%3A12%20AM%20GC&amp;amp;v2=stalled&amp;amp;product=Core&amp;amp;list_id=14673529 Security bugs]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1210859</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1210859"/>
		<updated>2019-04-18T15:17:21Z</updated>

		<summary type="html">&lt;p&gt;Jorend: awjuiojpawiewsaefj&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off this list:&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine%3A+JIT&amp;amp;component=JavaScript%3A+GC&amp;amp;component=JavaScript%3A+Internationalization+API&amp;amp;component=JavaScript%3A+Standard+Library&amp;amp;component=Javascript%3A+WebAssembly&amp;amp;component=js-ctypes&amp;amp;owner= List of non-prioritized bugs]&lt;br /&gt;
&lt;br /&gt;
The list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes requesting feedback from other members of the team.&lt;br /&gt;
&lt;br /&gt;
=== Are we triaged yet? ===&lt;br /&gt;
&lt;br /&gt;
[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet] is currently used as a dashboard for reporting per-component the number of bugs which needs to be given priorities, or status flags.&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-03-18&amp;amp;f4=cf_status_firefox67&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox67&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx67 List of P1 affecting Firefox 67]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-01-28&amp;amp;f4=cf_status_firefox66&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox66&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx66 List of P1 affecting Firefox 66]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=sec-critical%2Csec-high%2C&amp;amp;keywords_type=anywords&amp;amp;resolution=---&amp;amp;o2=notsubstring&amp;amp;query_format=advanced&amp;amp;f2=keywords&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A10%3A12%20AM%20GC&amp;amp;v2=stalled&amp;amp;product=Core&amp;amp;list_id=14673529 Security bugs]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1209690</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1209690"/>
		<updated>2019-03-29T15:08:45Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* P1 re-triage */ add a link for P1 FF67&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off this list:&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine%3A+JIT&amp;amp;component=JavaScript%3A+GC&amp;amp;component=JavaScript%3A+Internationalization+API&amp;amp;component=JavaScript%3A+Standard+Library&amp;amp;component=Javascript%3A+WebAssembly&amp;amp;component=js-ctypes&amp;amp;owner= List of non-prioritized bugs]&lt;br /&gt;
&lt;br /&gt;
The list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes requesting feedback from other members of the team.&lt;br /&gt;
&lt;br /&gt;
=== Are we triaged yet? ===&lt;br /&gt;
&lt;br /&gt;
[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet] is currently used as a dashboard for reporting per-component the number of bugs which needs to be given priorities, or status flags.&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-03-18&amp;amp;f4=cf_status_firefox67&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox67&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx67 List of P1 affecting Firefox 67]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-01-28&amp;amp;f4=cf_status_firefox66&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox66&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx66 List of P1 affecting Firefox 66]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1207999</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1207999"/>
		<updated>2019-02-21T16:10:39Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Triage */ fix broken link better&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off this list:&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine%3A+JIT&amp;amp;component=JavaScript%3A+GC&amp;amp;component=JavaScript%3A+Internationalization+API&amp;amp;component=JavaScript%3A+Standard+Library&amp;amp;component=Javascript%3A+WebAssembly&amp;amp;component=js-ctypes&amp;amp;owner= List of non-prioritized bugs]&lt;br /&gt;
&lt;br /&gt;
The list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes requesting feedback from other members of the team.&lt;br /&gt;
&lt;br /&gt;
=== Are we triaged yet? ===&lt;br /&gt;
&lt;br /&gt;
[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet] is currently used as a dashboard for reporting per-component the number of bugs which needs to be given priorities, or status flags.&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-01-28&amp;amp;f4=cf_status_firefox66&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox66&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx66 List of P1 affecting Firefox 66]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1207995</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1207995"/>
		<updated>2019-02-21T16:00:01Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Triage */ fix broken link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off this list:&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine:+JIT&amp;amp;component=JavaScript:+GC&amp;amp;component=JavaScript:+Internationalization+API&amp;amp;component=JavaScript:+Standard+Library&amp;amp;component=js-ctypes&amp;amp;owner= List of non-prioritized bugs]&lt;br /&gt;
&lt;br /&gt;
The list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes requesting feedback from other members of the team.&lt;br /&gt;
&lt;br /&gt;
=== Are we triaged yet? ===&lt;br /&gt;
&lt;br /&gt;
[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet] is currently used as a dashboard for reporting per-component the number of bugs which needs to be given priorities, or status flags.&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2019-01-28&amp;amp;f4=cf_status_firefox66&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox66&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx66 List of P1 affecting Firefox 66]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1205070</id>
		<title>JavaScript:Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:Bugzilla&amp;diff=1205070"/>
		<updated>2018-12-13T16:08:26Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Triage */ make list link more prominent&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how the JavaScript Team uses [https://bugzilla.mozilla.org Bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Bugzilla components ==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine#JavaScript%20Engine Core::JavaScript Engine]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20JIT#JavaScript%20Engine Core::JavaScript Engine: JIT]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20GC#JavaScript%20Engine Core::JavaScript: GC]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Internationalization%20API#JavaScript%20Engine Core::JavaScript: Internationalization API]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=JavaScript%20Engine:%20Standard%20Library#JavaScript%20Engine Core::JavaScript: Standard Library]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=Javascript:%20Web%20Assembly#Javascript:%20Web%20Assembly Core::Java&#039;&#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039;&#039;cript: Web Assembly]&lt;br /&gt;
* [https://bugzilla.mozilla.org/describecomponents.cgi?product=Core&amp;amp;component=js-ctypes#JavaScript%20Engine Core::js-ctypes]&lt;br /&gt;
&lt;br /&gt;
== Review flags ==&lt;br /&gt;
&lt;br /&gt;
The JS team uses the review flags the same way as the rest of Gecko developer. The only difference is the lack of &amp;quot;r-&amp;quot; when a review needs to be revisited, instead the review request is canceled with comments. The &amp;quot;r-&amp;quot; flag is used only in a few cases where multiple reviewers are requested on the same patch, and one of them is opposed to the changes.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard flags ==&lt;br /&gt;
&lt;br /&gt;
A few whiteboard flags are used today in the JS components:&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5B%23jsapi%3Acrashes-retriage%5D&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=%23jsapi:crashes-retriage [#jsapi:crashes-retriage&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] Used for crash-stat crashes which might be harder to investigate alone. This whiteboard tag is used to cluster the analysis of crash-stat reports. (Owner: Ted Campbell)&lt;br /&gt;
* [qf] Used for any performance regression/improvement which can be part of the Quantum Flow effort of fixing known bugs. (Owner: Kannan Vijayan) These bugs are later sorted by the performance team into [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap1&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;list_id=14434361&amp;amp;title=qf%20p1 [qf:p1&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;], [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap2&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p2 [qf:p2&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;] and [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=%5Bqf%3Ap3&amp;amp;resolution=---&amp;amp;query_format=advanced&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;component=js-ctypes&amp;amp;product=Core&amp;amp;title=qf%20p3 [qf:p3&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [arm64:m...] Used to track [https://wiki.mozilla.org/Mobile/ARM64 milestone blocker bugs for ARM64 Fennec and GeckoView].&lt;br /&gt;
* [lang={c++,py,js}] Is used in tandem with the [[Good_first_bug#Good_First_Bugs|good-first-bugs]] keyword to list this bug as in [[BugsAhoy|BugsAhoy!]].&lt;br /&gt;
&lt;br /&gt;
As a convention, anybody can follow the following naming for using the whiteboard to improve Bugzilla searches. However, note that whiteboard searches are not indexed in Bugzilla databases and this might lead to performance issues.&lt;br /&gt;
&lt;br /&gt;
* [:nick:...] Used by the user :nick for managing bugs.&lt;br /&gt;
* [#channel:...] Used by members of the IRC #channel for managing bugs.&lt;br /&gt;
&lt;br /&gt;
== Priority Flags ==&lt;br /&gt;
&lt;br /&gt;
Priority flags are set based on the current goals.  The list of goals can be found in the JS Team document which list all the goals.&lt;br /&gt;
The addon [https://addons.mozilla.org/en-US/firefox/addon/bugzilla-triage-helper/ bugzilla triage helper] can be used to set the P1, P2, P3 and P5 (no P4) flags&lt;br /&gt;
&lt;br /&gt;
* P1: P1 goals or blockers, Security issues. (to be fixed ASAP)&lt;br /&gt;
* P2: P2 goals or blockers. (scheduled to be fixed in an upcoming version)&lt;br /&gt;
* P3: P3 goals or blockers. (backlog; to be fixed one day)&lt;br /&gt;
* P5: (not a priority for Firefox product; might never be fixed)&lt;br /&gt;
&lt;br /&gt;
== Triage ==&lt;br /&gt;
&lt;br /&gt;
The triage effort is currently held by the triage owners, and supported by Jason Orendorff and Nicolas B. Pierron. They mainly work off this list:&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.mozilla.org/page.cgi?id=triage_owners.html&amp;amp;product=Core&amp;amp;component=JavaScript+Engine&amp;amp;component=JavaScript+Engine:+JIT&amp;amp;component=JavaScript:+GC&amp;amp;component=JavaScript:+Internationalization+API&amp;amp;component=JavaScript:+Standard+Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A+Web+Assembly&amp;amp;owner= List of non-prioritized bugs]&lt;br /&gt;
&lt;br /&gt;
The list is used to set the missing priority flags and whiteboard flags to the corresponding bugs and sometimes requesting feedback from other members of the team.&lt;br /&gt;
&lt;br /&gt;
=== Are we triaged yet? ===&lt;br /&gt;
&lt;br /&gt;
[https://are-we-triaged-yet.herokuapp.com/ Are We Triaged Yet] is currently used as a dashboard for reporting per-component the number of bugs which needs to be given priorities, or status flags.&lt;br /&gt;
&lt;br /&gt;
=== P1 re-triage ===&lt;br /&gt;
&lt;br /&gt;
A weekly meeting is held every Thursday to re-triage P1 which have seen no activity for a while. The following searches are lists of non-meta and non-stalled P1 issues affecting Firefox VV.&lt;br /&gt;
&lt;br /&gt;
In this case affecting means: status-firefoxVV == affected || (status-firefoxVV is-empty &amp;amp;&amp;amp; creation-date &amp;lt;= [[Release Management/Calendar|betaVV-merge-date]]).&lt;br /&gt;
To avoid re-iterating over iterating every weeks over the same bugs, we filter out bugs which have been changed in the last 10 days.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-12-10&amp;amp;f4=cf_status_firefox65&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox65&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx65 List of P1 affecting Firefox 65]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-10-22&amp;amp;f4=cf_status_firefox64&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox64&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx64 List of P1 affecting Firefox 64]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-09-04&amp;amp;f4=cf_status_firefox63&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox63&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx63 List of P1 affecting Firefox 63]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164358&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-06-25&amp;amp;f4=cf_status_firefox62&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox62&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx62 List of P1 affecting Firefox 62]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164352&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-05-07&amp;amp;f4=cf_status_firefox61&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox61&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx61 List of P1 affecting Firefox 61]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?keywords=meta%2C%20stalled&amp;amp;keywords_type=nowords&amp;amp;list_id=14164353&amp;amp;o1=notequals&amp;amp;o2=notregexp&amp;amp;o4=equals&amp;amp;j3=OR&amp;amp;v1=enhancement&amp;amp;v2=%5E%5C%5Bmeta&amp;amp;priority=P1&amp;amp;v4=affected&amp;amp;f10=CP&amp;amp;f1=bug_severity&amp;amp;o7=lessthaneq&amp;amp;f8=CP&amp;amp;resolution=---&amp;amp;o6=isempty&amp;amp;v7=2018-03-12&amp;amp;f4=cf_status_firefox60&amp;amp;query_format=advanced&amp;amp;f3=OP&amp;amp;f2=short_desc&amp;amp;f5=OP&amp;amp;component=JavaScript%20Engine&amp;amp;component=JavaScript%20Engine%3A%20JIT&amp;amp;component=JavaScript%3A%20GC&amp;amp;component=JavaScript%3A%20Internationalization%20API&amp;amp;component=JavaScript%3A%20Standard%20Library&amp;amp;component=js-ctypes&amp;amp;component=Javascript%3A%20Web%20Assembly&amp;amp;f6=cf_status_firefox60&amp;amp;product=Core&amp;amp;f7=creation_ts&amp;amp;v11=10&amp;amp;o11=greaterthan&amp;amp;f11=days_elapsed&amp;amp;title=P1%20Fx60 List of P1 affecting Firefox 60]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1202533</id>
		<title>Modules/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1202533"/>
		<updated>2018-10-17T11:40:10Z</updated>

		<summary type="html">&lt;p&gt;Jorend: fmt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Only module owners may edit this page.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
They may:&lt;br /&gt;
&lt;br /&gt;
* update any information about their module except the name of the owner&lt;br /&gt;
* add or remove sub-modules&lt;br /&gt;
* change the owner of a sub-module &lt;br /&gt;
* add emeritus owners or peers&lt;br /&gt;
&lt;br /&gt;
Other changes, including changes of module owner or addition/removal of modules, must be agreed with the Module Ownership Module group, probably via a discussion in [https://www.mozilla.org/about/forums/#governance mozilla.governance].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Accessibility&lt;br /&gt;
|description=Support for platform accessibility APIs. Accessibility APIs are used by 3rd party software like screen readers, screen magnifiers, and voice dictation software, which need information about document content and UI controls, as well as important events like changes of focus.&lt;br /&gt;
|owner=[mailto:surkov.alexander@gmail.com Alexander Surkov]&lt;br /&gt;
|peers=[mailto:dbolter@mozilla.com David Bolter], [mailto:eitan@monotonous.org Eitan Isaacson], [mailto:jteh@mozilla.com James Teh],  [mailto:mzehe@mozilla.com Marco Zehe], [mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal]&lt;br /&gt;
|peersemeritus=[mailto:tbsaunde+mozbugs@tbsaunde.org Trevor Saunders], [mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Animation&lt;br /&gt;
|description=Declarative animations: CSS animations, CSS transitions, Web Animations API, and off-main thread animations.&lt;br /&gt;
|owner=[mailto:bbirtles@mozilla.com Brian Birtles] (:birtles)&lt;br /&gt;
|peers=[mailto:hiro@mozilla.com Hiroyuki Ikezoe] (:hiro), [mailto:mwoodrow@mozilla.com Matt Woodrow] (:mattwoodrow)&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=dom/animation; and animation-related and interpolation-related code in layout/style, gfx/layers, servo/components/style and servo/ports/gecko&lt;br /&gt;
|components=Core::DOM::Animation, Core::CSS Parsing and Computation (for CSS animations/transitions related bugs)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Browser WebAPI&lt;br /&gt;
|description=Web API for rendering apps, browser windows and widgets.&lt;br /&gt;
|owner=[mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:fabrice@mozilla.com Fabrice Desré]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/browser-element/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build and Release Tools&lt;br /&gt;
|description=Tools related to build and release automation and configuration of release builds.&lt;br /&gt;
|owner=[mailto:nthomas@mozilla.com Nick Thomas]&lt;br /&gt;
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]&lt;br /&gt;
|group=release-engineering&lt;br /&gt;
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/&lt;br /&gt;
|url=https://wiki.mozilla.org/ReleaseEngineering&lt;br /&gt;
|components=Release Engineering::*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config&lt;br /&gt;
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.&lt;br /&gt;
|owner=[mailto:gps@mozilla.com Gregory Szorc] (:gps)&lt;br /&gt;
|peers=[mailto:mh@glandium.org Mike Hommey] (:glandium), [mailto:mshal@mozilla.com Mike Shal] (:mshal), [mailto:ted@mielczarek.org Ted Mielczarek] (:ted), [mailto:cmanchester@mozilla.com Chris Manchester](:chmanchester), [mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj), [mailto:dmajor@mozilla.com David Major] (:dmajor), [mailto:rgiles@mozilla.com Ralph Giles] (:rillian)&lt;br /&gt;
|ownersemeritus=Ted Mielczarek (2008-[https://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/ 2013]), Benjamin Smedberg (???-[http://benjamin.smedbergs.us/blog/2008-04-30/more-changing-of-the-guard-ted-mielczarek/ 2008]), &lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=build/, config/, python/mozbuild, tools/cross-commit, tools/cvs2hg-import.py, tools/cvsmgmt/, tools/elf-dynstr-gc/, tools/trees.pl, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=http://www.mozilla.org/build/&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Code Analysis and Debugging Tools&lt;br /&gt;
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-performance&lt;br /&gt;
|source_dirs=tools/codesighs/, tools/debug/, tools/dreftool/, tools/dumpdeps/, tools/footprint/, tools/jprof/, tools/leaky/, tools/memory/, tools/module-deps/, tools/performance/, tools/post_compile/, tools/preloader/, tools/rb/, tools/reorder/, tools/trace-malloc/, tools/uuiddeps/, &lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content HTTP Headers&lt;br /&gt;
|description=HTTP headers related to content, e.g. User-Agent, Content-Type, Accept. (Transport-related headers are the responsibility of the Necko module owner.)&lt;br /&gt;
|owner=[mailto:gerv@mozilla.org Gervase Markham]&lt;br /&gt;
|peers=[mailto:lmandel@mozilla.com Lawrence Mandel]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs= &lt;br /&gt;
|url=https://developer.mozilla.org/en/Gecko_user_agent_string_reference&lt;br /&gt;
|components=Core::Networking: HTTP&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content Security&lt;br /&gt;
|description=Native content-based security features enforced in the ContentSecurityManager, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Subresource Integrity (SRI), Cross-Origin Resource Sharing (CORS) and top-level data: URI blocking.&lt;br /&gt;
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peers=[mailto:francois@mozilla.com François Marier], [mailto:tvyas@mozilla.com Tanvi Vyas], [mailto:dveditz@mozilla.com Dan Veditz], [mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:jkt@mozilla.com Jonathan Kingston]&lt;br /&gt;
|peersemeritus=[mailto:mozilla@sidstamm.com Sid Stamm], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-security&lt;br /&gt;
|source_dirs=dom/security&lt;br /&gt;
|components=Core::DOM: Security&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cookies and Permissions&lt;br /&gt;
|description=&lt;br /&gt;
|owner=Monica Chew&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=extensions/cookie/, netwerk/cookie/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Networking: Cookies&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cycle Collector&lt;br /&gt;
|description=Code to break and collect objects within reference cycles&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]&lt;br /&gt;
|peers=Peter Van der Beken, Olli Pettay, David Baron&lt;br /&gt;
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=C++/Rust usage, tools, and style&lt;br /&gt;
|description=Aspects of C++ use such as language feature usage, standard library versions/usage, compiler/toolchain versions, formatting and naming style, and aspects of Rust use as needs arise&lt;br /&gt;
|owner=[mailto:nfroyd@mozilla.com Nathan Froyd] (while Ehsan is away)&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:glandium@mozilla.com Mike Hommey], [mailto:jwalden@mozilla.com Jeff Walden], [mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|source_dirs=non-third-party C++ and Rust code in the tree&lt;br /&gt;
|components=Various components&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=docshell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:sawang@mozilla.com Samael Wang]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback],[mailto:cbiesinger@gmail.com Christian Biesinger],[mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=docshell/, uriloader/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Document Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Document Object Model&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:hsivonen@iki.fi Henri Sivonen], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:baku@mozilla.com Andrea Marchesini],&lt;br /&gt;
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:kyle@nonpolynomial.com Kyle Machulis], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|ownersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|peersemeritus=[mailto:justin.lebar@gmail.com Justin Lebar], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:bent.mozilla@gmail.com Ben Turner], [mailto:mounir@lamouri.fr Mounir Lamouri (still active, but slower to respond than previously)], [mailto:me@kylehuey.com Kyle Huey], [mailto:wmccloskey@mozilla.com Bill McCloskey], [ben@wanderview.com Ben Kelly]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/*, except directories covered by other modules&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core &amp;amp; HTML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=DOM File&lt;br /&gt;
|description=DOM Blob, File and FileSystem APIs &lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:olli@pettay.fi Olli Pettay]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/file, dom/filesystem&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: File&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Event Handling&lt;br /&gt;
|description=DOM Events and Event Handling &lt;br /&gt;
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:sshih@mozilla.com Stone Shih]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/events and event handling related code elsewhere &lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: Events, Core::Event Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Workers&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:asuth@mozilla.com Andrew Sutherland]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/workers/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_web_workers&lt;br /&gt;
|components=Core::DOM: Workers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IndexedDB&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|peers=[mailto:btseng@mozilla.com Bevis Tseng], [mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/indexedDB/&lt;br /&gt;
|url=https://developer.mozilla.org/en/IndexedDB&lt;br /&gt;
|components=Core::DOM: IndexedDB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Editor&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=editor/&lt;br /&gt;
|url=http://www.mozilla.org/editor/&lt;br /&gt;
|components=Core::Editor&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Embedding&lt;br /&gt;
|description=Gecko embedding APIs and frameworks&lt;br /&gt;
|owner=[mailto:myk@mykzilla.org Myk Melez]&lt;br /&gt;
|ownersemeritus=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:bdahl@mozilla.com Brendan Dahl], [mailto:tbsaunde@tbsaunde.org Trevor Saunders]&lt;br /&gt;
|peersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=embedding/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Embedding: APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Find As You Type&lt;br /&gt;
|description=Find As You Type (formerly called Type Ahead Find) is a feature that allows quick web page navigation when you type a succession of characters in the body of the displayed page (not in an edit box of or drop down list). Currently seeks new owner.&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=extensions/typeaheadfind/&lt;br /&gt;
|url=http://www.mozilla.org/access/type-ahead/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Gecko Profiler&lt;br /&gt;
|description=Gecko&#039;s built-in profiler&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:nnethercote@mozilla.com Nicholas Nethercote], [mailto:jseward@mozilla.com Julian Seward] (LUL), [mailto:kvijayan@mozilla.com Kannan Vijayan] (JS integration), [mailto:shu@mozilla.com Shu-yu Guo] (JS integration), [mailto:tlee@mozilla.com Thinker Lee] (TaskTracer), [mailto:cyu@mozilla.com Cervantes Yu] (TaskTracer), [mailto:b56girard@gmail.com Benoit Girard].&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=tools/profiler/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler&lt;br /&gt;
|components=Core::Gecko Profiler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Geolocation&lt;br /&gt;
|description=Implementation of the Geolocation W3C Spec, location provider apis, and wifi scanning code.&lt;br /&gt;
|owner=[mailto:josh@joshmatthews.net Josh Matthews], [mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner], Garvan Keeley&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/geolocation, dom/system/, netwerk/wifi&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_geolocation&lt;br /&gt;
|components=Core::Geolocation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Global Key Bindings&lt;br /&gt;
|description=Global hot keys in Mozilla for the browser, editor, mail-news and widgets. Does not include underlined menu accelerators and the like, as those are part of i18n.&lt;br /&gt;
|owner=Aaron Leventhal&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=dom/xbl/builtin/&lt;br /&gt;
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html&lt;br /&gt;
|components=Core::Keyboard: Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Graphics&lt;br /&gt;
|description=Mozilla graphics API&lt;br /&gt;
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:jdrew@mozilla.com Joe Drew], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:bas.schouten@live.nl Bas Schouten](Layers, Windows), [mailto:bjacob@mozilla.com Benoit Jacob](gfx/gl), [mailto:bgirard@mozilla.com Benoit Girard](Compositor, Performance), [mailto:ajuma.bugzilla@alijuma.com Ali Juma], [mailto:jgilbert@mozilla.com Jeff Gilbert](WebGL, ANGLE), [mailto:george@mozilla.com George Wright](Canvas2D), [mailto:mwoodrow@mozilla.com Matt Woodrow](Layers API), [mailto:jdaggett@mozilla.com John Daggett](text/fonts), [mailto:jfkthame@googlemail.com Jonathan Kew](text/fonts), [mailto:nsilva@mozilla.com  Nicolas Silva](MozSurface), [mailto:ncameron@mozilla.com Nick Cameron], [mailto:sikeda@mozilla.com Sotaro Ikeda](B2G), [mailto:snorp@mozilla.com James Willcox](Android), [mailto:clord@mozilla.com Christopher Lord], [mailto:mstange@themasta.com Markus Stange](OS X), [mailto:lsalzman@mozilla.com Lee Salzman](Skia), [mailto:mchang@mozilla.com Mason Chang], [mailto:dvander@mozilla.com David Anderson], [mailto:rhunt@mozilla.com Ryan Hunt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/, dom/canvas/&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch&lt;br /&gt;
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=APZ (Graphics submodule)&lt;br /&gt;
|description=Asynchronous panning and zooming&lt;br /&gt;
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:tnikkel@mozilla.com Timothy Nikkel], [mailto:dvander@mozilla.com David Anderson], [mailto:mstange@mozilla.com Markus Stange]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/layers/apz&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/APZ&lt;br /&gt;
|components=Core::Panning and Zooming&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Moz2D (Graphics submodule)&lt;br /&gt;
|description=Platform independent 2D graphics API&lt;br /&gt;
|owner=[mailto:bschouten@mozilla.com Bas Schouten]&lt;br /&gt;
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/2d&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D&lt;br /&gt;
|components=Core::Graphics&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Legacy HTML Parser&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:rbs@maths.uq.edu.au rbs@maths.uq.edu.au]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|source_dirs=parser/htmlparser&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/doc/parser.html&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HAL&lt;br /&gt;
|description=Hardware Abstraction Layer&lt;br /&gt;
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands]&lt;br /&gt;
|peers=[mailto:gsvelto@mozilla.com Gabriele Svelto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=hal/&lt;br /&gt;
|components=Core::Hardware Abstraction Layer (HAL)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HTML Parser&lt;br /&gt;
|description=The HTML Parser transforms HTML source code into a DOM. It conforms to the HTML specification, and is mostly translated automatically from Java to C++.&lt;br /&gt;
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|peers=[mailto:wchen@mozilla.com William Chen]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=parser/html&lt;br /&gt;
|url=http://about.validator.nu/&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=I18N Library&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:hsivonen@hsivonen.fi Henri Sivonen (encoding)], [mailto:jfkthame@gmail.com Jonathan Kew (except to encoding)]&lt;br /&gt;
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura], [mailto:gandalf@aviary.pl Zibi Braniecki], [mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|group=dev-i18n&lt;br /&gt;
|source_dirs=intl/&lt;br /&gt;
|url=http://mozilla.org/projects/intl/index.html&lt;br /&gt;
|components=Core::Internationalization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=ImageLib&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:tnikkel@gmail.com Timothy Nikkel]&lt;br /&gt;
|peers=[mailto:aosmond@mozilla.com Andrew Osmond], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar]&lt;br /&gt;
|peersemeritus=[mailto:seth.bugzilla@blackhail.net Seth Fowler], [mailto:netzen@gmail.com Brian Bondy], [mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::ImageLib&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IPC&lt;br /&gt;
|description=Native message-passing between threads and processes&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:jld@mozilla.com Jed Davis], [mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|peersemeritus=[mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:danderson@mozilla.com David Anderson], [mailto:kchen@mozilla.com Kan-Ru Chen], [mailto:btseng@mozilla.com Bevis Tseng]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript&lt;br /&gt;
|description=JavaScript engine (SpiderMonkey)&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:jdemooij@mozilla.com Jan de Mooij], André Bargull, [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:jcoppeard@mozilla.com Jon Coppeard], [mailto:sphink@gmail.com Steve Fink], [mailto:arai.unmht@gmail.com Tooru Fujisawa], [mailto:khyperia@mozilla.com Ashley Hauck], [mailto:evilpies@gmail.com Tom Schuster], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:jwalden@mit.edu Jeff Walden], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:till@tillschneidereit.net Till Schneidereit], [mailto:efaust@mozilla.com Eric Faust], [mailto:nfitzgerald@mozilla.com Nick Fitzgerald], [mailto:nnethercote@mozilla.com Nick Nethercote], [mailto:luke@mozilla.com Luke Wagner], [mailto:sunfish@mozilla.com Dan Gohman], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:nmatsakis@mozilla.com Niko Matsakis], [mailto:ejpbruel@mozilla.com Eddy Bruel], [mailto:danderson@mozilla.com David Anderson], [mailto:igor@mir2.org Igor Bukanov], Andreas Gal&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey,&lt;br /&gt;
http://developer.mozilla.org/en/docs/About_JavaScript&lt;br /&gt;
|components=Core::JavaScript Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript JIT&lt;br /&gt;
|description=JavaScript engine&#039;s JIT compilers (IonMonkey, Baseline)&lt;br /&gt;
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]&lt;br /&gt;
|peers=[mailto:bbouvier@mozilla.com Benjamin Bouvier], [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:evilpies@gmail.com  Tom Schuster], [mailto:sstangl@mozilla.com Sean Stangl], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:luke@mozilla.com Luke Wagner]&lt;br /&gt;
|peersemeritus=[mailto:danderson@mozilla.com David Anderson], [mailto:hv1989@gmail.com Hannes Verschore]&lt;br /&gt;
|group=dev-tech-js-engine-internals&lt;br /&gt;
|source_dirs=js/src/jit&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey&lt;br /&gt;
|components=Core::JavaScript Engine: JIT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript Debugger Backend&lt;br /&gt;
|description=JavaScript debugging hooks&lt;br /&gt;
|owner=[mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:rginda@hacksrus.com Rob Ginda]&lt;br /&gt;
|group=dev-apps-js-debugger&lt;br /&gt;
|source_dirs=js/jsd/&lt;br /&gt;
|url=http://www.mozilla.org/js/jsd&lt;br /&gt;
|components=Other Applications::Venkman JS Debugger&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=jsat&lt;br /&gt;
|description=Javascript screen reader that is used in Android and B2G&lt;br /&gt;
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]&lt;br /&gt;
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/jsat/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-ctypes&lt;br /&gt;
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src/ctypes/&lt;br /&gt;
|url=https://wiki.mozilla.org/JSctypes&lt;br /&gt;
|components=Core::js-ctypes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-tests&lt;br /&gt;
|description=JavaScript test suite&lt;br /&gt;
|owner=[mailto:bclary@bclary.com Bob Clary]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tests/&lt;br /&gt;
|url=http://www.mozilla.org/js/tests/library.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Layout Engine&lt;br /&gt;
|description=rendering tree construction, layout (reflow), etc.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:bzbarsky@mit.edu Boris Zbarsky],  [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:jfkthame@gmail.com Jonathan Kew], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:matt.woodrow@gmail.com Matt Woodrow], [mailto:xidorn+moz@upsuper.org Xidorn Quan]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/printing/, layout/tables/, layout/tools/&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout, Core::Layout: Block and Inline, Core::Layout: Floats, Core::Layout: Form Controls, Core::Layout: HTML Frames, Core::Layout: Images, Core::Layout: Misc Code, Core::Layout: R &amp;amp; A Pos, Core::Layout: Tables, Core::Layout: Text, Core::Print Preview, Core::Printing: Output&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=libjar&lt;br /&gt;
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).&lt;br /&gt;
|owner=[mailto:mwu@mozilla.com Michael Wu]&lt;br /&gt;
|peers=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libjar&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MathML&lt;br /&gt;
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-tech-mathml&lt;br /&gt;
|source_dirs=layout/mathml/&lt;br /&gt;
|url=http://www.mozilla.org/projects/mathml/&lt;br /&gt;
|components=Core::MathML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Playback&lt;br /&gt;
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).&lt;br /&gt;
|owner=[mailto:jyavenard@mozilla.com Jean-Yves Avenard]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:cpearce@mozilla.com Chris Pearce]&lt;br /&gt;
|peers=[mailto:kinetik@flim.org Matthew Gregan], [mailto:bvandyk@mozilla.com Bryce Van Dyk], [mailto:jolin@mozilla.com John Lin], [mailto:alwu@mozilla.com Alastor Wu], [mailto:jwwang@mozilla.com JW Wang]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=dom/media, media/gmp-clearkey/, media/libcubeb/, media/libnestegg/, media/libogg/, media/libopus/, media/libstagefright/, media/libtheora/, media/libtremor/, media/libvorbis/, media/libvpx/, media/omx-plugin/, media/rlz/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Audio/Video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Transport&lt;br /&gt;
|description=Pluggable transport for real-time media&lt;br /&gt;
|owner=[mailto:ekr@rtfm.com Eric Rescorla]&lt;br /&gt;
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/mtransport&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::WebRTC::Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Memory Allocator&lt;br /&gt;
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=memory/&lt;br /&gt;
|components=Core::DMD, Core::jemalloc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mfbt&lt;br /&gt;
|description=mfbt is a collection of headers, macros, data structures, methods, and other functionality available for use and reuse throughout all Mozilla code (including SpiderMonkey and Gecko more broadly).&lt;br /&gt;
|owner=[mailto:jwalden@mit.edu Jeff Walden]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mfbt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::MFBT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Mozglue&lt;br /&gt;
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd] (mozglue/linker), [mailto:kgupta@mozilla.com Kartikaya Gupta] (mozglue/android), [mailto:nchen@mozilla.com Jim Chen] (mozglue/android), [mailto:aklotz@mozilla.com Aaron Klotz] (Windows Dll Blocklist/Interceptor)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mozglue/&lt;br /&gt;
|components=Core::mozglue&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozilla-toplevel&lt;br /&gt;
|description=The top level directory for the mozilla tree.&lt;br /&gt;
|owner=[mailto:brendan@mozilla.org Brendan Eich]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=tools/README&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MSCOM&lt;br /&gt;
|description=Integration with Microsoft Distributed COM&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|peers=[mailto:jteh@mozilla.com James Teh], [mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/mscom/%&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC: MSCOM}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Necko&lt;br /&gt;
|description=The Mozilla Networking Library&lt;br /&gt;
|owner=[mailto:dd.mozilla@gmail.com  Dragana Damjanovic]&lt;br /&gt;
|peers= [mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:mnovotny@mozilla.com Michal Novotny], [mailto:hurley@mozilla.com Nick Hurley], [mailto:dd.mozilla@gmail.com  Dragana Damjanovic ], [mailto:valentin.gosu@gmail.com Valentin Gosu], [mailto:daniel@haxx.se Daniel Stenberg ], [mailto:jduell.mcbugs@gmail.com Jason Duell] &lt;br /&gt;
|ownersemeritus=[mailto:mcmanus@ducksong.com Patrick McManus], [mailto:cbiesinger@gmail.com Christian Biesinger] |peersemeritus= Shih-Chiang Chien, [mailto:bzbarsky@mit.edu Boris Zbarsky], Steve Workman &lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=netwerk/%, netwerk/base/, netwerk/build/, netwerk/cache/, netwerk/dns/, netwerk/locales/, netwerk/mime/, netwerk/protocol/, netwerk/resources/, netwerk/socket/, netwerk/streamconv/, netwerk/system/, netwerk/test/, netwerk/testserver/&lt;br /&gt;
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko&lt;br /&gt;
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NSPR&lt;br /&gt;
|description=Netscape Portable Runtime&lt;br /&gt;
|owner=[mailto:kaie@kuix.de Kai Engert]&lt;br /&gt;
|peers=[mailto:wtc@google.com Wan-Teh Chang], [mailto:mh@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-tech-nspr&lt;br /&gt;
|source_dirs=nsprpub/&lt;br /&gt;
|url=http://www.mozilla.org/projects/nspr/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/reference/html/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/release-notes/&lt;br /&gt;
|components=NSPR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PDF&lt;br /&gt;
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF&#039; format.&lt;br /&gt;
|owner=Chris Jones, Andreas Gal&lt;br /&gt;
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:bdahl@mozilla.com Brendan Dahl], [mailto:vnicolas@mozilla.com Vivien Nicolas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/pdf/&lt;br /&gt;
|url=https://github.com/mozilla/pdf.js&lt;br /&gt;
|components=Core::PDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Plugins&lt;br /&gt;
|description= NPAPI Plugin support.&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:joshmoz@gmail.com Josh Aas]&lt;br /&gt;
|peersemeritus=[mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:jstenback@gmail.com Johnny Stenback], Benjamin Smedberg&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/plugins/, modules/plugin/&lt;br /&gt;
|url=https://wiki.mozilla.org/Plugins&lt;br /&gt;
|components=Core::Plug-ins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=Preference library&lt;br /&gt;
|owner=[mailto:nnethercote@mozilla.com Nicholas Nethercote]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:felipe@mozilla.com Felipe Gomes], [mailto:glandium@mozilla.com Mike Hommey], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libpref/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Preferences: Backend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Private Browsing&lt;br /&gt;
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.&lt;br /&gt;
|owner=[mailto:josh@joshmatthews.net Josh Matthews] (while Ehsan is away)&lt;br /&gt;
|peers=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. &lt;br /&gt;
|url=https://wiki.mozilla.org/Private_Browsing&lt;br /&gt;
|components=Firefox::Private Browsing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Privilege Manager&lt;br /&gt;
|description=&amp;quot;caps&amp;quot;&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:dveditz@mozilla.com Dan Veditz]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=caps/&lt;br /&gt;
|url=http://www.mozilla.org/projects/security/components/index.html&lt;br /&gt;
|components=Core::Security: CAPS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Push Notifications&lt;br /&gt;
|description=Push is a way for application developers to send messages to their web applications.&lt;br /&gt;
|owners=&lt;br /&gt;
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:lina@mozilla.com Lina Cambridge], [mailto:martin.thomson@gmail.com Martin Thomson], [mailto:ddamjanovic@mozilla.com Dragana Damjanovic]&lt;br /&gt;
|peersemeritus=[mailto:nsm.nikhil@gmail.com Nikhil Marathe]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/push&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM: Push Notifications&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PyXPCOM&lt;br /&gt;
|description=The Python to XPCOM bridge.&lt;br /&gt;
|owner=Todd Whiteman&lt;br /&gt;
|peers=[mailto:mhammond@skippinet.com.au Mark Hammond]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=extension/python&lt;br /&gt;
|url=https://developer.mozilla.org/en/PyXPCOM&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=RDF&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:axel@pike.org Axel Hecht]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-rdf&lt;br /&gt;
|source_dirs=rdf/&lt;br /&gt;
|url=http://www.mozilla.org/rdf/doc/&lt;br /&gt;
|components=Core::RDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=security&lt;br /&gt;
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)&lt;br /&gt;
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:martin.thomson@gmail.com Martin Thomson]&lt;br /&gt;
|ownersemeritus=[mailto:ttaubert@mozilla.com Tim Taubert]&lt;br /&gt;
|peers=[mailto:kaie@kuix.de Kai Engert], [mailto:ryan.sleevi@gmail.com Ryan Sleevi], [mailto:ekr@rtfm.com Eric Rescorla], [mailto:franziskuskiefer@gmail.com Franziskus Kiefer], [mailto:wtc@google.com Wan-Teh Chang], [mailto:dueno@redhat.com Daiki Ueno]&lt;br /&gt;
|peersemeritus=[mailto:emaldona@redhat.com Elio Maldonado]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/&lt;br /&gt;
|url=http://mozilla.org/projects/security/pki/&lt;br /&gt;
|components=NSS, JSS, Core::Security, Core::Security: S/MIME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security - Mozilla PSM Glue&lt;br /&gt;
|description=Personal Security Manager&lt;br /&gt;
|owner=[mailto:dkeeler@mozilla.com Dana Keeler]&lt;br /&gt;
|ownersemeritus=[mailto:kaie@kuix.de Kai Engert (2001-2012)]&lt;br /&gt;
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka], [mailto:jc@mozilla.com J.C. Jones], [mailto:fkiefer@mozilla.com Franziskus Kiefer]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=security/manager/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Security: PSM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Static analysis &amp;amp; rewriting for C++&lt;br /&gt;
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.&lt;br /&gt;
|owner=[mailto:nika@thelayzells.com Nika Layzell] (while Ehsan is away)&lt;br /&gt;
|peers=[mailto:sfink@mozilla.com Steve Fink], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:birunthan@mohanathas.com Birunthan Mohanathas], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:andi@mozilla.com Andi-Bogdan Postelnicu]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Rewriting &amp;amp; Analysis&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=storage&lt;br /&gt;
|description=Storage APIs with a SQLite backend&lt;br /&gt;
|owner=[mailto:mak77@bonardo.net Marco Bonardo]&lt;br /&gt;
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=db/sqlite3/, storage/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/Storage&lt;br /&gt;
|components=Toolkit::Storage, Core::SQL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=String&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=string/, xpcom/string/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide&lt;br /&gt;
|components=Core::String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Style System&lt;br /&gt;
|description=CSS style sheet handling; style data computation&lt;br /&gt;
|owner= [mailto:cam@mcc.id.au Cameron McCormack]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:emilio@crisal.io Emilio Cobos Álvarez], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/style/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System&lt;br /&gt;
|components=Core::CSS Parsing and Computation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=SVG&lt;br /&gt;
|description=Scalable Vector Graphics&lt;br /&gt;
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]&lt;br /&gt;
|group=dev-tech-svg&lt;br /&gt;
|source_dirs=dom/svg/, layout/svg/, dom/smil/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Web/SVG&lt;br /&gt;
|components=Core::SVG&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Tamarin&lt;br /&gt;
|description=VM for ActionScript and JavaScript&lt;br /&gt;
|owner=Edwin Smith, [mailto:jodyer@adobe.com Jeff Dyer]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:stejohns@adobe.com Steven Johnson], [mailto:tierney@adobe.com Erik Tierney], [mailto:treilly@adobe.com Tom Reilly]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tamarin&lt;br /&gt;
|url=http://www.mozilla.org/projects/tamarin/&lt;br /&gt;
http://wiki.mozilla.org/tamarin/&lt;br /&gt;
http://hg.mozilla.org/tamarin-central/&lt;br /&gt;
http://hg.mozilla.org/tamarin-tracing/&lt;br /&gt;
|components=Tamarin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Test Harness&lt;br /&gt;
|description=In-tree test infrastructure and tools. Harnesses include, XPCShell, Mochitest (&amp;amp; Chrome), Reftest, JsREftest, Compiled Code Tests, Robocop, Mozmill, Marionette, Firefox UI Tests. Requests for new harnesses should go to Testing::General.&lt;br /&gt;
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron] (reftest), [mailto:jwalden@mit.edu Jeff Walden] (httpd.js, jsreftest), Rob Campbell (mochitest, mochitest chrome, marionette), [mailto:jmaher@mozilla.com Joel Maher] (reftest, mochitest, jsreftest), [mailto:ctalbert@mozilla.com Clint Talbert] (reftest, compiled code, mozmill), [mailto:geoffbrown@mozilla.com Geoff Brown] (robocop), [mailto:hskupin@mozilla.com Henrik Skupin] (Marionette, Firefox UI tests), [mailto:ato@mozilla.com Andreas Tolfsen] (marionette), [mailto:jgriffin Jonathan Griffin] (marionette), [mailto:dburns@mozilla.com David Burns] (marionette), [mailto:dminor@mozilla.com Dan Minor], [mailto:mjzffr@gmail.com Maja Frydrychowicz] (Marionette, Firefox UI tests), &lt;br /&gt;
&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=/testing&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::General, Testing::Mochitest, Testing::Mochitest Chrome, Testing::Marionette, Testing::Mozmill, Testing::Reftest, Testing::XPCShell Harness, Testing::httpd.js&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Testing Infrastructure&lt;br /&gt;
|description=Testing tools and infrastructure for Mozilla projects, harnesses for automated tests, stand-alone test tools. Talos, Graph Server, Mozbase, Pulse, WOO, Bughunter, SUTAgent, Eideticker&lt;br /&gt;
|owner=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|peers=[mailto:bclary@bclary.com Bob Clary], [mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:ccooper@deadsquid.com Chris Cooper], [mailto:ctalbert@mozilla.com Clint Talbert], [mailto:robert@roberthelmer.com Robert Helmer], [mailto:jmaher@mozilla.com Joel Maher], Rob Campbell, [mailto:wlach@mozilla.com William Lachance], [mailto:jeads@mozilla.com Jonathan Eads], [mailto:jgriffin Jonathan Griffin], [mailto:bmoss@mozilla.com Bob Moss], [mailto:mcote@mozilla.com Mark Côté]&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=testing/, tools/httptester/, tools/page-loader/, tools/test-harness/, tools/tests/, tools/testserver/, tools/testy/&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::Infrastructure&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JS Marionette&lt;br /&gt;
|description=NodeJS test harness, marionette client, and other utilities for running marionette tests (submodule of Test Infrastructure)&lt;br /&gt;
|owner=[mailto:jlal@mozilla.com James Lal] &amp;lt;lightsofapollo&amp;gt;, [mailto:gaye@mozilla.com Gareth Aye] &amp;lt;gaye&amp;gt;&lt;br /&gt;
|peers=[mailto:aus@mozilla.com Ghislain &amp;quot;Aus&amp;quot; Lacroix] &amp;lt;auswerk&amp;gt;&lt;br /&gt;
|source_dirs=gaia/tests/jsmarionette&lt;br /&gt;
|components=Testing::JSMarionette&lt;br /&gt;
|group=dev-gaia&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCShell Test Harness&lt;br /&gt;
|description=The XPCShell Harness&lt;br /&gt;
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|source_dirs=testing/xpcshell&lt;br /&gt;
|components=Testing::XPCShell Harness&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Update Service&lt;br /&gt;
|description=server code for Mozilla Update services (aus, addons, pfs)&lt;br /&gt;
|owner=Mike Morgan&lt;br /&gt;
|peers=[mailto:jscott@mozilla.com Justin Scott], [mailto:shaver@mozilla.org Mike Shaver], [mailto:wclouser@mozilla.com Will Clouser]&lt;br /&gt;
|group=dev-amo&lt;br /&gt;
|source_dirs=webtools/addons/, webtools/aus/, webtools/update/&lt;br /&gt;
|url=http://wiki.mozilla.org/wiki/AMO&lt;br /&gt;
|components=AUS::Administration, AUS::Systems&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=View System&lt;br /&gt;
|description=The View Manager is responsible for handling &amp;quot;heavyweight&amp;quot; rendering (some clipping, compositing) and event handling tasks.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=view/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Audio&lt;br /&gt;
|description=Support for the W3C Web Audio API specification.&lt;br /&gt;
|owner=[mailto:padenot@mozilla.com Paul Adenot]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/media/webaudio&lt;br /&gt;
|url=https://wiki.mozilla.org/Web_Audio_API&lt;br /&gt;
|components=Core::Web Audio&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Painting&lt;br /&gt;
|description=painting, display lists, and layer construction&lt;br /&gt;
|owner=[mailto:matt.woodrow@gmail.com Matt Woodrow]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dbaron@dbaron.org David Baron],   [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:mstange@themasta.com Markus Stange], [mailto:mmynttinen@mozilla.com Miko Mynttinen], [mailto:jnicol@mozilla.com Jamie Nicol]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs= layout/painting, the display list and layer related methods on nsIFrame and its subclasses&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout: Web Painting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC&lt;br /&gt;
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=netwerk/sctp (also see submodules &amp;quot;WebRTC Media&amp;quot; and &amp;quot;WebRTC Signaling&amp;quot;)&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC, Core::WebRTC Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebVR&lt;br /&gt;
|description=Gecko&#039;s implementation of WebVR (Virtual Reality) functionality, including API, devices, graphics and integration&lt;br /&gt;
|owner=[mailto:kgilbert@mozilla.com Kip Gilbert]&lt;br /&gt;
|peers=[mailto:dmu@mozilla.com Daosheng Mu]&lt;br /&gt;
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/vr, gfx/vr&lt;br /&gt;
|url=https://mozvr.com/&lt;br /&gt;
|components=Core::WebVR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], &lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/, widget/xpwidgets/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Android&lt;br /&gt;
|description=The Android Port&lt;br /&gt;
|owner=[mailto:blassey.bugs@lassey.us Brad Lassey]&lt;br /&gt;
|peers=[mailto:jwillcox@mozilla.com James Willcox]&lt;br /&gt;
|group=dev-platforms-mobile&lt;br /&gt;
|source_dirs=widget/android/, embedding/android&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Android&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - GTK&lt;br /&gt;
|description=supported X widgetry and gfx&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/&lt;br /&gt;
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/&lt;br /&gt;
|components=Core::Widget: Gtk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - OS X&lt;br /&gt;
|description= Gecko&#039;s OS X compatibility layer.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:joshmoz@gmail.com Josh Aas], [mailto:bgirard@mozilla.com Benoit Girard], [mailto:spohl@mozilla.com Stephen Pohl], [mailto:smichaud@pobox.com Steven Michaud]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/cocoa/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Cocoa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Windows&lt;br /&gt;
|description=Windows widgets and desktop integration&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peersemeritus=[mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:doug.turner@gmail.com Doug Turner], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref], [mailto:robarnold@cmu.edu Rob Arnold]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/windows/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Win32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XBL&lt;br /&gt;
|description=eXtensible Binding Language&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peers=[mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|ownersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xbl&lt;br /&gt;
|source_dirs=dom/xbl/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xbl/&lt;br /&gt;
|components=Core::XBL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XML&lt;br /&gt;
|description=XML in Mozilla, including XML, XHTML, Namespaces in XML, Associating Style Sheets with XML Documents, XML Linking and XML Extras. XML-related things that are not covered by more specific projects.&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|group=dev-tech-xml&lt;br /&gt;
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/xml/&lt;br /&gt;
|components=Core::XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPApps&lt;br /&gt;
|description=Cross-Platform Applications, mostly Navigator front end and application shell.&lt;br /&gt;
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-apps-seamonkey&lt;br /&gt;
|source_dirs=xpfe/&lt;br /&gt;
|url=http://www.mozilla.org/xpapps/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCOM&lt;br /&gt;
|description=The cross-platform object model and core data structures.&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]&lt;br /&gt;
|peers=[mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|ownersemeritus=Benjamin Smedberg&lt;br /&gt;
|peersemeritus=[https://mozillians.org/en-US/u/dougt/ Doug Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=startupcache/, xpcom/%, xpcom/base/, xpcom/build/, xpcom/components/, xpcom/ds/, xpcom/glue/, xpcom/proxy/, xpcom/sample/, xpcom/stub/, xpcom/tests/, xpcom/threads/, xpcom/tools/, xpcom/windbgdlg/&lt;br /&gt;
|url=http://developer.mozilla.org/en/XPCOM&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPConnect&lt;br /&gt;
|description=Deep Magic&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:kmaglione@mozilla.com Kris Maglione], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peersemeritus=[mailto:gal@uci.edu Andreas Gal], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=js/xpconnect/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::XPConnect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPIDL&lt;br /&gt;
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.&lt;br /&gt;
|owner=[mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=xpcom/typelib/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xpidl&lt;br /&gt;
http://www.mozilla.org/scriptable&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPInstall&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dveditz@mozilla.com Dan Veditz]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-tech-xpinstall&lt;br /&gt;
|source_dirs=xpinstall/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Installer: XPInstall Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPToolkit&lt;br /&gt;
|description=Cross-platform user interface toolkit&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:Jan.Varga@gmail.com Jan Varga]&lt;br /&gt;
|group=dev-tech-xul&lt;br /&gt;
|source_dirs=dom/xul/, layout/xul/&lt;br /&gt;
|url=http://www.mozilla.org/xpfe/&lt;br /&gt;
|components=Core::XP Toolkit/Widgets: Menus, Core::XP Toolkit/Widgets: XUL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XSLT Processor&lt;br /&gt;
|description=XSLT transformations processor&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xslt&lt;br /&gt;
|source_dirs=dom/xslt/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html&lt;br /&gt;
|components=Core::XSLT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Windows &lt;br /&gt;
|description=Sandboxing for the Windows platform &lt;br /&gt;
|owner=[mailto:bobowencode@gmail.com Bob Owen] (:bobowen)&lt;br /&gt;
|peers=[mailto:aklotz@mozilla.com Aaron Klotz] (:aklotz), [mailto:jimm@mozilla.com Jim Mathies] (:jimm), [mailto:davidp99@gmail.com David Parks] (:handyman)&lt;br /&gt;
|ownersemeritus=[https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes]&lt;br /&gt;
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/win &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - OSX &lt;br /&gt;
|description=Sandboxing for the OSX platform &lt;br /&gt;
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox/mac &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Linux&lt;br /&gt;
|description=Sandboxing for the Linux platform&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|peers=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/linux&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Submodules===&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Fennec&lt;br /&gt;
|description=Submodule of the build config covering Fennec&#039;s build system in mobile/android.&lt;br /&gt;
|owner=[mailto:nalexander@mozilla.com Nicholas Alexander]&lt;br /&gt;
|peers=Same as Build Config&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Taskgraph&lt;br /&gt;
|description=Support for task-graph generation in decision, action, and cron tasks, including configuration of all tasks including those for CI, nightlies, and releases; as well as Docker and VM images used to execute those tasks.&lt;br /&gt;
|owner=[mailto:dustin@mozilla.com Dustin Mitchell]&lt;br /&gt;
|peers=[mailto:ahal@mozilla.com Andrew Halberstadt], [mailto:aki@mozilla.com Aki Sasaki], [mailto:bstack@mozilla.com Brian Stack], [mailto:mh@glandium.org Mike Hommey], [mailto:gps@mozilla.com Gregory Szorc], [mailto:jmaher@mozilla.com Joel Maher], [mailto:callek@mozilla.com Justin Wood], [mailto:mozilla@hocat.ca Tom Prince]&lt;br /&gt;
|components=Firefox Build System::Task Configuration&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Media&lt;br /&gt;
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:jib@mozilla.com Jan-Ivar Bruaroey], [mailto:dminor@mozilla.com Dan Minor], [mailto:apehrson@mozilla.com Andreas Pehrson], &lt;br /&gt;
|peersemeritus=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc, /dom/media/webrtc, /dom/media/systemservices&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Audio/Video)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Signaling&lt;br /&gt;
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling&lt;br /&gt;
|owner=[mailto:bcampen@mozilla.com Byron Campen]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:abr@mozilla.com Adam Roach], [mailto:rjesup@mozilla.com Randell Jesup], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc/signaling/&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Signaling)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unassigned Bugzilla Components===&lt;br /&gt;
&lt;br /&gt;
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Core::Find Backend&lt;br /&gt;
Core::General&lt;br /&gt;
Core::HTML: Form Submission&lt;br /&gt;
Core::History: Global&lt;br /&gt;
Core::Image Blocking&lt;br /&gt;
Core::Localization&lt;br /&gt;
Core::Networking: Domain Lists&lt;br /&gt;
Core::Selection&lt;br /&gt;
Core::Serializers&lt;br /&gt;
Core::Spelling checker&lt;br /&gt;
Core::X-remote&lt;br /&gt;
Core::XUL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1202532</id>
		<title>Modules/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1202532"/>
		<updated>2018-10-17T11:38:22Z</updated>

		<summary type="html">&lt;p&gt;Jorend: JS peers: add sfink, khyperia, anba, jonco&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Only module owners may edit this page.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
They may:&lt;br /&gt;
&lt;br /&gt;
* update any information about their module except the name of the owner&lt;br /&gt;
* add or remove sub-modules&lt;br /&gt;
* change the owner of a sub-module &lt;br /&gt;
* add emeritus owners or peers&lt;br /&gt;
&lt;br /&gt;
Other changes, including changes of module owner or addition/removal of modules, must be agreed with the Module Ownership Module group, probably via a discussion in [https://www.mozilla.org/about/forums/#governance mozilla.governance].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Accessibility&lt;br /&gt;
|description=Support for platform accessibility APIs. Accessibility APIs are used by 3rd party software like screen readers, screen magnifiers, and voice dictation software, which need information about document content and UI controls, as well as important events like changes of focus.&lt;br /&gt;
|owner=[mailto:surkov.alexander@gmail.com Alexander Surkov]&lt;br /&gt;
|peers=[mailto:dbolter@mozilla.com David Bolter], [mailto:eitan@monotonous.org Eitan Isaacson], [mailto:jteh@mozilla.com James Teh],  [mailto:mzehe@mozilla.com Marco Zehe], [mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal]&lt;br /&gt;
|peersemeritus=[mailto:tbsaunde+mozbugs@tbsaunde.org Trevor Saunders], [mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Animation&lt;br /&gt;
|description=Declarative animations: CSS animations, CSS transitions, Web Animations API, and off-main thread animations.&lt;br /&gt;
|owner=[mailto:bbirtles@mozilla.com Brian Birtles] (:birtles)&lt;br /&gt;
|peers=[mailto:hiro@mozilla.com Hiroyuki Ikezoe] (:hiro), [mailto:mwoodrow@mozilla.com Matt Woodrow] (:mattwoodrow)&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=dom/animation; and animation-related and interpolation-related code in layout/style, gfx/layers, servo/components/style and servo/ports/gecko&lt;br /&gt;
|components=Core::DOM::Animation, Core::CSS Parsing and Computation (for CSS animations/transitions related bugs)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Browser WebAPI&lt;br /&gt;
|description=Web API for rendering apps, browser windows and widgets.&lt;br /&gt;
|owner=[mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:fabrice@mozilla.com Fabrice Desré]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/browser-element/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build and Release Tools&lt;br /&gt;
|description=Tools related to build and release automation and configuration of release builds.&lt;br /&gt;
|owner=[mailto:nthomas@mozilla.com Nick Thomas]&lt;br /&gt;
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]&lt;br /&gt;
|group=release-engineering&lt;br /&gt;
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/&lt;br /&gt;
|url=https://wiki.mozilla.org/ReleaseEngineering&lt;br /&gt;
|components=Release Engineering::*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config&lt;br /&gt;
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.&lt;br /&gt;
|owner=[mailto:gps@mozilla.com Gregory Szorc] (:gps)&lt;br /&gt;
|peers=[mailto:mh@glandium.org Mike Hommey] (:glandium), [mailto:mshal@mozilla.com Mike Shal] (:mshal), [mailto:ted@mielczarek.org Ted Mielczarek] (:ted), [mailto:cmanchester@mozilla.com Chris Manchester](:chmanchester), [mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj), [mailto:dmajor@mozilla.com David Major] (:dmajor), [mailto:rgiles@mozilla.com Ralph Giles] (:rillian)&lt;br /&gt;
|ownersemeritus=Ted Mielczarek (2008-[https://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/ 2013]), Benjamin Smedberg (???-[http://benjamin.smedbergs.us/blog/2008-04-30/more-changing-of-the-guard-ted-mielczarek/ 2008]), &lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=build/, config/, python/mozbuild, tools/cross-commit, tools/cvs2hg-import.py, tools/cvsmgmt/, tools/elf-dynstr-gc/, tools/trees.pl, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=http://www.mozilla.org/build/&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Code Analysis and Debugging Tools&lt;br /&gt;
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-performance&lt;br /&gt;
|source_dirs=tools/codesighs/, tools/debug/, tools/dreftool/, tools/dumpdeps/, tools/footprint/, tools/jprof/, tools/leaky/, tools/memory/, tools/module-deps/, tools/performance/, tools/post_compile/, tools/preloader/, tools/rb/, tools/reorder/, tools/trace-malloc/, tools/uuiddeps/, &lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content HTTP Headers&lt;br /&gt;
|description=HTTP headers related to content, e.g. User-Agent, Content-Type, Accept. (Transport-related headers are the responsibility of the Necko module owner.)&lt;br /&gt;
|owner=[mailto:gerv@mozilla.org Gervase Markham]&lt;br /&gt;
|peers=[mailto:lmandel@mozilla.com Lawrence Mandel]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs= &lt;br /&gt;
|url=https://developer.mozilla.org/en/Gecko_user_agent_string_reference&lt;br /&gt;
|components=Core::Networking: HTTP&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content Security&lt;br /&gt;
|description=Native content-based security features enforced in the ContentSecurityManager, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Subresource Integrity (SRI), Cross-Origin Resource Sharing (CORS) and top-level data: URI blocking.&lt;br /&gt;
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peers=[mailto:francois@mozilla.com François Marier], [mailto:tvyas@mozilla.com Tanvi Vyas], [mailto:dveditz@mozilla.com Dan Veditz], [mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:jkt@mozilla.com Jonathan Kingston]&lt;br /&gt;
|peersemeritus=[mailto:mozilla@sidstamm.com Sid Stamm], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-security&lt;br /&gt;
|source_dirs=dom/security&lt;br /&gt;
|components=Core::DOM: Security&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cookies and Permissions&lt;br /&gt;
|description=&lt;br /&gt;
|owner=Monica Chew&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=extensions/cookie/, netwerk/cookie/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Networking: Cookies&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cycle Collector&lt;br /&gt;
|description=Code to break and collect objects within reference cycles&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]&lt;br /&gt;
|peers=Peter Van der Beken, Olli Pettay, David Baron&lt;br /&gt;
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=C++/Rust usage, tools, and style&lt;br /&gt;
|description=Aspects of C++ use such as language feature usage, standard library versions/usage, compiler/toolchain versions, formatting and naming style, and aspects of Rust use as needs arise&lt;br /&gt;
|owner=[mailto:nfroyd@mozilla.com Nathan Froyd] (while Ehsan is away)&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:glandium@mozilla.com Mike Hommey], [mailto:jwalden@mozilla.com Jeff Walden], [mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|source_dirs=non-third-party C++ and Rust code in the tree&lt;br /&gt;
|components=Various components&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=docshell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:sawang@mozilla.com Samael Wang]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback],[mailto:cbiesinger@gmail.com Christian Biesinger],[mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=docshell/, uriloader/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Document Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Document Object Model&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:hsivonen@iki.fi Henri Sivonen], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:baku@mozilla.com Andrea Marchesini],&lt;br /&gt;
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:kyle@nonpolynomial.com Kyle Machulis], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|ownersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|peersemeritus=[mailto:justin.lebar@gmail.com Justin Lebar], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:bent.mozilla@gmail.com Ben Turner], [mailto:mounir@lamouri.fr Mounir Lamouri (still active, but slower to respond than previously)], [mailto:me@kylehuey.com Kyle Huey], [mailto:wmccloskey@mozilla.com Bill McCloskey], [ben@wanderview.com Ben Kelly]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/*, except directories covered by other modules&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core &amp;amp; HTML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=DOM File&lt;br /&gt;
|description=DOM Blob, File and FileSystem APIs &lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:olli@pettay.fi Olli Pettay]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/file, dom/filesystem&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: File&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Event Handling&lt;br /&gt;
|description=DOM Events and Event Handling &lt;br /&gt;
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:sshih@mozilla.com Stone Shih]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/events and event handling related code elsewhere &lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: Events, Core::Event Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Workers&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:asuth@mozilla.com Andrew Sutherland]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/workers/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_web_workers&lt;br /&gt;
|components=Core::DOM: Workers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IndexedDB&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|peers=[mailto:btseng@mozilla.com Bevis Tseng], [mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/indexedDB/&lt;br /&gt;
|url=https://developer.mozilla.org/en/IndexedDB&lt;br /&gt;
|components=Core::DOM: IndexedDB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Editor&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=editor/&lt;br /&gt;
|url=http://www.mozilla.org/editor/&lt;br /&gt;
|components=Core::Editor&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Embedding&lt;br /&gt;
|description=Gecko embedding APIs and frameworks&lt;br /&gt;
|owner=[mailto:myk@mykzilla.org Myk Melez]&lt;br /&gt;
|ownersemeritus=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:bdahl@mozilla.com Brendan Dahl], [mailto:tbsaunde@tbsaunde.org Trevor Saunders]&lt;br /&gt;
|peersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=embedding/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Embedding: APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Find As You Type&lt;br /&gt;
|description=Find As You Type (formerly called Type Ahead Find) is a feature that allows quick web page navigation when you type a succession of characters in the body of the displayed page (not in an edit box of or drop down list). Currently seeks new owner.&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=extensions/typeaheadfind/&lt;br /&gt;
|url=http://www.mozilla.org/access/type-ahead/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Gecko Profiler&lt;br /&gt;
|description=Gecko&#039;s built-in profiler&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:nnethercote@mozilla.com Nicholas Nethercote], [mailto:jseward@mozilla.com Julian Seward] (LUL), [mailto:kvijayan@mozilla.com Kannan Vijayan] (JS integration), [mailto:shu@mozilla.com Shu-yu Guo] (JS integration), [mailto:tlee@mozilla.com Thinker Lee] (TaskTracer), [mailto:cyu@mozilla.com Cervantes Yu] (TaskTracer), [mailto:b56girard@gmail.com Benoit Girard].&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=tools/profiler/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler&lt;br /&gt;
|components=Core::Gecko Profiler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Geolocation&lt;br /&gt;
|description=Implementation of the Geolocation W3C Spec, location provider apis, and wifi scanning code.&lt;br /&gt;
|owner=[mailto:josh@joshmatthews.net Josh Matthews], [mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner], Garvan Keeley&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/geolocation, dom/system/, netwerk/wifi&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_geolocation&lt;br /&gt;
|components=Core::Geolocation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Global Key Bindings&lt;br /&gt;
|description=Global hot keys in Mozilla for the browser, editor, mail-news and widgets. Does not include underlined menu accelerators and the like, as those are part of i18n.&lt;br /&gt;
|owner=Aaron Leventhal&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=dom/xbl/builtin/&lt;br /&gt;
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html&lt;br /&gt;
|components=Core::Keyboard: Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Graphics&lt;br /&gt;
|description=Mozilla graphics API&lt;br /&gt;
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:jdrew@mozilla.com Joe Drew], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:bas.schouten@live.nl Bas Schouten](Layers, Windows), [mailto:bjacob@mozilla.com Benoit Jacob](gfx/gl), [mailto:bgirard@mozilla.com Benoit Girard](Compositor, Performance), [mailto:ajuma.bugzilla@alijuma.com Ali Juma], [mailto:jgilbert@mozilla.com Jeff Gilbert](WebGL, ANGLE), [mailto:george@mozilla.com George Wright](Canvas2D), [mailto:mwoodrow@mozilla.com Matt Woodrow](Layers API), [mailto:jdaggett@mozilla.com John Daggett](text/fonts), [mailto:jfkthame@googlemail.com Jonathan Kew](text/fonts), [mailto:nsilva@mozilla.com  Nicolas Silva](MozSurface), [mailto:ncameron@mozilla.com Nick Cameron], [mailto:sikeda@mozilla.com Sotaro Ikeda](B2G), [mailto:snorp@mozilla.com James Willcox](Android), [mailto:clord@mozilla.com Christopher Lord], [mailto:mstange@themasta.com Markus Stange](OS X), [mailto:lsalzman@mozilla.com Lee Salzman](Skia), [mailto:mchang@mozilla.com Mason Chang], [mailto:dvander@mozilla.com David Anderson], [mailto:rhunt@mozilla.com Ryan Hunt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/, dom/canvas/&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch&lt;br /&gt;
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=APZ (Graphics submodule)&lt;br /&gt;
|description=Asynchronous panning and zooming&lt;br /&gt;
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:tnikkel@mozilla.com Timothy Nikkel], [mailto:dvander@mozilla.com David Anderson], [mailto:mstange@mozilla.com Markus Stange]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/layers/apz&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/APZ&lt;br /&gt;
|components=Core::Panning and Zooming&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Moz2D (Graphics submodule)&lt;br /&gt;
|description=Platform independent 2D graphics API&lt;br /&gt;
|owner=[mailto:bschouten@mozilla.com Bas Schouten]&lt;br /&gt;
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/2d&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D&lt;br /&gt;
|components=Core::Graphics&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Legacy HTML Parser&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:rbs@maths.uq.edu.au rbs@maths.uq.edu.au]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|source_dirs=parser/htmlparser&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/doc/parser.html&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HAL&lt;br /&gt;
|description=Hardware Abstraction Layer&lt;br /&gt;
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands]&lt;br /&gt;
|peers=[mailto:gsvelto@mozilla.com Gabriele Svelto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=hal/&lt;br /&gt;
|components=Core::Hardware Abstraction Layer (HAL)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HTML Parser&lt;br /&gt;
|description=The HTML Parser transforms HTML source code into a DOM. It conforms to the HTML specification, and is mostly translated automatically from Java to C++.&lt;br /&gt;
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|peers=[mailto:wchen@mozilla.com William Chen]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=parser/html&lt;br /&gt;
|url=http://about.validator.nu/&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=I18N Library&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:hsivonen@hsivonen.fi Henri Sivonen (encoding)], [mailto:jfkthame@gmail.com Jonathan Kew (except to encoding)]&lt;br /&gt;
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura], [mailto:gandalf@aviary.pl Zibi Braniecki], [mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|group=dev-i18n&lt;br /&gt;
|source_dirs=intl/&lt;br /&gt;
|url=http://mozilla.org/projects/intl/index.html&lt;br /&gt;
|components=Core::Internationalization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=ImageLib&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:tnikkel@gmail.com Timothy Nikkel]&lt;br /&gt;
|peers=[mailto:aosmond@mozilla.com Andrew Osmond], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar]&lt;br /&gt;
|peersemeritus=[mailto:seth.bugzilla@blackhail.net Seth Fowler], [mailto:netzen@gmail.com Brian Bondy], [mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::ImageLib&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IPC&lt;br /&gt;
|description=Native message-passing between threads and processes&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:jld@mozilla.com Jed Davis], [mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|peersemeritus=[mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:danderson@mozilla.com David Anderson], [mailto:kchen@mozilla.com Kan-Ru Chen], [mailto:btseng@mozilla.com Bevis Tseng]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript&lt;br /&gt;
|description=JavaScript engine (SpiderMonkey)&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:jdemooij@mozilla.com Jan de Mooij], André Bargull, [mailto:tcampbell@mozilla.com Ted Campbell], [jcoppeard@mozilla.com Jon Coppeard], [mailto:sphink@gmail.com Steve Fink], [mailto:arai.unmht@gmail.com Tooru Fujisawa], [mailto:khyperia@mozilla.com Ashley Hauck], [mailto:evilpies@gmail.com Tom Schuster], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:jwalden@mit.edu Jeff Walden], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:till@tillschneidereit.net Till Schneidereit], [mailto:efaust@mozilla.com Eric Faust], [mailto:nfitzgerald@mozilla.com Nick Fitzgerald], [mailto:nnethercote@mozilla.com Nick Nethercote], [mailto:luke@mozilla.com Luke Wagner], [mailto:sunfish@mozilla.com Dan Gohman], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:nmatsakis@mozilla.com Niko Matsakis], [mailto:ejpbruel@mozilla.com Eddy Bruel], [mailto:danderson@mozilla.com David Anderson], [mailto:igor@mir2.org Igor Bukanov], Andreas Gal&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey,&lt;br /&gt;
http://developer.mozilla.org/en/docs/About_JavaScript&lt;br /&gt;
|components=Core::JavaScript Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript JIT&lt;br /&gt;
|description=JavaScript engine&#039;s JIT compilers (IonMonkey, Baseline)&lt;br /&gt;
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]&lt;br /&gt;
|peers=[mailto:bbouvier@mozilla.com Benjamin Bouvier], [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:evilpies@gmail.com  Tom Schuster], [mailto:sstangl@mozilla.com Sean Stangl], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:luke@mozilla.com Luke Wagner]&lt;br /&gt;
|peersemeritus=[mailto:danderson@mozilla.com David Anderson], [mailto:hv1989@gmail.com Hannes Verschore]&lt;br /&gt;
|group=dev-tech-js-engine-internals&lt;br /&gt;
|source_dirs=js/src/jit&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey&lt;br /&gt;
|components=Core::JavaScript Engine: JIT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript Debugger Backend&lt;br /&gt;
|description=JavaScript debugging hooks&lt;br /&gt;
|owner=[mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:rginda@hacksrus.com Rob Ginda]&lt;br /&gt;
|group=dev-apps-js-debugger&lt;br /&gt;
|source_dirs=js/jsd/&lt;br /&gt;
|url=http://www.mozilla.org/js/jsd&lt;br /&gt;
|components=Other Applications::Venkman JS Debugger&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=jsat&lt;br /&gt;
|description=Javascript screen reader that is used in Android and B2G&lt;br /&gt;
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]&lt;br /&gt;
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/jsat/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-ctypes&lt;br /&gt;
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src/ctypes/&lt;br /&gt;
|url=https://wiki.mozilla.org/JSctypes&lt;br /&gt;
|components=Core::js-ctypes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-tests&lt;br /&gt;
|description=JavaScript test suite&lt;br /&gt;
|owner=[mailto:bclary@bclary.com Bob Clary]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tests/&lt;br /&gt;
|url=http://www.mozilla.org/js/tests/library.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Layout Engine&lt;br /&gt;
|description=rendering tree construction, layout (reflow), etc.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:bzbarsky@mit.edu Boris Zbarsky],  [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:jfkthame@gmail.com Jonathan Kew], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:matt.woodrow@gmail.com Matt Woodrow], [mailto:xidorn+moz@upsuper.org Xidorn Quan]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/printing/, layout/tables/, layout/tools/&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout, Core::Layout: Block and Inline, Core::Layout: Floats, Core::Layout: Form Controls, Core::Layout: HTML Frames, Core::Layout: Images, Core::Layout: Misc Code, Core::Layout: R &amp;amp; A Pos, Core::Layout: Tables, Core::Layout: Text, Core::Print Preview, Core::Printing: Output&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=libjar&lt;br /&gt;
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).&lt;br /&gt;
|owner=[mailto:mwu@mozilla.com Michael Wu]&lt;br /&gt;
|peers=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libjar&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MathML&lt;br /&gt;
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-tech-mathml&lt;br /&gt;
|source_dirs=layout/mathml/&lt;br /&gt;
|url=http://www.mozilla.org/projects/mathml/&lt;br /&gt;
|components=Core::MathML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Playback&lt;br /&gt;
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).&lt;br /&gt;
|owner=[mailto:jyavenard@mozilla.com Jean-Yves Avenard]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:cpearce@mozilla.com Chris Pearce]&lt;br /&gt;
|peers=[mailto:kinetik@flim.org Matthew Gregan], [mailto:bvandyk@mozilla.com Bryce Van Dyk], [mailto:jolin@mozilla.com John Lin], [mailto:alwu@mozilla.com Alastor Wu], [mailto:jwwang@mozilla.com JW Wang]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=dom/media, media/gmp-clearkey/, media/libcubeb/, media/libnestegg/, media/libogg/, media/libopus/, media/libstagefright/, media/libtheora/, media/libtremor/, media/libvorbis/, media/libvpx/, media/omx-plugin/, media/rlz/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Audio/Video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Transport&lt;br /&gt;
|description=Pluggable transport for real-time media&lt;br /&gt;
|owner=[mailto:ekr@rtfm.com Eric Rescorla]&lt;br /&gt;
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/mtransport&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::WebRTC::Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Memory Allocator&lt;br /&gt;
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=memory/&lt;br /&gt;
|components=Core::DMD, Core::jemalloc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mfbt&lt;br /&gt;
|description=mfbt is a collection of headers, macros, data structures, methods, and other functionality available for use and reuse throughout all Mozilla code (including SpiderMonkey and Gecko more broadly).&lt;br /&gt;
|owner=[mailto:jwalden@mit.edu Jeff Walden]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mfbt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::MFBT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Mozglue&lt;br /&gt;
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd] (mozglue/linker), [mailto:kgupta@mozilla.com Kartikaya Gupta] (mozglue/android), [mailto:nchen@mozilla.com Jim Chen] (mozglue/android), [mailto:aklotz@mozilla.com Aaron Klotz] (Windows Dll Blocklist/Interceptor)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mozglue/&lt;br /&gt;
|components=Core::mozglue&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozilla-toplevel&lt;br /&gt;
|description=The top level directory for the mozilla tree.&lt;br /&gt;
|owner=[mailto:brendan@mozilla.org Brendan Eich]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=tools/README&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MSCOM&lt;br /&gt;
|description=Integration with Microsoft Distributed COM&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|peers=[mailto:jteh@mozilla.com James Teh], [mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/mscom/%&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC: MSCOM}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Necko&lt;br /&gt;
|description=The Mozilla Networking Library&lt;br /&gt;
|owner=[mailto:dd.mozilla@gmail.com  Dragana Damjanovic]&lt;br /&gt;
|peers= [mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:mnovotny@mozilla.com Michal Novotny], [mailto:hurley@mozilla.com Nick Hurley], [mailto:dd.mozilla@gmail.com  Dragana Damjanovic ], [mailto:valentin.gosu@gmail.com Valentin Gosu], [mailto:daniel@haxx.se Daniel Stenberg ], [mailto:jduell.mcbugs@gmail.com Jason Duell] &lt;br /&gt;
|ownersemeritus=[mailto:mcmanus@ducksong.com Patrick McManus], [mailto:cbiesinger@gmail.com Christian Biesinger] |peersemeritus= Shih-Chiang Chien, [mailto:bzbarsky@mit.edu Boris Zbarsky], Steve Workman &lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=netwerk/%, netwerk/base/, netwerk/build/, netwerk/cache/, netwerk/dns/, netwerk/locales/, netwerk/mime/, netwerk/protocol/, netwerk/resources/, netwerk/socket/, netwerk/streamconv/, netwerk/system/, netwerk/test/, netwerk/testserver/&lt;br /&gt;
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko&lt;br /&gt;
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NSPR&lt;br /&gt;
|description=Netscape Portable Runtime&lt;br /&gt;
|owner=[mailto:kaie@kuix.de Kai Engert]&lt;br /&gt;
|peers=[mailto:wtc@google.com Wan-Teh Chang], [mailto:mh@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-tech-nspr&lt;br /&gt;
|source_dirs=nsprpub/&lt;br /&gt;
|url=http://www.mozilla.org/projects/nspr/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/reference/html/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/release-notes/&lt;br /&gt;
|components=NSPR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PDF&lt;br /&gt;
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF&#039; format.&lt;br /&gt;
|owner=Chris Jones, Andreas Gal&lt;br /&gt;
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:bdahl@mozilla.com Brendan Dahl], [mailto:vnicolas@mozilla.com Vivien Nicolas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/pdf/&lt;br /&gt;
|url=https://github.com/mozilla/pdf.js&lt;br /&gt;
|components=Core::PDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Plugins&lt;br /&gt;
|description= NPAPI Plugin support.&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:joshmoz@gmail.com Josh Aas]&lt;br /&gt;
|peersemeritus=[mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:jstenback@gmail.com Johnny Stenback], Benjamin Smedberg&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/plugins/, modules/plugin/&lt;br /&gt;
|url=https://wiki.mozilla.org/Plugins&lt;br /&gt;
|components=Core::Plug-ins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=Preference library&lt;br /&gt;
|owner=[mailto:nnethercote@mozilla.com Nicholas Nethercote]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:felipe@mozilla.com Felipe Gomes], [mailto:glandium@mozilla.com Mike Hommey], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libpref/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Preferences: Backend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Private Browsing&lt;br /&gt;
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.&lt;br /&gt;
|owner=[mailto:josh@joshmatthews.net Josh Matthews] (while Ehsan is away)&lt;br /&gt;
|peers=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. &lt;br /&gt;
|url=https://wiki.mozilla.org/Private_Browsing&lt;br /&gt;
|components=Firefox::Private Browsing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Privilege Manager&lt;br /&gt;
|description=&amp;quot;caps&amp;quot;&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:dveditz@mozilla.com Dan Veditz]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=caps/&lt;br /&gt;
|url=http://www.mozilla.org/projects/security/components/index.html&lt;br /&gt;
|components=Core::Security: CAPS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Push Notifications&lt;br /&gt;
|description=Push is a way for application developers to send messages to their web applications.&lt;br /&gt;
|owners=&lt;br /&gt;
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:lina@mozilla.com Lina Cambridge], [mailto:martin.thomson@gmail.com Martin Thomson], [mailto:ddamjanovic@mozilla.com Dragana Damjanovic]&lt;br /&gt;
|peersemeritus=[mailto:nsm.nikhil@gmail.com Nikhil Marathe]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/push&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM: Push Notifications&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PyXPCOM&lt;br /&gt;
|description=The Python to XPCOM bridge.&lt;br /&gt;
|owner=Todd Whiteman&lt;br /&gt;
|peers=[mailto:mhammond@skippinet.com.au Mark Hammond]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=extension/python&lt;br /&gt;
|url=https://developer.mozilla.org/en/PyXPCOM&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=RDF&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:axel@pike.org Axel Hecht]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-rdf&lt;br /&gt;
|source_dirs=rdf/&lt;br /&gt;
|url=http://www.mozilla.org/rdf/doc/&lt;br /&gt;
|components=Core::RDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=security&lt;br /&gt;
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)&lt;br /&gt;
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:martin.thomson@gmail.com Martin Thomson]&lt;br /&gt;
|ownersemeritus=[mailto:ttaubert@mozilla.com Tim Taubert]&lt;br /&gt;
|peers=[mailto:kaie@kuix.de Kai Engert], [mailto:ryan.sleevi@gmail.com Ryan Sleevi], [mailto:ekr@rtfm.com Eric Rescorla], [mailto:franziskuskiefer@gmail.com Franziskus Kiefer], [mailto:wtc@google.com Wan-Teh Chang], [mailto:dueno@redhat.com Daiki Ueno]&lt;br /&gt;
|peersemeritus=[mailto:emaldona@redhat.com Elio Maldonado]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/&lt;br /&gt;
|url=http://mozilla.org/projects/security/pki/&lt;br /&gt;
|components=NSS, JSS, Core::Security, Core::Security: S/MIME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security - Mozilla PSM Glue&lt;br /&gt;
|description=Personal Security Manager&lt;br /&gt;
|owner=[mailto:dkeeler@mozilla.com Dana Keeler]&lt;br /&gt;
|ownersemeritus=[mailto:kaie@kuix.de Kai Engert (2001-2012)]&lt;br /&gt;
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka], [mailto:jc@mozilla.com J.C. Jones], [mailto:fkiefer@mozilla.com Franziskus Kiefer]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=security/manager/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Security: PSM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Static analysis &amp;amp; rewriting for C++&lt;br /&gt;
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.&lt;br /&gt;
|owner=[mailto:nika@thelayzells.com Nika Layzell] (while Ehsan is away)&lt;br /&gt;
|peers=[mailto:sfink@mozilla.com Steve Fink], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:birunthan@mohanathas.com Birunthan Mohanathas], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:andi@mozilla.com Andi-Bogdan Postelnicu]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Rewriting &amp;amp; Analysis&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=storage&lt;br /&gt;
|description=Storage APIs with a SQLite backend&lt;br /&gt;
|owner=[mailto:mak77@bonardo.net Marco Bonardo]&lt;br /&gt;
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=db/sqlite3/, storage/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/Storage&lt;br /&gt;
|components=Toolkit::Storage, Core::SQL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=String&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=string/, xpcom/string/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide&lt;br /&gt;
|components=Core::String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Style System&lt;br /&gt;
|description=CSS style sheet handling; style data computation&lt;br /&gt;
|owner= [mailto:cam@mcc.id.au Cameron McCormack]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:emilio@crisal.io Emilio Cobos Álvarez], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/style/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System&lt;br /&gt;
|components=Core::CSS Parsing and Computation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=SVG&lt;br /&gt;
|description=Scalable Vector Graphics&lt;br /&gt;
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]&lt;br /&gt;
|group=dev-tech-svg&lt;br /&gt;
|source_dirs=dom/svg/, layout/svg/, dom/smil/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Web/SVG&lt;br /&gt;
|components=Core::SVG&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Tamarin&lt;br /&gt;
|description=VM for ActionScript and JavaScript&lt;br /&gt;
|owner=Edwin Smith, [mailto:jodyer@adobe.com Jeff Dyer]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:stejohns@adobe.com Steven Johnson], [mailto:tierney@adobe.com Erik Tierney], [mailto:treilly@adobe.com Tom Reilly]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tamarin&lt;br /&gt;
|url=http://www.mozilla.org/projects/tamarin/&lt;br /&gt;
http://wiki.mozilla.org/tamarin/&lt;br /&gt;
http://hg.mozilla.org/tamarin-central/&lt;br /&gt;
http://hg.mozilla.org/tamarin-tracing/&lt;br /&gt;
|components=Tamarin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Test Harness&lt;br /&gt;
|description=In-tree test infrastructure and tools. Harnesses include, XPCShell, Mochitest (&amp;amp; Chrome), Reftest, JsREftest, Compiled Code Tests, Robocop, Mozmill, Marionette, Firefox UI Tests. Requests for new harnesses should go to Testing::General.&lt;br /&gt;
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron] (reftest), [mailto:jwalden@mit.edu Jeff Walden] (httpd.js, jsreftest), Rob Campbell (mochitest, mochitest chrome, marionette), [mailto:jmaher@mozilla.com Joel Maher] (reftest, mochitest, jsreftest), [mailto:ctalbert@mozilla.com Clint Talbert] (reftest, compiled code, mozmill), [mailto:geoffbrown@mozilla.com Geoff Brown] (robocop), [mailto:hskupin@mozilla.com Henrik Skupin] (Marionette, Firefox UI tests), [mailto:ato@mozilla.com Andreas Tolfsen] (marionette), [mailto:jgriffin Jonathan Griffin] (marionette), [mailto:dburns@mozilla.com David Burns] (marionette), [mailto:dminor@mozilla.com Dan Minor], [mailto:mjzffr@gmail.com Maja Frydrychowicz] (Marionette, Firefox UI tests), &lt;br /&gt;
&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=/testing&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::General, Testing::Mochitest, Testing::Mochitest Chrome, Testing::Marionette, Testing::Mozmill, Testing::Reftest, Testing::XPCShell Harness, Testing::httpd.js&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Testing Infrastructure&lt;br /&gt;
|description=Testing tools and infrastructure for Mozilla projects, harnesses for automated tests, stand-alone test tools. Talos, Graph Server, Mozbase, Pulse, WOO, Bughunter, SUTAgent, Eideticker&lt;br /&gt;
|owner=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|peers=[mailto:bclary@bclary.com Bob Clary], [mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:ccooper@deadsquid.com Chris Cooper], [mailto:ctalbert@mozilla.com Clint Talbert], [mailto:robert@roberthelmer.com Robert Helmer], [mailto:jmaher@mozilla.com Joel Maher], Rob Campbell, [mailto:wlach@mozilla.com William Lachance], [mailto:jeads@mozilla.com Jonathan Eads], [mailto:jgriffin Jonathan Griffin], [mailto:bmoss@mozilla.com Bob Moss], [mailto:mcote@mozilla.com Mark Côté]&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=testing/, tools/httptester/, tools/page-loader/, tools/test-harness/, tools/tests/, tools/testserver/, tools/testy/&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::Infrastructure&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JS Marionette&lt;br /&gt;
|description=NodeJS test harness, marionette client, and other utilities for running marionette tests (submodule of Test Infrastructure)&lt;br /&gt;
|owner=[mailto:jlal@mozilla.com James Lal] &amp;lt;lightsofapollo&amp;gt;, [mailto:gaye@mozilla.com Gareth Aye] &amp;lt;gaye&amp;gt;&lt;br /&gt;
|peers=[mailto:aus@mozilla.com Ghislain &amp;quot;Aus&amp;quot; Lacroix] &amp;lt;auswerk&amp;gt;&lt;br /&gt;
|source_dirs=gaia/tests/jsmarionette&lt;br /&gt;
|components=Testing::JSMarionette&lt;br /&gt;
|group=dev-gaia&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCShell Test Harness&lt;br /&gt;
|description=The XPCShell Harness&lt;br /&gt;
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|source_dirs=testing/xpcshell&lt;br /&gt;
|components=Testing::XPCShell Harness&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Update Service&lt;br /&gt;
|description=server code for Mozilla Update services (aus, addons, pfs)&lt;br /&gt;
|owner=Mike Morgan&lt;br /&gt;
|peers=[mailto:jscott@mozilla.com Justin Scott], [mailto:shaver@mozilla.org Mike Shaver], [mailto:wclouser@mozilla.com Will Clouser]&lt;br /&gt;
|group=dev-amo&lt;br /&gt;
|source_dirs=webtools/addons/, webtools/aus/, webtools/update/&lt;br /&gt;
|url=http://wiki.mozilla.org/wiki/AMO&lt;br /&gt;
|components=AUS::Administration, AUS::Systems&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=View System&lt;br /&gt;
|description=The View Manager is responsible for handling &amp;quot;heavyweight&amp;quot; rendering (some clipping, compositing) and event handling tasks.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=view/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Audio&lt;br /&gt;
|description=Support for the W3C Web Audio API specification.&lt;br /&gt;
|owner=[mailto:padenot@mozilla.com Paul Adenot]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/media/webaudio&lt;br /&gt;
|url=https://wiki.mozilla.org/Web_Audio_API&lt;br /&gt;
|components=Core::Web Audio&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Painting&lt;br /&gt;
|description=painting, display lists, and layer construction&lt;br /&gt;
|owner=[mailto:matt.woodrow@gmail.com Matt Woodrow]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dbaron@dbaron.org David Baron],   [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:mstange@themasta.com Markus Stange], [mailto:mmynttinen@mozilla.com Miko Mynttinen], [mailto:jnicol@mozilla.com Jamie Nicol]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs= layout/painting, the display list and layer related methods on nsIFrame and its subclasses&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout: Web Painting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC&lt;br /&gt;
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=netwerk/sctp (also see submodules &amp;quot;WebRTC Media&amp;quot; and &amp;quot;WebRTC Signaling&amp;quot;)&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC, Core::WebRTC Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebVR&lt;br /&gt;
|description=Gecko&#039;s implementation of WebVR (Virtual Reality) functionality, including API, devices, graphics and integration&lt;br /&gt;
|owner=[mailto:kgilbert@mozilla.com Kip Gilbert]&lt;br /&gt;
|peers=[mailto:dmu@mozilla.com Daosheng Mu]&lt;br /&gt;
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/vr, gfx/vr&lt;br /&gt;
|url=https://mozvr.com/&lt;br /&gt;
|components=Core::WebVR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], &lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/, widget/xpwidgets/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Android&lt;br /&gt;
|description=The Android Port&lt;br /&gt;
|owner=[mailto:blassey.bugs@lassey.us Brad Lassey]&lt;br /&gt;
|peers=[mailto:jwillcox@mozilla.com James Willcox]&lt;br /&gt;
|group=dev-platforms-mobile&lt;br /&gt;
|source_dirs=widget/android/, embedding/android&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Android&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - GTK&lt;br /&gt;
|description=supported X widgetry and gfx&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/&lt;br /&gt;
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/&lt;br /&gt;
|components=Core::Widget: Gtk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - OS X&lt;br /&gt;
|description= Gecko&#039;s OS X compatibility layer.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:joshmoz@gmail.com Josh Aas], [mailto:bgirard@mozilla.com Benoit Girard], [mailto:spohl@mozilla.com Stephen Pohl], [mailto:smichaud@pobox.com Steven Michaud]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/cocoa/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Cocoa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Windows&lt;br /&gt;
|description=Windows widgets and desktop integration&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peersemeritus=[mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:doug.turner@gmail.com Doug Turner], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref], [mailto:robarnold@cmu.edu Rob Arnold]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/windows/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Win32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XBL&lt;br /&gt;
|description=eXtensible Binding Language&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peers=[mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|ownersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xbl&lt;br /&gt;
|source_dirs=dom/xbl/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xbl/&lt;br /&gt;
|components=Core::XBL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XML&lt;br /&gt;
|description=XML in Mozilla, including XML, XHTML, Namespaces in XML, Associating Style Sheets with XML Documents, XML Linking and XML Extras. XML-related things that are not covered by more specific projects.&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|group=dev-tech-xml&lt;br /&gt;
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/xml/&lt;br /&gt;
|components=Core::XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPApps&lt;br /&gt;
|description=Cross-Platform Applications, mostly Navigator front end and application shell.&lt;br /&gt;
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-apps-seamonkey&lt;br /&gt;
|source_dirs=xpfe/&lt;br /&gt;
|url=http://www.mozilla.org/xpapps/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCOM&lt;br /&gt;
|description=The cross-platform object model and core data structures.&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]&lt;br /&gt;
|peers=[mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|ownersemeritus=Benjamin Smedberg&lt;br /&gt;
|peersemeritus=[https://mozillians.org/en-US/u/dougt/ Doug Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=startupcache/, xpcom/%, xpcom/base/, xpcom/build/, xpcom/components/, xpcom/ds/, xpcom/glue/, xpcom/proxy/, xpcom/sample/, xpcom/stub/, xpcom/tests/, xpcom/threads/, xpcom/tools/, xpcom/windbgdlg/&lt;br /&gt;
|url=http://developer.mozilla.org/en/XPCOM&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPConnect&lt;br /&gt;
|description=Deep Magic&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:kmaglione@mozilla.com Kris Maglione], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peersemeritus=[mailto:gal@uci.edu Andreas Gal], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=js/xpconnect/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::XPConnect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPIDL&lt;br /&gt;
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.&lt;br /&gt;
|owner=[mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=xpcom/typelib/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xpidl&lt;br /&gt;
http://www.mozilla.org/scriptable&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPInstall&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dveditz@mozilla.com Dan Veditz]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-tech-xpinstall&lt;br /&gt;
|source_dirs=xpinstall/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Installer: XPInstall Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPToolkit&lt;br /&gt;
|description=Cross-platform user interface toolkit&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:Jan.Varga@gmail.com Jan Varga]&lt;br /&gt;
|group=dev-tech-xul&lt;br /&gt;
|source_dirs=dom/xul/, layout/xul/&lt;br /&gt;
|url=http://www.mozilla.org/xpfe/&lt;br /&gt;
|components=Core::XP Toolkit/Widgets: Menus, Core::XP Toolkit/Widgets: XUL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XSLT Processor&lt;br /&gt;
|description=XSLT transformations processor&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xslt&lt;br /&gt;
|source_dirs=dom/xslt/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html&lt;br /&gt;
|components=Core::XSLT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Windows &lt;br /&gt;
|description=Sandboxing for the Windows platform &lt;br /&gt;
|owner=[mailto:bobowencode@gmail.com Bob Owen] (:bobowen)&lt;br /&gt;
|peers=[mailto:aklotz@mozilla.com Aaron Klotz] (:aklotz), [mailto:jimm@mozilla.com Jim Mathies] (:jimm), [mailto:davidp99@gmail.com David Parks] (:handyman)&lt;br /&gt;
|ownersemeritus=[https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes]&lt;br /&gt;
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/win &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - OSX &lt;br /&gt;
|description=Sandboxing for the OSX platform &lt;br /&gt;
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox/mac &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Linux&lt;br /&gt;
|description=Sandboxing for the Linux platform&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|peers=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/linux&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Submodules===&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Fennec&lt;br /&gt;
|description=Submodule of the build config covering Fennec&#039;s build system in mobile/android.&lt;br /&gt;
|owner=[mailto:nalexander@mozilla.com Nicholas Alexander]&lt;br /&gt;
|peers=Same as Build Config&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Taskgraph&lt;br /&gt;
|description=Support for task-graph generation in decision, action, and cron tasks, including configuration of all tasks including those for CI, nightlies, and releases; as well as Docker and VM images used to execute those tasks.&lt;br /&gt;
|owner=[mailto:dustin@mozilla.com Dustin Mitchell]&lt;br /&gt;
|peers=[mailto:ahal@mozilla.com Andrew Halberstadt], [mailto:aki@mozilla.com Aki Sasaki], [mailto:bstack@mozilla.com Brian Stack], [mailto:mh@glandium.org Mike Hommey], [mailto:gps@mozilla.com Gregory Szorc], [mailto:jmaher@mozilla.com Joel Maher], [mailto:callek@mozilla.com Justin Wood], [mailto:mozilla@hocat.ca Tom Prince]&lt;br /&gt;
|components=Firefox Build System::Task Configuration&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Media&lt;br /&gt;
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:jib@mozilla.com Jan-Ivar Bruaroey], [mailto:dminor@mozilla.com Dan Minor], [mailto:apehrson@mozilla.com Andreas Pehrson], &lt;br /&gt;
|peersemeritus=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc, /dom/media/webrtc, /dom/media/systemservices&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Audio/Video)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Signaling&lt;br /&gt;
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling&lt;br /&gt;
|owner=[mailto:bcampen@mozilla.com Byron Campen]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:abr@mozilla.com Adam Roach], [mailto:rjesup@mozilla.com Randell Jesup], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc/signaling/&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Signaling)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unassigned Bugzilla Components===&lt;br /&gt;
&lt;br /&gt;
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Core::Find Backend&lt;br /&gt;
Core::General&lt;br /&gt;
Core::HTML: Form Submission&lt;br /&gt;
Core::History: Global&lt;br /&gt;
Core::Image Blocking&lt;br /&gt;
Core::Localization&lt;br /&gt;
Core::Networking: Domain Lists&lt;br /&gt;
Core::Selection&lt;br /&gt;
Core::Serializers&lt;br /&gt;
Core::Spelling checker&lt;br /&gt;
Core::X-remote&lt;br /&gt;
Core::XUL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1202531</id>
		<title>Modules/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1202531"/>
		<updated>2018-10-17T11:25:45Z</updated>

		<summary type="html">&lt;p&gt;Jorend: move a bunch of JS peers to emeritus; add Ted Campbell&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Only module owners may edit this page.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
They may:&lt;br /&gt;
&lt;br /&gt;
* update any information about their module except the name of the owner&lt;br /&gt;
* add or remove sub-modules&lt;br /&gt;
* change the owner of a sub-module &lt;br /&gt;
* add emeritus owners or peers&lt;br /&gt;
&lt;br /&gt;
Other changes, including changes of module owner or addition/removal of modules, must be agreed with the Module Ownership Module group, probably via a discussion in [https://www.mozilla.org/about/forums/#governance mozilla.governance].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Accessibility&lt;br /&gt;
|description=Support for platform accessibility APIs. Accessibility APIs are used by 3rd party software like screen readers, screen magnifiers, and voice dictation software, which need information about document content and UI controls, as well as important events like changes of focus.&lt;br /&gt;
|owner=[mailto:surkov.alexander@gmail.com Alexander Surkov]&lt;br /&gt;
|peers=[mailto:dbolter@mozilla.com David Bolter], [mailto:eitan@monotonous.org Eitan Isaacson], [mailto:jteh@mozilla.com James Teh],  [mailto:mzehe@mozilla.com Marco Zehe], [mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal]&lt;br /&gt;
|peersemeritus=[mailto:tbsaunde+mozbugs@tbsaunde.org Trevor Saunders], [mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Animation&lt;br /&gt;
|description=Declarative animations: CSS animations, CSS transitions, Web Animations API, and off-main thread animations.&lt;br /&gt;
|owner=[mailto:bbirtles@mozilla.com Brian Birtles] (:birtles)&lt;br /&gt;
|peers=[mailto:hiro@mozilla.com Hiroyuki Ikezoe] (:hiro), [mailto:mwoodrow@mozilla.com Matt Woodrow] (:mattwoodrow)&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=dom/animation; and animation-related and interpolation-related code in layout/style, gfx/layers, servo/components/style and servo/ports/gecko&lt;br /&gt;
|components=Core::DOM::Animation, Core::CSS Parsing and Computation (for CSS animations/transitions related bugs)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Browser WebAPI&lt;br /&gt;
|description=Web API for rendering apps, browser windows and widgets.&lt;br /&gt;
|owner=[mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:fabrice@mozilla.com Fabrice Desré]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/browser-element/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build and Release Tools&lt;br /&gt;
|description=Tools related to build and release automation and configuration of release builds.&lt;br /&gt;
|owner=[mailto:nthomas@mozilla.com Nick Thomas]&lt;br /&gt;
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]&lt;br /&gt;
|group=release-engineering&lt;br /&gt;
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/&lt;br /&gt;
|url=https://wiki.mozilla.org/ReleaseEngineering&lt;br /&gt;
|components=Release Engineering::*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config&lt;br /&gt;
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.&lt;br /&gt;
|owner=[mailto:gps@mozilla.com Gregory Szorc] (:gps)&lt;br /&gt;
|peers=[mailto:mh@glandium.org Mike Hommey] (:glandium), [mailto:mshal@mozilla.com Mike Shal] (:mshal), [mailto:ted@mielczarek.org Ted Mielczarek] (:ted), [mailto:cmanchester@mozilla.com Chris Manchester](:chmanchester), [mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj), [mailto:dmajor@mozilla.com David Major] (:dmajor), [mailto:rgiles@mozilla.com Ralph Giles] (:rillian)&lt;br /&gt;
|ownersemeritus=Ted Mielczarek (2008-[https://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/ 2013]), Benjamin Smedberg (???-[http://benjamin.smedbergs.us/blog/2008-04-30/more-changing-of-the-guard-ted-mielczarek/ 2008]), &lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=build/, config/, python/mozbuild, tools/cross-commit, tools/cvs2hg-import.py, tools/cvsmgmt/, tools/elf-dynstr-gc/, tools/trees.pl, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=http://www.mozilla.org/build/&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Code Analysis and Debugging Tools&lt;br /&gt;
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-performance&lt;br /&gt;
|source_dirs=tools/codesighs/, tools/debug/, tools/dreftool/, tools/dumpdeps/, tools/footprint/, tools/jprof/, tools/leaky/, tools/memory/, tools/module-deps/, tools/performance/, tools/post_compile/, tools/preloader/, tools/rb/, tools/reorder/, tools/trace-malloc/, tools/uuiddeps/, &lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content HTTP Headers&lt;br /&gt;
|description=HTTP headers related to content, e.g. User-Agent, Content-Type, Accept. (Transport-related headers are the responsibility of the Necko module owner.)&lt;br /&gt;
|owner=[mailto:gerv@mozilla.org Gervase Markham]&lt;br /&gt;
|peers=[mailto:lmandel@mozilla.com Lawrence Mandel]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs= &lt;br /&gt;
|url=https://developer.mozilla.org/en/Gecko_user_agent_string_reference&lt;br /&gt;
|components=Core::Networking: HTTP&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content Security&lt;br /&gt;
|description=Native content-based security features enforced in the ContentSecurityManager, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Subresource Integrity (SRI), Cross-Origin Resource Sharing (CORS) and top-level data: URI blocking.&lt;br /&gt;
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peers=[mailto:francois@mozilla.com François Marier], [mailto:tvyas@mozilla.com Tanvi Vyas], [mailto:dveditz@mozilla.com Dan Veditz], [mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:jkt@mozilla.com Jonathan Kingston]&lt;br /&gt;
|peersemeritus=[mailto:mozilla@sidstamm.com Sid Stamm], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-security&lt;br /&gt;
|source_dirs=dom/security&lt;br /&gt;
|components=Core::DOM: Security&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cookies and Permissions&lt;br /&gt;
|description=&lt;br /&gt;
|owner=Monica Chew&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=extensions/cookie/, netwerk/cookie/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Networking: Cookies&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cycle Collector&lt;br /&gt;
|description=Code to break and collect objects within reference cycles&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]&lt;br /&gt;
|peers=Peter Van der Beken, Olli Pettay, David Baron&lt;br /&gt;
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=C++/Rust usage, tools, and style&lt;br /&gt;
|description=Aspects of C++ use such as language feature usage, standard library versions/usage, compiler/toolchain versions, formatting and naming style, and aspects of Rust use as needs arise&lt;br /&gt;
|owner=[mailto:nfroyd@mozilla.com Nathan Froyd] (while Ehsan is away)&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:glandium@mozilla.com Mike Hommey], [mailto:jwalden@mozilla.com Jeff Walden], [mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|source_dirs=non-third-party C++ and Rust code in the tree&lt;br /&gt;
|components=Various components&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=docshell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:sawang@mozilla.com Samael Wang]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback],[mailto:cbiesinger@gmail.com Christian Biesinger],[mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=docshell/, uriloader/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Document Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Document Object Model&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:hsivonen@iki.fi Henri Sivonen], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:baku@mozilla.com Andrea Marchesini],&lt;br /&gt;
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:kyle@nonpolynomial.com Kyle Machulis], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|ownersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|peersemeritus=[mailto:justin.lebar@gmail.com Justin Lebar], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:bent.mozilla@gmail.com Ben Turner], [mailto:mounir@lamouri.fr Mounir Lamouri (still active, but slower to respond than previously)], [mailto:me@kylehuey.com Kyle Huey], [mailto:wmccloskey@mozilla.com Bill McCloskey], [ben@wanderview.com Ben Kelly]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/*, except directories covered by other modules&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core &amp;amp; HTML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=DOM File&lt;br /&gt;
|description=DOM Blob, File and FileSystem APIs &lt;br /&gt;
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:olli@pettay.fi Olli Pettay]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/file, dom/filesystem&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: File&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Event Handling&lt;br /&gt;
|description=DOM Events and Event Handling &lt;br /&gt;
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:sshih@mozilla.com Stone Shih]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/events and event handling related code elsewhere &lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: Events, Core::Event Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Workers&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|peers=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:asuth@mozilla.com Andrew Sutherland]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/workers/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_web_workers&lt;br /&gt;
|components=Core::DOM: Workers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IndexedDB&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|peers=[mailto:btseng@mozilla.com Bevis Tseng], [mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:baku@mozilla.com Andrea Marchesini]&lt;br /&gt;
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/indexedDB/&lt;br /&gt;
|url=https://developer.mozilla.org/en/IndexedDB&lt;br /&gt;
|components=Core::DOM: IndexedDB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Editor&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|peers=[mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=editor/&lt;br /&gt;
|url=http://www.mozilla.org/editor/&lt;br /&gt;
|components=Core::Editor&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Embedding&lt;br /&gt;
|description=Gecko embedding APIs and frameworks&lt;br /&gt;
|owner=[mailto:myk@mykzilla.org Myk Melez]&lt;br /&gt;
|ownersemeritus=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:bdahl@mozilla.com Brendan Dahl], [mailto:tbsaunde@tbsaunde.org Trevor Saunders]&lt;br /&gt;
|peersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=embedding/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Embedding: APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Find As You Type&lt;br /&gt;
|description=Find As You Type (formerly called Type Ahead Find) is a feature that allows quick web page navigation when you type a succession of characters in the body of the displayed page (not in an edit box of or drop down list). Currently seeks new owner.&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=extensions/typeaheadfind/&lt;br /&gt;
|url=http://www.mozilla.org/access/type-ahead/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Gecko Profiler&lt;br /&gt;
|description=Gecko&#039;s built-in profiler&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:nnethercote@mozilla.com Nicholas Nethercote], [mailto:jseward@mozilla.com Julian Seward] (LUL), [mailto:kvijayan@mozilla.com Kannan Vijayan] (JS integration), [mailto:shu@mozilla.com Shu-yu Guo] (JS integration), [mailto:tlee@mozilla.com Thinker Lee] (TaskTracer), [mailto:cyu@mozilla.com Cervantes Yu] (TaskTracer), [mailto:b56girard@gmail.com Benoit Girard].&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=tools/profiler/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler&lt;br /&gt;
|components=Core::Gecko Profiler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Geolocation&lt;br /&gt;
|description=Implementation of the Geolocation W3C Spec, location provider apis, and wifi scanning code.&lt;br /&gt;
|owner=[mailto:josh@joshmatthews.net Josh Matthews], [mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner], Garvan Keeley&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/geolocation, dom/system/, netwerk/wifi&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_geolocation&lt;br /&gt;
|components=Core::Geolocation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Global Key Bindings&lt;br /&gt;
|description=Global hot keys in Mozilla for the browser, editor, mail-news and widgets. Does not include underlined menu accelerators and the like, as those are part of i18n.&lt;br /&gt;
|owner=Aaron Leventhal&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=dom/xbl/builtin/&lt;br /&gt;
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html&lt;br /&gt;
|components=Core::Keyboard: Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Graphics&lt;br /&gt;
|description=Mozilla graphics API&lt;br /&gt;
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:jdrew@mozilla.com Joe Drew], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:bas.schouten@live.nl Bas Schouten](Layers, Windows), [mailto:bjacob@mozilla.com Benoit Jacob](gfx/gl), [mailto:bgirard@mozilla.com Benoit Girard](Compositor, Performance), [mailto:ajuma.bugzilla@alijuma.com Ali Juma], [mailto:jgilbert@mozilla.com Jeff Gilbert](WebGL, ANGLE), [mailto:george@mozilla.com George Wright](Canvas2D), [mailto:mwoodrow@mozilla.com Matt Woodrow](Layers API), [mailto:jdaggett@mozilla.com John Daggett](text/fonts), [mailto:jfkthame@googlemail.com Jonathan Kew](text/fonts), [mailto:nsilva@mozilla.com  Nicolas Silva](MozSurface), [mailto:ncameron@mozilla.com Nick Cameron], [mailto:sikeda@mozilla.com Sotaro Ikeda](B2G), [mailto:snorp@mozilla.com James Willcox](Android), [mailto:clord@mozilla.com Christopher Lord], [mailto:mstange@themasta.com Markus Stange](OS X), [mailto:lsalzman@mozilla.com Lee Salzman](Skia), [mailto:mchang@mozilla.com Mason Chang], [mailto:dvander@mozilla.com David Anderson], [mailto:rhunt@mozilla.com Ryan Hunt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/, dom/canvas/&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch&lt;br /&gt;
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=APZ (Graphics submodule)&lt;br /&gt;
|description=Asynchronous panning and zooming&lt;br /&gt;
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:tnikkel@mozilla.com Timothy Nikkel], [mailto:dvander@mozilla.com David Anderson], [mailto:mstange@mozilla.com Markus Stange]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/layers/apz&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/APZ&lt;br /&gt;
|components=Core::Panning and Zooming&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Moz2D (Graphics submodule)&lt;br /&gt;
|description=Platform independent 2D graphics API&lt;br /&gt;
|owner=[mailto:bschouten@mozilla.com Bas Schouten]&lt;br /&gt;
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/2d&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D&lt;br /&gt;
|components=Core::Graphics&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Legacy HTML Parser&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:rbs@maths.uq.edu.au rbs@maths.uq.edu.au]&lt;br /&gt;
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|source_dirs=parser/htmlparser&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/doc/parser.html&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HAL&lt;br /&gt;
|description=Hardware Abstraction Layer&lt;br /&gt;
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands]&lt;br /&gt;
|peers=[mailto:gsvelto@mozilla.com Gabriele Svelto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=hal/&lt;br /&gt;
|components=Core::Hardware Abstraction Layer (HAL)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HTML Parser&lt;br /&gt;
|description=The HTML Parser transforms HTML source code into a DOM. It conforms to the HTML specification, and is mostly translated automatically from Java to C++.&lt;br /&gt;
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|peers=[mailto:wchen@mozilla.com William Chen]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=parser/html&lt;br /&gt;
|url=http://about.validator.nu/&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=I18N Library&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:hsivonen@hsivonen.fi Henri Sivonen (encoding)], [mailto:jfkthame@gmail.com Jonathan Kew (except to encoding)]&lt;br /&gt;
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura], [mailto:gandalf@aviary.pl Zibi Braniecki], [mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]&lt;br /&gt;
|ownersemeritus=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|group=dev-i18n&lt;br /&gt;
|source_dirs=intl/&lt;br /&gt;
|url=http://mozilla.org/projects/intl/index.html&lt;br /&gt;
|components=Core::Internationalization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=ImageLib&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:tnikkel@gmail.com Timothy Nikkel]&lt;br /&gt;
|peers=[mailto:aosmond@mozilla.com Andrew Osmond], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar]&lt;br /&gt;
|peersemeritus=[mailto:seth.bugzilla@blackhail.net Seth Fowler], [mailto:netzen@gmail.com Brian Bondy], [mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::ImageLib&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IPC&lt;br /&gt;
|description=Native message-passing between threads and processes&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:jld@mozilla.com Jed Davis], [mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:amccreight@mozilla.com Andrew McCreight]&lt;br /&gt;
|peersemeritus=[mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:danderson@mozilla.com David Anderson], [mailto:kchen@mozilla.com Kan-Ru Chen], [mailto:btseng@mozilla.com Bevis Tseng]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript&lt;br /&gt;
|description=JavaScript engine (SpiderMonkey)&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:jdemooij@mozilla.com Jan de Mooij], [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:arai.unmht@gmail.com Tooru Fujisawa], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:jwalden@mit.edu Jeff Walden], [mailto:evilpies@gmail.com Tom Schuster], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:till@tillschneidereit.net Till Schneidereit], [mailto:efaust@mozilla.com Eric Faust], [mailto:nfitzgerald@mozilla.com Nick Fitzgerald], [mailto:nnethercote@mozilla.com Nick Nethercote], [mailto:luke@mozilla.com Luke Wagner], [mailto:sunfish@mozilla.com Dan Gohman], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peersemeritus=[mailto:hv1989@gmail.com Hannes Verschore], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:nmatsakis@mozilla.com Niko Matsakis], [mailto:ejpbruel@mozilla.com Eddy Bruel], [mailto:danderson@mozilla.com David Anderson], [mailto:igor@mir2.org Igor Bukanov], [mailto:brendan@mozilla.org Brendan Eich], Andreas Gal&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey,&lt;br /&gt;
http://developer.mozilla.org/en/docs/About_JavaScript&lt;br /&gt;
|components=Core::JavaScript Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript JIT&lt;br /&gt;
|description=JavaScript engine&#039;s JIT compilers (IonMonkey, Baseline)&lt;br /&gt;
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]&lt;br /&gt;
|peers=[mailto:bbouvier@mozilla.com Benjamin Bouvier], [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:evilpies@gmail.com  Tom Schuster], [mailto:sstangl@mozilla.com Sean Stangl], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:luke@mozilla.com Luke Wagner]&lt;br /&gt;
|peersemeritus=[mailto:danderson@mozilla.com David Anderson], [mailto:hv1989@gmail.com Hannes Verschore]&lt;br /&gt;
|group=dev-tech-js-engine-internals&lt;br /&gt;
|source_dirs=js/src/jit&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey&lt;br /&gt;
|components=Core::JavaScript Engine: JIT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript Debugger Backend&lt;br /&gt;
|description=JavaScript debugging hooks&lt;br /&gt;
|owner=[mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:rginda@hacksrus.com Rob Ginda]&lt;br /&gt;
|group=dev-apps-js-debugger&lt;br /&gt;
|source_dirs=js/jsd/&lt;br /&gt;
|url=http://www.mozilla.org/js/jsd&lt;br /&gt;
|components=Other Applications::Venkman JS Debugger&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=jsat&lt;br /&gt;
|description=Javascript screen reader that is used in Android and B2G&lt;br /&gt;
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]&lt;br /&gt;
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/jsat/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-ctypes&lt;br /&gt;
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src/ctypes/&lt;br /&gt;
|url=https://wiki.mozilla.org/JSctypes&lt;br /&gt;
|components=Core::js-ctypes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-tests&lt;br /&gt;
|description=JavaScript test suite&lt;br /&gt;
|owner=[mailto:bclary@bclary.com Bob Clary]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tests/&lt;br /&gt;
|url=http://www.mozilla.org/js/tests/library.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Layout Engine&lt;br /&gt;
|description=rendering tree construction, layout (reflow), etc.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:bzbarsky@mit.edu Boris Zbarsky],  [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:jfkthame@gmail.com Jonathan Kew], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:matt.woodrow@gmail.com Matt Woodrow], [mailto:xidorn+moz@upsuper.org Xidorn Quan]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/printing/, layout/tables/, layout/tools/&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout, Core::Layout: Block and Inline, Core::Layout: Floats, Core::Layout: Form Controls, Core::Layout: HTML Frames, Core::Layout: Images, Core::Layout: Misc Code, Core::Layout: R &amp;amp; A Pos, Core::Layout: Tables, Core::Layout: Text, Core::Print Preview, Core::Printing: Output&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=libjar&lt;br /&gt;
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).&lt;br /&gt;
|owner=[mailto:mwu@mozilla.com Michael Wu]&lt;br /&gt;
|peers=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libjar&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MathML&lt;br /&gt;
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-tech-mathml&lt;br /&gt;
|source_dirs=layout/mathml/&lt;br /&gt;
|url=http://www.mozilla.org/projects/mathml/&lt;br /&gt;
|components=Core::MathML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Playback&lt;br /&gt;
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).&lt;br /&gt;
|owner=[mailto:jyavenard@mozilla.com Jean-Yves Avenard]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:cpearce@mozilla.com Chris Pearce]&lt;br /&gt;
|peers=[mailto:kinetik@flim.org Matthew Gregan], [mailto:bvandyk@mozilla.com Bryce Van Dyk], [mailto:jolin@mozilla.com John Lin], [mailto:alwu@mozilla.com Alastor Wu], [mailto:jwwang@mozilla.com JW Wang]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=dom/media, media/gmp-clearkey/, media/libcubeb/, media/libnestegg/, media/libogg/, media/libopus/, media/libstagefright/, media/libtheora/, media/libtremor/, media/libvorbis/, media/libvpx/, media/omx-plugin/, media/rlz/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Audio/Video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Transport&lt;br /&gt;
|description=Pluggable transport for real-time media&lt;br /&gt;
|owner=[mailto:ekr@rtfm.com Eric Rescorla]&lt;br /&gt;
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/mtransport&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::WebRTC::Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Memory Allocator&lt;br /&gt;
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=memory/&lt;br /&gt;
|components=Core::DMD, Core::jemalloc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mfbt&lt;br /&gt;
|description=mfbt is a collection of headers, macros, data structures, methods, and other functionality available for use and reuse throughout all Mozilla code (including SpiderMonkey and Gecko more broadly).&lt;br /&gt;
|owner=[mailto:jwalden@mit.edu Jeff Walden]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mfbt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::MFBT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Mozglue&lt;br /&gt;
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd] (mozglue/linker), [mailto:kgupta@mozilla.com Kartikaya Gupta] (mozglue/android), [mailto:nchen@mozilla.com Jim Chen] (mozglue/android), [mailto:aklotz@mozilla.com Aaron Klotz] (Windows Dll Blocklist/Interceptor)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mozglue/&lt;br /&gt;
|components=Core::mozglue&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozilla-toplevel&lt;br /&gt;
|description=The top level directory for the mozilla tree.&lt;br /&gt;
|owner=[mailto:brendan@mozilla.org Brendan Eich]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=tools/README&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MSCOM&lt;br /&gt;
|description=Integration with Microsoft Distributed COM&lt;br /&gt;
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|peers=[mailto:jteh@mozilla.com James Teh], [mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/mscom/%&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC: MSCOM}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Necko&lt;br /&gt;
|description=The Mozilla Networking Library&lt;br /&gt;
|owner=[mailto:dd.mozilla@gmail.com  Dragana Damjanovic]&lt;br /&gt;
|peers= [mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:mnovotny@mozilla.com Michal Novotny], [mailto:hurley@mozilla.com Nick Hurley], [mailto:dd.mozilla@gmail.com  Dragana Damjanovic ], [mailto:valentin.gosu@gmail.com Valentin Gosu], [mailto:daniel@haxx.se Daniel Stenberg ], [mailto:jduell.mcbugs@gmail.com Jason Duell] &lt;br /&gt;
|ownersemeritus=[mailto:mcmanus@ducksong.com Patrick McManus], [mailto:cbiesinger@gmail.com Christian Biesinger] |peersemeritus= Shih-Chiang Chien, [mailto:bzbarsky@mit.edu Boris Zbarsky], Steve Workman &lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=netwerk/%, netwerk/base/, netwerk/build/, netwerk/cache/, netwerk/dns/, netwerk/locales/, netwerk/mime/, netwerk/protocol/, netwerk/resources/, netwerk/socket/, netwerk/streamconv/, netwerk/system/, netwerk/test/, netwerk/testserver/&lt;br /&gt;
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko&lt;br /&gt;
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NSPR&lt;br /&gt;
|description=Netscape Portable Runtime&lt;br /&gt;
|owner=[mailto:kaie@kuix.de Kai Engert]&lt;br /&gt;
|peers=[mailto:wtc@google.com Wan-Teh Chang], [mailto:mh@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-tech-nspr&lt;br /&gt;
|source_dirs=nsprpub/&lt;br /&gt;
|url=http://www.mozilla.org/projects/nspr/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/reference/html/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/release-notes/&lt;br /&gt;
|components=NSPR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PDF&lt;br /&gt;
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF&#039; format.&lt;br /&gt;
|owner=Chris Jones, Andreas Gal&lt;br /&gt;
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:bdahl@mozilla.com Brendan Dahl], [mailto:vnicolas@mozilla.com Vivien Nicolas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/pdf/&lt;br /&gt;
|url=https://github.com/mozilla/pdf.js&lt;br /&gt;
|components=Core::PDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Plugins&lt;br /&gt;
|description= NPAPI Plugin support.&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:joshmoz@gmail.com Josh Aas]&lt;br /&gt;
|peersemeritus=[mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:jstenback@gmail.com Johnny Stenback], Benjamin Smedberg&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/plugins/, modules/plugin/&lt;br /&gt;
|url=https://wiki.mozilla.org/Plugins&lt;br /&gt;
|components=Core::Plug-ins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=Preference library&lt;br /&gt;
|owner=[mailto:nnethercote@mozilla.com Nicholas Nethercote]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:felipe@mozilla.com Felipe Gomes], [mailto:glandium@mozilla.com Mike Hommey], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libpref/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Preferences: Backend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Private Browsing&lt;br /&gt;
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.&lt;br /&gt;
|owner=[mailto:josh@joshmatthews.net Josh Matthews] (while Ehsan is away)&lt;br /&gt;
|peers=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. &lt;br /&gt;
|url=https://wiki.mozilla.org/Private_Browsing&lt;br /&gt;
|components=Firefox::Private Browsing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Privilege Manager&lt;br /&gt;
|description=&amp;quot;caps&amp;quot;&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:dveditz@mozilla.com Dan Veditz]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=caps/&lt;br /&gt;
|url=http://www.mozilla.org/projects/security/components/index.html&lt;br /&gt;
|components=Core::Security: CAPS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Push Notifications&lt;br /&gt;
|description=Push is a way for application developers to send messages to their web applications.&lt;br /&gt;
|owners=&lt;br /&gt;
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:lina@mozilla.com Lina Cambridge], [mailto:martin.thomson@gmail.com Martin Thomson], [mailto:ddamjanovic@mozilla.com Dragana Damjanovic]&lt;br /&gt;
|peersemeritus=[mailto:nsm.nikhil@gmail.com Nikhil Marathe]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/push&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM: Push Notifications&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PyXPCOM&lt;br /&gt;
|description=The Python to XPCOM bridge.&lt;br /&gt;
|owner=Todd Whiteman&lt;br /&gt;
|peers=[mailto:mhammond@skippinet.com.au Mark Hammond]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=extension/python&lt;br /&gt;
|url=https://developer.mozilla.org/en/PyXPCOM&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=RDF&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:axel@pike.org Axel Hecht]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-rdf&lt;br /&gt;
|source_dirs=rdf/&lt;br /&gt;
|url=http://www.mozilla.org/rdf/doc/&lt;br /&gt;
|components=Core::RDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=security&lt;br /&gt;
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)&lt;br /&gt;
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:martin.thomson@gmail.com Martin Thomson]&lt;br /&gt;
|ownersemeritus=[mailto:ttaubert@mozilla.com Tim Taubert]&lt;br /&gt;
|peers=[mailto:kaie@kuix.de Kai Engert], [mailto:ryan.sleevi@gmail.com Ryan Sleevi], [mailto:ekr@rtfm.com Eric Rescorla], [mailto:franziskuskiefer@gmail.com Franziskus Kiefer], [mailto:wtc@google.com Wan-Teh Chang], [mailto:dueno@redhat.com Daiki Ueno]&lt;br /&gt;
|peersemeritus=[mailto:emaldona@redhat.com Elio Maldonado]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/&lt;br /&gt;
|url=http://mozilla.org/projects/security/pki/&lt;br /&gt;
|components=NSS, JSS, Core::Security, Core::Security: S/MIME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security - Mozilla PSM Glue&lt;br /&gt;
|description=Personal Security Manager&lt;br /&gt;
|owner=[mailto:dkeeler@mozilla.com Dana Keeler]&lt;br /&gt;
|ownersemeritus=[mailto:kaie@kuix.de Kai Engert (2001-2012)]&lt;br /&gt;
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka], [mailto:jc@mozilla.com J.C. Jones], [mailto:fkiefer@mozilla.com Franziskus Kiefer]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=security/manager/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Security: PSM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Static analysis &amp;amp; rewriting for C++&lt;br /&gt;
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.&lt;br /&gt;
|owner=[mailto:nika@thelayzells.com Nika Layzell] (while Ehsan is away)&lt;br /&gt;
|peers=[mailto:sfink@mozilla.com Steve Fink], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:birunthan@mohanathas.com Birunthan Mohanathas], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:andi@mozilla.com Andi-Bogdan Postelnicu]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Rewriting &amp;amp; Analysis&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=storage&lt;br /&gt;
|description=Storage APIs with a SQLite backend&lt;br /&gt;
|owner=[mailto:mak77@bonardo.net Marco Bonardo]&lt;br /&gt;
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=db/sqlite3/, storage/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/Storage&lt;br /&gt;
|components=Toolkit::Storage, Core::SQL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=String&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=string/, xpcom/string/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide&lt;br /&gt;
|components=Core::String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Style System&lt;br /&gt;
|description=CSS style sheet handling; style data computation&lt;br /&gt;
|owner= [mailto:cam@mcc.id.au Cameron McCormack]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:emilio@crisal.io Emilio Cobos Álvarez], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/style/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System&lt;br /&gt;
|components=Core::CSS Parsing and Computation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=SVG&lt;br /&gt;
|description=Scalable Vector Graphics&lt;br /&gt;
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]&lt;br /&gt;
|group=dev-tech-svg&lt;br /&gt;
|source_dirs=dom/svg/, layout/svg/, dom/smil/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Web/SVG&lt;br /&gt;
|components=Core::SVG&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Tamarin&lt;br /&gt;
|description=VM for ActionScript and JavaScript&lt;br /&gt;
|owner=Edwin Smith, [mailto:jodyer@adobe.com Jeff Dyer]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:stejohns@adobe.com Steven Johnson], [mailto:tierney@adobe.com Erik Tierney], [mailto:treilly@adobe.com Tom Reilly]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tamarin&lt;br /&gt;
|url=http://www.mozilla.org/projects/tamarin/&lt;br /&gt;
http://wiki.mozilla.org/tamarin/&lt;br /&gt;
http://hg.mozilla.org/tamarin-central/&lt;br /&gt;
http://hg.mozilla.org/tamarin-tracing/&lt;br /&gt;
|components=Tamarin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Test Harness&lt;br /&gt;
|description=In-tree test infrastructure and tools. Harnesses include, XPCShell, Mochitest (&amp;amp; Chrome), Reftest, JsREftest, Compiled Code Tests, Robocop, Mozmill, Marionette, Firefox UI Tests. Requests for new harnesses should go to Testing::General.&lt;br /&gt;
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron] (reftest), [mailto:jwalden@mit.edu Jeff Walden] (httpd.js, jsreftest), Rob Campbell (mochitest, mochitest chrome, marionette), [mailto:jmaher@mozilla.com Joel Maher] (reftest, mochitest, jsreftest), [mailto:ctalbert@mozilla.com Clint Talbert] (reftest, compiled code, mozmill), [mailto:geoffbrown@mozilla.com Geoff Brown] (robocop), [mailto:hskupin@mozilla.com Henrik Skupin] (Marionette, Firefox UI tests), [mailto:ato@mozilla.com Andreas Tolfsen] (marionette), [mailto:jgriffin Jonathan Griffin] (marionette), [mailto:dburns@mozilla.com David Burns] (marionette), [mailto:dminor@mozilla.com Dan Minor], [mailto:mjzffr@gmail.com Maja Frydrychowicz] (Marionette, Firefox UI tests), &lt;br /&gt;
&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=/testing&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::General, Testing::Mochitest, Testing::Mochitest Chrome, Testing::Marionette, Testing::Mozmill, Testing::Reftest, Testing::XPCShell Harness, Testing::httpd.js&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Testing Infrastructure&lt;br /&gt;
|description=Testing tools and infrastructure for Mozilla projects, harnesses for automated tests, stand-alone test tools. Talos, Graph Server, Mozbase, Pulse, WOO, Bughunter, SUTAgent, Eideticker&lt;br /&gt;
|owner=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|peers=[mailto:bclary@bclary.com Bob Clary], [mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:ccooper@deadsquid.com Chris Cooper], [mailto:ctalbert@mozilla.com Clint Talbert], [mailto:robert@roberthelmer.com Robert Helmer], [mailto:jmaher@mozilla.com Joel Maher], Rob Campbell, [mailto:wlach@mozilla.com William Lachance], [mailto:jeads@mozilla.com Jonathan Eads], [mailto:jgriffin Jonathan Griffin], [mailto:bmoss@mozilla.com Bob Moss], [mailto:mcote@mozilla.com Mark Côté]&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=testing/, tools/httptester/, tools/page-loader/, tools/test-harness/, tools/tests/, tools/testserver/, tools/testy/&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::Infrastructure&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JS Marionette&lt;br /&gt;
|description=NodeJS test harness, marionette client, and other utilities for running marionette tests (submodule of Test Infrastructure)&lt;br /&gt;
|owner=[mailto:jlal@mozilla.com James Lal] &amp;lt;lightsofapollo&amp;gt;, [mailto:gaye@mozilla.com Gareth Aye] &amp;lt;gaye&amp;gt;&lt;br /&gt;
|peers=[mailto:aus@mozilla.com Ghislain &amp;quot;Aus&amp;quot; Lacroix] &amp;lt;auswerk&amp;gt;&lt;br /&gt;
|source_dirs=gaia/tests/jsmarionette&lt;br /&gt;
|components=Testing::JSMarionette&lt;br /&gt;
|group=dev-gaia&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCShell Test Harness&lt;br /&gt;
|description=The XPCShell Harness&lt;br /&gt;
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|source_dirs=testing/xpcshell&lt;br /&gt;
|components=Testing::XPCShell Harness&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Update Service&lt;br /&gt;
|description=server code for Mozilla Update services (aus, addons, pfs)&lt;br /&gt;
|owner=Mike Morgan&lt;br /&gt;
|peers=[mailto:jscott@mozilla.com Justin Scott], [mailto:shaver@mozilla.org Mike Shaver], [mailto:wclouser@mozilla.com Will Clouser]&lt;br /&gt;
|group=dev-amo&lt;br /&gt;
|source_dirs=webtools/addons/, webtools/aus/, webtools/update/&lt;br /&gt;
|url=http://wiki.mozilla.org/wiki/AMO&lt;br /&gt;
|components=AUS::Administration, AUS::Systems&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=View System&lt;br /&gt;
|description=The View Manager is responsible for handling &amp;quot;heavyweight&amp;quot; rendering (some clipping, compositing) and event handling tasks.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=view/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Audio&lt;br /&gt;
|description=Support for the W3C Web Audio API specification.&lt;br /&gt;
|owner=[mailto:padenot@mozilla.com Paul Adenot]&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/media/webaudio&lt;br /&gt;
|url=https://wiki.mozilla.org/Web_Audio_API&lt;br /&gt;
|components=Core::Web Audio&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Painting&lt;br /&gt;
|description=painting, display lists, and layer construction&lt;br /&gt;
|owner=[mailto:matt.woodrow@gmail.com Matt Woodrow]&lt;br /&gt;
|peers=[mailto:robert@ocallahan.org Robert O&#039;Callahan], [mailto:dbaron@dbaron.org David Baron],   [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:mstange@themasta.com Markus Stange], [mailto:mmynttinen@mozilla.com Miko Mynttinen], [mailto:jnicol@mozilla.com Jamie Nicol]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs= layout/painting, the display list and layer related methods on nsIFrame and its subclasses&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout: Web Painting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC&lt;br /&gt;
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=netwerk/sctp (also see submodules &amp;quot;WebRTC Media&amp;quot; and &amp;quot;WebRTC Signaling&amp;quot;)&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC, Core::WebRTC Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebVR&lt;br /&gt;
|description=Gecko&#039;s implementation of WebVR (Virtual Reality) functionality, including API, devices, graphics and integration&lt;br /&gt;
|owner=[mailto:kgilbert@mozilla.com Kip Gilbert]&lt;br /&gt;
|peers=[mailto:dmu@mozilla.com Daosheng Mu]&lt;br /&gt;
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/vr, gfx/vr&lt;br /&gt;
|url=https://mozvr.com/&lt;br /&gt;
|components=Core::WebVR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], &lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/, widget/xpwidgets/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Android&lt;br /&gt;
|description=The Android Port&lt;br /&gt;
|owner=[mailto:blassey.bugs@lassey.us Brad Lassey]&lt;br /&gt;
|peers=[mailto:jwillcox@mozilla.com James Willcox]&lt;br /&gt;
|group=dev-platforms-mobile&lt;br /&gt;
|source_dirs=widget/android/, embedding/android&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Android&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - GTK&lt;br /&gt;
|description=supported X widgetry and gfx&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|ownersemeritus=[mailto:robert@ocallahan.org Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/&lt;br /&gt;
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/&lt;br /&gt;
|components=Core::Widget: Gtk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - OS X&lt;br /&gt;
|description= Gecko&#039;s OS X compatibility layer.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:joshmoz@gmail.com Josh Aas], [mailto:bgirard@mozilla.com Benoit Girard], [mailto:spohl@mozilla.com Stephen Pohl], [mailto:smichaud@pobox.com Steven Michaud]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/cocoa/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Cocoa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Windows&lt;br /&gt;
|description=Windows widgets and desktop integration&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peersemeritus=[mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:doug.turner@gmail.com Doug Turner], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref], [mailto:robarnold@cmu.edu Rob Arnold]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/windows/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Win32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XBL&lt;br /&gt;
|description=eXtensible Binding Language&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peers=[mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|ownersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xbl&lt;br /&gt;
|source_dirs=dom/xbl/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xbl/&lt;br /&gt;
|components=Core::XBL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XML&lt;br /&gt;
|description=XML in Mozilla, including XML, XHTML, Namespaces in XML, Associating Style Sheets with XML Documents, XML Linking and XML Extras. XML-related things that are not covered by more specific projects.&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback]&lt;br /&gt;
|group=dev-tech-xml&lt;br /&gt;
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/xml/&lt;br /&gt;
|components=Core::XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPApps&lt;br /&gt;
|description=Cross-Platform Applications, mostly Navigator front end and application shell.&lt;br /&gt;
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-apps-seamonkey&lt;br /&gt;
|source_dirs=xpfe/&lt;br /&gt;
|url=http://www.mozilla.org/xpapps/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCOM&lt;br /&gt;
|description=The cross-platform object model and core data structures.&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]&lt;br /&gt;
|peers=[mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|ownersemeritus=Benjamin Smedberg&lt;br /&gt;
|peersemeritus=[https://mozillians.org/en-US/u/dougt/ Doug Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=startupcache/, xpcom/%, xpcom/base/, xpcom/build/, xpcom/components/, xpcom/ds/, xpcom/glue/, xpcom/proxy/, xpcom/sample/, xpcom/stub/, xpcom/tests/, xpcom/threads/, xpcom/tools/, xpcom/windbgdlg/&lt;br /&gt;
|url=http://developer.mozilla.org/en/XPCOM&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPConnect&lt;br /&gt;
|description=Deep Magic&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:kmaglione@mozilla.com Kris Maglione], [mailto:nika@thelayzells.com Nika Layzell]&lt;br /&gt;
|peersemeritus=[mailto:gal@uci.edu Andreas Gal], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=js/xpconnect/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::XPConnect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPIDL&lt;br /&gt;
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.&lt;br /&gt;
|owner=[mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=xpcom/typelib/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xpidl&lt;br /&gt;
http://www.mozilla.org/scriptable&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPInstall&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dveditz@mozilla.com Dan Veditz]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-tech-xpinstall&lt;br /&gt;
|source_dirs=xpinstall/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Installer: XPInstall Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPToolkit&lt;br /&gt;
|description=Cross-platform user interface toolkit&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:Jan.Varga@gmail.com Jan Varga]&lt;br /&gt;
|group=dev-tech-xul&lt;br /&gt;
|source_dirs=dom/xul/, layout/xul/&lt;br /&gt;
|url=http://www.mozilla.org/xpfe/&lt;br /&gt;
|components=Core::XP Toolkit/Widgets: Menus, Core::XP Toolkit/Widgets: XUL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XSLT Processor&lt;br /&gt;
|description=XSLT transformations processor&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:erahm@mozilla.com Eric Rahm]&lt;br /&gt;
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xslt&lt;br /&gt;
|source_dirs=dom/xslt/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html&lt;br /&gt;
|components=Core::XSLT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Windows &lt;br /&gt;
|description=Sandboxing for the Windows platform &lt;br /&gt;
|owner=[mailto:bobowencode@gmail.com Bob Owen] (:bobowen)&lt;br /&gt;
|peers=[mailto:aklotz@mozilla.com Aaron Klotz] (:aklotz), [mailto:jimm@mozilla.com Jim Mathies] (:jimm), [mailto:davidp99@gmail.com David Parks] (:handyman)&lt;br /&gt;
|ownersemeritus=[https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes]&lt;br /&gt;
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/win &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - OSX &lt;br /&gt;
|description=Sandboxing for the OSX platform &lt;br /&gt;
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox/mac &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Linux&lt;br /&gt;
|description=Sandboxing for the Linux platform&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|peers=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/linux&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Submodules===&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Fennec&lt;br /&gt;
|description=Submodule of the build config covering Fennec&#039;s build system in mobile/android.&lt;br /&gt;
|owner=[mailto:nalexander@mozilla.com Nicholas Alexander]&lt;br /&gt;
|peers=Same as Build Config&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Taskgraph&lt;br /&gt;
|description=Support for task-graph generation in decision, action, and cron tasks, including configuration of all tasks including those for CI, nightlies, and releases; as well as Docker and VM images used to execute those tasks.&lt;br /&gt;
|owner=[mailto:dustin@mozilla.com Dustin Mitchell]&lt;br /&gt;
|peers=[mailto:ahal@mozilla.com Andrew Halberstadt], [mailto:aki@mozilla.com Aki Sasaki], [mailto:bstack@mozilla.com Brian Stack], [mailto:mh@glandium.org Mike Hommey], [mailto:gps@mozilla.com Gregory Szorc], [mailto:jmaher@mozilla.com Joel Maher], [mailto:callek@mozilla.com Justin Wood], [mailto:mozilla@hocat.ca Tom Prince]&lt;br /&gt;
|components=Firefox Build System::Task Configuration&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Media&lt;br /&gt;
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:jib@mozilla.com Jan-Ivar Bruaroey], [mailto:dminor@mozilla.com Dan Minor], [mailto:apehrson@mozilla.com Andreas Pehrson], &lt;br /&gt;
|peersemeritus=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc, /dom/media/webrtc, /dom/media/systemservices&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Audio/Video)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Signaling&lt;br /&gt;
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling&lt;br /&gt;
|owner=[mailto:bcampen@mozilla.com Byron Campen]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:abr@mozilla.com Adam Roach], [mailto:rjesup@mozilla.com Randell Jesup], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc/signaling/&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Signaling)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unassigned Bugzilla Components===&lt;br /&gt;
&lt;br /&gt;
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Core::Find Backend&lt;br /&gt;
Core::General&lt;br /&gt;
Core::HTML: Form Submission&lt;br /&gt;
Core::History: Global&lt;br /&gt;
Core::Image Blocking&lt;br /&gt;
Core::Localization&lt;br /&gt;
Core::Networking: Domain Lists&lt;br /&gt;
Core::Selection&lt;br /&gt;
Core::Serializers&lt;br /&gt;
Core::Spelling checker&lt;br /&gt;
Core::X-remote&lt;br /&gt;
Core::XUL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:New_to_SpiderMonkey&amp;diff=1189941</id>
		<title>JavaScript:New to SpiderMonkey</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:New_to_SpiderMonkey&amp;diff=1189941"/>
		<updated>2018-03-07T17:21:41Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Build the js shell */ deduplicate, point people to the build documentation for all issues&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tutorial: your first patch  ==&lt;br /&gt;
&lt;br /&gt;
The first step to getting involved with SpiderMonkey is to make your first patch. This guides you through it, and at the end you should have learnt a lot of the procedures and formalisms involved in getting things done here.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll assume you&#039;re on a Unix-y platform, and that you know what you&#039;re doing. We&#039;ll ignore nearly all details. &lt;br /&gt;
&lt;br /&gt;
=== Get the code ===&lt;br /&gt;
&lt;br /&gt;
Spidermonkey development happens in the &amp;quot;mozilla-central&amp;quot; mercurial repository:&lt;br /&gt;
&lt;br /&gt;
 hg clone http://hg.mozilla.org/mozilla-central spidermonkey&lt;br /&gt;
&lt;br /&gt;
=== Build the js shell ===&lt;br /&gt;
&lt;br /&gt;
Most of the time, you&#039;ll be working with the Javascript shell, instead of the full Firefox browser. So build the shell: &lt;br /&gt;
&lt;br /&gt;
 cd spidermonkey/js/src&lt;br /&gt;
 cp configure.in configure &amp;amp;&amp;amp; chmod +x configure # or autoconf2.13 or autoconf-2.13&lt;br /&gt;
 mkdir build_DBG.OBJ &lt;br /&gt;
 cd build_DBG.OBJ &lt;br /&gt;
 ../configure --enable-debug --disable-optimize&lt;br /&gt;
 make # or make -j8&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
If this doesn&#039;t work, refer to [https://developer.mozilla.org/en/SpiderMonkey/Build_Documentation the SpiderMonkey build documentation].&lt;br /&gt;
&lt;br /&gt;
=== Fix something ===&lt;br /&gt;
&lt;br /&gt;
At this point, you&#039;re ready to make your first fix. &lt;br /&gt;
&lt;br /&gt;
 TODO: something useless. Maybe adding a datemicrosecond function.&lt;br /&gt;
&lt;br /&gt;
==== Building your changes ====&lt;br /&gt;
&lt;br /&gt;
Having made the change, build the shell again. &lt;br /&gt;
&lt;br /&gt;
 make -C build_DBG.OBJ&lt;br /&gt;
&lt;br /&gt;
==== Testing your changes ====&lt;br /&gt;
&lt;br /&gt;
It builds. Hurray. Time to run the tests to check you haven&#039;t broken anything. &lt;br /&gt;
&lt;br /&gt;
 jit-test/jit_test.py build_DBG.OBJ/dist/bin/js&lt;br /&gt;
(The location of the shell has changed, it used to be build_DBG.OBJ/js)&lt;br /&gt;
&lt;br /&gt;
The jit-tests are pretty quick, and should give you an idea if you&#039;ve gotten something wrong. Assuming nothing goes wrong, try the ref-tests: &lt;br /&gt;
&lt;br /&gt;
 tests/jstests.py build_DBG.OBJ/dist/bin/js&lt;br /&gt;
&lt;br /&gt;
Note that some of these tests fail depending on the timezone and locale they&#039;re run in, so if you get any errors that don&#039;t seem related to your changes, re-run the tests with a shell build without your changes applied and compare the results.&lt;br /&gt;
&lt;br /&gt;
==== Benchmark your changes ====&lt;br /&gt;
&lt;br /&gt;
Tests all pass. Congrats, you didn&#039;t break anything. Now, did you make it faster or slower? We benchmark using a number of different benchmark suites.&lt;br /&gt;
&lt;br /&gt;
* v8&lt;br /&gt;
* SunSpider: One of the original js benchmarks. No real value left.&lt;br /&gt;
* Octane: Another js benchmark that we heavily optimized for in the past. Isn&#039;t representative of current web workloads.&lt;br /&gt;
* speedometer: A full browser benchmark. Testing react, ember, etc. Intended to be a better measure of &amp;quot;responsiveness&amp;quot;. We are currently optimizing for version 2 it.&lt;br /&gt;
&lt;br /&gt;
Get the benchmarks: &lt;br /&gt;
&lt;br /&gt;
 svn checkout http://svn.webkit.org/repository/webkit/trunk/PerformanceTests/SunSpider&lt;br /&gt;
&lt;br /&gt;
And now run them: &lt;br /&gt;
&lt;br /&gt;
 cd SunSpider &lt;br /&gt;
 ./sunspider --shell=../build_DBG.OBJ/dist/bin/js --run=30 --suite=sunspider-0.9.1 &lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
===== Optimized build =====&lt;br /&gt;
&lt;br /&gt;
Whoops, we benchmarked the debug version. Let&#039;s make an optimized build to test instead.&lt;br /&gt;
&lt;br /&gt;
 mkdir build_OPT.OBJ &lt;br /&gt;
 cd build_OPT.OBJ &lt;br /&gt;
 ../configure --disable-debug --enable-optimize&lt;br /&gt;
 make &lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
Repeat the sunspider steps above, and take note of the line that looks like: &lt;br /&gt;
&lt;br /&gt;
 Results are located at sunspider-0.9.1-results/sunspider-results-2010-08-07-17.56.48.js&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need that later. &lt;br /&gt;
&lt;br /&gt;
===== Baseline version / Mercurial Queues =====&lt;br /&gt;
&lt;br /&gt;
We need to time our optimized version against the baseline version. This calls for a brief introduction to mercurial queues, which used to be the way most people managed their SpiderMonkey workflow (though these days many people use native hg, native hg + evolution, or git):&lt;br /&gt;
&lt;br /&gt;
 hg qinit&lt;br /&gt;
 hg qnew my_first_patch -f&lt;br /&gt;
 hg qrefresh&lt;br /&gt;
&lt;br /&gt;
This puts your current work into a patch, managed by Mercurial, symbolically called my_first_patch. To pop the patch off: &lt;br /&gt;
&lt;br /&gt;
 hg qpop&lt;br /&gt;
&lt;br /&gt;
And we&#039;re back to our pristine version.&lt;br /&gt;
&lt;br /&gt;
===== Compare =====&lt;br /&gt;
&lt;br /&gt;
Build again and rerun SunSpider again. You should now have two files like: &lt;br /&gt;
&lt;br /&gt;
 sunspider-0.9.1-results/sunspider-results-2010-08-07-17.56.48.js&lt;br /&gt;
&lt;br /&gt;
Compare them using the compare script: &lt;br /&gt;
&lt;br /&gt;
 cd SunSpider &lt;br /&gt;
 ./sunspider-compare-results --shell=../build_DBG.OBJ/js --suite=sunspider-0.9.1 FILE1-withoutPatch FILE2-withPatch&lt;br /&gt;
&lt;br /&gt;
=== Get a real bug  ===&lt;br /&gt;
&lt;br /&gt;
At this point, you&#039;ve seen nearly everything you need to do hack on SpiderMonkey. So it&#039;s time to get a real bug to work on. You can get a bug on [http://www.joshmatthews.net/bugsahoy/?jseng=1&amp;amp;unowned=1 Bugs Ahoy].&lt;br /&gt;
&lt;br /&gt;
Fix the bug, updating the bug report with your progress, and asking questions as you go (either in the bug comments, or in [irc://irc.mozilla.org/#jsapi #jsapi]). When it&#039;s done, repeat all the steps above. Then it&#039;s time to get your patch into the tree.&lt;br /&gt;
&lt;br /&gt;
=== Submit a patch  ===&lt;br /&gt;
&lt;br /&gt;
To get the patch from mercurial, use: &lt;br /&gt;
&lt;br /&gt;
 hg qdiff # if you&#039;re using queues or&lt;br /&gt;
 hg diff  # if you&#039;re not&lt;br /&gt;
&lt;br /&gt;
Add it to the bug as an attachment. &lt;br /&gt;
&lt;br /&gt;
=== Get a review ===&lt;br /&gt;
&lt;br /&gt;
Nothing gets into the tree without a review, so you&#039;ll need one. The [[JavaScript:Hackers|SpiderMonkey hackers list]] is a good place to start: if your patch changes something listed as an area of expertise for someone there, that&#039;s a good person to ask for a review.&lt;br /&gt;
&lt;br /&gt;
Alternatively run &amp;lt;code&amp;gt;hg blame&amp;lt;/code&amp;gt; on the files you&#039;ve changed, and check who has been changing related code recently. They&#039;re likely to be good candidates. An irc bot can automate this process for a single file if you enter &amp;quot;/msg mrgiggles who can review something.cpp?&amp;quot; into your irc client.&lt;br /&gt;
&lt;br /&gt;
The review will consist of comments on your changes, suggesting or requesting alternative ways to do something and asking you to make changes where needed. They might also request additional changes, for example tests. Fix what they ask, resubmit the patch to bugzilla, and ask for another review. After you repeat this step a few times, they will mark the patch as &amp;quot;&amp;lt;code&amp;gt;r+&amp;lt;/code&amp;gt;&amp;quot; meaning it&#039;s now good to commit.&lt;br /&gt;
&lt;br /&gt;
=== Commit ===&lt;br /&gt;
&lt;br /&gt;
You can&#039;t commit to mozilla-central / mozilla-inbound until you have &amp;quot;level 3&amp;quot; access, so you&#039;ll need someone to do this for you. Try asking in [irc://irc.mozilla.org/#jsapi #jsapi], or add the &amp;lt;code&amp;gt;checkin-needed&amp;lt;/code&amp;gt; keyword to the bug. After you have been contributing for a while, you can get level 3 access by [https://www.mozilla.org/hacking/commit-access-policy/ applying for it].&lt;br /&gt;
&lt;br /&gt;
After committing, a large series of tests will be run to make sure you didn&#039;t break anything. You will need to hang around to make sure you didn&#039;t break something. It is difficult to determine what failures are real and what are what we call &amp;quot;intermittent oranges&amp;quot; (&amp;quot;orange&amp;quot; because that is the color used on our continuous integration dashboard for test failures). If you do break something, a sheriff will probably let you know via IRC and will probably back your patch out. You can always ask [irc://irc.mozilla.org/#jsapi for help] determining what is going on. (Over time you&#039;ll get a feel for figuring out when breakage is real on your own.)&lt;br /&gt;
&lt;br /&gt;
== Overview of the JS engine ==&lt;br /&gt;
&lt;br /&gt;
The JS engine is a swiftly moving target. The most detailed information is available at https://developer.mozilla.org/en/SpiderMonkey. Here are some particularly interesting, mostly up-to-date resources:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== High level overviews ===&lt;br /&gt;
&lt;br /&gt;
(Outdated) http://hacks.mozilla.org/2010/03/a-quick-note-on-javascript-engine-components/&lt;br /&gt;
&lt;br /&gt;
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals&lt;br /&gt;
&lt;br /&gt;
=== Medium level documentation ===&lt;br /&gt;
&lt;br /&gt;
jsapi.h: http://hg.mozilla.org/mozilla-central/file/tip/js/src/jsapi.h and the files in http://hg.mozilla.org/mozilla-central/file/tip/js/public&lt;br /&gt;
&lt;br /&gt;
Frequently used coding recipes and mappings from JS idioms to SpiderMonkey code: https://developer.mozilla.org/En/SpiderMonkey/JSAPI_Cookbook&lt;br /&gt;
&lt;br /&gt;
=== Detailed documentation ===&lt;br /&gt;
&lt;br /&gt;
Build: https://developer.mozilla.org/en/SpiderMonkey/Build_Documentation&lt;br /&gt;
&lt;br /&gt;
Testing: https://developer.mozilla.org/en/SpiderMonkey/Running_Automated_JavaScript_Tests&lt;br /&gt;
&lt;br /&gt;
Shell: https://developer.mozilla.org/En/SpiderMonkey/Introduction_to_the_JavaScript_shell&lt;br /&gt;
&lt;br /&gt;
Function reference: https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Collaboration and teamwork ==&lt;br /&gt;
&lt;br /&gt;
=== Communication (in descending order of information content) ===&lt;br /&gt;
&lt;br /&gt;
Nearly all communication is handled through [https://bugzilla.mozilla.org Bugzilla]. All bugs, feature requests, issues, enhancements, etc, are all referred to as bugs. No code may enter the Mozilla repository without being a patch attached to a bugzilla bug first. To follow all SpiderMonkey related bugs:&lt;br /&gt;
&lt;br /&gt;
 Go to [https://bugzilla.mozilla.org/userprefs.cgi?tab=email email preferences]&lt;br /&gt;
 Watch the user general@spidermonkey.bugs&lt;br /&gt;
 Or watch one of the JS components in the Core product: JavaScript Engine, JavaScript Engine: JIT, JavaScript: GC, or JavaScript: Standard Library&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey contributors generally hang out in the very active [irc://irc.mozilla.org/jsapi #jsapi IRC channel].&lt;br /&gt;
&lt;br /&gt;
The [https://www.mozilla.org/about/forums/#dev-tech-js-engine-internals js-internals mailing list] is used for communicating with other SpiderMonkey hackers. (&amp;lt;i&amp;gt;Internals&amp;lt;/i&amp;gt; as in discussing the internals of the SpiderMonkey engine. All are welcome on the list.).&lt;br /&gt;
&lt;br /&gt;
Reading Planet Mozilla is the best way to keep up with the Mozilla project, which includes some SpiderMonkey related blogs:&lt;br /&gt;
&lt;br /&gt;
 [https://blog.mozilla.org/javascript General JavaScript blog]&lt;br /&gt;
 [http://blog.mozilla.com/jorendorff Jason Orendorff]&lt;br /&gt;
 [http://blog.mozilla.com/nnethercote/ Nicholas Nethercote]&lt;br /&gt;
 [http://whereswalden.com/ Jeff Walden]&lt;br /&gt;
 [https://itcouldbesomuchbetter.wordpress.com Jim Blandy]&lt;br /&gt;
 [https://jandemooij.nl/ Jan de Mooij]&lt;br /&gt;
 [https://h4writer.com/ Hannes Verschore]&lt;br /&gt;
 [http://rfrn.org/~shu/ Shu-yu Guo]&lt;br /&gt;
 [https://blog.benj.me/tag/mozilla.html Benjamin Bouvier]&lt;br /&gt;
&lt;br /&gt;
The [https://developer.mozilla.org/en/SpiderMonkey#Community js-engine mailing list] is generally used for communicating with people who embed SpiderMonkey, such as asking questions and announcing API changes. No actual development happens on the list.&lt;br /&gt;
&lt;br /&gt;
== Code considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Repository ===&lt;br /&gt;
&lt;br /&gt;
Most active work on SpiderMonkey is done in the [http://hg.mozilla.org/mozilla-central mozilla-central] branch of the mozilla repository.&lt;br /&gt;
&lt;br /&gt;
=== Coding Style ===&lt;br /&gt;
&lt;br /&gt;
For many years, SpiderMonkey was written in C, and is gradually moving to C++. We still avoid many features such as run-time type information and exceptions, and generally avoid virtual functions for core data, but have come around to the glory of templates and namespaces relatively recently. Read the [[JavaScript:SpiderMonkey:C++ Coding Style|Coding Style]]. Do NOT read the portability guidelines, which I will not link to, since they are very out of date.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&lt;br /&gt;
Everything goes through bugzilla. We find a bug or have an idea, then submit it to bugzilla, then file patches to solve it. When it is solved, the patch is reviewed by team members, and is then committed to the [http://hg.mozilla.org/integration/mozilla-inbound mozilla-inbound repository]. A link to the commit is then automatically added as a comment to the bug. mozilla-inbound is periodically merged to mozilla-central by a Sheriff. This exempts us from watching [https://treeherder.mozilla.org/#/jobs?repo=mozilla-inbound treeherder] to check for failures caused by our patches, and commits are automatically backed out if errors are found.&lt;br /&gt;
&lt;br /&gt;
==== Sample Workflows ====&lt;br /&gt;
&lt;br /&gt;
(Outdated) [http://blog.mozilla.com/nnethercote/2009/07/27/how-i-work-on-tracemonkey/ Nicholas Nethercote: How I work on Tracemonkey]&lt;br /&gt;
&lt;br /&gt;
[https://blog.mozilla.org/sfink/2017/06/01/sfink-mozilla-workflow/ Steve Fink: Mozilla workflow]&lt;br /&gt;
&lt;br /&gt;
I (Paul Bone) suggest stating with a [http://mozilla-version-control-tools.readthedocs.io/en/latest/hgmozilla/unifiedrepo.html unified repository] checkout with the extensions and customization from Steve&#039;s workflow, using [https://www.mercurial-scm.org/wiki/ShareExtension hg share] to create workspaces, use bookmarks to track your new feature developments, and using [https://www.mercurial-scm.org/wiki/HisteditExtension hg histedit] and [https://www.mercurial-scm.org/wiki/RebaseExtension hg rebase] to prepare your patches for publication.&lt;br /&gt;
&lt;br /&gt;
=== Policy ===&lt;br /&gt;
&lt;br /&gt;
The following docs are for the Mozilla project, and differ ever so slightly from what you should do for SpiderMonkey. For example, you should find reviewers in #jsapi rather than #developers.&lt;br /&gt;
&lt;br /&gt;
[http://www.mozilla.org/hacking/committer/ How to get commit access]&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/en/Creating_a_patch How to make patches]&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/En/Developer_Guide/How_to_Submit_a_Patch Submitting a patch]&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/en/Supported_build_configurations Supported Platforms]&lt;br /&gt;
&lt;br /&gt;
==== .hgrc file ====&lt;br /&gt;
&lt;br /&gt;
This .hgrc file contains a lot of the wisdom distilled through the wiki:&lt;br /&gt;
&lt;br /&gt;
 [extensions]&lt;br /&gt;
 mq =&lt;br /&gt;
 &lt;br /&gt;
 [ui]&lt;br /&gt;
 username = First Last &amp;lt;email@domain.tld&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 [alias]&lt;br /&gt;
 qfulldiff = diff --rev qparent:.&lt;br /&gt;
 &lt;br /&gt;
 [defaults]&lt;br /&gt;
 diff = -p -U 8&lt;br /&gt;
 qdiff = -p -U 8&lt;br /&gt;
 qnew = -U&lt;br /&gt;
 commit = -v&lt;br /&gt;
 &lt;br /&gt;
 [diff]&lt;br /&gt;
 git = true&lt;br /&gt;
 showfunc = true&lt;br /&gt;
 unified = 8&lt;br /&gt;
 &lt;br /&gt;
 [paths]&lt;br /&gt;
 try = ssh://email@domain.tld@hg.mozilla.org/try/&lt;br /&gt;
&lt;br /&gt;
=== Try server  ===&lt;br /&gt;
&lt;br /&gt;
Often, you may be a little wary of breaking things. Mozilla has a [[Build:TryServer|Try Server]] where you can send a patch, and it&#039;ll be built and tested on tons of machines, which report to [https://treeherder.mozilla.org/#/jobs?repo=try TreeHerder]. Although you don&#039;t have [https://www.mozilla.org/hacking/commit-access-policy/ access] to TryServer just yet, you can get someone else to push it there for you. Just attach a patch to your bug, and ask in a comment, or on [irc://irc.mozilla.org/#jsapi #jsapi]. To be able to push to try-server yourself, you will need &amp;quot;level 1&amp;quot; access, which you can [https://www.mozilla.org/hacking/commit-access-policy/ request] once you&#039;ve contributed a patch or two.&lt;br /&gt;
&lt;br /&gt;
=== Mercurial Queues ===&lt;br /&gt;
&lt;br /&gt;
Since most of our lives revolve around patches, and we use Mercurial, nearly everybody uses Mercurial queues.&lt;br /&gt;
&lt;br /&gt;
Queues are based on the idea of patch management. Each queue consists of a series of patches, applied sequentially. The aim of the game is to split potential commits into simple, bite-sized chunks which are easy to review. This also makes it simple to experiment without polluting your existing work on a bug, to spin parts off into new bugs, and to rapidly apply and unapply patches (as demonstrated in the tutorial above).&lt;br /&gt;
&lt;br /&gt;
==== Enabling ====&lt;br /&gt;
&lt;br /&gt;
Add the following snippet to your .hgrc file to enable MQ&lt;br /&gt;
&lt;br /&gt;
 [extensions]&lt;br /&gt;
 mq =&lt;br /&gt;
&lt;br /&gt;
==== Example MQ workflow ====&lt;br /&gt;
&lt;br /&gt;
Clone the repository to deal with a bug:&lt;br /&gt;
&lt;br /&gt;
  hg clone http://hg.mozilla.org/mozilla-central&lt;br /&gt;
&lt;br /&gt;
Initialize your queue:&lt;br /&gt;
&lt;br /&gt;
  hg qinit -c&lt;br /&gt;
&lt;br /&gt;
Create a new patch, with some name:&lt;br /&gt;
&lt;br /&gt;
  hg qnew first_attempt&lt;br /&gt;
&lt;br /&gt;
Work on the patch, try to fix the bug, test, compile, etc.&lt;br /&gt;
&lt;br /&gt;
Refresh (save your work into the patch):&lt;br /&gt;
&lt;br /&gt;
 hg qrefresh&lt;br /&gt;
&lt;br /&gt;
Repeat a few times.&lt;br /&gt;
&lt;br /&gt;
Rename the patch (because your first name wasn&#039;t appliable):&lt;br /&gt;
&lt;br /&gt;
 hg qrename refactor_the_whatsit&lt;br /&gt;
&lt;br /&gt;
Create a new patch to try a logically separate part of the same bug:&lt;br /&gt;
&lt;br /&gt;
 hg qnew rip_out_the_old_thing&lt;br /&gt;
&lt;br /&gt;
Repeat the process a few times, until you have solved the problem. During this time, it can often be useful to go back and forth between patches:&lt;br /&gt;
&lt;br /&gt;
 hg qpop # unapply a patch&lt;br /&gt;
 hg qpush # reapply a patch&lt;br /&gt;
 hg qpop -a # unapply all patches&lt;br /&gt;
 hg qpush -a # reapply all patches&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Combine all the patches into a single patch, which you submit to bugzilla:&lt;br /&gt;
&lt;br /&gt;
 hg qpush -a&lt;br /&gt;
 hg qdiff --rev qparent:. &amp;gt; my_wonderful_patch.patch&lt;br /&gt;
&lt;br /&gt;
Commit the patches to your local patch repository, in case you make a mistake (You might do this periodically):&lt;br /&gt;
&lt;br /&gt;
 hg qcommit -m &amp;quot;Some message. Doesn&#039;t have to be good, this won&#039;t be committed to the repository, it&#039;s just for you&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Go back to the old patches and fiddle with them based on feedback:&lt;br /&gt;
&lt;br /&gt;
 hg qpop&lt;br /&gt;
 hg qrefresh&lt;br /&gt;
 etc&lt;br /&gt;
&lt;br /&gt;
There are some more complex techniques that we won&#039;t go into in detail. You can enable only some patches using qguard and qselect, and you can reorder the patches by manually editing the .hg/patches/series file. But be careful!&lt;br /&gt;
&lt;br /&gt;
[[Category:New Contributor Landing Page]]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:New_to_SpiderMonkey&amp;diff=1189938</id>
		<title>JavaScript:New to SpiderMonkey</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:New_to_SpiderMonkey&amp;diff=1189938"/>
		<updated>2018-03-07T17:20:03Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Build the js shell */ back out comment about python which dupilcates the build documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tutorial: your first patch  ==&lt;br /&gt;
&lt;br /&gt;
The first step to getting involved with SpiderMonkey is to make your first patch. This guides you through it, and at the end you should have learnt a lot of the procedures and formalisms involved in getting things done here.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll assume you&#039;re on a Unix-y platform, and that you know what you&#039;re doing. We&#039;ll ignore nearly all details. &lt;br /&gt;
&lt;br /&gt;
=== Get the code ===&lt;br /&gt;
&lt;br /&gt;
Spidermonkey development happens in the &amp;quot;mozilla-central&amp;quot; mercurial repository:&lt;br /&gt;
&lt;br /&gt;
 hg clone http://hg.mozilla.org/mozilla-central spidermonkey&lt;br /&gt;
&lt;br /&gt;
=== Build the js shell ===&lt;br /&gt;
&lt;br /&gt;
Most of the time, you&#039;ll be working with the Javascript shell, instead of the full Firefox browser. So build the shell: &lt;br /&gt;
&lt;br /&gt;
 cd spidermonkey/js/src&lt;br /&gt;
 cp configure.in configure &amp;amp;&amp;amp; chmod +x configure # or autoconf2.13 or autoconf-2.13&lt;br /&gt;
 mkdir build_DBG.OBJ &lt;br /&gt;
 cd build_DBG.OBJ &lt;br /&gt;
 ../configure --enable-debug --disable-optimize&lt;br /&gt;
 make # or make -j8&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
If you&#039;re having trouble or are missing dependencies, refer to [https://developer.mozilla.org/en/SpiderMonkey/Build_Documentation#Building_SpiderMonkey_tip Building SpiderMonkey Tip].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;VPATH&amp;lt;/tt&amp;gt; builds, also called out-of-source builds, must be used, hence the &amp;lt;tt&amp;gt;mkdir&amp;lt;/tt&amp;gt; above is not an options.&lt;br /&gt;
&lt;br /&gt;
It is not sufficient to have &#039;&#039;autoconf&#039;&#039; installed on your system, that happens to have the version 2.13.  For the &amp;lt;tt&amp;gt;../configure&amp;lt;/tt&amp;gt; process a binary called &amp;lt;tt&amp;gt;autoconf2.13&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;autoconf-2.13&amp;lt;/tt&amp;gt; must be on your &amp;lt;tt&amp;gt;$PATH&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Fix something ===&lt;br /&gt;
&lt;br /&gt;
At this point, you&#039;re ready to make your first fix. &lt;br /&gt;
&lt;br /&gt;
 TODO: something useless. Maybe adding a datemicrosecond function.&lt;br /&gt;
&lt;br /&gt;
==== Building your changes ====&lt;br /&gt;
&lt;br /&gt;
Having made the change, build the shell again. &lt;br /&gt;
&lt;br /&gt;
 make -C build_DBG.OBJ&lt;br /&gt;
&lt;br /&gt;
==== Testing your changes ====&lt;br /&gt;
&lt;br /&gt;
It builds. Hurray. Time to run the tests to check you haven&#039;t broken anything. &lt;br /&gt;
&lt;br /&gt;
 jit-test/jit_test.py build_DBG.OBJ/dist/bin/js&lt;br /&gt;
(The location of the shell has changed, it used to be build_DBG.OBJ/js)&lt;br /&gt;
&lt;br /&gt;
The jit-tests are pretty quick, and should give you an idea if you&#039;ve gotten something wrong. Assuming nothing goes wrong, try the ref-tests: &lt;br /&gt;
&lt;br /&gt;
 tests/jstests.py build_DBG.OBJ/dist/bin/js&lt;br /&gt;
&lt;br /&gt;
Note that some of these tests fail depending on the timezone and locale they&#039;re run in, so if you get any errors that don&#039;t seem related to your changes, re-run the tests with a shell build without your changes applied and compare the results.&lt;br /&gt;
&lt;br /&gt;
==== Benchmark your changes ====&lt;br /&gt;
&lt;br /&gt;
Tests all pass. Congrats, you didn&#039;t break anything. Now, did you make it faster or slower? We benchmark using a number of different benchmark suites.&lt;br /&gt;
&lt;br /&gt;
* v8&lt;br /&gt;
* SunSpider: One of the original js benchmarks. No real value left.&lt;br /&gt;
* Octane: Another js benchmark that we heavily optimized for in the past. Isn&#039;t representative of current web workloads.&lt;br /&gt;
* speedometer: A full browser benchmark. Testing react, ember, etc. Intended to be a better measure of &amp;quot;responsiveness&amp;quot;. We are currently optimizing for version 2 it.&lt;br /&gt;
&lt;br /&gt;
Get the benchmarks: &lt;br /&gt;
&lt;br /&gt;
 svn checkout http://svn.webkit.org/repository/webkit/trunk/PerformanceTests/SunSpider&lt;br /&gt;
&lt;br /&gt;
And now run them: &lt;br /&gt;
&lt;br /&gt;
 cd SunSpider &lt;br /&gt;
 ./sunspider --shell=../build_DBG.OBJ/dist/bin/js --run=30 --suite=sunspider-0.9.1 &lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
===== Optimized build =====&lt;br /&gt;
&lt;br /&gt;
Whoops, we benchmarked the debug version. Let&#039;s make an optimized build to test instead.&lt;br /&gt;
&lt;br /&gt;
 mkdir build_OPT.OBJ &lt;br /&gt;
 cd build_OPT.OBJ &lt;br /&gt;
 ../configure --disable-debug --enable-optimize&lt;br /&gt;
 make &lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
Repeat the sunspider steps above, and take note of the line that looks like: &lt;br /&gt;
&lt;br /&gt;
 Results are located at sunspider-0.9.1-results/sunspider-results-2010-08-07-17.56.48.js&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need that later. &lt;br /&gt;
&lt;br /&gt;
===== Baseline version / Mercurial Queues =====&lt;br /&gt;
&lt;br /&gt;
We need to time our optimized version against the baseline version. This calls for a brief introduction to mercurial queues, which used to be the way most people managed their SpiderMonkey workflow (though these days many people use native hg, native hg + evolution, or git):&lt;br /&gt;
&lt;br /&gt;
 hg qinit&lt;br /&gt;
 hg qnew my_first_patch -f&lt;br /&gt;
 hg qrefresh&lt;br /&gt;
&lt;br /&gt;
This puts your current work into a patch, managed by Mercurial, symbolically called my_first_patch. To pop the patch off: &lt;br /&gt;
&lt;br /&gt;
 hg qpop&lt;br /&gt;
&lt;br /&gt;
And we&#039;re back to our pristine version.&lt;br /&gt;
&lt;br /&gt;
===== Compare =====&lt;br /&gt;
&lt;br /&gt;
Build again and rerun SunSpider again. You should now have two files like: &lt;br /&gt;
&lt;br /&gt;
 sunspider-0.9.1-results/sunspider-results-2010-08-07-17.56.48.js&lt;br /&gt;
&lt;br /&gt;
Compare them using the compare script: &lt;br /&gt;
&lt;br /&gt;
 cd SunSpider &lt;br /&gt;
 ./sunspider-compare-results --shell=../build_DBG.OBJ/js --suite=sunspider-0.9.1 FILE1-withoutPatch FILE2-withPatch&lt;br /&gt;
&lt;br /&gt;
=== Get a real bug  ===&lt;br /&gt;
&lt;br /&gt;
At this point, you&#039;ve seen nearly everything you need to do hack on SpiderMonkey. So it&#039;s time to get a real bug to work on. You can get a bug on [http://www.joshmatthews.net/bugsahoy/?jseng=1&amp;amp;unowned=1 Bugs Ahoy].&lt;br /&gt;
&lt;br /&gt;
Fix the bug, updating the bug report with your progress, and asking questions as you go (either in the bug comments, or in [irc://irc.mozilla.org/#jsapi #jsapi]). When it&#039;s done, repeat all the steps above. Then it&#039;s time to get your patch into the tree.&lt;br /&gt;
&lt;br /&gt;
=== Submit a patch  ===&lt;br /&gt;
&lt;br /&gt;
To get the patch from mercurial, use: &lt;br /&gt;
&lt;br /&gt;
 hg qdiff # if you&#039;re using queues or&lt;br /&gt;
 hg diff  # if you&#039;re not&lt;br /&gt;
&lt;br /&gt;
Add it to the bug as an attachment. &lt;br /&gt;
&lt;br /&gt;
=== Get a review ===&lt;br /&gt;
&lt;br /&gt;
Nothing gets into the tree without a review, so you&#039;ll need one. The [[JavaScript:Hackers|SpiderMonkey hackers list]] is a good place to start: if your patch changes something listed as an area of expertise for someone there, that&#039;s a good person to ask for a review.&lt;br /&gt;
&lt;br /&gt;
Alternatively run &amp;lt;code&amp;gt;hg blame&amp;lt;/code&amp;gt; on the files you&#039;ve changed, and check who has been changing related code recently. They&#039;re likely to be good candidates. An irc bot can automate this process for a single file if you enter &amp;quot;/msg mrgiggles who can review something.cpp?&amp;quot; into your irc client.&lt;br /&gt;
&lt;br /&gt;
The review will consist of comments on your changes, suggesting or requesting alternative ways to do something and asking you to make changes where needed. They might also request additional changes, for example tests. Fix what they ask, resubmit the patch to bugzilla, and ask for another review. After you repeat this step a few times, they will mark the patch as &amp;quot;&amp;lt;code&amp;gt;r+&amp;lt;/code&amp;gt;&amp;quot; meaning it&#039;s now good to commit.&lt;br /&gt;
&lt;br /&gt;
=== Commit ===&lt;br /&gt;
&lt;br /&gt;
You can&#039;t commit to mozilla-central / mozilla-inbound until you have &amp;quot;level 3&amp;quot; access, so you&#039;ll need someone to do this for you. Try asking in [irc://irc.mozilla.org/#jsapi #jsapi], or add the &amp;lt;code&amp;gt;checkin-needed&amp;lt;/code&amp;gt; keyword to the bug. After you have been contributing for a while, you can get level 3 access by [https://www.mozilla.org/hacking/commit-access-policy/ applying for it].&lt;br /&gt;
&lt;br /&gt;
After committing, a large series of tests will be run to make sure you didn&#039;t break anything. You will need to hang around to make sure you didn&#039;t break something. It is difficult to determine what failures are real and what are what we call &amp;quot;intermittent oranges&amp;quot; (&amp;quot;orange&amp;quot; because that is the color used on our continuous integration dashboard for test failures). If you do break something, a sheriff will probably let you know via IRC and will probably back your patch out. You can always ask [irc://irc.mozilla.org/#jsapi for help] determining what is going on. (Over time you&#039;ll get a feel for figuring out when breakage is real on your own.)&lt;br /&gt;
&lt;br /&gt;
== Overview of the JS engine ==&lt;br /&gt;
&lt;br /&gt;
The JS engine is a swiftly moving target. The most detailed information is available at https://developer.mozilla.org/en/SpiderMonkey. Here are some particularly interesting, mostly up-to-date resources:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== High level overviews ===&lt;br /&gt;
&lt;br /&gt;
(Outdated) http://hacks.mozilla.org/2010/03/a-quick-note-on-javascript-engine-components/&lt;br /&gt;
&lt;br /&gt;
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals&lt;br /&gt;
&lt;br /&gt;
=== Medium level documentation ===&lt;br /&gt;
&lt;br /&gt;
jsapi.h: http://hg.mozilla.org/mozilla-central/file/tip/js/src/jsapi.h and the files in http://hg.mozilla.org/mozilla-central/file/tip/js/public&lt;br /&gt;
&lt;br /&gt;
Frequently used coding recipes and mappings from JS idioms to SpiderMonkey code: https://developer.mozilla.org/En/SpiderMonkey/JSAPI_Cookbook&lt;br /&gt;
&lt;br /&gt;
=== Detailed documentation ===&lt;br /&gt;
&lt;br /&gt;
Build: https://developer.mozilla.org/en/SpiderMonkey/Build_Documentation&lt;br /&gt;
&lt;br /&gt;
Testing: https://developer.mozilla.org/en/SpiderMonkey/Running_Automated_JavaScript_Tests&lt;br /&gt;
&lt;br /&gt;
Shell: https://developer.mozilla.org/En/SpiderMonkey/Introduction_to_the_JavaScript_shell&lt;br /&gt;
&lt;br /&gt;
Function reference: https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Collaboration and teamwork ==&lt;br /&gt;
&lt;br /&gt;
=== Communication (in descending order of information content) ===&lt;br /&gt;
&lt;br /&gt;
Nearly all communication is handled through [https://bugzilla.mozilla.org Bugzilla]. All bugs, feature requests, issues, enhancements, etc, are all referred to as bugs. No code may enter the Mozilla repository without being a patch attached to a bugzilla bug first. To follow all SpiderMonkey related bugs:&lt;br /&gt;
&lt;br /&gt;
 Go to [https://bugzilla.mozilla.org/userprefs.cgi?tab=email email preferences]&lt;br /&gt;
 Watch the user general@spidermonkey.bugs&lt;br /&gt;
 Or watch one of the JS components in the Core product: JavaScript Engine, JavaScript Engine: JIT, JavaScript: GC, or JavaScript: Standard Library&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey contributors generally hang out in the very active [irc://irc.mozilla.org/jsapi #jsapi IRC channel].&lt;br /&gt;
&lt;br /&gt;
The [https://www.mozilla.org/about/forums/#dev-tech-js-engine-internals js-internals mailing list] is used for communicating with other SpiderMonkey hackers. (&amp;lt;i&amp;gt;Internals&amp;lt;/i&amp;gt; as in discussing the internals of the SpiderMonkey engine. All are welcome on the list.).&lt;br /&gt;
&lt;br /&gt;
Reading Planet Mozilla is the best way to keep up with the Mozilla project, which includes some SpiderMonkey related blogs:&lt;br /&gt;
&lt;br /&gt;
 [https://blog.mozilla.org/javascript General JavaScript blog]&lt;br /&gt;
 [http://blog.mozilla.com/jorendorff Jason Orendorff]&lt;br /&gt;
 [http://blog.mozilla.com/nnethercote/ Nicholas Nethercote]&lt;br /&gt;
 [http://whereswalden.com/ Jeff Walden]&lt;br /&gt;
 [https://itcouldbesomuchbetter.wordpress.com Jim Blandy]&lt;br /&gt;
 [https://jandemooij.nl/ Jan de Mooij]&lt;br /&gt;
 [https://h4writer.com/ Hannes Verschore]&lt;br /&gt;
 [http://rfrn.org/~shu/ Shu-yu Guo]&lt;br /&gt;
 [https://blog.benj.me/tag/mozilla.html Benjamin Bouvier]&lt;br /&gt;
&lt;br /&gt;
The [https://developer.mozilla.org/en/SpiderMonkey#Community js-engine mailing list] is generally used for communicating with people who embed SpiderMonkey, such as asking questions and announcing API changes. No actual development happens on the list.&lt;br /&gt;
&lt;br /&gt;
== Code considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Repository ===&lt;br /&gt;
&lt;br /&gt;
Most active work on SpiderMonkey is done in the [http://hg.mozilla.org/mozilla-central mozilla-central] branch of the mozilla repository.&lt;br /&gt;
&lt;br /&gt;
=== Coding Style ===&lt;br /&gt;
&lt;br /&gt;
For many years, SpiderMonkey was written in C, and is gradually moving to C++. We still avoid many features such as run-time type information and exceptions, and generally avoid virtual functions for core data, but have come around to the glory of templates and namespaces relatively recently. Read the [[JavaScript:SpiderMonkey:C++ Coding Style|Coding Style]]. Do NOT read the portability guidelines, which I will not link to, since they are very out of date.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&lt;br /&gt;
Everything goes through bugzilla. We find a bug or have an idea, then submit it to bugzilla, then file patches to solve it. When it is solved, the patch is reviewed by team members, and is then committed to the [http://hg.mozilla.org/integration/mozilla-inbound mozilla-inbound repository]. A link to the commit is then automatically added as a comment to the bug. mozilla-inbound is periodically merged to mozilla-central by a Sheriff. This exempts us from watching [https://treeherder.mozilla.org/#/jobs?repo=mozilla-inbound treeherder] to check for failures caused by our patches, and commits are automatically backed out if errors are found.&lt;br /&gt;
&lt;br /&gt;
==== Sample Workflows ====&lt;br /&gt;
&lt;br /&gt;
(Outdated) [http://blog.mozilla.com/nnethercote/2009/07/27/how-i-work-on-tracemonkey/ Nicholas Nethercote: How I work on Tracemonkey]&lt;br /&gt;
&lt;br /&gt;
[https://blog.mozilla.org/sfink/2017/06/01/sfink-mozilla-workflow/ Steve Fink: Mozilla workflow]&lt;br /&gt;
&lt;br /&gt;
I (Paul Bone) suggest stating with a [http://mozilla-version-control-tools.readthedocs.io/en/latest/hgmozilla/unifiedrepo.html unified repository] checkout with the extensions and customization from Steve&#039;s workflow, using [https://www.mercurial-scm.org/wiki/ShareExtension hg share] to create workspaces, use bookmarks to track your new feature developments, and using [https://www.mercurial-scm.org/wiki/HisteditExtension hg histedit] and [https://www.mercurial-scm.org/wiki/RebaseExtension hg rebase] to prepare your patches for publication.&lt;br /&gt;
&lt;br /&gt;
=== Policy ===&lt;br /&gt;
&lt;br /&gt;
The following docs are for the Mozilla project, and differ ever so slightly from what you should do for SpiderMonkey. For example, you should find reviewers in #jsapi rather than #developers.&lt;br /&gt;
&lt;br /&gt;
[http://www.mozilla.org/hacking/committer/ How to get commit access]&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/en/Creating_a_patch How to make patches]&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/En/Developer_Guide/How_to_Submit_a_Patch Submitting a patch]&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/en/Supported_build_configurations Supported Platforms]&lt;br /&gt;
&lt;br /&gt;
==== .hgrc file ====&lt;br /&gt;
&lt;br /&gt;
This .hgrc file contains a lot of the wisdom distilled through the wiki:&lt;br /&gt;
&lt;br /&gt;
 [extensions]&lt;br /&gt;
 mq =&lt;br /&gt;
 &lt;br /&gt;
 [ui]&lt;br /&gt;
 username = First Last &amp;lt;email@domain.tld&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 [alias]&lt;br /&gt;
 qfulldiff = diff --rev qparent:.&lt;br /&gt;
 &lt;br /&gt;
 [defaults]&lt;br /&gt;
 diff = -p -U 8&lt;br /&gt;
 qdiff = -p -U 8&lt;br /&gt;
 qnew = -U&lt;br /&gt;
 commit = -v&lt;br /&gt;
 &lt;br /&gt;
 [diff]&lt;br /&gt;
 git = true&lt;br /&gt;
 showfunc = true&lt;br /&gt;
 unified = 8&lt;br /&gt;
 &lt;br /&gt;
 [paths]&lt;br /&gt;
 try = ssh://email@domain.tld@hg.mozilla.org/try/&lt;br /&gt;
&lt;br /&gt;
=== Try server  ===&lt;br /&gt;
&lt;br /&gt;
Often, you may be a little wary of breaking things. Mozilla has a [[Build:TryServer|Try Server]] where you can send a patch, and it&#039;ll be built and tested on tons of machines, which report to [https://treeherder.mozilla.org/#/jobs?repo=try TreeHerder]. Although you don&#039;t have [https://www.mozilla.org/hacking/commit-access-policy/ access] to TryServer just yet, you can get someone else to push it there for you. Just attach a patch to your bug, and ask in a comment, or on [irc://irc.mozilla.org/#jsapi #jsapi]. To be able to push to try-server yourself, you will need &amp;quot;level 1&amp;quot; access, which you can [https://www.mozilla.org/hacking/commit-access-policy/ request] once you&#039;ve contributed a patch or two.&lt;br /&gt;
&lt;br /&gt;
=== Mercurial Queues ===&lt;br /&gt;
&lt;br /&gt;
Since most of our lives revolve around patches, and we use Mercurial, nearly everybody uses Mercurial queues.&lt;br /&gt;
&lt;br /&gt;
Queues are based on the idea of patch management. Each queue consists of a series of patches, applied sequentially. The aim of the game is to split potential commits into simple, bite-sized chunks which are easy to review. This also makes it simple to experiment without polluting your existing work on a bug, to spin parts off into new bugs, and to rapidly apply and unapply patches (as demonstrated in the tutorial above).&lt;br /&gt;
&lt;br /&gt;
==== Enabling ====&lt;br /&gt;
&lt;br /&gt;
Add the following snippet to your .hgrc file to enable MQ&lt;br /&gt;
&lt;br /&gt;
 [extensions]&lt;br /&gt;
 mq =&lt;br /&gt;
&lt;br /&gt;
==== Example MQ workflow ====&lt;br /&gt;
&lt;br /&gt;
Clone the repository to deal with a bug:&lt;br /&gt;
&lt;br /&gt;
  hg clone http://hg.mozilla.org/mozilla-central&lt;br /&gt;
&lt;br /&gt;
Initialize your queue:&lt;br /&gt;
&lt;br /&gt;
  hg qinit -c&lt;br /&gt;
&lt;br /&gt;
Create a new patch, with some name:&lt;br /&gt;
&lt;br /&gt;
  hg qnew first_attempt&lt;br /&gt;
&lt;br /&gt;
Work on the patch, try to fix the bug, test, compile, etc.&lt;br /&gt;
&lt;br /&gt;
Refresh (save your work into the patch):&lt;br /&gt;
&lt;br /&gt;
 hg qrefresh&lt;br /&gt;
&lt;br /&gt;
Repeat a few times.&lt;br /&gt;
&lt;br /&gt;
Rename the patch (because your first name wasn&#039;t appliable):&lt;br /&gt;
&lt;br /&gt;
 hg qrename refactor_the_whatsit&lt;br /&gt;
&lt;br /&gt;
Create a new patch to try a logically separate part of the same bug:&lt;br /&gt;
&lt;br /&gt;
 hg qnew rip_out_the_old_thing&lt;br /&gt;
&lt;br /&gt;
Repeat the process a few times, until you have solved the problem. During this time, it can often be useful to go back and forth between patches:&lt;br /&gt;
&lt;br /&gt;
 hg qpop # unapply a patch&lt;br /&gt;
 hg qpush # reapply a patch&lt;br /&gt;
 hg qpop -a # unapply all patches&lt;br /&gt;
 hg qpush -a # reapply all patches&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Combine all the patches into a single patch, which you submit to bugzilla:&lt;br /&gt;
&lt;br /&gt;
 hg qpush -a&lt;br /&gt;
 hg qdiff --rev qparent:. &amp;gt; my_wonderful_patch.patch&lt;br /&gt;
&lt;br /&gt;
Commit the patches to your local patch repository, in case you make a mistake (You might do this periodically):&lt;br /&gt;
&lt;br /&gt;
 hg qcommit -m &amp;quot;Some message. Doesn&#039;t have to be good, this won&#039;t be committed to the repository, it&#039;s just for you&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Go back to the old patches and fiddle with them based on feedback:&lt;br /&gt;
&lt;br /&gt;
 hg qpop&lt;br /&gt;
 hg qrefresh&lt;br /&gt;
 etc&lt;br /&gt;
&lt;br /&gt;
There are some more complex techniques that we won&#039;t go into in detail. You can enable only some patches using qguard and qselect, and you can reorder the patches by manually editing the .hg/patches/series file. But be careful!&lt;br /&gt;
&lt;br /&gt;
[[Category:New Contributor Landing Page]]&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Directories&amp;diff=1186679</id>
		<title>JavaScript:SpiderMonkey:Directories</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Directories&amp;diff=1186679"/>
		<updated>2018-01-12T18:04:56Z</updated>

		<summary type="html">&lt;p&gt;Jorend: fmt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how we want to organize the SpiderMonkey source code, in subdirectories under js/src.&lt;br /&gt;
&lt;br /&gt;
The reason we have this document is that currently it&#039;s not organized this way. It&#039;s a bit of a mess just now.&lt;br /&gt;
&lt;br /&gt;
=== Directories under js/src ===&lt;br /&gt;
&lt;br /&gt;
The directories under js/src should be like this:&lt;br /&gt;
&lt;br /&gt;
*   gc - Heap allocation and garbage collection.&lt;br /&gt;
&lt;br /&gt;
*   vm - JS value representation and code execution. Files that definitely belong there:&lt;br /&gt;
&lt;br /&gt;
        Stack.*, Script.*, Interpreter.*, Opcodes.h, PIC.*&lt;br /&gt;
        String.*, Symbol.*, Atom.*, Value.cpp, Id.cpp&lt;br /&gt;
        Shape.*, Object.*, ShapedObject.*, NativeObject.*, Shape.*, ObjectGroup.*, TypeInference.*&lt;br /&gt;
        Context.*, Runtime.*, Realm.*, GlobalObject.*&lt;br /&gt;
&lt;br /&gt;
The vm directory will also hold a bunch of stuff that is not so &amp;quot;core&amp;quot; but still mainly vm-related, like UbiNode.cpp, SelfHosting.*, TemplateRegistry.h, Xdr.*, maybe StructuredClone.*&lt;br /&gt;
&lt;br /&gt;
*   builtin - JS-facing stuff. Lots of JSNatives and Classes; self-hosted code. Ideally, each file in here is fairly peripheral to the core business of the JS engine, but it will remain common for the JITs to need to see JSNative function pointers, and for builtins to need access to non-public GC primitives, etc. etc.&lt;br /&gt;
&lt;br /&gt;
*   jit - The JITs.&lt;br /&gt;
&lt;br /&gt;
*   frontend - Compiling JS code to bytecode.&lt;br /&gt;
&lt;br /&gt;
*   ds - Data structures.&lt;br /&gt;
&lt;br /&gt;
*   shell - The repl.&lt;br /&gt;
&lt;br /&gt;
*   editline, perf, vtune - It&#039;s OK that we have extra directories for these bits and pieces.&lt;br /&gt;
&lt;br /&gt;
*   irregexp - Vendored libraries are OK too.&lt;br /&gt;
&lt;br /&gt;
*   util - New junk-drawer directory, read on for rationale.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Focusing the vm directory on VM stuff ===&lt;br /&gt;
&lt;br /&gt;
There&#039;s a lot of great stuff in js/src/vm, like JSONPrinter.h and Time.h, that is VM-related in no way whatsoever. It seems we have already decided to have a util directory; maybe then we should call it js/src/util and reserve js/src/vm for the actual VM.&lt;br /&gt;
&lt;br /&gt;
We should move most of the Object subclasses out of vm. There&#039;s a spectrum of how silly it is to have them in there:&lt;br /&gt;
&lt;br /&gt;
Very Silly Indeed&lt;br /&gt;
* DateObject -&amp;gt; builtin/, times a million&lt;br /&gt;
* RegExpObject -&amp;gt; builtin/&lt;br /&gt;
&lt;br /&gt;
On Consideration, Pretty Silly&lt;br /&gt;
* BooleanObject, NumberObject, StringObject -&amp;gt; builtin/&lt;br /&gt;
* ErrorObject -&amp;gt; builtin/&lt;br /&gt;
&lt;br /&gt;
Not Quite So Silly&lt;br /&gt;
* ArrayObject, TypedArrayObject, SharedArrayObject: We would love to move this to builtin/ eventually. I&#039;m not sure we&#039;re ready. Certainly there is no clear abstraction boundary.&lt;br /&gt;
* Function, AsyncFunction: The same. (I moved Function in here myself in this patch stack...)&lt;br /&gt;
&lt;br /&gt;
Barely Silly&lt;br /&gt;
* ArgumentsObject and GlobalObject: Very tied to the interpreter; we can leave them in vm.&lt;br /&gt;
* EnvironmentObject: Even more so.&lt;br /&gt;
&lt;br /&gt;
Everything with JSPropertySpecs would ideally live in js/src/builtin.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Coding_Style&amp;diff=1186676</id>
		<title>JavaScript:SpiderMonkey:Coding Style</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Coding_Style&amp;diff=1186676"/>
		<updated>2018-01-12T16:16:57Z</updated>

		<summary type="html">&lt;p&gt;Jorend: link to directories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Code Organization =&lt;br /&gt;
&lt;br /&gt;
See [[JavaScript:SpiderMonkey:Directories]].&lt;br /&gt;
&lt;br /&gt;
= Functions =&lt;br /&gt;
&lt;br /&gt;
* Public function names begin with JS_ followed by capitalized &amp;quot;intercaps&amp;quot;, e.g. JS_NewObject.&lt;br /&gt;
* Extern but library-private function names use a js_ prefix and mixed case, e.g. js_SearchScope.&lt;br /&gt;
* Most static function names have unprefixed, mixed-case names: GetChar.&lt;br /&gt;
* But static native methods of JS objects have lowercase, underscore-separated or intercaps names, e.g., str_indexOf.&lt;br /&gt;
* Function return types are on a separate line preceding the function name.&lt;br /&gt;
* Function braces go on the line following the function name.&lt;br /&gt;
 void DoThis()           /* bad */&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
 void&lt;br /&gt;
 DoThis()                /* OK */&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Other Symbols =&lt;br /&gt;
&lt;br /&gt;
* Library-private and static data use underscores, not intercaps (but library-private data do use a js_ prefix).&lt;br /&gt;
* Scalar type names are lowercase and js-prefixed: jsdouble.&lt;br /&gt;
* Aggregate type names are JS-prefixed and mixed-case: JSObject.&lt;br /&gt;
* Macros are generally ALL_CAPS and underscored, to call out potential side effects, multiple uses of a formal argument, etc.  Line continuation characters should all line up, in column 79 if that exceeds the width of all the macro text.  Macro parameters should be of the form name_ (instead of something like __name).&lt;br /&gt;
&lt;br /&gt;
= Indentation =&lt;br /&gt;
&lt;br /&gt;
* Use spaces, not tabs.  There should be no tabs in source files.&lt;br /&gt;
* Four spaces of indentation per statement nesting level.&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;case L:&amp;lt;/code&amp;gt;&amp;quot; labels in &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; statements count as half of a nesting level, so indent two spaces, with the labeled statements indenting two more for a standard four spaces indentation from &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; to a case-controlled statement.&lt;br /&gt;
 switch (discriminant) {&lt;br /&gt;
   case L1:&lt;br /&gt;
     DoSomething();&lt;br /&gt;
   . . .&lt;br /&gt;
 }&lt;br /&gt;
* Function arguments that overflow the first line of the call expression should be aligned to underhang the first argument (to start in overflow lines in the column after the opening parenthesis).&lt;br /&gt;
 JS_SetContext(rt,         /* bad */&lt;br /&gt;
              cx);&lt;br /&gt;
 JS_SetContext(rt,         /* OK */&lt;br /&gt;
               cx);&lt;br /&gt;
&lt;br /&gt;
= Whitespace in declarations =&lt;br /&gt;
&lt;br /&gt;
These rules are inconsistently applied.  Be consistent with the code you&#039;re editing rather than adhere too closely to these guidelines!&lt;br /&gt;
&lt;br /&gt;
* In a declaration of a pointer, the &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; goes with the type:&lt;br /&gt;
 char *s;                  /* bad */&lt;br /&gt;
 char* s;                  /* OK */&lt;br /&gt;
* In C++ method declarations with default arguments, use spaces and comments like so:&lt;br /&gt;
 static void&lt;br /&gt;
 Frob(JSContext* cx, uint32_t defaultValue = 0);&lt;br /&gt;
 static void&lt;br /&gt;
 Frob(JSContext* cx, uint32_t defaultValue /* = 0 */)&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Other whitespace =&lt;br /&gt;
&lt;br /&gt;
* Code should fit within 99 columns; comments should fit within 80 columns; both figures include indentation. Break down lines that are too long by splitting after a binary operator.&lt;br /&gt;
* Exception: in a &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; statement where each case is a trivially-short statement, it&#039;s ok to put the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt;, the statement, and the &amp;lt;code&amp;gt;break;&amp;lt;/code&amp;gt; all on one line.&lt;br /&gt;
* Comment &amp;lt;code&amp;gt;/* FALL THROUGH */&amp;lt;/code&amp;gt; in place of missing &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; when intentionally falling through from one case-controlled statement sequence into another, or into the &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; statements.&lt;br /&gt;
* Do not use spaces between a function name and its arguments list, or between an array name and the square bracket. Also, do no use spaces after a bracket. Use a space after a comma to separate arguments.&lt;br /&gt;
 JS_SetContext ( rt, cx ); /* bad */&lt;br /&gt;
 JS_SetContext(rt, cx);    /* OK */&lt;br /&gt;
* Use a space between a C keyword and parentheses.&lt;br /&gt;
 if(condition)             /* bad */&lt;br /&gt;
 if (condition)            /* OK */&lt;br /&gt;
* In a conditional, if the condition and consequent (and, if present, any number of &amp;lt;code&amp;gt;else if&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt; alternatives and associated conditions) occupy single lines, no braces are used.&lt;br /&gt;
 if (today == &amp;quot;Tuesday&amp;quot;)&lt;br /&gt;
     puts(&amp;quot;I don&#039;t have my wallet on me.&amp;quot;);&lt;br /&gt;
 else&lt;br /&gt;
     puts(&amp;quot;I would gladly pay you on Tuesday for a hamburger today.&amp;quot;);&lt;br /&gt;
However, if &#039;&#039;any&#039;&#039; condition occupies multiple lines, or if a consequent or alternative occupies multiple lines (regardless whether it&#039;s a single statement or multiple statements), every consequent and alternative is braced.&lt;br /&gt;
 if (canSwingFromWeb) {&lt;br /&gt;
     p-&amp;gt;swingFromWeb();&lt;br /&gt;
 } else {&lt;br /&gt;
     MOZ_ASSERT(p-&amp;gt;isSpiderPig());&lt;br /&gt;
     p-&amp;gt;doWhateverSpiderPigDoes();&lt;br /&gt;
 }&lt;br /&gt;
 if (apingOtherMonkey) {&lt;br /&gt;
     MOZ_ASSERT(monkey-&amp;gt;wantsAttention(),&lt;br /&gt;
                &amp;quot;why else would he be aping another monkey?&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 if (hungryForBananas &amp;amp;&amp;amp; // and a comment makes the line long enough for a linebreak&lt;br /&gt;
     wantsAttentionInTheWorstWay)&lt;br /&gt;
 {&lt;br /&gt;
     p-&amp;gt;eatBananasAndPreen();&lt;br /&gt;
 }&lt;br /&gt;
* Conditions with multi-line tests should put the brace on the new line to provide a visual separation between the condition and the body.&lt;br /&gt;
&lt;br /&gt;
   types::TypeSet* types = frame.extra(lhs).types;&lt;br /&gt;
   if (JSOp(*PC) == JSOP_SETPROP &amp;amp;&amp;amp; id == types::MakeTypeId(cx, id) &amp;amp;&amp;amp;&lt;br /&gt;
       types &amp;amp;&amp;amp; !types-&amp;gt;unknownObject() &amp;amp;&amp;amp;&lt;br /&gt;
       types-&amp;gt;getObjectCount() == 1 &amp;amp;&amp;amp;&lt;br /&gt;
       types-&amp;gt;getTypeObject(0) != NULL &amp;amp;&amp;amp;&lt;br /&gt;
       !types-&amp;gt;getTypeObject(0)-&amp;gt;unknownProperties())&lt;br /&gt;
   {&lt;br /&gt;
       JS_ASSERT(usePropCache);&lt;br /&gt;
       types::TypeObject* object = types-&amp;gt;getTypeObject(0);&lt;br /&gt;
       types::TypeSet* propertyTypes = object-&amp;gt;getProperty(cx, id, false);&lt;br /&gt;
       ...&lt;br /&gt;
   } else {&lt;br /&gt;
       ...&lt;br /&gt;
   }&lt;br /&gt;
However, if there is already a visual separation between the condition and the body, putting the { on a new line isn&#039;t necessary:&lt;br /&gt;
&lt;br /&gt;
   if (forHead-&amp;gt;pn_kid1 &amp;amp;&amp;amp; NewSrcNote2(cx, cg, SRC_DECL,&lt;br /&gt;
                                       (forHead-&amp;gt;pn_kid1-&amp;gt;isOp(JSOP_DEFVAR))&lt;br /&gt;
                                       ? SRC_DECL_VAR&lt;br /&gt;
                                       : SRC_DECL_LET) &amp;lt; 0) {&lt;br /&gt;
       return false;&lt;br /&gt;
   }&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop heads go on one line where possible; when not possible, initializer part, update, and termination parts each go on separate lines&lt;br /&gt;
 for (int i = 0;&lt;br /&gt;
      i &amp;lt; 5;&lt;br /&gt;
      i++) {                 /* bad, could all fit on one line */&lt;br /&gt;
     doStuff();&lt;br /&gt;
 }&lt;br /&gt;
 for (int i = 0; i &amp;lt; 5; i++) /* OK */&lt;br /&gt;
     doStuff();&lt;br /&gt;
 for (size_t ind = JSObject::JSSLOT_DATE_COMPONENTS_START;&lt;br /&gt;
      ind &amp;lt; JSObject::DATE_FIXED_RESERVED_SLOTS; ind++) {   /* bad */&lt;br /&gt;
     obj-&amp;gt;setSlot(ind, DoubleValue(utcTime));&lt;br /&gt;
 }&lt;br /&gt;
 for (size_t ind = JSObject::JSSLOT_DATE_COMPONENTS_START;&lt;br /&gt;
      ind &amp;lt; JSObject::DATE_FIXED_RESERVED_SLOTS;&lt;br /&gt;
      ind++) {                                               /* OK */&lt;br /&gt;
     obj-&amp;gt;setSlot(ind, DoubleValue(utcTime));&lt;br /&gt;
 }&lt;br /&gt;
* In comments, use one space, not two, between sentences and after a colon.&lt;br /&gt;
&lt;br /&gt;
= Control Flow =&lt;br /&gt;
&lt;br /&gt;
* Minimize indentation using return, break, and continue where appropriate.  Prefer return (break, continue) statements to cast out abnormal cases, instead of nesting &amp;quot;if/else&amp;quot; statements and indenting the common cases.&lt;br /&gt;
 void&lt;br /&gt;
 MyFunction(int n)&lt;br /&gt;
 {&lt;br /&gt;
     if (n) {              /* bad */&lt;br /&gt;
         ...&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 void&lt;br /&gt;
 MyFunction(int n)&lt;br /&gt;
 {&lt;br /&gt;
     if (!n)&lt;br /&gt;
         return;           /* OK */&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* If an &amp;quot;if&amp;quot; statement controls a &amp;quot;then&amp;quot; clause ending in a return statement, do not use &amp;quot;else&amp;quot; after return.&lt;br /&gt;
 if (condition) {          /* bad */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     return;&lt;br /&gt;
 } else {&lt;br /&gt;
     DoThat();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 if (condition) {          /* OK */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoThat();&lt;br /&gt;
&lt;br /&gt;
* Avoid similar arbitrary patterns and non-sequiturs:&lt;br /&gt;
 if (condition) {          /* bad */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     DoThat();&lt;br /&gt;
 } else {&lt;br /&gt;
     CleanUp();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoTheOther();&lt;br /&gt;
 if (!condition) {         /* OK */&lt;br /&gt;
     CleanUp();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoThis();&lt;br /&gt;
 DoThat();&lt;br /&gt;
 DoTheOther();&lt;br /&gt;
&lt;br /&gt;
* Avoid using &amp;amp;&amp;amp; or || to mix deciding-whether-to-do-something with error-checking.&lt;br /&gt;
&lt;br /&gt;
 if (obj-&amp;gt;hasProblems() &amp;amp;&amp;amp; !obj-&amp;gt;rectify())     /* bad */&lt;br /&gt;
     return false;&lt;br /&gt;
 &lt;br /&gt;
 if (obj-&amp;gt;hasProblems()) {                      /* OK */&lt;br /&gt;
     if (!obj-&amp;gt;rectify())&lt;br /&gt;
         return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Comments =&lt;br /&gt;
&lt;br /&gt;
* In C files, always use C style comments.  C++ comments are ok otherwise.&lt;br /&gt;
* Terminate a comment with a period (so try to make comments be complete sentences).&lt;br /&gt;
 /* This is a good comment. */&lt;br /&gt;
 // This is also a good comment.&lt;br /&gt;
* For C-style multiline comments, align with any indentation, and start every line with an asterisk. Asterisks stack in the same column. Precede the multiline comment with one empty line unless the prior line ends in a left brace. The first line of the comment contains only leading space followed by &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt;. Multiline comments should also be bracketed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (condition) {&lt;br /&gt;
    /*&lt;br /&gt;
     * This is a lengthy C-style&lt;br /&gt;
     * multiline comment.&lt;br /&gt;
     */&lt;br /&gt;
    // This is a length&lt;br /&gt;
    // C++-style comment&lt;br /&gt;
    DoYourStuff();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Entry Points and Callbacks =&lt;br /&gt;
&lt;br /&gt;
* DLL entry points have their return type expanded within a JS_PUBLIC_API() macro call, to get the right Windows secret type qualifiers in the right places for all build variants.&lt;br /&gt;
* Callback functions that might be called from a DLL are similarly macroized with JS_STATIC_DLL_CALLBACK (if the function otherwise would be static to hide its name) or JS_DLL_CALLBACK (this macro takes no type argument; it should be used after the return type and before the function name).&lt;br /&gt;
&lt;br /&gt;
= Data Types and Alignments =&lt;br /&gt;
&lt;br /&gt;
* As with all Mozilla code, SpiderMonkey needs to compile and execute correctly on many platforms, including 64-bits systems.&lt;br /&gt;
* JS and NSPR have common roots in the dawn of time (Netscape 2), and the &amp;lt;code&amp;gt;JS_THREADSAFE&amp;lt;/code&amp;gt; mode of building SpiderMonkey depends on NSPR, so reading the [http://www.mozilla.org/projects/nspr/reference/html/ NSPR documentation] is well worth your while.&lt;br /&gt;
* Not all 64-bit systems use the same integer type model: some are &amp;quot;LP64&amp;quot; (long and pointer are 64 bits, int is 32 bits), while others are &amp;quot;LLP64&amp;quot; (only long long and pointer are 64 bits; long and int are 32 bits).&lt;br /&gt;
* Use size_t for unsigned number of bytes variables, ptrdiff_t for signed pointer subtraction results.  In particular, do not use uintN, which is just shorthand for unsigned int, and so may not be big enough.&lt;br /&gt;
&lt;br /&gt;
= Header files =&lt;br /&gt;
&lt;br /&gt;
== #ifndef wrappers ==&lt;br /&gt;
&lt;br /&gt;
Use this exact form for #ifndef wrappers in header files:&lt;br /&gt;
&lt;br /&gt;
  #ifndef &amp;lt;guard&amp;gt;&lt;br /&gt;
  #define &amp;lt;guard&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  #endif // &amp;lt;guard&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GCC and clang recognize this idiom and avoid re-reading headers that use it.  Don&#039;t put any code before the #ifndef or after the #endif, and don&#039;t put anything else in the #ifndef, otherwise the optimization will be thwarted and the file will be multiply-included.  (Check with the -H option if you want to be sure.)&lt;br /&gt;
&lt;br /&gt;
Include guards should be named by determining the fully-qualified include path,&lt;br /&gt;
then substituting _ for &#039;/&#039; and &#039;.&#039; and &#039;-&#039; in it.  For example, js/src/vm/Stack-inl.h&#039;s guard is vm_Stack_inl_h_, and js/public/Vector.h&#039;s guard is js_Vector_h (because its include path is js/Vector.h).&lt;br /&gt;
&lt;br /&gt;
== #include paths ==&lt;br /&gt;
&lt;br /&gt;
All #include statements should use a fully-qualified (within SpiderMonkey) path, even if it&#039;s not necessary.  For example, this:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;vm/Stack.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
not:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;Stack.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This keeps things consistent and helps with the ordering.&lt;br /&gt;
&lt;br /&gt;
For headers in js/public/, the prefix is &amp;quot;js/&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;js/Vector.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For headers in mfbt/, the prefix is &amp;quot;mozilla/&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;mozilla/Assertions.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== #include ordering ==&lt;br /&gt;
&lt;br /&gt;
The following order is used for module X:  &lt;br /&gt;
* If X-inl.h exists, it goes first.  (And X-inl.h&#039;s first #include should be X.h.) Otherwise, X.h goes first.  This rule ensures that X.h and X-inl.h both #include all the headers that they need themselves.&lt;br /&gt;
* mozilla/*.h&lt;br /&gt;
* &amp;lt;*.h&amp;gt;&lt;br /&gt;
* js*.h&lt;br /&gt;
* */*.h (this includes the public JSAPI headers in js/public/*.h which should be included using the form js/*.h)&lt;br /&gt;
* js*inlines.h&lt;br /&gt;
* */*-inl.h.&lt;br /&gt;
&lt;br /&gt;
Keep (case-insensitive) lexicographic order with each section.&lt;br /&gt;
&lt;br /&gt;
The presence of conditionally-compiled #include statements complicates thing.  If you have a single #include statement within a #if/#ifdef/#ifndef block, placing the block in the appropriate section is straightforward.  If you have multiple #include statements within a block, use your judgment as to where the best place for it is.&lt;br /&gt;
&lt;br /&gt;
Example for X.cpp:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;X.h&amp;quot;    // put &amp;quot;X-inl.h&amp;quot; instead, if it exists&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;mozilla/HashFunctions.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;jsbar.h&amp;quot;&lt;br /&gt;
 #ifdef BAZ&lt;br /&gt;
 # include &amp;quot;jsbaz.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 #include &amp;quot;jscaz.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;ds/Baz.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;js/Bar.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;vm/Bat.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;jssqueeinlines.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;jswoot-inl.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;frontend/Thingamabob-inl.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;vm/VirtualReality-inl.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= C++ =&lt;br /&gt;
&lt;br /&gt;
== Namespaces ==&lt;br /&gt;
&lt;br /&gt;
* Public functions and types should be in the JS:: namespace, in preference to the old JS/JS_ name prefixes.&lt;br /&gt;
* Library-private and friend functions should be in the js:: namespace, in preference to the old js_ name prefix.&lt;br /&gt;
* Compile-time-evaluated functions (i.e., template meta-functions) should be in &#039;js::tl::&#039;, the &amp;quot;template library&amp;quot; namespace, to avoid collision with their runtime counterparts.&lt;br /&gt;
* In SpiderMonkey .cpp files, it is okay to have &#039;using namespace js;&#039;, but it is not okay to do the same with any other namespace, like JS:: or mozilla::. These can introduce ambiguities that come and go depending on which .cpp files the build system decides to unify.&lt;br /&gt;
* If you do have names in JS:: that should be readily available throughout SpiderMonkey, you may add a &#039;using&#039; declaration to js/src/NamespaceImports.h.&lt;br /&gt;
* Avoid unnamed namespaces unless they are necessary to give a class&#039;s members internal linkage.  Although the C++ standard officially deprecates &#039;static&#039; on  functions, &#039;static&#039; has the following advantages over unnamed namespaces:&lt;br /&gt;
** It is difficult to name functions in unnamed namespaces in gdb.&lt;br /&gt;
** Static says &amp;quot;this is a translation-unit-local helper function&amp;quot; on the function, without having to look around for an enclosing &amp;quot;namespace {&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Enums ==&lt;br /&gt;
&lt;br /&gt;
Older code uses SHOUT_REALLY_LOUD for enum values, newer code uses InterCaps. Enums should be preferred to boolean arguments for ease of understanding at the invocation site.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
&lt;br /&gt;
* For reasonable-sized classes, put all the fields together, at the top, immediately after any necessary typedefs. For unreasonably large classes, do whatever seems best (but let&#039;s try to avoid making more of these).&lt;br /&gt;
* Align the braces of a class/struct/enum definition like this:&lt;br /&gt;
 class JSObject&lt;br /&gt;
 {&lt;br /&gt;
      ...&lt;br /&gt;
 };&lt;br /&gt;
* Member variable names, private or public, should be decorated with a trailing &#039;_&#039;.&lt;br /&gt;
 class Fail&lt;br /&gt;
 {&lt;br /&gt;
     size_t capacity;  // common&lt;br /&gt;
     T* begin_;        // better, gravitate toward this&lt;br /&gt;
 };&lt;br /&gt;
Sometimes a canonical argument name may conflict with a member name.  In this case, one can disambiguate with &amp;quot;this-&amp;gt;&amp;quot;, although such explicit qualification should only be added when necessary:&lt;br /&gt;
 class C&lt;br /&gt;
 {&lt;br /&gt;
   public:&lt;br /&gt;
     size_t count;&lt;br /&gt;
     bool fresh;&lt;br /&gt;
     void change(size_t count) {&lt;br /&gt;
         this-&amp;gt;count = count;&lt;br /&gt;
         this-&amp;gt;fresh = false;  // verbose and unnecessary&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
* Prefer inline functions to macros.&lt;br /&gt;
* We build with C++ exceptions disabled, so most of the &amp;lt;code&amp;gt;std&amp;lt;/code&amp;gt; namespace is off-limits, including STL containers. The exception is &amp;lt;code&amp;gt;&amp;amp;lt;algorithm&amp;amp;gt;&amp;lt;/code&amp;gt;, which is mostly OK to use. You can use MFBT. We have some STL-like containers that are used basically everywhere (see js::Vector, js::HashMap, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Initializer lists ===&lt;br /&gt;
&lt;br /&gt;
Initializer lists can break in one of two ways. The first may be preferable when constructors take few arguments:&lt;br /&gt;
&lt;br /&gt;
 class Ninja : public WeaponWeilder, public Camouflagible,&lt;br /&gt;
               public Assassinatable, public ShapeShiftable&lt;br /&gt;
 {&lt;br /&gt;
     Ninja() : WeaponWeilder(Weapons::SHURIKEN),&lt;br /&gt;
               Camouflagible(Garments::SHINOBI_SHOZOKU),&lt;br /&gt;
               Assassinatable(AssassinationDifficulty::HIGHLY_DIFFICULT),&lt;br /&gt;
               ShapeShiftable(MPCost(512)) {}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The other permitted style mitigates longer-identifiers-squishing-text-against-the-right-side-of-the-screen-syndrome by using a half-indented colon:&lt;br /&gt;
&lt;br /&gt;
 class Ninja&lt;br /&gt;
   : public WeaponWeilder, public Camouflagible, public Assassinatable,&lt;br /&gt;
     public ShapeShiftable&lt;br /&gt;
 {&lt;br /&gt;
     Ninja()&lt;br /&gt;
       : WeaponWeilder(Weapons::SHURIKEN),&lt;br /&gt;
         Camouflagible(Garments::SHINOBI_SHOZOKU),&lt;br /&gt;
         Assassinatable(AssassinationDifficulty::HIGHLY_DIFFICULT),&lt;br /&gt;
         ShapeShiftable(MPCost(512)) {}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Inline methods ===&lt;br /&gt;
&lt;br /&gt;
If the method in question fits on one line and is branch free, do a one liner:&lt;br /&gt;
&lt;br /&gt;
 class Eater&lt;br /&gt;
 {&lt;br /&gt;
     void eat(Eaten &amp;amp;other) { other.setConsumed(); }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
If it&#039;s too long, put the type, declarator including formals (unless they overflow), and left brace all on the first line:&lt;br /&gt;
&lt;br /&gt;
 class Eater&lt;br /&gt;
 {&lt;br /&gt;
     Food* obtainFoodFromEatery(Eatery &amp;amp;eatery) {&lt;br /&gt;
         if (!eatery.hasFood())&lt;br /&gt;
             return NULL;&lt;br /&gt;
         return eatery.purchaseFood();&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
For out-of-line inlines (when the definitions are too unwieldy to place in the class definition) use the inline keyword as an indicator that there&#039;s an out-of-line inline definition:&lt;br /&gt;
&lt;br /&gt;
 class SpaceGoo&lt;br /&gt;
 {&lt;br /&gt;
     inline BlobbyWrapper* enblob(Entity &amp;amp;other);&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 inline BlobbyWrapper*&lt;br /&gt;
 SpaceGoo::enblob(Entity &amp;amp;other)&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en/Mozilla_Coding_Style_Guide Mozilla&#039;s coding style guide].&lt;br /&gt;
* [http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml Google&#039;s C++ coding style guide].&lt;br /&gt;
&lt;br /&gt;
= Exceptions to this coding style =&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey contains some code imported from other projects, e.g. ctypes/libffi/, that is minimally modified.  Such code does not have to follow SpiderMonkey style.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Directories&amp;diff=1186675</id>
		<title>JavaScript:SpiderMonkey:Directories</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Directories&amp;diff=1186675"/>
		<updated>2018-01-12T16:15:44Z</updated>

		<summary type="html">&lt;p&gt;Jorend: spelling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how we want to organize the SpiderMonkey source code, in subdirectories under js/src.&lt;br /&gt;
&lt;br /&gt;
The reason we have this document is that currently it&#039;s not organized this way. It&#039;s a bit of a mess just now.&lt;br /&gt;
&lt;br /&gt;
=== Directories under js/src ===&lt;br /&gt;
&lt;br /&gt;
The directories under js/src should be like this:&lt;br /&gt;
&lt;br /&gt;
*   gc - Heap allocation and garbage collection.&lt;br /&gt;
&lt;br /&gt;
*   vm - JS value representation and code execution. Files that definitely belong there:&lt;br /&gt;
&lt;br /&gt;
        Stack.*, Script.*, Interpreter.*, Opcodes.h, PIC.*&lt;br /&gt;
        String.*, Symbol.*, Atom.*, Value.cpp, Id.cpp&lt;br /&gt;
        Shape.*, Object.*, ShapedObject.*, NativeObject.*, Shape.*, ObjectGroup.*, TypeInference.*&lt;br /&gt;
        Context.*, Runtime.*, Realm.*, GlobalObject.*&lt;br /&gt;
&lt;br /&gt;
    The directory will also hold a bunch of stuff that is not so &amp;quot;core&amp;quot; but still mainly vm-related, like UbiNode.cpp, SelfHosting.*, TemplateRegistry.h, Xdr.*, maybe StructuredClone.*&lt;br /&gt;
&lt;br /&gt;
*   builtin - JS-facing stuff. Lots of JSNatives and Classes; self-hosted code. Ideally, each file in here is fairly peripheral to the core business of the JS engine, but it will remain common for the JITs to need to see JSNative function pointers, and for builtins to need access to non-public GC primitives, etc. etc.&lt;br /&gt;
&lt;br /&gt;
*   jit - The JITs.&lt;br /&gt;
&lt;br /&gt;
*   frontend - Compiling JS code to bytecode.&lt;br /&gt;
&lt;br /&gt;
*   ds - Data structures.&lt;br /&gt;
&lt;br /&gt;
*   shell - The repl.&lt;br /&gt;
&lt;br /&gt;
*   editline, perf, vtune - It&#039;s OK that we have extra directories for these bits and pieces.&lt;br /&gt;
&lt;br /&gt;
*   irregexp - Vendored libraries are OK too.&lt;br /&gt;
&lt;br /&gt;
*   util - New junk-drawer directory, read on for rationale.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Focusing the vm directory on VM stuff ===&lt;br /&gt;
&lt;br /&gt;
There&#039;s a lot of great stuff in js/src/vm, like JSONPrinter.h and Time.h, that is VM-related in no way whatsoever. It seems we have already decided to have a util directory; maybe then we should call it js/src/util and reserve js/src/vm for the actual VM.&lt;br /&gt;
&lt;br /&gt;
We should move most of the Object subclasses out of vm. There&#039;s a spectrum of how silly it is to have them in there:&lt;br /&gt;
&lt;br /&gt;
Very Silly Indeed&lt;br /&gt;
* DateObject -&amp;gt; builtin/, times a million&lt;br /&gt;
* RegExpObject -&amp;gt; builtin/&lt;br /&gt;
&lt;br /&gt;
On Consideration, Pretty Silly&lt;br /&gt;
* BooleanObject, NumberObject, StringObject -&amp;gt; builtin/&lt;br /&gt;
* ErrorObject -&amp;gt; builtin/&lt;br /&gt;
&lt;br /&gt;
Not Quite So Silly&lt;br /&gt;
* ArrayObject, TypedArrayObject, SharedArrayObject: We would love to move this to builtin/ eventually. I&#039;m not sure we&#039;re ready. Certainly there is no clear abstraction boundary.&lt;br /&gt;
* Function, AsyncFunction: The same. (I moved Function in here myself in this patch stack...)&lt;br /&gt;
&lt;br /&gt;
Barely Silly&lt;br /&gt;
* ArgumentsObject and GlobalObject: Very tied to the interpreter; we can leave them in vm.&lt;br /&gt;
* EnvironmentObject: Even more so.&lt;br /&gt;
&lt;br /&gt;
Everything with JSPropertySpecs would ideally live in js/src/builtin.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Directories&amp;diff=1186674</id>
		<title>JavaScript:SpiderMonkey:Directories</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Directories&amp;diff=1186674"/>
		<updated>2018-01-12T16:15:03Z</updated>

		<summary type="html">&lt;p&gt;Jorend: fmt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how we want to organize the SpiderMonkey source code, in subdirectories under js/src.&lt;br /&gt;
&lt;br /&gt;
The reason we have this document is that currently it&#039;s not organized this way. It&#039;s a bit of a mess just now.&lt;br /&gt;
&lt;br /&gt;
=== Directories under js/src ===&lt;br /&gt;
&lt;br /&gt;
The directories under js/src should be like this:&lt;br /&gt;
&lt;br /&gt;
*   gc - Heap allocation and garbage collection.&lt;br /&gt;
&lt;br /&gt;
*   vm - JS value representation and code execution. Files that definitely belong there:&lt;br /&gt;
&lt;br /&gt;
        Stack.*, Script.*, Interpreter.*, Opcodes.h, PIC.*&lt;br /&gt;
        String.*, Symbol.*, Atom.*, Value.cpp, Id.cpp&lt;br /&gt;
        Shape.*, Object.*, ShapedObject.*, NativeObject.*, Shape.*, ObjectGroup.*, TypeInference.*&lt;br /&gt;
        Context.*, Runtime.*, Realm.*, GlobalObject.*&lt;br /&gt;
&lt;br /&gt;
    The directory will also hold a bunch of stuff that is not so &amp;quot;core&amp;quot; but still mainly vm-related, like UbiNode.cpp, SelfHosting.*, TemplateRegistry.h, Xdr.*, maybe StructuredClone.*&lt;br /&gt;
&lt;br /&gt;
*   builtin - JS-facing stuff. Lots of JSNatives and Classes; self-hosted code. Ideally, each file in here is fairly peripheral to the core business of the JS engine, but it will remain common for the JITs to need to see JSNative function pointers, and for builtins to need access to non-public GC primitives, etc. etc.&lt;br /&gt;
&lt;br /&gt;
*   jit - The JITs.&lt;br /&gt;
&lt;br /&gt;
*   frontend - Compiling JS code to bytecode.&lt;br /&gt;
&lt;br /&gt;
*   ds - Data structures.&lt;br /&gt;
&lt;br /&gt;
*   shell - The repl.&lt;br /&gt;
&lt;br /&gt;
*   editline, perf, vtune - It&#039;s OK that we have extra directories for these bits and pieces.&lt;br /&gt;
&lt;br /&gt;
*   irregexp - Vendored libraries are OK too.&lt;br /&gt;
&lt;br /&gt;
*   util - New junk-drawer directory, read on for rationale.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Focusing the vm directory on VM stuff ===&lt;br /&gt;
&lt;br /&gt;
There&#039;s a lot of great stuff in js/src/vm, like JSONPrinter.h and Time.h, that is VM-related in no way whatsoever. It seems we have already decided to have a util directory; maybe then we should call it js/src/util and reserve js/src/vm for the actual VM.&lt;br /&gt;
&lt;br /&gt;
We should move most of the Object subclasses out of vm. There&#039;s a spectrum of how silly it is to have them in there:&lt;br /&gt;
&lt;br /&gt;
Very Silly Indeed&lt;br /&gt;
* DateObject -&amp;gt; builtin/, times a million&lt;br /&gt;
* RegExpObject -&amp;gt; builtin/&lt;br /&gt;
&lt;br /&gt;
On Consideration, Pretty Silly&lt;br /&gt;
* BooleanObject, NumberObject, StringObject -&amp;gt; builtin/&lt;br /&gt;
* ErrorObject -&amp;gt; builtin/&lt;br /&gt;
&lt;br /&gt;
Not Quite So Silly&lt;br /&gt;
* ArrayObject, TypedArrayObject, SharedArrayObject: We would love to move this to builtin/ eventually. I&#039;m not sure we&#039;re ready. Certainly there is no clear abstraction boundary.&lt;br /&gt;
* Function, AsyncFunction: The same. (I moved Function in here myself in this patch stack...)&lt;br /&gt;
&lt;br /&gt;
Barely Silly&lt;br /&gt;
* ArgumentsObject and Global object: Very tied to the interpreter; we can leave them in vm.&lt;br /&gt;
* EnvironmentObject: Even more so.&lt;br /&gt;
&lt;br /&gt;
Everything with JSPropertySpecs would ideally live in js/src/builtin.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Directories&amp;diff=1186673</id>
		<title>JavaScript:SpiderMonkey:Directories</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Directories&amp;diff=1186673"/>
		<updated>2018-01-12T16:14:07Z</updated>

		<summary type="html">&lt;p&gt;Jorend: Created page with &amp;quot;This page describes how we want to organize the SpiderMonkey source code, in subdirectories under js/src.  The reason we have this document is that currently it&amp;#039;s not organize...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how we want to organize the SpiderMonkey source code, in subdirectories under js/src.&lt;br /&gt;
&lt;br /&gt;
The reason we have this document is that currently it&#039;s not organized this way. It&#039;s a bit of a mess just now.&lt;br /&gt;
&lt;br /&gt;
## Long-term goal&lt;br /&gt;
&lt;br /&gt;
The directories under js/src should be like this:&lt;br /&gt;
&lt;br /&gt;
*   gc - Heap allocation and garbage collection.&lt;br /&gt;
&lt;br /&gt;
*   vm - JS value representation and code execution. Files that definitely belong there:&lt;br /&gt;
&lt;br /&gt;
        Stack.*, Script.*, Interpreter.*, Opcodes.h, PIC.*&lt;br /&gt;
        String.*, Symbol.*, Atom.*, Value.cpp, Id.cpp&lt;br /&gt;
        Shape.*, Object.*, ShapedObject.*, NativeObject.*, Shape.*, ObjectGroup.*, TypeInference.*&lt;br /&gt;
        Context.*, Runtime.*, Realm.*, GlobalObject.*&lt;br /&gt;
&lt;br /&gt;
    The directory will also hold a bunch of stuff that is not so &amp;quot;core&amp;quot; but still mainly vm-related, like UbiNode.cpp, SelfHosting.*, TemplateRegistry.h, Xdr.*, maybe StructuredClone.*&lt;br /&gt;
&lt;br /&gt;
*   builtin - JS-facing stuff. Lots of JSNatives and Classes; self-hosted code. Ideally, each file in here is fairly peripheral to the core business of the JS engine, but it will remain common for the JITs to need to see JSNative function pointers, and for builtins to need access to non-public GC primitives, etc. etc.&lt;br /&gt;
&lt;br /&gt;
*   jit - The JITs.&lt;br /&gt;
&lt;br /&gt;
*   frontend - Compiling JS code to bytecode.&lt;br /&gt;
&lt;br /&gt;
*   ds - Data structures.&lt;br /&gt;
&lt;br /&gt;
*   shell - The repl.&lt;br /&gt;
&lt;br /&gt;
*   editline, perf, vtune - It&#039;s OK that we have extra directories for these bits and pieces.&lt;br /&gt;
&lt;br /&gt;
*   irregexp - Vendored libraries are OK too.&lt;br /&gt;
&lt;br /&gt;
*   util - New junk-drawer directory, read on for rationale.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## Focusing the vm directory on VM stuff&lt;br /&gt;
&lt;br /&gt;
There&#039;s a lot of great stuff in js/src/vm, like JSONPrinter.h and Time.h, that is VM-related in no way whatsoever. It seems we have already decided to have a util directory; maybe then we should call it js/src/util and reserve js/src/vm for the actual VM.&lt;br /&gt;
&lt;br /&gt;
We should move most of the Object subclasses out of vm. There&#039;s a spectrum of how silly it is to have them in there:&lt;br /&gt;
&lt;br /&gt;
Very Silly Indeed&lt;br /&gt;
* DateObject -&amp;gt; builtin/, times a million&lt;br /&gt;
* RegExpObject -&amp;gt; builtin/&lt;br /&gt;
&lt;br /&gt;
On Consideration, Pretty Silly&lt;br /&gt;
* BooleanObject, NumberObject, StringObject -&amp;gt; builtin/&lt;br /&gt;
* ErrorObject -&amp;gt; builtin/&lt;br /&gt;
&lt;br /&gt;
Not Quite So Silly&lt;br /&gt;
* ArrayObject, TypedArrayObject, SharedArrayObject: We would love to move this to builtin/ eventually. I&#039;m not sure we&#039;re ready. Certainly there is no clear abstraction boundary.&lt;br /&gt;
* Function, AsyncFunction: The same. (I moved Function in here myself in this patch stack...)&lt;br /&gt;
&lt;br /&gt;
Barely Silly&lt;br /&gt;
* ArgumentsObject and Global object: Very tied to the interpreter; we can leave them in vm.&lt;br /&gt;
* EnvironmentObject: Even more so.&lt;br /&gt;
&lt;br /&gt;
Everything with JSPropertySpecs would ideally live in js/src/builtin.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Coding_Style&amp;diff=1181579</id>
		<title>JavaScript:SpiderMonkey:Coding Style</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Coding_Style&amp;diff=1181579"/>
		<updated>2017-10-02T15:07:54Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Classes */ tweaks to code samples, for verisimilitude&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Functions =&lt;br /&gt;
&lt;br /&gt;
* Public function names begin with JS_ followed by capitalized &amp;quot;intercaps&amp;quot;, e.g. JS_NewObject.&lt;br /&gt;
* Extern but library-private function names use a js_ prefix and mixed case, e.g. js_SearchScope.&lt;br /&gt;
* Most static function names have unprefixed, mixed-case names: GetChar.&lt;br /&gt;
* But static native methods of JS objects have lowercase, underscore-separated or intercaps names, e.g., str_indexOf.&lt;br /&gt;
* Function return types are on a separate line preceding the function name.&lt;br /&gt;
* Function braces go on the line following the function name.&lt;br /&gt;
 void DoThis()           /* bad */&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
 void&lt;br /&gt;
 DoThis()                /* OK */&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Other Symbols =&lt;br /&gt;
&lt;br /&gt;
* Library-private and static data use underscores, not intercaps (but library-private data do use a js_ prefix).&lt;br /&gt;
* Scalar type names are lowercase and js-prefixed: jsdouble.&lt;br /&gt;
* Aggregate type names are JS-prefixed and mixed-case: JSObject.&lt;br /&gt;
* Macros are generally ALL_CAPS and underscored, to call out potential side effects, multiple uses of a formal argument, etc.  Line continuation characters should all line up, in column 79 if that exceeds the width of all the macro text.  Macro parameters should be of the form name_ (instead of something like __name).&lt;br /&gt;
&lt;br /&gt;
= Indentation =&lt;br /&gt;
&lt;br /&gt;
* Use spaces, not tabs.  There should be no tabs in source files.&lt;br /&gt;
* Four spaces of indentation per statement nesting level.&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;case L:&amp;lt;/code&amp;gt;&amp;quot; labels in &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; statements count as half of a nesting level, so indent two spaces, with the labeled statements indenting two more for a standard four spaces indentation from &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; to a case-controlled statement.&lt;br /&gt;
 switch (discriminant) {&lt;br /&gt;
   case L1:&lt;br /&gt;
     DoSomething();&lt;br /&gt;
   . . .&lt;br /&gt;
 }&lt;br /&gt;
* Function arguments that overflow the first line of the call expression should be aligned to underhang the first argument (to start in overflow lines in the column after the opening parenthesis).&lt;br /&gt;
 JS_SetContext(rt,         /* bad */&lt;br /&gt;
              cx);&lt;br /&gt;
 JS_SetContext(rt,         /* OK */&lt;br /&gt;
               cx);&lt;br /&gt;
&lt;br /&gt;
= Whitespace in declarations =&lt;br /&gt;
&lt;br /&gt;
These rules are inconsistently applied.  Be consistent with the code you&#039;re editing rather than adhere too closely to these guidelines!&lt;br /&gt;
&lt;br /&gt;
* In a declaration of a pointer, the &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; goes with the type:&lt;br /&gt;
 char *s;                  /* bad */&lt;br /&gt;
 char* s;                  /* OK */&lt;br /&gt;
* In C++ method declarations with default arguments, use spaces and comments like so:&lt;br /&gt;
 static void&lt;br /&gt;
 Frob(JSContext* cx, uint32_t defaultValue = 0);&lt;br /&gt;
 static void&lt;br /&gt;
 Frob(JSContext* cx, uint32_t defaultValue /* = 0 */)&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Other whitespace =&lt;br /&gt;
&lt;br /&gt;
* Code should fit within 99 columns; comments should fit within 80 columns; both figures include indentation. Break down lines that are too long by splitting after a binary operator.&lt;br /&gt;
* Exception: in a &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; statement where each case is a trivially-short statement, it&#039;s ok to put the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt;, the statement, and the &amp;lt;code&amp;gt;break;&amp;lt;/code&amp;gt; all on one line.&lt;br /&gt;
* Comment &amp;lt;code&amp;gt;/* FALL THROUGH */&amp;lt;/code&amp;gt; in place of missing &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; when intentionally falling through from one case-controlled statement sequence into another, or into the &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; statements.&lt;br /&gt;
* Do not use spaces between a function name and its arguments list, or between an array name and the square bracket. Also, do no use spaces after a bracket. Use a space after a comma to separate arguments.&lt;br /&gt;
 JS_SetContext ( rt, cx ); /* bad */&lt;br /&gt;
 JS_SetContext(rt, cx);    /* OK */&lt;br /&gt;
* Use a space between a C keyword and parentheses.&lt;br /&gt;
 if(condition)             /* bad */&lt;br /&gt;
 if (condition)            /* OK */&lt;br /&gt;
* In a conditional, if the condition and consequent (and, if present, any number of &amp;lt;code&amp;gt;else if&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt; alternatives and associated conditions) occupy single lines, no braces are used.&lt;br /&gt;
 if (today == &amp;quot;Tuesday&amp;quot;)&lt;br /&gt;
     puts(&amp;quot;I don&#039;t have my wallet on me.&amp;quot;);&lt;br /&gt;
 else&lt;br /&gt;
     puts(&amp;quot;I would gladly pay you on Tuesday for a hamburger today.&amp;quot;);&lt;br /&gt;
However, if &#039;&#039;any&#039;&#039; condition occupies multiple lines, or if a consequent or alternative occupies multiple lines (regardless whether it&#039;s a single statement or multiple statements), every consequent and alternative is braced.&lt;br /&gt;
 if (canSwingFromWeb) {&lt;br /&gt;
     p-&amp;gt;swingFromWeb();&lt;br /&gt;
 } else {&lt;br /&gt;
     MOZ_ASSERT(p-&amp;gt;isSpiderPig());&lt;br /&gt;
     p-&amp;gt;doWhateverSpiderPigDoes();&lt;br /&gt;
 }&lt;br /&gt;
 if (apingOtherMonkey) {&lt;br /&gt;
     MOZ_ASSERT(monkey-&amp;gt;wantsAttention(),&lt;br /&gt;
                &amp;quot;why else would he be aping another monkey?&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 if (hungryForBananas &amp;amp;&amp;amp; // and a comment makes the line long enough for a linebreak&lt;br /&gt;
     wantsAttentionInTheWorstWay)&lt;br /&gt;
 {&lt;br /&gt;
     p-&amp;gt;eatBananasAndPreen();&lt;br /&gt;
 }&lt;br /&gt;
* Conditions with multi-line tests should put the brace on the new line to provide a visual separation between the condition and the body.&lt;br /&gt;
&lt;br /&gt;
   types::TypeSet* types = frame.extra(lhs).types;&lt;br /&gt;
   if (JSOp(*PC) == JSOP_SETPROP &amp;amp;&amp;amp; id == types::MakeTypeId(cx, id) &amp;amp;&amp;amp;&lt;br /&gt;
       types &amp;amp;&amp;amp; !types-&amp;gt;unknownObject() &amp;amp;&amp;amp;&lt;br /&gt;
       types-&amp;gt;getObjectCount() == 1 &amp;amp;&amp;amp;&lt;br /&gt;
       types-&amp;gt;getTypeObject(0) != NULL &amp;amp;&amp;amp;&lt;br /&gt;
       !types-&amp;gt;getTypeObject(0)-&amp;gt;unknownProperties())&lt;br /&gt;
   {&lt;br /&gt;
       JS_ASSERT(usePropCache);&lt;br /&gt;
       types::TypeObject* object = types-&amp;gt;getTypeObject(0);&lt;br /&gt;
       types::TypeSet* propertyTypes = object-&amp;gt;getProperty(cx, id, false);&lt;br /&gt;
       ...&lt;br /&gt;
   } else {&lt;br /&gt;
       ...&lt;br /&gt;
   }&lt;br /&gt;
However, if there is already a visual separation between the condition and the body, putting the { on a new line isn&#039;t necessary:&lt;br /&gt;
&lt;br /&gt;
   if (forHead-&amp;gt;pn_kid1 &amp;amp;&amp;amp; NewSrcNote2(cx, cg, SRC_DECL,&lt;br /&gt;
                                       (forHead-&amp;gt;pn_kid1-&amp;gt;isOp(JSOP_DEFVAR))&lt;br /&gt;
                                       ? SRC_DECL_VAR&lt;br /&gt;
                                       : SRC_DECL_LET) &amp;lt; 0) {&lt;br /&gt;
       return false;&lt;br /&gt;
   }&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop heads go on one line where possible; when not possible, initializer part, update, and termination parts each go on separate lines&lt;br /&gt;
 for (int i = 0;&lt;br /&gt;
      i &amp;lt; 5;&lt;br /&gt;
      i++) {                 /* bad, could all fit on one line */&lt;br /&gt;
     doStuff();&lt;br /&gt;
 }&lt;br /&gt;
 for (int i = 0; i &amp;lt; 5; i++) /* OK */&lt;br /&gt;
     doStuff();&lt;br /&gt;
 for (size_t ind = JSObject::JSSLOT_DATE_COMPONENTS_START;&lt;br /&gt;
      ind &amp;lt; JSObject::DATE_FIXED_RESERVED_SLOTS; ind++) {   /* bad */&lt;br /&gt;
     obj-&amp;gt;setSlot(ind, DoubleValue(utcTime));&lt;br /&gt;
 }&lt;br /&gt;
 for (size_t ind = JSObject::JSSLOT_DATE_COMPONENTS_START;&lt;br /&gt;
      ind &amp;lt; JSObject::DATE_FIXED_RESERVED_SLOTS;&lt;br /&gt;
      ind++) {                                               /* OK */&lt;br /&gt;
     obj-&amp;gt;setSlot(ind, DoubleValue(utcTime));&lt;br /&gt;
 }&lt;br /&gt;
* In comments, use one space, not two, between sentences and after a colon.&lt;br /&gt;
&lt;br /&gt;
= Control Flow =&lt;br /&gt;
&lt;br /&gt;
* Minimize indentation using return, break, and continue where appropriate.  Prefer return (break, continue) statements to cast out abnormal cases, instead of nesting &amp;quot;if/else&amp;quot; statements and indenting the common cases.&lt;br /&gt;
 void&lt;br /&gt;
 MyFunction(int n)&lt;br /&gt;
 {&lt;br /&gt;
     if (n) {              /* bad */&lt;br /&gt;
         ...&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 void&lt;br /&gt;
 MyFunction(int n)&lt;br /&gt;
 {&lt;br /&gt;
     if (!n)&lt;br /&gt;
         return;           /* OK */&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* If an &amp;quot;if&amp;quot; statement controls a &amp;quot;then&amp;quot; clause ending in a return statement, do not use &amp;quot;else&amp;quot; after return.&lt;br /&gt;
 if (condition) {          /* bad */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     return;&lt;br /&gt;
 } else {&lt;br /&gt;
     DoThat();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 if (condition) {          /* OK */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoThat();&lt;br /&gt;
&lt;br /&gt;
* Avoid similar arbitrary patterns and non-sequiturs:&lt;br /&gt;
 if (condition) {          /* bad */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     DoThat();&lt;br /&gt;
 } else {&lt;br /&gt;
     CleanUp();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoTheOther();&lt;br /&gt;
 if (!condition) {         /* OK */&lt;br /&gt;
     CleanUp();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoThis();&lt;br /&gt;
 DoThat();&lt;br /&gt;
 DoTheOther();&lt;br /&gt;
&lt;br /&gt;
* Avoid using &amp;amp;&amp;amp; or || to mix deciding-whether-to-do-something with error-checking.&lt;br /&gt;
&lt;br /&gt;
 if (obj-&amp;gt;hasProblems() &amp;amp;&amp;amp; !obj-&amp;gt;rectify())     /* bad */&lt;br /&gt;
     return false;&lt;br /&gt;
 &lt;br /&gt;
 if (obj-&amp;gt;hasProblems()) {                      /* OK */&lt;br /&gt;
     if (!obj-&amp;gt;rectify())&lt;br /&gt;
         return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Comments =&lt;br /&gt;
&lt;br /&gt;
* In C files, always use C style comments.  C++ comments are ok otherwise.&lt;br /&gt;
* Terminate a comment with a period (so try to make comments be complete sentences).&lt;br /&gt;
 /* This is a good comment. */&lt;br /&gt;
 // This is also a good comment.&lt;br /&gt;
* For C-style multiline comments, align with any indentation, and start every line with an asterisk. Asterisks stack in the same column. Precede the multiline comment with one empty line unless the prior line ends in a left brace. The first line of the comment contains only leading space followed by &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt;. Multiline comments should also be bracketed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (condition) {&lt;br /&gt;
    /*&lt;br /&gt;
     * This is a lengthy C-style&lt;br /&gt;
     * multiline comment.&lt;br /&gt;
     */&lt;br /&gt;
    // This is a length&lt;br /&gt;
    // C++-style comment&lt;br /&gt;
    DoYourStuff();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Entry Points and Callbacks =&lt;br /&gt;
&lt;br /&gt;
* DLL entry points have their return type expanded within a JS_PUBLIC_API() macro call, to get the right Windows secret type qualifiers in the right places for all build variants.&lt;br /&gt;
* Callback functions that might be called from a DLL are similarly macroized with JS_STATIC_DLL_CALLBACK (if the function otherwise would be static to hide its name) or JS_DLL_CALLBACK (this macro takes no type argument; it should be used after the return type and before the function name).&lt;br /&gt;
&lt;br /&gt;
= Data Types and Alignments =&lt;br /&gt;
&lt;br /&gt;
* As with all Mozilla code, SpiderMonkey needs to compile and execute correctly on many platforms, including 64-bits systems.&lt;br /&gt;
* JS and NSPR have common roots in the dawn of time (Netscape 2), and the &amp;lt;code&amp;gt;JS_THREADSAFE&amp;lt;/code&amp;gt; mode of building SpiderMonkey depends on NSPR, so reading the [http://www.mozilla.org/projects/nspr/reference/html/ NSPR documentation] is well worth your while.&lt;br /&gt;
* Not all 64-bit systems use the same integer type model: some are &amp;quot;LP64&amp;quot; (long and pointer are 64 bits, int is 32 bits), while others are &amp;quot;LLP64&amp;quot; (only long long and pointer are 64 bits; long and int are 32 bits).&lt;br /&gt;
* Use size_t for unsigned number of bytes variables, ptrdiff_t for signed pointer subtraction results.  In particular, do not use uintN, which is just shorthand for unsigned int, and so may not be big enough.&lt;br /&gt;
&lt;br /&gt;
= Header files =&lt;br /&gt;
&lt;br /&gt;
== #ifndef wrappers ==&lt;br /&gt;
&lt;br /&gt;
Use this exact form for #ifndef wrappers in header files:&lt;br /&gt;
&lt;br /&gt;
  #ifndef &amp;lt;guard&amp;gt;&lt;br /&gt;
  #define &amp;lt;guard&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  #endif // &amp;lt;guard&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GCC and clang recognize this idiom and avoid re-reading headers that use it.  Don&#039;t put any code before the #ifndef or after the #endif, and don&#039;t put anything else in the #ifndef, otherwise the optimization will be thwarted and the file will be multiply-included.  (Check with the -H option if you want to be sure.)&lt;br /&gt;
&lt;br /&gt;
Include guards should be named by determining the fully-qualified include path,&lt;br /&gt;
then substituting _ for &#039;/&#039; and &#039;.&#039; and &#039;-&#039; in it.  For example, js/src/vm/Stack-inl.h&#039;s guard is vm_Stack_inl_h_, and js/public/Vector.h&#039;s guard is js_Vector_h (because its include path is js/Vector.h).&lt;br /&gt;
&lt;br /&gt;
== #include paths ==&lt;br /&gt;
&lt;br /&gt;
All #include statements should use a fully-qualified (within SpiderMonkey) path, even if it&#039;s not necessary.  For example, this:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;vm/Stack.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
not:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;Stack.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This keeps things consistent and helps with the ordering.&lt;br /&gt;
&lt;br /&gt;
For headers in js/public/, the prefix is &amp;quot;js/&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;js/Vector.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For headers in mfbt/, the prefix is &amp;quot;mozilla/&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;mozilla/Assertions.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== #include ordering ==&lt;br /&gt;
&lt;br /&gt;
The following order is used for module X:  &lt;br /&gt;
* If X-inl.h exists, it goes first.  (And X-inl.h&#039;s first #include should be X.h.) Otherwise, X.h goes first.  This rule ensures that X.h and X-inl.h both #include all the headers that they need themselves.&lt;br /&gt;
* mozilla/*.h&lt;br /&gt;
* &amp;lt;*.h&amp;gt;&lt;br /&gt;
* js*.h&lt;br /&gt;
* */*.h (this includes the public JSAPI headers in js/public/*.h which should be included using the form js/*.h)&lt;br /&gt;
* js*inlines.h&lt;br /&gt;
* */*-inl.h.&lt;br /&gt;
&lt;br /&gt;
Keep (case-insensitive) lexicographic order with each section.&lt;br /&gt;
&lt;br /&gt;
The presence of conditionally-compiled #include statements complicates thing.  If you have a single #include statement within a #if/#ifdef/#ifndef block, placing the block in the appropriate section is straightforward.  If you have multiple #include statements within a block, use your judgment as to where the best place for it is.&lt;br /&gt;
&lt;br /&gt;
Example for X.cpp:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;X.h&amp;quot;    // put &amp;quot;X-inl.h&amp;quot; instead, if it exists&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;mozilla/HashFunctions.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;jsbar.h&amp;quot;&lt;br /&gt;
 #ifdef BAZ&lt;br /&gt;
 # include &amp;quot;jsbaz.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 #include &amp;quot;jscaz.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;ds/Baz.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;js/Bar.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;vm/Bat.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;jssqueeinlines.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;jswoot-inl.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;frontend/Thingamabob-inl.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;vm/VirtualReality-inl.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= C++ =&lt;br /&gt;
&lt;br /&gt;
== Namespaces ==&lt;br /&gt;
&lt;br /&gt;
* Public functions and types should be in the JS:: namespace, in preference to the old JS/JS_ name prefixes.&lt;br /&gt;
* Library-private and friend functions should be in the js:: namespace, in preference to the old js_ name prefix.&lt;br /&gt;
* Compile-time-evaluated functions (i.e., template meta-functions) should be in &#039;js::tl::&#039;, the &amp;quot;template library&amp;quot; namespace, to avoid collision with their runtime counterparts.&lt;br /&gt;
* In SpiderMonkey .cpp files, it is okay to have &#039;using namespace js;&#039;, but it is not okay to do the same with any other namespace, like JS:: or mozilla::. These can introduce ambiguities that come and go depending on which .cpp files the build system decides to unify.&lt;br /&gt;
* If you do have names in JS:: that should be readily available throughout SpiderMonkey, you may add a &#039;using&#039; declaration to js/src/NamespaceImports.h.&lt;br /&gt;
* Avoid unnamed namespaces unless they are necessary to give a class&#039;s members internal linkage.  Although the C++ standard officially deprecates &#039;static&#039; on  functions, &#039;static&#039; has the following advantages over unnamed namespaces:&lt;br /&gt;
** It is difficult to name functions in unnamed namespaces in gdb.&lt;br /&gt;
** Static says &amp;quot;this is a translation-unit-local helper function&amp;quot; on the function, without having to look around for an enclosing &amp;quot;namespace {&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Enums ==&lt;br /&gt;
&lt;br /&gt;
Older code uses SHOUT_REALLY_LOUD for enum values, newer code uses InterCaps. Enums should be preferred to boolean arguments for ease of understanding at the invocation site.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
&lt;br /&gt;
* For reasonable-sized classes, put all the fields together, at the top, immediately after any necessary typedefs. For unreasonably large classes, do whatever seems best (but let&#039;s try to avoid making more of these).&lt;br /&gt;
* Align the braces of a class/struct/enum definition like this:&lt;br /&gt;
 class JSObject&lt;br /&gt;
 {&lt;br /&gt;
      ...&lt;br /&gt;
 };&lt;br /&gt;
* Member variable names, private or public, should be decorated with a trailing &#039;_&#039;.&lt;br /&gt;
 class Fail&lt;br /&gt;
 {&lt;br /&gt;
     size_t capacity;  // common&lt;br /&gt;
     T* begin_;        // better, gravitate toward this&lt;br /&gt;
 };&lt;br /&gt;
Sometimes a canonical argument name may conflict with a member name.  In this case, one can disambiguate with &amp;quot;this-&amp;gt;&amp;quot;, although such explicit qualification should only be added when necessary:&lt;br /&gt;
 class C&lt;br /&gt;
 {&lt;br /&gt;
   public:&lt;br /&gt;
     size_t count;&lt;br /&gt;
     bool fresh;&lt;br /&gt;
     void change(size_t count) {&lt;br /&gt;
         this-&amp;gt;count = count;&lt;br /&gt;
         this-&amp;gt;fresh = false;  // verbose and unnecessary&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
* Prefer inline functions to macros.&lt;br /&gt;
* We build with C++ exceptions disabled, so most of the &amp;lt;code&amp;gt;std&amp;lt;/code&amp;gt; namespace is off-limits, including STL containers. The exception is &amp;lt;code&amp;gt;&amp;amp;lt;algorithm&amp;amp;gt;&amp;lt;/code&amp;gt;, which is mostly OK to use. You can use MFBT. We have some STL-like containers that are used basically everywhere (see js::Vector, js::HashMap, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Initializer lists ===&lt;br /&gt;
&lt;br /&gt;
Initializer lists can break in one of two ways. The first may be preferable when constructors take few arguments:&lt;br /&gt;
&lt;br /&gt;
 class Ninja : public WeaponWeilder, public Camouflagible,&lt;br /&gt;
               public Assassinatable, public ShapeShiftable&lt;br /&gt;
 {&lt;br /&gt;
     Ninja() : WeaponWeilder(Weapons::SHURIKEN),&lt;br /&gt;
               Camouflagible(Garments::SHINOBI_SHOZOKU),&lt;br /&gt;
               Assassinatable(AssassinationDifficulty::HIGHLY_DIFFICULT),&lt;br /&gt;
               ShapeShiftable(MPCost(512)) {}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The other permitted style mitigates longer-identifiers-squishing-text-against-the-right-side-of-the-screen-syndrome by using a half-indented colon:&lt;br /&gt;
&lt;br /&gt;
 class Ninja&lt;br /&gt;
   : public WeaponWeilder, public Camouflagible, public Assassinatable,&lt;br /&gt;
     public ShapeShiftable&lt;br /&gt;
 {&lt;br /&gt;
     Ninja()&lt;br /&gt;
       : WeaponWeilder(Weapons::SHURIKEN),&lt;br /&gt;
         Camouflagible(Garments::SHINOBI_SHOZOKU),&lt;br /&gt;
         Assassinatable(AssassinationDifficulty::HIGHLY_DIFFICULT),&lt;br /&gt;
         ShapeShiftable(MPCost(512)) {}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Inline methods ===&lt;br /&gt;
&lt;br /&gt;
If the method in question fits on one line and is branch free, do a one liner:&lt;br /&gt;
&lt;br /&gt;
 class Eater&lt;br /&gt;
 {&lt;br /&gt;
     void eat(Eaten &amp;amp;other) { other.setConsumed(); }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
If it&#039;s too long, put the type, declarator including formals (unless they overflow), and left brace all on the first line:&lt;br /&gt;
&lt;br /&gt;
 class Eater&lt;br /&gt;
 {&lt;br /&gt;
     Food* obtainFoodFromEatery(Eatery &amp;amp;eatery) {&lt;br /&gt;
         if (!eatery.hasFood())&lt;br /&gt;
             return NULL;&lt;br /&gt;
         return eatery.purchaseFood();&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
For out-of-line inlines (when the definitions are too unwieldy to place in the class definition) use the inline keyword as an indicator that there&#039;s an out-of-line inline definition:&lt;br /&gt;
&lt;br /&gt;
 class SpaceGoo&lt;br /&gt;
 {&lt;br /&gt;
     inline BlobbyWrapper* enblob(Entity &amp;amp;other);&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 inline BlobbyWrapper*&lt;br /&gt;
 SpaceGoo::enblob(Entity &amp;amp;other)&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en/Mozilla_Coding_Style_Guide Mozilla&#039;s coding style guide].&lt;br /&gt;
* [http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml Google&#039;s C++ coding style guide].&lt;br /&gt;
&lt;br /&gt;
= Exceptions to this coding style =&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey contains some code imported from other projects, e.g. ctypes/libffi/, that is minimally modified.  Such code does not have to follow SpiderMonkey style.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Coding_Style&amp;diff=1181576</id>
		<title>JavaScript:SpiderMonkey:Coding Style</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Coding_Style&amp;diff=1181576"/>
		<updated>2017-10-02T14:50:46Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Classes */ add the all-fields-together rule&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Functions =&lt;br /&gt;
&lt;br /&gt;
* Public function names begin with JS_ followed by capitalized &amp;quot;intercaps&amp;quot;, e.g. JS_NewObject.&lt;br /&gt;
* Extern but library-private function names use a js_ prefix and mixed case, e.g. js_SearchScope.&lt;br /&gt;
* Most static function names have unprefixed, mixed-case names: GetChar.&lt;br /&gt;
* But static native methods of JS objects have lowercase, underscore-separated or intercaps names, e.g., str_indexOf.&lt;br /&gt;
* Function return types are on a separate line preceding the function name.&lt;br /&gt;
* Function braces go on the line following the function name.&lt;br /&gt;
 void DoThis()           /* bad */&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
 void&lt;br /&gt;
 DoThis()                /* OK */&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Other Symbols =&lt;br /&gt;
&lt;br /&gt;
* Library-private and static data use underscores, not intercaps (but library-private data do use a js_ prefix).&lt;br /&gt;
* Scalar type names are lowercase and js-prefixed: jsdouble.&lt;br /&gt;
* Aggregate type names are JS-prefixed and mixed-case: JSObject.&lt;br /&gt;
* Macros are generally ALL_CAPS and underscored, to call out potential side effects, multiple uses of a formal argument, etc.  Line continuation characters should all line up, in column 79 if that exceeds the width of all the macro text.  Macro parameters should be of the form name_ (instead of something like __name).&lt;br /&gt;
&lt;br /&gt;
= Indentation =&lt;br /&gt;
&lt;br /&gt;
* Use spaces, not tabs.  There should be no tabs in source files.&lt;br /&gt;
* Four spaces of indentation per statement nesting level.&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;case L:&amp;lt;/code&amp;gt;&amp;quot; labels in &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; statements count as half of a nesting level, so indent two spaces, with the labeled statements indenting two more for a standard four spaces indentation from &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; to a case-controlled statement.&lt;br /&gt;
 switch (discriminant) {&lt;br /&gt;
   case L1:&lt;br /&gt;
     DoSomething();&lt;br /&gt;
   . . .&lt;br /&gt;
 }&lt;br /&gt;
* Function arguments that overflow the first line of the call expression should be aligned to underhang the first argument (to start in overflow lines in the column after the opening parenthesis).&lt;br /&gt;
 JS_SetContext(rt,         /* bad */&lt;br /&gt;
              cx);&lt;br /&gt;
 JS_SetContext(rt,         /* OK */&lt;br /&gt;
               cx);&lt;br /&gt;
&lt;br /&gt;
= Whitespace in declarations =&lt;br /&gt;
&lt;br /&gt;
These rules are inconsistently applied.  Be consistent with the code you&#039;re editing rather than adhere too closely to these guidelines!&lt;br /&gt;
&lt;br /&gt;
* In a declaration of a pointer, the &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; goes with the type:&lt;br /&gt;
 char *s;                  /* bad */&lt;br /&gt;
 char* s;                  /* OK */&lt;br /&gt;
* In C++ method declarations with default arguments, use spaces and comments like so:&lt;br /&gt;
 static void&lt;br /&gt;
 Frob(JSContext* cx, uint32_t defaultValue = 0);&lt;br /&gt;
 static void&lt;br /&gt;
 Frob(JSContext* cx, uint32_t defaultValue /* = 0 */)&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Other whitespace =&lt;br /&gt;
&lt;br /&gt;
* Code should fit within 99 columns; comments should fit within 80 columns; both figures include indentation. Break down lines that are too long by splitting after a binary operator.&lt;br /&gt;
* Exception: in a &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; statement where each case is a trivially-short statement, it&#039;s ok to put the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt;, the statement, and the &amp;lt;code&amp;gt;break;&amp;lt;/code&amp;gt; all on one line.&lt;br /&gt;
* Comment &amp;lt;code&amp;gt;/* FALL THROUGH */&amp;lt;/code&amp;gt; in place of missing &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; when intentionally falling through from one case-controlled statement sequence into another, or into the &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; statements.&lt;br /&gt;
* Do not use spaces between a function name and its arguments list, or between an array name and the square bracket. Also, do no use spaces after a bracket. Use a space after a comma to separate arguments.&lt;br /&gt;
 JS_SetContext ( rt, cx ); /* bad */&lt;br /&gt;
 JS_SetContext(rt, cx);    /* OK */&lt;br /&gt;
* Use a space between a C keyword and parentheses.&lt;br /&gt;
 if(condition)             /* bad */&lt;br /&gt;
 if (condition)            /* OK */&lt;br /&gt;
* In a conditional, if the condition and consequent (and, if present, any number of &amp;lt;code&amp;gt;else if&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt; alternatives and associated conditions) occupy single lines, no braces are used.&lt;br /&gt;
 if (today == &amp;quot;Tuesday&amp;quot;)&lt;br /&gt;
     puts(&amp;quot;I don&#039;t have my wallet on me.&amp;quot;);&lt;br /&gt;
 else&lt;br /&gt;
     puts(&amp;quot;I would gladly pay you on Tuesday for a hamburger today.&amp;quot;);&lt;br /&gt;
However, if &#039;&#039;any&#039;&#039; condition occupies multiple lines, or if a consequent or alternative occupies multiple lines (regardless whether it&#039;s a single statement or multiple statements), every consequent and alternative is braced.&lt;br /&gt;
 if (canSwingFromWeb) {&lt;br /&gt;
     p-&amp;gt;swingFromWeb();&lt;br /&gt;
 } else {&lt;br /&gt;
     MOZ_ASSERT(p-&amp;gt;isSpiderPig());&lt;br /&gt;
     p-&amp;gt;doWhateverSpiderPigDoes();&lt;br /&gt;
 }&lt;br /&gt;
 if (apingOtherMonkey) {&lt;br /&gt;
     MOZ_ASSERT(monkey-&amp;gt;wantsAttention(),&lt;br /&gt;
                &amp;quot;why else would he be aping another monkey?&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 if (hungryForBananas &amp;amp;&amp;amp; // and a comment makes the line long enough for a linebreak&lt;br /&gt;
     wantsAttentionInTheWorstWay)&lt;br /&gt;
 {&lt;br /&gt;
     p-&amp;gt;eatBananasAndPreen();&lt;br /&gt;
 }&lt;br /&gt;
* Conditions with multi-line tests should put the brace on the new line to provide a visual separation between the condition and the body.&lt;br /&gt;
&lt;br /&gt;
   types::TypeSet* types = frame.extra(lhs).types;&lt;br /&gt;
   if (JSOp(*PC) == JSOP_SETPROP &amp;amp;&amp;amp; id == types::MakeTypeId(cx, id) &amp;amp;&amp;amp;&lt;br /&gt;
       types &amp;amp;&amp;amp; !types-&amp;gt;unknownObject() &amp;amp;&amp;amp;&lt;br /&gt;
       types-&amp;gt;getObjectCount() == 1 &amp;amp;&amp;amp;&lt;br /&gt;
       types-&amp;gt;getTypeObject(0) != NULL &amp;amp;&amp;amp;&lt;br /&gt;
       !types-&amp;gt;getTypeObject(0)-&amp;gt;unknownProperties())&lt;br /&gt;
   {&lt;br /&gt;
       JS_ASSERT(usePropCache);&lt;br /&gt;
       types::TypeObject* object = types-&amp;gt;getTypeObject(0);&lt;br /&gt;
       types::TypeSet* propertyTypes = object-&amp;gt;getProperty(cx, id, false);&lt;br /&gt;
       ...&lt;br /&gt;
   } else {&lt;br /&gt;
       ...&lt;br /&gt;
   }&lt;br /&gt;
However, if there is already a visual separation between the condition and the body, putting the { on a new line isn&#039;t necessary:&lt;br /&gt;
&lt;br /&gt;
   if (forHead-&amp;gt;pn_kid1 &amp;amp;&amp;amp; NewSrcNote2(cx, cg, SRC_DECL,&lt;br /&gt;
                                       (forHead-&amp;gt;pn_kid1-&amp;gt;isOp(JSOP_DEFVAR))&lt;br /&gt;
                                       ? SRC_DECL_VAR&lt;br /&gt;
                                       : SRC_DECL_LET) &amp;lt; 0) {&lt;br /&gt;
       return false;&lt;br /&gt;
   }&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop heads go on one line where possible; when not possible, initializer part, update, and termination parts each go on separate lines&lt;br /&gt;
 for (int i = 0;&lt;br /&gt;
      i &amp;lt; 5;&lt;br /&gt;
      i++) {                 /* bad, could all fit on one line */&lt;br /&gt;
     doStuff();&lt;br /&gt;
 }&lt;br /&gt;
 for (int i = 0; i &amp;lt; 5; i++) /* OK */&lt;br /&gt;
     doStuff();&lt;br /&gt;
 for (size_t ind = JSObject::JSSLOT_DATE_COMPONENTS_START;&lt;br /&gt;
      ind &amp;lt; JSObject::DATE_FIXED_RESERVED_SLOTS; ind++) {   /* bad */&lt;br /&gt;
     obj-&amp;gt;setSlot(ind, DoubleValue(utcTime));&lt;br /&gt;
 }&lt;br /&gt;
 for (size_t ind = JSObject::JSSLOT_DATE_COMPONENTS_START;&lt;br /&gt;
      ind &amp;lt; JSObject::DATE_FIXED_RESERVED_SLOTS;&lt;br /&gt;
      ind++) {                                               /* OK */&lt;br /&gt;
     obj-&amp;gt;setSlot(ind, DoubleValue(utcTime));&lt;br /&gt;
 }&lt;br /&gt;
* In comments, use one space, not two, between sentences and after a colon.&lt;br /&gt;
&lt;br /&gt;
= Control Flow =&lt;br /&gt;
&lt;br /&gt;
* Minimize indentation using return, break, and continue where appropriate.  Prefer return (break, continue) statements to cast out abnormal cases, instead of nesting &amp;quot;if/else&amp;quot; statements and indenting the common cases.&lt;br /&gt;
 void&lt;br /&gt;
 MyFunction(int n)&lt;br /&gt;
 {&lt;br /&gt;
     if (n) {              /* bad */&lt;br /&gt;
         ...&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 void&lt;br /&gt;
 MyFunction(int n)&lt;br /&gt;
 {&lt;br /&gt;
     if (!n)&lt;br /&gt;
         return;           /* OK */&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* If an &amp;quot;if&amp;quot; statement controls a &amp;quot;then&amp;quot; clause ending in a return statement, do not use &amp;quot;else&amp;quot; after return.&lt;br /&gt;
 if (condition) {          /* bad */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     return;&lt;br /&gt;
 } else {&lt;br /&gt;
     DoThat();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 if (condition) {          /* OK */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoThat();&lt;br /&gt;
&lt;br /&gt;
* Avoid similar arbitrary patterns and non-sequiturs:&lt;br /&gt;
 if (condition) {          /* bad */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     DoThat();&lt;br /&gt;
 } else {&lt;br /&gt;
     CleanUp();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoTheOther();&lt;br /&gt;
 if (!condition) {         /* OK */&lt;br /&gt;
     CleanUp();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoThis();&lt;br /&gt;
 DoThat();&lt;br /&gt;
 DoTheOther();&lt;br /&gt;
&lt;br /&gt;
* Avoid using &amp;amp;&amp;amp; or || to mix deciding-whether-to-do-something with error-checking.&lt;br /&gt;
&lt;br /&gt;
 if (obj-&amp;gt;hasProblems() &amp;amp;&amp;amp; !obj-&amp;gt;rectify())     /* bad */&lt;br /&gt;
     return false;&lt;br /&gt;
 &lt;br /&gt;
 if (obj-&amp;gt;hasProblems()) {                      /* OK */&lt;br /&gt;
     if (!obj-&amp;gt;rectify())&lt;br /&gt;
         return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Comments =&lt;br /&gt;
&lt;br /&gt;
* In C files, always use C style comments.  C++ comments are ok otherwise.&lt;br /&gt;
* Terminate a comment with a period (so try to make comments be complete sentences).&lt;br /&gt;
 /* This is a good comment. */&lt;br /&gt;
 // This is also a good comment.&lt;br /&gt;
* For C-style multiline comments, align with any indentation, and start every line with an asterisk. Asterisks stack in the same column. Precede the multiline comment with one empty line unless the prior line ends in a left brace. The first line of the comment contains only leading space followed by &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt;. Multiline comments should also be bracketed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (condition) {&lt;br /&gt;
    /*&lt;br /&gt;
     * This is a lengthy C-style&lt;br /&gt;
     * multiline comment.&lt;br /&gt;
     */&lt;br /&gt;
    // This is a length&lt;br /&gt;
    // C++-style comment&lt;br /&gt;
    DoYourStuff();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Entry Points and Callbacks =&lt;br /&gt;
&lt;br /&gt;
* DLL entry points have their return type expanded within a JS_PUBLIC_API() macro call, to get the right Windows secret type qualifiers in the right places for all build variants.&lt;br /&gt;
* Callback functions that might be called from a DLL are similarly macroized with JS_STATIC_DLL_CALLBACK (if the function otherwise would be static to hide its name) or JS_DLL_CALLBACK (this macro takes no type argument; it should be used after the return type and before the function name).&lt;br /&gt;
&lt;br /&gt;
= Data Types and Alignments =&lt;br /&gt;
&lt;br /&gt;
* As with all Mozilla code, SpiderMonkey needs to compile and execute correctly on many platforms, including 64-bits systems.&lt;br /&gt;
* JS and NSPR have common roots in the dawn of time (Netscape 2), and the &amp;lt;code&amp;gt;JS_THREADSAFE&amp;lt;/code&amp;gt; mode of building SpiderMonkey depends on NSPR, so reading the [http://www.mozilla.org/projects/nspr/reference/html/ NSPR documentation] is well worth your while.&lt;br /&gt;
* Not all 64-bit systems use the same integer type model: some are &amp;quot;LP64&amp;quot; (long and pointer are 64 bits, int is 32 bits), while others are &amp;quot;LLP64&amp;quot; (only long long and pointer are 64 bits; long and int are 32 bits).&lt;br /&gt;
* Use size_t for unsigned number of bytes variables, ptrdiff_t for signed pointer subtraction results.  In particular, do not use uintN, which is just shorthand for unsigned int, and so may not be big enough.&lt;br /&gt;
&lt;br /&gt;
= Header files =&lt;br /&gt;
&lt;br /&gt;
== #ifndef wrappers ==&lt;br /&gt;
&lt;br /&gt;
Use this exact form for #ifndef wrappers in header files:&lt;br /&gt;
&lt;br /&gt;
  #ifndef &amp;lt;guard&amp;gt;&lt;br /&gt;
  #define &amp;lt;guard&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  #endif // &amp;lt;guard&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GCC and clang recognize this idiom and avoid re-reading headers that use it.  Don&#039;t put any code before the #ifndef or after the #endif, and don&#039;t put anything else in the #ifndef, otherwise the optimization will be thwarted and the file will be multiply-included.  (Check with the -H option if you want to be sure.)&lt;br /&gt;
&lt;br /&gt;
Include guards should be named by determining the fully-qualified include path,&lt;br /&gt;
then substituting _ for &#039;/&#039; and &#039;.&#039; and &#039;-&#039; in it.  For example, js/src/vm/Stack-inl.h&#039;s guard is vm_Stack_inl_h_, and js/public/Vector.h&#039;s guard is js_Vector_h (because its include path is js/Vector.h).&lt;br /&gt;
&lt;br /&gt;
== #include paths ==&lt;br /&gt;
&lt;br /&gt;
All #include statements should use a fully-qualified (within SpiderMonkey) path, even if it&#039;s not necessary.  For example, this:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;vm/Stack.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
not:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;Stack.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This keeps things consistent and helps with the ordering.&lt;br /&gt;
&lt;br /&gt;
For headers in js/public/, the prefix is &amp;quot;js/&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;js/Vector.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For headers in mfbt/, the prefix is &amp;quot;mozilla/&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;mozilla/Assertions.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== #include ordering ==&lt;br /&gt;
&lt;br /&gt;
The following order is used for module X:  &lt;br /&gt;
* If X-inl.h exists, it goes first.  (And X-inl.h&#039;s first #include should be X.h.) Otherwise, X.h goes first.  This rule ensures that X.h and X-inl.h both #include all the headers that they need themselves.&lt;br /&gt;
* mozilla/*.h&lt;br /&gt;
* &amp;lt;*.h&amp;gt;&lt;br /&gt;
* js*.h&lt;br /&gt;
* */*.h (this includes the public JSAPI headers in js/public/*.h which should be included using the form js/*.h)&lt;br /&gt;
* js*inlines.h&lt;br /&gt;
* */*-inl.h.&lt;br /&gt;
&lt;br /&gt;
Keep (case-insensitive) lexicographic order with each section.&lt;br /&gt;
&lt;br /&gt;
The presence of conditionally-compiled #include statements complicates thing.  If you have a single #include statement within a #if/#ifdef/#ifndef block, placing the block in the appropriate section is straightforward.  If you have multiple #include statements within a block, use your judgment as to where the best place for it is.&lt;br /&gt;
&lt;br /&gt;
Example for X.cpp:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;X.h&amp;quot;    // put &amp;quot;X-inl.h&amp;quot; instead, if it exists&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;mozilla/HashFunctions.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;jsbar.h&amp;quot;&lt;br /&gt;
 #ifdef BAZ&lt;br /&gt;
 # include &amp;quot;jsbaz.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 #include &amp;quot;jscaz.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;ds/Baz.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;js/Bar.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;vm/Bat.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;jssqueeinlines.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;jswoot-inl.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;frontend/Thingamabob-inl.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;vm/VirtualReality-inl.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= C++ =&lt;br /&gt;
&lt;br /&gt;
== Namespaces ==&lt;br /&gt;
&lt;br /&gt;
* Public functions and types should be in the JS:: namespace, in preference to the old JS/JS_ name prefixes.&lt;br /&gt;
* Library-private and friend functions should be in the js:: namespace, in preference to the old js_ name prefix.&lt;br /&gt;
* Compile-time-evaluated functions (i.e., template meta-functions) should be in &#039;js::tl::&#039;, the &amp;quot;template library&amp;quot; namespace, to avoid collision with their runtime counterparts.&lt;br /&gt;
* In SpiderMonkey .cpp files, it is okay to have &#039;using namespace js;&#039;, but it is not okay to do the same with any other namespace, like JS:: or mozilla::. These can introduce ambiguities that come and go depending on which .cpp files the build system decides to unify.&lt;br /&gt;
* If you do have names in JS:: that should be readily available throughout SpiderMonkey, you may add a &#039;using&#039; declaration to js/src/NamespaceImports.h.&lt;br /&gt;
* Avoid unnamed namespaces unless they are necessary to give a class&#039;s members internal linkage.  Although the C++ standard officially deprecates &#039;static&#039; on  functions, &#039;static&#039; has the following advantages over unnamed namespaces:&lt;br /&gt;
** It is difficult to name functions in unnamed namespaces in gdb.&lt;br /&gt;
** Static says &amp;quot;this is a translation-unit-local helper function&amp;quot; on the function, without having to look around for an enclosing &amp;quot;namespace {&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Enums ==&lt;br /&gt;
&lt;br /&gt;
Older code uses SHOUT_REALLY_LOUD for enum values, newer code uses InterCaps. Enums should be preferred to boolean arguments for ease of understanding at the invocation site.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
&lt;br /&gt;
* For reasonable-sized classes, put all the fields together, at the top, immediately after any necessary typedefs. For unreasonably large classes, do whatever seems best (but let&#039;s try to avoid making more of these).&lt;br /&gt;
* Align the braces of a class/struct/enum definition like this:&lt;br /&gt;
 class JSObject&lt;br /&gt;
 {&lt;br /&gt;
      ...&lt;br /&gt;
 }&lt;br /&gt;
* Member variable names, private or public, should be decorated with a trailing &#039;_&#039;.&lt;br /&gt;
 class Fail&lt;br /&gt;
 {&lt;br /&gt;
     size_t capacity;  // common&lt;br /&gt;
     T* begin_;        // better, gravitate toward this&lt;br /&gt;
 }&lt;br /&gt;
Sometimes a canonical argument name may conflict with a member name.  In this case, one can disambiguate with &amp;quot;this-&amp;gt;&amp;quot;, although such explicit qualification should only be added when necessary:&lt;br /&gt;
 class C&lt;br /&gt;
 {&lt;br /&gt;
     size_t count;&lt;br /&gt;
     bool fresh;&lt;br /&gt;
     void change(size_t count) {&lt;br /&gt;
         this-&amp;gt;count = count;&lt;br /&gt;
         this-&amp;gt;fresh = false;  // verbose and unnecessary&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
* Prefer inline functions to macros.&lt;br /&gt;
* We build with C++ exceptions disabled, so most of the &amp;lt;code&amp;gt;std&amp;lt;/code&amp;gt; namespace is off-limits, including STL containers. The exception is &amp;lt;code&amp;gt;&amp;amp;lt;algorithm&amp;amp;gt;&amp;lt;/code&amp;gt;, which is mostly OK to use. You can use MFBT. We have some STL-like containers that are used basically everywhere (see js::Vector, js::HashMap, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Initializer lists ===&lt;br /&gt;
&lt;br /&gt;
Initializer lists can break in one of two ways. The first may be preferable when constructors take few arguments:&lt;br /&gt;
&lt;br /&gt;
 class Ninja : public WeaponWeilder, public Camouflagible,&lt;br /&gt;
               public Assassinatable, public ShapeShiftable&lt;br /&gt;
 {&lt;br /&gt;
     Ninja() : WeaponWeilder(Weapons::SHURIKEN),&lt;br /&gt;
               Camouflagible(Garments::SHINOBI_SHOZOKU),&lt;br /&gt;
               Assassinatable(AssassinationDifficulty::HIGHLY_DIFFICULT),&lt;br /&gt;
               ShapeShiftable(MPCost(512)) {}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The other permitted style mitigates longer-identifiers-squishing-text-against-the-right-side-of-the-screen-syndrome by using a half-indented colon:&lt;br /&gt;
&lt;br /&gt;
 class Ninja&lt;br /&gt;
   : public WeaponWeilder, public Camouflagible, public Assassinatable,&lt;br /&gt;
     public ShapeShiftable&lt;br /&gt;
 {&lt;br /&gt;
     Ninja()&lt;br /&gt;
       : WeaponWeilder(Weapons::SHURIKEN),&lt;br /&gt;
         Camouflagible(Garments::SHINOBI_SHOZOKU),&lt;br /&gt;
         Assassinatable(AssassinationDifficulty::HIGHLY_DIFFICULT),&lt;br /&gt;
         ShapeShiftable(MPCost(512)) {}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Inline methods ===&lt;br /&gt;
&lt;br /&gt;
If the method in question fits on one line and is branch free, do a one liner:&lt;br /&gt;
&lt;br /&gt;
 class Eater&lt;br /&gt;
 {&lt;br /&gt;
     void eat(Eaten &amp;amp;other) { other.setConsumed(); }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
If it&#039;s too long, put the type, declarator including formals (unless they overflow), and left brace all on the first line:&lt;br /&gt;
&lt;br /&gt;
 class Eater&lt;br /&gt;
 {&lt;br /&gt;
     Food* obtainFoodFromEatery(Eatery &amp;amp;eatery) {&lt;br /&gt;
         if (!eatery.hasFood())&lt;br /&gt;
             return NULL;&lt;br /&gt;
         return eatery.purchaseFood();&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
For out-of-line inlines (when the definitions are too unwieldy to place in the class definition) use the inline keyword as an indicator that there&#039;s an out-of-line inline definition:&lt;br /&gt;
&lt;br /&gt;
 class SpaceGoo&lt;br /&gt;
 {&lt;br /&gt;
     inline BlobbyWrapper* enblob(Entity &amp;amp;other);&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 inline BlobbyWrapper*&lt;br /&gt;
 SpaceGoo::enblob(Entity &amp;amp;other)&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en/Mozilla_Coding_Style_Guide Mozilla&#039;s coding style guide].&lt;br /&gt;
* [http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml Google&#039;s C++ coding style guide].&lt;br /&gt;
&lt;br /&gt;
= Exceptions to this coding style =&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey contains some code imported from other projects, e.g. ctypes/libffi/, that is minimally modified.  Such code does not have to follow SpiderMonkey style.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Coding_Style&amp;diff=1181575</id>
		<title>JavaScript:SpiderMonkey:Coding Style</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Coding_Style&amp;diff=1181575"/>
		<updated>2017-10-02T14:49:08Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Classical OOP */ - reword for 8 years&amp;#039; progress&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Functions =&lt;br /&gt;
&lt;br /&gt;
* Public function names begin with JS_ followed by capitalized &amp;quot;intercaps&amp;quot;, e.g. JS_NewObject.&lt;br /&gt;
* Extern but library-private function names use a js_ prefix and mixed case, e.g. js_SearchScope.&lt;br /&gt;
* Most static function names have unprefixed, mixed-case names: GetChar.&lt;br /&gt;
* But static native methods of JS objects have lowercase, underscore-separated or intercaps names, e.g., str_indexOf.&lt;br /&gt;
* Function return types are on a separate line preceding the function name.&lt;br /&gt;
* Function braces go on the line following the function name.&lt;br /&gt;
 void DoThis()           /* bad */&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
 void&lt;br /&gt;
 DoThis()                /* OK */&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Other Symbols =&lt;br /&gt;
&lt;br /&gt;
* Library-private and static data use underscores, not intercaps (but library-private data do use a js_ prefix).&lt;br /&gt;
* Scalar type names are lowercase and js-prefixed: jsdouble.&lt;br /&gt;
* Aggregate type names are JS-prefixed and mixed-case: JSObject.&lt;br /&gt;
* Macros are generally ALL_CAPS and underscored, to call out potential side effects, multiple uses of a formal argument, etc.  Line continuation characters should all line up, in column 79 if that exceeds the width of all the macro text.  Macro parameters should be of the form name_ (instead of something like __name).&lt;br /&gt;
&lt;br /&gt;
= Indentation =&lt;br /&gt;
&lt;br /&gt;
* Use spaces, not tabs.  There should be no tabs in source files.&lt;br /&gt;
* Four spaces of indentation per statement nesting level.&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;case L:&amp;lt;/code&amp;gt;&amp;quot; labels in &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; statements count as half of a nesting level, so indent two spaces, with the labeled statements indenting two more for a standard four spaces indentation from &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; to a case-controlled statement.&lt;br /&gt;
 switch (discriminant) {&lt;br /&gt;
   case L1:&lt;br /&gt;
     DoSomething();&lt;br /&gt;
   . . .&lt;br /&gt;
 }&lt;br /&gt;
* Function arguments that overflow the first line of the call expression should be aligned to underhang the first argument (to start in overflow lines in the column after the opening parenthesis).&lt;br /&gt;
 JS_SetContext(rt,         /* bad */&lt;br /&gt;
              cx);&lt;br /&gt;
 JS_SetContext(rt,         /* OK */&lt;br /&gt;
               cx);&lt;br /&gt;
&lt;br /&gt;
= Whitespace in declarations =&lt;br /&gt;
&lt;br /&gt;
These rules are inconsistently applied.  Be consistent with the code you&#039;re editing rather than adhere too closely to these guidelines!&lt;br /&gt;
&lt;br /&gt;
* In a declaration of a pointer, the &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; goes with the type:&lt;br /&gt;
 char *s;                  /* bad */&lt;br /&gt;
 char* s;                  /* OK */&lt;br /&gt;
* In C++ method declarations with default arguments, use spaces and comments like so:&lt;br /&gt;
 static void&lt;br /&gt;
 Frob(JSContext* cx, uint32_t defaultValue = 0);&lt;br /&gt;
 static void&lt;br /&gt;
 Frob(JSContext* cx, uint32_t defaultValue /* = 0 */)&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Other whitespace =&lt;br /&gt;
&lt;br /&gt;
* Code should fit within 99 columns; comments should fit within 80 columns; both figures include indentation. Break down lines that are too long by splitting after a binary operator.&lt;br /&gt;
* Exception: in a &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; statement where each case is a trivially-short statement, it&#039;s ok to put the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt;, the statement, and the &amp;lt;code&amp;gt;break;&amp;lt;/code&amp;gt; all on one line.&lt;br /&gt;
* Comment &amp;lt;code&amp;gt;/* FALL THROUGH */&amp;lt;/code&amp;gt; in place of missing &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; when intentionally falling through from one case-controlled statement sequence into another, or into the &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; statements.&lt;br /&gt;
* Do not use spaces between a function name and its arguments list, or between an array name and the square bracket. Also, do no use spaces after a bracket. Use a space after a comma to separate arguments.&lt;br /&gt;
 JS_SetContext ( rt, cx ); /* bad */&lt;br /&gt;
 JS_SetContext(rt, cx);    /* OK */&lt;br /&gt;
* Use a space between a C keyword and parentheses.&lt;br /&gt;
 if(condition)             /* bad */&lt;br /&gt;
 if (condition)            /* OK */&lt;br /&gt;
* In a conditional, if the condition and consequent (and, if present, any number of &amp;lt;code&amp;gt;else if&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt; alternatives and associated conditions) occupy single lines, no braces are used.&lt;br /&gt;
 if (today == &amp;quot;Tuesday&amp;quot;)&lt;br /&gt;
     puts(&amp;quot;I don&#039;t have my wallet on me.&amp;quot;);&lt;br /&gt;
 else&lt;br /&gt;
     puts(&amp;quot;I would gladly pay you on Tuesday for a hamburger today.&amp;quot;);&lt;br /&gt;
However, if &#039;&#039;any&#039;&#039; condition occupies multiple lines, or if a consequent or alternative occupies multiple lines (regardless whether it&#039;s a single statement or multiple statements), every consequent and alternative is braced.&lt;br /&gt;
 if (canSwingFromWeb) {&lt;br /&gt;
     p-&amp;gt;swingFromWeb();&lt;br /&gt;
 } else {&lt;br /&gt;
     MOZ_ASSERT(p-&amp;gt;isSpiderPig());&lt;br /&gt;
     p-&amp;gt;doWhateverSpiderPigDoes();&lt;br /&gt;
 }&lt;br /&gt;
 if (apingOtherMonkey) {&lt;br /&gt;
     MOZ_ASSERT(monkey-&amp;gt;wantsAttention(),&lt;br /&gt;
                &amp;quot;why else would he be aping another monkey?&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 if (hungryForBananas &amp;amp;&amp;amp; // and a comment makes the line long enough for a linebreak&lt;br /&gt;
     wantsAttentionInTheWorstWay)&lt;br /&gt;
 {&lt;br /&gt;
     p-&amp;gt;eatBananasAndPreen();&lt;br /&gt;
 }&lt;br /&gt;
* Conditions with multi-line tests should put the brace on the new line to provide a visual separation between the condition and the body.&lt;br /&gt;
&lt;br /&gt;
   types::TypeSet* types = frame.extra(lhs).types;&lt;br /&gt;
   if (JSOp(*PC) == JSOP_SETPROP &amp;amp;&amp;amp; id == types::MakeTypeId(cx, id) &amp;amp;&amp;amp;&lt;br /&gt;
       types &amp;amp;&amp;amp; !types-&amp;gt;unknownObject() &amp;amp;&amp;amp;&lt;br /&gt;
       types-&amp;gt;getObjectCount() == 1 &amp;amp;&amp;amp;&lt;br /&gt;
       types-&amp;gt;getTypeObject(0) != NULL &amp;amp;&amp;amp;&lt;br /&gt;
       !types-&amp;gt;getTypeObject(0)-&amp;gt;unknownProperties())&lt;br /&gt;
   {&lt;br /&gt;
       JS_ASSERT(usePropCache);&lt;br /&gt;
       types::TypeObject* object = types-&amp;gt;getTypeObject(0);&lt;br /&gt;
       types::TypeSet* propertyTypes = object-&amp;gt;getProperty(cx, id, false);&lt;br /&gt;
       ...&lt;br /&gt;
   } else {&lt;br /&gt;
       ...&lt;br /&gt;
   }&lt;br /&gt;
However, if there is already a visual separation between the condition and the body, putting the { on a new line isn&#039;t necessary:&lt;br /&gt;
&lt;br /&gt;
   if (forHead-&amp;gt;pn_kid1 &amp;amp;&amp;amp; NewSrcNote2(cx, cg, SRC_DECL,&lt;br /&gt;
                                       (forHead-&amp;gt;pn_kid1-&amp;gt;isOp(JSOP_DEFVAR))&lt;br /&gt;
                                       ? SRC_DECL_VAR&lt;br /&gt;
                                       : SRC_DECL_LET) &amp;lt; 0) {&lt;br /&gt;
       return false;&lt;br /&gt;
   }&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop heads go on one line where possible; when not possible, initializer part, update, and termination parts each go on separate lines&lt;br /&gt;
 for (int i = 0;&lt;br /&gt;
      i &amp;lt; 5;&lt;br /&gt;
      i++) {                 /* bad, could all fit on one line */&lt;br /&gt;
     doStuff();&lt;br /&gt;
 }&lt;br /&gt;
 for (int i = 0; i &amp;lt; 5; i++) /* OK */&lt;br /&gt;
     doStuff();&lt;br /&gt;
 for (size_t ind = JSObject::JSSLOT_DATE_COMPONENTS_START;&lt;br /&gt;
      ind &amp;lt; JSObject::DATE_FIXED_RESERVED_SLOTS; ind++) {   /* bad */&lt;br /&gt;
     obj-&amp;gt;setSlot(ind, DoubleValue(utcTime));&lt;br /&gt;
 }&lt;br /&gt;
 for (size_t ind = JSObject::JSSLOT_DATE_COMPONENTS_START;&lt;br /&gt;
      ind &amp;lt; JSObject::DATE_FIXED_RESERVED_SLOTS;&lt;br /&gt;
      ind++) {                                               /* OK */&lt;br /&gt;
     obj-&amp;gt;setSlot(ind, DoubleValue(utcTime));&lt;br /&gt;
 }&lt;br /&gt;
* In comments, use one space, not two, between sentences and after a colon.&lt;br /&gt;
&lt;br /&gt;
= Control Flow =&lt;br /&gt;
&lt;br /&gt;
* Minimize indentation using return, break, and continue where appropriate.  Prefer return (break, continue) statements to cast out abnormal cases, instead of nesting &amp;quot;if/else&amp;quot; statements and indenting the common cases.&lt;br /&gt;
 void&lt;br /&gt;
 MyFunction(int n)&lt;br /&gt;
 {&lt;br /&gt;
     if (n) {              /* bad */&lt;br /&gt;
         ...&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 void&lt;br /&gt;
 MyFunction(int n)&lt;br /&gt;
 {&lt;br /&gt;
     if (!n)&lt;br /&gt;
         return;           /* OK */&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* If an &amp;quot;if&amp;quot; statement controls a &amp;quot;then&amp;quot; clause ending in a return statement, do not use &amp;quot;else&amp;quot; after return.&lt;br /&gt;
 if (condition) {          /* bad */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     return;&lt;br /&gt;
 } else {&lt;br /&gt;
     DoThat();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 if (condition) {          /* OK */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoThat();&lt;br /&gt;
&lt;br /&gt;
* Avoid similar arbitrary patterns and non-sequiturs:&lt;br /&gt;
 if (condition) {          /* bad */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     DoThat();&lt;br /&gt;
 } else {&lt;br /&gt;
     CleanUp();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoTheOther();&lt;br /&gt;
 if (!condition) {         /* OK */&lt;br /&gt;
     CleanUp();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoThis();&lt;br /&gt;
 DoThat();&lt;br /&gt;
 DoTheOther();&lt;br /&gt;
&lt;br /&gt;
* Avoid using &amp;amp;&amp;amp; or || to mix deciding-whether-to-do-something with error-checking.&lt;br /&gt;
&lt;br /&gt;
 if (obj-&amp;gt;hasProblems() &amp;amp;&amp;amp; !obj-&amp;gt;rectify())     /* bad */&lt;br /&gt;
     return false;&lt;br /&gt;
 &lt;br /&gt;
 if (obj-&amp;gt;hasProblems()) {                      /* OK */&lt;br /&gt;
     if (!obj-&amp;gt;rectify())&lt;br /&gt;
         return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Comments =&lt;br /&gt;
&lt;br /&gt;
* In C files, always use C style comments.  C++ comments are ok otherwise.&lt;br /&gt;
* Terminate a comment with a period (so try to make comments be complete sentences).&lt;br /&gt;
 /* This is a good comment. */&lt;br /&gt;
 // This is also a good comment.&lt;br /&gt;
* For C-style multiline comments, align with any indentation, and start every line with an asterisk. Asterisks stack in the same column. Precede the multiline comment with one empty line unless the prior line ends in a left brace. The first line of the comment contains only leading space followed by &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt;. Multiline comments should also be bracketed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (condition) {&lt;br /&gt;
    /*&lt;br /&gt;
     * This is a lengthy C-style&lt;br /&gt;
     * multiline comment.&lt;br /&gt;
     */&lt;br /&gt;
    // This is a length&lt;br /&gt;
    // C++-style comment&lt;br /&gt;
    DoYourStuff();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Entry Points and Callbacks =&lt;br /&gt;
&lt;br /&gt;
* DLL entry points have their return type expanded within a JS_PUBLIC_API() macro call, to get the right Windows secret type qualifiers in the right places for all build variants.&lt;br /&gt;
* Callback functions that might be called from a DLL are similarly macroized with JS_STATIC_DLL_CALLBACK (if the function otherwise would be static to hide its name) or JS_DLL_CALLBACK (this macro takes no type argument; it should be used after the return type and before the function name).&lt;br /&gt;
&lt;br /&gt;
= Data Types and Alignments =&lt;br /&gt;
&lt;br /&gt;
* As with all Mozilla code, SpiderMonkey needs to compile and execute correctly on many platforms, including 64-bits systems.&lt;br /&gt;
* JS and NSPR have common roots in the dawn of time (Netscape 2), and the &amp;lt;code&amp;gt;JS_THREADSAFE&amp;lt;/code&amp;gt; mode of building SpiderMonkey depends on NSPR, so reading the [http://www.mozilla.org/projects/nspr/reference/html/ NSPR documentation] is well worth your while.&lt;br /&gt;
* Not all 64-bit systems use the same integer type model: some are &amp;quot;LP64&amp;quot; (long and pointer are 64 bits, int is 32 bits), while others are &amp;quot;LLP64&amp;quot; (only long long and pointer are 64 bits; long and int are 32 bits).&lt;br /&gt;
* Use size_t for unsigned number of bytes variables, ptrdiff_t for signed pointer subtraction results.  In particular, do not use uintN, which is just shorthand for unsigned int, and so may not be big enough.&lt;br /&gt;
&lt;br /&gt;
= Header files =&lt;br /&gt;
&lt;br /&gt;
== #ifndef wrappers ==&lt;br /&gt;
&lt;br /&gt;
Use this exact form for #ifndef wrappers in header files:&lt;br /&gt;
&lt;br /&gt;
  #ifndef &amp;lt;guard&amp;gt;&lt;br /&gt;
  #define &amp;lt;guard&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  #endif // &amp;lt;guard&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GCC and clang recognize this idiom and avoid re-reading headers that use it.  Don&#039;t put any code before the #ifndef or after the #endif, and don&#039;t put anything else in the #ifndef, otherwise the optimization will be thwarted and the file will be multiply-included.  (Check with the -H option if you want to be sure.)&lt;br /&gt;
&lt;br /&gt;
Include guards should be named by determining the fully-qualified include path,&lt;br /&gt;
then substituting _ for &#039;/&#039; and &#039;.&#039; and &#039;-&#039; in it.  For example, js/src/vm/Stack-inl.h&#039;s guard is vm_Stack_inl_h_, and js/public/Vector.h&#039;s guard is js_Vector_h (because its include path is js/Vector.h).&lt;br /&gt;
&lt;br /&gt;
== #include paths ==&lt;br /&gt;
&lt;br /&gt;
All #include statements should use a fully-qualified (within SpiderMonkey) path, even if it&#039;s not necessary.  For example, this:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;vm/Stack.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
not:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;Stack.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This keeps things consistent and helps with the ordering.&lt;br /&gt;
&lt;br /&gt;
For headers in js/public/, the prefix is &amp;quot;js/&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;js/Vector.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For headers in mfbt/, the prefix is &amp;quot;mozilla/&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;mozilla/Assertions.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== #include ordering ==&lt;br /&gt;
&lt;br /&gt;
The following order is used for module X:  &lt;br /&gt;
* If X-inl.h exists, it goes first.  (And X-inl.h&#039;s first #include should be X.h.) Otherwise, X.h goes first.  This rule ensures that X.h and X-inl.h both #include all the headers that they need themselves.&lt;br /&gt;
* mozilla/*.h&lt;br /&gt;
* &amp;lt;*.h&amp;gt;&lt;br /&gt;
* js*.h&lt;br /&gt;
* */*.h (this includes the public JSAPI headers in js/public/*.h which should be included using the form js/*.h)&lt;br /&gt;
* js*inlines.h&lt;br /&gt;
* */*-inl.h.&lt;br /&gt;
&lt;br /&gt;
Keep (case-insensitive) lexicographic order with each section.&lt;br /&gt;
&lt;br /&gt;
The presence of conditionally-compiled #include statements complicates thing.  If you have a single #include statement within a #if/#ifdef/#ifndef block, placing the block in the appropriate section is straightforward.  If you have multiple #include statements within a block, use your judgment as to where the best place for it is.&lt;br /&gt;
&lt;br /&gt;
Example for X.cpp:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;X.h&amp;quot;    // put &amp;quot;X-inl.h&amp;quot; instead, if it exists&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;mozilla/HashFunctions.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;jsbar.h&amp;quot;&lt;br /&gt;
 #ifdef BAZ&lt;br /&gt;
 # include &amp;quot;jsbaz.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 #include &amp;quot;jscaz.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;ds/Baz.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;js/Bar.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;vm/Bat.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;jssqueeinlines.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;jswoot-inl.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;frontend/Thingamabob-inl.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;vm/VirtualReality-inl.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= C++ =&lt;br /&gt;
&lt;br /&gt;
== Namespaces ==&lt;br /&gt;
&lt;br /&gt;
* Public functions and types should be in the JS:: namespace, in preference to the old JS/JS_ name prefixes.&lt;br /&gt;
* Library-private and friend functions should be in the js:: namespace, in preference to the old js_ name prefix.&lt;br /&gt;
* Compile-time-evaluated functions (i.e., template meta-functions) should be in &#039;js::tl::&#039;, the &amp;quot;template library&amp;quot; namespace, to avoid collision with their runtime counterparts.&lt;br /&gt;
* In SpiderMonkey .cpp files, it is okay to have &#039;using namespace js;&#039;, but it is not okay to do the same with any other namespace, like JS:: or mozilla::. These can introduce ambiguities that come and go depending on which .cpp files the build system decides to unify.&lt;br /&gt;
* If you do have names in JS:: that should be readily available throughout SpiderMonkey, you may add a &#039;using&#039; declaration to js/src/NamespaceImports.h.&lt;br /&gt;
* Avoid unnamed namespaces unless they are necessary to give a class&#039;s members internal linkage.  Although the C++ standard officially deprecates &#039;static&#039; on  functions, &#039;static&#039; has the following advantages over unnamed namespaces:&lt;br /&gt;
** It is difficult to name functions in unnamed namespaces in gdb.&lt;br /&gt;
** Static says &amp;quot;this is a translation-unit-local helper function&amp;quot; on the function, without having to look around for an enclosing &amp;quot;namespace {&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Enums ==&lt;br /&gt;
&lt;br /&gt;
Older code uses SHOUT_REALLY_LOUD for enum values, newer code uses InterCaps. Enums should be preferred to boolean arguments for ease of understanding at the invocation site.&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
&lt;br /&gt;
* Align the braces of a class/struct/enum definition like this:&lt;br /&gt;
 class JSObject&lt;br /&gt;
 {&lt;br /&gt;
      ...&lt;br /&gt;
 }&lt;br /&gt;
* Member variable names, private or public, should be decorated with a trailing &#039;_&#039;.&lt;br /&gt;
 class Fail&lt;br /&gt;
 {&lt;br /&gt;
     size_t capacity;  // common&lt;br /&gt;
     T* begin_;        // better, gravitate toward this&lt;br /&gt;
 }&lt;br /&gt;
Sometimes a canonical argument name may conflict with a member name.  In this case, one can disambiguate with &amp;quot;this-&amp;gt;&amp;quot;, although such explicit qualification should only be added when necessary:&lt;br /&gt;
 class C&lt;br /&gt;
 {&lt;br /&gt;
     size_t count;&lt;br /&gt;
     bool fresh;&lt;br /&gt;
     void change(size_t count) {&lt;br /&gt;
         this-&amp;gt;count = count;&lt;br /&gt;
         this-&amp;gt;fresh = false;  // verbose and unnecessary&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
* Prefer inline functions to macros.&lt;br /&gt;
* We build with C++ exceptions disabled, so most of the &amp;lt;code&amp;gt;std&amp;lt;/code&amp;gt; namespace is off-limits, including STL containers. The exception is &amp;lt;code&amp;gt;&amp;amp;lt;algorithm&amp;amp;gt;&amp;lt;/code&amp;gt;, which is mostly OK to use. You can use MFBT. We have some STL-like containers that are used basically everywhere (see js::Vector, js::HashMap, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Initializer lists ===&lt;br /&gt;
&lt;br /&gt;
Initializer lists can break in one of two ways. The first may be preferable when constructors take few arguments:&lt;br /&gt;
&lt;br /&gt;
 class Ninja : public WeaponWeilder, public Camouflagible,&lt;br /&gt;
               public Assassinatable, public ShapeShiftable&lt;br /&gt;
 {&lt;br /&gt;
     Ninja() : WeaponWeilder(Weapons::SHURIKEN),&lt;br /&gt;
               Camouflagible(Garments::SHINOBI_SHOZOKU),&lt;br /&gt;
               Assassinatable(AssassinationDifficulty::HIGHLY_DIFFICULT),&lt;br /&gt;
               ShapeShiftable(MPCost(512)) {}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The other permitted style mitigates longer-identifiers-squishing-text-against-the-right-side-of-the-screen-syndrome by using a half-indented colon:&lt;br /&gt;
&lt;br /&gt;
 class Ninja&lt;br /&gt;
   : public WeaponWeilder, public Camouflagible, public Assassinatable,&lt;br /&gt;
     public ShapeShiftable&lt;br /&gt;
 {&lt;br /&gt;
     Ninja()&lt;br /&gt;
       : WeaponWeilder(Weapons::SHURIKEN),&lt;br /&gt;
         Camouflagible(Garments::SHINOBI_SHOZOKU),&lt;br /&gt;
         Assassinatable(AssassinationDifficulty::HIGHLY_DIFFICULT),&lt;br /&gt;
         ShapeShiftable(MPCost(512)) {}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Inline methods ===&lt;br /&gt;
&lt;br /&gt;
If the method in question fits on one line and is branch free, do a one liner:&lt;br /&gt;
&lt;br /&gt;
 class Eater&lt;br /&gt;
 {&lt;br /&gt;
     void eat(Eaten &amp;amp;other) { other.setConsumed(); }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
If it&#039;s too long, put the type, declarator including formals (unless they overflow), and left brace all on the first line:&lt;br /&gt;
&lt;br /&gt;
 class Eater&lt;br /&gt;
 {&lt;br /&gt;
     Food* obtainFoodFromEatery(Eatery &amp;amp;eatery) {&lt;br /&gt;
         if (!eatery.hasFood())&lt;br /&gt;
             return NULL;&lt;br /&gt;
         return eatery.purchaseFood();&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
For out-of-line inlines (when the definitions are too unwieldy to place in the class definition) use the inline keyword as an indicator that there&#039;s an out-of-line inline definition:&lt;br /&gt;
&lt;br /&gt;
 class SpaceGoo&lt;br /&gt;
 {&lt;br /&gt;
     inline BlobbyWrapper* enblob(Entity &amp;amp;other);&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 inline BlobbyWrapper*&lt;br /&gt;
 SpaceGoo::enblob(Entity &amp;amp;other)&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en/Mozilla_Coding_Style_Guide Mozilla&#039;s coding style guide].&lt;br /&gt;
* [http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml Google&#039;s C++ coding style guide].&lt;br /&gt;
&lt;br /&gt;
= Exceptions to this coding style =&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey contains some code imported from other projects, e.g. ctypes/libffi/, that is minimally modified.  Such code does not have to follow SpiderMonkey style.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1139029</id>
		<title>Modules/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1139029"/>
		<updated>2016-07-07T21:43:07Z</updated>

		<summary type="html">&lt;p&gt;Jorend: add Dan Gohman to JS engine module&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Only module owners may edit this page.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
They may:&lt;br /&gt;
&lt;br /&gt;
* update any information about their module except the name of the owner&lt;br /&gt;
* add or remove sub-modules&lt;br /&gt;
* change the owner of a sub-module &lt;br /&gt;
* add emeritus owners or peers&lt;br /&gt;
&lt;br /&gt;
Other changes, including changes of module owner or addition/removal of modules, must be agreed with the Module Ownership Module group, probably via a discussion in [https://www.mozilla.org/about/forums/#governance mozilla.governance].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Accessibility&lt;br /&gt;
|description=Support for platform accessibility APIs. Accessibility APIs are used by 3rd party software like screen readers, screen magnifiers, and voice dictation software, which need information about document content and UI controls, as well as important events like changes of focus.&lt;br /&gt;
|owner=[mailto:surkov.alexander@gmail.com Alexander Surkov]&lt;br /&gt;
|peers=[mailto:bolterbugz@gmail.com David Bolter], [mailto:ginn.chen@oracle.com Ginn Chen], [mailto:trev.saunders@gmail.com Trevor Saunders], [mailto:marco.zehe@googlemail.com Marco Zehe] &lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Browser WebAPI&lt;br /&gt;
|description=Web API for rendering apps, browser windows and widgets.&lt;br /&gt;
|owner=[mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:fabrice@mozilla.com Fabrice Desré]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/browser-element/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build and Release Tools&lt;br /&gt;
|description=Tools related to build and release automation and configuration of release builds.&lt;br /&gt;
|owner=[mailto:nthomas@mozilla.com Nick Thomas]&lt;br /&gt;
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]&lt;br /&gt;
|group=release-engineering&lt;br /&gt;
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/&lt;br /&gt;
|url=https://wiki.mozilla.org/ReleaseEngineering&lt;br /&gt;
|components=Release Engineering::*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config&lt;br /&gt;
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.&lt;br /&gt;
|owner=[mailto:gps@mozilla.com Gregory Szorc] (:gps)&lt;br /&gt;
|peers=[mailto:mh@glandium.org Mike Hommey] (:glandium), [mailto:mshal@mozilla.com Mike Shal] (:mshal), [mailto:ted@mielczarek.org Ted Mielczarek] (:ted), [mailto:cmanchester@mozilla.com Chris Manchester](:chmanchester)&lt;br /&gt;
|ownersemeritus=Ted Mielczarek (2008-[https://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/ 2013]), Benjamin Smedberg (???-[http://benjamin.smedbergs.us/blog/2008-04-30/more-changing-of-the-guard-ted-mielczarek/ 2008]), &lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=build/, config/, python/mozbuild, tools/cross-commit, tools/cvs2hg-import.py, tools/cvsmgmt/, tools/elf-dynstr-gc/, tools/trees.pl, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=http://www.mozilla.org/build/&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Code Analysis and Debugging Tools&lt;br /&gt;
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-performance&lt;br /&gt;
|source_dirs=tools/codesighs/, tools/debug/, tools/dreftool/, tools/dumpdeps/, tools/footprint/, tools/jprof/, tools/leaky/, tools/memory/, tools/module-deps/, tools/performance/, tools/post_compile/, tools/preloader/, tools/rb/, tools/reorder/, tools/trace-malloc/, tools/uuiddeps/, &lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content HTTP Headers&lt;br /&gt;
|description=HTTP headers related to content, e.g. User-Agent, Content-Type, Accept. (Transport-related headers are the responsibility of the Necko module owner.)&lt;br /&gt;
|owner=[mailto:gerv@mozilla.org Gervase Markham]&lt;br /&gt;
|peers=[mailto:lmandel@mozilla.com Lawrence Mandel]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs= &lt;br /&gt;
|url=https://developer.mozilla.org/en/Gecko_user_agent_string_reference&lt;br /&gt;
|components=Core::Networking: HTTP&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content Security&lt;br /&gt;
|description=Native content-based security features, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Subresource Integrity (SRI) and CORS.&lt;br /&gt;
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|peers=[mailto:francois@mozilla.com François Marier], [mailto:jonas@sicking.cc Jonas Sicking],  [mailto:tvyas@mozilla.com Tanvi Vyas], [mailto:dveditz@mozilla.com Dan Veditz], [mailto:mozilla@sidstamm.com Sid Stamm] &lt;br /&gt;
|group=dev-security&lt;br /&gt;
|source_dirs=dom/security&lt;br /&gt;
|components=Core::DOM: Security&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cookies and Permissions&lt;br /&gt;
|description=&lt;br /&gt;
|owner=Monica Chew&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=extensions/cookie/, netwerk/cookie/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Networking: Cookies&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cycle Collector&lt;br /&gt;
|description=Code to break and collect objects within reference cycles&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]&lt;br /&gt;
|peers=Peter Van der Beken, Olli Pettay, David Baron&lt;br /&gt;
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=docshell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peers=[mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:jst@mozilla.org Johnny Stenback], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=docshell/, uriloader/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Document Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Device Storage&lt;br /&gt;
|description=Support for the device storage API&lt;br /&gt;
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands] (:dhylands), [mailto:jvarga@mozilla.com Jan Varga] (:janv)&lt;br /&gt;
|peers=&lt;br /&gt;
|ownersemeritus=[mailto:dougt@mozilla.com Doug Turner] (:dougt)&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/devicestorage/, dom/interfaces/devicestorage/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/WebAPI/Device_Storage&lt;br /&gt;
|components=Core::DOM: Device Interfaces&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Document Object Model&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:bent@mozilla.com Ben Turner], [mailto:mounir@lamouri.fr Mounir Lamouri (still active, but slower to respond than previously)], [mailto:me@kylehuey.com Kyle Huey], [mailto:justin.lebar@gmail.com Justin Lebar], [mailto:hsivonen@iki.fi Henri Sivonen], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:baku@mozilla.com Andrea Marchesini],&lt;br /&gt;
[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/*, except directories covered by other modules&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core &amp;amp; HTML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Event Handling&lt;br /&gt;
|description=DOM Events and Event Handling &lt;br /&gt;
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/events and event handling related code elsewhere &lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: Events, Core::Event Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Workers&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bent@mozilla.com Ben Turner]&lt;br /&gt;
|peers=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/workers/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_web_workers&lt;br /&gt;
|components=Core::DOM: Workers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IndexedDB&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bent@mozilla.com Ben Turner]&lt;br /&gt;
|peers=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/indexedDB/&lt;br /&gt;
|url=https://developer.mozilla.org/en/IndexedDB&lt;br /&gt;
|components=Core::DOM: IndexedDB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Editor&lt;br /&gt;
|description=&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=&lt;br /&gt;
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=editor/&lt;br /&gt;
|url=http://www.mozilla.org/editor/&lt;br /&gt;
|components=Core::Editor&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Embedding&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jst@mozilla.org Johnny Stenback]&lt;br /&gt;
|group=dev-embedding&lt;br /&gt;
|source_dirs=embedding/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Embedding: APIs, Core::Embedding: ActiveX Wrapper, Core::Embedding: GRE Core, Core::Embedding: GTK Widget, Core::Embedding: MFC Embed, Core::Embedding: Mac, Core::Embedding: Packaging&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Find As You Type&lt;br /&gt;
|description=Find As You Type (formerly called Type Ahead Find) is a feature that allows quick web page navigation when you type a succession of characters in the body of the displayed page (not in an edit box of or drop down list). Currently seeks new owner.&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=extensions/typeaheadfind/&lt;br /&gt;
|url=http://www.mozilla.org/access/type-ahead/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Geolocation&lt;br /&gt;
|description=Implementation of the Geolocation W3C Spec, location provider apis, and wifi scanning code.&lt;br /&gt;
|owner=[mailto:dougt@mozilla.com Doug Turner]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.net Josh Matthews], [mailto:kchen@mozilla.com Kan-Ru Chen], Garvan Keeley&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/geolocation, dom/system/, netwerk/wifi&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_geolocation&lt;br /&gt;
|components=Core::Geolocation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Global Key Bindings&lt;br /&gt;
|description=Global hot keys in Mozilla for the browser, editor, mail-news and widgets. Does not include underlined menu accelerators and the like, as those are part of i18n.&lt;br /&gt;
|owner=Aaron Leventhal&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=dom/xbl/builtin/&lt;br /&gt;
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html&lt;br /&gt;
|components=Core::Keyboard: Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Graphics&lt;br /&gt;
|description=Mozilla graphics API&lt;br /&gt;
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other), [mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:jdrew@mozilla.com Joe Drew], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:bas.schouten@live.nl Bas Schouten](Layers, Windows), [mailto:bjacob@mozilla.com Benoit Jacob](gfx/gl), [mailto:bgirard@mozilla.com Benoit Girard](Compositor, Performance), [mailto:ajuma.bugzilla@alijuma.com Ali Juma], [mailto:jgilbert@mozilla.com Jeff Gilbert](WebGL, ANGLE), [mailto:george@mozilla.com George Wright](Canvas2D, Skia), [mailto:mwoodrow@mozilla.com Matt Woodrow](Layers API), [mailto:jdaggett@mozilla.com John Daggett](text/fonts), [mailto:jfkthame@googlemail.com Jonathan Kew](text/fonts), [mailto:nsilva@mozilla.com  Nicolas Silva](MozSurface), [mailto:ncameron@mozilla.com Nick Cameron], [mailto:sikeda@mozilla.com Sotaro Ikeda](B2G), [mailto:snorp@mozilla.com James Willcox](Android), [mailto:clord@mozilla.com Christopher Lord], [mailto:mstange@themasta.com Markus Stange](OS X)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/, dom/canvas/&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch&lt;br /&gt;
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=APZ (Graphics submodule)&lt;br /&gt;
|description=Asynchronous panning and zooming&lt;br /&gt;
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:tnikkel@mozilla.com Timothy Nikkel], [mailto:dvander@mozilla.com David Anderson], [mailto:mstange@mozilla.com Markus Stange]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/layers/apz&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/APZ&lt;br /&gt;
|components=Core::Panning and Zooming&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Moz2D (Graphics submodule)&lt;br /&gt;
|description=Platform independent 2D graphics API&lt;br /&gt;
|owner=[mailto:bschouten@mozilla.com Bas Schouten]&lt;br /&gt;
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@mozilla.com Jonathan Watt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/2d&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D&lt;br /&gt;
|components=Core::Graphics&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=GTK Embedding Widget&lt;br /&gt;
|description=Gtk Widget for embedding Mozilla into Gtk applications&lt;br /&gt;
|owner=Marco Pesenti Gritti&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:dougt@mozilla.com Doug Turner]&lt;br /&gt;
|group=dev-embedding&lt;br /&gt;
|source_dirs=&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Embedding: GTK Widget&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Legacy HTML Parser&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:rbs@maths.uq.edu.au rbs@maths.uq.edu.au]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=parser/htmlparser&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/doc/parser.html&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HAL&lt;br /&gt;
|description=Hardware Abstraction Layer&lt;br /&gt;
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands]&lt;br /&gt;
|peers=[mailto:gsvelto@mozilla.com Gabriele Svelto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=hal/&lt;br /&gt;
|components=Core::Hardware Abstraction Layer (HAL)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HTML Parser&lt;br /&gt;
|description=The HTML Parser transforms HTML source code into a DOM. It conforms to the HTML specification, and is mostly translated automatically from Java to C++.&lt;br /&gt;
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=parser/html&lt;br /&gt;
|url=http://about.validator.nu/&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=I18N Library&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura]&lt;br /&gt;
|group=dev-i18n&lt;br /&gt;
|source_dirs=intl/&lt;br /&gt;
|url=http://mozilla.org/projects/intl/index.html&lt;br /&gt;
|components=Core::Internationalization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=ImageLib&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:seth@mozilla.com Seth Fowler]&lt;br /&gt;
|peers=[mailto:netzen@gmail.com Brian Bondy], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:jlebar@mozilla.com Justin Lebar], [mailto:tnikkel@gmail.com Timothy Nikkel]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::ImageLib&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IPC&lt;br /&gt;
|description=Message-passing between threads and processes&lt;br /&gt;
|owner=[mailto:wmccloskey@mozilla.com Bill McCloskey]&lt;br /&gt;
|peers=[mailto:danderson@mozilla.com David Anderson], [mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bent.mozilla@gmail.com Ben Turner], [mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript&lt;br /&gt;
|description=JavaScript engine (SpiderMonkey)&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:jdemooij@mozilla.com Jan de Mooij], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:nnethercote@mozilla.com Nick Nethercote], [mailto:jwalden@mit.edu Jeff Walden], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:evilpies@gmail.com Tom Schuster], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:till@tillschneidereit.net Till Schneidereit], [mailto:efaust@mozilla.com Eric Faust], [mailto:nfitzgerald@mozilla.com Nick Fitzgerald], [mailto:luke@mozilla.com Luke Wagner], [mailto:arai.unmht@gmail.com Tooru Fujisawa], [mailto:sunfish@mozilla.com Dan Gohman], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:nmatsakis@mozilla.com Niko Matsakis], [mailto:ejpbruel@mozilla.com Eddy Bruel], [mailto:danderson@mozilla.com David Anderson], [mailto:igor@mir2.org Igor Bukanov], [mailto:brendan@mozilla.org Brendan Eich], Andreas Gal&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey,&lt;br /&gt;
http://developer.mozilla.org/en/docs/About_JavaScript&lt;br /&gt;
|components=Core::JavaScript Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript JIT&lt;br /&gt;
|description=JavaScript engine&#039;s JIT compilers (IonMonkey, Baseline)&lt;br /&gt;
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]&lt;br /&gt;
|peers=[mailto:danderson@mozilla.com David Anderson], [mailto:bbouvier@mozilla.com Benjamin Bouvier], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:evilpies@gmail.com  Tom Schuster], [mailto:sstangl@mozilla.com Sean Stangl], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:luke@mozilla.com Luke Wagner]&lt;br /&gt;
|group=dev-tech-js-engine-internals&lt;br /&gt;
|source_dirs=js/src/jit&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey&lt;br /&gt;
|components=Core::JavaScript Engine: JIT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript Debugger Backend&lt;br /&gt;
|description=JavaScript debugging hooks&lt;br /&gt;
|owner=[mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:rginda@hacksrus.com Rob Ginda]&lt;br /&gt;
|group=dev-apps-js-debugger&lt;br /&gt;
|source_dirs=js/jsd/&lt;br /&gt;
|url=http://www.mozilla.org/js/jsd&lt;br /&gt;
|components=Other Applications::Venkman JS Debugger&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=jsat&lt;br /&gt;
|description=Javascript screen reader that is used in Android and B2G&lt;br /&gt;
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]&lt;br /&gt;
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/jsat/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-ctypes&lt;br /&gt;
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src/ctypes/&lt;br /&gt;
|url=https://wiki.mozilla.org/JSctypes&lt;br /&gt;
|components=Core::js-ctypes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-tests&lt;br /&gt;
|description=JavaScript test suite&lt;br /&gt;
|owner=[mailto:bclary@bclary.com Bob Clary]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tests/&lt;br /&gt;
|url=http://www.mozilla.org/js/tests/library.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Layout Engine&lt;br /&gt;
|description=rendering tree construction, layout (reflow), painting, etc.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:bzbarsky@mit.edu Boris Zbarsky],  [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:jfkthame@gmail.com Jonathan Kew], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:matt.woodrow@gmail.com Matt Woodrow], [mailto:xidorn+moz@upsuper.org Xidorn Quan]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/macbuild/, layout/printing/, layout/tables/, layout/tools/&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout, Core::Layout: Block and Inline, Core::Layout: Floats, Core::Layout: Form Controls, Core::Layout: HTML Frames, Core::Layout: Images, Core::Layout: Misc Code, Core::Layout: R &amp;amp; A Pos, Core::Layout: Tables, Core::Layout: Text, Core::Layout: View Rendering, Core::Print Preview, Core::Printing: Output&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=libjar&lt;br /&gt;
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).&lt;br /&gt;
|owner=[mailto:mwu@mozilla.com Michael Wu]&lt;br /&gt;
|peers=[mailto:aklotz@mozilla.com Aaron Klotz]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libjar&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MathML&lt;br /&gt;
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-tech-mathml&lt;br /&gt;
|source_dirs=layout/mathml/&lt;br /&gt;
|url=http://www.mozilla.org/projects/mathml/&lt;br /&gt;
|components=Core::MathML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Playback&lt;br /&gt;
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).&lt;br /&gt;
|owner=[mailto:cpearce@mozilla.com Chris Pearce]&lt;br /&gt;
|peers=[mailto:ajones@mozilla.com Anthony Jones], [mailto:kinetik@flim.org Matthew Gregan], [mailto:eflores@mozilla.com Edwin Flores], [mailto:jyavenard@mozilla.com Jean-Yves Avenard], [mailto:gsquelart@mozilla.com Gerald Squelart], [mailto:rgiles@mozilla.com Ralph Giles], [mailto:jwwang@mozilla.com JW Wang]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=dom/media, media/gmp-clearkey/, media/libcubeb/, media/libnestegg/, media/libogg/, media/libopus/, media/libstagefright/, media/libtheora/, media/libtremor/, media/libvorbis/, media/libvpx/, media/omx-plugin/, media/rlz/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Audio/Video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Transport&lt;br /&gt;
|description=Pluggable transport for real-time media&lt;br /&gt;
|owner=[mailto:ekr@rtfm.com Eric Rescorla]&lt;br /&gt;
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/mtransport&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::WebRTC::Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Memory Allocator&lt;br /&gt;
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=memory/&lt;br /&gt;
|components=Core::DMD, Core::jemalloc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mfbt&lt;br /&gt;
|description=mfbt is a collection of headers, macros, data structures, methods, and other functionality available for use and reuse throughout all Mozilla code (including SpiderMonkey and Gecko more broadly).&lt;br /&gt;
|owner=[mailto:jwalden@mit.edu Jeff Walden]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mfbt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::MFBT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozApps API &amp;amp; UI&lt;br /&gt;
|description=Implementation of the navigator.mozApps API&lt;br /&gt;
|owner=[mailto:fabrice@mozilla.com Fabrice Desré], [mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:myk@mozilla.org Myk Melez], [mailto:mar.castelluccio@studenti.unina.it Marco Castelluccio], [mailto:ferjmoreno@gmail.com Fernando Jiménez]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/apps/, dom/interfaces/apps, product specific files implementing UI hooks.&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM: Apps&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Mozglue&lt;br /&gt;
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd] (mozglue/linker), [mailto:kgupta@mozilla.com Kartikaya Gupta] (mozglue/android), [mailto:nchen@mozilla.com Jim Chen] (mozglue/android)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mozglue/&lt;br /&gt;
|components=Core::mozglue&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozilla-toplevel&lt;br /&gt;
|description=The top level directory for the mozilla tree.&lt;br /&gt;
|owner=[mailto:brendan@mozilla.org Brendan Eich]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=tools/README&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Necko&lt;br /&gt;
|description=The Mozilla Networking Library&lt;br /&gt;
|owner=[mailto:mcmanus@ducksong.com Patrick McManus]&lt;br /&gt;
|peers= [mailto:jduell.mcbugs@gmail.com Jason Duell], [mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:mnovotny@mozilla.com Michal Novotny], [mailto:hurley@mozilla.com Nick Hurley], [mailto:dd.mozilla@gmail.com  Dragana Damjanovic ],[mailto:valentin.gosu@gmail.com Valentin Gosu],[mailto:daniel@haxx.se Daniel Stenberg ]&lt;br /&gt;
|peersemeritus= [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sworkman@mozilla.com Steve Workman]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=netwerk/%, netwerk/base/, netwerk/build/, netwerk/cache/, netwerk/dns/, netwerk/locales/, netwerk/mime/, netwerk/protocol/, netwerk/resources/, netwerk/socket/, netwerk/streamconv/, netwerk/system/, netwerk/test/, netwerk/testserver/&lt;br /&gt;
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko&lt;br /&gt;
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NSPR&lt;br /&gt;
|description=Netscape Portable Runtime&lt;br /&gt;
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:wtc@google.com Wan-Teh Chang], [mailto:mh@glandium.org Mike Hommey], [mailto:kaie@kuix.de Kai Engert]&lt;br /&gt;
|group=dev-tech-nspr&lt;br /&gt;
|source_dirs=nsprpub/&lt;br /&gt;
|url=http://www.mozilla.org/projects/nspr/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/reference/html/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/release-notes/&lt;br /&gt;
|components=NSPR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PDF&lt;br /&gt;
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF&#039; format.&lt;br /&gt;
|owner=Chris Jones, Andreas Gal&lt;br /&gt;
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:bdahl@mozilla.com Brendan Dahl], [mailto:vnicolas@mozilla.com Vivien Nicolas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/pdf/&lt;br /&gt;
|url=https://github.com/mozilla/pdf.js&lt;br /&gt;
|components=Core::PDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Plugins&lt;br /&gt;
|description= NPAPI Plugin support.&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:jst@mozilla.org Johnny Stenback], [mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:joshmoz@gmail.com Josh Aas]&lt;br /&gt;
|peersemeritus=[mailto:john@pointysoftware.net John Schoenick]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/plugins/, modules/plugin/&lt;br /&gt;
|url=https://wiki.mozilla.org/Plugins&lt;br /&gt;
|components=Core::Plug-ins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=Preference library&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libpref/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Preferences: Backend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Private Browsing&lt;br /&gt;
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.net Josh Matthews]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. &lt;br /&gt;
|url=https://wiki.mozilla.org/Private_Browsing&lt;br /&gt;
|components=Firefox::Private Browsing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Privilege Manager&lt;br /&gt;
|description=&amp;quot;caps&amp;quot;&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dveditz@mozilla.com Dan Veditz], [mailto:jst@mozilla.org Johnny Stenback]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=caps/&lt;br /&gt;
|url=http://www.mozilla.org/projects/security/components/index.html&lt;br /&gt;
|components=Core::Security: CAPS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Push Notifications&lt;br /&gt;
|description=Push is a way for application developers to send messages to their web applications.&lt;br /&gt;
|owner=[mailto:dougt@mozilla.com Doug Turner]&lt;br /&gt;
|peers=[mailto:nsm.nikhil@gmail.com Nikhil Marathe], [mailto:kcambridge@mozilla.com Kit Cambridge], [mailto:martin.thomson@gmail.com Martin Thomson], [mailto:ddamjanovic@mozilla.com Dragana Damjanovic]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/push, dom/simplepush&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PyXPCOM&lt;br /&gt;
|description=The Python to XPCOM bridge.&lt;br /&gt;
|owner=Todd Whiteman&lt;br /&gt;
|peers=[mailto:mhammond@skippinet.com.au Mark Hammond]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=extension/python&lt;br /&gt;
|url=https://developer.mozilla.org/en/PyXPCOM&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Qt-based gfx and widget&lt;br /&gt;
|description=Qt-based rendering and widget code&lt;br /&gt;
|owner=[mailto:romaxa@gmail.com Oleg Romashin]&lt;br /&gt;
|peers=[mailto:mozilla@rosenauer.org Wolfgang Rosenauer], [mailto:dougt@mozilla.com Doug Turner]&lt;br /&gt;
|group=dev-tech-widget&lt;br /&gt;
|source_dirs=widget/qt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Qt&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=RDF&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:axel@pike.org Axel Hecht]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-tech-rdf&lt;br /&gt;
|source_dirs=rdf/&lt;br /&gt;
|url=http://www.mozilla.org/rdf/doc/&lt;br /&gt;
|components=Core::RDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=security&lt;br /&gt;
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)&lt;br /&gt;
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|peers=[mailto:emaldona@redhat.com Elio Maldonado], [mailto:kaie@kuix.de Kai Engert], [mailto:ryan.sleevi@gmail.com Ryan Sleevi], [mailto:ekr@rtfm.com Eric Rescorla], [mailto:franziskuskiefer@gmail.com Franziskus Kiefer], [mailto:martin.thomson@gmail.com Martin Thomson], [mailto:ttaubert@mozilla.com Tim Taubert]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/&lt;br /&gt;
|url=http://mozilla.org/projects/security/pki/&lt;br /&gt;
|components=NSS, JSS, Core::Security, Core::Security: S/MIME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security - Mozilla PSM Glue&lt;br /&gt;
|description=Personal Security Manager&lt;br /&gt;
|owner=[mailto:dkeeler@mozilla.com David Keeler]&lt;br /&gt;
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=security/manager/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Security: PSM, Core::Security: UI&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Static analysis &amp;amp; rewriting for C++&lt;br /&gt;
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:sfink@mozilla.com Steve Fink], [mailto:michael@thelayzells.com Michael Layzell], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:birunthan@mohanathas.com Birunthan Mohanathas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Rewriting &amp;amp; Analysis&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=storage&lt;br /&gt;
|description=Storage APIs with a SQLite backend&lt;br /&gt;
|owner=[mailto:mak77@bonardo.net Marco Bonardo]&lt;br /&gt;
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:bent.mozillla@gmail.com Ben Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=db/sqlite3/, storage/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/Storage&lt;br /&gt;
|components=Toolkit::Storage, Core::SQL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=String&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:jlebar@mozilla.com Justin Lebar]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=string/, xpcom/string/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide&lt;br /&gt;
|components=Core::String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Style System&lt;br /&gt;
|description=CSS style sheet handling; style data computation&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:cam@mcc.id.au Cameron McCormack]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/style/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System&lt;br /&gt;
|components=Core::CSS Parsing and Computation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=SVG&lt;br /&gt;
|description=Scalable Vector Graphics&lt;br /&gt;
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]&lt;br /&gt;
|group=dev-tech-svg&lt;br /&gt;
|source_dirs=dom/svg/, layout/svg/, dom/smil/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Web/SVG&lt;br /&gt;
|components=Core::SVG&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Tamarin&lt;br /&gt;
|description=VM for ActionScript and JavaScript&lt;br /&gt;
|owner=Edwin Smith, [mailto:jodyer@adobe.com Jeff Dyer]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:stejohns@adobe.com Steven Johnson], [mailto:tierney@adobe.com Erik Tierney], [mailto:treilly@adobe.com Tom Reilly]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tamarin&lt;br /&gt;
|url=http://www.mozilla.org/projects/tamarin/&lt;br /&gt;
http://wiki.mozilla.org/tamarin/&lt;br /&gt;
http://hg.mozilla.org/tamarin-central/&lt;br /&gt;
http://hg.mozilla.org/tamarin-tracing/&lt;br /&gt;
|components=Tamarin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Test Harness&lt;br /&gt;
|description=In-tree test infrastructure and tools. Harnesses include, XPCShell, Mochitest (&amp;amp; Chrome), Reftest, JsREftest, Compiled Code Tests, Robocop, Mozmill, Marionette, Firefox UI Tests. Requests for new harnesses should go to Testing::General.&lt;br /&gt;
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron] (reftest), [mailto:jwalden@mit.edu Jeff Walden] (httpd.js, jsreftest), Rob Campbell (mochitest, mochitest chrome, marionette), [mailto:jmaher@mozilla.com Joel Maher] (reftest, mochitest, jsreftest), [mailto:ctalbert@mozilla.com Clint Talbert] (reftest, compiled code, mozmill), [mailto:geoffbrown@mozilla.com Geoff Brown] (robocop), [mailto:hskupin@mozilla.com Henrik Skupin] (mozmill, Firefox UI tests), [mailto:ato@mozilla.com Andreas Tolfsen] (marionette), [mailto:jgriffin Jonathan Griffin] (marionette), [mailto:dburns@mozilla.com David Burns] (marionette) [mailto:dminor@mozilla.com Dan Minor], [mailto:mjzffr@gmail.com Maja Frydrychowicz] (Firefox UI tests), [mailto:spolk@mozilla.com Syd Polk] (Firefox UI tests)&lt;br /&gt;
&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=/testing&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::General, Testing::Mochitest, Testing::Mochitest Chrome, Testing::Marionette, Testing::Mozmill, Testing::Reftest, Testing::XPCShell Harness, Testing::httpd.js&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Testing Infrastructure&lt;br /&gt;
|description=Testing tools and infrastructure for Mozilla projects, harnesses for automated tests, stand-alone test tools. Talos, Graph Server, Mozbase, Pulse, WOO, Bughunter, SUTAgent, Eideticker&lt;br /&gt;
|owner=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|peers=[mailto:bclary@bclary.com Bob Clary], [mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:ccooper@deadsquid.com Chris Cooper], [mailto:ctalbert@mozilla.com Clint Talbert], [mailto:robert@roberthelmer.com Robert Helmer], [mailto:jmaher@mozilla.com Joel Maher], Rob Campbell, [mailto:wlach@mozilla.com William Lachance], [mailto:jeads@mozilla.com Jonathan Eads], [mailto:jgriffin Jonathan Griffin], [mailto:bmoss@mozilla.com Bob Moss], [mailto:mcote@mozilla.com Mark Côté]&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=testing/, tools/httptester/, tools/page-loader/, tools/test-harness/, tools/tests/, tools/testserver/, tools/testy/&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::Infrastructure&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JS Marionette&lt;br /&gt;
|description=NodeJS test harness, marionette client, and other utilities for running marionette tests (submodule of Test Infrastructure)&lt;br /&gt;
|owner=[mailto:jlal@mozilla.com James Lal] &amp;lt;lightsofapollo&amp;gt;, [mailto:gaye@mozilla.com Gareth Aye] &amp;lt;gaye&amp;gt;&lt;br /&gt;
|peers=[mailto:aus@mozilla.com Ghislain &amp;quot;Aus&amp;quot; Lacroix] &amp;lt;auswerk&amp;gt;&lt;br /&gt;
|source_dirs=gaia/tests/jsmarionette&lt;br /&gt;
|components=Testing::JSMarionette&lt;br /&gt;
|group=dev-gaia&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCShell Test Harness&lt;br /&gt;
|description=The XPCShell Harness&lt;br /&gt;
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|source_dirs=testing/xpcshell&lt;br /&gt;
|components=Testing::XPCShell Harness&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Update Service&lt;br /&gt;
|description=server code for Mozilla Update services (aus, addons, pfs)&lt;br /&gt;
|owner=Mike Morgan&lt;br /&gt;
|peers=[mailto:jscott@mozilla.com Justin Scott], [mailto:shaver@mozilla.org Mike Shaver], [mailto:wclouser@mozilla.com Will Clouser]&lt;br /&gt;
|group=dev-amo&lt;br /&gt;
|source_dirs=webtools/addons/, webtools/aus/, webtools/update/&lt;br /&gt;
|url=http://wiki.mozilla.org/wiki/AMO&lt;br /&gt;
|components=AUS::Administration, AUS::Systems&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=View System&lt;br /&gt;
|description=The View Manager is responsible for handling &amp;quot;heavyweight&amp;quot; rendering (some clipping, compositing) and event handling tasks.&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=view/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Audio&lt;br /&gt;
|description=Support for the W3C Web Audio API specification.&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:padenot@mozilla.com Paul Adenot], [mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/media/webaudio&lt;br /&gt;
|url=https://wiki.mozilla.org/Web_Audio_API&lt;br /&gt;
|components=Core::Web Audio&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC&lt;br /&gt;
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:ehugg@cisco.com Ethan Hugg],  [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=N/A (see submodules &amp;quot;WebRTC Media&amp;quot; and &amp;quot;WebRTC Signaling&amp;quot;)&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:pavlov@pavlov.net Stuart Parmenter], [mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/, widget/xpwidgets/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Android&lt;br /&gt;
|description=The Android Port&lt;br /&gt;
|owner=[mailto:blassey.bugs@lassey.us Brad Lassey]&lt;br /&gt;
|peers=[mailto:jwillcox@mozilla.com James Willcox]&lt;br /&gt;
|group=dev-platforms-mobile&lt;br /&gt;
|source_dirs=widget/android/, embedding/android&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Android&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - GTK&lt;br /&gt;
|description=supported X widgetry and gfx&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/&lt;br /&gt;
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/&lt;br /&gt;
|components=Core::Widget: Gtk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - OS X&lt;br /&gt;
|description= Gecko&#039;s OS X compatibility layer.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:joshmoz@gmail.com Josh Aas], [mailto:bgirard@mozilla.com Benoit Girard], [mailto:spohl@mozilla.com Stephen Pohl], [mailto:smichaud@pobox.com Steven Michaud]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/cocoa/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Cocoa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Windows&lt;br /&gt;
|description=Windows widgets and desktop integration&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:dougt@mozilla.com Doug Turner], [mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:robarnold@cmu.edu Rob Arnold], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref], [mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/windows/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Win32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XBL&lt;br /&gt;
|description=eXtensible Binding Language&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|peers=[mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-xbl&lt;br /&gt;
|source_dirs=dom/xbl/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xbl/&lt;br /&gt;
|components=Core::XBL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XML&lt;br /&gt;
|description=XML in Mozilla, including XML, XHTML, Namespaces in XML, Associating Style Sheets with XML Documents, XML Linking and XML Extras. XML-related things that are not covered by more specific projects.&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:jst@mozilla.org Johnny Stenback]&lt;br /&gt;
|group=dev-tech-xml&lt;br /&gt;
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/xml/&lt;br /&gt;
|components=Core::XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPApps&lt;br /&gt;
|description=Cross-Platform Applications, mostly Navigator front end and application shell.&lt;br /&gt;
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-apps-seamonkey&lt;br /&gt;
|source_dirs=xpfe/&lt;br /&gt;
|url=http://www.mozilla.org/xpapps/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCOM&lt;br /&gt;
|description=The cross-platform object model and core data structures.&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]&lt;br /&gt;
|peers=[https://mozillians.org/en-US/u/dougt/ Doug Turner], [https://mozillians.org/en-US/u/bsmedberg/ Benjamin Smedberg]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=startupcache/, xpcom/%, xpcom/base/, xpcom/build/, xpcom/components/, xpcom/ds/, xpcom/glue/, xpcom/proxy/, xpcom/sample/, xpcom/stub/, xpcom/tests/, xpcom/threads/, xpcom/tools/, xpcom/windbgdlg/&lt;br /&gt;
|url=http://developer.mozilla.org/en/XPCOM&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPConnect&lt;br /&gt;
|description=Deep Magic&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]&lt;br /&gt;
|peersemeritus=[mailto:gal@uci.edu Andreas Gal]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=js/xpconnect/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::XPConnect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPIDL&lt;br /&gt;
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.&lt;br /&gt;
|owner=[mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|peers=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=xpcom/typelib/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xpidl&lt;br /&gt;
http://www.mozilla.org/scriptable&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPInstall&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dveditz@mozilla.com Dan Veditz]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-tech-xpinstall&lt;br /&gt;
|source_dirs=xpinstall/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Installer: XPInstall Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=xptcall&lt;br /&gt;
|description=XPTCall - platform-specific assembly for calling and implementing arbitrary XPCOM interfaces.&lt;br /&gt;
|owner=[mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:shaver@mozilla.org Mike Shaver]&lt;br /&gt;
|group=dev-xpcom&lt;br /&gt;
|source_dirs=xpcom/reflect/xptcall/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xptcall-faq.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPToolkit&lt;br /&gt;
|description=Cross-platform user interface toolkit&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:Jan.Varga@gmail.com Jan Varga]&lt;br /&gt;
|group=dev-tech-xul&lt;br /&gt;
|source_dirs=dom/xul/, layout/xul/&lt;br /&gt;
|url=http://www.mozilla.org/xpfe/&lt;br /&gt;
|components=Core::XP Toolkit/Widgets: Menus, Core::XP Toolkit/Widgets: XUL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XSLT Processor&lt;br /&gt;
|description=XSLT transformations processor&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xslt&lt;br /&gt;
|source_dirs=dom/xslt/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html&lt;br /&gt;
|components=Core::XSLT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XTF&lt;br /&gt;
|description=eXtensible Tag Framework&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:alex@croczilla.com alex@croczilla.com], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xbl&lt;br /&gt;
|source_dirs=content/xtf/, layout/xtf/&lt;br /&gt;
|url=http://www.croczilla.com/bits_and_pieces/xtf/&lt;br /&gt;
|components=Core::XTF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing&lt;br /&gt;
|description=Cross platform sandboxing&lt;br /&gt;
|owner=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]&lt;br /&gt;
|peers=[mailto:bowen@mozilla.com Bob Owen], [mailto:aklotz@mozilla.com Aaron Klotz], [https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes], [mailto:gDestuynder@mozilla.com Guillaume Destuynder], [mailto:bsmedberg@mozilla.com Benjamin Smedberg], [mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Windows &lt;br /&gt;
|description=Sandboxing for the Windows platform &lt;br /&gt;
|owner=[mailto:bowen@mozilla.com Bob Owen]&lt;br /&gt;
|peers=[mailto:netzen@gmail.com Brian Bondy], [mailto:aklotz@mozilla.com Aaron Klotz], [https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes], [mailto:jimm@mozilla.com Jim Mathies]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/win &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - OSX &lt;br /&gt;
|description=Sandboxing for the OSX platform &lt;br /&gt;
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox/mac &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing -  Linux &amp;amp; B2G&lt;br /&gt;
|description=Sandboxing for the Linux &amp;amp; B2G platforms&lt;br /&gt;
|owner=[mailto:jhector@mozilla.com Julian Hector]&lt;br /&gt;
|peers=[mailto:jld@mozilla.com Jed Davis] [mailto:gcp@mozilla.com Gian-Carlo Pascutto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/linux&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Submodules===&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Fennec&lt;br /&gt;
|description=Submodule of the build config covering Fennec&#039;s build system in mobile/android.&lt;br /&gt;
|owner=[mailto:gps@mozilla.com Gregory Szorc]&lt;br /&gt;
|peers=Same as Build Config plus [mailto:nalexander@mozilla.com Nicholas Alexander].&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Media&lt;br /&gt;
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ehugg@cisco.com Ethan Hugg],  [mailto:pkerr@mozilla.com Paul Kerr] &lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc, /dom/media/webrtc&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Audio/Video)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Signaling&lt;br /&gt;
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling&lt;br /&gt;
|owner=[mailto:bcampen@mozilla.com Byron Campen]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:abr@mozilla.com Adam Roach], [mailto:rjesup@mozilla.com Randell Jesup], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/peerconnection, /dom/media/peerconnection &#039;&#039;(note: file reorg underway)&#039;&#039;&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Signaling)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unassigned Bugzilla Components===&lt;br /&gt;
&lt;br /&gt;
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Core::File Handling&lt;br /&gt;
Core::Find Backend&lt;br /&gt;
Core::Gecko Profiler&lt;br /&gt;
Core::General&lt;br /&gt;
Core::HTML: Form Submission&lt;br /&gt;
Core::History: Global&lt;br /&gt;
Core::Image Blocking&lt;br /&gt;
Core::JavaScript Debugging APIs&lt;br /&gt;
Core::Localization&lt;br /&gt;
Core::Nanojit&lt;br /&gt;
Core::Networking: Domain Lists&lt;br /&gt;
Core::Print Preview&lt;br /&gt;
Core::Printing: Output&lt;br /&gt;
Core::Printing: Setup&lt;br /&gt;
Core::Profile: BackEnd&lt;br /&gt;
Core::Profile: Migration&lt;br /&gt;
Core::Profile: Roaming&lt;br /&gt;
Core::QuickLaunch (AKA turbo mode)&lt;br /&gt;
Core::Rewriting and Analysis&lt;br /&gt;
Core::Selection&lt;br /&gt;
Core::Serializers&lt;br /&gt;
Core::Spelling checker&lt;br /&gt;
Core::Tracking&lt;br /&gt;
Core::Web Services&lt;br /&gt;
Core::WebDAV&lt;br /&gt;
Core::Widget: OS/2&lt;br /&gt;
Core::Widget: Photon&lt;br /&gt;
Core::X-remote&lt;br /&gt;
Core::XForms&lt;br /&gt;
Core::XUL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1101634</id>
		<title>Modules/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1101634"/>
		<updated>2015-10-21T13:01:38Z</updated>

		<summary type="html">&lt;p&gt;Jorend: add [:arai] to JS team&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Do not edit this page&#039;&#039;&#039; unless either:&lt;br /&gt;
&lt;br /&gt;
# you are a module owner who is:&lt;br /&gt;
#* altering the list of peers in your module&lt;br /&gt;
#* adding or removing a sub-module&lt;br /&gt;
#* changing the owner of one of your sub-modules; or&lt;br /&gt;
# you have agreed a change of owner or module addition/deletion with the Module Ownership Module group, probably via [https://www.mozilla.org/about/forums/#governance mozilla.governance].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Accessibility&lt;br /&gt;
|description=Support for platform accessibility APIs. Accessibility APIs are used by 3rd party software like screen readers, screen magnifiers, and voice dictation software, which need information about document content and UI controls, as well as important events like changes of focus.&lt;br /&gt;
|owner=[mailto:surkov.alexander@gmail.com Alexander Surkov]&lt;br /&gt;
|peers=[mailto:bolterbugz@gmail.com David Bolter], [mailto:ginn.chen@oracle.com Ginn Chen], [mailto:trev.saunders@gmail.com Trevor Saunders], [mailto:marco.zehe@googlemail.com Marco Zehe] &lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Browser WebAPI&lt;br /&gt;
|description=Web API for rendering apps, browser windows and widgets.&lt;br /&gt;
|owner=[mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:fabrice@mozilla.com Fabrice Desré]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/browser-element/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build and Release Tools&lt;br /&gt;
|description=Tools related to build and release automation and configuration of release builds.&lt;br /&gt;
|owner=[mailto:nthomas@mozilla.com Nick Thomas]&lt;br /&gt;
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]&lt;br /&gt;
|group=release-engineering&lt;br /&gt;
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/&lt;br /&gt;
|url=https://wiki.mozilla.org/ReleaseEngineering&lt;br /&gt;
|components=Release Engineering::*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config&lt;br /&gt;
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.&lt;br /&gt;
|owner=[mailto:gps@mozilla.com Gregory Szorc] (:gps)&lt;br /&gt;
|peers=[mailto:mh@glandium.org Mike Hommey] (:glandium), [mailto:mshal@mozilla.com Mike Shal] (:mshal), [mailto:ted@mielczarek.org Ted Mielczarek] (:ted), [mailto:benjamin@smedbergs.us Benjamin Smedberg] (:bsmedberg) &lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=build/, config/, python/mozbuild, tools/cross-commit, tools/cvs2hg-import.py, tools/cvsmgmt/, tools/elf-dynstr-gc/, tools/trees.pl, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=http://www.mozilla.org/build/&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Code Analysis and Debugging Tools&lt;br /&gt;
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-performance&lt;br /&gt;
|source_dirs=tools/codesighs/, tools/debug/, tools/dreftool/, tools/dumpdeps/, tools/footprint/, tools/jprof/, tools/leaky/, tools/memory/, tools/module-deps/, tools/performance/, tools/post_compile/, tools/preloader/, tools/rb/, tools/reorder/, tools/trace-malloc/, tools/uuiddeps/, &lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content HTTP Headers&lt;br /&gt;
|description=HTTP headers related to content, e.g. User-Agent, Content-Type, Accept. (Transport-related headers are the responsibility of the Necko module owner.)&lt;br /&gt;
|owner=[mailto:gerv@mozilla.org Gervase Markham]&lt;br /&gt;
|peers=[mailto:lmandel@mozilla.com Lawrence Mandel]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs= &lt;br /&gt;
|url=https://developer.mozilla.org/en/Gecko_user_agent_string_reference&lt;br /&gt;
|components=Core::Networking: HTTP&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content Security&lt;br /&gt;
|description=Native content-based security features, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Subresource Integrity (SRI) and CORS.&lt;br /&gt;
|owner=[mailto:mozilla@sidstamm.com Sid Stamm]&lt;br /&gt;
|peers=[mailto:francois@mozilla.com François Marier], [mailto:jonas@sicking.cc Jonas Sicking],  [mailto:tvyas@mozilla.com Tanvi Vyas], [mailto:dveditz@mozilla.com Dan Veditz], [mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|group=dev-security&lt;br /&gt;
|source_dirs=dom/security&lt;br /&gt;
|components=Core::DOM: Security&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cookies and Permissions&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mchew@mozilla.com Monica Chew]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=extensions/cookie/, netwerk/cookie/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Networking: Cookies&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cycle Collector&lt;br /&gt;
|description=Code to break and collect objects within reference cycles&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]&lt;br /&gt;
|peers=Peter Van der Beken, Olli Pettay, David Baron&lt;br /&gt;
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=docshell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peers=[mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:jst@mozilla.org Johnny Stenback], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=docshell/, uriloader/, webshell/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Document Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Device Storage&lt;br /&gt;
|description=Support for the device storage API&lt;br /&gt;
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|peers=[mailto:dougt@dougt.org Doug Turner]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/devicestorage/, dom/interfaces/devicestorage/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/WebAPI/Device_Storage&lt;br /&gt;
|components=Core::DOM: Device Interfaces&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Document Object Model&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:bent@mozilla.com Ben Turner], [mailto:mounir@lamouri.fr Mounir Lamouri (still active, but slower to respond than previously)], [mailto:me@kylehuey.com Kyle Huey], [mailto:justin.lebar@gmail.com Justin Lebar], [mailto:hsivonen@iki.fi Henri Sivonen], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:baku@mozilla.com Andrea Marchesini],&lt;br /&gt;
[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/*, except directories covered by other modules&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core &amp;amp; HTML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Event Handling&lt;br /&gt;
|description=DOM Events and Event Handling &lt;br /&gt;
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/events and event handling related code elsewhere &lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM: Events, Core::Event Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Workers&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bent@mozilla.com Ben Turner]&lt;br /&gt;
|peers=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/workers/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_web_workers&lt;br /&gt;
|components=Core::DOM: Workers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IndexedDB&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bent@mozilla.com Ben Turner]&lt;br /&gt;
|peers=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/indexedDB/&lt;br /&gt;
|url=https://developer.mozilla.org/en/IndexedDB&lt;br /&gt;
|components=Core::DOM: IndexedDB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Editor&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=editor/&lt;br /&gt;
|url=http://www.mozilla.org/editor/&lt;br /&gt;
|components=Core::Editor&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Embedding&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jst@mozilla.org Johnny Stenback]&lt;br /&gt;
|group=dev-embedding&lt;br /&gt;
|source_dirs=embedding/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Embedding: APIs, Core::Embedding: ActiveX Wrapper, Core::Embedding: GRE Core, Core::Embedding: GTK Widget, Core::Embedding: MFC Embed, Core::Embedding: Mac, Core::Embedding: Packaging&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Find As You Type&lt;br /&gt;
|description=Find As You Type (formerly called Type Ahead Find) is a feature that allows quick web page navigation when you type a succession of characters in the body of the displayed page (not in an edit box of or drop down list). Currently seeks new owner.&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=extensions/typeaheadfind/&lt;br /&gt;
|url=http://www.mozilla.org/access/type-ahead/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Geolocation&lt;br /&gt;
|description=Implementation of the Geolocation W3C Spec, location provider apis, and wifi scanning code.&lt;br /&gt;
|owner=[mailto:dougt@dougt.org Doug Turner]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.net Josh Matthews], [mailto:kchen@mozilla.com Kan-Ru Chen], [gkeeley@mozilla.com Garvan Keeley]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/geolocation, dom/system/, netwerk/wifi&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_geolocation&lt;br /&gt;
|components=Core::Geolocation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Global Key Bindings&lt;br /&gt;
|description=Global hot keys in Mozilla for the browser, editor, mail-news and widgets. Does not include underlined menu accelerators and the like, as those are part of i18n.&lt;br /&gt;
|owner=[mailto:aaronleventhal@moonset.net Aaron Leventhal]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=dom/xbl/builtin/&lt;br /&gt;
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html&lt;br /&gt;
|components=Core::Keyboard: Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Graphics&lt;br /&gt;
|description=Mozilla graphics API&lt;br /&gt;
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other), [mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:jdrew@mozilla.com Joe Drew], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:bas.schouten@live.nl Bas Schouten](Layers, Windows), [mailto:bjacob@mozilla.com Benoit Jacob](gfx/gl), [mailto:bgirard@mozilla.com Benoit Girard](Compositor, Performance), [mailto:ajuma.bugzilla@alijuma.com Ali Juma], [mailto:jgilbert@mozilla.com Jeff Gilbert](WebGL, ANGLE), [mailto:george@mozilla.com George Wright](Canvas2D, Skia), [mailto:mwoodrow@mozilla.com Matt Woodrow](Layers API), [mailto:jdaggett@mozilla.com John Daggett](text/fonts), [mailto:jfkthame@googlemail.com Jonathan Kew](text/fonts), [mailto:nsilva@mozilla.com  Nicolas Silva](MozSurface), [mailto:ncameron@mozilla.com Nick Cameron], [mailto:sikeda@mozilla.com Sotaro Ikeda](B2G), [mailto:snorp@mozilla.com James Willcox](Android), [mailto:clord@mozilla.com Christopher Lord], [mailto:mstange@themasta.com Markus Stange](OS X)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/, dom/canvas/&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch&lt;br /&gt;
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=APZ (Graphics submodule)&lt;br /&gt;
|description=Asynchronous panning and zooming&lt;br /&gt;
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:tnikkel@mozilla.com Timothy Nikkel], [mailto:bgirard@mozilla.com Benoit Girard], [mailto:clord@mozilla.com Christopher Lord]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/layers/apz&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/APZ&lt;br /&gt;
|components=Core::Panning and Zooming&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Moz2D (Graphics submodule)&lt;br /&gt;
|description=Platform independent 2D graphics API&lt;br /&gt;
|owner=[mailto:bschouten@mozilla.com Bas Schouten]&lt;br /&gt;
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@mozilla.com Jonathan Watt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/2d&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D&lt;br /&gt;
|components=Core::Graphics&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=GTK Embedding Widget&lt;br /&gt;
|description=Gtk Widget for embedding Mozilla into Gtk applications&lt;br /&gt;
|owner=[mailto:marco@gnome.org Marco Pesenti Gritti]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:dougt@meer.net Doug Turner]&lt;br /&gt;
|group=dev-embedding&lt;br /&gt;
|source_dirs=&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Embedding: GTK Widget&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Legacy HTML Parser&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:rbs@maths.uq.edu.au rbs@maths.uq.edu.au]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=parser/htmlparser&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/doc/parser.html&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HAL&lt;br /&gt;
|description=Hardware Abstraction Layer&lt;br /&gt;
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands]&lt;br /&gt;
|peers=[mailto:gsvelto@mozilla.com Gabriele Svelto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=hal/&lt;br /&gt;
|components=Core::Hardware Abstraction Layer (HAL)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HTML Parser&lt;br /&gt;
|description=The HTML Parser transforms HTML source code into a DOM. It conforms to the HTML specification, and is mostly translated automatically from Java to C++.&lt;br /&gt;
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=parser/html&lt;br /&gt;
|url=http://about.validator.nu/&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=I18N Library&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura]&lt;br /&gt;
|group=dev-i18n&lt;br /&gt;
|source_dirs=intl/&lt;br /&gt;
|url=http://mozilla.org/projects/intl/index.html&lt;br /&gt;
|components=Core::Internationalization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=ImageLib&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:seth@mozilla.com Seth Fowler]&lt;br /&gt;
|peers=[mailto:netzen@gmail.com Brian Bondy], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:jlebar@mozilla.com Justin Lebar], [mailto:tnikkel@gmail.com Timothy Nikkel]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::ImageLib&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IPC&lt;br /&gt;
|description=Message-passing between threads and processes&lt;br /&gt;
|owner=[mailto:wmccloskey@mozilla.com Bill McCloskey]&lt;br /&gt;
|peers=[mailto:danderson@mozilla.com David Anderson], [mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bent.mozilla@gmail.com Ben Turner], [mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript&lt;br /&gt;
|description=JavaScript engine (SpiderMonkey)&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:jdemooij@mozilla.com Jan de Mooij], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:nnethercote@mozilla.com Nick Nethercote], [mailto:jwalden@mit.edu Jeff Walden], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:evilpies@gmail.com Tom Schuster], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:till@tillschneidereit.net Till Schneidereit], [mailto:efaust@mozilla.com Eric Faust], [mailto:nfitzgerald@mozilla.com Nick Fitzgerald], [mailto:luke@mozilla.com Luke Wagner], [mailto:arai.unmht@gmail.com Tooru Fujisawa], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:nmatsakis@mozilla.com Niko Matsakis], [mailto:ejpbruel@mozilla.com Eddy Bruel], [mailto:danderson@mozilla.com David Anderson], [mailto:igor@mir2.org Igor Bukanov], [mailto:brendan@mozilla.org Brendan Eich], [mailto:gal@mozilla.com Andreas Gal]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey,&lt;br /&gt;
http://developer.mozilla.org/en/docs/About_JavaScript&lt;br /&gt;
|components=Core::JavaScript Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript JIT&lt;br /&gt;
|description=JavaScript engine&#039;s JIT compilers (IonMonkey, Baseline)&lt;br /&gt;
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]&lt;br /&gt;
|peers=[mailto:danderson@mozilla.com David Anderson], [mailto:bbouvier@mozilla.com Benjamin Bouvier], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:evilpies@gmail.com  Tom Schuster], [mailto:sstangl@mozilla.com Sean Stangl], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:luke@mozilla.com Luke Wagner]&lt;br /&gt;
|group=dev-tech-js-engine-internals&lt;br /&gt;
|source_dirs=js/src/jit&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey&lt;br /&gt;
|components=Core::JavaScript Engine: JIT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript Debugger Backend&lt;br /&gt;
|description=JavaScript debugging hooks&lt;br /&gt;
|owner=[mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:rginda@hacksrus.com Rob Ginda]&lt;br /&gt;
|group=dev-apps-js-debugger&lt;br /&gt;
|source_dirs=js/jsd/&lt;br /&gt;
|url=http://www.mozilla.org/js/jsd&lt;br /&gt;
|components=Other Applications::Venkman JS Debugger&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=jsat&lt;br /&gt;
|description=Javascript screen reader that is used in Android and B2G&lt;br /&gt;
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]&lt;br /&gt;
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/jsat/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-ctypes&lt;br /&gt;
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src/ctypes/&lt;br /&gt;
|url=https://wiki.mozilla.org/JSctypes&lt;br /&gt;
|components=Core::js-ctypes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-tests&lt;br /&gt;
|description=JavaScript test suite&lt;br /&gt;
|owner=[mailto:bclary@bclary.com Bob Clary]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tests/&lt;br /&gt;
|url=http://www.mozilla.org/js/tests/library.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Layout Engine&lt;br /&gt;
|description=rendering tree construction, layout (reflow), painting, etc.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:smontagu@smontagu.org Simon Montagu], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:jfkthame@gmail.com Jonathan Kew], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:matt.woodrow@gmail.com Matt Woodrow]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/macbuild/, layout/printing/, layout/tables/, layout/tools/&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout, Core::Layout: Block and Inline, Core::Layout: Floats, Core::Layout: Form Controls, Core::Layout: HTML Frames, Core::Layout: Images, Core::Layout: Misc Code, Core::Layout: R &amp;amp; A Pos, Core::Layout: Tables, Core::Layout: Text, Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=libjar&lt;br /&gt;
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).&lt;br /&gt;
|owner=[mailto:tglek@mozilla.com Taras Glek]&lt;br /&gt;
|peers=[mailto:mwu@mozilla.com Michael Wu]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libjar&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MathML&lt;br /&gt;
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-tech-mathml&lt;br /&gt;
|source_dirs=layout/mathml/&lt;br /&gt;
|url=http://www.mozilla.org/projects/mathml/&lt;br /&gt;
|components=Core::MathML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Playback&lt;br /&gt;
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).&lt;br /&gt;
|owner=[mailto:cpearce@mozilla.com Chris Pearce]&lt;br /&gt;
|peers=[mailto:ajones@mozilla.com Anthony Jones], [mailto:kinetik@flim.org Matthew Gregan], [mailto:eflores@mozilla.com Edwin Flores], [mailto:jyavenard@mozilla.com Jean-Yves Avenard], [mailto:gsquelart@mozilla.com Gerald Squelart], [mailto:rgiles@mozilla.com Ralph Giles], [mailto:jwwang@mozilla.com JW Wang]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=dom/media, media/gmp-clearkey/, media/libcubeb/, media/libnestegg/, media/libogg/, media/libopus/, media/libstagefright/, media/libtheora/, media/libtremor/, media/libvorbis/, media/libvpx/, media/omx-plugin/, media/rlz/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Audio/Video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Transport&lt;br /&gt;
|description=Pluggable transport for real-time media&lt;br /&gt;
|owner=[mailto:ekr@rtfm.com Eric Rescorla]&lt;br /&gt;
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/mtransport&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::WebRTC::Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Memory Allocator&lt;br /&gt;
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=memory/&lt;br /&gt;
|components=Core::DMD, Core::jemalloc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mfbt&lt;br /&gt;
|description=mfbt is a collection of headers, macros, data structures, methods, and other functionality available for use and reuse throughout all Mozilla code (including SpiderMonkey and Gecko more broadly).&lt;br /&gt;
|owner=[mailto:jwalden@mit.edu Jeff Walden]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mfbt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::MFBT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozApps API &amp;amp; UI&lt;br /&gt;
|description=Implementation of the navigator.mozApps API&lt;br /&gt;
|owner=[mailto:fabrice@mozilla.com Fabrice Desré], [mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:myk@mozilla.org Myk Melez], [mailto:mar.castelluccio@studenti.unina.it Marco Castelluccio], [mailto:ferjmoreno@gmail.com Fernando Jiménez]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/apps/, dom/interfaces/apps, product specific files implementing UI hooks.&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM: Apps&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Mozglue&lt;br /&gt;
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd] (mozglue/linker), [mailto:kgupta@mozilla.com Kartikaya Gupta] (mozglue/android), [mailto:nchen@mozilla.com Jim Chen] (mozglue/android)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mozglue/&lt;br /&gt;
|components=Core::mozglue&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozilla-toplevel&lt;br /&gt;
|description=The top level directory for the mozilla tree.&lt;br /&gt;
|owner=[mailto:brendan@mozilla.org Brendan Eich]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=tools/README&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Necko&lt;br /&gt;
|description=The Mozilla Networking Library&lt;br /&gt;
|owner=[mailto:pmcmanus@mozilla.com Patrick McManus]&lt;br /&gt;
|peers=[mailto:cbiesinger@gmail.com Christian Biesinger],  [mailto:jduell.mcbugs@gmail.com Jason Duell], [mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:mnovotny@mozilla.com Michal Novotny], [mailto:hurley@mozilla.com Nick Hurley], [mailto:sworkman@mozilla.com Steve Workman]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=netwerk/%, netwerk/base/, netwerk/build/, netwerk/cache/, netwerk/dns/, netwerk/locales/, netwerk/mime/, netwerk/protocol/, netwerk/resources/, netwerk/socket/, netwerk/streamconv/, netwerk/system/, netwerk/test/, netwerk/testserver/&lt;br /&gt;
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko&lt;br /&gt;
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NSPR&lt;br /&gt;
|description=Netscape Portable Runtime&lt;br /&gt;
|owner=[mailto:nelson@bolyard.com Nelson Bolyard], [mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|peers=[mailto:ted.mielczarek@gmail.com Ted Mielczarek]&lt;br /&gt;
|group=dev-tech-nspr&lt;br /&gt;
|source_dirs=nsprpub/&lt;br /&gt;
|url=http://www.mozilla.org/projects/nspr/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/reference/html/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/release-notes/&lt;br /&gt;
|components=NSPR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PDF&lt;br /&gt;
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF&#039; format.&lt;br /&gt;
|owner=[mailto:cjones@mozilla.com Chris Jones], [mailto:gal@mozilla.com Andreas Gal]&lt;br /&gt;
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:bdahl@mozilla.com Brendan Dahl], [mailto:vnicolas@mozilla.com Vivien Nicolas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/pdf/&lt;br /&gt;
|url=https://github.com/mozilla/pdf.js&lt;br /&gt;
|components=Core::PDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Plugins&lt;br /&gt;
|description= NPAPI Plugin support.&lt;br /&gt;
|owner=[mailto:joshmoz@gmail.com Josh Aas]&lt;br /&gt;
|peers=[mailto:jst@mozilla.org Johnny Stenback], [mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:jmathies@mozilla.com Jim Mathies], [mailto:jschoenick@mozilla.com John Schoenick]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/plugins/, modules/plugin/&lt;br /&gt;
|url=https://wiki.mozilla.org/Plugins&lt;br /&gt;
|components=Core::Plug-ins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=Preference library&lt;br /&gt;
|owner=vacant&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libpref/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Preferences: Backend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Private Browsing&lt;br /&gt;
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.net Josh Matthews]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. &lt;br /&gt;
|url=https://wiki.mozilla.org/Private_Browsing&lt;br /&gt;
|components=Firefox::Private Browsing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Privilege Manager&lt;br /&gt;
|description=&amp;quot;caps&amp;quot;&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dveditz@cruzio.com Dan Veditz], [mailto:jst@mozilla.org Johnny Stenback]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=caps/&lt;br /&gt;
|url=http://www.mozilla.org/projects/security/components/index.html&lt;br /&gt;
|components=Core::Security: CAPS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Push Notifications&lt;br /&gt;
|description=Push is a way for application developers to send messages to their web applications.&lt;br /&gt;
|owner=[mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:nsm.nikhil@gmail.com Nikhil Marathe], [mailto:kcambridge@mozilla.com Kit Cambridge], [mailto:martin.thomson@gmail.com Martin Thomson], [mailto:ddamjanovic@mozilla.com Dragana Damjanovic]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/push, dom/simplepush&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PyXPCOM&lt;br /&gt;
|description=The Python to XPCOM bridge.&lt;br /&gt;
|owner=[mailto:toddw@activestate.com Todd Whiteman]&lt;br /&gt;
|peers=[mailto:mhammond@skippinet.com.au Mark Hammond]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=extension/python&lt;br /&gt;
|url=https://developer.mozilla.org/en/PyXPCOM&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Qt-based gfx and widget&lt;br /&gt;
|description=Qt-based rendering and widget code&lt;br /&gt;
|owner=[mailto:romaxa@gmail.com Oleg Romashin]&lt;br /&gt;
|peers=[mailto:mozilla@rosenauer.org Wolfgang Rosenauer], [mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|group=dev-tech-widget&lt;br /&gt;
|source_dirs=widget/qt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Qt&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=RDF&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:axel@pike.org Axel Hecht]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-tech-rdf&lt;br /&gt;
|source_dirs=rdf/&lt;br /&gt;
|url=http://www.mozilla.org/rdf/doc/&lt;br /&gt;
|components=Core::RDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=security&lt;br /&gt;
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)&lt;br /&gt;
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|peers=[mailto:emaldona@redhat.com Elio Maldonado], [mailto:kaie@kuix.de Kai Engert], [mailto:ryan.sleevi@gmail.com Ryan Sleevi]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/&lt;br /&gt;
|url=http://mozilla.org/projects/security/pki/&lt;br /&gt;
|components=NSS, JSS, Core::Security, Core::Security: S/MIME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security - Mozilla PSM Glue&lt;br /&gt;
|description=Personal Security Manager&lt;br /&gt;
|owner=[mailto:dkeeler@mozilla.com David Keeler]&lt;br /&gt;
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=security/manager/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Security: PSM, Core::Security: UI&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Static analysis &amp;amp; rewriting for C++&lt;br /&gt;
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:sfink@mozilla.com Steve Fink], [mailto:michael@thelayzells.com Michael Layzell], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:birunthan@mohanathas.com Birunthan Mohanathas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Rewriting &amp;amp; Analysis&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=storage&lt;br /&gt;
|description=Storage APIs with a SQLite backend&lt;br /&gt;
|owner=[mailto:mak77@bonardo.net Marco Bonardo]&lt;br /&gt;
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:bent.mozillla@gmail.com Ben Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=db/sqlite3/, storage/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/Storage&lt;br /&gt;
|components=Toolkit::Storage, Core::SQL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=String&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:jlebar@mozilla.com Justin Lebar]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=string/, xpcom/string/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide&lt;br /&gt;
|components=Core::String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Style System&lt;br /&gt;
|description=CSS style sheet handling; style data computation&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:cam@mcc.id.au Cameron McCormack]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/style/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System&lt;br /&gt;
|components=Core::CSS Parsing and Computation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=SVG&lt;br /&gt;
|description=Scalable Vector Graphics&lt;br /&gt;
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]&lt;br /&gt;
|group=dev-tech-svg&lt;br /&gt;
|source_dirs=dom/svg/, layout/svg/, dom/smil/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Web/SVG&lt;br /&gt;
|components=Core::SVG&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Tamarin&lt;br /&gt;
|description=VM for ActionScript and JavaScript&lt;br /&gt;
|owner=[mailto:edwsmith@adobe.com Edwin Smith], [mailto:jodyer@adobe.com Jeff Dyer]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:stejohns@adobe.com Steven Johnson], [mailto:tierney@adobe.com Erik Tierney], [mailto:treilly@adobe.com Tom Reilly]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tamarin&lt;br /&gt;
|url=http://www.mozilla.org/projects/tamarin/&lt;br /&gt;
http://wiki.mozilla.org/tamarin/&lt;br /&gt;
http://hg.mozilla.org/tamarin-central/&lt;br /&gt;
http://hg.mozilla.org/tamarin-tracing/&lt;br /&gt;
|components=Tamarin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Test Harness&lt;br /&gt;
|description=In-tree test infrastructure and tools. Harnesses include, XPCShell, Mochitest (&amp;amp; Chrome), Reftest, JsREftest, Compiled Code Tests, Robocop, Mozmill and Marionette. Requests for new harnesses should go to Testing::General.&lt;br /&gt;
|owner=[mailto:ted@mozilla.com Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron] (reftest), [mailto:jwalden@mit.edu Jeff Walden] (httpd.js, jsreftest), [mailto:rcampbell@mozilla.com Rob Campbell] (mochitest, mochitest chrome, marionette), [mailto:jmaher@mozilla.com Joel Maher] (reftest, mochitest, jsreftest), [mailto:ctalbert@mozilla.com Clint Talbert] (reftest, compiled code, mozmill), [mailto:geoffbrown@mozilla.com Geoff Brown] (robocop), [mailto:hskupin@mozilla.com Henrik Skupin] (mozmill), [mailto:ato@mozilla.com Andreas Tolfsen] (marionette), [mailto:jgriffin Jonathan Griffin] (marionette), [mailto:dburns@mozilla.com David Burns] (marionette) [mailto:dminor@mozilla.com Dan Minor]&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=/testing&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::General, Testing::Mochitest, Testing::Mochitest Chrome, Testing::Marionette, Testing::Mozmill, Testing::Reftest, Testing::XPCShell Harness, Testing::httpd.js&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Testing Infrastructure&lt;br /&gt;
|description=Testing tools and infrastructure for Mozilla projects, harnesses for automated tests, stand-alone test tools. Talos, Graph Server, Mozbase, Pulse, WOO, Bughunter, SUTAgent, Eideticker&lt;br /&gt;
|owner=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|peers=[mailto:bclary@bclary.com Bob Clary], [mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:ccooper@deadsquid.com Chris Cooper], [mailto:ctalbert@mozilla.com Clint Talbert], [mailto:robert@roberthelmer.com Robert Helmer], [mailto:jmaher@mozilla.com Joel Maher], [mailto:rcampbell@mozilla.com Rob Campbell], [mailto:wlach@mozilla.com William Lachance], [mailto:jeads@mozilla.com Jonathan Eads], [mailto:jgriffin Jonathan Griffin], [mailto:bmoss@mozilla.com Bob Moss], [mailto:mcote@mozilla.com Mark Côté]&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=testing/, tools/httptester/, tools/page-loader/, tools/test-harness/, tools/tests/, tools/testserver/, tools/testy/&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::Infrastructure&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JS Marionette&lt;br /&gt;
|description=NodeJS test harness, marionette client, and other utilities for running marionette tests (submodule of Test Infrastructure)&lt;br /&gt;
|owner=[mailto:jlal@mozilla.com James Lal] &amp;lt;lightsofapollo&amp;gt;, [mailto:gaye@mozilla.com Gareth Aye] &amp;lt;gaye&amp;gt;&lt;br /&gt;
|peers=[mailto:aus@mozilla.com Ghislain &amp;quot;Aus&amp;quot; Lacroix] &amp;lt;auswerk&amp;gt;&lt;br /&gt;
|source_dirs=gaia/tests/jsmarionette&lt;br /&gt;
|components=Testing::JSMarionette&lt;br /&gt;
|group=dev-gaia&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCShell Test Harness&lt;br /&gt;
|description=The XPCShell Harness&lt;br /&gt;
|owner=[mailto:ted.mielczarek@gmail.com Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|source_dirs=testing/xpcshell&lt;br /&gt;
|components=Testing::XPCShell Harness&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Update Service&lt;br /&gt;
|description=server code for Mozilla Update services (aus, addons, pfs)&lt;br /&gt;
|owner=[mailto:morgamic@mozilla.com Mike Morgan]&lt;br /&gt;
|peers=[mailto:jscott@mozilla.com Justin Scott], [mailto:shaver@mozilla.org Mike Shaver], [mailto:wclouser@mozilla.com Will Clouser]&lt;br /&gt;
|group=dev-amo&lt;br /&gt;
|source_dirs=webtools/addons/, webtools/aus/, webtools/update/&lt;br /&gt;
|url=http://wiki.mozilla.org/wiki/AMO&lt;br /&gt;
|components=AUS::Administration, AUS::Systems&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=View System&lt;br /&gt;
|description=The View Manager is responsible for handling &amp;quot;heavyweight&amp;quot; rendering (some clipping, compositing) and event handling tasks.&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=view/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Audio&lt;br /&gt;
|description=Support for the W3C Web Audio API specification.&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:padenot@mozilla.com Paul Adenot], [mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/media/webaudio&lt;br /&gt;
|url=https://wiki.mozilla.org/Web_Audio_API&lt;br /&gt;
|components=Core::Web Audio&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC&lt;br /&gt;
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:ehugg@cisco.com Ethan Hugg],  [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=N/A (see submodules &amp;quot;WebRTC Media&amp;quot; and &amp;quot;WebRTC Signaling&amp;quot;)&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:pavlov@pavlov.net Stuart Parmenter], [mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/, widget/xpwidgets/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Drag and Drop, Core::Widget&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Android&lt;br /&gt;
|description=The Android Port&lt;br /&gt;
|owner=[mailto:blassey.bugs@lassey.us Brad Lassey]&lt;br /&gt;
|peers=[mailto:jwillcox@mozilla.com James Willcox]&lt;br /&gt;
|group=dev-platforms-mobile&lt;br /&gt;
|source_dirs=widget/android/, embedding/android&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Android&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - GTK&lt;br /&gt;
|description=supported X widgetry and gfx&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/&lt;br /&gt;
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/&lt;br /&gt;
|components=Core::Widget: Gtk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - OS X&lt;br /&gt;
|description= Gecko&#039;s OS X compatibility layer.&lt;br /&gt;
|owner=[mailto:mstange@themasta.com Markus Stange]&lt;br /&gt;
|peers=[mailto:joshmoz@gmail.com Josh Aas], [mailto:bgirard@mozilla.com Benoit Girard], [mailto:spohl@mozilla.com Stephen Pohl], [mailto:smichaud@pobox.com Steven Michaud]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/cocoa/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Cocoa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Windows&lt;br /&gt;
|description=Windows widgets and desktop integration&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:dougt@meer.net Doug Turner], [mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:robarnold@cmu.edu Rob Arnold], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref], [mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/windows/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Win32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XBL&lt;br /&gt;
|description=eXtensible Binding Language&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|peers=[mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-xbl&lt;br /&gt;
|source_dirs=dom/xbl/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xbl/&lt;br /&gt;
|components=Core::XBL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XML&lt;br /&gt;
|description=XML in Mozilla, including XML, XHTML, Namespaces in XML, Associating Style Sheets with XML Documents, XML Linking and XML Extras. XML-related things that are not covered by more specific projects.&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:jst@mozilla.org Johnny Stenback]&lt;br /&gt;
|group=dev-tech-xml&lt;br /&gt;
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/xml/&lt;br /&gt;
|components=Core::XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPApps&lt;br /&gt;
|description=Cross-Platform Applications, mostly Navigator front end and application shell.&lt;br /&gt;
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:jag@tty.nl Peter Annema], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-apps-seamonkey&lt;br /&gt;
|source_dirs=xpfe/&lt;br /&gt;
|url=http://www.mozilla.org/xpapps/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCOM&lt;br /&gt;
|description=The cross-platform object model and core data structures.&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]&lt;br /&gt;
|peers=[https://mozillians.org/en-US/u/dougt/ Doug Turner], [https://mozillians.org/en-US/u/bsmedberg/ Benjamin Smedberg]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=startupcache/, xpcom/%, xpcom/base/, xpcom/build/, xpcom/components/, xpcom/ds/, xpcom/glue/, xpcom/proxy/, xpcom/sample/, xpcom/stub/, xpcom/tests/, xpcom/threads/, xpcom/tools/, xpcom/windbgdlg/&lt;br /&gt;
|url=http://developer.mozilla.org/en/XPCOM&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPConnect&lt;br /&gt;
|description=Deep Magic&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:gal@uci.edu Andreas Gal], [mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=js/xpconnect/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::XPConnect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPIDL&lt;br /&gt;
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.&lt;br /&gt;
|owner=[mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|peers=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=xpcom/typelib/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xpidl&lt;br /&gt;
http://www.mozilla.org/scriptable&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPInstall&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dveditz@cruzio.com Dan Veditz]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-tech-xpinstall&lt;br /&gt;
|source_dirs=xpinstall/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Installer: XPInstall Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=xptcall&lt;br /&gt;
|description=XPTCall - platform-specific assembly for calling and implementing arbitrary XPCOM interfaces.&lt;br /&gt;
|owner=[mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:shaver@mozilla.org Mike Shaver]&lt;br /&gt;
|group=dev-xpcom&lt;br /&gt;
|source_dirs=xpcom/reflect/xptcall/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xptcall-faq.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPToolkit&lt;br /&gt;
|description=Cross-platform user interface toolkit&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:hyatt@mozilla.org Dave Hyatt], [mailto:jag@tty.nl Peter Annema], [mailto:Jan.Varga@gmail.com Jan Varga]&lt;br /&gt;
|group=dev-tech-xul&lt;br /&gt;
|source_dirs=dom/xul/, layout/xul/&lt;br /&gt;
|url=http://www.mozilla.org/xpfe/&lt;br /&gt;
|components=Core::XP Toolkit/Widgets: Menus, Core::XP Toolkit/Widgets: XUL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XSLT Processor&lt;br /&gt;
|description=XSLT transformations processor&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xslt&lt;br /&gt;
|source_dirs=dom/xslt/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html&lt;br /&gt;
|components=Core::XSLT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XTF&lt;br /&gt;
|description=eXtensible Tag Framework&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:alex@croczilla.com alex@croczilla.com], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xbl&lt;br /&gt;
|source_dirs=content/xtf/, layout/xtf/&lt;br /&gt;
|url=http://www.croczilla.com/bits_and_pieces/xtf/&lt;br /&gt;
|components=Core::XTF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing&lt;br /&gt;
|description=Cross platform sandboxing&lt;br /&gt;
|owner=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]&lt;br /&gt;
|peers=[mailto:bowen@mozilla.com Bob Owen], [mailto:aklotz@mozilla.com Aaron Klotz], [https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes], [mailto:gDestuynder@mozilla.com Guillaume Destuynder], [mailto:bsmedberg@mozilla.com Benjamin Smedberg], [mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Windows &lt;br /&gt;
|description=Sandboxing for the Windows platform &lt;br /&gt;
|owner=[mailto:bowen@mozilla.com Bob Owen]&lt;br /&gt;
|peers=[mailto:netzen@gmail.com Brian Bondy], [mailto:aklotz@mozilla.com Aaron Klotz], [https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/win &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - OSX &lt;br /&gt;
|description=Sandboxing for the OSX platform &lt;br /&gt;
|owner=&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox/mac &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing -  Linux &amp;amp; B2G&lt;br /&gt;
|description=Sandboxing for the Linux &amp;amp; B2G platforms&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/linux&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Submodules===&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Fennec&lt;br /&gt;
|description=Submodule of the build config covering Fennec&#039;s build system in mobile/android.&lt;br /&gt;
|owner=[mailto:gps@mozilla.com Gregory Szorc]&lt;br /&gt;
|peers=Same as Build Config plus [mailto:nalexander@mozilla.com Nicholas Alexander].&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Media&lt;br /&gt;
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ehugg@cisco.com Ethan Hugg],  [mailto:pkerr@mozilla.com Paul Kerr] &lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/webrtc, /dom/media/webrtc&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Audio/Video)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC Signaling&lt;br /&gt;
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling&lt;br /&gt;
|owner=[mailto:bcampen@mozilla.com Byron Campen]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:abr@mozilla.com Adam Roach], [mailto:rjesup@mozilla.com Randell Jesup], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=/media/peerconnection, /dom/media/peerconnection &#039;&#039;(note: file reorg underway)&#039;&#039;&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC (Signaling)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unassigned Bugzilla Components===&lt;br /&gt;
&lt;br /&gt;
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Core::Event Handling&lt;br /&gt;
Core::File Handling&lt;br /&gt;
Core::Find Backend&lt;br /&gt;
Core::Gecko Profiler&lt;br /&gt;
Core::General&lt;br /&gt;
Core::HTML: Form Submission&lt;br /&gt;
Core::History: Global&lt;br /&gt;
Core::Identity&lt;br /&gt;
Core::Image Blocking&lt;br /&gt;
Core::JavaScript Debugging APIs&lt;br /&gt;
Core::Localization&lt;br /&gt;
Core::Nanojit&lt;br /&gt;
Core::Networking: Domain Lists&lt;br /&gt;
Core::Print Preview&lt;br /&gt;
Core::Printing: Output&lt;br /&gt;
Core::Printing: Setup&lt;br /&gt;
Core::Profile: BackEnd&lt;br /&gt;
Core::Profile: Migration&lt;br /&gt;
Core::Profile: Roaming&lt;br /&gt;
Core::QuickLaunch (AKA turbo mode)&lt;br /&gt;
Core::Rewriting and Analysis&lt;br /&gt;
Core::Selection&lt;br /&gt;
Core::Serializers&lt;br /&gt;
Core::Spelling checker&lt;br /&gt;
Core::Tracking&lt;br /&gt;
Core::Web Services&lt;br /&gt;
Core::WebDAV&lt;br /&gt;
Core::Widget: OS/2&lt;br /&gt;
Core::Widget: Photon&lt;br /&gt;
Core::X-remote&lt;br /&gt;
Core::XForms&lt;br /&gt;
Core::XUL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1071420</id>
		<title>Modules/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=1071420"/>
		<updated>2015-04-30T19:05:59Z</updated>

		<summary type="html">&lt;p&gt;Jorend: rearrange list of JS peers to put inactive peers at the end; add Eric Faust and Nick Fitzgerald&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Do not edit this page&#039;&#039;&#039; unless either:&lt;br /&gt;
&lt;br /&gt;
# you are a module owner who is:&lt;br /&gt;
#* altering the list of peers in your module&lt;br /&gt;
#* adding or removing a sub-module&lt;br /&gt;
#* changing the owner of one of your sub-modules; or&lt;br /&gt;
# you have agreed a change of owner or module addition/deletion with the Module Ownership Module group, probably via [https://www.mozilla.org/about/forums/#governance mozilla.governance].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Accessibility&lt;br /&gt;
|description=Support for platform accessibility APIs. Accessibility APIs are used by 3rd party software like screen readers, screen magnifiers, and voice dictation software, which need information about document content and UI controls, as well as important events like changes of focus.&lt;br /&gt;
|owner=[mailto:surkov.alexander@gmail.com Alexander Surkov]&lt;br /&gt;
|peers=[mailto:bolterbugz@gmail.com David Bolter], [mailto:ginn.chen@oracle.com Ginn Chen], [mailto:trev.saunders@gmail.com Trevor Saunders], [mailto:marco.zehe@googlemail.com Marco Zehe] &lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Browser WebAPI&lt;br /&gt;
|description=Web API for rendering apps, browser windows and widgets.&lt;br /&gt;
|owner=[mailto:kchen@mozilla.com Kan-Ru Chen]&lt;br /&gt;
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:fabrice@mozilla.com Fabrice Desré]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/browser-element/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build and Release Tools&lt;br /&gt;
|description=Tools related to build and release automation and configuration of release builds.&lt;br /&gt;
|owner=[mailto:nrthomas@gmail.com Nick Thomas]&lt;br /&gt;
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:ccooper@deadsquid.com Chris Cooper], [mailto:cmp@mozilla.org Chase Phillips], [mailto:mozpreed@sigkill.com John Paul Reed], [mailto:robert@roberthelmer.com Robert Helmer]&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=tools/botrunner.py, tools/build-environment/, tools/build/, tools/buildbot-configs/, tools/buildbot/, tools/buildbotcustom/, tools/l10n/, tools/MozBuild/, tools/patcher-configs/, tools/patcher/, tools/release/, tools/tinderbox-configs/, tools/tinderbox/, tools/update-packaging/, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=&lt;br /&gt;
|components=mozilla.org::Release Engineering, mozilla.org::Release Engineering: Custom Builds&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config&lt;br /&gt;
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.&lt;br /&gt;
|owner=[mailto:gps@mozilla.com Gregory Szorc] (:gps)&lt;br /&gt;
|peers=[mailto:mh@glandium.org Mike Hommey] (:glandium), [mailto:mshal@mozilla.com Mike Shal] (:mshal), [mailto:ted@mielczarek.org Ted Mielczarek] (:ted), [mailto:benjamin@smedbergs.us Benjamin Smedberg] (:bsmedberg) &lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=build/, config/, python/mozbuild, tools/cross-commit, tools/cvs2hg-import.py, tools/cvsmgmt/, tools/elf-dynstr-gc/, tools/trees.pl, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=http://www.mozilla.org/build/&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Code Analysis and Debugging Tools&lt;br /&gt;
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-performance&lt;br /&gt;
|source_dirs=tools/codesighs/, tools/debug/, tools/dreftool/, tools/dumpdeps/, tools/footprint/, tools/jprof/, tools/leaky/, tools/memory/, tools/module-deps/, tools/performance/, tools/post_compile/, tools/preloader/, tools/rb/, tools/reorder/, tools/trace-malloc/, tools/uuiddeps/, &lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content HTTP Headers&lt;br /&gt;
|description=HTTP headers related to content, e.g. User-Agent, Content-Type, Accept. (Transport-related headers are the responsibility of the Necko module owner.)&lt;br /&gt;
|owner=[mailto:gerv@mozilla.org Gervase Markham]&lt;br /&gt;
|peers=[mailto:lmandel@mozilla.com Lawrence Mandel]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs= &lt;br /&gt;
|url=https://developer.mozilla.org/en/Gecko_user_agent_string_reference&lt;br /&gt;
|components=Core::Networking: HTTP&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content Security&lt;br /&gt;
|description=Native content-based security features, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), and Safe Browsing.&lt;br /&gt;
|owner=[mailto:sstamm@mozilla.com Sid Stamm], [mailto:gpascutto@mozilla.com Gian-Carlo Pascutto]&lt;br /&gt;
|peers=[mailto:grobinson@mozilla.com Garrett Robinson],  [mailto:tvyas@mozilla.com Tanvi Vyas], [mailto:dveditz@mozilla.com Dan Veditz], [mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]&lt;br /&gt;
|group=dev-security&lt;br /&gt;
|source_dirs=dom/security&lt;br /&gt;
|components=Core::DOM: Security&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cookies and Permissions&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mchew@mozilla.com Monica Chew]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.com Josh Matthews], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:dwitte@gmail.com Dan Witte], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher (ping on irc)]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=extensions/cookie/, netwerk/cookie/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Networking: Cookies&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cycle Collector&lt;br /&gt;
|description=Code to break and collect objects within reference cycles&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]&lt;br /&gt;
|peers=Peter Van der Beken, Olli Pettay, David Baron&lt;br /&gt;
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
}}&lt;br /&gt;
{{Module&lt;br /&gt;
|name=docshell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peers=[mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:jst@mozilla.org Johnny Stenback], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=docshell/, uriloader/, webshell/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Document Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Device Storage&lt;br /&gt;
|description=Support for the device storage API&lt;br /&gt;
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|peers=[mailto:dougt@dougt.org Doug Turner]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/devicestorage/, dom/interfaces/devicestorage/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/WebAPI/Device_Storage&lt;br /&gt;
|components=Core::DOM: Device Interfaces&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Document Object Model&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:bent@mozilla.com Ben Turner], [mailto:mounir@lamouri.fr Mounir Lamouri (still active, but slower to respond than previously)], [mailto:me@kylehuey.com Kyle Huey], [mailto:justin.lebar@gmail.com Justin Lebar], [mailto:hsivonen@iki.fi Henri Sivonen], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:baku@mozilla.com Andrea Marchesini],&lt;br /&gt;
[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/*, except directories covered by other modules&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core &amp;amp; HTML, Core::DOM: Events&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Workers&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bent@mozilla.com Ben Turner]&lt;br /&gt;
|peers=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/workers/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_web_workers&lt;br /&gt;
|components=Core::DOM: Workers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IndexedDB&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bent@mozilla.com Ben Turner]&lt;br /&gt;
|peers=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:jvarga@mozilla.com Jan Varga]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/indexedDB/&lt;br /&gt;
|url=https://developer.mozilla.org/en/IndexedDB&lt;br /&gt;
|components=Core::DOM: IndexedDB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Editor&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=editor/&lt;br /&gt;
|url=http://www.mozilla.org/editor/&lt;br /&gt;
|components=Core::Editor&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Embedding&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jst@mozilla.org Johnny Stenback]&lt;br /&gt;
|group=dev-embedding&lt;br /&gt;
|source_dirs=embedding/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Embedding: APIs, Core::Embedding: ActiveX Wrapper, Core::Embedding: GRE Core, Core::Embedding: GTK Widget, Core::Embedding: MFC Embed, Core::Embedding: Mac, Core::Embedding: Packaging&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Find As You Type&lt;br /&gt;
|description=Find As You Type (formerly called Type Ahead Find) is a feature that allows quick web page navigation when you type a succession of characters in the body of the displayed page (not in an edit box of or drop down list). Currently seeks new owner.&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=extensions/typeaheadfind/&lt;br /&gt;
|url=http://www.mozilla.org/access/type-ahead/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Geolocation&lt;br /&gt;
|description=Implementation of the Geolocation W3C Spec, location provider apis, and wifi scanning code.&lt;br /&gt;
|owner=[mailto:dougt@dougt.org Doug Turner]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.net Josh Matthews], [mailto:kchen@mozilla.com Kan-Ru Chen], [gkeeley@mozilla.com Garvan Keeley]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/geolocation, dom/system/, netwerk/wifi&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_geolocation&lt;br /&gt;
|components=Core::Geolocation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Global Key Bindings&lt;br /&gt;
|description=Global hot keys in Mozilla for the browser, editor, mail-news and widgets. Does not include underlined menu accelerators and the like, as those are part of i18n.&lt;br /&gt;
|owner=[mailto:aaronleventhal@moonset.net Aaron Leventhal]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=dom/xbl/builtin/&lt;br /&gt;
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html&lt;br /&gt;
|components=Core::Keyboard: Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Graphics&lt;br /&gt;
|description=Mozilla graphics API&lt;br /&gt;
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other), [mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:jdrew@mozilla.com Joe Drew], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:bas.schouten@live.nl Bas Schouten](Layers, Windows), [mailto:bjacob@mozilla.com Benoit Jacob](gfx/gl), [mailto:bgirard@mozilla.com Benoit Girard](Compositor, Performance), [mailto:ajuma.bugzilla@alijuma.com Ali Juma], [mailto:jgilbert@mozilla.com Jeff Gilbert](WebGL, ANGLE), [mailto:george@mozilla.com George Wright](Canvas2D, Skia), [mailto:mwoodrow@mozilla.com Matt Woodrow](Layers API), [mailto:jdaggett@mozilla.com John Daggett](text/fonts), [mailto:jfkthame@googlemail.com Jonathan Kew](text/fonts), [mailto:nsilva@mozilla.com  Nicolas Silva](MozSurface), [mailto:ncameron@mozilla.com Nick Cameron], [mailto:sikeda@mozilla.com Sotaro Ikeda](B2G), [mailto:snorp@mozilla.com James Willcox](Android), [mailto:clord@mozilla.com Christopher Lord]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/, dom/canvas/&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch&lt;br /&gt;
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=APZ (Graphics submodule)&lt;br /&gt;
|description=Asynchronous panning and zooming&lt;br /&gt;
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]&lt;br /&gt;
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:tnikkel@mozilla.com Timothy Nikkel], [mailto:bgirard@mozilla.com Benoit Girard], [mailto:clord@mozilla.com Christopher Lord]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/layers/apz&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/APZ&lt;br /&gt;
|components=Core::Panning and Zooming&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Moz2D (Graphics submodule)&lt;br /&gt;
|description=Platform independent 2D graphics API&lt;br /&gt;
|owner=[mailto:bschouten@mozilla.com Bas Schouten]&lt;br /&gt;
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@mozilla.com Jonathan Watt]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source=gfx/2d&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D&lt;br /&gt;
|components=Core::Graphics&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=GTK Embedding Widget&lt;br /&gt;
|description=Gtk Widget for embedding Mozilla into Gtk applications&lt;br /&gt;
|owner=[mailto:marco@gnome.org Marco Pesenti Gritti]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:dougt@meer.net Doug Turner]&lt;br /&gt;
|group=dev-embedding&lt;br /&gt;
|source_dirs=&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Embedding: GTK Widget&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Legacy HTML Parser&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:rbs@maths.uq.edu.au rbs@maths.uq.edu.au]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=parser/htmlparser&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/doc/parser.html&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HAL&lt;br /&gt;
|description=Hardware Abstraction Layer&lt;br /&gt;
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands]&lt;br /&gt;
|peers=[mailto:gsvelto@mozilla.com Gabriele Svelto]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=hal/&lt;br /&gt;
|components=Core::Hardware Abstraction Layer (HAL)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HTML Parser&lt;br /&gt;
|description=The HTML Parser transforms HTML source code into a DOM. It conforms to the HTML specification, and is mostly translated automatically from Java to C++.&lt;br /&gt;
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=parser/html&lt;br /&gt;
|url=http://about.validator.nu/&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=I18N Library&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura]&lt;br /&gt;
|group=dev-i18n&lt;br /&gt;
|source_dirs=intl/&lt;br /&gt;
|url=http://mozilla.org/projects/intl/index.html&lt;br /&gt;
|components=Core::Internationalization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=ImageLib&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:seth@mozilla.com Seth Fowler]&lt;br /&gt;
|peers=[mailto:netzen@gmail.com Brian Bondy], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:jlebar@mozilla.com Justin Lebar], [mailto:tnikkel@gmail.com Timothy Nikkel]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::ImageLib&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IPC&lt;br /&gt;
|description=Message-passing between threads and processes&lt;br /&gt;
|owner=[mailto:cjones@mozilla.com Chris Jones]&lt;br /&gt;
|peers=[mailto:danderson@mozilla.com David Anderson], [mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript&lt;br /&gt;
|description=JavaScript engine (SpiderMonkey)&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:jdemooij@mozilla.com Jan de Mooij], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:nnethercote@mozilla.com Nick Nethercote], [mailto:jwalden@mit.edu Jeff Walden], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:evilpies@gmail.com Tom Schuster], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:till@tillschneidereit.net Till Schneidereit], [mailto:efaust@mozilla.com Eric Faust], [mailto:nfitzgerald@mozilla.com Nick Fitzgerald], [mailto:luke@mozilla.com Luke Wagner], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:nmatsakis@mozilla.com Niko Matsakis], [mailto:ejpbruel@mozilla.com Eddy Bruel], [mailto:danderson@mozilla.com David Anderson], [mailto:igor@mir2.org Igor Bukanov], [mailto:brendan@mozilla.org Brendan Eich], [mailto:gal@mozilla.com Andreas Gal]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey,&lt;br /&gt;
http://developer.mozilla.org/en/docs/About_JavaScript&lt;br /&gt;
|components=Core::JavaScript Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript JIT&lt;br /&gt;
|description=JavaScript engine&#039;s JIT compilers (IonMonkey, Baseline)&lt;br /&gt;
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]&lt;br /&gt;
|peers=[mailto:danderson@mozilla.com David Anderson], [mailto:shu@mozilla.com Shu-yu Guo], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:mrosenberg@mozilla.com Marty Rosenberg], [mailto:evilpies@gmail.com  Tom Schuster], [mailto:sstangl@mozilla.com Sean Stangl], [mailto:hv1989@gmail.com Hannes Verschore], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:luke@mozilla.com Luke Wagner]&lt;br /&gt;
|group=dev-tech-js-engine-internals&lt;br /&gt;
|source_dirs=js/src/jit&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey&lt;br /&gt;
|components=Core::JavaScript Engine: JIT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript Debugger Backend&lt;br /&gt;
|description=JavaScript debugging hooks&lt;br /&gt;
|owner=[mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:rginda@hacksrus.com Rob Ginda]&lt;br /&gt;
|group=dev-apps-js-debugger&lt;br /&gt;
|source_dirs=js/jsd/&lt;br /&gt;
|url=http://www.mozilla.org/js/jsd&lt;br /&gt;
|components=Other Applications::Venkman JS Debugger&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=jsat&lt;br /&gt;
|description=Javascript screen reader that is used in Android and B2G&lt;br /&gt;
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]&lt;br /&gt;
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/jsat/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-ctypes&lt;br /&gt;
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.&lt;br /&gt;
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src/ctypes/&lt;br /&gt;
|url=https://wiki.mozilla.org/JSctypes&lt;br /&gt;
|components=Core::js-ctypes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-tests&lt;br /&gt;
|description=JavaScript test suite&lt;br /&gt;
|owner=[mailto:bclary@bclary.com Bob Clary]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tests/&lt;br /&gt;
|url=http://www.mozilla.org/js/tests/library.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Layout Engine&lt;br /&gt;
|description=rendering tree construction, layout (reflow), painting, etc.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:smontagu@smontagu.org Simon Montagu], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:jfkthame@gmail.com Jonathan Kew], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:matt.woodrow@gmail.com Matt Woodrow]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/macbuild/, layout/printing/, layout/tables/, layout/tools/&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout, Core::Layout: Block and Inline, Core::Layout: Floats, Core::Layout: Form Controls, Core::Layout: HTML Frames, Core::Layout: Images, Core::Layout: Misc Code, Core::Layout: R &amp;amp; A Pos, Core::Layout: Tables, Core::Layout: Text, Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=libjar&lt;br /&gt;
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).&lt;br /&gt;
|owner=[mailto:tglek@mozilla.com Taras Glek]&lt;br /&gt;
|peers=[mailto:mwu@mozilla.com Michael Wu]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libjar&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MathML&lt;br /&gt;
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-tech-mathml&lt;br /&gt;
|source_dirs=layout/mathml/&lt;br /&gt;
|url=http://www.mozilla.org/projects/mathml/&lt;br /&gt;
|components=Core::MathML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Media Transport&lt;br /&gt;
|description=Pluggable transport for real-time media&lt;br /&gt;
|owner=[mailto:ekr@rtfm.com Eric Rescorla]&lt;br /&gt;
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/mtransport&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::WebRTC::Networking&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Memory Allocator&lt;br /&gt;
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=memory/&lt;br /&gt;
|components=Core::DMD, Core::jemalloc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mfbt&lt;br /&gt;
|description=mfbt is a collection of headers, macros, data structures, methods, and other functionality available for use and reuse throughout all Mozilla code (including SpiderMonkey and Gecko more broadly).&lt;br /&gt;
|owner=[mailto:jwalden@mit.edu Jeff Walden]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mfbt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::MFBT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozApps API &amp;amp; UI&lt;br /&gt;
|description=Implementation of the navigator.mozApps API&lt;br /&gt;
|owner=[mailto:fabrice@mozilla.com Fabrice Desré], [mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:myk@mozilla.org Myk Melez], [mailto:mar.castelluccio@studenti.unina.it Marco Castelluccio], [mailto:ferjmoreno@gmail.com Fernando Jiménez]&lt;br /&gt;
|group=dev-webapi&lt;br /&gt;
|source_dirs=dom/apps/, dom/interfaces/apps, product specific files implementing UI hooks.&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::DOM: Apps&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Mozglue&lt;br /&gt;
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.&lt;br /&gt;
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]&lt;br /&gt;
|peers=[mailto:froydnj@mozilla.com Nathan Froyd] (mozglue/linker), [mailto:kgupta@mozilla.com Kartikaya Gupta] (mozglue/android), [mailto:nchen@mozilla.com Jim Chen] (mozglue/android)&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mozglue/&lt;br /&gt;
|components=Core::mozglue&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozilla-toplevel&lt;br /&gt;
|description=The top level directory for the mozilla tree.&lt;br /&gt;
|owner=[mailto:brendan@mozilla.org Brendan Eich]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=tools/README&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Necko&lt;br /&gt;
|description=The Mozilla Networking Library&lt;br /&gt;
|owner=[mailto:pmcmanus@mozilla.com Patrick McManus]&lt;br /&gt;
|peers=[mailto:cbiesinger@gmail.com Christian Biesinger],  [mailto:jduell.mcbugs@gmail.com Jason Duell], [mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:mnovotny@mozilla.com Michal Novotny], [mailto:hurley@mozilla.com Nick Hurley], [mailto:sworkman@mozilla.com Steve Workman]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=netwerk/%, netwerk/base/, netwerk/build/, netwerk/cache/, netwerk/dns/, netwerk/locales/, netwerk/mime/, netwerk/protocol/, netwerk/resources/, netwerk/socket/, netwerk/streamconv/, netwerk/system/, netwerk/test/, netwerk/testserver/&lt;br /&gt;
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko&lt;br /&gt;
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NSPR&lt;br /&gt;
|description=Netscape Portable Runtime&lt;br /&gt;
|owner=[mailto:nelson@bolyard.com Nelson Bolyard], [mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|peers=[mailto:ted.mielczarek@gmail.com Ted Mielczarek]&lt;br /&gt;
|group=dev-tech-nspr&lt;br /&gt;
|source_dirs=nsprpub/&lt;br /&gt;
|url=http://www.mozilla.org/projects/nspr/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/reference/html/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/release-notes/&lt;br /&gt;
|components=NSPR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PDF&lt;br /&gt;
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF&#039; format.&lt;br /&gt;
|owner=[mailto:cjones@mozilla.com Chris Jones], [mailto:gal@mozilla.com Andreas Gal]&lt;br /&gt;
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:bdahl@mozilla.com Brendan Dahl], [mailto:vnicolas@mozilla.com Vivien Nicolas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/pdf/&lt;br /&gt;
|url=https://github.com/mozilla/pdf.js&lt;br /&gt;
|components=Core::PDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Plugins&lt;br /&gt;
|description= NPAPI Plugin support.&lt;br /&gt;
|owner=[mailto:joshmoz@gmail.com Josh Aas]&lt;br /&gt;
|peers=[mailto:jst@mozilla.org Johnny Stenback], [mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:jmathies@mozilla.com Jim Mathies], [mailto:jschoenick@mozilla.com John Schoenick]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/plugins/, modules/plugin/&lt;br /&gt;
|url=https://wiki.mozilla.org/Plugins&lt;br /&gt;
|components=Core::Plug-ins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=Preference library&lt;br /&gt;
|owner=vacant&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libpref/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Preferences: Backend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Privilege Manager&lt;br /&gt;
|description=&amp;quot;caps&amp;quot;&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dveditz@cruzio.com Dan Veditz], [mailto:jst@mozilla.org Johnny Stenback]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=caps/&lt;br /&gt;
|url=http://www.mozilla.org/projects/security/components/index.html&lt;br /&gt;
|components=Core::Security: CAPS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Push Notifications&lt;br /&gt;
|description=Push is a way for application developers to send messages to their web applications.&lt;br /&gt;
|owner=[mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|peers=[mailto:nsm.nikhil@gmail.com Nikhil Marathe], [mailto:kcambridge@mozilla.com Kit Cambridge]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/push, dom/simplepush&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PyXPCOM&lt;br /&gt;
|description=The Python to XPCOM bridge.&lt;br /&gt;
|owner=[mailto:toddw@activestate.com Todd Whiteman]&lt;br /&gt;
|peers=[mailto:mhammond@skippinet.com.au Mark Hammond]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=extension/python&lt;br /&gt;
|url=https://developer.mozilla.org/en/PyXPCOM&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Qt-based gfx and widget&lt;br /&gt;
|description=Qt-based rendering and widget code&lt;br /&gt;
|owner=[mailto:romaxa@gmail.com Oleg Romashin]&lt;br /&gt;
|peers=[mailto:mozilla@rosenauer.org Wolfgang Rosenauer], [mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|group=dev-tech-widget&lt;br /&gt;
|source_dirs=widget/qt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Qt&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=RDF&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:axel@pike.org Axel Hecht]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-tech-rdf&lt;br /&gt;
|source_dirs=rdf/&lt;br /&gt;
|url=http://www.mozilla.org/rdf/doc/&lt;br /&gt;
|components=Core::RDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=security&lt;br /&gt;
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)&lt;br /&gt;
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|peers=[mailto:emaldona@redhat.com Elio Maldonado], [mailto:kaie@kuix.de Kai Engert], [mailto:ryan.sleevi@gmail.com Ryan Sleevi]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/&lt;br /&gt;
|url=http://mozilla.org/projects/security/pki/&lt;br /&gt;
|components=NSS, JSS, Core::Security, Core::Security: S/MIME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security - Mozilla PSM Glue&lt;br /&gt;
|description=Personal Security Manager&lt;br /&gt;
|owner=[mailto:dkeeler@mozilla.com David Keeler]&lt;br /&gt;
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=security/manager/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Security: PSM, Core::Security: UI&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=storage&lt;br /&gt;
|description=Storage APIs with a SQLite backend&lt;br /&gt;
|owner=[mailto:mak77@bonardo.net Marco Bonardo]&lt;br /&gt;
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:bent.mozillla@gmail.com Ben Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=db/sqlite3/, storage/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/Storage&lt;br /&gt;
|components=Toolkit::Storage, Core::SQL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=String&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:jlebar@mozilla.com Justin Lebar]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=string/, xpcom/string/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide&lt;br /&gt;
|components=Core::String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Style System&lt;br /&gt;
|description=CSS style sheet handling; style data computation&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:cam@mcc.id.au Cameron McCormack]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/style/&lt;br /&gt;
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System&lt;br /&gt;
|components=Core::CSS Parsing and Computation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=SVG&lt;br /&gt;
|description=Scalable Vector Graphics&lt;br /&gt;
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]&lt;br /&gt;
|group=dev-tech-svg&lt;br /&gt;
|source_dirs=dom/svg/, layout/svg/, dom/smil/&lt;br /&gt;
|url=https://developer.mozilla.org/en-US/docs/Web/SVG&lt;br /&gt;
|components=Core::SVG&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Tamarin&lt;br /&gt;
|description=VM for ActionScript and JavaScript&lt;br /&gt;
|owner=[mailto:edwsmith@adobe.com Edwin Smith], [mailto:jodyer@adobe.com Jeff Dyer]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:stejohns@adobe.com Steven Johnson], [mailto:tierney@adobe.com Erik Tierney], [mailto:treilly@adobe.com Tom Reilly]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tamarin&lt;br /&gt;
|url=http://www.mozilla.org/projects/tamarin/&lt;br /&gt;
http://wiki.mozilla.org/tamarin/&lt;br /&gt;
http://hg.mozilla.org/tamarin-central/&lt;br /&gt;
http://hg.mozilla.org/tamarin-tracing/&lt;br /&gt;
|components=Tamarin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Test Harness&lt;br /&gt;
|description=In-tree test infrastructure and tools. Harnesses include, XPCShell, Mochitest (&amp;amp; Chrome), Reftest, JsREftest, Compiled Code Tests, Robocop, Mozmill and Marionette. Requests for new harnesses should go to Testing::General.&lt;br /&gt;
|owner=[mailto:ted@mozilla.com Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron] (reftest), [mailto:jwalden@mit.edu Jeff Walden] (httpd.js, jsreftest), [mailto:rcampbell@mozilla.com Rob Campbell] (mochitest, mochitest chrome, marionette), [mailto:jmaher@mozilla.com Joel Maher] (reftest, mochitest, jsreftest), [mailto:ctalbert@mozilla.com Clint Talbert] (reftest, compiled code, mozmill), [mailto:geoffbrown@mozilla.com Geoff Brown] (robocop), [mailto:hskupin@mozilla.com Henrik Skupin] (mozmill), [mailto:mdas@mozilla.com Malini Das] (marionette), [mailto:jgriffin Jonathan Griffin] (marionette), [mailto:dburns@mozilla.com David Burns] (marionette) [mailto:dminor@mozilla.com Dan Minor]&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=/testing&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::General, Testing::Mochitest, Testing::Mochitest Chrome, Testing::Marionette, Testing::Mozmill, Testing::Reftest, Testing::XPCShell Harness, Testing::httpd.js&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Testing Infrastructure&lt;br /&gt;
|description=Testing tools and infrastructure for Mozilla projects, harnesses for automated tests, stand-alone test tools. Talos, Graph Server, Mozbase, Pulse, WOO, Bughunter, SUTAgent, Eideticker&lt;br /&gt;
|owner=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|peers=[mailto:bclary@bclary.com Bob Clary], [mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:ccooper@deadsquid.com Chris Cooper], [mailto:ctalbert@mozilla.com Clint Talbert], [mailto:robert@roberthelmer.com Robert Helmer], [mailto:jmaher@mozilla.com Joel Maher], [mailto:rcampbell@mozilla.com Rob Campbell], [mailto:wlach@mozilla.com William Lachance], [mailto:jeads@mozilla.com Jonathan Eads], [mailto:jgriffin Jonathan Griffin], [mailto:bmoss@mozilla.com Bob Moss], [mailto:mcote@mozilla.com Mark Côté]&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=testing/, tools/httptester/, tools/page-loader/, tools/test-harness/, tools/tests/, tools/testserver/, tools/testy/&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::Infrastructure&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JS Marionette Harness and Tools&lt;br /&gt;
|description=Test harness and associated tools for running marionette tests on NodeJS (submodule of Test Infrastructure)&lt;br /&gt;
|owner=[mailto:jlal@mozilla.com James Lal] &amp;lt;lightsofapollo&amp;gt;, [mailto:gaye@mozilla.com Gareth Aye] &amp;lt;gaye&amp;gt;&lt;br /&gt;
|peers=[mailto:aus@mozilla.com Ghislain &amp;quot;Aus&amp;quot; Lacroix] &amp;lt;auswerk&amp;gt;, [mailto:mike@bocoup.com Mike Pennisi] &amp;lt;jugglinmike&amp;gt;, [mailto:evanxd@mozilla.com Evan Tseng] &amp;lt;evanxd&amp;gt;&lt;br /&gt;
|source_dirs=These are all mozilla-b2g github repos: [https://github.com/mozilla-b2g/marionette-js-runner Marionette JS Runner], [https://github.com/mozilla-b2g/mocha-json-proxy Mocha JSON Proxy], [https://github.com/mozilla-b2g/mocha-tbpl-reporter Mocha TBPL Reporter], [https://github.com/mozilla-b2g/marionette-js-client Marionette JS Client], [https://github.com/mozilla-b2g/sockit-to-me Sockit To Me], [https://github.com/mozilla-b2g/marionette-apps Marionette Apps], [https://github.com/mozilla-b2g/marionette-js-logger Marionette JS Logger], [https://github.com/mozilla-b2g/marionette-b2gdesktop-host Marionette B2G Desktop Host], [https://github.com/mozilla-b2g/marionette-firefox-host Marionette Firefox Host], [https://github.com/mozilla-b2g/marionette-profile-builder Marionette Profile Builder], [https://github.com/mozilla-b2g/mozilla-profile-builder Mozilla Profile Builder]&lt;br /&gt;
|components=Testing::JSMarionette&lt;br /&gt;
|group=dev-gaia&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCShell Test Harness&lt;br /&gt;
|description=The XPCShell Harness&lt;br /&gt;
|owner=[mailto:ted.mielczarek@gmail.com Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|source_dirs=testing/xpcshell&lt;br /&gt;
|components=Testing::XPCShell Harness&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Update Service&lt;br /&gt;
|description=server code for Mozilla Update services (aus, addons, pfs)&lt;br /&gt;
|owner=[mailto:morgamic@mozilla.com Mike Morgan]&lt;br /&gt;
|peers=[mailto:jscott@mozilla.com Justin Scott], [mailto:shaver@mozilla.org Mike Shaver], [mailto:wclouser@mozilla.com Will Clouser]&lt;br /&gt;
|group=dev-amo&lt;br /&gt;
|source_dirs=webtools/addons/, webtools/aus/, webtools/update/&lt;br /&gt;
|url=http://wiki.mozilla.org/wiki/AMO&lt;br /&gt;
|components=AUS::Administration, AUS::Systems&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=View System&lt;br /&gt;
|description=The View Manager is responsible for handling &amp;quot;heavyweight&amp;quot; rendering (some clipping, compositing) and event handling tasks.&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=view/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Audio&lt;br /&gt;
|description=Support for the W3C Web Audio API specification.&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:padenot@mozilla.com Paul Adenot]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/media/webaudio&lt;br /&gt;
|url=https://wiki.mozilla.org/Web_Audio_API&lt;br /&gt;
|components=Core::Web Audio&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC&lt;br /&gt;
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access (on desktop at least)&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:ehugg@cisco.com Ethan Hugg], [mailto:tterriberry@mozilla.com Tim Terriberry], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/webrtc, dom/media/webrtc&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC, Core::WebRTC (Audio/Video), Core::WebRTC (Networking), Core::WebRTC (Signaling)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:pavlov@pavlov.net Stuart Parmenter], [mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/, widget/xpwidgets/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Drag and Drop, Core::Widget&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Android&lt;br /&gt;
|description=The Android Port&lt;br /&gt;
|owner=[mailto:blassey.bugs@lassey.us Brad Lassey]&lt;br /&gt;
|peers=[mailto:jwillcox@mozilla.com James Willcox]&lt;br /&gt;
|group=dev-platforms-mobile&lt;br /&gt;
|source_dirs=widget/android/, embedding/android&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Android&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - GTK&lt;br /&gt;
|description=supported X widgetry and gfx&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/&lt;br /&gt;
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/&lt;br /&gt;
|components=Core::Widget: Gtk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - OS X&lt;br /&gt;
|description= Gecko&#039;s OS X compatibility layer.&lt;br /&gt;
|owner=[mailto:smichaud@pobox.com Steven Michaud]&lt;br /&gt;
|peers=[mailto:joshmoz@gmail.com Josh Aas], [mailto:mstange@themasta.com Markus Stange], [mailto:bgirard@mozilla.com Benoit Girard], [mailto:spohl@mozilla.com Stephen Pohl]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/cocoa/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Cocoa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Windows&lt;br /&gt;
|description=Windows widgets and desktop integration&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:dougt@meer.net Doug Turner], [mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:robarnold@cmu.edu Rob Arnold], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref], [mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/windows/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Win32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XBL&lt;br /&gt;
|description=eXtensible Binding Language&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|peers=[mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-xbl&lt;br /&gt;
|source_dirs=dom/xbl/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xbl/&lt;br /&gt;
|components=Core::XBL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XML&lt;br /&gt;
|description=XML in Mozilla, including XML, XHTML, Namespaces in XML, Associating Style Sheets with XML Documents, XML Linking and XML Extras. XML-related things that are not covered by more specific projects.&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:jst@mozilla.org Johnny Stenback]&lt;br /&gt;
|group=dev-tech-xml&lt;br /&gt;
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/xml/&lt;br /&gt;
|components=Core::XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPApps&lt;br /&gt;
|description=Cross-Platform Applications, mostly Navigator front end and application shell.&lt;br /&gt;
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:jag@tty.nl Peter Annema], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-apps-seamonkey&lt;br /&gt;
|source_dirs=xpfe/&lt;br /&gt;
|url=http://www.mozilla.org/xpapps/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCOM&lt;br /&gt;
|description=The cross-platform object model and core data structures.&lt;br /&gt;
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]&lt;br /&gt;
|peers=[https://mozillians.org/en-US/u/dougt/ Doug Turner], [https://mozillians.org/en-US/u/bsmedberg/ Benjamin Smedberg]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=startupcache/, xpcom/%, xpcom/base/, xpcom/build/, xpcom/components/, xpcom/ds/, xpcom/glue/, xpcom/proxy/, xpcom/sample/, xpcom/stub/, xpcom/tests/, xpcom/threads/, xpcom/tools/, xpcom/windbgdlg/&lt;br /&gt;
|url=http://developer.mozilla.org/en/XPCOM&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPConnect&lt;br /&gt;
|description=Deep Magic&lt;br /&gt;
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:gal@uci.edu Andreas Gal], [mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=js/xpconnect/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::XPConnect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPIDL&lt;br /&gt;
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.&lt;br /&gt;
|owner=[mailto:me@kylehuey.com Kyle Huey]&lt;br /&gt;
|peers=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=xpcom/typelib/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xpidl&lt;br /&gt;
http://www.mozilla.org/scriptable&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPInstall&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dveditz@cruzio.com Dan Veditz]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-tech-xpinstall&lt;br /&gt;
|source_dirs=xpinstall/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Installer: XPInstall Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=xptcall&lt;br /&gt;
|description=XPTCall - platform-specific assembly for calling and implementing arbitrary XPCOM interfaces.&lt;br /&gt;
|owner=[mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:shaver@mozilla.org Mike Shaver]&lt;br /&gt;
|group=dev-xpcom&lt;br /&gt;
|source_dirs=xpcom/reflect/xptcall/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xptcall-faq.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPToolkit&lt;br /&gt;
|description=Cross-platform user interface toolkit&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:hyatt@mozilla.org Dave Hyatt], [mailto:jag@tty.nl Peter Annema], [mailto:Jan.Varga@gmail.com Jan Varga]&lt;br /&gt;
|group=dev-tech-xul&lt;br /&gt;
|source_dirs=dom/xul/, layout/xul/&lt;br /&gt;
|url=http://www.mozilla.org/xpfe/&lt;br /&gt;
|components=Core::XP Toolkit/Widgets: Menus, Core::XP Toolkit/Widgets: XUL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XSLT Processor&lt;br /&gt;
|description=XSLT transformations processor&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xslt&lt;br /&gt;
|source_dirs=dom/xslt/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html&lt;br /&gt;
|components=Core::XSLT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XTF&lt;br /&gt;
|description=eXtensible Tag Framework&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:alex@croczilla.com alex@croczilla.com], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xbl&lt;br /&gt;
|source_dirs=content/xtf/, layout/xtf/&lt;br /&gt;
|url=http://www.croczilla.com/bits_and_pieces/xtf/&lt;br /&gt;
|components=Core::XTF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - Windows &lt;br /&gt;
|description=Sandboxing for the Windows platform &lt;br /&gt;
|owner=[mailto:bowen@mozilla.com Bob Owen]&lt;br /&gt;
|peers=[mailto:netzen@gmail.com Brian Bondy], [mailto:aklotz@mozilla.com Aaron Klotz], [https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/win &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing - OSX &lt;br /&gt;
|description=Sandboxing for the OSX platform &lt;br /&gt;
|owner=[mailto:smichaud@mozilla.com Steven Michaud]&lt;br /&gt;
|peers=[mailto:areinald@mozilla.com Andre Reinald  ]&lt;br /&gt;
|group=dev-platform &lt;br /&gt;
|source_dirs=security/sandbox/mac &lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Sandboxing -  Linux &amp;amp; B2G&lt;br /&gt;
|description=Sandboxing for the Linux &amp;amp; B2G platforms&lt;br /&gt;
|owner=[mailto:jld@mozilla.com Jed Davis]&lt;br /&gt;
|peers=[mailto:gDestuynder@mozilla.com Guillaume Destuynder]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=security/sandbox/linux&lt;br /&gt;
|url=https://wiki.mozilla.org/Security/Sandbox &lt;br /&gt;
|components=Core::Security: Process Sandboxing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Submodules===&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config - Fennec&lt;br /&gt;
|description=Submodule of the build config covering Fennec&#039;s build system in mobile/android.&lt;br /&gt;
|owner=[mailto:gps@mozilla.com Gregory Szorc]&lt;br /&gt;
|peers=Same as Build Config plus [mailto:nalexander@mozilla.com Nicholas Alexander].&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unassigned Bugzilla Components===&lt;br /&gt;
&lt;br /&gt;
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Core::Event Handling&lt;br /&gt;
Core::File Handling&lt;br /&gt;
Core::Find Backend&lt;br /&gt;
Core::Gecko Profiler&lt;br /&gt;
Core::General&lt;br /&gt;
Core::HTML: Form Submission&lt;br /&gt;
Core::History: Global&lt;br /&gt;
Core::Identity&lt;br /&gt;
Core::Image Blocking&lt;br /&gt;
Core::JavaScript Debugging APIs&lt;br /&gt;
Core::Localization&lt;br /&gt;
Core::Nanojit&lt;br /&gt;
Core::Networking: Domain Lists&lt;br /&gt;
Core::Print Preview&lt;br /&gt;
Core::Printing: Output&lt;br /&gt;
Core::Printing: Setup&lt;br /&gt;
Core::Profile: BackEnd&lt;br /&gt;
Core::Profile: Migration&lt;br /&gt;
Core::Profile: Roaming&lt;br /&gt;
Core::QuickLaunch (AKA turbo mode)&lt;br /&gt;
Core::Rewriting and Analysis&lt;br /&gt;
Core::Selection&lt;br /&gt;
Core::Serializers&lt;br /&gt;
Core::Spelling checker&lt;br /&gt;
Core::Tracking&lt;br /&gt;
Core::Video/Audio&lt;br /&gt;
Core::Web Services&lt;br /&gt;
Core::WebDAV&lt;br /&gt;
Core::Widget: OS/2&lt;br /&gt;
Core::Widget: Photon&lt;br /&gt;
Core::X-remote&lt;br /&gt;
Core::XForms&lt;br /&gt;
Core::XUL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Coding_Style&amp;diff=1021213</id>
		<title>JavaScript:SpiderMonkey:Coding Style</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Coding_Style&amp;diff=1021213"/>
		<updated>2014-10-01T22:41:13Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Control Flow */ Add the jorendorff rule&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Functions =&lt;br /&gt;
&lt;br /&gt;
* Public function names begin with JS_ followed by capitalized &amp;quot;intercaps&amp;quot;, e.g. JS_NewObject.&lt;br /&gt;
* Extern but library-private function names use a js_ prefix and mixed case, e.g. js_SearchScope.&lt;br /&gt;
* Most static function names have unprefixed, mixed-case names: GetChar.&lt;br /&gt;
* But static native methods of JS objects have lowercase, underscore-separated or intercaps names, e.g., str_indexOf.&lt;br /&gt;
* Function return types are on a separate line preceding the function name.&lt;br /&gt;
* Function braces go on the line following the function name.&lt;br /&gt;
 void DoThis()           /* bad */&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
 void&lt;br /&gt;
 DoThis()                /* OK */&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Other Symbols =&lt;br /&gt;
&lt;br /&gt;
* Library-private and static data use underscores, not intercaps (but library-private data do use a js_ prefix).&lt;br /&gt;
* Scalar type names are lowercase and js-prefixed: jsdouble.&lt;br /&gt;
* Aggregate type names are JS-prefixed and mixed-case: JSObject.&lt;br /&gt;
* Macros are generally ALL_CAPS and underscored, to call out potential side effects, multiple uses of a formal argument, etc.  Line continuation characters should all line up, in column 79 if that exceeds the width of all the macro text.  Macro parameters should be of the form name_ (instead of something like __name).&lt;br /&gt;
&lt;br /&gt;
= Indentation =&lt;br /&gt;
&lt;br /&gt;
* Use spaces, not tabs.  There should be no tabs in source files.&lt;br /&gt;
* Four spaces of indentation per statement nesting level.&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;case L:&amp;lt;/code&amp;gt;&amp;quot; labels in &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; statements count as half of a nesting level, so indent two spaces, with the labeled statements indenting two more for a standard four spaces indentation from &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; to a case-controlled statement.&lt;br /&gt;
 switch (discriminant) {&lt;br /&gt;
   case L1:&lt;br /&gt;
     DoSomething();&lt;br /&gt;
   . . .&lt;br /&gt;
 }&lt;br /&gt;
* Function arguments that overflow the first line of the call expression should be aligned to underhang the first argument (to start in overflow lines in the column after the opening parenthesis).&lt;br /&gt;
 JS_SetContext(rt,         /* bad */&lt;br /&gt;
              cx);&lt;br /&gt;
 JS_SetContext(rt,         /* OK */&lt;br /&gt;
               cx);&lt;br /&gt;
&lt;br /&gt;
= Whitespace in declarations =&lt;br /&gt;
&lt;br /&gt;
These rules are inconsistently applied.  Be consistent with the code you&#039;re editing rather than adhere too closely to these guidelines!&lt;br /&gt;
&lt;br /&gt;
* In a declaration of a pointer, the &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; goes with the variable name:&lt;br /&gt;
 char* s;                  /* bad */&lt;br /&gt;
 char *s;                  /* OK */&lt;br /&gt;
* Even in the return type of a method:&lt;br /&gt;
 class JSString&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
     JSString* dependentBase() const;   /* bad */&lt;br /&gt;
     JSString * dependentBase() const;  /* bad */&lt;br /&gt;
     JSString *dependentBase() const;   /* OK */&lt;br /&gt;
     ...&lt;br /&gt;
 };&lt;br /&gt;
* But in top-level function declarations/definitions, put a line break immediately before the name being declared:&lt;br /&gt;
 extern const char *&lt;br /&gt;
 js_GetStringBytes(JSContext *cx, JSString *str);  /* OK */&lt;br /&gt;
* And put a space in &amp;lt;code&amp;gt;*JS_FASTCALL&amp;lt;/code&amp;gt;, because that would be crazy.&lt;br /&gt;
 extern JSString *JS_FASTCALL           /* bad */&lt;br /&gt;
 js_ConcatStrings(JSContext *cx, JSString *left, JSString *right);&lt;br /&gt;
 extern JSString * JS_FASTCALL          /* OK */&lt;br /&gt;
 js_ConcatStrings(JSContext *cx, JSString *left, JSString *right);&lt;br /&gt;
* In C++ method declarations with default arguments, use spaces and comments like so:&lt;br /&gt;
 static void&lt;br /&gt;
 Frob(JSContext *cx, uint32_t defaultValue = 0);&lt;br /&gt;
 static void&lt;br /&gt;
 Frob(JSContext *cx, uint32_t defaultValue /* = 0 */)&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Other whitespace =&lt;br /&gt;
&lt;br /&gt;
* Code should fit within 99 columns; comments should fit within 80 columns; both figures include indentation. Break down lines that are too long by splitting after a binary operator.&lt;br /&gt;
* Exception: in a &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; statement where each case is a trivially-short statement, it&#039;s ok to put the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt;, the statement, and the &amp;lt;code&amp;gt;break;&amp;lt;/code&amp;gt; all on one line.&lt;br /&gt;
* Comment &amp;lt;code&amp;gt;/* FALL THROUGH */&amp;lt;/code&amp;gt; in place of missing &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; when intentionally falling through from one case-controlled statement sequence into another, or into the &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; statements.&lt;br /&gt;
* Do not use spaces between a function name and its arguments list, or between an array name and the square bracket. Also, do no use spaces after a bracket. Use a space after a comma to separate arguments.&lt;br /&gt;
 JS_SetContext ( rt, cx ); /* bad */&lt;br /&gt;
 JS_SetContext(rt, cx);    /* OK */&lt;br /&gt;
* Use a space between a C keyword and parentheses.&lt;br /&gt;
 if(condition)             /* bad */&lt;br /&gt;
 if (condition)            /* OK */&lt;br /&gt;
* In a conditional, if the consequent (and, if present, the alternate) is a single statement, no braces are used.&lt;br /&gt;
 if (today == &amp;quot;Tuesday&amp;quot;)&lt;br /&gt;
     puts(&amp;quot;I don&#039;t have my wallet on me.&amp;quot;);&lt;br /&gt;
 else&lt;br /&gt;
     puts(&amp;quot;I would gladly pay you on Tuesday for a hamburger today.&amp;quot;);&lt;br /&gt;
However, if &#039;&#039;either&#039;&#039; the consequent or alternate is a block of multiple statements, braces are used on both.&lt;br /&gt;
 if (canSwingFromWeb) {&lt;br /&gt;
     p-&amp;gt;swingFromWeb();&lt;br /&gt;
 } else {&lt;br /&gt;
     JS_ASSERT(p-&amp;gt;isSpiderPig());&lt;br /&gt;
     p-&amp;gt;doWhateverSpiderPigDoes();&lt;br /&gt;
 }&lt;br /&gt;
* Conditions with multi-line tests should put the brace on the new line to provide a visual separation between the condition and the body.&lt;br /&gt;
&lt;br /&gt;
   types::TypeSet *types = frame.extra(lhs).types;&lt;br /&gt;
   if (JSOp(*PC) == JSOP_SETPROP &amp;amp;&amp;amp; id == types::MakeTypeId(cx, id) &amp;amp;&amp;amp;&lt;br /&gt;
       types &amp;amp;&amp;amp; !types-&amp;gt;unknownObject() &amp;amp;&amp;amp;&lt;br /&gt;
       types-&amp;gt;getObjectCount() == 1 &amp;amp;&amp;amp;&lt;br /&gt;
       types-&amp;gt;getTypeObject(0) != NULL &amp;amp;&amp;amp;&lt;br /&gt;
       !types-&amp;gt;getTypeObject(0)-&amp;gt;unknownProperties())&lt;br /&gt;
   {&lt;br /&gt;
       JS_ASSERT(usePropCache);&lt;br /&gt;
       types::TypeObject *object = types-&amp;gt;getTypeObject(0);&lt;br /&gt;
       types::TypeSet *propertyTypes = object-&amp;gt;getProperty(cx, id, false);&lt;br /&gt;
       ...&lt;br /&gt;
   } else {&lt;br /&gt;
       ...&lt;br /&gt;
   }&lt;br /&gt;
However, if there is already a visual separation between the condition and the body, putting the { on a new line isn&#039;t necessary:&lt;br /&gt;
&lt;br /&gt;
   if (forHead-&amp;gt;pn_kid1 &amp;amp;&amp;amp; NewSrcNote2(cx, cg, SRC_DECL,&lt;br /&gt;
                                       (forHead-&amp;gt;pn_kid1-&amp;gt;isOp(JSOP_DEFVAR))&lt;br /&gt;
                                       ? SRC_DECL_VAR&lt;br /&gt;
                                       : SRC_DECL_LET) &amp;lt; 0) {&lt;br /&gt;
       return false;&lt;br /&gt;
   }&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop heads go on one line where possible; when not possible, initializer part, update, and termination parts each go on separate lines&lt;br /&gt;
 for (int i = 0;&lt;br /&gt;
      i &amp;lt; 5;&lt;br /&gt;
      i++) {                 /* bad, could all fit on one line */&lt;br /&gt;
     doStuff();&lt;br /&gt;
 }&lt;br /&gt;
 for (int i = 0; i &amp;lt; 5; i++) /* OK */&lt;br /&gt;
     doStuff();&lt;br /&gt;
 for (size_t ind = JSObject::JSSLOT_DATE_COMPONENTS_START;&lt;br /&gt;
      ind &amp;lt; JSObject::DATE_FIXED_RESERVED_SLOTS; ind++) {   /* bad */&lt;br /&gt;
     obj-&amp;gt;setSlot(ind, DoubleValue(utcTime));&lt;br /&gt;
 }&lt;br /&gt;
 for (size_t ind = JSObject::JSSLOT_DATE_COMPONENTS_START;&lt;br /&gt;
      ind &amp;lt; JSObject::DATE_FIXED_RESERVED_SLOTS;&lt;br /&gt;
      ind++) {                                               /* OK */&lt;br /&gt;
     obj-&amp;gt;setSlot(ind, DoubleValue(utcTime));&lt;br /&gt;
 }&lt;br /&gt;
* In comments, use one space, not two, between sentences and after a colon.&lt;br /&gt;
&lt;br /&gt;
= Control Flow =&lt;br /&gt;
&lt;br /&gt;
* Minimize indentation using return, break, and continue where appropriate.  Prefer return (break, continue) statements to cast out abnormal cases, instead of nesting &amp;quot;if/else&amp;quot; statements and indenting the common cases.&lt;br /&gt;
 void&lt;br /&gt;
 MyFunction(int n)&lt;br /&gt;
 {&lt;br /&gt;
     if (n) {              /* bad */&lt;br /&gt;
         ...&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 void&lt;br /&gt;
 MyFunction(int n)&lt;br /&gt;
 {&lt;br /&gt;
     if (!n)&lt;br /&gt;
         return;           /* OK */&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* If an &amp;quot;if&amp;quot; statement controls a &amp;quot;then&amp;quot; clause ending in a return statement, do not use &amp;quot;else&amp;quot; after return.&lt;br /&gt;
 if (condition) {          /* bad */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     return;&lt;br /&gt;
 } else {&lt;br /&gt;
     DoThat();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 if (condition) {          /* OK */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoThat();&lt;br /&gt;
&lt;br /&gt;
* Avoid similar arbitrary patterns and non-sequiturs:&lt;br /&gt;
 if (condition) {          /* bad */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     DoThat();&lt;br /&gt;
 } else {&lt;br /&gt;
     CleanUp();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoTheOther();&lt;br /&gt;
 if (!condition) {         /* OK */&lt;br /&gt;
     CleanUp();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoThis();&lt;br /&gt;
 DoThat();&lt;br /&gt;
 DoTheOther();&lt;br /&gt;
&lt;br /&gt;
* Avoid using &amp;amp;&amp;amp; or || to mix deciding-whether-to-do-something with error-checking.&lt;br /&gt;
&lt;br /&gt;
 if (obj-&amp;gt;hasProblems() &amp;amp;&amp;amp; !obj-&amp;gt;rectify())     /* bad */&lt;br /&gt;
     return false;&lt;br /&gt;
 &lt;br /&gt;
 if (obj-&amp;gt;hasProblems()) {                      /* OK */&lt;br /&gt;
     if (!obj-&amp;gt;rectify())&lt;br /&gt;
         return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Comments =&lt;br /&gt;
&lt;br /&gt;
* In C files, always use C style comments.  C++ comments are ok otherwise.&lt;br /&gt;
* Terminate a comment with a period (so try to make comments be complete sentences).&lt;br /&gt;
 /* This is a good comment. */&lt;br /&gt;
 // This is also a good comment.&lt;br /&gt;
* For C-style multiline comments, align with any indentation, and start every line with an asterisk. Asterisks stack in the same column. Precede the multiline comment with one empty line unless the prior line ends in a left brace. The first line of the comment contains only leading space followed by &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt;. Multiline comments should also be bracketed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (condition) {&lt;br /&gt;
    /*&lt;br /&gt;
     * This is a lengthy C-style&lt;br /&gt;
     * multiline comment.&lt;br /&gt;
     */&lt;br /&gt;
    // This is a length&lt;br /&gt;
    // C++-style comment&lt;br /&gt;
    DoYourStuff();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Entry Points and Callbacks =&lt;br /&gt;
&lt;br /&gt;
* DLL entry points have their return type expanded within a JS_PUBLIC_API() macro call, to get the right Windows secret type qualifiers in the right places for all build variants.&lt;br /&gt;
* Callback functions that might be called from a DLL are similarly macroized with JS_STATIC_DLL_CALLBACK (if the function otherwise would be static to hide its name) or JS_DLL_CALLBACK (this macro takes no type argument; it should be used after the return type and before the function name).&lt;br /&gt;
&lt;br /&gt;
= Data Types and Alignments =&lt;br /&gt;
&lt;br /&gt;
* As with all Mozilla code, SpiderMonkey needs to compile and execute correctly on many platforms, including 64-bits systems.&lt;br /&gt;
* JS and NSPR have common roots in the dawn of time (Netscape 2), and the &amp;lt;code&amp;gt;JS_THREADSAFE&amp;lt;/code&amp;gt; mode of building SpiderMonkey depends on NSPR, so reading the [http://www.mozilla.org/projects/nspr/reference/html/ NSPR documentation] is well worth your while.&lt;br /&gt;
* Not all 64-bit systems use the same integer type model: some are &amp;quot;LP64&amp;quot; (long and pointer are 64 bits, int is 32 bits), while others are &amp;quot;LLP64&amp;quot; (only long long and pointer are 64 bits; long and int are 32 bits).&lt;br /&gt;
* Use size_t for unsigned number of bytes variables, ptrdiff_t for signed pointer subtraction results.  In particular, do not use uintN, which is just shorthand for unsigned int, and so may not be big enough.&lt;br /&gt;
&lt;br /&gt;
= Header files =&lt;br /&gt;
&lt;br /&gt;
== #ifndef wrappers ==&lt;br /&gt;
&lt;br /&gt;
Use this exact form for #ifndef wrappers in header files:&lt;br /&gt;
&lt;br /&gt;
  #ifndef &amp;lt;guard&amp;gt;&lt;br /&gt;
  #define &amp;lt;guard&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  #endif // &amp;lt;guard&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GCC and clang recognize this idiom and avoid re-reading headers that use it.  Don&#039;t put any code before the #ifndef or after the #endif, and don&#039;t put anything else in the #ifndef, otherwise the optimization will be thwarted and the file will be multiply-included.  (Check with the -H option if you want to be sure.)&lt;br /&gt;
&lt;br /&gt;
Include guards should be named by determining the fully-qualified include path,&lt;br /&gt;
then substituting _ for &#039;/&#039; and &#039;.&#039; and &#039;-&#039; in it.  For example, js/src/vm/Stack-inl.h&#039;s guard is vm_Stack_inl_h_, and js/public/Vector.h&#039;s guard is js_Vector_h (because its include path is js/Vector.h).&lt;br /&gt;
&lt;br /&gt;
== #include paths ==&lt;br /&gt;
&lt;br /&gt;
All #include statements should use a fully-qualified (within SpiderMonkey) path, even if it&#039;s not necessary.  For example, this:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;vm/Stack.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
not:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;Stack.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This keeps things consistent and helps with the ordering.&lt;br /&gt;
&lt;br /&gt;
For headers in js/public/, the prefix is &amp;quot;js/&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;js/Vector.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For headers in mfbt/, the prefix is &amp;quot;mozilla/&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;mozilla/Assertions.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== #include ordering ==&lt;br /&gt;
&lt;br /&gt;
The following order is used for module X:  &lt;br /&gt;
* If X-inl.h exists, it goes first.  (And X-inl.h&#039;s first #include should be X.h.) Otherwise, X.h goes first.  This rule ensures that X.h and X-inl.h both #include all the headers that they need themselves.&lt;br /&gt;
* mozilla/*.h&lt;br /&gt;
* &amp;lt;*.h&amp;gt;&lt;br /&gt;
* js*.h&lt;br /&gt;
* */*.h (this includes the public JSAPI headers in js/public/*.h which should be included using the form js/*.h)&lt;br /&gt;
* js*inlines.h&lt;br /&gt;
* */*-inl.h.&lt;br /&gt;
&lt;br /&gt;
Keep (case-insensitive) lexicographic order with each section.&lt;br /&gt;
&lt;br /&gt;
The presence of conditionally-compiled #include statements complicates thing.  If you have a single #include statement within a #if/#ifdef/#ifndef block, placing the block in the appropriate section is straightforward.  If you have multiple #include statements within a block, use your judgment as to where the best place for it is.&lt;br /&gt;
&lt;br /&gt;
Example for X.cpp:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;X.h&amp;quot;    // put &amp;quot;X-inl.h&amp;quot; instead, if it exists&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;mozilla/HashFunctions.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;jsbar.h&amp;quot;&lt;br /&gt;
 #ifdef BAZ&lt;br /&gt;
 # include &amp;quot;jsbaz.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 #include &amp;quot;jscaz.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;ds/Baz.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;js/Bar.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;vm/Bat.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;jssqueeinlines.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;jswoot-inl.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;frontend/Thingamabob-inl.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;vm/VirtualReality-inl.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= C++ =&lt;br /&gt;
&lt;br /&gt;
== Namespaces ==&lt;br /&gt;
&lt;br /&gt;
* Public functions and types should be in the JS:: namespace, in preference to the old JS/JS_ name prefixes.&lt;br /&gt;
* Library-private and friend functions should be in the js:: namespace, in preference to the old js_ name prefix.&lt;br /&gt;
* Compile-time-evaluated functions (i.e., template meta-functions) should be in &#039;js::tl::&#039;, the &amp;quot;template library&amp;quot; namespace, to avoid collision with their runtime counterparts.&lt;br /&gt;
* In SpiderMonkey .cpp files, it is okay to have &#039;using namespace js;&#039;, but it is not okay to do the same with any other namespace, like JS:: or mozilla::. These can introduce ambiguities that come and go depending on which .cpp files the build system decides to unify.&lt;br /&gt;
* If you do have names in JS:: that should be readily available throughout SpiderMonkey, you may add a &#039;using&#039; declaration to js/src/NamespaceImports.h.&lt;br /&gt;
* Avoid unnamed namespaces unless they are necessary to give a class&#039;s members internal linkage.  Although the C++ standard officially deprecates &#039;static&#039; on  functions, &#039;static&#039; has the following advantages over unnamed namespaces:&lt;br /&gt;
** It is difficult to name functions in unnamed namespaces in gdb.&lt;br /&gt;
** Static says &amp;quot;this is a translation-unit-local helper function&amp;quot; on the function, without having to look around for an enclosing &amp;quot;namespace {&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Enums ==&lt;br /&gt;
&lt;br /&gt;
Older code uses SHOUT_REALLY_LOUD for enum values, newer code uses InterCaps. Enums should be preferred to boolean arguments for ease of understanding at the invocation site.&lt;br /&gt;
&lt;br /&gt;
== Classical OOP ==&lt;br /&gt;
&lt;br /&gt;
* Most structs can become classes, with associated functions becoming methods. This already started for the [https://bugzilla.mozilla.org/show_bug.cgi?id=upvar2 upvar2 bug].&lt;br /&gt;
** Style detailing: mrbkap suggests left brace before class body on its own line in column 1 to match function style and facilitate vim navigation. People do this already when inheriting, since the left brace can get lost in the superclass(es).&lt;br /&gt;
 class JSObject&lt;br /&gt;
 {&lt;br /&gt;
      ...&lt;br /&gt;
 }&lt;br /&gt;
* Member variable names, private or public, are sometimes decorated with a trailing &#039;_&#039;.&lt;br /&gt;
 class Fail&lt;br /&gt;
 {&lt;br /&gt;
     size_t capacity;  // common&lt;br /&gt;
     T *begin_;        // also common, being used more as time goes on&lt;br /&gt;
 }&lt;br /&gt;
Sometimes a canonical argument name may conflict with a member name.  In this case, one can disambiguate with &amp;quot;this-&amp;gt;&amp;quot;, although such explicit qualification should only be added when necessary:&lt;br /&gt;
 class C&lt;br /&gt;
 {&lt;br /&gt;
     size_t count;&lt;br /&gt;
     bool fresh;&lt;br /&gt;
     void change(size_t count) {&lt;br /&gt;
         this-&amp;gt;count = count;&lt;br /&gt;
         this-&amp;gt;fresh = false;  // verbose and unnecessary&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
* Most macros become inline helpers. With LiveConnect gone on mozilla-central, we can make the helpers methods of relevant structs or classes finally, instead of static inline functions.&lt;br /&gt;
* Based on 20+ years of bad experiences, we are going to go slow and resist virtual methods and bases, MI, and the like. Function pointer tables for now, as before -- see [https://bugzilla.mozilla.org/show_bug.cgi?id=408416 JSObjectOps needs a make-over].&lt;br /&gt;
* Templates are good, Mozilla has positive experience and the portability is there for the kind of [http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization RAII] helpers we need.&lt;br /&gt;
* No exceptions, so std is hard to use. There is initial work underway to make STL-like containers that mesh well with the rest of the JS engine (see js::Vector, js::HashMap, js::Pool).&lt;br /&gt;
** There are still improvements to be made to the new hash table: double-hash implementation; improve bit-mixing into multiplicative hash if the cycle costs can be supported (measurement is required and we should understand down to the bits what is going on); a js::HashSet or js::HashMap&amp;lt;T,void&amp;gt; specialization such that set-like use of hashtables do not waste any space on values.&lt;br /&gt;
&lt;br /&gt;
=== Initializer lists ===&lt;br /&gt;
&lt;br /&gt;
Initializer lists can break in one of two ways. The first may be preferable when constructors take few arguments:&lt;br /&gt;
&lt;br /&gt;
 class Ninja : public WeaponWeilder, public Camouflagible,&lt;br /&gt;
               public Assassinatable, public ShapeShiftable&lt;br /&gt;
 {&lt;br /&gt;
     Ninja() : WeaponWeilder(Weapons::SHURIKEN),&lt;br /&gt;
               Camouflagible(Garments::SHINOBI_SHOZOKU),&lt;br /&gt;
               Assassinatable(AssassinationDifficulty::HIGHLY_DIFFICULT),&lt;br /&gt;
               ShapeShiftable(MPCost(512)) {}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The other permitted style mitigates longer-identifiers-squishing-text-against-the-right-side-of-the-screen-syndrome by using a half-indented colon:&lt;br /&gt;
&lt;br /&gt;
 class Ninja&lt;br /&gt;
   : public WeaponWeilder, public Camouflagible, public Assassinatable,&lt;br /&gt;
     public ShapeShiftable&lt;br /&gt;
 {&lt;br /&gt;
     Ninja()&lt;br /&gt;
       : WeaponWeilder(Weapons::SHURIKEN),&lt;br /&gt;
         Camouflagible(Garments::SHINOBI_SHOZOKU),&lt;br /&gt;
         Assassinatable(AssassinationDifficulty::HIGHLY_DIFFICULT),&lt;br /&gt;
         ShapeShiftable(MPCost(512)) {}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Inline methods ===&lt;br /&gt;
&lt;br /&gt;
If the method in question fits on one line and is branch free, do a one liner:&lt;br /&gt;
&lt;br /&gt;
 class Eater&lt;br /&gt;
 {&lt;br /&gt;
     void eat(Eaten &amp;amp;other) { other.setConsumed(); }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
If it&#039;s too long, put the type, declarator including formals (unless they overflow), and left brace all on the first line:&lt;br /&gt;
&lt;br /&gt;
 class Eater&lt;br /&gt;
 {&lt;br /&gt;
     Food *obtainFoodFromEatery(Eatery &amp;amp;eatery) {&lt;br /&gt;
         if (!eatery.hasFood())&lt;br /&gt;
             return NULL;&lt;br /&gt;
         return eatery.purchaseFood();&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
For out-of-line inlines (when the definitions are too unwieldy to place in the class definition) use the inline keyword as an indicator that there&#039;s an out-of-line inline definition:&lt;br /&gt;
&lt;br /&gt;
 class SpaceGoo&lt;br /&gt;
 {&lt;br /&gt;
     inline BlobbyWrapper *enblob(Entity &amp;amp;other);&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 inline BlobbyWrapper *&lt;br /&gt;
 SpaceGoo::enblob(Entity &amp;amp;other)&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en/Mozilla_Coding_Style_Guide Mozilla&#039;s coding style guide].&lt;br /&gt;
* [http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml Google&#039;s C++ coding style guide].&lt;br /&gt;
&lt;br /&gt;
= Exceptions to this coding style =&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey contains some code imported from other projects, e.g. ctypes/libffi/, that is minimally modified.  Such code does not have to follow SpiderMonkey style.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Electrolysis&amp;diff=1018565</id>
		<title>Electrolysis</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Electrolysis&amp;diff=1018565"/>
		<updated>2014-09-26T14:46:35Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Known Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Goal==&lt;br /&gt;
&lt;br /&gt;
The goal of the Electrolysis project (&amp;quot;e10s&amp;quot; for short) is to run web content in a separate process from Firefox itself. The two major advantages of this model are security and performance. Security would improve because the content processes could be sandboxed (although sandboxing the content processes is a separate project from Electrolysis). Performance would improve because the browser UI would not be affected by poor performance of content code (be it layout or JavaScript). Also, content processes could be isolated from each other, which would have similar security and performance benefits.&lt;br /&gt;
&lt;br /&gt;
Although the Gecko platform supports multiple processes, the Firefox frontend is not designed to use them. Work to make the frontend (including addons) support multiple processes was begun in early 2013. The [[Electrolysis/Roadmap|project roadmap]] has more details.&lt;br /&gt;
&lt;br /&gt;
==Enabling and Disabling Electrolysis==&lt;br /&gt;
&lt;br /&gt;
To enable or disable e10s, open Nightly&#039;s Preferences and check the &amp;quot;Enable E10S&amp;quot; checkbox. You will need to restart Nightly. Alternately, you can also toggle the &#039;&#039;browser.tabs.remote&#039;&#039; and &#039;&#039;browser.tabs.remote.autostart&#039;&#039; prefs to enable (true) or disable (false) e10s.&lt;br /&gt;
&lt;br /&gt;
==Contributing==&lt;br /&gt;
&lt;br /&gt;
The simplest way to help out is to file bugs when you find them.&lt;br /&gt;
&lt;br /&gt;
* Link to all open e10s bugs: http://is.gd/QripTz&lt;br /&gt;
** Please check the open bugs for duplicates before filing a new bug.&lt;br /&gt;
* Link to file new e10s bug: http://is.gd/aTza8A&lt;br /&gt;
** Please add the tracking-e10s:? flag so we can more easily track your bug.&lt;br /&gt;
&lt;br /&gt;
Most bugs in e10s occur because code in the chrome process tries to access data in a content process. All of the DOM objects for a XUL browser element, as well as its DocShell, live in the content process. Typical access paths are via &amp;lt;code&amp;gt;browser.contentWindow&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;browser.docShell&amp;lt;/code&amp;gt;, or some variation of them. Often, these property accesses will generate errors in the console, which makes these bugs fairly easy to detect. MDN has a good introduction to e10s, useful for both Firefox and add-on developers: https://developer.mozilla.org/en-US/Add-ons/Working_with_multiprocess_Firefox&lt;br /&gt;
&lt;br /&gt;
==What to Expect==&lt;br /&gt;
&lt;br /&gt;
Basic browsing should work as expected. Tabs that are loaded remotely (i.e., in a separate process) will have their title underlined. By default, only one content process is used. You can control this with the dom.ipc.processCount preference.&lt;br /&gt;
&lt;br /&gt;
===Known Issues===&lt;br /&gt;
Known issues you might run into when testing e10s:&lt;br /&gt;
* HTTP redirects don&#039;t always work: {{bug|997808}}, {{bug|1050869}}&lt;br /&gt;
* Printing does not work: {{bug|927188}}&lt;br /&gt;
* Site logins fail if third-party cookies are always blocked: {{bug|1049299}}&lt;br /&gt;
* Accessibility disables e10s: {{bug|1029143}}&lt;br /&gt;
* Personal spellcheck dictionaries don&#039;t work: {{bug|1030449}}&lt;br /&gt;
* Middle-click, Open Link in New ... options doesn&#039;t work {{bug|1066924}}&lt;br /&gt;
* Spellcheck suggestions hang around in the right-click menu forever {{bug|1073527}}&lt;br /&gt;
&lt;br /&gt;
===Add-ons Compatibility===&lt;br /&gt;
&lt;br /&gt;
A list of tested add-ons (compatible and incompatible) is available at http://arewee10syet.com. Some popular add-ons that are currently broken with e10s:&lt;br /&gt;
&lt;br /&gt;
* Bugzilla Tweaks/BugzillaJS: {{bug|972507}}&lt;br /&gt;
* HTTPS Everywhere: {{bug|1014986}}&lt;br /&gt;
* Tree Style Tabs: {{bug|1042680}}&lt;br /&gt;
* 1Password: {{bug|1042195}}&lt;br /&gt;
* NoScript: {{bug|1058542}}&lt;br /&gt;
&lt;br /&gt;
==Communication==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable fullwidth-table&amp;quot;&lt;br /&gt;
 | Weekly Team Meeting&lt;br /&gt;
|| [http://arewemeetingyet.com/Los%20Angeles/2014-04-24/14:30/w/E10s%20Weekly%20Team%20Meeting Thursday at 2:00pm PT] for 30 mins&lt;br /&gt;
* Vidyo: [https://v.mozilla.com/flex.html?roomdirect.html&amp;amp;key=njJM9NHQBt2a &amp;quot;e10s&amp;quot;]&lt;br /&gt;
* Invitation: Contact billm@mozilla.com to get added to the meeting invite list.&lt;br /&gt;
* Dial In Information: &lt;br /&gt;
* [https://etherpad.mozilla.org/E10s-meeting-notes Meeting Notes Etherpad]&lt;br /&gt;
* Historical Notes: [[Content Processes/Meetings|Meeting Agendas and Notes]]&lt;br /&gt;
|-&lt;br /&gt;
| IRC&lt;br /&gt;
|| &lt;br /&gt;
* Server: irc.mozilla.org&lt;br /&gt;
* Channel: [irc://irc.mozilla.org/e10s #e10s]&lt;br /&gt;
|-&lt;br /&gt;
| Tracking bugs&lt;br /&gt;
|| &lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=fxe10s fxe10s] for frontend bugs&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=core-e10s core-e10s] for platform bugs&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=e10s-addons e10s-addons] for add-on compatibility&lt;br /&gt;
|-&lt;br /&gt;
| Newsgroup/Mailing List&lt;br /&gt;
|| &lt;br /&gt;
* https://lists.mozilla.org/listinfo/dev-tech-electrolysis&lt;br /&gt;
|-&lt;br /&gt;
| Project branch&lt;br /&gt;
|| &lt;br /&gt;
* We use the project branch only for experimental code. We don&#039;t recommend people test with it. Please use mozilla-central instead.&lt;br /&gt;
* https://hg.mozilla.org/projects/larch/&lt;br /&gt;
* https://github.com/mozilla/mozilla-central/tree/larch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==People==&lt;br /&gt;
 {| class=&amp;quot;wikitable fullwidth-table&amp;quot;&lt;br /&gt;
| Project Champion&lt;br /&gt;
||&lt;br /&gt;
* Andreas Gal ( A )&lt;br /&gt;
|-&lt;br /&gt;
| High Level Oversight&lt;br /&gt;
||        &lt;br /&gt;
* Johnathan Nightingale ( I )&lt;br /&gt;
* Gavin Sharp ( A )&lt;br /&gt;
|-&lt;br /&gt;
| Engineering Management&lt;br /&gt;
||&lt;br /&gt;
* Brad Lassey ( R )&lt;br /&gt;
|-&lt;br /&gt;
| Project Management&lt;br /&gt;
||&lt;br /&gt;
* Chris Peterson ( R )&lt;br /&gt;
|-&lt;br /&gt;
| QA&lt;br /&gt;
||&lt;br /&gt;
* Juan Becerra (QA lead)&lt;br /&gt;
|-&lt;br /&gt;
| Development Team&lt;br /&gt;
|| &lt;br /&gt;
* Nicholas Alexander ( R )&lt;br /&gt;
* Mike Conley ( R )&lt;br /&gt;
* Felipe Gomes (Firefox front-end) ( R )&lt;br /&gt;
* Blake Kaplan ( R )&lt;br /&gt;
* William McCloskey ( R )&lt;br /&gt;
* Jim Mathies ( R )&lt;br /&gt;
* Allison Naaktgeboren ( R )&lt;br /&gt;
* John Schoenick (plugins) ( R )&lt;br /&gt;
* Tom Schuster ( R )&lt;br /&gt;
* Tomislav Jovanovic (addon-sdk) ( R )&lt;br /&gt;
|-&lt;br /&gt;
| Other Teams&lt;br /&gt;
|&lt;br /&gt;
* Accessibility: Alexander Surkov and Trevor Saunders ([https://bugzilla.mozilla.org/show_bug.cgi?id=646596 bug 646596])&lt;br /&gt;
* Addon Developer Relations: Jorge Villalobos&lt;br /&gt;
* Developer Tools: Rob Campbell ([https://bugzilla.mozilla.org/show_bug.cgi?id=875871 bug 875871])&lt;br /&gt;
* IME: Makoto Kato (alternately, Masayuki Nakano) ([https://bugzilla.mozilla.org/show_bug.cgi?id=926798 bug 926798])&lt;br /&gt;
* Jetpack: Dave Townsend&lt;br /&gt;
* OMTC/Windows: Nick Cameron ([https://bugzilla.mozilla.org/show_bug.cgi?id=756608 bug 756608])&lt;br /&gt;
* Printing: bz ([https://bugzilla.mozilla.org/show_bug.cgi?id=927188 bug 927188])&lt;br /&gt;
* Plugins: Josh Aas (OS X), Karl Tomlinson (Linux)&lt;br /&gt;
* Sandboxing: Brian Bondy, Sid Stamm ([https://bugzilla.mozilla.org/show_bug.cgi?id=925570 bug 925570])&lt;br /&gt;
* WebAudio: Ehsan Akhgari (WebAudio works fine in e10s.)&lt;br /&gt;
* WebRTC: Randell Jesup or Eric Rescorla. WebRtc is currently getting ready to go into B2G - mozGetUserMedia will be in 26/1.2, and PeerConnections will be in 28/1.3.&lt;br /&gt;
* e10s tests: Mark Hammond&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here is what the letters following each name stand for, those higher on the list include all those below:&lt;br /&gt;
&lt;br /&gt;
* R = Responsible for deliverable, in most cases this is anyone writing code.&lt;br /&gt;
* A = Accountable for the final decision making on some aspect of the project, often leadership that is not working on code but have go, no go decision making.&lt;br /&gt;
* C = Needs to be consulted on key topics, often this would be for subject mater experts that need to be consulted but don&#039;t have decision making power.&lt;br /&gt;
* I = Needs to be kept informed, those that just need regular status reports sent to them.&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Add-ons/Working_with_multiprocess_Firefox MDN: Working with multiprocess Firefox]&lt;br /&gt;
* [https://developer.mozilla.org/en-US/docs/The_message_manager The message manager]&lt;br /&gt;
* [https://developer.mozilla.org/en-US/docs/Cross_Process_Object_Wrappers Cross-process object wrappers]&lt;br /&gt;
* [[Electrolysis/Archive | Archive of past content on this page]]&lt;br /&gt;
* [https://etherpad.mozilla.org/uYS8ZplOMU Electrolysis platform notes]&lt;br /&gt;
* [https://etherpad.mozilla.org/rRk4aEHkwC Notes on the Chromium IPC library]&lt;br /&gt;
* [https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AhFRRYurPzRndHQwUVNscThIbFBsYmNRaU44LVlDdlE#gid=0 Addon Compatibility Test Results]&lt;br /&gt;
* [http://mxr.mozilla.org/mozilla-central/source/content/base/public/nsIMessageManager.idl#13 IDL comments about Message Manager]&lt;br /&gt;
* Tim Taubert&#039;s [http://timtaubert.de/blog/2011/08/firefox-electrolysis-101/ &amp;quot;Firefox Electrolysis 101&amp;quot;] blog post (2011)&lt;br /&gt;
&lt;br /&gt;
== Meeting Notes ==&lt;br /&gt;
&lt;br /&gt;
; For latest meeting notes, see the [https://e10s.etherpad.mozilla.org/meeting-notes Meeting Notes Etherpad].&lt;br /&gt;
&lt;br /&gt;
Create a new weekly agenda from the [[Electrolysis/Meetings/0-0-0|template]]:&lt;br /&gt;
&amp;lt;createbox&amp;gt;&lt;br /&gt;
align=left&lt;br /&gt;
type=create&lt;br /&gt;
preload=Electrolysis/Meetings/0-0-0&lt;br /&gt;
default={{#time: Y-m-d | thursday}}&lt;br /&gt;
prefix=Electrolysis/Meetings/&lt;br /&gt;
&amp;lt;/createbox&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;toccolours&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
|{{Special:PrefixIndex/Electrolysis/Meetings/}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Coding_Style&amp;diff=1015508</id>
		<title>JavaScript:SpiderMonkey:Coding Style</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=JavaScript:SpiderMonkey:Coding_Style&amp;diff=1015508"/>
		<updated>2014-09-16T18:52:54Z</updated>

		<summary type="html">&lt;p&gt;Jorend: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Functions =&lt;br /&gt;
&lt;br /&gt;
* Public function names begin with JS_ followed by capitalized &amp;quot;intercaps&amp;quot;, e.g. JS_NewObject.&lt;br /&gt;
* Extern but library-private function names use a js_ prefix and mixed case, e.g. js_SearchScope.&lt;br /&gt;
* Most static function names have unprefixed, mixed-case names: GetChar.&lt;br /&gt;
* But static native methods of JS objects have lowercase, underscore-separated or intercaps names, e.g., str_indexOf.&lt;br /&gt;
* Function return types are on a separate line preceding the function name.&lt;br /&gt;
* Function braces go on the line following the function name.&lt;br /&gt;
 void DoThis()           /* bad */&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
 void&lt;br /&gt;
 DoThis()                /* OK */&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Other Symbols =&lt;br /&gt;
&lt;br /&gt;
* Library-private and static data use underscores, not intercaps (but library-private data do use a js_ prefix).&lt;br /&gt;
* Scalar type names are lowercase and js-prefixed: jsdouble.&lt;br /&gt;
* Aggregate type names are JS-prefixed and mixed-case: JSObject.&lt;br /&gt;
* Macros are generally ALL_CAPS and underscored, to call out potential side effects, multiple uses of a formal argument, etc.  Line continuation characters should all line up, in column 79 if that exceeds the width of all the macro text.  Macro parameters should be of the form name_ (instead of something like __name).&lt;br /&gt;
&lt;br /&gt;
= Indentation =&lt;br /&gt;
&lt;br /&gt;
* Use spaces, not tabs.  There should be no tabs in source files.&lt;br /&gt;
* Four spaces of indentation per statement nesting level.&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;case L:&amp;lt;/code&amp;gt;&amp;quot; labels in &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; statements count as half of a nesting level, so indent two spaces, with the labeled statements indenting two more for a standard four spaces indentation from &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; to a case-controlled statement.&lt;br /&gt;
 switch (discriminant) {&lt;br /&gt;
   case L1:&lt;br /&gt;
     DoSomething();&lt;br /&gt;
   . . .&lt;br /&gt;
 }&lt;br /&gt;
* Function arguments that overflow the first line of the call expression should be aligned to underhang the first argument (to start in overflow lines in the column after the opening parenthesis).&lt;br /&gt;
 JS_SetContext(rt,         /* bad */&lt;br /&gt;
              cx);&lt;br /&gt;
 JS_SetContext(rt,         /* OK */&lt;br /&gt;
               cx);&lt;br /&gt;
&lt;br /&gt;
= Whitespace in declarations =&lt;br /&gt;
&lt;br /&gt;
These rules are inconsistently applied.  Be consistent with the code you&#039;re editing rather than adhere too closely to these guidelines!&lt;br /&gt;
&lt;br /&gt;
* In a declaration of a pointer, the &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; goes with the variable name:&lt;br /&gt;
 char* s;                  /* bad */&lt;br /&gt;
 char *s;                  /* OK */&lt;br /&gt;
* Even in the return type of a method:&lt;br /&gt;
 class JSString&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
     JSString* dependentBase() const;   /* bad */&lt;br /&gt;
     JSString * dependentBase() const;  /* bad */&lt;br /&gt;
     JSString *dependentBase() const;   /* OK */&lt;br /&gt;
     ...&lt;br /&gt;
 };&lt;br /&gt;
* But in top-level function declarations/definitions, put a line break immediately before the name being declared:&lt;br /&gt;
 extern const char *&lt;br /&gt;
 js_GetStringBytes(JSContext *cx, JSString *str);  /* OK */&lt;br /&gt;
* And put a space in &amp;lt;code&amp;gt;*JS_FASTCALL&amp;lt;/code&amp;gt;, because that would be crazy.&lt;br /&gt;
 extern JSString *JS_FASTCALL           /* bad */&lt;br /&gt;
 js_ConcatStrings(JSContext *cx, JSString *left, JSString *right);&lt;br /&gt;
 extern JSString * JS_FASTCALL          /* OK */&lt;br /&gt;
 js_ConcatStrings(JSContext *cx, JSString *left, JSString *right);&lt;br /&gt;
* In C++ method declarations with default arguments, use spaces and comments like so:&lt;br /&gt;
 static void&lt;br /&gt;
 Frob(JSContext *cx, uint32_t defaultValue = 0);&lt;br /&gt;
 static void&lt;br /&gt;
 Frob(JSContext *cx, uint32_t defaultValue /* = 0 */)&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Other whitespace =&lt;br /&gt;
&lt;br /&gt;
* Code should fit within 99 columns; comments should fit within 80 columns; both figures include indentation. Break down lines that are too long by splitting after a binary operator.&lt;br /&gt;
* Exception: in a &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; statement where each case is a trivially-short statement, it&#039;s ok to put the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt;, the statement, and the &amp;lt;code&amp;gt;break;&amp;lt;/code&amp;gt; all on one line.&lt;br /&gt;
* Comment &amp;lt;code&amp;gt;/* FALL THROUGH */&amp;lt;/code&amp;gt; in place of missing &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; when intentionally falling through from one case-controlled statement sequence into another, or into the &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; statements.&lt;br /&gt;
* Do not use spaces between a function name and its arguments list, or between an array name and the square bracket. Also, do no use spaces after a bracket. Use a space after a comma to separate arguments.&lt;br /&gt;
 JS_SetContext ( rt, cx ); /* bad */&lt;br /&gt;
 JS_SetContext(rt, cx);    /* OK */&lt;br /&gt;
* Use a space between a C keyword and parentheses.&lt;br /&gt;
 if(condition)             /* bad */&lt;br /&gt;
 if (condition)            /* OK */&lt;br /&gt;
* In a conditional, if the consequent (and, if present, the alternate) is a single statement, no braces are used.&lt;br /&gt;
 if (today == &amp;quot;Tuesday&amp;quot;)&lt;br /&gt;
     puts(&amp;quot;I don&#039;t have my wallet on me.&amp;quot;);&lt;br /&gt;
 else&lt;br /&gt;
     puts(&amp;quot;I would gladly pay you on Tuesday for a hamburger today.&amp;quot;);&lt;br /&gt;
However, if &#039;&#039;either&#039;&#039; the consequent or alternate is a block of multiple statements, braces are used on both.&lt;br /&gt;
 if (canSwingFromWeb) {&lt;br /&gt;
     p-&amp;gt;swingFromWeb();&lt;br /&gt;
 } else {&lt;br /&gt;
     JS_ASSERT(p-&amp;gt;isSpiderPig());&lt;br /&gt;
     p-&amp;gt;doWhateverSpiderPigDoes();&lt;br /&gt;
 }&lt;br /&gt;
* Conditions with multi-line tests should put the brace on the new line to provide a visual separation between the condition and the body.&lt;br /&gt;
&lt;br /&gt;
   types::TypeSet *types = frame.extra(lhs).types;&lt;br /&gt;
   if (JSOp(*PC) == JSOP_SETPROP &amp;amp;&amp;amp; id == types::MakeTypeId(cx, id) &amp;amp;&amp;amp;&lt;br /&gt;
       types &amp;amp;&amp;amp; !types-&amp;gt;unknownObject() &amp;amp;&amp;amp;&lt;br /&gt;
       types-&amp;gt;getObjectCount() == 1 &amp;amp;&amp;amp;&lt;br /&gt;
       types-&amp;gt;getTypeObject(0) != NULL &amp;amp;&amp;amp;&lt;br /&gt;
       !types-&amp;gt;getTypeObject(0)-&amp;gt;unknownProperties())&lt;br /&gt;
   {&lt;br /&gt;
       JS_ASSERT(usePropCache);&lt;br /&gt;
       types::TypeObject *object = types-&amp;gt;getTypeObject(0);&lt;br /&gt;
       types::TypeSet *propertyTypes = object-&amp;gt;getProperty(cx, id, false);&lt;br /&gt;
       ...&lt;br /&gt;
   } else {&lt;br /&gt;
       ...&lt;br /&gt;
   }&lt;br /&gt;
However, if there is already a visual separation between the condition and the body, putting the { on a new line isn&#039;t necessary:&lt;br /&gt;
&lt;br /&gt;
   if (forHead-&amp;gt;pn_kid1 &amp;amp;&amp;amp; NewSrcNote2(cx, cg, SRC_DECL,&lt;br /&gt;
                                       (forHead-&amp;gt;pn_kid1-&amp;gt;isOp(JSOP_DEFVAR))&lt;br /&gt;
                                       ? SRC_DECL_VAR&lt;br /&gt;
                                       : SRC_DECL_LET) &amp;lt; 0) {&lt;br /&gt;
       return false;&lt;br /&gt;
   }&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop heads go on one line where possible; when not possible, initializer part, update, and termination parts each go on separate lines&lt;br /&gt;
 for (int i = 0;&lt;br /&gt;
      i &amp;lt; 5;&lt;br /&gt;
      i++) {                 /* bad, could all fit on one line */&lt;br /&gt;
     doStuff();&lt;br /&gt;
 }&lt;br /&gt;
 for (int i = 0; i &amp;lt; 5; i++) /* OK */&lt;br /&gt;
     doStuff();&lt;br /&gt;
 for (size_t ind = JSObject::JSSLOT_DATE_COMPONENTS_START;&lt;br /&gt;
      ind &amp;lt; JSObject::DATE_FIXED_RESERVED_SLOTS; ind++) {   /* bad */&lt;br /&gt;
     obj-&amp;gt;setSlot(ind, DoubleValue(utcTime));&lt;br /&gt;
 }&lt;br /&gt;
 for (size_t ind = JSObject::JSSLOT_DATE_COMPONENTS_START;&lt;br /&gt;
      ind &amp;lt; JSObject::DATE_FIXED_RESERVED_SLOTS;&lt;br /&gt;
      ind++) {                                               /* OK */&lt;br /&gt;
     obj-&amp;gt;setSlot(ind, DoubleValue(utcTime));&lt;br /&gt;
 }&lt;br /&gt;
* In comments, use one space, not two, between sentences and after a colon.&lt;br /&gt;
&lt;br /&gt;
= Control Flow =&lt;br /&gt;
&lt;br /&gt;
* Minimize indentation using return, break, and continue where appropriate.  Prefer return (break, continue) statements to cast out abnormal cases, instead of nesting &amp;quot;if/else&amp;quot; statements and indenting the common cases.&lt;br /&gt;
 void&lt;br /&gt;
 MyFunction(int n)&lt;br /&gt;
 {&lt;br /&gt;
     if (n) {              /* bad */&lt;br /&gt;
         ...&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 void&lt;br /&gt;
 MyFunction(int n)&lt;br /&gt;
 {&lt;br /&gt;
     if (!n)&lt;br /&gt;
         return;           /* OK */&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* If an &amp;quot;if&amp;quot; statement controls a &amp;quot;then&amp;quot; clause ending in a return statement, do not use &amp;quot;else&amp;quot; after return.&lt;br /&gt;
 if (condition) {          /* bad */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     return;&lt;br /&gt;
 } else {&lt;br /&gt;
     DoThat();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 if (condition) {          /* OK */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoThat();&lt;br /&gt;
&lt;br /&gt;
* Avoid similar arbitrary patterns and non-sequiturs:&lt;br /&gt;
 if (condition) {          /* bad */&lt;br /&gt;
     DoThis();&lt;br /&gt;
     DoThat();&lt;br /&gt;
 } else {&lt;br /&gt;
     CleanUp();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoTheOther();&lt;br /&gt;
 if (!condition) {         /* OK */&lt;br /&gt;
     CleanUp();&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
 DoThis();&lt;br /&gt;
 DoThat();&lt;br /&gt;
 DoTheOther();&lt;br /&gt;
&lt;br /&gt;
= Comments =&lt;br /&gt;
&lt;br /&gt;
* In C files, always use C style comments.  C++ comments are ok otherwise.&lt;br /&gt;
* Terminate a comment with a period (so try to make comments be complete sentences).&lt;br /&gt;
 /* This is a good comment. */&lt;br /&gt;
 // This is also a good comment.&lt;br /&gt;
* For C-style multiline comments, align with any indentation, and start every line with an asterisk. Asterisks stack in the same column. Precede the multiline comment with one empty line unless the prior line ends in a left brace. The first line of the comment contains only leading space followed by &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt;. Multiline comments should also be bracketed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (condition) {&lt;br /&gt;
    /*&lt;br /&gt;
     * This is a lengthy C-style&lt;br /&gt;
     * multiline comment.&lt;br /&gt;
     */&lt;br /&gt;
    // This is a length&lt;br /&gt;
    // C++-style comment&lt;br /&gt;
    DoYourStuff();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Entry Points and Callbacks =&lt;br /&gt;
&lt;br /&gt;
* DLL entry points have their return type expanded within a JS_PUBLIC_API() macro call, to get the right Windows secret type qualifiers in the right places for all build variants.&lt;br /&gt;
* Callback functions that might be called from a DLL are similarly macroized with JS_STATIC_DLL_CALLBACK (if the function otherwise would be static to hide its name) or JS_DLL_CALLBACK (this macro takes no type argument; it should be used after the return type and before the function name).&lt;br /&gt;
&lt;br /&gt;
= Data Types and Alignments =&lt;br /&gt;
&lt;br /&gt;
* As with all Mozilla code, SpiderMonkey needs to compile and execute correctly on many platforms, including 64-bits systems.&lt;br /&gt;
* JS and NSPR have common roots in the dawn of time (Netscape 2), and the &amp;lt;code&amp;gt;JS_THREADSAFE&amp;lt;/code&amp;gt; mode of building SpiderMonkey depends on NSPR, so reading the [http://www.mozilla.org/projects/nspr/reference/html/ NSPR documentation] is well worth your while.&lt;br /&gt;
* Not all 64-bit systems use the same integer type model: some are &amp;quot;LP64&amp;quot; (long and pointer are 64 bits, int is 32 bits), while others are &amp;quot;LLP64&amp;quot; (only long long and pointer are 64 bits; long and int are 32 bits).&lt;br /&gt;
* Use size_t for unsigned number of bytes variables, ptrdiff_t for signed pointer subtraction results.  In particular, do not use uintN, which is just shorthand for unsigned int, and so may not be big enough.&lt;br /&gt;
&lt;br /&gt;
= Header files =&lt;br /&gt;
&lt;br /&gt;
== #ifndef wrappers ==&lt;br /&gt;
&lt;br /&gt;
Use this exact form for #ifndef wrappers in header files:&lt;br /&gt;
&lt;br /&gt;
  #ifndef &amp;lt;guard&amp;gt;&lt;br /&gt;
  #define &amp;lt;guard&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  #endif // &amp;lt;guard&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GCC and clang recognize this idiom and avoid re-reading headers that use it.  Don&#039;t put any code before the #ifndef or after the #endif, and don&#039;t put anything else in the #ifndef, otherwise the optimization will be thwarted and the file will be multiply-included.  (Check with the -H option if you want to be sure.)&lt;br /&gt;
&lt;br /&gt;
Include guards should be named by determining the fully-qualified include path,&lt;br /&gt;
then substituting _ for &#039;/&#039; and &#039;.&#039; and &#039;-&#039; in it.  For example, js/src/vm/Stack-inl.h&#039;s guard is vm_Stack_inl_h_, and js/public/Vector.h&#039;s guard is js_Vector_h (because its include path is js/Vector.h).&lt;br /&gt;
&lt;br /&gt;
== #include paths ==&lt;br /&gt;
&lt;br /&gt;
All #include statements should use a fully-qualified (within SpiderMonkey) path, even if it&#039;s not necessary.  For example, this:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;vm/Stack.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
not:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;Stack.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This keeps things consistent and helps with the ordering.&lt;br /&gt;
&lt;br /&gt;
For headers in js/public/, the prefix is &amp;quot;js/&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;js/Vector.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For headers in mfbt/, the prefix is &amp;quot;mozilla/&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;mozilla/Assertions.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== #include ordering ==&lt;br /&gt;
&lt;br /&gt;
The following order is used for module X:  &lt;br /&gt;
* If X-inl.h exists, it goes first.  (And X-inl.h&#039;s first #include should be X.h.) Otherwise, X.h goes first.  This rule ensures that X.h and X-inl.h both #include all the headers that they need themselves.&lt;br /&gt;
* mozilla/*.h&lt;br /&gt;
* &amp;lt;*.h&amp;gt;&lt;br /&gt;
* js*.h&lt;br /&gt;
* */*.h (this includes the public JSAPI headers in js/public/*.h which should be included using the form js/*.h)&lt;br /&gt;
* js*inlines.h&lt;br /&gt;
* */*-inl.h.&lt;br /&gt;
&lt;br /&gt;
Keep (case-insensitive) lexicographic order with each section.&lt;br /&gt;
&lt;br /&gt;
The presence of conditionally-compiled #include statements complicates thing.  If you have a single #include statement within a #if/#ifdef/#ifndef block, placing the block in the appropriate section is straightforward.  If you have multiple #include statements within a block, use your judgment as to where the best place for it is.&lt;br /&gt;
&lt;br /&gt;
Example for X.cpp:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;X.h&amp;quot;    // put &amp;quot;X-inl.h&amp;quot; instead, if it exists&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;mozilla/HashFunctions.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;jsbar.h&amp;quot;&lt;br /&gt;
 #ifdef BAZ&lt;br /&gt;
 # include &amp;quot;jsbaz.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 #include &amp;quot;jscaz.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;ds/Baz.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;js/Bar.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;vm/Bat.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;jssqueeinlines.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;jswoot-inl.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;frontend/Thingamabob-inl.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;vm/VirtualReality-inl.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= C++ =&lt;br /&gt;
&lt;br /&gt;
== Namespaces ==&lt;br /&gt;
&lt;br /&gt;
* Public functions and types should be in the JS:: namespace, in preference to the old JS/JS_ name prefixes.&lt;br /&gt;
* Library-private and friend functions should be in the js:: namespace, in preference to the old js_ name prefix.&lt;br /&gt;
* Compile-time-evaluated functions (i.e., template meta-functions) should be in &#039;js::tl::&#039;, the &amp;quot;template library&amp;quot; namespace, to avoid collision with their runtime counterparts.&lt;br /&gt;
* In SpiderMonkey .cpp files, it is okay to have &#039;using namespace js;&#039;, but it is not okay to do the same with any other namespace, like JS:: or mozilla::. These can introduce ambiguities that come and go depending on which .cpp files the build system decides to unify.&lt;br /&gt;
* If you do have names in JS:: that should be readily available throughout SpiderMonkey, you may add a &#039;using&#039; declaration to js/src/NamespaceImports.h.&lt;br /&gt;
* Avoid unnamed namespaces unless they are necessary to give a class&#039;s members internal linkage.  Although the C++ standard officially deprecates &#039;static&#039; on  functions, &#039;static&#039; has the following advantages over unnamed namespaces:&lt;br /&gt;
** It is difficult to name functions in unnamed namespaces in gdb.&lt;br /&gt;
** Static says &amp;quot;this is a translation-unit-local helper function&amp;quot; on the function, without having to look around for an enclosing &amp;quot;namespace {&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Enums ==&lt;br /&gt;
&lt;br /&gt;
Older code uses SHOUT_REALLY_LOUD for enum values, newer code uses InterCaps. Enums should be preferred to boolean arguments for ease of understanding at the invocation site.&lt;br /&gt;
&lt;br /&gt;
== Classical OOP ==&lt;br /&gt;
&lt;br /&gt;
* Most structs can become classes, with associated functions becoming methods. This already started for the [https://bugzilla.mozilla.org/show_bug.cgi?id=upvar2 upvar2 bug].&lt;br /&gt;
** Style detailing: mrbkap suggests left brace before class body on its own line in column 1 to match function style and facilitate vim navigation. People do this already when inheriting, since the left brace can get lost in the superclass(es).&lt;br /&gt;
 class JSObject&lt;br /&gt;
 {&lt;br /&gt;
      ...&lt;br /&gt;
 }&lt;br /&gt;
* Member variable names, private or public, are sometimes decorated with a trailing &#039;_&#039;.&lt;br /&gt;
 class Fail&lt;br /&gt;
 {&lt;br /&gt;
     size_t capacity;  // common&lt;br /&gt;
     T *begin_;        // also common, being used more as time goes on&lt;br /&gt;
 }&lt;br /&gt;
Sometimes a canonical argument name may conflict with a member name.  In this case, one can disambiguate with &amp;quot;this-&amp;gt;&amp;quot;, although such explicit qualification should only be added when necessary:&lt;br /&gt;
 class C&lt;br /&gt;
 {&lt;br /&gt;
     size_t count;&lt;br /&gt;
     bool fresh;&lt;br /&gt;
     void change(size_t count) {&lt;br /&gt;
         this-&amp;gt;count = count;&lt;br /&gt;
         this-&amp;gt;fresh = false;  // verbose and unnecessary&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
* Most macros become inline helpers. With LiveConnect gone on mozilla-central, we can make the helpers methods of relevant structs or classes finally, instead of static inline functions.&lt;br /&gt;
* Based on 20+ years of bad experiences, we are going to go slow and resist virtual methods and bases, MI, and the like. Function pointer tables for now, as before -- see [https://bugzilla.mozilla.org/show_bug.cgi?id=408416 JSObjectOps needs a make-over].&lt;br /&gt;
* Templates are good, Mozilla has positive experience and the portability is there for the kind of [http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization RAII] helpers we need.&lt;br /&gt;
* No exceptions, so std is hard to use. There is initial work underway to make STL-like containers that mesh well with the rest of the JS engine (see js::Vector, js::HashMap, js::Pool).&lt;br /&gt;
** There are still improvements to be made to the new hash table: double-hash implementation; improve bit-mixing into multiplicative hash if the cycle costs can be supported (measurement is required and we should understand down to the bits what is going on); a js::HashSet or js::HashMap&amp;lt;T,void&amp;gt; specialization such that set-like use of hashtables do not waste any space on values.&lt;br /&gt;
&lt;br /&gt;
=== Initializer lists ===&lt;br /&gt;
&lt;br /&gt;
Initializer lists can break in one of two ways. The first may be preferable when constructors take few arguments:&lt;br /&gt;
&lt;br /&gt;
 class Ninja : public WeaponWeilder, public Camouflagible,&lt;br /&gt;
               public Assassinatable, public ShapeShiftable&lt;br /&gt;
 {&lt;br /&gt;
     Ninja() : WeaponWeilder(Weapons::SHURIKEN),&lt;br /&gt;
               Camouflagible(Garments::SHINOBI_SHOZOKU),&lt;br /&gt;
               Assassinatable(AssassinationDifficulty::HIGHLY_DIFFICULT),&lt;br /&gt;
               ShapeShiftable(MPCost(512)) {}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The other permitted style mitigates longer-identifiers-squishing-text-against-the-right-side-of-the-screen-syndrome by using a half-indented colon:&lt;br /&gt;
&lt;br /&gt;
 class Ninja&lt;br /&gt;
   : public WeaponWeilder, public Camouflagible, public Assassinatable,&lt;br /&gt;
     public ShapeShiftable&lt;br /&gt;
 {&lt;br /&gt;
     Ninja()&lt;br /&gt;
       : WeaponWeilder(Weapons::SHURIKEN),&lt;br /&gt;
         Camouflagible(Garments::SHINOBI_SHOZOKU),&lt;br /&gt;
         Assassinatable(AssassinationDifficulty::HIGHLY_DIFFICULT),&lt;br /&gt;
         ShapeShiftable(MPCost(512)) {}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Inline methods ===&lt;br /&gt;
&lt;br /&gt;
If the method in question fits on one line and is branch free, do a one liner:&lt;br /&gt;
&lt;br /&gt;
 class Eater&lt;br /&gt;
 {&lt;br /&gt;
     void eat(Eaten &amp;amp;other) { other.setConsumed(); }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
If it&#039;s too long, put the type, declarator including formals (unless they overflow), and left brace all on the first line:&lt;br /&gt;
&lt;br /&gt;
 class Eater&lt;br /&gt;
 {&lt;br /&gt;
     Food *obtainFoodFromEatery(Eatery &amp;amp;eatery) {&lt;br /&gt;
         if (!eatery.hasFood())&lt;br /&gt;
             return NULL;&lt;br /&gt;
         return eatery.purchaseFood();&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
For out-of-line inlines (when the definitions are too unwieldy to place in the class definition) use the inline keyword as an indicator that there&#039;s an out-of-line inline definition:&lt;br /&gt;
&lt;br /&gt;
 class SpaceGoo&lt;br /&gt;
 {&lt;br /&gt;
     inline BlobbyWrapper *enblob(Entity &amp;amp;other);&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 inline BlobbyWrapper *&lt;br /&gt;
 SpaceGoo::enblob(Entity &amp;amp;other)&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en/Mozilla_Coding_Style_Guide Mozilla&#039;s coding style guide].&lt;br /&gt;
* [http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml Google&#039;s C++ coding style guide].&lt;br /&gt;
&lt;br /&gt;
= Exceptions to this coding style =&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey contains some code imported from other projects, e.g. ctypes/libffi/, that is minimally modified.  Such code does not have to follow SpiderMonkey style.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=WeeklyUpdates/2013-07-01&amp;diff=671765</id>
		<title>WeeklyUpdates/2013-07-01</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=WeeklyUpdates/2013-07-01&amp;diff=671765"/>
		<updated>2013-07-01T15:32:41Z</updated>

		<summary type="html">&lt;p&gt;Jorend: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;small&amp;gt;[[WeeklyUpdates/{{#time:Y-m-d|{{SUBPAGENAME}} -1 week}}|« previous week]] | [[WeeklyUpdates|index]] | [[WeeklyUpdates/{{#time:Y-m-d|{{SUBPAGENAME}} +1 week}}|next week »]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{conf|8600}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= All-hands Status Meeting Agenda =&lt;br /&gt;
&lt;br /&gt;
Items in this section will be shared during the live all-hand status meeting.&lt;br /&gt;
&lt;br /&gt;
== Friends of the Tree [[Image:Tree.gif|Friends of the Tree]] ==&lt;br /&gt;
* Casey Ransom of Mozilla IT for a breakthrough find that led to relieving bugzilla slowness for all.&lt;br /&gt;
* Jeff Walden of the JavaScript team for an epic review marathon. Jeff performed speedy yet vigilant reviews on dozens of cleanup patches in the JavaScript front end.&lt;br /&gt;
&lt;br /&gt;
== Upcoming Events ==&lt;br /&gt;
&lt;br /&gt;
=== This Week ===&lt;br /&gt;
&lt;br /&gt;
=== Monday, {{#time:d F|{{SUBPAGENAME}}}} ===&lt;br /&gt;
&lt;br /&gt;
=== Tuesday, {{#time:d F|{{SUBPAGENAME}} +1 day}} ===&lt;br /&gt;
Learn how Firefox OS aims to level the mobile playing field, along with market insights and some tips on how to talk about Firefox OS  from a consumer angle.&lt;br /&gt;
* Location: Live Remote on Air Mozilla (https://air.mozilla.org)&lt;br /&gt;
* Start time: 02 July 2013 - 15:00 UTC (8:00am PDT)&lt;br /&gt;
* Speakers: David Slater, Margaret Schroeder, Chad Weiner, Grace Jimenez&lt;br /&gt;
&lt;br /&gt;
=== Wednesday, {{#time:d F|{{SUBPAGENAME}} +2 days}} ===&lt;br /&gt;
&lt;br /&gt;
=== Thursday, {{#time:d F|{{SUBPAGENAME}} +3 days}} ===&lt;br /&gt;
&lt;br /&gt;
=== Friday, {{#time:d F|{{SUBPAGENAME}} +4 days}} ===&lt;br /&gt;
&lt;br /&gt;
=== Saturday, {{#time:d F|{{SUBPAGENAME}} +5 days}} ===&lt;br /&gt;
&lt;br /&gt;
=== Sunday, {{#time:d F|{{SUBPAGENAME}} +6 days}} ===&lt;br /&gt;
&lt;br /&gt;
=== Next Week ===&lt;br /&gt;
&lt;br /&gt;
== Product Status Updates (voice updates) ==&lt;br /&gt;
&lt;br /&gt;
=== Firefox Desktop ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Firefox Mobile ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Thunderbird ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Older Branch Work ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Webmaker ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039; Ankit Gadgil, Inda&lt;br /&gt;
&lt;br /&gt;
[[File:Maker Party events.png|500px]]&lt;br /&gt;
&lt;br /&gt;
* What&#039;s going on with [http://webmaker.org/party Maker Party]?&lt;br /&gt;
* Why it&#039;s exciting and how you can get involved.&lt;br /&gt;
** [https://webmaker.org/events Find an event near you.]&lt;br /&gt;
** [https://webmaker.org/events Host your own.] Our event guides make it easy!&lt;br /&gt;
&lt;br /&gt;
=== Identity ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Services ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Firefox OS ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Grow Mozilla ===&lt;br /&gt;
&#039;&#039;Speaker Location: San Francisco&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Help us [https://blog.mozilla.org/community/2013/04/15/help-us-build-a-history-of-mozilla-told-by-mozillians/ build a history of Mozilla told by Mozillians].  Please share your memories about this Mozilla milestone:&lt;br /&gt;
&lt;br /&gt;
* February 13, 2007: [https://blog.mozilla.org/community/2013/07/01/milestone-the-first-draft-of-the-mozilla-manifesto-is-posted/ The first draft of the Mozilla Manifesto is posted]&lt;br /&gt;
&lt;br /&gt;
[[File:2007_manifesto.jpg|250px]]&lt;br /&gt;
&lt;br /&gt;
== Speakers ==&lt;br /&gt;
&lt;br /&gt;
The limit is 3 minutes per speaker.  It&#039;s like a lightning talk, but don&#039;t feel that you have to have slides in order to make a presentation.  If you plan on showing a video, you need to contact the Air Mozilla team before the day of the meeting or you will be deferred to the next week.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;fullwidth-table&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Presenter&lt;br /&gt;
!  Title&lt;br /&gt;
!  Topic&lt;br /&gt;
!  Location&lt;br /&gt;
!  Share?&lt;br /&gt;
!  Media&lt;br /&gt;
!  More Details&lt;br /&gt;
|-&lt;br /&gt;
| Who Are You?&lt;br /&gt;
| What Do You Do?&lt;br /&gt;
| What are you going to talk about?&lt;br /&gt;
| Where are you presenting from? (Moz Space, your house, space)&lt;br /&gt;
| Will you be sharing your screen? (yes/no, other info)&lt;br /&gt;
| Links to slides or images you want displayed on screen&lt;br /&gt;
| Link to where audience can find out more information&lt;br /&gt;
|-&lt;br /&gt;
| Kate Naszradi, Mardi Douglass, Dino Anderson, Melek Jebnoun&lt;br /&gt;
|&lt;br /&gt;
| Summit Planning Assembly feedback&lt;br /&gt;
| Kate = remote, Mardi/Dino = SF, Melek = remote (Tunisia)&lt;br /&gt;
| Yes, Kate has slides (she&#039;s presenting first)&lt;br /&gt;
|&lt;br /&gt;
| Link to Melek&#039;s blog post (French): http://jebmelek.wordpress.com/2013/06/30/retour-sur-le-weekend-du-mozilla-summit-assembly/ , link to Summit updates : https://blog.mozilla.org/community/category/summit/&lt;br /&gt;
-&lt;br /&gt;
|-&lt;br /&gt;
| Kaitlin Thaney&lt;br /&gt;
| Director, Mozilla Science Lab&lt;br /&gt;
| The new Science Lab, who we are, what we hope to achieve&lt;br /&gt;
| Brooklyn, NY&lt;br /&gt;
| No&lt;br /&gt;
| N/A&lt;br /&gt;
| [http://wiki.mozilla.org/ScienceLab wiki.mozilla.org/ScienceLab] ; [http://twitter.com/MozillaScience @MozillaScience]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Roundtable =&lt;br /&gt;
&lt;br /&gt;
Do you have a question about a Mozilla Project or initiative? Let us know by Friday- we&#039;ll do our best to get you an answer.&lt;br /&gt;
&lt;br /&gt;
Please note that we may not always be able to get to every item on this list, but we will try!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;fullwidth-table&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Who are you?&lt;br /&gt;
! Area of question&lt;br /&gt;
! Question&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;What&#039;s your name? What do you work on?&#039;&#039;&lt;br /&gt;
| &#039;&#039;Is your question about policy, a product, a Foundation initiative, etc.&#039;&#039;&lt;br /&gt;
| &#039;&#039;What would you like to know?&#039;&#039;&lt;br /&gt;
&amp;lt;!-- Insert new rows here --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Welcome! =&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say hello to some new Mozillians!&lt;br /&gt;
&lt;br /&gt;
== Introducing New Hires ==&lt;br /&gt;
{| class=&amp;quot;fullwidth-table&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  New Hire&lt;br /&gt;
!  Introduced by&lt;br /&gt;
!  Speaker location&lt;br /&gt;
!  New Hire location&lt;br /&gt;
!  Will be working on&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Who is the new hire?&#039;&#039;&lt;br /&gt;
| &#039;&#039;Who will be introducing that person?&#039;&#039;&lt;br /&gt;
| &#039;&#039;Where is the introducer?&#039;&#039;&lt;br /&gt;
| &#039;&#039;Where will the new person be working from?&#039;&#039;&lt;br /&gt;
| &#039;&#039;What will the new person be working on?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Michael Comella&lt;br /&gt;
| Mark Finkle&lt;br /&gt;
| Remote - PA&lt;br /&gt;
| SF&lt;br /&gt;
| Mobile&lt;br /&gt;
|-&lt;br /&gt;
| Keegan McAllister&lt;br /&gt;
| Azita Rashed&lt;br /&gt;
| MTV&lt;br /&gt;
| SFO&lt;br /&gt;
| Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Christoph Kerschbaumer&lt;br /&gt;
| Sid Stamm&lt;br /&gt;
| MTV&lt;br /&gt;
| Remote - CA&lt;br /&gt;
| Engineering - Security &amp;amp; Privacy&lt;br /&gt;
|-&lt;br /&gt;
| Alexander Surkov&lt;br /&gt;
| David Bolter&lt;br /&gt;
| Toronto&lt;br /&gt;
| Toronto&lt;br /&gt;
| Engineering&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Introducing New Interns ==&lt;br /&gt;
{| class=&amp;quot;fullwidth-table&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  New Intern&lt;br /&gt;
!  Introduced by&lt;br /&gt;
!  Speaker location&lt;br /&gt;
!  New Hire location&lt;br /&gt;
!  Will be working on&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Verez&lt;br /&gt;
| Joe Stevensen&lt;br /&gt;
| MV&lt;br /&gt;
| MV&lt;br /&gt;
| Ops Security&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= &amp;amp;lt;meta&amp;amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Notes and non-voice status updates that aren&#039;t part of the live meeting go here.&lt;br /&gt;
&lt;br /&gt;
== Status Updates By Team (*non-voice* updates) ==&lt;br /&gt;
&lt;br /&gt;
=== Firefox ===&lt;br /&gt;
&lt;br /&gt;
=== Platform ===&lt;br /&gt;
&lt;br /&gt;
=== Services ===&lt;br /&gt;
&lt;br /&gt;
=== Messaging ===&lt;br /&gt;
&lt;br /&gt;
=== Mobile ===&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
&lt;br /&gt;
=== Release Engineering ===&lt;br /&gt;
&lt;br /&gt;
=== QA ===&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
&lt;br /&gt;
==== WebQA ====&lt;br /&gt;
&lt;br /&gt;
==== QA Community ====&lt;br /&gt;
&lt;br /&gt;
=== Automation &amp;amp; Tools ===&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
&lt;br /&gt;
=== Engagement ===&lt;br /&gt;
&lt;br /&gt;
==== PR ====&lt;br /&gt;
&lt;br /&gt;
==== Events ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[[WeeklyUpdates/{{#time:Y-m-d|{{SUBPAGENAME}} -1 week}}|« previous week]] | [[WeeklyUpdates|index]] | [[WeeklyUpdates/{{#time:Y-m-d|{{SUBPAGENAME}} +1 week}}|next week »]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{conf|8600}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= All-hands Status Meeting Agenda =&lt;br /&gt;
&lt;br /&gt;
Items in this section will be shared during the live all-hand status meeting.&lt;br /&gt;
&lt;br /&gt;
== Friends of the Tree [[Image:Tree.gif|Friends of the Tree]] ==&lt;br /&gt;
&lt;br /&gt;
== Upcoming Events ==&lt;br /&gt;
&lt;br /&gt;
=== This Week ===&lt;br /&gt;
&lt;br /&gt;
=== Monday, {{#time:d F|{{SUBPAGENAME}}}} ===&lt;br /&gt;
&lt;br /&gt;
=== Tuesday, {{#time:d F|{{SUBPAGENAME}} +1 day}} ===&lt;br /&gt;
&lt;br /&gt;
=== Wednesday, {{#time:d F|{{SUBPAGENAME}} +2 days}} ===&lt;br /&gt;
&lt;br /&gt;
=== Thursday, {{#time:d F|{{SUBPAGENAME}} +3 days}} ===&lt;br /&gt;
&lt;br /&gt;
=== Friday, {{#time:d F|{{SUBPAGENAME}} +4 days}} ===&lt;br /&gt;
&lt;br /&gt;
=== Saturday, {{#time:d F|{{SUBPAGENAME}} +5 days}} ===&lt;br /&gt;
&lt;br /&gt;
=== Sunday, {{#time:d F|{{SUBPAGENAME}} +6 days}} ===&lt;br /&gt;
&lt;br /&gt;
=== Next Week ===&lt;br /&gt;
&lt;br /&gt;
== Product Status Updates (voice updates) ==&lt;br /&gt;
&lt;br /&gt;
=== Firefox Desktop ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Firefox Mobile ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Thunderbird ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Older Branch Work ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Webmaker ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Identity ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Services ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Firefox OS ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Grow Mozilla ===&lt;br /&gt;
&#039;&#039;Speaker Location:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Speakers ==&lt;br /&gt;
&lt;br /&gt;
The limit is 3 minutes per speaker.  It&#039;s like a lightning talk, but don&#039;t feel that you have to have slides in order to make a presentation.  If you plan on showing a video, you need to contact the Air Mozilla team before the day of the meeting or you will be deferred to the next week.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;fullwidth-table&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Presenter&lt;br /&gt;
!  Title&lt;br /&gt;
!  Topic&lt;br /&gt;
!  Location&lt;br /&gt;
!  Share?&lt;br /&gt;
!  Media&lt;br /&gt;
!  More Details&lt;br /&gt;
|-&lt;br /&gt;
| Who Are You?&lt;br /&gt;
| What Do You Do?&lt;br /&gt;
| What are you going to talk about?&lt;br /&gt;
| Where are you presenting from? (Moz Space, your house, space)&lt;br /&gt;
| Will you be sharing your screen? (yes/no, other info)&lt;br /&gt;
| Links to slides or images you want displayed on screen&lt;br /&gt;
| Link to where audience can find out more information&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Roundtable =&lt;br /&gt;
&lt;br /&gt;
Do you have a question about a Mozilla Project or initiative? Let us know by Friday- we&#039;ll do our best to get you an answer.&lt;br /&gt;
&lt;br /&gt;
Please note that we may not always be able to get to every item on this list, but we will try!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;fullwidth-table&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Who are you?&lt;br /&gt;
! Area of question&lt;br /&gt;
! Question&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;What&#039;s your name? What do you work on?&#039;&#039;&lt;br /&gt;
| &#039;&#039;Is your question about policy, a product, a Foundation initiative, etc.&#039;&#039;&lt;br /&gt;
| &#039;&#039;What would you like to know?&#039;&#039;&lt;br /&gt;
&amp;lt;!-- Insert new rows here --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Welcome! =&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say hello to some new Mozillians!&lt;br /&gt;
&lt;br /&gt;
== Introducing New Hires ==&lt;br /&gt;
{| class=&amp;quot;fullwidth-table&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  New Hire&lt;br /&gt;
!  Introduced by&lt;br /&gt;
!  Speaker location&lt;br /&gt;
!  New Hire location&lt;br /&gt;
!  Will be working on&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Who is the new hire?&#039;&#039;&lt;br /&gt;
| &#039;&#039;Who will be introducing that person?&#039;&#039;&lt;br /&gt;
| &#039;&#039;Where is the introducer?&#039;&#039;&lt;br /&gt;
| &#039;&#039;Where will the new person be working from?&#039;&#039;&lt;br /&gt;
| &#039;&#039;What will the new person be working on?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- Insert new rows here --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Introducing New Interns ==&lt;br /&gt;
{| class=&amp;quot;fullwidth-table&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  New Intern&lt;br /&gt;
!  Introduced by&lt;br /&gt;
!  Speaker location&lt;br /&gt;
!  New Hire location&lt;br /&gt;
!  Will be working on&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Who is the new intern?&#039;&#039;&lt;br /&gt;
| &#039;&#039;Who will be introducing that person?&#039;&#039;&lt;br /&gt;
| &#039;&#039;Where is the introducer?&#039;&#039;&lt;br /&gt;
| &#039;&#039;Where will the new person be working from?&#039;&#039;&lt;br /&gt;
| &#039;&#039;What will the new person be working on?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- Insert new rows here --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= &amp;amp;lt;meta&amp;amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Notes and non-voice status updates that aren&#039;t part of the live meeting go here.&lt;br /&gt;
&lt;br /&gt;
== Status Updates By Team (*non-voice* updates) ==&lt;br /&gt;
&lt;br /&gt;
=== Firefox ===&lt;br /&gt;
&lt;br /&gt;
=== Platform ===&lt;br /&gt;
&lt;br /&gt;
=== Services ===&lt;br /&gt;
&lt;br /&gt;
=== Messaging ===&lt;br /&gt;
&lt;br /&gt;
=== Mobile ===&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
&lt;br /&gt;
=== Release Engineering ===&lt;br /&gt;
&lt;br /&gt;
=== QA ===&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
&lt;br /&gt;
==== WebQA ====&lt;br /&gt;
&lt;br /&gt;
==== QA Community ====&lt;br /&gt;
&lt;br /&gt;
=== Automation &amp;amp; Tools ===&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
&lt;br /&gt;
=== Engagement ===&lt;br /&gt;
&lt;br /&gt;
==== PR ====&lt;br /&gt;
&lt;br /&gt;
==== Events ====&lt;br /&gt;
&lt;br /&gt;
==== Creative Team ====&lt;br /&gt;
&lt;br /&gt;
==== Community Marketing ====&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
&lt;br /&gt;
=== Metrics ===&lt;br /&gt;
&lt;br /&gt;
=== Evangelism ===&lt;br /&gt;
&lt;br /&gt;
=== Labs ===&lt;br /&gt;
&lt;br /&gt;
=== Apps ===&lt;br /&gt;
&lt;br /&gt;
=== Developer Tools ===&lt;br /&gt;
&lt;br /&gt;
=== Add-ons ===&lt;br /&gt;
&lt;br /&gt;
=== Webdev ===&lt;br /&gt;
&lt;br /&gt;
=== L10n ===&lt;br /&gt;
&lt;br /&gt;
=== People Team ===&lt;br /&gt;
&lt;br /&gt;
=== WebFWD ===&lt;br /&gt;
&lt;br /&gt;
== Foundation Updates ==&lt;br /&gt;
&lt;br /&gt;
==== Creative Team ====&lt;br /&gt;
&lt;br /&gt;
==== Community Marketing ====&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
&lt;br /&gt;
=== Metrics ===&lt;br /&gt;
&lt;br /&gt;
=== Evangelism ===&lt;br /&gt;
&lt;br /&gt;
=== Labs ===&lt;br /&gt;
&lt;br /&gt;
=== Apps ===&lt;br /&gt;
&lt;br /&gt;
=== Developer Tools ===&lt;br /&gt;
&lt;br /&gt;
=== Add-ons ===&lt;br /&gt;
&lt;br /&gt;
=== Webdev ===&lt;br /&gt;
&lt;br /&gt;
=== L10n ===&lt;br /&gt;
&lt;br /&gt;
=== People Team ===&lt;br /&gt;
&lt;br /&gt;
=== WebFWD ===&lt;br /&gt;
&lt;br /&gt;
== Foundation Updates ==&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Gaia/Hacking&amp;diff=641892</id>
		<title>Gaia/Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Gaia/Hacking&amp;diff=641892"/>
		<updated>2013-03-27T16:27:06Z</updated>

		<summary type="html">&lt;p&gt;Jorend: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; This page is soon migrating to [https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Gaia/Hacking MDN]. Please contribute your changes there.&lt;br /&gt;
&lt;br /&gt;
Gaia is the collection of [https://developer.mozilla.org/apps web apps] which make up the front end of [http://www.mozilla.org/firefoxos/ Firefox OS] (codenamed [https://wiki.mozilla.org/B2G Boot to Gecko]).&lt;br /&gt;
&lt;br /&gt;
Everything you see on the screen in Firefox OS is built using open web technologies, including the homescreen and dialer.&lt;br /&gt;
&lt;br /&gt;
You can get started hacking on Gaia with nothing more than a web browser and a text editor, so what are you waiting for?&lt;br /&gt;
&lt;br /&gt;
== Running Gaia Apps ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to run Gaia apps:&lt;br /&gt;
&lt;br /&gt;
* B2G Desktop&lt;br /&gt;
* B2G on a device&lt;br /&gt;
&lt;br /&gt;
=== B2G Desktop ===&lt;br /&gt;
&lt;br /&gt;
B2G Desktop is a desktop build of the B2G app runtime used on devices where all apps should run as they would on a device, including the homescreen.&lt;br /&gt;
&lt;br /&gt;
=== Aurora Builds (v1 everyone should use this) ===&lt;br /&gt;
&lt;br /&gt;
You can download an Aurora build of B2G Desktop from [http://ftp.mozilla.org/pub/mozilla.org/b2g/nightly/latest-mozilla-b2g18/ http://ftp.mozilla.org/pub/mozilla.org/b2g/nightly/latest-mozilla-b2g18/] for Linux, OS X and Windows.&lt;br /&gt;
&lt;br /&gt;
Aurora/Nightly builds include gaia by default, and they should just run out of the box.  This is done by using a wrapper program.  When a profile is bundled with the nightly build (GAIADIR specified in the mozconfig), the binary &#039;b2g&#039; is a wrapper program and &#039;b2g-bin&#039; is the actual b2g binary.&lt;br /&gt;
&lt;br /&gt;
If you want to modify Gaia, you will need to separately clone and &amp;quot;build&amp;quot; Gaia:&lt;br /&gt;
&lt;br /&gt;
 $ git clone git://github.com/mozilla-b2g/gaia.git gaia&lt;br /&gt;
 $ cd gaia&lt;br /&gt;
 $ DEBUG=1 make&lt;br /&gt;
&lt;br /&gt;
Then you just run with B2G Desktop instead of Firefox.  The nightlies produced for TBPL use &#039;b2g-bin&#039;.  If you build a desktop build yourself without specifying &amp;quot;GAIADIR=/path/to/gaia/repo&amp;quot; in your mozconfig, use &#039;b2g&#039;: &lt;br /&gt;
&lt;br /&gt;
 $ /path/to/b2g-bin -profile /path/to/gaia/profile&lt;br /&gt;
&lt;br /&gt;
On OSX, the b2g-bin will be in the B2G.app package contents, so the path is a little different:&lt;br /&gt;
&lt;br /&gt;
 $ /path/to/b2g/B2G.app/Contents/MacOS/b2g-bin -profile /path/to/gaia/profile&lt;br /&gt;
&lt;br /&gt;
To update gaia you run the following command inside the Gaia directory:&lt;br /&gt;
&lt;br /&gt;
 $ git pull&lt;br /&gt;
&lt;br /&gt;
(or &amp;quot;git fetch &amp;amp;&amp;amp; git merge upstream/master&amp;quot; if you checked out from your own clone).&lt;br /&gt;
&lt;br /&gt;
=== Gaia Version 2 ===&lt;br /&gt;
&lt;br /&gt;
Use the below builds for work on version 2 of Gaia.&lt;br /&gt;
&lt;br /&gt;
You can download a nightly build of B2G Desktop from [http://ftp.mozilla.org/pub/mozilla.org/b2g/nightly/latest-mozilla-central/ http://ftp.mozilla.org/pub/mozilla.org/b2g/nightly/latest-mozilla-central/] for Linux, OS X and Windows.&lt;br /&gt;
&lt;br /&gt;
=== Build Your Own B2G Desktop ===&lt;br /&gt;
&lt;br /&gt;
If you prefer you can build B2G Desktop yourself by checking it out from mozilla-central using Mercurial:&lt;br /&gt;
&lt;br /&gt;
 $ hg clone http://hg.mozilla.org/mozilla-central src&lt;br /&gt;
&lt;br /&gt;
Before building, make sure you have the correct [https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions#Build_prerequisites build prerequisites] to build mozilla-central for your platform. After that, create a file called .mozconfig in your source tree to configure some options. Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
 mk_add_options MOZ_OBJDIR=../build&lt;br /&gt;
 mk_add_options MOZ_MAKE_FLAGS=&amp;quot;-j9 -s&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ac_add_options --enable-application=b2g&lt;br /&gt;
 ac_add_options --disable-libjpeg-turbo&lt;br /&gt;
  &lt;br /&gt;
 # This option is required if you want to be able to run Gaia&#039;s tests&lt;br /&gt;
 ac_add_options --enable-tests&lt;br /&gt;
 &lt;br /&gt;
 # turn on mozTelephony/mozSms interfaces&lt;br /&gt;
 # Only turn this line on if you actually have a dev phone&lt;br /&gt;
 # you want to forward to. If you get crashes at startup,&lt;br /&gt;
 # make sure this line is commented.&lt;br /&gt;
 #ac_add_options --enable-b2g-ril&lt;br /&gt;
&lt;br /&gt;
If you&#039;d like to build with a packaged profile and include the b2g wrapper script, you can add the following to your mozconfig (with correct path):&lt;br /&gt;
 &lt;br /&gt;
 GAIADIR=/path/to/gaia/repo&lt;br /&gt;
&lt;br /&gt;
Note that if you add GAIADIR to your .mozconfig or change it after you have already built, then you will need to delete your object directory in order for GAIADIR to have any affect.&lt;br /&gt;
&lt;br /&gt;
Then run make inside the mozilla-central directory:&lt;br /&gt;
&lt;br /&gt;
 $ make -f client.mk build&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Ensure you&#039;re using python2 and not python3 as the build will fail with python3.&lt;br /&gt;
&lt;br /&gt;
The build will appear in ../build (or whatever MOZ_OBJDIR is set to in your .mozconfig) and will take a &#039;&#039;long&#039;&#039; time the first time you build.&lt;br /&gt;
&lt;br /&gt;
==== Running gaia on B2G ====&lt;br /&gt;
&lt;br /&gt;
On Linux, once it&#039;s built you can run B2G with:&lt;br /&gt;
&lt;br /&gt;
 # if you specified GAIADIR (e.g. Mozilla Nightlies)&lt;br /&gt;
 $ ../build/dist/bin/b2g-bin -profile /path/to/gaia/profile&lt;br /&gt;
 &lt;br /&gt;
 # if you did not specify GAIADIR&lt;br /&gt;
 $ ../build/dist/bin/b2g -profile /path/to/gaia/profile&lt;br /&gt;
&lt;br /&gt;
(substituting /path/to/gaia with the path to which you cloned Gaia).&lt;br /&gt;
&lt;br /&gt;
On OSX, once it&#039;s built, you can run B2G with:&lt;br /&gt;
&lt;br /&gt;
 # if you specified GAIADIR (e.g. Mozilla Nightlies)&lt;br /&gt;
 $ ../build/dist/B2G.app/Contents/MacOS/b2g-bin -profile /path/to/gaia/profile&lt;br /&gt;
 &lt;br /&gt;
 # if you did not specify GAIADIR&lt;br /&gt;
 $ ../build/dist/B2G.app/Contents/MacOS/b2g -profile /path/to/gaia/profile&lt;br /&gt;
&lt;br /&gt;
When you want to update your own B2G Desktop build do:&lt;br /&gt;
&lt;br /&gt;
 $ hg pull &amp;amp;&amp;amp; hg update&lt;br /&gt;
 $ make -C ../build/b2g&lt;br /&gt;
&lt;br /&gt;
In the gaia directory:&lt;br /&gt;
&lt;br /&gt;
 $ git pull&lt;br /&gt;
&lt;br /&gt;
== Simulating Hardware Buttons ==&lt;br /&gt;
&lt;br /&gt;
On a desktop B2G build, you don&#039;t have access to hardware buttons, but you can simulate them:&lt;br /&gt;
&lt;br /&gt;
==== Linux / Windows ====&lt;br /&gt;
* Home button: Home key&lt;br /&gt;
* Power button: End key&lt;br /&gt;
* Volume button: Page Up/Down keys&lt;br /&gt;
* Open Cards View: long press to Home key&lt;br /&gt;
&lt;br /&gt;
==== OS X ====&lt;br /&gt;
* Home button: fn + ← (fn + left arrow)&lt;br /&gt;
* Power button: fn + → (fn + right arrow)&lt;br /&gt;
* Volume button: fn + ↑/↓ (fn + up/down arrows)&lt;br /&gt;
* Open Cards View: cmd + fn + ← (cmd + fn + left arrow)&lt;br /&gt;
&lt;br /&gt;
== B2G on a device ==&lt;br /&gt;
&lt;br /&gt;
It is possible to build &amp;amp; run Firefox OS on a limited number of smartphones. Please see [https://github.com/mozilla-b2g/B2G/blob/master/README.md documentation here].&lt;br /&gt;
&lt;br /&gt;
There is also [https://wiki.mozilla.org/B2G/DeveloperPhone#Gaia.2FB2G_Development_Environment documentation here] about testing changes on your device.&lt;br /&gt;
&lt;br /&gt;
== Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
Gaia comes with a suite of unit tests, which you can run using the built-in Test Agent app (by running it in B2G desktop, B2G on a device, or by navigating to http://test-agent.gaiamobile.org:8080 in Firefox Nightly).&lt;br /&gt;
&lt;br /&gt;
See [https://developer.mozilla.org/en-US/docs/Mozilla/Boot_to_Gecko/Gaia_Unit_Tests here] for more information on writing and running unit tests for Gaia.&lt;br /&gt;
&lt;br /&gt;
== Filing Bugs ==&lt;br /&gt;
Bugs are filed on Bugzilla under [https://bugzilla.mozilla.org/buglist.cgi?product=Boot2Gecko&amp;amp;component=Gaia&amp;amp;resolution=--- Boot2Gecko &amp;gt; Gaia].&lt;br /&gt;
&lt;br /&gt;
File a new bug under the Gaia component (or one of the sub-components) [https://bugzilla.mozilla.org/enter_bug.cgi?product=Boot2Gecko here]&lt;br /&gt;
&lt;br /&gt;
== Contributing Code ==&lt;br /&gt;
&lt;br /&gt;
Mozilla depends on contributions from the open source community to help develop Gaia apps and we&#039;d love you to get involved.&lt;br /&gt;
&lt;br /&gt;
Some great places to find some bugs to start hacking on:&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?quicksearch=component:gaia%20sw:polish%20@nobody;list_id=4566236 Unowned Gaia polish bugs on Bugzilla]&lt;br /&gt;
* [http://www.joshmatthews.net/bugsahoy/?b2g=1 Mentored bugs]&lt;br /&gt;
&lt;br /&gt;
=== Submitting a Patch ===&lt;br /&gt;
* Assign an un-owned Gaia bug to yourself on [https://bugzilla.mozilla.org/buglist.cgi?product=Boot2Gecko&amp;amp;component=Gaia&amp;amp;resolution=--- Bugzilla] (you&#039;ll need a Bugzilla account).&lt;br /&gt;
* Fork [https://github.com/mozilla-b2g/gaia Gaia on Github] (you&#039;ll need a GitHub account) and clone your fork&lt;br /&gt;
 $ git clone https://github.com/USERNAME/gaia.git gaia&lt;br /&gt;
* Develop in a branch on your fork (remembering to keep to the [https://wiki.mozilla.org/Gaia/Hacking#Coding_Style Coding Style guidelines] for Gaia)&lt;br /&gt;
 $ git branch BRANCHNAME&lt;br /&gt;
 $ git checkout BRANCHNAME&lt;br /&gt;
* Commit your changes&lt;br /&gt;
 $ git add /FILE/TO/ADD&lt;br /&gt;
 $ git commit -m &amp;quot;COMMIT MESSAGE INCLUDING BUG NUMBER&amp;quot;&lt;br /&gt;
* Push to your branch&lt;br /&gt;
 $ git push origin BRANCHNAME&lt;br /&gt;
* Send a pull request by navigating to the branch in your fork on GitHub and finding the pull request button&lt;br /&gt;
* Paste a link to the pull request in the bug on Bugzilla&lt;br /&gt;
* Your patch will be reviewed on Github (if it isn&#039;t getting reviewed try asking around on IRC or the mailing list or commenting on the bug)&lt;br /&gt;
* To make changes in response to the code review, just push more commits to the same branch and your pull request will get updated automatically&lt;br /&gt;
 $ git add /FILE/TO/ADD&lt;br /&gt;
 $ git commit -m &amp;quot;COMMIT MESSAGE&amp;quot;&lt;br /&gt;
 $ git push&lt;br /&gt;
&lt;br /&gt;
(ideally squash all your changes into a single commit using git rebase)&lt;br /&gt;
&lt;br /&gt;
* Once the reviewer is happy with your patch, they will merge it into the master branch for you&lt;br /&gt;
&lt;br /&gt;
(ideally the commit message should have r=REVIEWER_NAME added to the commit message of a the squashed commit and your patch includes a passing unit test)&lt;br /&gt;
&lt;br /&gt;
=== Reviewers ===&lt;br /&gt;
&lt;br /&gt;
Gaia now has module owners and peers! For code reviews, ask any of the peers listed [https://wiki.mozilla.org/Modules/Boot2Gecko here].&lt;br /&gt;
&lt;br /&gt;
=== Coding Style ===&lt;br /&gt;
* Background:&lt;br /&gt;
** [[MDC:Developer Guide/Coding Style#General practices]]&lt;br /&gt;
** [[MDC:Developer Guide/Coding Style#JavaScript practices]]&lt;br /&gt;
** [[MDC:Developer Guide/Coding Style#Naming and Formatting code]]&lt;br /&gt;
&lt;br /&gt;
* make sure HTML files are declared &amp;amp;lt;!DOCTYPE html&amp;amp;gt; (i.e., HTML5).  IE9+ will load them in compatibility mode otherwise.&lt;br /&gt;
&lt;br /&gt;
* add a &amp;lt;code&amp;gt;&amp;quot;use strict&amp;quot;;&amp;lt;/code&amp;gt; statement (exactly that!) to the top of your JS files&lt;br /&gt;
&lt;br /&gt;
* 2 spaces for indentation - do not use tab.&lt;br /&gt;
&lt;br /&gt;
* Line break are free (I promise) don&#039;t hesitate to use them to separate logical block inside your functions.&lt;br /&gt;
&lt;br /&gt;
* Files are named &amp;lt;code&amp;gt;like_this.js&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Use single quote instead of double quotes.&lt;br /&gt;
&lt;br /&gt;
* Additional rules:&lt;br /&gt;
Bad:&lt;br /&gt;
 if (expression) doSomething();&lt;br /&gt;
&lt;br /&gt;
Correct:&lt;br /&gt;
 if (expression)&lt;br /&gt;
   doSomething();&lt;br /&gt;
&lt;br /&gt;
=== System app ===&lt;br /&gt;
&lt;br /&gt;
See here for some rules.&lt;br /&gt;
https://groups.google.com/d/msg/mozilla.dev.gaia/rEhSrw6XmT4/UNvE7qW9pgYJ&lt;br /&gt;
&lt;br /&gt;
=== Before submitting a patch ===&lt;br /&gt;
On each javascript files you are adding or you have modified, run:&lt;br /&gt;
 gjslint --nojsdoc my_file.js&lt;br /&gt;
&lt;br /&gt;
http://code.google.com/closure/utilities/docs/linter_howto.html&lt;br /&gt;
&lt;br /&gt;
Set of smoke tests to run before you check-in a patch:&lt;br /&gt;
[[media:PatchSmokeTests.pdf|PatchSmokeTests.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Contacting The Team ==&lt;br /&gt;
* [https://lists.mozilla.org/listinfo/dev-gaia Gaia Mailing List]&lt;br /&gt;
* #gaia IRC channel on irc.mozilla.org&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
=== Linux B2G Desktop support ===&lt;br /&gt;
&lt;br /&gt;
==== The homescreen is empty ====&lt;br /&gt;
Currently, under Linux, OOP (Out of Process) frame aren&#039;t rendered properly.&lt;br /&gt;
The homescreen isn&#039;t actually rendered here...&lt;br /&gt;
&lt;br /&gt;
If you just want to happily hack on pure UI (css and JS) you can safely run with OOP disabled and avoid those issues.&lt;br /&gt;
Change the line in build/settings.py&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;debug.oop.disabled&amp;quot;: False,&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;debug.oop.disabled&amp;quot;: True,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then rebuild your profile with&lt;br /&gt;
&lt;br /&gt;
  $ rm -r profile &amp;amp;&amp;amp; make&lt;br /&gt;
&lt;br /&gt;
=== Port Forwarding ===&lt;br /&gt;
To forward the socket on the phone to the desktop (for desktop development), you first need to get rilproxy to expose it as such, rather than exposing it to Gecko. In the gaia directory:&lt;br /&gt;
&lt;br /&gt;
  $ make forward&lt;br /&gt;
&lt;br /&gt;
This runs the commands: &lt;br /&gt;
 $ adb shell touch /data/local/rilproxyd&lt;br /&gt;
 $ adb shell killall rilproxy&lt;br /&gt;
 $ adb forward tcp:6200 localreserved:rilproxyd&lt;br /&gt;
&lt;br /&gt;
The file located at /data/local/rilproxyd will be deleted once the rilproxy daemon will start again. As a consequence you have to do this manipulation every time your device restarts.&lt;br /&gt;
&lt;br /&gt;
=== Restarting B2G on a device from the desktop ===&lt;br /&gt;
 adb shell killall b2g&lt;br /&gt;
&lt;br /&gt;
=== B2G Desktop JavaScript Console ===&lt;br /&gt;
&lt;br /&gt;
You can run B2G Desktop with the JavaScript console by using the -jsconsole flag&lt;br /&gt;
&lt;br /&gt;
 $ /path/to/b2g-bin -jsconsole&lt;br /&gt;
&lt;br /&gt;
=== Launching an app directly ===&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;--runapp&amp;quot; option has been added to the B2G Desktop command-line to automatically start an application. The system app is loaded and everything happens like normal; this is not like the old trick where we loaded your app instead of the system app.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;--runapp&amp;quot; takes an argument that it normalizes by lower-casing and removing dashes and spaces, and then checks the argument against the similarly normalized app names from app manifests. For example, the name of the e-mail app is currently &amp;quot;E-Mail&amp;quot;, but &amp;quot;--runapp email&amp;quot; will run it. Partial matching is not supported right now, but you can enhance b2g/chrome/content/runapp.js if your app name is unwieldy.&lt;br /&gt;
&lt;br /&gt;
If you invoke &amp;quot;--runapp&amp;quot; without an argument (or an empty argument), the command will print out a list of all the apps it knows about as well as a brief usage message.&lt;br /&gt;
&lt;br /&gt;
One important note is that this command disables the lock-screen as part of its magic and does not re-enable it. The assumption is that you won&#039;t use this command on a profile where you are testing the lock screen, or will turn it back on manually. Feel free to enhance the command to behave better if this is a problem for you.&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
 ./b2g -profile /path/to/your/gaia/profile --runapp email&lt;br /&gt;
&lt;br /&gt;
runs the e-mail app. &lt;br /&gt;
&lt;br /&gt;
=== reset-gaia and install-gaia make targets ===&lt;br /&gt;
&lt;br /&gt;
The reset-gaia and install-gaia make targets can be used interchangeably. reset-gaia will purge all the existing profiles, database before push Gaia from your working directory (new setting database will also be initialized); install-gaia will just push updates of Gaia. &lt;br /&gt;
&lt;br /&gt;
=== Blank screen when B2G Desktop starts ===&lt;br /&gt;
When you start b2g using b2g -profile $GAIA/profile a blank screen shows up and you see an error Cannot reach app://system.gaiamobile.org. To fix this there are a couple of things you can check&lt;br /&gt;
&lt;br /&gt;
* Rebuild the gaia profile using DEBUG=1 make profile in the $GAIA directory&lt;br /&gt;
* Run b2g again&lt;br /&gt;
* If this doesn&#039;t fix it, check if there is any other process listening on port 8080. The default profile of gaia starts httpd.js, which listens on port 8080. When running a debug profile, b2g connects to localhost:8080. If some other process is running on port 8080, b2g will fail to display the home screen of gaia&lt;br /&gt;
** To find out if this is the case, you can enable logging on httpd.js. The httpd.js in the profile resides in this location - $GAIA/profile/extensions/httpd/content/httpd.js. Edit the variable var DEBUG=false; to change the DEBUG to true. Save the file and restart b2g. On the console now, you will be able to view the httpd&#039;s logs&lt;br /&gt;
&lt;br /&gt;
=== Diagnosing OOM problems === &lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.mozilla.org/show_bug.cgi?id=798747#c7 From Cjones]: &lt;br /&gt;
&lt;br /&gt;
Another way to diagnose possible OOMs is to open a terminal and run&lt;br /&gt;
&lt;br /&gt;
$ watch -n 1 &#039;adb shell b2g-procrank&#039;&lt;br /&gt;
&lt;br /&gt;
If you see the &amp;quot;USS&amp;quot; of one of the app processes go up near 100MB and then that process disappear from the process list (accompanied by some sort of visual crash in gaia), then you&#039;ve almost certainly seen an OOM kill.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=456632</id>
		<title>Modules/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Core&amp;diff=456632"/>
		<updated>2012-07-31T19:42:12Z</updated>

		<summary type="html">&lt;p&gt;Jorend: Add ejpbruel as a JS peer for the proxy code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Module&lt;br /&gt;
|name=Accessibility&lt;br /&gt;
|description=Support for platform accessibility APIs. Accessibility APIs are used by 3rd party software like screen readers, screen magnifiers, and voice dictation software, which need information about document content and UI controls, as well as important events like changes of focus.&lt;br /&gt;
|owner=[mailto:surkov.alexander@gmail.com Alexander Surkov]&lt;br /&gt;
|peers=[mailto:bolterbugz@gmail.com David Bolter], [mailto:ginn.chen@oracle.com Ginn Chen], [mailto:trev.saunders@gmail.com Trevor Saunders], [mailto:marco.zehe@googlemail.com Marco Zehe] &lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=accessible/&lt;br /&gt;
|url=http://www.mozilla.org/access/&lt;br /&gt;
|components=Core::Disability Access APIs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build and Release Tools&lt;br /&gt;
|description=Tools related to build and release automation and configuration of release builds.&lt;br /&gt;
|owner=[mailto:nrthomas@gmail.com Nick Thomas]&lt;br /&gt;
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:ccooper@deadsquid.com Chris Cooper], [mailto:cmp@mozilla.org Chase Phillips], [mailto:mozpreed@sigkill.com John Paul Reed], [mailto:robert@roberthelmer.com Robert Helmer]&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=tools/botrunner.py, tools/build-environment/, tools/build/, tools/buildbot-configs/, tools/buildbot/, tools/buildbotcustom/, tools/l10n/, tools/MozBuild/, tools/patcher-configs/, tools/patcher/, tools/release/, tools/tinderbox-configs/, tools/tinderbox/, tools/update-packaging/, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=&lt;br /&gt;
|components=mozilla.org::Release Engineering, mozilla.org::Release Engineering: Custom Builds&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Build Config&lt;br /&gt;
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.&lt;br /&gt;
|owner=[mailto:ted.mielczarek@gmail.com Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:mark@moxienet.com Mark Mentovai], [mailto:me@kylehuey.com Kyle Huey], [mailto:mh@glandium.org Mike Hommey], [mailto:mitchell.field@live.com.au Mitchell Field], [mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|group=dev-builds&lt;br /&gt;
|source_dirs=build/, config/, tools/cross-commit, tools/cvs2hg-import.py, tools/cvsmgmt/, tools/elf-dynstr-gc/, tools/trees.pl, browser/config/mozconfigs/, mobile/config/mozconfigs/, xulrunner/config/mozconfigs/&lt;br /&gt;
|url=http://www.mozilla.org/build/&lt;br /&gt;
|components=Core::Build Config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Code Analysis and Debugging Tools&lt;br /&gt;
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-performance&lt;br /&gt;
|source_dirs=tools/codesighs/, tools/debug/, tools/dreftool/, tools/dumpdeps/, tools/footprint/, tools/jprof/, tools/leaky/, tools/memory/, tools/module-deps/, tools/performance/, tools/post_compile/, tools/preloader/, tools/rb/, tools/reorder/, tools/trace-malloc/, tools/uuiddeps/, &lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Content HTTP Headers&lt;br /&gt;
|description=HTTP headers related to content, e.g. User-Agent, Content-Type, Accept. (Transport-related headers are the responsibility of the Necko module owner.)&lt;br /&gt;
|owner=[mailto:gerv@mozilla.org Gervase Markham]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs= &lt;br /&gt;
|url=https://developer.mozilla.org/en/Gecko_user_agent_string_reference&lt;br /&gt;
|components=Core::Networking: HTTP&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Cookies and Permissions&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dwitte@mozilla.com Dan Witte]&lt;br /&gt;
|peers=[mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:mconnor@steelgryphon.com Mike Connor], [mailto:sdwilsh@shawnwilsher.com Shawn Wilsher]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=extensions/cookie/, netwerk/cookie/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Networking: Cookies&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=docshell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|peers=[mailto:cbiesinger@gmail.com Christian Biesinger],[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:jst@mozilla.org Johnny Stenback], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:justin.lebar@gmail.com Justin Lebar]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=docshell/, uriloader/, webshell/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Document Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Document Object Model&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:bent@mozilla.com Ben Turner], [mailto:mounir.lamouri@mozilla.com Mounir Lamouri], [mailto:khuey@kylehuey.com Kyle Huey], [mailto:justin.lebar@gmail.com Justin Lebar], [mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=content/base/, content/events/, content/html/content/, content/html/document/, dom/%, dom/base/, dom/interfaces/, dom/locales/, dom/public/, dom/src/, dom/tests/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/DOM&lt;br /&gt;
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core &amp;amp; HTML, Core::DOM: Events, Core::DOM: Mozilla Extensions, Core::DOM: Other, Core::DOM: Traversal-Range, Core::DOM: Validation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Web Workers&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:bent@mozilla.com Ben Turner]&lt;br /&gt;
|peers=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/workers/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_web_workers&lt;br /&gt;
|components=Core::DOM: Workers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IndexedDB&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|peers=[mailto:bent@mozilla.com Ben Turner], [mailto:khuey@mozilla.com Kyle Huey] &lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=dom/indexedDB/&lt;br /&gt;
|url=https://developer.mozilla.org/en/IndexedDB&lt;br /&gt;
|components=Core::DOM: IndexedDB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Editor&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=editor/&lt;br /&gt;
|url=http://www.mozilla.org/editor/&lt;br /&gt;
|components=Core::Editor&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Embedding&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jst@mozilla.org Johnny Stenback]&lt;br /&gt;
|group=dev-embedding&lt;br /&gt;
|source_dirs=embedding/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Embedding: APIs, Core::Embedding: ActiveX Wrapper, Core::Embedding: GRE Core, Core::Embedding: GTK Widget, Core::Embedding: MFC Embed, Core::Embedding: Mac, Core::Embedding: Packaging&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Find As You Type&lt;br /&gt;
|description=Find As You Type (formerly called Type Ahead Find) is a feature that allows quick web page navigation when you type a succession of characters in the body of the displayed page (not in an edit box of or drop down list). Currently seeks new owner.&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=extensions/typeaheadfind/&lt;br /&gt;
|url=http://www.mozilla.org/access/type-ahead/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Geolocation&lt;br /&gt;
|description=Implementation of the Geolocation W3C Spec, location provider apis, and wifi scanning code.&lt;br /&gt;
|owner=[mailto:dougt@dougt.org Doug Turner]&lt;br /&gt;
|peers=[mailto:josh@joshmatthews.net Josh Matthews]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=dom/src/geolocation, dom/system/, netwerk/wifi&lt;br /&gt;
|url=https://developer.mozilla.org/En/Using_geolocation&lt;br /&gt;
|components=Core::Geolocation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Global Key Bindings&lt;br /&gt;
|description=Global hot keys in Mozilla for the browser, editor, mail-news and widgets. Does not include underlined menu accelerators and the like, as those are part of i18n.&lt;br /&gt;
|owner=[mailto:aaronleventhal@moonset.net Aaron Leventhal]&lt;br /&gt;
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|group=dev-accessibility&lt;br /&gt;
|source_dirs=content/xbl/builtin/&lt;br /&gt;
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html&lt;br /&gt;
|components=Core::Keyboard: Navigation&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Graphics&lt;br /&gt;
|description=Mozilla graphics API&lt;br /&gt;
|owner=[mailto:jdrew@mozilla.com Joe Drew], [mailto:jrmuizel@mozilla.com Jeff Muizelaar]&lt;br /&gt;
|peers=[mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:bas.schouten@live.nl Bas Schouten], [mailto:bjacob@mozilla.com Benoit Jacob], [mailto:bgirard@mozilla.com Benoit Girard], [mailto:ajuma@mozilla.com Ali Juma], [mailto:jgilbert@mozilla.com Jeff Gilbert], [mailto:george@mozilla.com George Wright], [mailto:mwoodrow@mozilla.com Matt Woodrow], [mailto:jdaggett@mozilla.com John Daggett], [mailto:jfkthame@googlemail.com Jonathan Kew]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=gfx/, content/canvas/src/&lt;br /&gt;
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch&lt;br /&gt;
|components=Core::Graphics, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=GTK Embedding Widget&lt;br /&gt;
|description=Gtk Widget for embedding Mozilla into Gtk applications&lt;br /&gt;
|owner=[mailto:marco@gnome.org Marco Pesenti Gritti]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:dougt@meer.net Doug Turner]&lt;br /&gt;
|group=dev-embedding&lt;br /&gt;
|source_dirs=&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Embedding: GTK Widget&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Legacy HTML Parser&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:rbs@maths.uq.edu.au rbs@maths.uq.edu.au]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=parser/htmlparser&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/doc/parser.html&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=HTML Parser&lt;br /&gt;
|description=The HTML Parser transforms HTML source code into a DOM. It conforms to the HTML specification, and is mostly translated automatically from Java to C++.&lt;br /&gt;
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=parser/html&lt;br /&gt;
|url=http://about.validator.nu/&lt;br /&gt;
|components=Core::HTML: Parser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=I18N Library&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-i18n&lt;br /&gt;
|source_dirs=intl/&lt;br /&gt;
|url=http://mozilla.org/projects/intl/index.html&lt;br /&gt;
|components=Core::Internationalization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=ImageLib&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:joe@drew.ca Joe Drew]&lt;br /&gt;
|peers=[mailto:bobbyholley@gmail.com Bobby Holley], [mailto:netzen@gmail.com Brian Bondy], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:jlebar@mozilla.com Justin Lebar]&lt;br /&gt;
|group=dev-tech-gfx&lt;br /&gt;
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::ImageLib&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=IPC&lt;br /&gt;
|description=Message-passing between threads and processes&lt;br /&gt;
|owner=[mailto:cjones@mozilla.com Chris Jones]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bent.mozilla@gmail.com Ben Turner]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::IPC}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Java APIs for DOM&lt;br /&gt;
|description=APIs for Java access to the Document Object Model&lt;br /&gt;
|owner=[mailto:ashuk@eng.sun.com Ashutosh Kulkarni]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-dom,dev-tech-java&lt;br /&gt;
|source_dirs=java/dom/&lt;br /&gt;
|url=http://www.mozilla.org/projects/blackwood/dom/&lt;br /&gt;
|components=Core::Java APIs for DOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Java APIs to WebShell&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:edburns@acm.org Ed Burns]&lt;br /&gt;
|peers=[mailto:ashuk@eng.sun.com Ashutosh Kulkarni]&lt;br /&gt;
|group=dev-tech-java,dev-embedding&lt;br /&gt;
|source_dirs=java/webclient/&lt;br /&gt;
|url=http://www.mozilla.org/projects/blackwood/webclient/&lt;br /&gt;
|components=Core::Java APIs to WebShell&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Java Stubs&lt;br /&gt;
|description=OJI&lt;br /&gt;
|owner=[mailto:alfred.peng@sun.com Alfred Peng]&lt;br /&gt;
|peers=[mailto:Xiaobin.Lu@eng.Sun.com Xiaobin Lu]&lt;br /&gt;
|group=dev-tech-java&lt;br /&gt;
|source_dirs=modules/oji/, nav-java/, sun-java/&lt;br /&gt;
|url=http://www.mozilla.org/oji/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Java to XPCOM Bridge&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:pedemont@us.ibm.com Javier Pedemont]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-tech-xpcom,dev-tech-java&lt;br /&gt;
|source_dirs=extensions/java&lt;br /&gt;
|url=http://www.mozilla.org/projects/blackwood/connect/&lt;br /&gt;
|components=Core::Java to XPCOM Bridge&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Java Utility Classes&lt;br /&gt;
|description=assert, debug, utilities, etc.&lt;br /&gt;
|owner=[mailto:edburns@acm.org Ed Burns]&lt;br /&gt;
|peers=[mailto:ashuk@eng.sun.com Ashutosh Kulkarni]&lt;br /&gt;
|group=dev-tech-java&lt;br /&gt;
|source_dirs=java/util/&lt;br /&gt;
|url=http://www.mozilla.org/projects/blackwood/java-util/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Java-Implemented Plugins&lt;br /&gt;
|description=Infrastructure for writing MIME content-handlers&lt;br /&gt;
in Java.&lt;br /&gt;
|owner=[mailto:idk@eng.sun.com Igor Kushnirskiy]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-java&lt;br /&gt;
|source_dirs=java/plugins/&lt;br /&gt;
|url=http://www.mozilla.org/projects/blackwood/java-plugins/&lt;br /&gt;
|components=Core::Java-Implemented Plugins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript&lt;br /&gt;
|description=JavaScript Engine in C++ (SpiderMonkey)&lt;br /&gt;
|owner=[mailto:dmandelin@mozilla.com Dave Mandelin]&lt;br /&gt;
|peers=[mailto:danderson@mozilla.com David Anderson], [mailto:igor@mir2.org Igor Bukanov], [mailto:brendan@mozilla.org Brendan Eich], [mailto:gal@mozilla.com Andreas Gal], [mailto:cdleary@mozilla.com Chris Leary], , [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:nnethercote@mozilla.com Nick Nethercote], [mailto:jorendorff@mozilla.com Jason Orendorff], [mailto:jwalden@mit.edu Jeff Walden], [mailto:lwagner@mozilla.com Luke Wagner], [mailto:ejpbruel@mozilla.com Eddy Bruel] for proxies, [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:shaver@mozilla.org Mike Shaver]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src/%, js/src/config/, js/src/editline/, js/src/fdlibm/&lt;br /&gt;
|url=http://www.mozilla.org/js/spidermonkey,&lt;br /&gt;
http://developer.mozilla.org/en/docs/About_JavaScript&lt;br /&gt;
|components=Core::JavaScript Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=JavaScript Debugger Backend&lt;br /&gt;
|description=JavaScript debugging hooks&lt;br /&gt;
|owner=[mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:rginda@hacksrus.com Rob Ginda]&lt;br /&gt;
|group=dev-apps-js-debugger&lt;br /&gt;
|source_dirs=js/jsd/&lt;br /&gt;
|url=http://www.mozilla.org/js/jsd&lt;br /&gt;
|components=Other Applications::Venkman JS Debugger&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-ctypes&lt;br /&gt;
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.&lt;br /&gt;
|owner=[mailto:dwitte@mozilla.com Dan Witte]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:jorendorff@mozilla.com Jason Orendorff], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/src/ctypes/&lt;br /&gt;
|url=https://wiki.mozilla.org/JSctypes&lt;br /&gt;
|components=Core::js-ctypes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=js-tests&lt;br /&gt;
|description=JavaScript test suite&lt;br /&gt;
|owner=[mailto:bclary@bclary.com Bob Clary]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tests/&lt;br /&gt;
|url=http://www.mozilla.org/js/tests/library.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Layout Engine&lt;br /&gt;
|description=rendering tree construction, layout (reflow), painting, etc.&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bmlk@gmx.de Bernd Mielke], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron], [mailto:smontagu@smontagu.org Simon Montagu]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/macbuild/, layout/printing/, layout/tables/, layout/tools/&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/ ,&lt;br /&gt;
http://lxr.mozilla.org/mozilla/source/layout/doc/&lt;br /&gt;
|components=Core::Layout, Core::Layout: Block and Inline, Core::Layout: Floats, Core::Layout: Form Controls, Core::Layout: HTML Frames, Core::Layout: Images, Core::Layout: Misc Code, Core::Layout: R &amp;amp; A Pos, Core::Layout: Tables, Core::Layout: Text, Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=libjar&lt;br /&gt;
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).&lt;br /&gt;
|owner=[mailto:tglek@mozilla.com Taras Glek]&lt;br /&gt;
|peers=[mailto:mwu@mozilla.com Michael Wu]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libjar&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=MathML&lt;br /&gt;
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.&lt;br /&gt;
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|peers=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|group=dev-tech-mathml&lt;br /&gt;
|source_dirs=layout/mathml/&lt;br /&gt;
|url=http://www.mozilla.org/projects/mathml/&lt;br /&gt;
|components=Core::MathML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mfbt&lt;br /&gt;
|description=mfbt is a collection of headers, macros, data structures, methods, and other functionality available for use and reuse throughout all Mozilla code (including SpiderMonkey and Gecko more broadly).&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=mfbt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::MFBT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=mozilla-toplevel&lt;br /&gt;
|description=The top level directory for the mozilla tree.&lt;br /&gt;
|owner=[mailto:brendan@mozilla.org Brendan Eich]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=tools/README&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Necko&lt;br /&gt;
|description=The Mozilla Networking Library&lt;br /&gt;
|owner=[mailto:cbiesinger@gmail.com Christian Biesinger]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jduell.mcbugs@gmail.com Jason Duell], [mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:pmcmanus@mozilla.com Patrick McManus], [mailto:bsmith@mozilla.com Brian Smith], [mailto:mnovotny@mozilla.com Michal Novotny]&lt;br /&gt;
|group=dev-tech-network&lt;br /&gt;
|source_dirs=netwerk/%, netwerk/base/, netwerk/build/, netwerk/cache/, netwerk/dns/, netwerk/locales/, netwerk/mime/, netwerk/protocol/, netwerk/resources/, netwerk/socket/, netwerk/streamconv/, netwerk/system/, netwerk/test/, netwerk/testserver/&lt;br /&gt;
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko&lt;br /&gt;
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=NSPR&lt;br /&gt;
|description=Netscape Portable Runtime&lt;br /&gt;
|owner=[mailto:nelson@bolyard.com Nelson Bolyard], [mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|peers=[mailto:ted.mielczarek@gmail.com Ted Mielczarek]&lt;br /&gt;
|group=dev-tech-nspr&lt;br /&gt;
|source_dirs=nsprpub/&lt;br /&gt;
|url=http://www.mozilla.org/projects/nspr/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/reference/html/&lt;br /&gt;
http://www.mozilla.org/projects/nspr/release-notes/&lt;br /&gt;
|components=NSPR&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PDF&lt;br /&gt;
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF&#039; format.&lt;br /&gt;
|owner=[mailto:cjones@mozilla.com Chris Jones], [mailto:gal@mozilla.com Andreas Gal]&lt;br /&gt;
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:bdahl@mozilla.com Brendan Dahl], [mailto:vnicolas@mozilla.com Vivien Nicolas]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=media/pdf/&lt;br /&gt;
|url=https://github.com/mozilla/pdf.js&lt;br /&gt;
|components=Core::PDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Plugins&lt;br /&gt;
|description= NPAPI Plugin support.&lt;br /&gt;
|owner=[mailto:joshmoz@gmail.com Josh Aas]&lt;br /&gt;
|peers=[mailto:jst@mozilla.org Johnny Stenback], [mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=dom/plugins/, modules/plugin/&lt;br /&gt;
|url=https://wiki.mozilla.org/Plugins&lt;br /&gt;
|components=Core::Java-Implemented Plugins, Core::Plug-ins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=Preference library&lt;br /&gt;
|owner=[mailto:dwitte@mozilla.com Dan Witte]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=modules/libpref/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Preferences: Backend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Privilege Manager&lt;br /&gt;
|description=&amp;quot;caps&amp;quot;&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dveditz@cruzio.com Dan Veditz], [mailto:jst@mozilla.org Johnny Stenback]&lt;br /&gt;
|group=dev-tech-dom&lt;br /&gt;
|source_dirs=caps/&lt;br /&gt;
|url=http://www.mozilla.org/projects/security/components/index.html&lt;br /&gt;
|components=Core::Security: CAPS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=PyXPCOM&lt;br /&gt;
|description=The Python to XPCOM bridge.&lt;br /&gt;
|owner=[mailto:toddw@activestate.com Todd Whiteman]&lt;br /&gt;
|peers=[mailto:mhammond@skippinet.com.au Mark Hammond]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=extension/python&lt;br /&gt;
|url=https://developer.mozilla.org/en/PyXPCOM&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Qt-based gfx and widget&lt;br /&gt;
|description=Qt-based rendering and widget code&lt;br /&gt;
|owner=[mailto:romaxa@gmail.com Oleg Romashin]&lt;br /&gt;
|peers=[mailto:mozilla@rosenauer.org Wolfgang Rosenauer], [mailto:doug.turner@gmail.com Doug Turner]&lt;br /&gt;
|group=dev-tech-widget,dev-tech-gfx&lt;br /&gt;
|source_dirs=widget/qt/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Qt&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Radio Interface Layer&lt;br /&gt;
|description=Boot2Gecko Radio Interface Layer (RIL)&lt;br /&gt;
|owner=[mailto:philikon@mozilla.com Philipp von Weitershausen], [mailto:kmachulis@mozilla.com Kyle Machulis]&lt;br /&gt;
|peers=[mailto:marshall@mozilla.com Marshall Culpepper], [mailto:vyang@mozilla.com Vicamo Yang], [mailto:cjones@mozilla.com Chris Jones], [mailto:gal@mozilla.com Andreas Gal]&lt;br /&gt;
|group=dev-b2g&lt;br /&gt;
|source_dirs=ipc/ril dom/telephony&lt;br /&gt;
|url=https://wiki.mozilla.org/B2G/RIL&lt;br /&gt;
|components=Core::RIL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=RDF&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:axel@pike.org Axel Hecht]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-tech-rdf&lt;br /&gt;
|source_dirs=rdf/&lt;br /&gt;
|url=http://www.mozilla.org/rdf/doc/&lt;br /&gt;
|components=Core::RDF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Registry&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dveditz@cruzio.com Dan Veditz]&lt;br /&gt;
|peers=[mailto:dougt@meer.net Doug Turner]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=modules/libreg/&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=security&lt;br /&gt;
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)&lt;br /&gt;
|owner=[mailto:nelson@bolyard.com Nelson Bolyard], [mailto:rrelyea@redhat.com Bob Relyea], [mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|peers=[mailto:alexei.volkov.bugs@sun.com Alexei Volkov], [mailto:christophe.ravel.bugs@sun.com Christophe Ravel], [mailto:emaldona@redhat.com Elio Maldonado], [mailto:glen.beasley@sun.com Glen Beasley], [mailto:julien.pierre.boogz@sun.com Julien Pierre], [mailto:kaie@kuix.de Kai Engert]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/&lt;br /&gt;
|url=http://mozilla.org/projects/security/pki/&lt;br /&gt;
|components=NSS, JSS, Core::Security, Core::Security: S/MIME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security - Mozilla PSM Glue&lt;br /&gt;
|description=Personal Security Manager&lt;br /&gt;
|owner=[mailto:kaie@kuix.de Kai Engert]&lt;br /&gt;
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:rrelyea@redhat.com Bob Relyea], [mailto:wtc@google.com Wan-Teh Chang]&lt;br /&gt;
|group=dev-tech-crypto&lt;br /&gt;
|source_dirs=security/manager/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Security: PSM, Core::Security: UI&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=storage&lt;br /&gt;
|description=Storage APIs with a SQLite backend&lt;br /&gt;
|owner=[mailto:sdwilsh@shawnwilsher.com Shawn Wilsher]&lt;br /&gt;
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=db/sqlite3/, storage/&lt;br /&gt;
|url=http://developer.mozilla.org/en/docs/Storage&lt;br /&gt;
|components=Toolkit::Storage, Core::SQL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=String&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:jlebar@mozilla.com Justin Lebar]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=string/, xpcom/string/&lt;br /&gt;
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide&lt;br /&gt;
|components=Core::String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Style System&lt;br /&gt;
|description=CSS style sheet handling; style data computation&lt;br /&gt;
|owner=[mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=layout/style/&lt;br /&gt;
|url=http://mozilla.org/newlayout/doc/&lt;br /&gt;
|components=Core::Style System (CSS)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=SVG&lt;br /&gt;
|description=Scalable Vector Graphics&lt;br /&gt;
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]&lt;br /&gt;
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:dholbert@mozilla.com Daniel Holbert]&lt;br /&gt;
|group=dev-tech-svg&lt;br /&gt;
|source_dirs=content/svg/, layout/svg/&lt;br /&gt;
|url=http://www.mozilla.org/projects/svg/&lt;br /&gt;
|components=Core::SVG&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Tamarin&lt;br /&gt;
|description=VM for ActionScript and JavaScript&lt;br /&gt;
|owner=[mailto:edwsmith@adobe.com Edwin Smith], [mailto:jodyer@adobe.com Jeff Dyer]&lt;br /&gt;
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:stejohns@adobe.com Steven Johnson], [mailto:tierney@adobe.com Erik Tierney], [mailto:treilly@adobe.com Tom Reilly]&lt;br /&gt;
|group=dev-tech-js-engine&lt;br /&gt;
|source_dirs=js/tamarin&lt;br /&gt;
|url=http://www.mozilla.org/projects/tamarin/&lt;br /&gt;
http://wiki.mozilla.org/tamarin/&lt;br /&gt;
http://hg.mozilla.org/tamarin-central/&lt;br /&gt;
http://hg.mozilla.org/tamarin-tracing/&lt;br /&gt;
|components=Tamarin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Test Harness&lt;br /&gt;
|description=In-tree test infrastructure and tools. Harnesses include, XPCShell, Mochitest (&amp;amp; Chrome), Reftest, JsREftest, Compiled Code Tests, Robocop, Mozmill and Marionette. Requests for new harnesses should go to Testing::General.&lt;br /&gt;
|owner=[mailto:ted@mozilla.com Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:dbaron@dbaron.org David Baron] (reftest), [mailto:jwalden@mit.edu Jeff Walden] (httpd.js, jsreftest), [mailto:rcampbell@mozilla.com Rob Campbell] (mochitest, mochitest chrome, marionette), [mailto:jmaher@mozilla.com Joel Maher] (reftest, mochitest, jsreftest), [mailto:ctalbert@mozilla.com Clint Talbert] (reftest, compiled code, mozmill), [mailto:geoffbrown@mozilla.com Geoff Brown] (robocop), [mailto:hskupin@mozilla.com Henrik Skupin] (mozmill), [mailto:mdas@mozilla.com Malini Das] (marionette), [mailto:jgriffin Jonathan Griffin] (marionette), [mailto:jhammel@mozilla.com Jeffrey Hammel] (mozmill)&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=/testing&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::General, Testing::Mochitest, Testing::Mochitest Chrome, Testing::Marionette, Testing::Mozmill, Testing::Reftest, Testing::XPCShell Harness, Testing::httpd.js&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Testing Infrastructure&lt;br /&gt;
|description=Testing tools and infrastructure for Mozilla projects, harnesses for automated tests, stand-alone test tools. Talos, Graph Server, Mozbase, Pulse, WOO, Bughunter, SUTAgent, Eideticker&lt;br /&gt;
|owner=[mailto:ctalbert@mozilla.com Clint Talbert]&lt;br /&gt;
|peers=[mailto:anodelman@mozilla.com Alice Nodelman], [mailto:bclary@bclary.com Bob Clary], [mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:ccooper@deadsquid.com Chris Cooper], [mailto:ctalbert@mozilla.com Clint Talbert], [mailto:robert@roberthelmer.com Robert Helmer], [mailto:jmaher@mozilla.com Joel Maher], [mailto:rcampbell@mozilla.com Rob Campbell], [mailto:jhammel@mozilla.com Jeffrey Hammel], [mailto:wlach@mozilla.com William Lachance], [mailto:jeads@mozilla.com Jonathan Eads], [mailto:jgriffin Jonathan Griffin], [mailto:bmoss@mozilla.com Bob Moss], [mailto:mcote@mozilla.com Mark Côté]&lt;br /&gt;
|group=dev-quality&lt;br /&gt;
|source_dirs=testing/, tools/httptester/, tools/page-loader/, tools/test-harness/, tools/tests/, tools/testserver/, tools/testy/&lt;br /&gt;
|url=http://wiki.mozilla.org/SoftwareTesting&lt;br /&gt;
|components=Testing::Infrastructure&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCShell Test Harness&lt;br /&gt;
|description=The XPCShell Harness&lt;br /&gt;
|owner=[mailto:ted.mielczarek@gmail.com Ted Mielczarek]&lt;br /&gt;
|peers=[mailto:jmaher@mozilla.com Joel Maher]&lt;br /&gt;
|source_dirs=testing/xpcshell&lt;br /&gt;
|components=Testing::XPCShell Harness&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Update Service&lt;br /&gt;
|description=server code for Mozilla Update services (aus, addons, pfs)&lt;br /&gt;
|owner=[mailto:morgamic@mozilla.com Mike Morgan]&lt;br /&gt;
|peers=[mailto:jscott@mozilla.com Justin Scott], [mailto:shaver@mozilla.org Mike Shaver], [mailto:wclouser@mozilla.com Will Clouser]&lt;br /&gt;
|group=dev-amo&lt;br /&gt;
|source_dirs=webtools/addons/, webtools/aus/, webtools/update/&lt;br /&gt;
|url=http://wiki.mozilla.org/wiki/AMO&lt;br /&gt;
|components=AUS::Administration, AUS::Systems&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=View System&lt;br /&gt;
|description=The View Manager is responsible for handling &amp;quot;heavyweight&amp;quot; rendering (some clipping, compositing) and event handling tasks.&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]&lt;br /&gt;
|group=dev-tech-layout&lt;br /&gt;
|source_dirs=view/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Layout: View Rendering&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=WebRTC&lt;br /&gt;
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access (on desktop at least)&lt;br /&gt;
|owner=[mailto:rjesup@mozilla.com Randell Jesup]&lt;br /&gt;
|peers=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan], [mailto:tterriberry@mozilla.com Tim Terriberry], [mailto:anant@mozilla.com Anant Narayanan]&lt;br /&gt;
|group=dev-media&lt;br /&gt;
|source_dirs=media/webrtc&lt;br /&gt;
|url=https://wiki.mozilla.org/Media/webrtc&lt;br /&gt;
|components=Core::WebRTC, Core::WebRTC (Audio/Video), Core::WebRTC (Networking), Core::WebRTC (Signaling)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:pavlov@pavlov.net Stuart Parmenter], [mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-tech-gfx&lt;br /&gt;
|source_dirs=widget/%, widget/public/, widget/%, widget/xpwidgets/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Drag and Drop, Core::Widget&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Android&lt;br /&gt;
|description=The Android Port&lt;br /&gt;
|owner=[mailto:blassey.bugs@lassey.us Brad Lassey]&lt;br /&gt;
|peers=[mailto:vladimir@mozilla.com Vladimir Vukicevic], [mailto:dougt@dougt.org Doug Turner], [mailto:mwu@mozilla.com Michael Wu]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/android/, embedding/android&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Android&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - BeOS&lt;br /&gt;
|description=The BeOS port&lt;br /&gt;
|owner=[mailto:cbiesinger@gmail.com Christian Biesinger]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-gfx&lt;br /&gt;
|source_dirs=widget/beos/&lt;br /&gt;
|url=http://www.bezilla.org/,&lt;br /&gt;
http://www.mozilla.org/ports/beos/&lt;br /&gt;
|components=Core::Widget: BeOS&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Gonk&lt;br /&gt;
|description=The Gonk Port (Boot2Gecko)&lt;br /&gt;
|owner=[mailto:mwu@mozilla.com Michael Wu]&lt;br /&gt;
|peers=[mailto:cjones@mozilla.com Chris Jones], [mailto:gal@mozilla.com Andreas Gal]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/gonk/&lt;br /&gt;
|url=http://wiki.mozilla.org/B2G&lt;br /&gt;
|components=Core::Widget: Gonk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - GTK&lt;br /&gt;
|description=supported X widgetry and gfx&lt;br /&gt;
|owner=[mailto:roc+@cs.cmu.edu Robert O&#039;Callahan]&lt;br /&gt;
|peers=[mailto:karlt+@karlt.net Karl Tomlinson]&lt;br /&gt;
|group=dev-tech-gfx&lt;br /&gt;
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/&lt;br /&gt;
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/&lt;br /&gt;
|components=Core::Widget: Gtk&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Mac OS X&lt;br /&gt;
|description= Gecko&#039;s Mac OS X compatibility layer.&lt;br /&gt;
|owner=[mailto:joshmoz@gmail.com Josh Aas]&lt;br /&gt;
|peers=[mailto:mstange@themasta.com Markus Stange], [mailto:smichaud@pobox.com Steven Michaud], [mailto:bgirard@mozilla.com Benoit Girard]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/cocoa/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Cocoa&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Widget - Windows&lt;br /&gt;
|description=Windows widgets and desktop integration&lt;br /&gt;
|owner=[mailto:jmathies@mozilla.com Jim Mathies]&lt;br /&gt;
|peers=[mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:dougt@meer.net Doug Turner], [mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:robarnold@cmu.edu Rob Arnold], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref], [mailto:vladimir@pobox.com Vladimir Vukicevic]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=widget/windows/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Widget: Win32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XBL&lt;br /&gt;
|description=eXtensible Binding Language&lt;br /&gt;
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|peers=&lt;br /&gt;
|group=dev-tech-xbl&lt;br /&gt;
|source_dirs=content/xbl/%, content/xbl/public/, content/xbl/src/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xbl/&lt;br /&gt;
|components=Core::XBL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XML&lt;br /&gt;
|description=XML in Mozilla, including XML, XHTML, Namespaces in XML, Associating Style Sheets with XML Documents, XML Linking and XML Extras. XML-related things that are not covered by more specific projects.&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:jst@mozilla.org Johnny Stenback], [mailto:sayrer@gmail.com Robert Sayre]&lt;br /&gt;
|group=dev-tech-xml&lt;br /&gt;
|source_dirs=content/xml/, extensions/xmlextras/, parser/expat/&lt;br /&gt;
|url=http://www.mozilla.org/newlayout/xml/&lt;br /&gt;
|components=Core::XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPApps&lt;br /&gt;
|description=Cross-Platform Applications, mostly Navigator front end and application shell.&lt;br /&gt;
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]&lt;br /&gt;
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:jag@tty.nl Peter Annema], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-apps-seamonkey&lt;br /&gt;
|source_dirs=xpfe/&lt;br /&gt;
|url=http://www.mozilla.org/xpapps/&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPCOM&lt;br /&gt;
|description=The cross-platform object model and core data structures.&lt;br /&gt;
|owner=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|peers=[mailto:dougt@meer.net Doug Turner], [mailto:shaver@mozilla.org Mike Shaver]&lt;br /&gt;
|group=dev-platform&lt;br /&gt;
|source_dirs=startupcache/, tools/wizards/, xpcom/%, xpcom/base/, xpcom/build/, xpcom/components/, xpcom/ds/, xpcom/glue/, xpcom/proxy/, xpcom/sample/, xpcom/stub/, xpcom/tests/, xpcom/threads/, xpcom/tools/, xpcom/windbgdlg/&lt;br /&gt;
|url=http://developer.mozilla.org/en/XPCOM&lt;br /&gt;
|components=Core::XPCOM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPConnect&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:gal@uci.edu Andreas Gal], [mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:bobbyholley@gmail.com Bobby Holley]&lt;br /&gt;
|group=&lt;br /&gt;
|source_dirs=js/xpconnect/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::XPConnect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPIDL&lt;br /&gt;
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files. Also produces .java interface files, as part of an experimental java&amp;lt;-&amp;gt;xpcom connection layer.&lt;br /&gt;
|owner=[mailto:BradleyJunk@cinci.rr.com BradleyJunk@cinci.rr.com]&lt;br /&gt;
|peers=[mailto:jband@netscape.com(disabled) jband@netscape.com(disabled)], [mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|group=dev-tech-xpcom&lt;br /&gt;
|source_dirs=xpcom/typelib/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xpidl&lt;br /&gt;
http://www.mozilla.org/scriptable&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPInstall&lt;br /&gt;
|description=&lt;br /&gt;
|owner=[mailto:dveditz@cruzio.com Dan Veditz]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]&lt;br /&gt;
|group=dev-tech-xpinstall&lt;br /&gt;
|source_dirs=xpinstall/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Core::Installer: XPInstall Engine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=xptcall&lt;br /&gt;
|description=XPTCall - platform-specific assembly for calling and implementing arbitrary XPCOM interfaces.&lt;br /&gt;
|owner=[mailto:timeless@mozdev.org Josh &#039;timeless&#039; Soref]&lt;br /&gt;
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:shaver@mozilla.org Mike Shaver]&lt;br /&gt;
|group=dev-xpcom&lt;br /&gt;
|source_dirs=xpcom/reflect/xptcall/&lt;br /&gt;
|url=http://www.mozilla.org/scriptable/xptcall-faq.html&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XPToolkit&lt;br /&gt;
|description=Cross-platform user interface toolkit&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:hyatt@mozilla.org Dave Hyatt], [mailto:jag@tty.nl Peter Annema], [mailto:Jan.Varga@gmail.com Jan Varga]&lt;br /&gt;
|group=dev-tech-xul&lt;br /&gt;
|source_dirs=content/xul/, layout/xul/&lt;br /&gt;
|url=http://www.mozilla.org/xpfe/&lt;br /&gt;
|components=Core::XP Toolkit/Widgets: Menus, Core::XP Toolkit/Widgets: XUL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XSLT Processor&lt;br /&gt;
|description=XSLT transformations processor&lt;br /&gt;
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]&lt;br /&gt;
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xslt&lt;br /&gt;
|source_dirs=content/xslt/&lt;br /&gt;
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html&lt;br /&gt;
|components=Core::XSLT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=XTF&lt;br /&gt;
|description=eXtensible Tag Framework&lt;br /&gt;
|owner=&lt;br /&gt;
|peers=[mailto:alex@croczilla.com alex@croczilla.com], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking]&lt;br /&gt;
|group=dev-tech-xbl&lt;br /&gt;
|source_dirs=content/xtf/, layout/xtf/&lt;br /&gt;
|url=http://www.croczilla.com/bits_and_pieces/xtf/&lt;br /&gt;
|components=Core::XTF&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
===Unassigned Bugzilla Components===&lt;br /&gt;
&lt;br /&gt;
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Core::Event Handling&lt;br /&gt;
Core::File Handling&lt;br /&gt;
Core::Find Backend&lt;br /&gt;
Core::Gecko Profiler&lt;br /&gt;
Core::General&lt;br /&gt;
Core::Hardware Abstraction Layer (HAL)&lt;br /&gt;
Core::HTML: Form Submission&lt;br /&gt;
Core::History: Global&lt;br /&gt;
Core::Identity&lt;br /&gt;
Core::Image Blocking&lt;br /&gt;
Core::JavaScript Debugging APIs&lt;br /&gt;
Core::Localization&lt;br /&gt;
Core::Nanojit&lt;br /&gt;
Core::Networking: Domain Lists&lt;br /&gt;
Core::Print Preview&lt;br /&gt;
Core::Printing: Output&lt;br /&gt;
Core::Printing: Setup&lt;br /&gt;
Core::Profile: BackEnd&lt;br /&gt;
Core::Profile: Migration&lt;br /&gt;
Core::Profile: Roaming&lt;br /&gt;
Core::QuickLaunch (AKA turbo mode)&lt;br /&gt;
Core::Rewriting and Analysis&lt;br /&gt;
Core::Selection&lt;br /&gt;
Core::Serializers&lt;br /&gt;
Core::Spelling checker&lt;br /&gt;
Core::Tracking&lt;br /&gt;
Core::Video/Audio&lt;br /&gt;
Core::Web Services&lt;br /&gt;
Core::WebDAV&lt;br /&gt;
Core::Widget: OS/2&lt;br /&gt;
Core::Widget: Photon&lt;br /&gt;
Core::X-remote&lt;br /&gt;
Core::XForms&lt;br /&gt;
Core::XUL&lt;br /&gt;
Core::jemalloc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Debugger&amp;diff=428583</id>
		<title>Debugger</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Debugger&amp;diff=428583"/>
		<updated>2012-05-08T17:07:33Z</updated>

		<summary type="html">&lt;p&gt;Jorend: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;i&amp;gt;This interface is partly implemented in Firefox Nightly builds. Some parts are not implemented, some APIs may yet change, and anything marked &amp;quot;(future plan)&amp;quot; is a long way off. You can [https://github.com/jimblandy/DebuggerDocs fork this specification on github] to draft and discuss revisions.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; constructor makes objects with methods for debugging code running in global objects in other compartments. Given a &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance, you can:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;add debuggee global objects to its purview using its &amp;lt;code&amp;gt;addDebuggee&amp;lt;/code&amp;gt; method;&lt;br /&gt;
&amp;lt;li&amp;gt;request notification of basic debugging events like stack frame entry and &amp;lt;code&amp;gt;debugger&amp;lt;/code&amp;gt; statement execution by providing appropriate handler functions;&lt;br /&gt;
&amp;lt;li&amp;gt;set breakpoints in scripts;&lt;br /&gt;
&amp;lt;li&amp;gt;set watchpoints on objects and their properties;&lt;br /&gt;
&amp;lt;li&amp;gt;examine the debuggee&#039;s stack frames and lexical enviroments;&lt;br /&gt;
&amp;lt;li&amp;gt;inspect and manipulate its objects;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
and so on.&lt;br /&gt;
&lt;br /&gt;
Each global object may be debugged by any number of &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instances simultaneously.&lt;br /&gt;
&lt;br /&gt;
Your event handling methods run in the same thread as the debuggee, on the same JavaScript stack: when the event occurs, the debuggee pauses while your handler methods run, and resumes (unless you say otherwise) when your methods return. Your event handling methods run in the compartment to which they belong, typically the debugger&#039;s compartment. The compartment system mediates the debugger&#039;s and debuggee&#039;s access to each other&#039;s objects.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; object provides various sorts of objects representing the debuggee&#039;s state, which the debugger code can examine and manipulate:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances represent objects in the debuggee.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instances represent debuggee stack frames.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instances represent the debuggee&#039;s code, whether it is a function body, code passed to &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;, or a top-level script.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instances represent the variable environments in effect at different points in the debuggee&#039;s code.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance can only debug code running in other compartments. You may not create cycles of debugger/debuggee compartments.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; interface does not itself support cross-thread or multi-threaded debugging. As a general rule, only one thread may use a compartment at a time. When a debugger in one compartment is debugging globals in another, many kinds of events in the debuggees may cause the debugger to call its handler methods. Conversely, a call to almost any method in this interface could cause the debugger to try to interact with a debuggee in some way. Thus, as a general rule, you should never permit different threads to run in the debugger and debuggee compartments simultaneously. Tools should instead use the [[Remote Debugging Protocol]] for all inter-thread communication.&lt;br /&gt;
&lt;br /&gt;
== General Conventions ==&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
&lt;br /&gt;
Properties of objects that comprise the &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; interface, and those that the interface creates, follow some general conventions:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Instances and prototypes are extensible; you can add your own properties and methods to them.&lt;br /&gt;
&amp;lt;li&amp;gt;Properties are configurable. This applies to both &amp;quot;own&amp;quot; and prototype properties, and to both methods and data properties. (Leaving these properties open to redefinition will hopefully make it easier for JavaScript debugger code to cope with bugs, bug fixes, and changes in the interface over time.)&lt;br /&gt;
&amp;lt;li&amp;gt;Method properties are writable.&lt;br /&gt;
&amp;lt;li&amp;gt;We prefer inherited accessor properties to own data properties. Both are read using the same syntax, but inherited accessors seem like a more accurate reflection of what&#039;s going on. Unless otherwise noted, these properties have getters but no setters, as they cannot meaningfully be assigned to.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Debuggee Values ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; interface follows some conventions to help debuggers safely inspect and modify the debuggee&#039;s objects and values. Primitive values are passed freely between debugger and debuggee; copying or wrapping is handled transparently. Objects received from the debuggee (including host objects like DOM elements) are fronted in the debugger by &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances, which provide reflection-oriented methods for inspecting their referents; see &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt;, below.&lt;br /&gt;
&lt;br /&gt;
Of the debugger&#039;s objects, only &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances may be passed to the debuggee: when this occurs, the debuggee receives the &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt;&#039;s referent, not the &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance itself.&lt;br /&gt;
&lt;br /&gt;
In the descriptions below, the term &amp;quot;debuggee value&amp;quot; means either a primitive value or a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance; it is a value that might be received from the debuggee, or that could be passed to the debuggee.&lt;br /&gt;
&lt;br /&gt;
=== Debuggee Code ===&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance maintains a set of global objects that, taken together, comprise the debuggee. Code evaluated in the scope of a debuggee global object, directly or indirectly, is considered &amp;lt;i&amp;gt;debuggee code&amp;lt;/i&amp;gt;. Similarly:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;a &amp;lt;i&amp;gt;debuggee frame&amp;lt;/i&amp;gt; is a frame running debuggee code;&lt;br /&gt;
&amp;lt;li&amp;gt;a &amp;lt;i&amp;gt;debuggee function&amp;lt;/i&amp;gt; is a function that closes over a debuggee global object (and thus the function&#039;s code is debuggee code); and&lt;br /&gt;
&amp;lt;li&amp;gt;a &amp;lt;i&amp;gt;debuggee script&amp;lt;/i&amp;gt; is a script containing debuggee code.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Completion Values ===&lt;br /&gt;
&lt;br /&gt;
When a debuggee stack frame completes its execution, or when some sort of debuggee call initiated by the debugger finishes, the &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; interface provides a value describing how the code completed; these are called &amp;lt;i&amp;gt;completion values&amp;lt;/i&amp;gt;. A completion value has one of the following forms:&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;{ return: &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; }&lt;br /&gt;
&amp;lt;dd&amp;gt;The code completed normally, returning &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;. &amp;lt;i&amp;gt;Value&amp;lt;/i&amp;gt; is a debuggee value.&lt;br /&gt;
&amp;lt;dt&amp;gt;{ yield: &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; }&lt;br /&gt;
&amp;lt;dd&amp;gt;The running code is a generator frame which has yielded &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;. &amp;lt;i&amp;gt;Value&amp;lt;/i&amp;gt; is a debuggee value.&lt;br /&gt;
&amp;lt;dt&amp;gt;{ throw: &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; }&lt;br /&gt;
&amp;lt;dd&amp;gt;The code threw &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; as an exception. &amp;lt;i&amp;gt;Value&amp;lt;/i&amp;gt; is a debuggee value.&lt;br /&gt;
&amp;lt;dt&amp;gt;null&lt;br /&gt;
&amp;lt;dd&amp;gt;The code was terminated, as if by the &amp;quot;slow script&amp;quot; dialog box.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If control reaches the end of a generator frame, the completion value is &amp;lt;code&amp;gt;{throw: &amp;lt;i&amp;gt;stop&amp;lt;/i&amp;gt;}&amp;lt;/code&amp;gt; where &#039;&#039;stop&#039;&#039; is a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; object representing the &amp;lt;code&amp;gt;StopIteration&amp;lt;/code&amp;gt; object being thrown.&lt;br /&gt;
&lt;br /&gt;
=== Resumption Values ===&lt;br /&gt;
&lt;br /&gt;
As the debuggee runs, the &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; interface calls various debugger-provided handler functions to report the debuggee&#039;s behavior. Some of these calls can return a value indicating how the debuggee&#039;s execution should continue; these are called &amp;lt;i&amp;gt;resumption values&amp;lt;/i&amp;gt;. A resumption value has one of the following forms:&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;undefined&lt;br /&gt;
&amp;lt;dd&amp;gt;The debuggee should continue execution normally.&lt;br /&gt;
&amp;lt;dt&amp;gt;{ return: &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; }&lt;br /&gt;
&amp;lt;dd&amp;gt;Return &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; immediately as the current value of the function. &amp;lt;i&amp;gt;Value&amp;lt;/i&amp;gt; must be a debuggee value. (Most handler functions support this, except those whose descriptions say otherwise.) If the function was called as a constructor (that is, via a &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; expression), then &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; serves as the value returned by the function&#039;s body, not that produced by the &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; expression: if the value is not an object, the &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; expression returns the frame&#039;s &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&amp;lt;dt&amp;gt;{ yield: &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; }&lt;br /&gt;
&amp;lt;dd&amp;gt;Yield &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; immediately as the next value of the current frame, which must be a generator frame. &amp;lt;i&amp;gt;Value&amp;lt;/i&amp;gt; is a debuggee value. The current frame must be a generator frame that has not yet completed in some other way. You may use &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt; resumption values to substitute a new value or one already yielded by a generator, or to make a generator yield additional values.&lt;br /&gt;
&amp;lt;dt&amp;gt;{ throw: &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; }&lt;br /&gt;
&amp;lt;dd&amp;gt;Throw &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; as an execption from the current bytecode instruction. &amp;lt;i&amp;gt;Value&amp;lt;/i&amp;gt; must be a debuggee value.&lt;br /&gt;
&amp;lt;dt&amp;gt;null&lt;br /&gt;
&amp;lt;dd&amp;gt;Terminate the debuggee, as if it had been cancelled by the &amp;quot;slow script&amp;quot; dialog box.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a function that would normally return a resumption value to indicate how the debuggee should continue instead throws an exception, we never propagate such an exception to the debuggee; instead, we call the associated &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance&#039;s &amp;lt;code&amp;gt;uncaughtExceptionHook&amp;lt;/code&amp;gt; property, as described below.&lt;br /&gt;
&lt;br /&gt;
=== The Debugger.DebuggeeWouldRun Exception ===&lt;br /&gt;
&lt;br /&gt;
Some debugger operations that appear to simply inspect the debuggee&#039;s state may actually cause debuggee code to run. For example, reading a variable might run a getter function on the global or on a &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt; expression&#039;s operand; and getting an object&#039;s property descriptor will run a handler trap if the object is a proxy. To protect the debugger&#039;s integrity, only methods whose stated purpose is to run debuggee code can do so. These methods are called [[#Invocation_Functions_and_.22debugger.22_Frames|invocation functions]], and they follow certain common conventions to report the debuggee&#039;s behavior safely. For other methods, if their normal operation would cause debuggee code to run, they throw an instance of the &amp;lt;code&amp;gt;Debugger.DebuggeeWouldRun&amp;lt;/code&amp;gt; exception.&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger.DebuggeeWouldRun&amp;lt;/code&amp;gt; exception may have a &amp;lt;code&amp;gt;cause&amp;lt;/code&amp;gt; property, providing more detailed information on why the debuggee would have run. The &amp;lt;code&amp;gt;cause&amp;lt;/code&amp;gt; property&#039;s value is one of the following strings:&lt;br /&gt;
&lt;br /&gt;
{| frame=&amp;quot;box&amp;quot; rules=&amp;quot;all&amp;quot; cellpadding=&amp;quot;8&amp;quot;&lt;br /&gt;
! &amp;lt;i&amp;gt;cause&amp;lt;/i&amp;gt; value&lt;br /&gt;
! meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;proxy&amp;quot;&lt;br /&gt;
| Carrying out the operation would have caused a proxy handler to run.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;getter&amp;quot;&lt;br /&gt;
| Carrying out the operation would have caused an object property getter to run.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;setter&amp;quot;&lt;br /&gt;
| Carrying out the operation would have caused an object property setter to run.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the system can&#039;t determine why control attempted to enter the debuggee, it will leave the exception&#039;s &amp;lt;code&amp;gt;cause&amp;lt;/code&amp;gt; property undefined.&lt;br /&gt;
&lt;br /&gt;
== The Debugger Object ==&lt;br /&gt;
&lt;br /&gt;
When called as a constructor, the &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; object creates a new &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;new Debugger([&amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt;, ...])&lt;br /&gt;
&amp;lt;dd&amp;gt;Create a debugger object, and apply its &amp;lt;code&amp;gt;addDebuggee&amp;lt;/code&amp;gt; method to each of the given &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt; objects to add them as the initial debuggees.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accessor Properties of the Debugger Prototype Object ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance inherits the following accessor properties from its prototype:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;enabled&lt;br /&gt;
&amp;lt;dd&amp;gt;A boolean value indicating whether this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance&#039;s handlers, breakpoints, watchpoints, and the like are currently enabled. It is an accessor property with a getter and setter: assigning to it enables or disables this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance; reading it produces true if the instance is enabled, or false otherwise. This property is initially &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; in a freshly created &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance.&lt;br /&gt;
&lt;br /&gt;
This property gives debugger code a single point of control for disentangling itself from the debuggee, regardless of what sort of events or handlers or &amp;quot;points&amp;quot; we add to the interface. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;uncaughtExceptionHook&lt;br /&gt;
&amp;lt;dd&amp;gt;Either &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; or a function that SpiderMonkey calls when a call to a debug event handler, breakpoint handler, watchpoint handler, or similar function throws some exception, &amp;lt;i&amp;gt;debugger-exception&amp;lt;/i&amp;gt;. Exceptions thrown in the debugger are not propagated to debuggee code; instead, SpiderMonkey calls this function, passing &amp;lt;i&amp;gt;debugger-exception&amp;lt;/i&amp;gt; as its sole argument and the &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance as the &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value. This function should return a [[#Resumption_Values|resumption value]], which determines how the debuggee should continue.&lt;br /&gt;
&lt;br /&gt;
If the uncaught exception hook itself throws an exception, &amp;lt;i&amp;gt;uncaught-hook-exception&amp;lt;/i&amp;gt;, SpiderMonkey throws a new error object, &amp;lt;i&amp;gt;confess-to-debuggee-exception&amp;lt;/i&amp;gt;, to the debuggee whose message blames the debugger, and includes textual descriptions of &amp;lt;i&amp;gt;uncaught-hook-exception&amp;lt;/i&amp;gt; and the original &amp;lt;i&amp;gt;debugger-exception&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;uncaughtExceptionHook&amp;lt;/code&amp;gt;&#039;s value is &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;, SpiderMonkey throws an exception to the debuggee whose message blames the debugger, and includes a textual description of &amp;lt;i&amp;gt;debugger-exception&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Assigning anything other than a callable value or &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; to this property throws a &amp;lt;code&amp;gt;TypeError&amp;lt;/code&amp;gt; exception.&lt;br /&gt;
&lt;br /&gt;
(This is not an ideal way to handle debugger bugs, but the hope here is that some sort of backstop, even if imperfect, will make life easier for debugger developers. For example, an uncaught exception hook may have access to browser-level features like the &amp;lt;code&amp;gt;alert&amp;lt;/code&amp;gt; function, which this API&#039;s implementation does not, making it possible to present debugger errors to the developer in a way suited to the context.)&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Debugger Handler Functions ===&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance inherits accessor properties with which you can store handler functions for SpiderMonkey to call when given events occur in debuggee code.&lt;br /&gt;
&lt;br /&gt;
When one of the events described below occurs in debuggee code, the engine pauses the debuggee and calls the corresponding debugging handler on each &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance that is observing the debuggee. The handler functions receive the &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance as their &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value. Most handler functions can return a [[#Resumption_Values|resumption value]] indicating how the debuggee&#039;s execution should proceed.&lt;br /&gt;
&lt;br /&gt;
On a new &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance, each of these properties is initially &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;. Any value assigned to a debugging handler must be either a function or undefined; otherwise a &amp;lt;code&amp;gt;TypeError&amp;lt;/code&amp;gt; is thrown.&lt;br /&gt;
&lt;br /&gt;
Handler functions run in the same thread in which the event occurred. They run in the compartment to which they belong, not in a debuggee compartment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;onNewScript(&amp;lt;i&amp;gt;script&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;New code, represented by the &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instance &amp;lt;i&amp;gt;script&amp;lt;/i&amp;gt;, has been loaded in the scope of the debuggee global object &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt;. &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt; is a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance whose referent is the global object.&lt;br /&gt;
&lt;br /&gt;
This method&#039;s return value is ignored.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;onDebuggerStatement(&amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Debuggee code has executed a &amp;lt;i&amp;gt;debugger&amp;lt;/i&amp;gt; statement in &amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;. This method should return a [[#Resumption_Values|resumption value]] specifying how the debuggee&#039;s execution should proceed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;onEnterFrame(&amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;The stack frame &amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt; is about to begin executing code. (Naturally, &amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt; is currently the youngest [[#Visible_Frames|visible frame]].) This method should return a [[#Resumption_Values|resumption value]] specifying how the debuggee&#039;s execution should proceed.&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey only calls &amp;lt;code&amp;gt;onEnterFrame&amp;lt;/code&amp;gt; to report [[#Visible_Frames|visible]], non-&amp;lt;code&amp;gt;&amp;quot;debugger&amp;quot;&amp;lt;/code&amp;gt; frames.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;onThrow(&amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;) &amp;lt;i&amp;gt;(future plan)&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;dd&amp;gt;The exception &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; is being thrown by &amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;, which is running debuggee code. This method should return a [[#Resumption_Values|resumption value]] specifying how the debuggee&#039;s execution should proceed. If it returns &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;, the exception is thrown as normal.&lt;br /&gt;
&lt;br /&gt;
A call to the &amp;lt;code&amp;gt;onThrow&amp;lt;/code&amp;gt; handler is typically followed by one or more calls to the &amp;lt;code&amp;gt;onExceptionUnwind&amp;lt;/code&amp;gt; handler.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(pending discussion)&#039;&#039; If the debuggee executes &amp;lt;code&amp;gt;try { throw 0; } finally { f(); }&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;f()&amp;lt;/code&amp;gt; executes without error, the &amp;lt;code&amp;gt;onThrow&amp;lt;/code&amp;gt; handler is called only once. The debugger is not notified when the exception is set aside in order to execute the &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt; block, nor when it is restored after the &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt; block completes normally.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(An alternative design here would be:  onException(status, frame, value) where status is one of the strings &amp;quot;throw&amp;quot;, &amp;quot;unwind&amp;quot;, &amp;quot;catch&amp;quot;, &amp;quot;finally&amp;quot;, &amp;quot;rethrow&amp;quot;. JS_SaveExceptionState would trigger a &amp;quot;finally&amp;quot; event, JS_RestoreExceptionState would trigger a &amp;quot;rethrow&amp;quot;, JS_ClearPendingException would trigger a &amp;quot;catch&amp;quot;; not sure what JS_DropExceptionState or a return/throw from a finally block should do.)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;onExceptionUnwind(&amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;The exception &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; has been thrown, and has propagated to &amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;; &amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt; is the youngest remaining stack frame, and is a debuggee frame. This method should return a [[#Resumption_Values|resumption value]] specifying how the debuggee&#039;s execution should proceed. If it returns &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;, the exception continues to propagate as normal: if control in &amp;lt;code&amp;gt;frame&amp;lt;/code&amp;gt; is in a &amp;lt;code&amp;gt;try&amp;lt;/code&amp;gt; block, control jumps to the corresponding &amp;lt;code&amp;gt;catch&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt; block; otherwise, &amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt; is popped, and the exception propagates to &amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;&#039;s caller.&lt;br /&gt;
&lt;br /&gt;
When an exception&#039;s propagation causes control to enter a &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt; block, the exception is temporarily set aside. If the &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt; block finishes normally, the exception resumes propagation, and the debugger&#039;s &amp;lt;code&amp;gt;onExceptionUnwind&amp;lt;/code&amp;gt; handler is called again, in the same frame. (The other possibility is for the &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt; block to exit due to a &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;continue&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; statement, or a new exception. In those cases the old exception does not continue to propagate; it is discarded.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;sourceHandler(&amp;lt;i&amp;gt;ASuffusionOfYellow&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;This method is never called. If it is ever called, a contradiction has been proven, and the debugger is free to assume that everything is true.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;onError(&amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;report&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;SpiderMonkey is about to report an error in &amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;. &amp;lt;i&amp;gt;Report&amp;lt;/i&amp;gt; is an object describing the error, with the following properties:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;message&lt;br /&gt;
&amp;lt;dd&amp;gt;The fully formatted error message.&lt;br /&gt;
&amp;lt;dt&amp;gt;file&lt;br /&gt;
&amp;lt;dd&amp;gt;If present, the source file name, URL, etc. (If this property is present, the &amp;lt;i&amp;gt;line&amp;lt;/i&amp;gt; property will be too, and vice versa.)&lt;br /&gt;
&amp;lt;dt&amp;gt;line&lt;br /&gt;
&amp;lt;dd&amp;gt;If present, the source line number at which the error occurred.&lt;br /&gt;
&amp;lt;dt&amp;gt;lineText&lt;br /&gt;
&amp;lt;dd&amp;gt;If present, this is the source code of the offending line.&lt;br /&gt;
&amp;lt;dt&amp;gt;offset&lt;br /&gt;
&amp;lt;dd&amp;gt;The index of the character within lineText at which the error occurred.&lt;br /&gt;
&amp;lt;dt&amp;gt;warning&lt;br /&gt;
&amp;lt;dd&amp;gt;Present and true if this is a warning; absent otherwise.&lt;br /&gt;
&amp;lt;dt&amp;gt;strict&lt;br /&gt;
&amp;lt;dd&amp;gt;Present and true if this error or warning is due to the strict option (not to be confused with ES strict mode)&lt;br /&gt;
&amp;lt;dt&amp;gt;exception&lt;br /&gt;
&amp;lt;dd&amp;gt;Present and true if an exception will be thrown; absent otherwise.&lt;br /&gt;
&amp;lt;dt&amp;gt;arguments&lt;br /&gt;
&amp;lt;dd&amp;gt;An array of strings, representing the arguments substituted into the error message.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method&#039;s return value is ignored.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Function Properties of the Debugger Prototype Object ===&lt;br /&gt;
&lt;br /&gt;
The functions described below may only be called with a &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value referring to a &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance; they may not be used as methods of other kinds of objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;addDebuggee(&amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Add the global object designated by &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt; to the set of global objects this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance is debugging. Return this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt;&#039;s &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance referring to &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt;&#039;s referent.&lt;br /&gt;
&lt;br /&gt;
One can use any of the following values to designate the global object to add as a debuggee:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;a cross-compartment wrapper of a global object;&lt;br /&gt;
&amp;lt;li&amp;gt;a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance belonging to this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance whose referent is a global object;&lt;br /&gt;
&amp;lt;li&amp;gt;a cross-compartment wrapper for any object, in which case the global in whose scope that object was allocated is used; or&lt;br /&gt;
&amp;lt;li&amp;gt;a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance belonging to this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance whose referent is any object, in which case the global in whose scope that object was allocated is used.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The global designated by &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt; must be in a different compartment than this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance itself. If adding the designated global&#039;s compartment would create a cycle of debugger and debuggee compartments, this method throws an error.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt; is a cross-compartment wrapper, this method returns a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance referring to the wrapper&#039;s referent. If &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt; is a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance belonging to this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance, this method returns &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt; itself.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance does not hold a strong reference to its debuggee globals: if a debuggee global is not otherwise reachable, then it is dropped from the &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt;&#039;s set of debuggees.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;removeDebuggee(&amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Remove the global object designated by &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt; from this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance&#039;s set of debuggees. Return &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This method interprets &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt; using the same rules that &amp;lt;code&amp;gt;addDebuggee&amp;lt;/code&amp;gt; does.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;hasDebuggee(&amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Return &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; if the global object designated by &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt; is a debuggee of this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance.&lt;br /&gt;
&lt;br /&gt;
This method interprets &amp;lt;i&amp;gt;global&amp;lt;/i&amp;gt; using the same rules that &amp;lt;code&amp;gt;addDebuggee&amp;lt;/code&amp;gt; does.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;getDebuggees()&lt;br /&gt;
&amp;lt;dd&amp;gt;Return an array of distinct &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances whose referents are all the global objects this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance is debugging.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instances don&#039;t hold strong references to their debuggee globals, if a debuggee global is otherwise unreachable, it may be dropped at any moment from the array this method returns.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;getNewestFrame()&lt;br /&gt;
&amp;lt;dd&amp;gt;Return a &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance referring to the youngest [[#Visible_Frames|visible frame]] currently on the calling thread&#039;s stack, or &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; if there are no visible frames on the stack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;findScriptURLs([&amp;lt;i&amp;gt;query&amp;lt;/i&amp;gt;])&lt;br /&gt;
&amp;lt;dd&amp;gt;Return an array containing the values of the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; properties of all debuggee scripts matching &amp;lt;i&amp;gt;query&amp;lt;/i&amp;gt;. Each distinct value appears only once in the array. &amp;lt;i&amp;gt;Query&amp;lt;/i&amp;gt; is an object whose properties restrict which scripts are returned; a script must meet all the criteria given by &amp;lt;i&amp;gt;query&amp;lt;/i&amp;gt; to be returned. If &amp;lt;i&amp;gt;query&amp;lt;/i&amp;gt; is omitted, we return the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; values of all debuggee scripts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Query&amp;lt;/i&amp;gt; may have the following property:&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;global&lt;br /&gt;
&amp;lt;dd&amp;gt;The script must be in the scope of the given global object. If this property&#039;s value is a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance belonging to this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance, then its referent is used. If the object is not a global object, then the global in whose scope it was allocated is used.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the result may include values for scripts that can no longer ever be used by the debuggee, say, those for eval code that has finished running, or unreachable functions. Whether such script&#039;s &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; values appear can be affected by the garbage collector&#039;s behavior, so this function&#039;s behavior is not entirely deterministic.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;findScripts([&amp;lt;i&amp;gt;query&amp;lt;/i&amp;gt;])&lt;br /&gt;
&amp;lt;dd&amp;gt;Return an array of &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instances for all debuggee scripts matching &amp;lt;i&amp;gt;query&amp;lt;/i&amp;gt;. Each instance appears only once in the array. &amp;lt;i&amp;gt;Query&amp;lt;/i&amp;gt; is an object whose properties restrict which scripts are returned; a script must meet all the criteria given by &amp;lt;i&amp;gt;query&amp;lt;/i&amp;gt; to be returned. If &amp;lt;i&amp;gt;query&amp;lt;/i&amp;gt; is omitted, we return the &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instances for all debuggee scripts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Query&amp;lt;/i&amp;gt; may have the following properties:&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;url&lt;br /&gt;
&amp;lt;dd&amp;gt;The script&#039;s &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; property must be equal to this value.&lt;br /&gt;
&amp;lt;dt&amp;gt;line&lt;br /&gt;
&amp;lt;dd&amp;gt;The script must at least partially cover the given source line. If this property is present, the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; property must be present as well.&lt;br /&gt;
&amp;lt;dt&amp;gt;column&lt;br /&gt;
&amp;lt;dd&amp;gt;The script must include  given column on the line given by the &amp;lt;code&amp;gt;line&amp;lt;/code&amp;gt; property. If this property is present, the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;line&amp;lt;/code&amp;gt; properties must both be present as well.&lt;br /&gt;
&amp;lt;dt&amp;gt;innermost&lt;br /&gt;
&amp;lt;dd&amp;gt;If this property is present and true, the script must be the innermost script covering the given source location; scripts of enclosing code are omitted.&lt;br /&gt;
&amp;lt;dt&amp;gt;global&lt;br /&gt;
&amp;lt;dd&amp;gt;The script must be in the scope of the given global object. If this property&#039;s value is a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance belonging to this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance, then its referent is used. If the object is not a global object, then the global in whose scope it was allocated is used.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
All properties of &amp;lt;i&amp;gt;query&amp;lt;/i&amp;gt; are optional. Passing an empty object returns all debuggee code scripts.&lt;br /&gt;
&lt;br /&gt;
Note that the result may include &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instances for scripts that can no longer ever be used by the debuggee, say, those for eval code that has finished running, or unreachable functions. Whether such scripts appear can be affected by the garbage collector&#039;s behavior, so this function&#039;s behavior is not entirely deterministic.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;clearBreakpoint(&amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Remove all breakpoints set in this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance that use &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt; as their handler. Note that, if breakpoints using other handler objects are set at the same location(s) as &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;, they remain in place.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;clearAllBreakpoints()&lt;br /&gt;
&amp;lt;dd&amp;gt;Remove all breakpoints set using this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;clearAllWatchpoints() &amp;lt;i&amp;gt;(future plan)&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;dd&amp;gt;Clear all watchpoints owned by this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugger.Frame ==&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance represents a [[#Visible_Frames|visible stack frame]]. Given a &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance, you can find the script the frame is executing, walk the stack to older frames, find the lexical environment in which the execution is taking place, and so on.&lt;br /&gt;
&lt;br /&gt;
For a given &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance, SpiderMonkey creates only one &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance for a given visible frame. Every handler method called while the debuggee is running in a given frame is given the same frame object. Similarly, walking the stack back to a previously accessed frame yields the same frame object as before. Debugger code can add its own properties to a frame object and expect to find them later, use &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt; to decide whether two expressions refer to the same frame, and so on.&lt;br /&gt;
&lt;br /&gt;
(If more than one &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance is debugging the same code, each &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; gets a separate &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance for a given frame. This allows the code using each &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance to place whatever properties it likes on its &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instances, without worrying about interfering with other debuggers.)&lt;br /&gt;
&lt;br /&gt;
When the debuggee pops a stack frame (say, because a function call has returned or an exception has been thrown from it), the &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance referring to that frame becomes inactive: its &amp;lt;code&amp;gt;live&amp;lt;/code&amp;gt; property becomes &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, and accessing its other properties or calling its methods throws an exception. Note that frames only become inactive at times that are predictable for the debugger: when the debuggee runs, or when the debugger removes frames from the stack itself.&lt;br /&gt;
&lt;br /&gt;
Stack frames that represent the control state of generator-iterator objects behave in a special way, described in [[#Generator_Frames|Generator Frames]] below.&lt;br /&gt;
&lt;br /&gt;
=== Visible Frames ===&lt;br /&gt;
&lt;br /&gt;
When inspecting the call stack, &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; does not reveal all the frames that are actually present on the stack: while it does reveal all frames running debuggee code, it omits frames running the debugger&#039;s own code, and omits most frames running non-debuggee code. We call those stack frames a &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; does reveal &amp;lt;i&amp;gt;visible frames&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A frame is a visible frame if any of the following are true:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;it is running [[#debuggee_code|debuggee code]];&lt;br /&gt;
&amp;lt;li&amp;gt;its immediate caller is a frame running debuggee code; or&lt;br /&gt;
&amp;lt;li&amp;gt;it is a [[#Invocation_Functions_and_.22debugger.22_Frames|&amp;lt;code&amp;gt;&amp;quot;debugger&amp;quot;&amp;lt;/code&amp;gt; frame]], representing the continuation of debuggee code invoked by the debugger.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;immediate caller&amp;quot; rule means that, when debuggee code calls a non-debuggee function, it looks like a call to a primitive: you see a frame for the non-debuggee function that was accessible to the debuggee, but any further calls that function makes are treated as internal details, and omitted from the stack trace. If the non-debuggee function eventually calls back into debuggee code, then those frames are visible.&lt;br /&gt;
&lt;br /&gt;
(Note that the debuggee is not considered an &amp;quot;immediate caller&amp;quot; of handler methods it triggers. Even though the debuggee and debugger share the same JavaScript stack, frames pushed for SpiderMonkey&#039;s calls to handler methods to report events in the debuggee are never considered visible frames.)&lt;br /&gt;
&lt;br /&gt;
=== Invocation Functions and &amp;quot;debugger&amp;quot; Frames ===&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;i&amp;gt;invocation function&amp;lt;/i&amp;gt; is any function in this interface that allows the debugger to invoke code in the debuggee: &amp;lt;code&amp;gt;Debugger.Object.prototype.call&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Debugger.Frame.prototype.eval&amp;lt;/code&amp;gt;, and so on.&lt;br /&gt;
&lt;br /&gt;
While invocation functions differ in the code to be run and how to pass values to it, they all follow this general procedure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Let &amp;lt;i&amp;gt;older&amp;lt;/i&amp;gt; be the youngest visible frame on the stack, or &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; if there is no such frame. (This is never one of the the debugger&#039;s own frames; those never appear as &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instances.)&lt;br /&gt;
&amp;lt;li&amp;gt;Push a &amp;lt;code&amp;gt;&amp;quot;debugger&amp;quot;&amp;lt;/code&amp;gt; frame on the stack, with &amp;lt;i&amp;gt;older&amp;lt;/i&amp;gt; as its &amp;lt;code&amp;gt;older&amp;lt;/code&amp;gt; property.&lt;br /&gt;
&amp;lt;li&amp;gt;Invoke the debuggee code as appropriate for the given invocation function, with the &amp;lt;code&amp;gt;&amp;quot;debugger&amp;quot;&amp;lt;/code&amp;gt; frame as its continuation. For example, &amp;lt;code&amp;gt;Debugger.Frame.prototype.eval&amp;lt;/code&amp;gt; pushes an &amp;lt;code&amp;gt;&amp;quot;eval&amp;quot;&amp;lt;/code&amp;gt; frame for code it runs, whereas &amp;lt;code&amp;gt;Debugger.Object.prototype.call&amp;lt;/code&amp;gt; pushes a &amp;lt;code&amp;gt;&amp;quot;call&amp;quot;&amp;lt;/code&amp;gt; frame.&lt;br /&gt;
&amp;lt;li&amp;gt;When the debuggee code completes, whether by returning, throwing an exception or being terminated, pop the &amp;lt;code&amp;gt;&amp;quot;debugger&amp;quot;&amp;lt;/code&amp;gt; frame, and return an appropriate [[#Completion_Values|completion value]] from the invocation function to the debugger.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When a debugger calls an invocation function to run debuggee code, that code&#039;s continuation is the debugger, not the next debuggee code frame. Pushing a &amp;lt;code&amp;gt;&amp;quot;debugger&amp;quot;&amp;lt;/code&amp;gt; frame makes this continuation explicit, and makes it easier to find the extent of the stack created for the invocation.&lt;br /&gt;
&lt;br /&gt;
=== Accessor Properties of the Debugger.Frame Prototype Object ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance inherits the following accessor properties from its prototype:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;type&lt;br /&gt;
&amp;lt;dd&amp;gt;A string describing what sort of frame this is:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;&amp;quot;call&amp;quot;&amp;lt;/code&amp;gt;: a frame running a function call. (We may not be able to obtain frames for calls to host functions.)&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;&amp;quot;eval&amp;quot;&amp;lt;/code&amp;gt;: a frame running code passed to &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;&amp;quot;global&amp;quot;&amp;lt;/code&amp;gt;: a frame running global code (JavaScript that is neither of the above).&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;&amp;quot;debugger&amp;quot;&amp;lt;/code&amp;gt;: a frame for a call to user code invoked by the debugger (see the &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt; method below).&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;this&lt;br /&gt;
&amp;lt;dd&amp;gt;The value of &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; for this frame (a debuggee value).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;older&lt;br /&gt;
&amp;lt;dd&amp;gt;The next-older visible frame, in which control will resume when this frame completes. If there is no older frame, this is &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;. (On a suspended generator frame, the value of this property is &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;; see [[#Generator_Frames|Generator Frames]].)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;depth&lt;br /&gt;
&amp;lt;dd&amp;gt;The depth of this frame, counting from oldest to youngest; the oldest frame has a depth of zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;live&lt;br /&gt;
&amp;lt;dd&amp;gt;True if the frame this &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance refers to is still on the stack (or, in the case of generator-iterator objects, has not yet finished its iteration); false if it has completed execution or been popped in some other way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;script&lt;br /&gt;
&amp;lt;dd&amp;gt;The script being executed in this frame (a &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instance), or &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; on frames that do not represent calls to debuggee code. On frames whose &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; property is not null, this is equal to &amp;lt;code&amp;gt;callee.script&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;offset&lt;br /&gt;
&amp;lt;dd&amp;gt;The offset of the bytecode instruction currently being executed in &amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; if the frame&#039;s &amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt; property is &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;environment&lt;br /&gt;
&amp;lt;dd&amp;gt;The lexical environment within which evaluation is taking place (a &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instance), or &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; on frames that do not represent the evaluation of debuggee code, like calls non-debuggee functions, host functions or &amp;lt;code&amp;gt;&amp;quot;debugger&amp;quot;&amp;lt;/code&amp;gt; frames.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;callee&lt;br /&gt;
&amp;lt;dd&amp;gt;The function whose application created this frame, as a debuggee value, or &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; if this is not a &amp;lt;code&amp;gt;&amp;quot;call&amp;quot;&amp;lt;/code&amp;gt; frame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;generator&lt;br /&gt;
&amp;lt;dd&amp;gt;True if this frame is a generator frame, false otherwise.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;constructing&lt;br /&gt;
&amp;lt;dd&amp;gt;True if this frame is for a function called as a constructor, false otherwise.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;arguments&lt;br /&gt;
&amp;lt;dd&amp;gt;The arguments passed to the current frame, or &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; if this is not a &amp;lt;code&amp;gt;&amp;quot;call&amp;quot;&amp;lt;/code&amp;gt; frame. When non-&amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;, this is an object, allocated in the same global as the debugger, with &amp;lt;code&amp;gt;Array.prototype&amp;lt;/code&amp;gt; on its prototype chain, a non-writable &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt; property, and properties whose names are array indices. Each property is a read-only accessor property whose getter returns the current value of the corresponding parameter. When the referent frame is popped, the argument value&#039;s properties&#039; getters throw an error.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Handler Methods of Debugger.Frame Instances ===&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance inherits accessor properties holding handler functions for SpiderMonkey to call when given events occur in the frame.&lt;br /&gt;
&lt;br /&gt;
Calls to frames&#039; handler methods are cross-compartment, intra-thread calls: the call takes place in the thread to which the frame belongs, and runs in the compartment to which the handler method belongs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instances inherit the following handler method properties:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;onStep&lt;br /&gt;
&amp;lt;dd&amp;gt;This property must be either &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; or a function. If it is a function, SpiderMonkey calls it when execution in this frame makes a small amount of progress, passing no arguments and providing this &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance as the &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt;value. The function should return a [[#Resumption_Values|resumption value]] specifying how the debuggee&#039;s execution should proceed.&lt;br /&gt;
&lt;br /&gt;
What constitutes &amp;quot;a small amount of progress&amp;quot; varies depending on the implementation, but it is fine-grained enough to implement useful &amp;quot;step&amp;quot; and &amp;quot;next&amp;quot; behavior.&lt;br /&gt;
&lt;br /&gt;
If multiple &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instances each have &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instances for a given stack frame with &amp;lt;code&amp;gt;onStep&amp;lt;/code&amp;gt; handlers set, their handlers are run in an unspecified order. If any &amp;lt;code&amp;gt;onStep&amp;lt;/code&amp;gt; handler forces the frame to return early (by returning a resumption value other than &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;), any remaining debuggers&#039; &amp;lt;code&amp;gt;onStep&amp;lt;/code&amp;gt; handlers do not run.&lt;br /&gt;
&lt;br /&gt;
This property is ignored on frames that are not executing debuggee code, like &amp;lt;code&amp;gt;&amp;quot;call&amp;quot;&amp;lt;/code&amp;gt; frames for calls to host functions and &amp;lt;code&amp;gt;&amp;quot;debugger&amp;quot;&amp;lt;/code&amp;gt; frames.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;onPop&lt;br /&gt;
&amp;lt;dd&amp;gt;This property must be either &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; or a function. If it is a function, SpiderMonkey calls it just before this frame is popped, passing a [[#Completion_Values|completion value]] indicating how this frame&#039;s execution completed, and providing this &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance as the &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value. The function should return a [[#Resumption_Values|resumption value]] indicating how execution should proceed. On newly created frames, this property&#039;s value is &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When an &amp;lt;code&amp;gt;onPop&amp;lt;/code&amp;gt; call reports the completion of a construction call (that is, a function called via the &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; operator), the completion value passed to the handler describes the value returned by the function body. If this value is not an object, it may be different from the value produced by the &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; expression, which will be the value of the frame&#039;s &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; property. (In ECMAScript terms, the &amp;lt;code&amp;gt;onPop&amp;lt;/code&amp;gt; handler receives the value returned by the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Call]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; method, not the value returned by the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Construct]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; method.)&lt;br /&gt;
&lt;br /&gt;
When a debugger handler function forces a frame to complete early, by returning a &amp;lt;code&amp;gt;{ return:... }&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{ throw:... }&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; resumption value, SpiderMonkey calls the frame&#039;s &amp;lt;code&amp;gt;onPop&amp;lt;/code&amp;gt; handler, if any. The completion value passed in this case reflects the resumption value that caused the frame to complete.&lt;br /&gt;
&lt;br /&gt;
When SpiderMonkey calls an &amp;lt;code&amp;gt;onPop&amp;lt;/code&amp;gt; handler for a frame that is throwing an exception or being terminated, and the handler returns &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;, then SpiderMonkey proceeds with the exception or termination. That is, an &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; resumption value leaves the frame&#039;s throwing and termination process undisturbed.&lt;br /&gt;
&lt;br /&gt;
When a generator frame yields a value, SpiderMonkey calls its &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance&#039;s &amp;lt;code&amp;gt;onPop&amp;lt;/code&amp;gt; handler method, if present, passing a &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt; resumption value; however, the &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance remains live.&lt;br /&gt;
&lt;br /&gt;
If multiple &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instances each have &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instances for a given stack frame with &amp;lt;code&amp;gt;onPop&amp;lt;/code&amp;gt; handlers set, their handlers are run in an unspecified order. The resumption value each handler returns establishes the completion value reported to the next handler.&lt;br /&gt;
&lt;br /&gt;
This property is ignored on &amp;lt;code&amp;gt;&amp;quot;debugger&amp;quot;&amp;lt;/code&amp;gt; frames.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;onResume(&amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;This property must be either &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; or a function. If it is a function, SpiderMonkey calls it if the current frame is a generator frame whose execution has just been resumed. The function should return a [[#Resumption_Values|resumption value]] indicating how execution should proceed. On newly created frames, this property&#039;s value is &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the program resumed the generator by calling its &amp;lt;code&amp;gt;send&amp;lt;/code&amp;gt; method and passing a value, then &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; is that value. Otherwise, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; is &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Function Properties of the Debugger.Frame Prototype Object ===&lt;br /&gt;
&lt;br /&gt;
The functions described below may only be called with a &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value referring to a &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance; they may not be used as methods of other kinds of objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;eval(&amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Evaluate &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; in the execution context of this frame, and return a [[#Completion_Values|completion value]] describing how it completed. &amp;lt;i&amp;gt;Code&amp;lt;/i&amp;gt; is a string. If this frame&#039;s &amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt; property is &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;, throw a &amp;lt;code&amp;gt;TypeError&amp;lt;/code&amp;gt;. All extant handler methods, breakpoints, watchpoints, and so on remain active during the call. This function follows the [[#Invocation_Functions_and_.22debugger.22_Frames|invocation function conventions]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Code&amp;lt;/i&amp;gt; is interpreted as strict mode code when it contains a Use Strict Directive, or the code executing in this frame is strict mode code.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; is not strict mode code, then variable declarations in &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; affect the environment of this frame. (In the terms used by the ECMAScript specification, the &amp;lt;code&amp;gt;VariableEnvironment&amp;lt;/code&amp;gt; of the execution context for the eval code is the &amp;lt;code&amp;gt;VariableEnvironment&amp;lt;/code&amp;gt; of the execution context that this frame represents.) If implementation restrictions prevent SpiderMonkey from extending this frame&#039;s environment as requested, this call throws an Error exception.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;evalWithBindings(&amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Like &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;, but evaluate &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; in the environment of this frame, extended with bindings from the object &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt;. For each own enumerable property of &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt; named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; whose value is &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, include a variable in the environment in which &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; is evaluated named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, whose value is &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;. Each &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; must be a debuggee value. (This is not like a &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt; statement: &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; may access, assign to, and delete the introduced bindings without having any effect on the &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt; object.)&lt;br /&gt;
&lt;br /&gt;
This method allows debugger code to introduce temporary bindings that are visible to the given debuggee code and which refer to debugger-held debuggee values, and do so without mutating any existing debuggee environment.&lt;br /&gt;
&lt;br /&gt;
Note that, like &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;, declarations in the &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; passed to &amp;lt;code&amp;gt;evalWithBindings&amp;lt;/code&amp;gt; affect the environment of this frame, even as that environment is extended by bindings visible within &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt;. (In the terms used by the ECMAScript specification, the &amp;lt;code&amp;gt;VariableEnvironment&amp;lt;/code&amp;gt; of the execution context for the eval code is the &amp;lt;code&amp;gt;VariableEnvironment&amp;lt;/code&amp;gt; of the execution context that this frame represents, and the &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt; appear in a new declarative environment, which is the eval code&#039;s &amp;lt;code&amp;gt;LexicalEnvironment&amp;lt;/code&amp;gt;.) If implementation restrictions prevent SpiderMonkey from extending this frame&#039;s environment as requested, this call throws an &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt; exception.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;pop(&amp;lt;i&amp;gt;completion&amp;lt;/i&amp;gt;) &amp;lt;i&amp;gt;(future plan)&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;dd&amp;gt;Pop this frame (and any younger frames) from the stack as if this frame had completed as specified by the completion value &amp;lt;i&amp;gt;completion&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Note that this does &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; resume the debuggee&#039;s execution; it merely adjusts the debuggee&#039;s state to what it would be if this frame&#039;s execution had completed. The debuggee will only resume execution when you return from the handler method that brought control to the debugger originally.&lt;br /&gt;
&lt;br /&gt;
This cannot remove any &amp;lt;code&amp;gt;&amp;quot;call&amp;quot;&amp;lt;/code&amp;gt; frames for calls to host functions from the stack. (We might be able to make this work eventually, but it will take some cleverness.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;replaceCall(&amp;lt;i&amp;gt;function&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;this&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;arguments&amp;lt;/i&amp;gt;) &amp;lt;i&amp;gt;(future plan)&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;dd&amp;gt;Pop any younger frames from the stack, and then change this frame into a frame for a call to &amp;lt;i&amp;gt;function&amp;lt;/i&amp;gt;, with the given &amp;lt;i&amp;gt;this&amp;lt;/i&amp;gt; value and &amp;lt;i&amp;gt;arguments&amp;lt;/i&amp;gt;. &amp;lt;i&amp;gt;This&amp;lt;/i&amp;gt; should be a debuggee value, or &amp;lt;code&amp;gt;{ asConstructor: true }&amp;lt;/code&amp;gt; to invoke &amp;lt;i&amp;gt;function&amp;lt;/i&amp;gt; as a constructor, in which case SpiderMonkey provides an appropriate &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value itself. &amp;lt;i&amp;gt;Arguments&amp;lt;/i&amp;gt; should be an array of debuggee values. This frame must be a &amp;lt;code&amp;gt;&amp;quot;call&amp;quot;&amp;lt;/code&amp;gt; frame.&lt;br /&gt;
&lt;br /&gt;
This can be used as a primitive in implementing some forms of a &amp;quot;patch and continue&amp;quot; debugger feature.&lt;br /&gt;
&lt;br /&gt;
Note that this does &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; resume the debuggee&#039;s execution; it merely adjusts the debuggee&#039;s state to what it would be if this frame were about to make this call. The debuggee will only resume execution when you return from the handler method that brought control to the debugger originally.&lt;br /&gt;
&lt;br /&gt;
Like &amp;lt;code&amp;gt;pop&amp;lt;/code&amp;gt;, this cannot remove &amp;lt;code&amp;gt;&amp;quot;call&amp;quot;&amp;lt;/code&amp;gt; frames for calls to host functions from the stack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Generator Frames ===&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey supports generator-iterator objects, which produce a series of values by repeatedly suspending the execution of a function or expression. For example, calling a function that uses &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt; produces a generator-iterator object, as does evaluating a generator expression like &amp;lt;code&amp;gt;(i*i for each (i in [1,2,3]))&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A generator-iterator object refers to a stack frame with no fixed continuation frame. While the generator&#039;s code is running, its continuation is whatever frame called its &amp;lt;code&amp;gt;next&amp;lt;/code&amp;gt; method; while the generator is suspended, it has no particular continuation frame; and when it resumes again, the continuation frame for that resumption could be different from that of the previous resumption.&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance representing a generator frame differs from an ordinary stack frame as follows:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A generator frame&#039;s &amp;lt;code&amp;gt;generator&amp;lt;/code&amp;gt; property is true.&lt;br /&gt;
&amp;lt;li&amp;gt;A generator frame disappears from the stack each time the generator yields a value and is suspended, and reappears atop the stack when it is resumed to produce the generator&#039;s next value. The same &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance refers to the generator frame until it returns, throws an exception, or is terminated.&lt;br /&gt;
&amp;lt;li&amp;gt;A generator frame&#039;s &amp;lt;code&amp;gt;older&amp;lt;/code&amp;gt; property refers to the frame&#039;s continuation frame while the generator is running, and is &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; while the generator is suspended.&lt;br /&gt;
&amp;lt;li&amp;gt;A generator frame&#039;s &amp;lt;code&amp;gt;depth&amp;lt;/code&amp;gt; property reflects the frame&#039;s position on the stack when the generator is resumed, and is &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; while the generator is suspended.&lt;br /&gt;
&amp;lt;li&amp;gt;A generator frame&#039;s &amp;lt;code&amp;gt;live&amp;lt;/code&amp;gt; property remains true until the frame returns, throws an exception, or is terminated. Thus, generator frames can be live while not present on the stack.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; methods and accessor properties work as described on generator frames, even when the generator frame is suspended. You may examine a suspended generator frame&#039;s variables, and use its &amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt; members to see which &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt; it is suspended at.&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance referring to a generator-iterator frame has a strong reference to the generator-iterator object; the frame (and its object) will live as long as the &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance does. However, when the generator function returns, throws an exception, or is terminated, thus ending the iteration, the &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance becomes inactive and its &amp;lt;code&amp;gt;live&amp;lt;/code&amp;gt; property becomes &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, just as would occur for any other sort of frame that is popped. A non-live &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance no longer holds a strong reference to the generator-iterator object.&lt;br /&gt;
&lt;br /&gt;
== Debugger.Script ==&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instance refers to a sequence of bytecode in the debuggee; it is the JavaScript-level presentation of a JSAPI &amp;lt;code&amp;gt;JSScript&amp;lt;/code&amp;gt; object. Each of the following is represented by single JSScript object:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The body of a function&amp;amp;mdash;that is, all the code in the function that is not contained within some nested function.&lt;br /&gt;
&amp;lt;li&amp;gt;The code passed to a single call to &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;, excluding the bodies of any functions that code defines.&lt;br /&gt;
&amp;lt;li&amp;gt;The contents of a &amp;lt;code&amp;gt;&amp;amp;lt;script&amp;amp;gt;&amp;lt;/code&amp;gt; element.&lt;br /&gt;
&amp;lt;li&amp;gt;A DOM event handler, whether embedded in HTML or attached to the element by other JavaScript code.&lt;br /&gt;
&amp;lt;li&amp;gt;Code appearing in a &amp;lt;code&amp;gt;javascript:&amp;lt;/code&amp;gt; URL.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; interface constructs &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; objects as scripts of debuggee code are uncovered by the debugger: via the &amp;lt;code&amp;gt;onNewScript&amp;lt;/code&amp;gt; handler method; via &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt;&#039;s &amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt; properties; via the &amp;lt;code&amp;gt;functionScript&amp;lt;/code&amp;gt; method of &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances; and so on. For a given &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance, SpiderMonkey constructs exactly one &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instance for each underlying script object; debugger code can add its own properties to a script object and expect to find them later, use &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt; to decide whether two expressions refer to the same script, and so on.&lt;br /&gt;
&lt;br /&gt;
(If more than one &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance is debugging the same code, each &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; gets a separate &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instance for a given script. This allows the code using each &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance to place whatever properties it likes on its &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instances, without worrying about interfering with other debuggers.)&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instance is a strong reference to a JSScript object; it protects the script it refers to from being garbage collected.&lt;br /&gt;
&lt;br /&gt;
Note that SpiderMonkey may use the same &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instances for equivalent functions or evaluated code&amp;amp;mdash;that is, scripts representing the same source code, at the same position in the same source file, evaluated in the same lexical environment.&lt;br /&gt;
&lt;br /&gt;
=== Accessor Properties of the Debugger.Script Prototype Object ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instance inherits the following accessor properties from its prototype:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;url&lt;br /&gt;
&amp;lt;dd&amp;gt;The filename or URL from which this script&#039;s code was loaded.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;startLine&lt;br /&gt;
&amp;lt;dd&amp;gt;The number of the line at which this script&#039;s code starts, within the file or document named by &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;lineCount&lt;br /&gt;
&amp;lt;dd&amp;gt;The number of lines this script&#039;s code occupies, within the file or document named by &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;staticLevel&lt;br /&gt;
&amp;lt;dd&amp;gt;The number of function bodies enclosing this script&#039;s code.&lt;br /&gt;
&lt;br /&gt;
Global code is at level zero; bodies of functions defined at the top level in global code are at level one; bodies of functions nested within those are at level two; and so on.&lt;br /&gt;
&lt;br /&gt;
A script for code passed to direct &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt; is at a static level one greater than that of the script containing the call to &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;, because direct eval code runs within the caller&#039;s scope. However, a script for code passed to an indirect &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt; call is at static level zero, since it is evaluated in the global scope.&lt;br /&gt;
&lt;br /&gt;
Note that a generator&#039;s expressions are considered to be part of the body of a synthetic function, produced by the compiler.&lt;br /&gt;
&lt;br /&gt;
Scripts&#039; static level be useful in deciding where to set breakpoints. For example, a breakpoint set on line 3 in this code:&lt;br /&gt;
&lt;br /&gt;
  function f() {&lt;br /&gt;
    x = function g() {  // line 2&lt;br /&gt;
                        // line 3; no code here&lt;br /&gt;
      ...;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
should be set in &amp;lt;code&amp;gt;g&amp;lt;/code&amp;gt;&#039;s script, not in &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;&#039;s, even though neither script contains code at that line. In such a case, the most deeply nested script&amp;amp;mdash;the one with the highest static level&amp;amp;mdash;should receive the breakpoint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;strictMode&lt;br /&gt;
&amp;lt;dd&amp;gt;This is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; if this script&#039;s code is ECMAScript strict mode code, and &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; otherwise.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Function Properties of the Debugger.Script Prototype Object ===&lt;br /&gt;
&lt;br /&gt;
The functions described below may only be called with a &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value referring to a &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instance; they may not be used as methods of other kinds of objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;decompile([&amp;lt;i&amp;gt;pretty&amp;lt;/i&amp;gt;])&lt;br /&gt;
&amp;lt;dd&amp;gt;Return a string containing JavaScript source code equivalent to this script in its effect and result. If &amp;lt;i&amp;gt;pretty&amp;lt;/i&amp;gt; is present and true, produce indented code with line breaks.&lt;br /&gt;
&lt;br /&gt;
(Note that &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances referring to functions also have a &amp;lt;code&amp;gt;decompile&amp;lt;/code&amp;gt; method, whose result includes the function header and parameter names, so it is probably better to write &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;.decompile()&amp;lt;/code&amp;gt; than to write &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;.getFunctionScript().decompile()&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;getAllOffsets()&lt;br /&gt;
&amp;lt;dd&amp;gt;Return an array &amp;lt;i&amp;gt;L&amp;lt;/i&amp;gt; describing the relationship between bytecode instruction offsets and source code positions in this script. &amp;lt;i&amp;gt;L&amp;lt;/i&amp;gt; is sparse, and indexed by source line number. If a source line number &amp;lt;i&amp;gt;line&amp;lt;/i&amp;gt; has no code, then &amp;lt;i&amp;gt;L&amp;lt;/i&amp;gt; has no &amp;lt;i&amp;gt;line&amp;lt;/i&amp;gt; property. If there is code for &amp;lt;i&amp;gt;line&amp;lt;/i&amp;gt;, then &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;L&amp;lt;/i&amp;gt;[&amp;lt;i&amp;gt;line&amp;lt;/i&amp;gt;]&amp;lt;/code&amp;gt; is an array of offsets of byte code instructions that are entry points to that line.&lt;br /&gt;
&lt;br /&gt;
For example, suppose we have a script for the following source code:&lt;br /&gt;
  a=[]&lt;br /&gt;
  for (i=1; i &amp;lt; 10; i++)&lt;br /&gt;
    // It&#039;s hip to be square.&lt;br /&gt;
    a[i] = i*i;&lt;br /&gt;
&lt;br /&gt;
Calling &amp;lt;code&amp;gt;getAllOffsets()&amp;lt;/code&amp;gt; on that code might yield an array like this:&lt;br /&gt;
  [[0], [5, 20], , [10]]&lt;br /&gt;
&lt;br /&gt;
This array indicates that:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;the first line&#039;s code starts at offset 0 in the script;&lt;br /&gt;
&amp;lt;li&amp;gt;the &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; statement head has two entry points at offsets 5 and 20 (for the initialization, which is performed only once, and the loop test, which is performed at the start of each iteration);&lt;br /&gt;
&amp;lt;li&amp;gt;the third line has no code;&lt;br /&gt;
&amp;lt;li&amp;gt;and the fourth line begins at offset 10.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;getLineOffsets(&amp;lt;i&amp;gt;line&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Return an array of bytecode instruction offsets representing the entry points to source line &amp;lt;i&amp;gt;line&amp;lt;/i&amp;gt;. If the script contains no executable code at that line, the array returned is empty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;getOffsetLine(&amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Return the source code line responsible for the bytecode at &amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt; in this script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;getChildScripts()&lt;br /&gt;
&amp;lt;dd&amp;gt;Return a new array whose elements are Debugger.Script objects for each function and each generator expression in this script. Only direct children are included; nested children can be reached by walking the tree.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;setBreakpoint(&amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Set a breakpoint at the bytecode instruction at &amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt; in this script, reporting hits to the &amp;lt;code&amp;gt;hit&amp;lt;/code&amp;gt; method of &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;. If &amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt; is not a valid offset in this script, throw an error.&lt;br /&gt;
&lt;br /&gt;
When execution reaches the given instruction, SpiderMonkey calls the &amp;lt;code&amp;gt;hit&amp;lt;/code&amp;gt; method of &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;, passing a &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance representing the currently executing stack frame. The &amp;lt;code&amp;gt;hit&amp;lt;/code&amp;gt; method&#039;s return value should be a [[#Resumption_Values|resumption value]], determining how execution should continue.&lt;br /&gt;
&lt;br /&gt;
Any number of breakpoints may be set at a single location; when control reaches that point, SpiderMonkey calls their handlers in an unspecified order.&lt;br /&gt;
&lt;br /&gt;
Any number of breakpoints may use the same &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt; object.&lt;br /&gt;
&lt;br /&gt;
Breakpoint handler method calls are cross-compartment, intra-thread calls: the call takes place in the same thread that hit the breakpoint, and in the compartment containing the handler function (typically the debugger&#039;s compartment).&lt;br /&gt;
&lt;br /&gt;
The new breakpoint belongs to the &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance to which this script belongs; disabling the &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance disables this breakpoint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;getBreakpoints([&amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt;])&lt;br /&gt;
&amp;lt;dd&amp;gt;Return an array containing the handler objects for all the breakpoints set at &amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt; in this script. If &amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt; is omitted, return the handlers of all breakpoints set anywhere in this script. If &amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt; is present, but not a valid offset in this script, throw an error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;clearBreakpoints(handler, [&amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt;])&lt;br /&gt;
&amp;lt;dd&amp;gt;Remove all breakpoints set in this &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance that use &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt; as their handler. If &amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt; is given, remove only those breakpoints set at &amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt; that use &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;; if &amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt; is not a valid offset in this script, throw an error.&lt;br /&gt;
&lt;br /&gt;
Note that, if breakpoints using other handler objects are set at the same location(s) as &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;, they remain in place.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;clearAllBreakpoints([&amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt;])&lt;br /&gt;
&amp;lt;dd&amp;gt;Remove all breakpoints set in this script. If &amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt; is present, remove all breakpoints set at that offset in this script; if &amp;lt;i&amp;gt;offset&amp;lt;/i&amp;gt; is not a valid bytecode offset in this script, throw an error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugger.Object ==&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance represents an object in the debuggee, providing reflection-oriented methods to inspect and modify its referent. The referent&#039;s properties do not appear directly as properties of the &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance; the debugger can access them only through methods like &amp;lt;code&amp;gt;Debugger.Object.prototype.getOwnPropertyDescriptor&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Debugger.Object.prototype.defineProperty&amp;lt;/code&amp;gt;, ensuring that the debugger will not inadvertently invoke the referent&#039;s getters and setters.&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey creates exactly one &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance for each debuggee object it presents to a given &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance: if the debugger encounters the same object through two different routes (perhaps two functions are called on the same object), SpiderMonkey presents the same &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance to the debugger each time. This means that the debugger can use the &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt; operator to recognize when two &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances refer to the same debuggee object, and place its own properties on a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance to store metadata about particular debuggee objects.&lt;br /&gt;
&lt;br /&gt;
(If more than one &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance is debugging the same code, each &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; gets a separate &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance for a given object. This allows the code using each &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance to place whatever properties it likes on its own &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances, without worrying about interfering with other debuggers.)&lt;br /&gt;
&lt;br /&gt;
While most &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances are created by SpiderMonkey in the process of exposing debuggee&#039;s behavior and state to the debugger, the debugger can use  &amp;lt;code&amp;gt;Debugger.Object.prototype.makeDebuggeeValue&amp;lt;/code&amp;gt; to create &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances for given debuggee objects, or use &amp;lt;code&amp;gt;Debugger.Object.prototype.copy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Debugger.Object.prototype.create&amp;lt;/code&amp;gt; to create new objects in debuggee compartments, allocated as if by particular debuggee globals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances protect their referents from the garbage collector; as long as the &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance is live, the referent remains live. This means that garbage collection has no visible effect on &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances.&lt;br /&gt;
&lt;br /&gt;
=== Accessor Properties of the Debugger.Object prototype ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance inherits the following accessor properties from its prototype:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;proto&lt;br /&gt;
&amp;lt;dd&amp;gt;The referent&#039;s prototype (as a new &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance), or &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; if it has no prototype.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;class&lt;br /&gt;
&amp;lt;dd&amp;gt;A string naming the ECMAScript &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Class]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; of the referent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;callable&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; if the referent is a callable object (such as a function or a function proxy); false otherwise.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;name&lt;br /&gt;
&amp;lt;dd&amp;gt;If the referent is a function, its function name. If the referent is an anonymous function, or not a function at all, this is &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;parameterNames&lt;br /&gt;
&amp;lt;dd&amp;gt;If the referent is a function, the names of the its parameters, as an array of strings. If the referent is not a function at all, this is &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the referent is a host function for which parameter names are not available, return an array with one element per parameter, each of which is &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the referent is a function proxy, return an empty array.&lt;br /&gt;
&lt;br /&gt;
If the referent uses destructuring parameters, then the array&#039;s elements reflect the structure of the parameters. For example, if the referent is a function declared in this way:&lt;br /&gt;
&lt;br /&gt;
  function f(a, [b, c], {d, e:f}) { ... }&lt;br /&gt;
&lt;br /&gt;
then this &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance&#039;s &amp;lt;code&amp;gt;parameterNames&amp;lt;/code&amp;gt; property would have the value:&lt;br /&gt;
&lt;br /&gt;
  [&amp;quot;a&amp;quot;, [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;], {d:&amp;quot;d&amp;quot;, e:&amp;quot;f&amp;quot;}]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;script&lt;br /&gt;
&amp;lt;dd&amp;gt;If the referent is a function that is debuggee code, this is that function&#039;s script, as a &amp;lt;code&amp;gt;Debugger.Script&amp;lt;/code&amp;gt; instance. If the referent is a function proxy or not debuggee code, this is &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;environment&lt;br /&gt;
&amp;lt;dd&amp;gt;If the referent is a function that is debuggee code, a &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instance representing the lexical environment enclosing the function when it was created. If the referent is a function proxy or not debuggee code, this is &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;proxyHandler&lt;br /&gt;
&amp;lt;dd&amp;gt;If the referent is a proxy whose handler object was allocated by debuggee code, this is its handler object&amp;amp;mdash;the object whose methods are invoked to implement accesses of the proxy&#039;s properties. If the referent is not a proxy whose handler object was allocated by debuggee code, this is &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;proxyCallTrap&lt;br /&gt;
&amp;lt;dd&amp;gt;If the referent is a function proxy whose handler object was allocated by debuggee code, this is its call trap function&amp;amp;mdash;the function called when the function proxy is called. If the referent is not a function proxy whose handler object was allocated by debuggee code, this is &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;proxyConstructTrap&lt;br /&gt;
&amp;lt;dd&amp;gt;If the referent is a function proxy whose handler object was allocated by debuggee code, its construction trap function&amp;amp;mdash;the function called when the function proxy is called via a &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; expression. If the referent is not a function proxy whose handler object was allocated by debuggee code, this is &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Function Properties of the Debugger.Object prototype ===&lt;br /&gt;
&lt;br /&gt;
The functions described below may only be called with a &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value referring to a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance; they may not be used as methods of other kinds of objects. The descriptions use &amp;quot;referent&amp;quot; to mean &amp;quot;the referent of this &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise specified, these methods are not [[#Invocation_Functions_and_.22debugger.22_Frames|invocation functions]]; if a call would cause debuggee code to run (say, because it gets or sets an accessor property whose handler is debuggee code, or because the referent is a proxy whose traps are debuggee code), the call throws a [[#The_Debugger.DebuggeeWouldRun_Exception|&amp;lt;code&amp;gt;Debugger.DebuggeeWouldRun&amp;lt;/code&amp;gt;]] exception.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;getProperty(&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Return the value of the referent&#039;s property named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, or &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; if it has no such property. &amp;lt;i&amp;gt;Name&amp;lt;/i&amp;gt; must be a string. The result is a debuggee value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;setProperty(&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Store &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; as the value of the referent&#039;s property named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, creating the property if it does not exist. &amp;lt;i&amp;gt;Name&amp;lt;/i&amp;gt; must be a string; &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; must be a debuggee value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;getOwnPropertyDescriptor(&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Return a property descriptor for the property named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; of the referent. If the referent has no such property, return &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;. (This function behaves like the standard &amp;lt;code&amp;gt;Object.getOwnPropertyDescriptor&amp;lt;/code&amp;gt; function, except that the object being inspected is implicit; the property descriptor returned is allocated as if by code scoped to the debugger&#039;s global object (and is thus in the debugger&#039;s compartment); and its &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt; properties, if present, are debuggee values.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;getOwnPropertyNames()&lt;br /&gt;
&amp;lt;dd&amp;gt;Return an array of strings naming all the referent&#039;s own properties, as if &amp;lt;code&amp;gt;Object.getOwnPropertyNames(&amp;lt;i&amp;gt;referent&amp;lt;/i&amp;gt;)&amp;lt;/code&amp;gt; had been called in the debuggee, and the result copied in the scope of the debugger&#039;s global object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;defineProperty(&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;attributes&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Define a property on the referent named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, as described by the property descriptor &amp;lt;i&amp;gt;descriptor&amp;lt;/i&amp;gt;. Any &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt; properties of &amp;lt;i&amp;gt;attributes&amp;lt;/i&amp;gt; must be debuggee values. (This function behaves like &amp;lt;code&amp;gt;Object.defineProperty&amp;lt;/code&amp;gt;, except that the target object is implicit, and in a different compartment from the function and descriptor.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;defineProperties(&amp;lt;i&amp;gt;properties&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Add the properties given by &amp;lt;i&amp;gt;properties&amp;lt;/i&amp;gt; to the referent. (This function behaves like &amp;lt;code&amp;gt;Object.defineProperties&amp;lt;/code&amp;gt;, except that the target object is implicit, and in a different compartment from the &amp;lt;i&amp;gt;properties&amp;lt;/i&amp;gt; argument.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;deleteProperty(&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Remove the referent&#039;s property named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;. Return true if the property was successfully removed, or if the referent has no such property. Return false if the property is non-configurable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;seal()&lt;br /&gt;
&amp;lt;dd&amp;gt;Prevent properties from being added to or deleted from the referent. Return this &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance. (This function behaves like the standard &amp;lt;code&amp;gt;Object.seal&amp;lt;/code&amp;gt; function, except that the object to be sealed is implicit and in a different compartment from the caller.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;freeze()&lt;br /&gt;
&amp;lt;dd&amp;gt;Prevent properties from being added to or deleted from the referent, and mark each property as non-writable. Return this &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance. (This function behaves like the standard &amp;lt;code&amp;gt;Object.freeze&amp;lt;/code&amp;gt; function, except that the object to be sealed is implicit and in a different compartment from the caller.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;preventExtensions()&lt;br /&gt;
&amp;lt;dd&amp;gt;Prevent properties from being added to the referent. (This function behaves like the standard &amp;lt;code&amp;gt;Object.preventExtensions&amp;lt;/code&amp;gt; function, except that the object to operate on is implicit and in a different compartment from the caller.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;isSealed()&lt;br /&gt;
&amp;lt;dd&amp;gt;Return true if the referent is sealed&amp;amp;mdash;that is, if it is not extensible, and all its properties have been marked as non-configurable. (This function behaves like the standard &amp;lt;code&amp;gt;Object.isSealed&amp;lt;/code&amp;gt; function, except that the object inspected is implicit and in a different compartment from the caller.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;isFrozen()&lt;br /&gt;
&amp;lt;dd&amp;gt;Return true if the referent is frozen&amp;amp;mdash;that is, if it is not extensible, and all its properties have been marked as non-configurable and read-only. (This function behaves like the standard &amp;lt;code&amp;gt;Object.isFrozen&amp;lt;/code&amp;gt; function, except that the object inspected is implicit and in a different compartment from the caller.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;isExtensible()&lt;br /&gt;
&amp;lt;dd&amp;gt;Return true if the referent is extensible&amp;amp;mdash;that is, if it can have new properties defined on it. (This function behaves like the standard &amp;lt;code&amp;gt;Object.isExtensible&amp;lt;/code&amp;gt; function, except that the object inspected is implicit and in a different compartment from the caller.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;copy(&amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Apply the HTML5 &amp;quot;structured cloning&amp;quot; algorithm to create a copy of &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; in the referent&#039;s global object (and thus in the referent&#039;s compartment), and return a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance referring to the copy.&lt;br /&gt;
&lt;br /&gt;
Note that this returns primitive values unchanged. This means you can use &amp;lt;code&amp;gt;Debugger.Object.prototype.copy&amp;lt;/code&amp;gt; as a generic &amp;quot;debugger value to debuggee value&amp;quot; conversion function&amp;amp;mdash;within the limitations of the &amp;quot;structured cloning&amp;quot; algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;create(&amp;lt;i&amp;gt;prototype&amp;lt;/i&amp;gt;, [&amp;lt;i&amp;gt;properties&amp;lt;/i&amp;gt;])&lt;br /&gt;
&amp;lt;dd&amp;gt;Create a new object in the referent&#039;s global (and thus in the referent&#039;s compartment), and return a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; referring to it. The new object&#039;s prototype is &amp;lt;i&amp;gt;prototype&amp;lt;/i&amp;gt;, which must be an &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance. The new object&#039;s properties are as given by &amp;lt;i&amp;gt;properties&amp;lt;/i&amp;gt;, as if &amp;lt;i&amp;gt;properties&amp;lt;/i&amp;gt; were passed to &amp;lt;code&amp;gt;Debugger.Object.prototype.defineProperties&amp;lt;/code&amp;gt;, with the new &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance as the &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;makeDebuggeeValue(&amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Return the debuggee value that represents &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; in the debuggee. If &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; is a primitive, we return it unchanged; if &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; is an object, we return the &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance representing that object, wrapped appropriately for use in this &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt;&#039;s referent&#039;s compartment.&lt;br /&gt;
&lt;br /&gt;
Note that, if &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; is an object, it need not be one allocated in a debuggee global, nor even a debuggee compartment; it can be any object the debugger wishes to use as a debuggee value. &lt;br /&gt;
&lt;br /&gt;
In Firefox, all cross-compartment object references go through wrappers, meaning that code in different compartments may see different views of the same object. For example, code in the same compartment as the object can access it directly, but code in another compartment can only refer to the object through a wrapper, which may restrict the code&#039;s access to the object. This API takes care to ensure that &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances present the same view of the object the debuggee itself would see. Given a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance &amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt; and an object &amp;lt;i&amp;gt;o&amp;lt;/i&amp;gt;, the call &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt;.makeDebuggeeValue(&amp;lt;i&amp;gt;o&amp;lt;/i&amp;gt;)&amp;lt;/code&amp;gt; returns a &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance that presents &amp;lt;i&amp;gt;o&amp;lt;/i&amp;gt; as it would be seen by code in &amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt;&#039;s compartment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;decompile([&amp;lt;i&amp;gt;pretty&amp;lt;/i&amp;gt;])&lt;br /&gt;
&amp;lt;dd&amp;gt;If the referent is a function that is debuggee code, return the JavaScript source code for a function definition equivalent to the referent function in its effect and result, as a string. If &amp;lt;i&amp;gt;pretty&amp;lt;/i&amp;gt; is present and true, produce indented code with line breaks. If the referent is not a function that is debuggee code, return &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;call(&amp;lt;i&amp;gt;this&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;argument&amp;lt;/i&amp;gt;, ...)&lt;br /&gt;
&amp;lt;dd&amp;gt;If the referent is callable, call it with the given &amp;lt;i&amp;gt;this&amp;lt;/i&amp;gt; value and &amp;lt;i&amp;gt;argument&amp;lt;/i&amp;gt; values, and return a [[#Completion_Values|completion value]] describing how the call completed. &amp;lt;i&amp;gt;This&amp;lt;/i&amp;gt; should be a debuggee value, or &amp;lt;code&amp;gt;{ asConstructor: true }&amp;lt;/code&amp;gt; to invoke the referent as a constructor, in which case SpiderMonkey provides an appropriate &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value itself. Each &amp;lt;i&amp;gt;argument&amp;lt;/i&amp;gt; must be a debuggee value. All extant handler methods, breakpoints, watchpoints, and so on remain active during the call. Details of how the call is carried out are given in the description of [[#Debugger.Frame.Debugger|Debugger.Frame.Debugger frames]]. If the referent is not callable, throw a &amp;lt;code&amp;gt;TypeError&amp;lt;/code&amp;gt;. This function follows the [[#Invocation_Functions_and_.22debugger.22_Frames|invocation function conventions]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;apply(&amp;lt;i&amp;gt;this&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;arguments&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;If the referent is callable, call it with the given &amp;lt;i&amp;gt;this&amp;lt;/i&amp;gt; value and the argument values in &amp;lt;i&amp;gt;arguments&amp;lt;/i&amp;gt;, and return a [[#Completion_Values|completion value]] describing how the call completed. &amp;lt;i&amp;gt;This&amp;lt;/i&amp;gt; should be a debuggee value, or &amp;lt;code&amp;gt;{ asConstructor: true }&amp;lt;/code&amp;gt; to invoke &amp;lt;i&amp;gt;function&amp;lt;/i&amp;gt; as a constructor, in which case SpiderMonkey provides an appropriate &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value itself. &amp;lt;i&amp;gt;Arguments&amp;lt;/i&amp;gt; must either be an array (in the debugger) of debuggee values, or &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;, which are treated as an empty array. All extant handler methods, breakpoints, watchpoints, and so on remain active during the call. Details of how the call is carried out are given in the description of [[#Debugger.Frame.Debugger|Debugger.Frame.Debugger frames]]. If the referent is not callable, throw a &amp;lt;code&amp;gt;TypeError&amp;lt;/code&amp;gt;. This function follows the [[#Invocation_Functions_and_.22debugger.22_Frames|invocation function conventions]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;evalInGlobal(&amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;If the referent is a global object, evaluate &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; in that global environment, and return a [[#Completion_Values|completion value]] describing how it completed. &amp;lt;i&amp;gt;Code&amp;lt;/i&amp;gt; is a string. All extant handler methods, breakpoints, watchpoints, and so on remain active during the call. This function follows the [[#Invocation_Functions_and_.22debugger.22_Frames|invocation function conventions]]. If the referent is not a global object, throw a &amp;lt;code&amp;gt;TypeError&amp;lt;/code&amp;gt; exception.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Code&amp;lt;/i&amp;gt; is interpreted as strict mode code when it contains a Use Strict Directive.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; is not strict mode code, then variable declarations in &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; affect the referent global object. (In the terms used by the ECMAScript specification, the &amp;lt;code&amp;gt;VariableEnvironment&amp;lt;/code&amp;gt; of the execution context for the eval code is the referent.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;evalInGlobalWithBindings(&amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Like &amp;lt;code&amp;gt;evalInGlobal&amp;lt;/code&amp;gt;, but evaluate &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; using the referent as the variable object, but with a lexical environment extended with bindings from the object &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt;. For each own enumerable property of &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt; named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; whose value is &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, include a variable in the lexical environment in which &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; is evaluated named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, whose value is &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;. Each &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; must be a debuggee value. (This is not like a &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt; statement: &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; may access, assign to, and delete the introduced bindings without having any effect on the &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt; object.)&lt;br /&gt;
&lt;br /&gt;
This method allows debugger code to introduce temporary bindings that are visible to the given debuggee code and which refer to debugger-held debuggee values, and do so without mutating any existing debuggee environment.&lt;br /&gt;
&lt;br /&gt;
Note that, like &amp;lt;code&amp;gt;evalInGlobal&amp;lt;/code&amp;gt;, declarations in the &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; passed to &amp;lt;code&amp;gt;evalInGlobalWithBindings&amp;lt;/code&amp;gt; affect the referent global object, even as &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; is evaluated with &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt; visible. (In the terms used by the ECMAScript specification, the &amp;lt;code&amp;gt;VariableEnvironment&amp;lt;/code&amp;gt; of the execution context for the eval code is the referent, and the &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt; appear in a new declarative environment, which is the eval code&#039;s &amp;lt;code&amp;gt;LexicalEnvironment&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;asEnvironment()&lt;br /&gt;
&amp;lt;dd&amp;gt;If the referent is a global object, return the &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instance representing the referent as a variable environment for evaluating code. If the referent is not a global object, throw a &amp;lt;code&amp;gt;TypeError&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;setObjectWatchpoint(&amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;) &amp;lt;i&amp;gt;(future plan)&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;dd&amp;gt;Set a watchpoint on all the referent&#039;s own properties, reporting events by calling &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;&#039;s methods. Any previous watchpoint handler on this &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance is replaced. If &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt; is null, the referent is no longer watched. &amp;lt;i&amp;gt;Handler&amp;lt;/i&amp;gt; may have the following methods, called under the given circumstances: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;add(&amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;descriptor&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;A property named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; has been added to the referent. &amp;lt;i&amp;gt;Descriptor&amp;lt;/i&amp;gt; is a property descriptor of the sort accepted by &amp;lt;code&amp;gt;Debugger.Object.prototype.defineProperty&amp;lt;/code&amp;gt;, giving the newly added property&#039;s attributes.&lt;br /&gt;
&amp;lt;dt&amp;gt;delete(&amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;The property named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; is about to be deleted from the referent.&lt;br /&gt;
&amp;lt;dt&amp;gt;change(&amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;oldDescriptor&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;newDescriptor&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;The existing property named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; on the referent is being changed from those given by &amp;lt;i&amp;gt;oldDescriptor&amp;lt;/i&amp;gt; to those given by &amp;lt;i&amp;gt;newDescriptor&amp;lt;/i&amp;gt;. This handler method is only called when attributes of the property other than its value are being changed; if only the value is changing, SpiderMonkey calls the handler&#039;s &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt; method.&lt;br /&gt;
&amp;lt;dt&amp;gt;set(&amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;oldValue&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;newValue&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;The data property named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; of the referent is about to have its value changed from &amp;lt;i&amp;gt;oldValue&amp;lt;/i&amp;gt; to &amp;lt;i&amp;gt;newValue&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey only calls this method on assignments to data properties that will succeed; assignments to un-writable data properties fail without notifying the debugger.&lt;br /&gt;
&amp;lt;dt&amp;gt;extensionsPrevented(&amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;The referent has been made non-extensible, as if by a call to &amp;lt;code&amp;gt;Object.preventExtensions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For all watchpoint handler methods:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Handler calls receive the handler object itself as the &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value.&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;i&amp;gt;frame&amp;lt;/i&amp;gt; argument is the current stack frame, whose code is about to perform the operation on the object being reported.&lt;br /&gt;
&amp;lt;li&amp;gt;If the method returns &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;, then SpiderMonkey makes the announced change to the object, and continues execution normally. If the method returns an object:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the object has a &amp;lt;code&amp;gt;superseded&amp;lt;/code&amp;gt; property whose value is a true value, then SpiderMonkey does not make the announced change.&lt;br /&gt;
&amp;lt;li&amp;gt;If the object has a &amp;lt;code&amp;gt;resume&amp;lt;/code&amp;gt; property, its value is taken as a [[#Resumption_Values|resumption value]], indicating how execution should proceed. (However, &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; resumption values are not supported.)&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a given method is absent from &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;, then events of that sort are ignored. The watchpoint consults &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;&#039;s properties each time an event occurs, so adding methods to or removing methods from &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt; after setting the watchpoint enables or disables reporting of the corresponding events.&lt;br /&gt;
&amp;lt;li&amp;gt;Values passed to &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;&#039;s methods are debuggee values. Descriptors passed to &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;&#039;s methods are ordinary objects in the debugger&#039;s compartment, except for &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt; properties in descriptors, which are debuggee values; they are the sort of value expected by &amp;lt;code&amp;gt;Debugger.Object.prototype.defineProperty&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;Watchpoint handler calls are cross-compartment, intra-thread calls: the call takes place in the same thread that changed the property, and in &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;&#039;s method&#039;s compartment (typically the same as the debugger&#039;s compartment).&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The new watchpoint belongs to the &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance to which this &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance belongs; disabling the &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance disables this watchpoint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;clearObjectWatchpoint() &amp;lt;i&amp;gt;(future plan)&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;dd&amp;gt;Remove any object watchpoint set on the referent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;setPropertyWatchpoint(&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;) &amp;lt;i&amp;gt;(future plan)&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;dd&amp;gt;Set a watchpoint on the referent&#039;s property named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, reporting events by calling &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt;&#039;s methods. Any previous watchpoint handler on this property for this &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance is replaced. If &amp;lt;i&amp;gt;handler&amp;lt;/i&amp;gt; is null, the property is no longer watched. &amp;lt;i&amp;gt;Handler&amp;lt;/i&amp;gt; is as described for &amp;lt;code&amp;gt;Debugger.Object.prototype.setObjectWatchpoint&amp;lt;/code&amp;gt;, except that it does not receive &amp;lt;code&amp;gt;extensionsPrevented&amp;lt;/code&amp;gt; events.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;clearPropertyWatchpoint(&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;) &amp;lt;i&amp;gt;(future plan)&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;dd&amp;gt;Remove any watchpoint set on the referent&#039;s property named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugger.Environment ==&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instance represents a lexical environment, associating names with variables. Each &amp;lt;code&amp;gt;Debugger.Frame&amp;lt;/code&amp;gt; instance representing a debuggee frame has an associated environment object describing the variables in scope in that frame; and each &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance representing a debuggee function has an environment object representing the environment the function has closed over.&lt;br /&gt;
&lt;br /&gt;
ECMAScript environments form a tree, in which each local environment is parented by its enclosing environment (in ECMAScript terms, its &#039;outer&#039; environment). We say an environment &amp;lt;i&amp;gt;binds&amp;lt;/i&amp;gt; an identifier if that environment itself associates the identifier with a variable, independently of its outer environments. We say an identifier is &amp;lt;i&amp;gt;in scope&amp;lt;/i&amp;gt; in an environment if the identifier is bound in that environment or any enclosing environment.&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey creates &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instances as needed as the debugger inspects stack frames and function objects; calling &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; as a function or constructor raises a &amp;lt;code&amp;gt;TypeError&amp;lt;/code&amp;gt; exception.&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey creates exactly one &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instance for each environment it presents via a given &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance: if the debugger encounters the same environment through two different routes (perhaps two functions have closed over the same environment), SpiderMonkey presents the same &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instance to the debugger each time. This means that the debugger can use the &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt; operator to recognize when two &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instances refer to the same environment in the debuggee, and place its own properties on a &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instance to store metadata about particular environments.&lt;br /&gt;
&lt;br /&gt;
(If more than one &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance is debugging the same code, each &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; gets a separate &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instance for a given environment. This allows the code using each &amp;lt;code&amp;gt;Debugger&amp;lt;/code&amp;gt; instance to place whatever properties it likes on its own &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instances, without worrying about interfering with other debuggers.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instances protect their referents from the garbage collector; as long as the &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instance is live, the referent remains live. Garbage collection has no visible effect on &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instances.&lt;br /&gt;
&lt;br /&gt;
=== Accessor Properties of the Debugger.Environment Prototype Object === &lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instance inherits the following accessor properties from its prototype:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;type&lt;br /&gt;
&amp;lt;dd&amp;gt;The type of this environment object, one of the following values:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;declarative&amp;quot;, indicating that the environment is a declarative environment record. Function calls, calls to &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; blocks, &amp;lt;code&amp;gt;catch&amp;lt;/code&amp;gt; blocks, and the like create declarative environment records.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;object&amp;quot;, indicating that the environment&#039;s bindings are the properties of an object. The global object and DOM elements appear in the chain of environments via object environments. (Note that &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt; statements have their own environment type.)&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;with&amp;quot;, indicating that the environment was introduced by a &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt; statement.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;parent&lt;br /&gt;
&amp;lt;dd&amp;gt;The environment that encloses this one (the &amp;quot;outer&amp;quot; environment, in ECMAScript terminology), or &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; if this is the outermost environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;object&lt;br /&gt;
&amp;lt;dd&amp;gt;A &amp;lt;code&amp;gt;Debugger.Object&amp;lt;/code&amp;gt; instance referring to the object whose properties this environment reflects. If this is a declarative environment record, this accessor throws a &amp;lt;code&amp;gt;TypeError&amp;lt;/code&amp;gt; (since declarative environment records have no such object). Both &amp;lt;code&amp;gt;&amp;quot;object&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;with&amp;quot;&amp;lt;/code&amp;gt; environments have &amp;lt;code&amp;gt;object&amp;lt;/code&amp;gt; properties that provide the object whose properties they reflect as variable bindings.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Function Properties of the Debugger.Environment Prototype Object ===&lt;br /&gt;
&lt;br /&gt;
The methods described below may only be called with a &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; value referring to a &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instance; they may not be used as methods of other kinds of objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;names()&lt;br /&gt;
&amp;lt;dd&amp;gt;Return an array of strings giving the names of the identifiers bound by this environment. The result does not include the names of identifiers bound by enclosing environments.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;getVariable(&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Return the value of the variable bound to &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; in this environment, or &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; if this environment does not bind &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;. &amp;lt;i&amp;gt;Name&amp;lt;/i&amp;gt; must be a string that is a valid ECMAScript identifier name. The result is a debuggee value.&lt;br /&gt;
&lt;br /&gt;
This is not an [[#Invocation_Functions_and_.22debugger.22_Frames|invocation function]]; if this call would cause debuggee code to run (say, because the environment is a &amp;lt;code&amp;gt;&amp;quot;with&amp;quot;&amp;lt;/code&amp;gt; environment, and &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; refers to an accessor property of the &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt; statement&#039;s operand), this call throws a [[#The_Debugger.DebuggeeWouldRun_Exception|&amp;lt;code&amp;gt;Debugger.DebuggeeWouldRun&amp;lt;/code&amp;gt;]] exception.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;setVariable(&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Store &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; as the value of the variable bound to &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; in this environment, creating the variable if it does not exist. &amp;lt;i&amp;gt;Name&amp;lt;/i&amp;gt; must be a string that is a valid ECMAScript identifier name; &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; must be a debuggee value.&lt;br /&gt;
&lt;br /&gt;
If this call would add a new variable to this environment, but implementation restrictions prevent SpiderMonkey from extending the environment as requested, this call throws an &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt; exception.&lt;br /&gt;
&lt;br /&gt;
This is not an [[#Invocation_Functions_and_.22debugger.22_Frames|invocation function]]; if this call would cause debuggee code to run, this call throws a [[#The_Debugger.DebuggeeWouldRun_Exception|&amp;lt;code&amp;gt;Debugger.DebuggeeWouldRun&amp;lt;/code&amp;gt;]] exception.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;getVariableDescriptor(&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Return an property descriptor describing the variable bound to &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; in this environment, of the sort returned by &amp;lt;code&amp;gt;Debugger.Object.prototype.getOwnPropertyDescriptor&amp;lt;/code&amp;gt;. &amp;lt;i&amp;gt;Name&amp;lt;/i&amp;gt; must be a string whose value is a valid ECMAScript identifier name.&lt;br /&gt;
&lt;br /&gt;
If this is an &amp;lt;code&amp;gt;&amp;quot;object&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;with&amp;quot;&amp;lt;/code&amp;gt; environment record, this simply returns the descriptor for the given property of the environment&#039;s object. If this is a declarative environment record, this returns a descriptor reflecting the binding&#039;s mutability as the descriptor&#039;s &amp;lt;code&amp;gt;writable&amp;lt;/code&amp;gt; property, and its deletability as the descriptor&#039;s &amp;lt;code&amp;gt;configurable&amp;lt;/code&amp;gt; property. All declarative environment record bindings are marked as &amp;lt;code&amp;gt;enumerable&amp;lt;/code&amp;gt;. &amp;lt;i&amp;gt;(This isn&#039;t great; the semantics of variables in declarative enviroments don&#039;t really match those of properties, so &lt;br /&gt;
writing code that operates properly on descriptors for either kind may be difficult.)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is no variable named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; bound in this environment, throw a &amp;lt;code&amp;gt;ReferenceError&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;defineVariable(&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;descriptor&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Create or reconfigure the variable bound to &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; in this environment according to &amp;lt;i&amp;gt;descriptor&amp;lt;/i&amp;gt;. &amp;lt;i&amp;gt;Descriptor&amp;lt;/i&amp;gt; is the sort of value returned by &amp;lt;code&amp;gt;getVariableDescriptor&amp;lt;/code&amp;gt;. On success, return &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;; on failure, throw an appropriate exception. &amp;lt;i&amp;gt;Name&amp;lt;/i&amp;gt; must be a string whose value is a valid ECMAScript identifier name.&lt;br /&gt;
&lt;br /&gt;
If implementation restrictions prevent SpiderMonkey from creating or reconfiguring the variable as requested, this call throws an &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt; exception.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;find(&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;)&lt;br /&gt;
&amp;lt;dd&amp;gt;Return a reference to the innermost environment, starting with this environment, that binds &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;. If &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; is not in scope in this environment, return &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;. &amp;lt;i&amp;gt;Name&amp;lt;/i&amp;gt; must be a string whose value is a valid ECMAScript identifier name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;eval(&amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt;) &amp;lt;i&amp;gt;(future plan)&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;dd&amp;gt;Evaluate &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; in this environment, and return a [[#Completion_Values|completion value]] describing how it completed. &amp;lt;i&amp;gt;Code&amp;lt;/i&amp;gt; is a string. All extant handler methods, breakpoints, watchpoints, and so on remain active during the call. This function follows the [[#Invocation_Functions_and_.22debugger.22_Frames|invocation function conventions]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Code&amp;lt;/i&amp;gt; is interpreted as strict mode code when it contains a Use Strict Directive.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; is not strict mode code, then variable declarations in &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; affect this environment. (In the terms used by the ECMAScript specification, the &amp;lt;code&amp;gt;VariableEnvironment&amp;lt;/code&amp;gt; of the execution context for the eval code is the &amp;lt;code&amp;gt;VariableEnvironment&amp;lt;/code&amp;gt; this &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; instance represents.) If implementation restrictions prevent SpiderMonkey from extending this environment as requested, this call throws an &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt; exception.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;evalWithBindings(&amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt;) &amp;lt;i&amp;gt;(future plan)&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;dd&amp;gt;Like &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;, but evaluate &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; in this environment, extended with bindings from the object &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt;. For each own enumerable property of &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt; named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; whose value is &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, include a variable in the environment in which &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; is evaluated named &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;, whose value is &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;. Each &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; must be a debuggee value. (This is not like a &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt; statement: &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; may access, assign to, and delete the introduced bindings without having any effect on the &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt; object.)&lt;br /&gt;
&lt;br /&gt;
This method allows debugger code to introduce temporary bindings that are visible to the given debuggee code and which refer to debugger-held debuggee values, and do so without mutating any existing debuggee environment.&lt;br /&gt;
&lt;br /&gt;
Note that, like &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;, declarations in the &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; passed to &amp;lt;code&amp;gt;evalWithBindings&amp;lt;/code&amp;gt; affect this environment, even as &amp;lt;i&amp;gt;code&amp;lt;/i&amp;gt; is evaluated with &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt; visible. (In the terms used by the ECMAScript specification, the &amp;lt;code&amp;gt;VariableEnvironment&amp;lt;/code&amp;gt; of the execution context for the eval code is the &amp;lt;code&amp;gt;VariableEnvironment&amp;lt;/code&amp;gt; this environment represents, and the &amp;lt;i&amp;gt;bindings&amp;lt;/i&amp;gt; appear in a new declarative environment, which is the eval code&#039;s &amp;lt;code&amp;gt;LexicalEnvironment&amp;lt;/code&amp;gt;.) If implementation restrictions prevent SpiderMonkey from extending this environment as requested, this call throws an &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt; exception.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Since common optimizations (say, the &amp;quot;null closure&amp;quot; closure representation) make environments that one would expect to be present, given the source code, unavailable at run time, &amp;lt;code&amp;gt;Debugger.Environment&amp;lt;/code&amp;gt; should provide ways to reflect what is and is not available.&lt;br /&gt;
&amp;lt;li&amp;gt;It may be possible for &amp;lt;code&amp;gt;Debugger.Frame.prototype.environment&amp;lt;/code&amp;gt; to return more complete environment chains than &amp;lt;code&amp;gt;Debugger.Object.prototype.environment&amp;lt;/code&amp;gt;. This possibility should be documented, along with its effects on environment identity.&lt;br /&gt;
&amp;lt;li&amp;gt;The interface should provide clean, predictable ways to observe the effects of garbage collection. For example, perhaps it should provide an interface like [[http://www.cs.indiana.edu/~dyb/pubs/guardians-abstract.html R. Kent Dybvig&#039;s guardians]] for observing when objects and scripts become unreachable.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401470</id>
		<title>User:Jorend/Deterministic hash tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401470"/>
		<updated>2012-02-27T21:12:30Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
&lt;br /&gt;
A deterministic hash table proposed by Tyler Close was implemented in C++ and its performance was compared to two hash table implementations using open addressing. Speed and memory usage were measured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; The Close table implementation was very fast, faster than the open addressing implementations. (It is unclear why; theory suggests it &amp;quot;should&amp;quot; be slower, and measurement confirms that the Close table is doing more memory accesses and more branches. More investigation is needed!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; The Close table implementation always allocates more memory than the leanest open addressing implementation. See the Results section for details.&lt;br /&gt;
&lt;br /&gt;
= Background =&lt;br /&gt;
&lt;br /&gt;
Most hash table APIs (including C++&#039;s &amp;lt;code&amp;gt;unordered_map&amp;lt;/code&amp;gt;, Java&#039;s &amp;lt;code&amp;gt;java.util.HashMap&amp;lt;/code&amp;gt;, Python&#039;s &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt;, Ruby&#039;s &amp;lt;code&amp;gt;Hash&amp;lt;/code&amp;gt;, and many others) allow users to iterate over all the entries in the hash table in an arbitrary order. This exposes the user to an aspect of the library&#039;s behavior (the iteration order) that is unspecified and indeed intentionally arbitrary.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Map&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Set&amp;lt;/code&amp;gt; data structures are proposed for a future version of the ECMAScript programming language. The standard committee would like to specify deterministic behavior if possible. There are several reasons for this:&lt;br /&gt;
&lt;br /&gt;
* There is evidence that some programmers find arbitrary iteration order surprising or confusing at first. [http://stackoverflow.com/questions/2453624/unsort-hashtable][http://stackoverflow.com/questions/1872329/storing-python-dictionary-entries-in-the-order-they-are-pushed][https://groups.google.com/group/comp.lang.python/browse_thread/thread/15f3b4a5cd6221b1/1b6621daf5d78d73][http://bytes.com/topic/c-sharp/answers/439203-hashtable-items-order][http://stackoverflow.com/questions/1419708/how-to-keep-the-order-of-elements-in-hashtable][http://stackoverflow.com/questions/7105540/hashtable-values-reordered]&lt;br /&gt;
* Property enumeration order is unspecified in ECMAScript, yet all the major implementations have been forced to converge on insertion order, for compatibility with the Web as it is. There is, therefore, some concern that if TC39 does not specify a deterministic iteration order, “the web will just go and specify it for us”.[https://mail.mozilla.org/pipermail/es-discuss/2012-February/020576.html]&lt;br /&gt;
* Hash table iteration order can expose some bits of object hash codes. This imposes some astonishing security concerns on the hashing function implementer. For example, an object&#039;s address must not be recoverable from the exposed bits of its hash code. (Revealing object addresses to untrusted ECMAScript code, while not exploitable by itself, would be a bad security bug on the Web.)&lt;br /&gt;
&lt;br /&gt;
Can a data structure retain the performance of traditional, arbitrary-order hash tables while also storing the order in which entries were added, so that iteration order is deterministic?&lt;br /&gt;
&lt;br /&gt;
Tyler Close has developed a deterministic hash table that is structured like this (pseudocode):&lt;br /&gt;
&lt;br /&gt;
 struct Entry {&lt;br /&gt;
     Key key;&lt;br /&gt;
     Value value;&lt;br /&gt;
     Entry *chain;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class CloseTable {&lt;br /&gt;
     Entry*[] hashTable;  // array of pointers into the data table&lt;br /&gt;
     Entry[] dataTable;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Lookups and inserts proceed much like a bucket-and-chain hash table, but instead of each entry being allocated separately from the heap, they are stored in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; in insertion order.&lt;br /&gt;
&lt;br /&gt;
Removing an entry simply replaces its &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; with some sentinel while leaving the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
== Theory ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; Every map data structure must store the keys and values. A map with &#039;&#039;N&#039;&#039; entries must use at least &#039;&#039;NE&#039;&#039; memory, where &#039;&#039;E&#039;&#039; is the size of a key-value pair (we assume the data can’t be compressed).&lt;br /&gt;
&lt;br /&gt;
In the following discussion we neglect the effect of deletions, which can cause both kinds of table to have extra memory that isn&#039;t in use at a given moment.&lt;br /&gt;
&lt;br /&gt;
An open addressing hash table has additional overhead depending on the fill factor. &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; in particular has a maximum fill factor &#039;&#039;F&#039;&#039;=3/4. When it becomes more than 3/4 full, it doubles in size, becoming just over 3/8 full. The amount of overhead in an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; is &#039;&#039;(1/f)NE&#039;&#039;, where &#039;&#039;f&#039;&#039; is the actual current fill ratio of the table and &#039;&#039;F/2 &amp;amp;lt; f &amp;amp;le; F&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A Close table has three sources of overhead: the entire &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointers in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;, and the unused portion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;. In &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointer causes each entry to require &#039;&#039;(3/2)E&#039;&#039; memory rather than &#039;&#039;E&#039;&#039;. The &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; doubles in size when it becomes completely full, so its size is &#039;&#039;(3/2)(1/u)NE&#039;&#039; where &#039;&#039;u&#039;&#039; is the proportion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; that is in use and &#039;&#039;1/2 &amp;amp;lt; u &amp;amp;le; 1&#039;&#039;. The &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt; is always 1/16 the size of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; (1/8 on 64-bit platforms), so the total size of both tables is &#039;&#039;(1+1/16)(3/2)(1/u)NE&#039;&#039; (substitute 1/8 on 64-bit platforms).&lt;br /&gt;
&lt;br /&gt;
For back-of-envelope purposes, then, &#039;&#039;f&#039;&#039; may be expected to be about &#039;&#039;3F/4&#039;&#039; (halfway between F/2 and F) and &#039;&#039;u&#039;&#039; about 3/4 on average; plugging these numbers in, we expect an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; to use about (1/(3F/4)) = 1.78&amp;amp;times;&#039;&#039;NE&#039;&#039;, and a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; about 2.13&amp;amp;times;&#039;&#039;NE&#039;&#039; (2.25&amp;amp;times;&#039;&#039;NE&#039;&#039; on 64-bit), on average. This would mean that the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; would be 20% larger on average (27% larger on 64-bit). However, see the Results section for a picture of how the two implementations compare in practice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lookup speed.&#039;&#039;&#039; The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;has&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; operations all start with a lookup. We will quantify lookup speed in terms of how many memory locations must be accessed. To simulate locality effects, we treat multiple reads from a single entry, or from the table object, as a single read.&lt;br /&gt;
&lt;br /&gt;
In an open addressing hash table with fill factor &#039;&#039;f&#039;&#039;, an unsuccessful lookup performs about &#039;&#039;1/(1-f)&#039;&#039; probes.[https://en.wikipedia.org/wiki/Hash_table#Performance_analysis] In an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;, at worst &#039;&#039;f=F=3/4&#039;&#039; and so an unsuccessful lookup performs 4 probes on average. In the usual case, &#039;&#039;f=3F/4=9/16&#039;&#039;, so about 2.3 probes on average. A successful lookup performs half as many probes on average. Before probing the table, the lookup must access the &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; struct itself, so the final numbers are as shown in the table: 5 reads, 3.3 reads, etc.&lt;br /&gt;
&lt;br /&gt;
A Close table uses direct chaining. Each lookup must read first the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; object itself, and next the &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;. Then, for an unsuccessful lookup, the whole chain is walked; the expected length of the chain is simply the number of keys in the table divided by the number of hash buckets. For a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, this quotient is at most 8/3 and typically 2. A successful lookup would perform about half as many probes, if keys were distributed evenly, but instead they are distributed randomly, making successful lookups slower; by simulation, I found the expected number of probes is 2.3 under full load and 2 under typical load.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of unsuccessful lookup (miss)&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of successful lookup (hit)&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Data structure&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;5&lt;br /&gt;
    &amp;lt;td&amp;gt;3.3&lt;br /&gt;
    &amp;lt;td&amp;gt;3&lt;br /&gt;
    &amp;lt;td&amp;gt;2.2&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;4.7&lt;br /&gt;
    &amp;lt;td&amp;gt;4&lt;br /&gt;
    &amp;lt;td&amp;gt;4.3&lt;br /&gt;
    &amp;lt;td&amp;gt;4&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This analysis does not explain the lookup speed observed in practice. See the Results section.&lt;br /&gt;
&lt;br /&gt;
= Method =&lt;br /&gt;
&lt;br /&gt;
The code I used to make these pictures is available at: https://github.com/jorendorff/dht&lt;br /&gt;
&lt;br /&gt;
The graphs below show data collected on a MacBook Pro, using g++-apple-4.2 and a 64-bit build. The results from running the test on a 32-bit Windows build were basically qualitatively the same. CloseTable performance was even better on Windows, for most tests; however, on LookupHitTest, OpenTable achieved almost equal speed.&lt;br /&gt;
&lt;br /&gt;
The project contains two complete hash map implementations: OpenTable and CloseTable. A third implementation, DenseTable, is a thin wrapper around the &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; type from [https://code.google.com/p/sparsehash/ Sparsehash]. The three classes have the same API and were all benchmarked using the same templates (in hashbench.cpp).&lt;br /&gt;
&lt;br /&gt;
Hash table implementation design notes:&lt;br /&gt;
&lt;br /&gt;
* The API was designed to match the [http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets proposal for ECMAScript Map objects] as of February 2012.&lt;br /&gt;
&lt;br /&gt;
* The Key and Value types are &amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; because ECMAScript values are 64 bits in the implementation I&#039;m most familiar with.&lt;br /&gt;
&lt;br /&gt;
* OpenTable and CloseTable are meant to be as fast and as memory-efficient as possible. Pretty much everything that can be omitted was omitted. For example, the hashing function is trivial: &#039;&#039;hash(key) = key&#039;&#039;, and neither OpenTable nor CloseTable further munges the hashcode before using it as a table index. Rationale: Making each implementation as fast as possible should highlight any performance difference between OpenTable and CloseTable, which is the purpose of the exercise. Using a more sophisticated hashing function would slow down both implementations, reducing the observed difference between the two techniques.&lt;br /&gt;
&lt;br /&gt;
* DenseTable is provided as a baseline. (It&#039;s nice to have some realistic numbers in the graphs too.)&lt;br /&gt;
&lt;br /&gt;
* dense_hash_map and OpenTable both implement straightforward hash tables with open addressing. The main difference between the two is one of tuning. dense_hash_map has a maximum load factor of 0.5. OpenTable has a maximum load factor of 0.75, which causes it to use about half as much memory most of the time. &lt;br /&gt;
&lt;br /&gt;
* The purpose of the typedefs KeyArg and ValueArg is to make it possible to switch the API from pass-by-value to pass-by-reference by editing just a couple of lines of code. (I tried this. Pass-by-reference is no faster on 64-bit machines.)&lt;br /&gt;
&lt;br /&gt;
* CloseTable attempts to allocate chunks of memory with sizes that are near powers of 2. This is to avoid wasting space when used with size-class-based malloc implementations.&lt;br /&gt;
&lt;br /&gt;
* A Close table can trade some speed for compactness, but it seems to be a bad bargain:&lt;br /&gt;
** The load factor is adjustable. (The hash table size must remain at a power of two, but the data vector can have non-power-of-2 sizes.) However, increasing the load factor directly affects LookupMiss speed.&lt;br /&gt;
** An implementation could grow the data array by less than doubling it each time. I tried this. Insert speed suffered; lookup speed was unaffected; but the modified CloseTable still used more memory than OpenTable.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; never shrinks the table unless you explicitly ask it to. &amp;lt;code&amp;gt;DenseTable::remove()&amp;lt;/code&amp;gt; periodically shrinks, because otherwise, the performance on LookupAfterDeleteTest is pathologically bad.&lt;br /&gt;
&lt;br /&gt;
Benchmark design notes:&lt;br /&gt;
&lt;br /&gt;
* The benchmark is pure C++, rather than a Map/Set implementation embedded in an existing ES implementation, in order to make the results as stable as possible, to avoid biasing the results to a particular ES implementation, to encourage contributors, and to focus on the performance differences in the hash table implementations by eliminating all other performance effects as much as possible.&lt;br /&gt;
&lt;br /&gt;
* The program runs each benchmark many different times in order to produce enough numbers that noise is visually obvious in the resulting graph. (Most of the speed graphs are nice and smooth.)&lt;br /&gt;
&lt;br /&gt;
= Results =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Memory usage ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-1.png]]&lt;br /&gt;
&lt;br /&gt;
All three implementations double the size of the table whenever it gets too full. On a log-log plot, this shows as stair-steps of a constant height. The slope of each staircase is 1, indicating linear growth.&lt;br /&gt;
&lt;br /&gt;
Both OpenTable and CloseTable are much more memory-efficient than DenseTable, because &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; is tuned for fast lookups at all costs.&lt;br /&gt;
&lt;br /&gt;
For any &#039;&#039;N&#039;&#039; &amp;gt; 5, a CloseTable with &#039;&#039;N&#039;&#039; entries allocates &#039;&#039;&#039;either 1.0625x or 2.125x as much memory&#039;&#039;&#039; as an OpenTable with &#039;&#039;N&#039;&#039; entries (1.125x or 2.25x as much memory on 64-bit systems). Both tables double in size at certain thresholds, and the thresholds for CloseTable are lower than those for OpenTable. That is, as a CloseTable is populated, it doubles in size sooner than the corresponding OpenTable. The factors determining this behavior are (1) the fact that CloseTable entries are 50% larger, and it therefore takes fewer of them to fill up a power-of-two-sized allocation; and (2) the value of &amp;lt;code&amp;gt;OpenTable::max_fill_factor()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is tempting to reduce this complicated picture to a single number, and write that CloseTables are, for example, 20% larger. Or 30%. But such a number would not be easily justified mathematically: the ratio does not converge as the number of entries increases.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-2.png]]&lt;br /&gt;
&lt;br /&gt;
DenseTable and OpenTable must initialize the entire table each time they resize. CloseTable also allocates large chunks of memory, but like a &amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt;, it does not need to write to that memory until there is data that needs to be stored there.&lt;br /&gt;
&lt;br /&gt;
This means that for a huge Map with no delete operations, a Close table could use more virtual memory but less physical memory than its open addressing counterparts. This will not be the only use case that stresses memory usage, though. Applications may also create many small tables and may delete entries from large tables.&lt;br /&gt;
&lt;br /&gt;
== Insertion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertSmallTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This measures the time required to fill a table to about 100 entries, repeatedly. (The “1e7” on the axes indicates that the numbers are in tens of millions: the Close table is doing about 60 million inserts per second on this machine.)&lt;br /&gt;
&lt;br /&gt;
This graph and the following ones show speed, so &#039;&#039;&#039;higher is better&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ideally all these graphs would show three straight horizontal lines, indicating that all three implementations scale beautifully to large work loads. And indeed this seems to be the case, mostly.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertLargeTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the time required to fill a single gigantic table.&lt;br /&gt;
&lt;br /&gt;
The jagged shape of this graph is robust. It reflects the fact that the table doubles in size as it grows, and rehashing is a significant part of the expense of populating a huge table.&lt;br /&gt;
&lt;br /&gt;
== Lookup speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupHitTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where &#039;&#039;k&#039;&#039; is the key of an existing entry in the table.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupMissTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where the key &#039;&#039;k&#039;&#039; is not found in the table.&lt;br /&gt;
&lt;br /&gt;
In an OpenTable, lookups that miss are slower than lookups that hit &#039;&#039;when there is at least one collision&#039;&#039;. This is because we keep probing the hash table until we find an empty entry.&lt;br /&gt;
&lt;br /&gt;
DenseTable is only slightly slower for misses, perhaps because more lookups have zero collisions. (?)&lt;br /&gt;
&lt;br /&gt;
== Deletion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-WorklistTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test creates a table with 700 entries, then measures the speed of alternately adding an entry and deleting the oldest remaining entry from the table. Entries are therefore removed in FIFO order. Each “operation” here includes both an insert and a delete.&lt;br /&gt;
&lt;br /&gt;
The CloseTable stores the entries in insertion order, so this test gets extremely good memory locality. The effect is even more pronounced in a 32-bit build.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-DeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of deleting all entries from a very large table.&lt;br /&gt;
&lt;br /&gt;
The numbers for dense_hash_map are jagged because &amp;lt;code&amp;gt;DenseMap&amp;lt;/code&amp;gt; shrinks the table at certain threshold sizes as entries are deleted, and shrinking the table is expensive.&lt;br /&gt;
&lt;br /&gt;
The apparent randomness of the OpenTable and CloseTable numbers is reproducible and unexplained.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupAfterDeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the performance of lookups, mostly misses, in a table that was filled to size 50000, then reduced to size 195 by deleting most of the entries.&lt;br /&gt;
&lt;br /&gt;
The results here are sensitive to the two sizes, which are totally arbitrary choices. A less arbitrary replacement for this test would be welcome.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401468</id>
		<title>User:Jorend/Deterministic hash tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401468"/>
		<updated>2012-02-27T21:10:14Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Theory */ remove extra table, it doesn&amp;#039;t really help&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
&lt;br /&gt;
A deterministic hash table proposed by Tyler Close was implemented in C++ and its performance was compared to two hash table implementations using open addressing. Speed and memory usage were measured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; The Close table implementation was very fast, faster than the open addressing implementations. (It is unclear why; theory suggests it &amp;quot;should&amp;quot; be slower, and measurement confirms that the Close table is doing more memory accesses and more branches. More investigation is needed!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; The Close table implementation always allocates more memory than the leanest open addressing implementation. See the Results section for details.&lt;br /&gt;
&lt;br /&gt;
= Background =&lt;br /&gt;
&lt;br /&gt;
Most hash table APIs (including C++&#039;s &amp;lt;code&amp;gt;unordered_map&amp;lt;/code&amp;gt;, Java&#039;s &amp;lt;code&amp;gt;java.util.HashMap&amp;lt;/code&amp;gt;, Python&#039;s &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt;, Ruby&#039;s &amp;lt;code&amp;gt;Hash&amp;lt;/code&amp;gt;, and many others) allow users to iterate over all the entries in the hash table in an arbitrary order. This exposes the user to an aspect of the library&#039;s behavior (the iteration order) that is unspecified and indeed intentionally arbitrary.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Map&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Set&amp;lt;/code&amp;gt; data structures are proposed for a future version of the ECMAScript programming language. The standard committee would like to specify deterministic behavior if possible. There are several reasons for this:&lt;br /&gt;
&lt;br /&gt;
* There is evidence that some programmers find arbitrary iteration order surprising or confusing at first. [http://stackoverflow.com/questions/2453624/unsort-hashtable][http://stackoverflow.com/questions/1872329/storing-python-dictionary-entries-in-the-order-they-are-pushed][https://groups.google.com/group/comp.lang.python/browse_thread/thread/15f3b4a5cd6221b1/1b6621daf5d78d73][http://bytes.com/topic/c-sharp/answers/439203-hashtable-items-order][http://stackoverflow.com/questions/1419708/how-to-keep-the-order-of-elements-in-hashtable][http://stackoverflow.com/questions/7105540/hashtable-values-reordered]&lt;br /&gt;
* Property enumeration order is unspecified in ECMAScript, yet all the major implementations have been forced to converge on insertion order, for compatibility with the Web as it is. There is, therefore, some concern that if TC39 does not specify a deterministic iteration order, “the web will just go and specify it for us”.[https://mail.mozilla.org/pipermail/es-discuss/2012-February/020576.html]&lt;br /&gt;
* Hash table iteration order can expose some bits of object hash codes. This imposes some astonishing security concerns on the hashing function implementer. For example, an object&#039;s address must not be recoverable from the exposed bits of its hash code. (Revealing object addresses to untrusted ECMAScript code, while not exploitable by itself, would be a bad security bug on the Web.)&lt;br /&gt;
&lt;br /&gt;
Can a data structure retain the performance of traditional, arbitrary-order hash tables while also storing the order in which entries were added, so that iteration order is deterministic?&lt;br /&gt;
&lt;br /&gt;
Tyler Close has developed a deterministic hash table that is structured like this (pseudocode):&lt;br /&gt;
&lt;br /&gt;
 struct Entry {&lt;br /&gt;
     Key key;&lt;br /&gt;
     Value value;&lt;br /&gt;
     Entry *chain;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class CloseTable {&lt;br /&gt;
     Entry*[] hashTable;  // array of pointers into the data table&lt;br /&gt;
     Entry[] dataTable;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Lookups and inserts proceed much like a bucket-and-chain hash table, but instead of each entry being allocated separately from the heap, they are stored in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; in insertion order.&lt;br /&gt;
&lt;br /&gt;
Removing an entry simply replaces its &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; with some sentinel while leaving the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
== Theory ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; Every map data structure must store the keys and values. A map with &#039;&#039;N&#039;&#039; entries must use at least &#039;&#039;NE&#039;&#039; memory, where &#039;&#039;E&#039;&#039; is the size of a key-value pair (we assume the data can’t be compressed).&lt;br /&gt;
&lt;br /&gt;
In the following discussion we neglect the effect of deletions, which can cause both kinds of table to have extra memory that isn&#039;t in use at a given moment.&lt;br /&gt;
&lt;br /&gt;
An open addressing hash table has additional overhead depending on the fill factor. &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; in particular has a maximum fill factor &#039;&#039;F&#039;&#039;=3/4. When it becomes more than 3/4 full, it doubles in size, becoming just over 3/8 full. The amount of overhead in an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; is &#039;&#039;(1/f)NE&#039;&#039;, where &#039;&#039;f&#039;&#039; is the actual current fill ratio of the table and &#039;&#039;F/2 &amp;amp;lt; f &amp;amp;le; F&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A Close table has three sources of overhead: the entire &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointers in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;, and the unused portion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;. In &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointer causes each entry to require &#039;&#039;(3/2)E&#039;&#039; memory rather than &#039;&#039;E&#039;&#039;. The &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; doubles in size when it becomes completely full, so its size is &#039;&#039;(3/2)(1/u)NE&#039;&#039; where &#039;&#039;u&#039;&#039; is the proportion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; that is in use and &#039;&#039;1/2 &amp;amp;lt; u &amp;amp;le; 1&#039;&#039;. The &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt; is always 1/16 the size of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; (1/8 on 64-bit platforms), so the total size of both tables is &#039;&#039;(1+1/16)(3/2)(1/u)NE&#039;&#039; (substitute 1/8 on 64-bit platforms).&lt;br /&gt;
&lt;br /&gt;
For back-of-envelope purposes, then, &#039;&#039;f&#039;&#039; may be expected to be about &#039;&#039;3F/4&#039;&#039; (halfway between F/2 and F) and &#039;&#039;u&#039;&#039; about 3/4 on average; plugging these numbers in, we expect an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; to use about (1/(3F/4)) = 1.78&amp;amp;times;&#039;&#039;NE&#039;&#039;, and a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; about 2.13&amp;amp;times;&#039;&#039;NE&#039;&#039; (2.25&amp;amp;times;&#039;&#039;NE&#039;&#039; on 64-bit), on average. This would mean that the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; would be 20% larger on average (27% larger on 64-bit). However, see the Results section for a picture of how the two implementations compare in practice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lookup speed.&#039;&#039;&#039; The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;has&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; operations all start with a lookup. We will quantify lookup speed in terms of how many memory locations must be accessed. To simulate locality effects, we treat multiple reads from a single entry, or from the table object, as a single read.&lt;br /&gt;
&lt;br /&gt;
In an open addressing hash table with fill factor &#039;&#039;f&#039;&#039;, an unsuccessful lookup performs about &#039;&#039;1/(1-f)&#039;&#039; probes.[https://en.wikipedia.org/wiki/Hash_table#Performance_analysis] In an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;, at worst &#039;&#039;f=F=3/4&#039;&#039; and so an unsuccessful lookup performs 4 probes on average. In the usual case, &#039;&#039;f=3F/4=9/16&#039;&#039;, so about 2.3 probes on average. A successful lookup performs half as many probes on average. Before probing the table, the lookup must access the &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; struct itself, so the final numbers are as shown in the table: 5 reads, 3.3 reads, etc.&lt;br /&gt;
&lt;br /&gt;
A Close table uses direct chaining. Each lookup must read first the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; object itself, and next the &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;. Then, for an unsuccessful lookup, the whole chain is walked; the expected length of the chain is simply the number of keys in the table divided by the number of hash buckets. For a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, this quotient is at most 8/3 and typically 2. A successful lookup would perform about half as many probes, if keys were distributed evenly, but instead they are distributed randomly, making successful lookups slower; by simulation, I found the expected number of probes is 2.3 under full load and 2 under typical load.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of unsuccessful lookup (miss)&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of successful lookup (hit)&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Data structure&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;5&lt;br /&gt;
    &amp;lt;td&amp;gt;3.3&lt;br /&gt;
    &amp;lt;td&amp;gt;3&lt;br /&gt;
    &amp;lt;td&amp;gt;2.2&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;4.7&lt;br /&gt;
    &amp;lt;td&amp;gt;4&lt;br /&gt;
    &amp;lt;td&amp;gt;4.3&lt;br /&gt;
    &amp;lt;td&amp;gt;4&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Method =&lt;br /&gt;
&lt;br /&gt;
The code I used to make these pictures is available at: https://github.com/jorendorff/dht&lt;br /&gt;
&lt;br /&gt;
The graphs below show data collected on a MacBook Pro, using g++-apple-4.2 and a 64-bit build. The results from running the test on a 32-bit Windows build were basically qualitatively the same. CloseTable performance was even better on Windows, for most tests; however, on LookupHitTest, OpenTable achieved almost equal speed.&lt;br /&gt;
&lt;br /&gt;
The project contains two complete hash map implementations: OpenTable and CloseTable. A third implementation, DenseTable, is a thin wrapper around the &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; type from [https://code.google.com/p/sparsehash/ Sparsehash]. The three classes have the same API and were all benchmarked using the same templates (in hashbench.cpp).&lt;br /&gt;
&lt;br /&gt;
Hash table implementation design notes:&lt;br /&gt;
&lt;br /&gt;
* The API was designed to match the [http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets proposal for ECMAScript Map objects] as of February 2012.&lt;br /&gt;
&lt;br /&gt;
* The Key and Value types are &amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; because ECMAScript values are 64 bits in the implementation I&#039;m most familiar with.&lt;br /&gt;
&lt;br /&gt;
* OpenTable and CloseTable are meant to be as fast and as memory-efficient as possible. Pretty much everything that can be omitted was omitted. For example, the hashing function is trivial: &#039;&#039;hash(key) = key&#039;&#039;, and neither OpenTable nor CloseTable further munges the hashcode before using it as a table index. Rationale: Making each implementation as fast as possible should highlight any performance difference between OpenTable and CloseTable, which is the purpose of the exercise. Using a more sophisticated hashing function would slow down both implementations, reducing the observed difference between the two techniques.&lt;br /&gt;
&lt;br /&gt;
* DenseTable is provided as a baseline. (It&#039;s nice to have some realistic numbers in the graphs too.)&lt;br /&gt;
&lt;br /&gt;
* dense_hash_map and OpenTable both implement straightforward hash tables with open addressing. The main difference between the two is one of tuning. dense_hash_map has a maximum load factor of 0.5. OpenTable has a maximum load factor of 0.75, which causes it to use about half as much memory most of the time. &lt;br /&gt;
&lt;br /&gt;
* The purpose of the typedefs KeyArg and ValueArg is to make it possible to switch the API from pass-by-value to pass-by-reference by editing just a couple of lines of code. (I tried this. Pass-by-reference is no faster on 64-bit machines.)&lt;br /&gt;
&lt;br /&gt;
* CloseTable attempts to allocate chunks of memory with sizes that are near powers of 2. This is to avoid wasting space when used with size-class-based malloc implementations.&lt;br /&gt;
&lt;br /&gt;
* A Close table can trade some speed for compactness, but it seems to be a bad bargain:&lt;br /&gt;
** The load factor is adjustable. (The hash table size must remain at a power of two, but the data vector can have non-power-of-2 sizes.) However, increasing the load factor directly affects LookupMiss speed.&lt;br /&gt;
** An implementation could grow the data array by less than doubling it each time. I tried this. Insert speed suffered; lookup speed was unaffected; but the modified CloseTable still used more memory than OpenTable.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; never shrinks the table unless you explicitly ask it to. &amp;lt;code&amp;gt;DenseTable::remove()&amp;lt;/code&amp;gt; periodically shrinks, because otherwise, the performance on LookupAfterDeleteTest is pathologically bad.&lt;br /&gt;
&lt;br /&gt;
Benchmark design notes:&lt;br /&gt;
&lt;br /&gt;
* The benchmark is pure C++, rather than a Map/Set implementation embedded in an existing ES implementation, in order to make the results as stable as possible, to avoid biasing the results to a particular ES implementation, to encourage contributors, and to focus on the performance differences in the hash table implementations by eliminating all other performance effects as much as possible.&lt;br /&gt;
&lt;br /&gt;
* The program runs each benchmark many different times in order to produce enough numbers that noise is visually obvious in the resulting graph. (Most of the speed graphs are nice and smooth.)&lt;br /&gt;
&lt;br /&gt;
= Results =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Memory usage ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-1.png]]&lt;br /&gt;
&lt;br /&gt;
All three implementations double the size of the table whenever it gets too full. On a log-log plot, this shows as stair-steps of a constant height. The slope of each staircase is 1, indicating linear growth.&lt;br /&gt;
&lt;br /&gt;
Both OpenTable and CloseTable are much more memory-efficient than DenseTable, because &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; is tuned for fast lookups at all costs.&lt;br /&gt;
&lt;br /&gt;
For any &#039;&#039;N&#039;&#039; &amp;gt; 5, a CloseTable with &#039;&#039;N&#039;&#039; entries allocates &#039;&#039;&#039;either 1.0625x or 2.125x as much memory&#039;&#039;&#039; as an OpenTable with &#039;&#039;N&#039;&#039; entries (1.125x or 2.25x as much memory on 64-bit systems). Both tables double in size at certain thresholds, and the thresholds for CloseTable are lower than those for OpenTable. That is, as a CloseTable is populated, it doubles in size sooner than the corresponding OpenTable. The factors determining this behavior are (1) the fact that CloseTable entries are 50% larger, and it therefore takes fewer of them to fill up a power-of-two-sized allocation; and (2) the value of &amp;lt;code&amp;gt;OpenTable::max_fill_factor()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is tempting to reduce this complicated picture to a single number, and write that CloseTables are, for example, 20% larger. Or 30%. But such a number would not be easily justified mathematically: the ratio does not converge as the number of entries increases.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-2.png]]&lt;br /&gt;
&lt;br /&gt;
DenseTable and OpenTable must initialize the entire table each time they resize. CloseTable also allocates large chunks of memory, but like a &amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt;, it does not need to write to that memory until there is data that needs to be stored there.&lt;br /&gt;
&lt;br /&gt;
This means that for a huge Map with no delete operations, a Close table could use more virtual memory but less physical memory than its open addressing counterparts. This will not be the only use case that stresses memory usage, though. Applications may also create many small tables and may delete entries from large tables.&lt;br /&gt;
&lt;br /&gt;
== Insertion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertSmallTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This measures the time required to fill a table to about 100 entries, repeatedly. (The “1e7” on the axes indicates that the numbers are in tens of millions: the Close table is doing about 60 million inserts per second on this machine.)&lt;br /&gt;
&lt;br /&gt;
This graph and the following ones show speed, so &#039;&#039;&#039;higher is better&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ideally all these graphs would show three straight horizontal lines, indicating that all three implementations scale beautifully to large work loads. And indeed this seems to be the case, mostly.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertLargeTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the time required to fill a single gigantic table.&lt;br /&gt;
&lt;br /&gt;
The jagged shape of this graph is robust. It reflects the fact that the table doubles in size as it grows, and rehashing is a significant part of the expense of populating a huge table.&lt;br /&gt;
&lt;br /&gt;
== Lookup speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupHitTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where &#039;&#039;k&#039;&#039; is the key of an existing entry in the table.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupMissTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where the key &#039;&#039;k&#039;&#039; is not found in the table.&lt;br /&gt;
&lt;br /&gt;
In an OpenTable, lookups that miss are slower than lookups that hit &#039;&#039;when there is at least one collision&#039;&#039;. This is because we keep probing the hash table until we find an empty entry.&lt;br /&gt;
&lt;br /&gt;
DenseTable is only slightly slower for misses, perhaps because more lookups have zero collisions. (?)&lt;br /&gt;
&lt;br /&gt;
== Deletion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-WorklistTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test creates a table with 700 entries, then measures the speed of alternately adding an entry and deleting the oldest remaining entry from the table. Entries are therefore removed in FIFO order. Each “operation” here includes both an insert and a delete.&lt;br /&gt;
&lt;br /&gt;
The CloseTable stores the entries in insertion order, so this test gets extremely good memory locality. The effect is even more pronounced in a 32-bit build.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-DeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of deleting all entries from a very large table.&lt;br /&gt;
&lt;br /&gt;
The numbers for dense_hash_map are jagged because &amp;lt;code&amp;gt;DenseMap&amp;lt;/code&amp;gt; shrinks the table at certain threshold sizes as entries are deleted, and shrinking the table is expensive.&lt;br /&gt;
&lt;br /&gt;
The apparent randomness of the OpenTable and CloseTable numbers is reproducible and unexplained.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupAfterDeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the performance of lookups, mostly misses, in a table that was filled to size 50000, then reduced to size 195 by deleting most of the entries.&lt;br /&gt;
&lt;br /&gt;
The results here are sensitive to the two sizes, which are totally arbitrary choices. A less arbitrary replacement for this test would be welcome.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401463</id>
		<title>User:Jorend/Deterministic hash tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401463"/>
		<updated>2012-02-27T21:07:06Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
&lt;br /&gt;
A deterministic hash table proposed by Tyler Close was implemented in C++ and its performance was compared to two hash table implementations using open addressing. Speed and memory usage were measured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; The Close table implementation was very fast, faster than the open addressing implementations. (It is unclear why; theory suggests it &amp;quot;should&amp;quot; be slower, and measurement confirms that the Close table is doing more memory accesses and more branches. More investigation is needed!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; The Close table implementation always allocates more memory than the leanest open addressing implementation. See the Results section for details.&lt;br /&gt;
&lt;br /&gt;
= Background =&lt;br /&gt;
&lt;br /&gt;
Most hash table APIs (including C++&#039;s &amp;lt;code&amp;gt;unordered_map&amp;lt;/code&amp;gt;, Java&#039;s &amp;lt;code&amp;gt;java.util.HashMap&amp;lt;/code&amp;gt;, Python&#039;s &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt;, Ruby&#039;s &amp;lt;code&amp;gt;Hash&amp;lt;/code&amp;gt;, and many others) allow users to iterate over all the entries in the hash table in an arbitrary order. This exposes the user to an aspect of the library&#039;s behavior (the iteration order) that is unspecified and indeed intentionally arbitrary.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Map&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Set&amp;lt;/code&amp;gt; data structures are proposed for a future version of the ECMAScript programming language. The standard committee would like to specify deterministic behavior if possible. There are several reasons for this:&lt;br /&gt;
&lt;br /&gt;
* There is evidence that some programmers find arbitrary iteration order surprising or confusing at first. [http://stackoverflow.com/questions/2453624/unsort-hashtable][http://stackoverflow.com/questions/1872329/storing-python-dictionary-entries-in-the-order-they-are-pushed][https://groups.google.com/group/comp.lang.python/browse_thread/thread/15f3b4a5cd6221b1/1b6621daf5d78d73][http://bytes.com/topic/c-sharp/answers/439203-hashtable-items-order][http://stackoverflow.com/questions/1419708/how-to-keep-the-order-of-elements-in-hashtable][http://stackoverflow.com/questions/7105540/hashtable-values-reordered]&lt;br /&gt;
* Property enumeration order is unspecified in ECMAScript, yet all the major implementations have been forced to converge on insertion order, for compatibility with the Web as it is. There is, therefore, some concern that if TC39 does not specify a deterministic iteration order, “the web will just go and specify it for us”.[https://mail.mozilla.org/pipermail/es-discuss/2012-February/020576.html]&lt;br /&gt;
* Hash table iteration order can expose some bits of object hash codes. This imposes some astonishing security concerns on the hashing function implementer. For example, an object&#039;s address must not be recoverable from the exposed bits of its hash code. (Revealing object addresses to untrusted ECMAScript code, while not exploitable by itself, would be a bad security bug on the Web.)&lt;br /&gt;
&lt;br /&gt;
Can a data structure retain the performance of traditional, arbitrary-order hash tables while also storing the order in which entries were added, so that iteration order is deterministic?&lt;br /&gt;
&lt;br /&gt;
Tyler Close has developed a deterministic hash table that is structured like this (pseudocode):&lt;br /&gt;
&lt;br /&gt;
 struct Entry {&lt;br /&gt;
     Key key;&lt;br /&gt;
     Value value;&lt;br /&gt;
     Entry *chain;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class CloseTable {&lt;br /&gt;
     Entry*[] hashTable;  // array of pointers into the data table&lt;br /&gt;
     Entry[] dataTable;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Lookups and inserts proceed much like a bucket-and-chain hash table, but instead of each entry being allocated separately from the heap, they are stored in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; in insertion order.&lt;br /&gt;
&lt;br /&gt;
Removing an entry simply replaces its &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; with some sentinel while leaving the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
== Theory ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; Every map data structure must store the keys and values. A map with &#039;&#039;N&#039;&#039; entries must use at least &#039;&#039;NE&#039;&#039; memory, where &#039;&#039;E&#039;&#039; is the size of a key-value pair (we assume the data can’t be compressed).&lt;br /&gt;
&lt;br /&gt;
In the following discussion we neglect the effect of deletions, which can cause both kinds of table to have extra memory that isn&#039;t in use at a given moment.&lt;br /&gt;
&lt;br /&gt;
An open addressing hash table has additional overhead depending on the fill factor. &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; in particular has a maximum fill factor &#039;&#039;F&#039;&#039;=3/4. When it becomes more than 3/4 full, it doubles in size, becoming just over 3/8 full. The amount of overhead in an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; is &#039;&#039;(1/f)NE&#039;&#039;, where &#039;&#039;f&#039;&#039; is the actual current fill ratio of the table and &#039;&#039;F/2 &amp;amp;lt; f &amp;amp;le; F&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A Close table has three sources of overhead: the entire &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointers in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;, and the unused portion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;. In &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointer causes each entry to require &#039;&#039;(3/2)E&#039;&#039; memory rather than &#039;&#039;E&#039;&#039;. The &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; doubles in size when it becomes completely full, so its size is &#039;&#039;(3/2)(1/u)NE&#039;&#039; where &#039;&#039;u&#039;&#039; is the proportion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; that is in use and &#039;&#039;1/2 &amp;amp;lt; u &amp;amp;le; 1&#039;&#039;. The &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt; is always 1/16 the size of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; (1/8 on 64-bit platforms), so the total size of both tables is &#039;&#039;(1+1/16)(3/2)(1/u)NE&#039;&#039; (substitute 1/8 on 64-bit platforms).&lt;br /&gt;
&lt;br /&gt;
For back-of-envelope purposes, then, &#039;&#039;f&#039;&#039; may be expected to be about &#039;&#039;3F/4&#039;&#039; (halfway between F/2 and F) and &#039;&#039;u&#039;&#039; about 3/4 on average; plugging these numbers in, we expect an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; to use about (1/(3F/4)) = 1.78&amp;amp;times;&#039;&#039;NE&#039;&#039;, and a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; about 2.13&amp;amp;times;&#039;&#039;NE&#039;&#039; (2.25&amp;amp;times;&#039;&#039;NE&#039;&#039; on 64-bit), on average. This would mean that the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; would be 20% larger on average (27% larger on 64-bit). However, see the Results section for a picture of how the two implementations compare in practice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; We consider the speed of lookups only. The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;has&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; operations all start with a lookup. We will quantify the speed of lookups in terms of how many memory locations must be accessed. To simulate locality effects, we treat multiple reads from a single entry, or from the table object, as a single read.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=3&amp;gt;Number of collisions&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th rowspan=4&amp;gt;Number of reads&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th rowspan=2&amp;gt;Unsuccessful lookup (miss)&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th rowspan=2&amp;gt;Successful lookup (hit)&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;2 to 3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;2 to 4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;3 to 4&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;3 to 5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In an open addressing hash table with fill factor &#039;&#039;f&#039;&#039;, an unsuccessful lookup performs about &#039;&#039;1/(1-f)&#039;&#039; probes.[https://en.wikipedia.org/wiki/Hash_table#Performance_analysis] In an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;, at worst &#039;&#039;f=F=3/4&#039;&#039; and so an unsuccessful lookup performs 4 probes on average. In the usual case, &#039;&#039;f=3F/4=9/16&#039;&#039;, so about 2.3 probes on average. A successful lookup performs half as many probes on average. Before probing the table, the lookup must access the &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; struct itself, so the final numbers are as shown in the table: 5 reads, 3.3 reads, etc.&lt;br /&gt;
&lt;br /&gt;
A Close table uses direct chaining. Each lookup must read first the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; object itself, and next the &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;. Then, for an unsuccessful lookup, the whole chain is walked; the expected length of the chain is simply the number of keys in the table divided by the number of hash buckets. For a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, this quotient is at most 8/3 and typically 2. A successful lookup would perform about half as many probes, if keys were distributed evenly, but instead they are distributed randomly, making successful lookups slower; by simulation, I found the expected number of probes is 2.3 under full load and 2 under typical load.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of unsuccessful lookup (miss)&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of successful lookup (hit)&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Data structure&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;5&lt;br /&gt;
    &amp;lt;td&amp;gt;3.3&lt;br /&gt;
    &amp;lt;td&amp;gt;3&lt;br /&gt;
    &amp;lt;td&amp;gt;2.2&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;4.7&lt;br /&gt;
    &amp;lt;td&amp;gt;4&lt;br /&gt;
    &amp;lt;td&amp;gt;4.3&lt;br /&gt;
    &amp;lt;td&amp;gt;4&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Method =&lt;br /&gt;
&lt;br /&gt;
The code I used to make these pictures is available at: https://github.com/jorendorff/dht&lt;br /&gt;
&lt;br /&gt;
The graphs below show data collected on a MacBook Pro, using g++-apple-4.2 and a 64-bit build. The results from running the test on a 32-bit Windows build were basically qualitatively the same. CloseTable performance was even better on Windows, for most tests; however, on LookupHitTest, OpenTable achieved almost equal speed.&lt;br /&gt;
&lt;br /&gt;
The project contains two complete hash map implementations: OpenTable and CloseTable. A third implementation, DenseTable, is a thin wrapper around the &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; type from [https://code.google.com/p/sparsehash/ Sparsehash]. The three classes have the same API and were all benchmarked using the same templates (in hashbench.cpp).&lt;br /&gt;
&lt;br /&gt;
Hash table implementation design notes:&lt;br /&gt;
&lt;br /&gt;
* The API was designed to match the [http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets proposal for ECMAScript Map objects] as of February 2012.&lt;br /&gt;
&lt;br /&gt;
* The Key and Value types are &amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; because ECMAScript values are 64 bits in the implementation I&#039;m most familiar with.&lt;br /&gt;
&lt;br /&gt;
* OpenTable and CloseTable are meant to be as fast and as memory-efficient as possible. Pretty much everything that can be omitted was omitted. For example, the hashing function is trivial: &#039;&#039;hash(key) = key&#039;&#039;, and neither OpenTable nor CloseTable further munges the hashcode before using it as a table index. Rationale: Making each implementation as fast as possible should highlight any performance difference between OpenTable and CloseTable, which is the purpose of the exercise. Using a more sophisticated hashing function would slow down both implementations, reducing the observed difference between the two techniques.&lt;br /&gt;
&lt;br /&gt;
* DenseTable is provided as a baseline. (It&#039;s nice to have some realistic numbers in the graphs too.)&lt;br /&gt;
&lt;br /&gt;
* dense_hash_map and OpenTable both implement straightforward hash tables with open addressing. The main difference between the two is one of tuning. dense_hash_map has a maximum load factor of 0.5. OpenTable has a maximum load factor of 0.75, which causes it to use about half as much memory most of the time. &lt;br /&gt;
&lt;br /&gt;
* The purpose of the typedefs KeyArg and ValueArg is to make it possible to switch the API from pass-by-value to pass-by-reference by editing just a couple of lines of code. (I tried this. Pass-by-reference is no faster on 64-bit machines.)&lt;br /&gt;
&lt;br /&gt;
* CloseTable attempts to allocate chunks of memory with sizes that are near powers of 2. This is to avoid wasting space when used with size-class-based malloc implementations.&lt;br /&gt;
&lt;br /&gt;
* A Close table can trade some speed for compactness, but it seems to be a bad bargain:&lt;br /&gt;
** The load factor is adjustable. (The hash table size must remain at a power of two, but the data vector can have non-power-of-2 sizes.) However, increasing the load factor directly affects LookupMiss speed.&lt;br /&gt;
** An implementation could grow the data array by less than doubling it each time. I tried this. Insert speed suffered; lookup speed was unaffected; but the modified CloseTable still used more memory than OpenTable.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; never shrinks the table unless you explicitly ask it to. &amp;lt;code&amp;gt;DenseTable::remove()&amp;lt;/code&amp;gt; periodically shrinks, because otherwise, the performance on LookupAfterDeleteTest is pathologically bad.&lt;br /&gt;
&lt;br /&gt;
Benchmark design notes:&lt;br /&gt;
&lt;br /&gt;
* The benchmark is pure C++, rather than a Map/Set implementation embedded in an existing ES implementation, in order to make the results as stable as possible, to avoid biasing the results to a particular ES implementation, to encourage contributors, and to focus on the performance differences in the hash table implementations by eliminating all other performance effects as much as possible.&lt;br /&gt;
&lt;br /&gt;
* The program runs each benchmark many different times in order to produce enough numbers that noise is visually obvious in the resulting graph. (Most of the speed graphs are nice and smooth.)&lt;br /&gt;
&lt;br /&gt;
= Results =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Memory usage ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-1.png]]&lt;br /&gt;
&lt;br /&gt;
All three implementations double the size of the table whenever it gets too full. On a log-log plot, this shows as stair-steps of a constant height. The slope of each staircase is 1, indicating linear growth.&lt;br /&gt;
&lt;br /&gt;
Both OpenTable and CloseTable are much more memory-efficient than DenseTable, because &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; is tuned for fast lookups at all costs.&lt;br /&gt;
&lt;br /&gt;
For any &#039;&#039;N&#039;&#039; &amp;gt; 5, a CloseTable with &#039;&#039;N&#039;&#039; entries allocates &#039;&#039;&#039;either 1.0625x or 2.125x as much memory&#039;&#039;&#039; as an OpenTable with &#039;&#039;N&#039;&#039; entries (1.125x or 2.25x as much memory on 64-bit systems). Both tables double in size at certain thresholds, and the thresholds for CloseTable are lower than those for OpenTable. That is, as a CloseTable is populated, it doubles in size sooner than the corresponding OpenTable. The factors determining this behavior are (1) the fact that CloseTable entries are 50% larger, and it therefore takes fewer of them to fill up a power-of-two-sized allocation; and (2) the value of &amp;lt;code&amp;gt;OpenTable::max_fill_factor()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is tempting to reduce this complicated picture to a single number, and write that CloseTables are, for example, 20% larger. Or 30%. But such a number would not be easily justified mathematically: the ratio does not converge as the number of entries increases.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-2.png]]&lt;br /&gt;
&lt;br /&gt;
DenseTable and OpenTable must initialize the entire table each time they resize. CloseTable also allocates large chunks of memory, but like a &amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt;, it does not need to write to that memory until there is data that needs to be stored there.&lt;br /&gt;
&lt;br /&gt;
This means that for a huge Map with no delete operations, a Close table could use more virtual memory but less physical memory than its open addressing counterparts. This will not be the only use case that stresses memory usage, though. Applications may also create many small tables and may delete entries from large tables.&lt;br /&gt;
&lt;br /&gt;
== Insertion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertSmallTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This measures the time required to fill a table to about 100 entries, repeatedly. (The “1e7” on the axes indicates that the numbers are in tens of millions: the Close table is doing about 60 million inserts per second on this machine.)&lt;br /&gt;
&lt;br /&gt;
This graph and the following ones show speed, so &#039;&#039;&#039;higher is better&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ideally all these graphs would show three straight horizontal lines, indicating that all three implementations scale beautifully to large work loads. And indeed this seems to be the case, mostly.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertLargeTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the time required to fill a single gigantic table.&lt;br /&gt;
&lt;br /&gt;
The jagged shape of this graph is robust. It reflects the fact that the table doubles in size as it grows, and rehashing is a significant part of the expense of populating a huge table.&lt;br /&gt;
&lt;br /&gt;
== Lookup speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupHitTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where &#039;&#039;k&#039;&#039; is the key of an existing entry in the table.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupMissTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where the key &#039;&#039;k&#039;&#039; is not found in the table.&lt;br /&gt;
&lt;br /&gt;
In an OpenTable, lookups that miss are slower than lookups that hit &#039;&#039;when there is at least one collision&#039;&#039;. This is because we keep probing the hash table until we find an empty entry.&lt;br /&gt;
&lt;br /&gt;
DenseTable is only slightly slower for misses, perhaps because more lookups have zero collisions. (?)&lt;br /&gt;
&lt;br /&gt;
== Deletion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-WorklistTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test creates a table with 700 entries, then measures the speed of alternately adding an entry and deleting the oldest remaining entry from the table. Entries are therefore removed in FIFO order. Each “operation” here includes both an insert and a delete.&lt;br /&gt;
&lt;br /&gt;
The CloseTable stores the entries in insertion order, so this test gets extremely good memory locality. The effect is even more pronounced in a 32-bit build.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-DeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of deleting all entries from a very large table.&lt;br /&gt;
&lt;br /&gt;
The numbers for dense_hash_map are jagged because &amp;lt;code&amp;gt;DenseMap&amp;lt;/code&amp;gt; shrinks the table at certain threshold sizes as entries are deleted, and shrinking the table is expensive.&lt;br /&gt;
&lt;br /&gt;
The apparent randomness of the OpenTable and CloseTable numbers is reproducible and unexplained.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupAfterDeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the performance of lookups, mostly misses, in a table that was filled to size 50000, then reduced to size 195 by deleting most of the entries.&lt;br /&gt;
&lt;br /&gt;
The results here are sensitive to the two sizes, which are totally arbitrary choices. A less arbitrary replacement for this test would be welcome.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401419</id>
		<title>User:Jorend/Deterministic hash tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401419"/>
		<updated>2012-02-27T19:50:41Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Theory */ oops!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
&lt;br /&gt;
A deterministic hash table proposed by Tyler Close was implemented in C++ and its performance was compared to two hash table implementations using open addressing. Speed and memory usage were measured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; The Close table implementation was very fast, faster than the open addressing implementations. (It is unclear why; theory suggests it &amp;quot;should&amp;quot; be slower, and measurement confirms that the Close table is doing more memory accesses and more branches. More investigation is needed!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; The Close table implementation always allocates more memory than the leanest open addressing implementation. See the Results section for details.&lt;br /&gt;
&lt;br /&gt;
= Background =&lt;br /&gt;
&lt;br /&gt;
Most hash table APIs (including C++&#039;s &amp;lt;code&amp;gt;unordered_map&amp;lt;/code&amp;gt;, Java&#039;s &amp;lt;code&amp;gt;java.util.HashMap&amp;lt;/code&amp;gt;, Python&#039;s &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt;, Ruby&#039;s &amp;lt;code&amp;gt;Hash&amp;lt;/code&amp;gt;, and many others) allow users to iterate over all the entries in the hash table in an arbitrary order. This exposes the user to an aspect of the library&#039;s behavior (the iteration order) that is unspecified and indeed intentionally arbitrary.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Map&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Set&amp;lt;/code&amp;gt; data structures are proposed for a future version of the ECMAScript programming language. The standard committee would like to specify deterministic behavior if possible. There are several reasons for this:&lt;br /&gt;
&lt;br /&gt;
* There is evidence that some programmers find arbitrary iteration order surprising or confusing at first. [http://stackoverflow.com/questions/2453624/unsort-hashtable][http://stackoverflow.com/questions/1872329/storing-python-dictionary-entries-in-the-order-they-are-pushed][https://groups.google.com/group/comp.lang.python/browse_thread/thread/15f3b4a5cd6221b1/1b6621daf5d78d73][http://bytes.com/topic/c-sharp/answers/439203-hashtable-items-order][http://stackoverflow.com/questions/1419708/how-to-keep-the-order-of-elements-in-hashtable][http://stackoverflow.com/questions/7105540/hashtable-values-reordered]&lt;br /&gt;
* Property enumeration order is unspecified in ECMAScript, yet all the major implementations have been forced to converge on insertion order, for compatibility with the Web as it is. There is, therefore, some concern that if TC39 does not specify a deterministic iteration order, “the web will just go and specify it for us”.[https://mail.mozilla.org/pipermail/es-discuss/2012-February/020576.html]&lt;br /&gt;
* Hash table iteration order can expose some bits of object hash codes. This imposes some astonishing security concerns on the hashing function implementer. For example, an object&#039;s address must not be recoverable from the exposed bits of its hash code. (Revealing object addresses to untrusted ECMAScript code, while not exploitable by itself, would be a bad security bug on the Web.)&lt;br /&gt;
&lt;br /&gt;
Can a data structure retain the performance of traditional, arbitrary-order hash tables while also storing the order in which entries were added, so that iteration order is deterministic?&lt;br /&gt;
&lt;br /&gt;
Tyler Close has developed a deterministic hash table that is structured like this (pseudocode):&lt;br /&gt;
&lt;br /&gt;
 struct Entry {&lt;br /&gt;
     Key key;&lt;br /&gt;
     Value value;&lt;br /&gt;
     Entry *chain;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class CloseTable {&lt;br /&gt;
     Entry*[] hashTable;  // array of pointers into the data table&lt;br /&gt;
     Entry[] dataTable;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Lookups and inserts proceed much like a bucket-and-chain hash table, but instead of each entry being allocated separately from the heap, they are stored in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; in insertion order.&lt;br /&gt;
&lt;br /&gt;
Removing an entry simply replaces its &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; with some sentinel while leaving the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
== Theory ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; Every map data structure must store the keys and values. A map with &#039;&#039;N&#039;&#039; entries must use at least &#039;&#039;NE&#039;&#039; memory, where &#039;&#039;E&#039;&#039; is the size of a key-value pair (we assume the data can’t be compressed).&lt;br /&gt;
&lt;br /&gt;
In the following discussion we neglect the effect of deletions, which can cause both kinds of table to have extra memory that isn&#039;t in use at a given moment.&lt;br /&gt;
&lt;br /&gt;
An open addressing hash table has additional overhead depending on the fill factor. &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; in particular has a maximum fill factor &#039;&#039;F&#039;&#039;=3/4. When it becomes more than 3/4 full, it doubles in size, becoming just over 3/8 full. The amount of overhead in an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; is &#039;&#039;(1/f)NE&#039;&#039;, where &#039;&#039;f&#039;&#039; is the actual current fill ratio of the table and &#039;&#039;F/2 &amp;amp;lt; f &amp;amp;le; F&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A Close table has three sources of overhead: the entire &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointers in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;, and the unused portion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;. In &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointer causes each entry to require &#039;&#039;(3/2)E&#039;&#039; memory rather than &#039;&#039;E&#039;&#039;. The &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; doubles in size when it becomes completely full, so its size is &#039;&#039;(3/2)(1/u)NE&#039;&#039; where &#039;&#039;u&#039;&#039; is the proportion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; that is in use and &#039;&#039;1/2 &amp;amp;lt; u &amp;amp;le; 1&#039;&#039;. The &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt; is always 1/16 the size of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; (1/8 on 64-bit platforms), so the total size of both tables is &#039;&#039;(1+1/16)(3/2)(1/u)NE&#039;&#039; (substitute 1/8 on 64-bit platforms).&lt;br /&gt;
&lt;br /&gt;
For back-of-envelope purposes, then, &#039;&#039;f&#039;&#039; may be expected to be about &#039;&#039;3F/4&#039;&#039; (halfway between F/2 and F) and &#039;&#039;u&#039;&#039; about 3/4 on average; plugging these numbers in, we expect an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; to use about (1/(3F/4)) = 1.78&amp;amp;times;&#039;&#039;NE&#039;&#039;, and a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; about 2.13&amp;amp;times;&#039;&#039;NE&#039;&#039; (2.25&amp;amp;times;&#039;&#039;NE&#039;&#039; on 64-bit), on average. This would mean that the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; would be 20% larger on average (27% larger on 64-bit). However, see the Results section for a picture of how the two implementations compare in practice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; We consider the speed of lookups only. The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;has&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; operations all start with a lookup. We will quantify the speed of lookups in terms of how many memory locations must be accessed. To simulate locality effects, we treat multiple reads from a single entry, or from the table object, as a single read.&lt;br /&gt;
&lt;br /&gt;
In an open addressing hash table with fill factor &#039;&#039;f&#039;&#039;, an unsuccessful lookup performs about &#039;&#039;1/(1-f)&#039;&#039; probes.[https://en.wikipedia.org/wiki/Hash_table#Performance_analysis] In an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;, at worst &#039;&#039;f=F=3/4&#039;&#039; and so an unsuccessful lookup performs 4 probes on average. In the usual case, &#039;&#039;f=3F/4=9/16&#039;&#039;, so about 2.3 probes on average. A successful lookup performs half as many probes on average. Before probing the table, the lookup must access the &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; struct itself, so the final numbers are as shown in the table: 5 reads, 3.3 reads, etc.&lt;br /&gt;
&lt;br /&gt;
A Close table uses direct chaining. Each lookup must read first the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; object itself, and next the &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;. Then, for an unsuccessful lookup, the whole chain is walked; the expected length of the chain is simply the number of keys in the table divided by the number of hash buckets. For a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, this quotient is at most 8/3 and typically 2. ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of unsuccessful lookup (miss)&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of successful lookup (hit)&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Data structure&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;5&lt;br /&gt;
    &amp;lt;td&amp;gt;3.3&lt;br /&gt;
    &amp;lt;td&amp;gt;3&lt;br /&gt;
    &amp;lt;td&amp;gt;2.2&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;4.7&lt;br /&gt;
    &amp;lt;td&amp;gt;4&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Method =&lt;br /&gt;
&lt;br /&gt;
The code I used to make these pictures is available at: https://github.com/jorendorff/dht&lt;br /&gt;
&lt;br /&gt;
The graphs below show data collected on a MacBook Pro, using g++-apple-4.2 and a 64-bit build. The results from running the test on a 32-bit Windows build were basically qualitatively the same. CloseTable performance was even better on Windows, for most tests; however, on LookupHitTest, OpenTable achieved almost equal speed.&lt;br /&gt;
&lt;br /&gt;
The project contains two complete hash map implementations: OpenTable and CloseTable. A third implementation, DenseTable, is a thin wrapper around the &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; type from [https://code.google.com/p/sparsehash/ Sparsehash]. The three classes have the same API and were all benchmarked using the same templates (in hashbench.cpp).&lt;br /&gt;
&lt;br /&gt;
Hash table implementation design notes:&lt;br /&gt;
&lt;br /&gt;
* The API was designed to match the [http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets proposal for ECMAScript Map objects] as of February 2012.&lt;br /&gt;
&lt;br /&gt;
* The Key and Value types are &amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; because ECMAScript values are 64 bits in the implementation I&#039;m most familiar with.&lt;br /&gt;
&lt;br /&gt;
* OpenTable and CloseTable are meant to be as fast and as memory-efficient as possible. Pretty much everything that can be omitted was omitted. For example, the hashing function is trivial: &#039;&#039;hash(key) = key&#039;&#039;, and neither OpenTable nor CloseTable further munges the hashcode before using it as a table index. Rationale: Making each implementation as fast as possible should highlight any performance difference between OpenTable and CloseTable, which is the purpose of the exercise. Using a more sophisticated hashing function would slow down both implementations, reducing the observed difference between the two techniques.&lt;br /&gt;
&lt;br /&gt;
* DenseTable is provided as a baseline. (It&#039;s nice to have some realistic numbers in the graphs too.)&lt;br /&gt;
&lt;br /&gt;
* dense_hash_map and OpenTable both implement straightforward hash tables with open addressing. The main difference between the two is one of tuning. dense_hash_map has a maximum load factor of 0.5. OpenTable has a maximum load factor of 0.75, which causes it to use about half as much memory most of the time. &lt;br /&gt;
&lt;br /&gt;
* The purpose of the typedefs KeyArg and ValueArg is to make it possible to switch the API from pass-by-value to pass-by-reference by editing just a couple of lines of code. (I tried this. Pass-by-reference is no faster on 64-bit machines.)&lt;br /&gt;
&lt;br /&gt;
* CloseTable attempts to allocate chunks of memory with sizes that are near powers of 2. This is to avoid wasting space when used with size-class-based malloc implementations.&lt;br /&gt;
&lt;br /&gt;
* A Close table can trade some speed for compactness, but it seems to be a bad bargain:&lt;br /&gt;
** The load factor is adjustable. (The hash table size must remain at a power of two, but the data vector can have non-power-of-2 sizes.) However, increasing the load factor directly affects LookupMiss speed.&lt;br /&gt;
** An implementation could grow the data array by less than doubling it each time. I tried this. Insert speed suffered; lookup speed was unaffected; but the modified CloseTable still used more memory than OpenTable.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; never shrinks the table unless you explicitly ask it to. &amp;lt;code&amp;gt;DenseTable::remove()&amp;lt;/code&amp;gt; periodically shrinks, because otherwise, the performance on LookupAfterDeleteTest is pathologically bad.&lt;br /&gt;
&lt;br /&gt;
Benchmark design notes:&lt;br /&gt;
&lt;br /&gt;
* The benchmark is pure C++, rather than a Map/Set implementation embedded in an existing ES implementation, in order to make the results as stable as possible, to avoid biasing the results to a particular ES implementation, to encourage contributors, and to focus on the performance differences in the hash table implementations by eliminating all other performance effects as much as possible.&lt;br /&gt;
&lt;br /&gt;
* The program runs each benchmark many different times in order to produce enough numbers that noise is visually obvious in the resulting graph. (Most of the speed graphs are nice and smooth.)&lt;br /&gt;
&lt;br /&gt;
= Results =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Memory usage ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-1.png]]&lt;br /&gt;
&lt;br /&gt;
All three implementations double the size of the table whenever it gets too full. On a log-log plot, this shows as stair-steps of a constant height. The slope of each staircase is 1, indicating linear growth.&lt;br /&gt;
&lt;br /&gt;
Both OpenTable and CloseTable are much more memory-efficient than DenseTable, because &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; is tuned for fast lookups at all costs.&lt;br /&gt;
&lt;br /&gt;
For any &#039;&#039;N&#039;&#039; &amp;gt; 5, a CloseTable with &#039;&#039;N&#039;&#039; entries allocates &#039;&#039;&#039;either 1.0625x or 2.125x as much memory&#039;&#039;&#039; as an OpenTable with &#039;&#039;N&#039;&#039; entries (1.125x or 2.25x as much memory on 64-bit systems). Both tables double in size at certain thresholds, and the thresholds for CloseTable are lower than those for OpenTable. That is, as a CloseTable is populated, it doubles in size sooner than the corresponding OpenTable. The factors determining this behavior are (1) the fact that CloseTable entries are 50% larger, and it therefore takes fewer of them to fill up a power-of-two-sized allocation; and (2) the value of &amp;lt;code&amp;gt;OpenTable::max_fill_factor()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is tempting to reduce this complicated picture to a single number, and write that CloseTables are, for example, 20% larger. Or 30%. But such a number would not be easily justified mathematically: the ratio does not converge as the number of entries increases.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-2.png]]&lt;br /&gt;
&lt;br /&gt;
DenseTable and OpenTable must initialize the entire table each time they resize. CloseTable also allocates large chunks of memory, but like a &amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt;, it does not need to write to that memory until there is data that needs to be stored there.&lt;br /&gt;
&lt;br /&gt;
This means that for a huge Map with no delete operations, a Close table could use more virtual memory but less physical memory than its open addressing counterparts. This will not be the only use case that stresses memory usage, though. Applications may also create many small tables and may delete entries from large tables.&lt;br /&gt;
&lt;br /&gt;
== Insertion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertSmallTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This measures the time required to fill a table to about 100 entries, repeatedly. (The “1e7” on the axes indicates that the numbers are in tens of millions: the Close table is doing about 60 million inserts per second on this machine.)&lt;br /&gt;
&lt;br /&gt;
This graph and the following ones show speed, so &#039;&#039;&#039;higher is better&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ideally all these graphs would show three straight horizontal lines, indicating that all three implementations scale beautifully to large work loads. And indeed this seems to be the case, mostly.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertLargeTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the time required to fill a single gigantic table.&lt;br /&gt;
&lt;br /&gt;
The jagged shape of this graph is robust. It reflects the fact that the table doubles in size as it grows, and rehashing is a significant part of the expense of populating a huge table.&lt;br /&gt;
&lt;br /&gt;
== Lookup speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupHitTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where &#039;&#039;k&#039;&#039; is the key of an existing entry in the table.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupMissTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where the key &#039;&#039;k&#039;&#039; is not found in the table.&lt;br /&gt;
&lt;br /&gt;
In an OpenTable, lookups that miss are slower than lookups that hit &#039;&#039;when there is at least one collision&#039;&#039;. This is because we keep probing the hash table until we find an empty entry.&lt;br /&gt;
&lt;br /&gt;
DenseTable is only slightly slower for misses, perhaps because more lookups have zero collisions. (?)&lt;br /&gt;
&lt;br /&gt;
== Deletion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-WorklistTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test creates a table with 700 entries, then measures the speed of alternately adding an entry and deleting the oldest remaining entry from the table. Entries are therefore removed in FIFO order. Each “operation” here includes both an insert and a delete.&lt;br /&gt;
&lt;br /&gt;
The CloseTable stores the entries in insertion order, so this test gets extremely good memory locality. The effect is even more pronounced in a 32-bit build.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-DeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of deleting all entries from a very large table.&lt;br /&gt;
&lt;br /&gt;
The numbers for dense_hash_map are jagged because &amp;lt;code&amp;gt;DenseMap&amp;lt;/code&amp;gt; shrinks the table at certain threshold sizes as entries are deleted, and shrinking the table is expensive.&lt;br /&gt;
&lt;br /&gt;
The apparent randomness of the OpenTable and CloseTable numbers is reproducible and unexplained.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupAfterDeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the performance of lookups, mostly misses, in a table that was filled to size 50000, then reduced to size 195 by deleting most of the entries.&lt;br /&gt;
&lt;br /&gt;
The results here are sensitive to the two sizes, which are totally arbitrary choices. A less arbitrary replacement for this test would be welcome.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401418</id>
		<title>User:Jorend/Deterministic hash tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401418"/>
		<updated>2012-02-27T19:49:41Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
&lt;br /&gt;
A deterministic hash table proposed by Tyler Close was implemented in C++ and its performance was compared to two hash table implementations using open addressing. Speed and memory usage were measured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; The Close table implementation was very fast, faster than the open addressing implementations. (It is unclear why; theory suggests it &amp;quot;should&amp;quot; be slower, and measurement confirms that the Close table is doing more memory accesses and more branches. More investigation is needed!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; The Close table implementation always allocates more memory than the leanest open addressing implementation. See the Results section for details.&lt;br /&gt;
&lt;br /&gt;
= Background =&lt;br /&gt;
&lt;br /&gt;
Most hash table APIs (including C++&#039;s &amp;lt;code&amp;gt;unordered_map&amp;lt;/code&amp;gt;, Java&#039;s &amp;lt;code&amp;gt;java.util.HashMap&amp;lt;/code&amp;gt;, Python&#039;s &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt;, Ruby&#039;s &amp;lt;code&amp;gt;Hash&amp;lt;/code&amp;gt;, and many others) allow users to iterate over all the entries in the hash table in an arbitrary order. This exposes the user to an aspect of the library&#039;s behavior (the iteration order) that is unspecified and indeed intentionally arbitrary.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Map&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Set&amp;lt;/code&amp;gt; data structures are proposed for a future version of the ECMAScript programming language. The standard committee would like to specify deterministic behavior if possible. There are several reasons for this:&lt;br /&gt;
&lt;br /&gt;
* There is evidence that some programmers find arbitrary iteration order surprising or confusing at first. [http://stackoverflow.com/questions/2453624/unsort-hashtable][http://stackoverflow.com/questions/1872329/storing-python-dictionary-entries-in-the-order-they-are-pushed][https://groups.google.com/group/comp.lang.python/browse_thread/thread/15f3b4a5cd6221b1/1b6621daf5d78d73][http://bytes.com/topic/c-sharp/answers/439203-hashtable-items-order][http://stackoverflow.com/questions/1419708/how-to-keep-the-order-of-elements-in-hashtable][http://stackoverflow.com/questions/7105540/hashtable-values-reordered]&lt;br /&gt;
* Property enumeration order is unspecified in ECMAScript, yet all the major implementations have been forced to converge on insertion order, for compatibility with the Web as it is. There is, therefore, some concern that if TC39 does not specify a deterministic iteration order, “the web will just go and specify it for us”.[https://mail.mozilla.org/pipermail/es-discuss/2012-February/020576.html]&lt;br /&gt;
* Hash table iteration order can expose some bits of object hash codes. This imposes some astonishing security concerns on the hashing function implementer. For example, an object&#039;s address must not be recoverable from the exposed bits of its hash code. (Revealing object addresses to untrusted ECMAScript code, while not exploitable by itself, would be a bad security bug on the Web.)&lt;br /&gt;
&lt;br /&gt;
Can a data structure retain the performance of traditional, arbitrary-order hash tables while also storing the order in which entries were added, so that iteration order is deterministic?&lt;br /&gt;
&lt;br /&gt;
Tyler Close has developed a deterministic hash table that is structured like this (pseudocode):&lt;br /&gt;
&lt;br /&gt;
 struct Entry {&lt;br /&gt;
     Key key;&lt;br /&gt;
     Value value;&lt;br /&gt;
     Entry *chain;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class CloseTable {&lt;br /&gt;
     Entry*[] hashTable;  // array of pointers into the data table&lt;br /&gt;
     Entry[] dataTable;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Lookups and inserts proceed much like a bucket-and-chain hash table, but instead of each entry being allocated separately from the heap, they are stored in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; in insertion order.&lt;br /&gt;
&lt;br /&gt;
Removing an entry simply replaces its &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; with some sentinel while leaving the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
== Theory ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; Every map data structure must store the keys and values. A map with &#039;&#039;N&#039;&#039; entries must use at least &#039;&#039;NE&#039;&#039; memory, where &#039;&#039;E&#039;&#039; is the size of a key-value pair (we assume the data can’t be compressed).&lt;br /&gt;
&lt;br /&gt;
In the following discussion we neglect the effect of deletions, which can cause both kinds of table to have extra memory that isn&#039;t in use at a given moment.&lt;br /&gt;
&lt;br /&gt;
An open addressing hash table has additional overhead depending on the fill factor. &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; in particular has a maximum fill factor &#039;&#039;F&#039;&#039;=3/4. When it becomes more than 3/4 full, it doubles in size, becoming just over 3/8 full. The amount of overhead in an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; is &#039;&#039;(1/f)NE&#039;&#039;, where &#039;&#039;f&#039;&#039; is the actual current fill ratio of the table and &#039;&#039;F/2 &amp;amp;lt; f &amp;amp;le; F&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A Close table has three sources of overhead: the entire &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointers in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;, and the unused portion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;. In &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointer causes each entry to require &#039;&#039;(3/2)E&#039;&#039; memory rather than &#039;&#039;E&#039;&#039;. The &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; doubles in size when it becomes completely full, so its size is &#039;&#039;(3/2)(1/u)NE&#039;&#039; where &#039;&#039;u&#039;&#039; is the proportion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; that is in use and &#039;&#039;1/2 &amp;amp;lt; u &amp;amp;le; 1&#039;&#039;. The &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt; is always 1/16 the size of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; (1/8 on 64-bit platforms), so the total size of both tables is &#039;&#039;(1+1/16)(3/2)(1/u)NE&#039;&#039; (substitute 1/8 on 64-bit platforms).&lt;br /&gt;
&lt;br /&gt;
For back-of-envelope purposes, then, &#039;&#039;f&#039;&#039; may be expected to be about &#039;&#039;3F/4&#039;&#039; (halfway between F/2 and F) and &#039;&#039;u&#039;&#039; about 3/4 on average; plugging these numbers in, we expect an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; to use about (1/(3F/4)) = 1.78&amp;amp;times;&#039;&#039;NE&#039;&#039;, and a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; about 2.13&amp;amp;times;&#039;&#039;NE&#039;&#039; (2.25&amp;amp;times;&#039;&#039;NE&#039;&#039; on 64-bit), on average. This would mean that the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; would be 20% larger on average (27% larger on 64-bit). However, see the Results section for a picture of how the two implementations compare in practice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; We consider the speed of lookups only. The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;has&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; operations all start with a lookup. We will quantify the speed of lookups in terms of how many memory locations must be accessed. To simulate locality effects, we treat multiple reads from a single entry, or from the table object, as a single read.&lt;br /&gt;
&lt;br /&gt;
In an open addressing hash table with fill factor &#039;&#039;f&#039;&#039;, an unsuccessful lookup performs about &#039;&#039;1/(1-f)&#039;&#039; probes.[https://en.wikipedia.org/wiki/Hash_table#Performance_analysis] In an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;, at worst &#039;&#039;f=F=3/4&#039;&#039; and so an unsuccessful lookup performs 4 probes on average. In the usual case, &#039;&#039;f=3F/4=9/16&#039;&#039;, so about 2.3 probes on average. A successful lookup performs half as many probes on average. Before probing the table, the lookup must access the &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; struct itself, so the final numbers are as shown in the table: 5 reads, 3.3 reads, etc.&lt;br /&gt;
&lt;br /&gt;
A Close table uses direct chaining. Each lookup must read first the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; object itself, and next the &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;. Then, for an unsuccessful lookup, the whole chain is walked; the expected length of the chain is simply the number of keys in the table divided by the number of hash buckets. For a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, this quotient is at most 8/3 and typically 2. ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of unsuccessful lookup (miss)&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of successful lookup (hit)&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Data structure&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;5&lt;br /&gt;
    &amp;lt;td&amp;gt;3.3&lt;br /&gt;
    &amp;lt;td&amp;gt;3&lt;br /&gt;
    &amp;lt;td&amp;gt;2.2&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;4.7&lt;br /&gt;
    &amp;lt;td&amp;gt;3&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Method =&lt;br /&gt;
&lt;br /&gt;
The code I used to make these pictures is available at: https://github.com/jorendorff/dht&lt;br /&gt;
&lt;br /&gt;
The graphs below show data collected on a MacBook Pro, using g++-apple-4.2 and a 64-bit build. The results from running the test on a 32-bit Windows build were basically qualitatively the same. CloseTable performance was even better on Windows, for most tests; however, on LookupHitTest, OpenTable achieved almost equal speed.&lt;br /&gt;
&lt;br /&gt;
The project contains two complete hash map implementations: OpenTable and CloseTable. A third implementation, DenseTable, is a thin wrapper around the &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; type from [https://code.google.com/p/sparsehash/ Sparsehash]. The three classes have the same API and were all benchmarked using the same templates (in hashbench.cpp).&lt;br /&gt;
&lt;br /&gt;
Hash table implementation design notes:&lt;br /&gt;
&lt;br /&gt;
* The API was designed to match the [http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets proposal for ECMAScript Map objects] as of February 2012.&lt;br /&gt;
&lt;br /&gt;
* The Key and Value types are &amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; because ECMAScript values are 64 bits in the implementation I&#039;m most familiar with.&lt;br /&gt;
&lt;br /&gt;
* OpenTable and CloseTable are meant to be as fast and as memory-efficient as possible. Pretty much everything that can be omitted was omitted. For example, the hashing function is trivial: &#039;&#039;hash(key) = key&#039;&#039;, and neither OpenTable nor CloseTable further munges the hashcode before using it as a table index. Rationale: Making each implementation as fast as possible should highlight any performance difference between OpenTable and CloseTable, which is the purpose of the exercise. Using a more sophisticated hashing function would slow down both implementations, reducing the observed difference between the two techniques.&lt;br /&gt;
&lt;br /&gt;
* DenseTable is provided as a baseline. (It&#039;s nice to have some realistic numbers in the graphs too.)&lt;br /&gt;
&lt;br /&gt;
* dense_hash_map and OpenTable both implement straightforward hash tables with open addressing. The main difference between the two is one of tuning. dense_hash_map has a maximum load factor of 0.5. OpenTable has a maximum load factor of 0.75, which causes it to use about half as much memory most of the time. &lt;br /&gt;
&lt;br /&gt;
* The purpose of the typedefs KeyArg and ValueArg is to make it possible to switch the API from pass-by-value to pass-by-reference by editing just a couple of lines of code. (I tried this. Pass-by-reference is no faster on 64-bit machines.)&lt;br /&gt;
&lt;br /&gt;
* CloseTable attempts to allocate chunks of memory with sizes that are near powers of 2. This is to avoid wasting space when used with size-class-based malloc implementations.&lt;br /&gt;
&lt;br /&gt;
* A Close table can trade some speed for compactness, but it seems to be a bad bargain:&lt;br /&gt;
** The load factor is adjustable. (The hash table size must remain at a power of two, but the data vector can have non-power-of-2 sizes.) However, increasing the load factor directly affects LookupMiss speed.&lt;br /&gt;
** An implementation could grow the data array by less than doubling it each time. I tried this. Insert speed suffered; lookup speed was unaffected; but the modified CloseTable still used more memory than OpenTable.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; never shrinks the table unless you explicitly ask it to. &amp;lt;code&amp;gt;DenseTable::remove()&amp;lt;/code&amp;gt; periodically shrinks, because otherwise, the performance on LookupAfterDeleteTest is pathologically bad.&lt;br /&gt;
&lt;br /&gt;
Benchmark design notes:&lt;br /&gt;
&lt;br /&gt;
* The benchmark is pure C++, rather than a Map/Set implementation embedded in an existing ES implementation, in order to make the results as stable as possible, to avoid biasing the results to a particular ES implementation, to encourage contributors, and to focus on the performance differences in the hash table implementations by eliminating all other performance effects as much as possible.&lt;br /&gt;
&lt;br /&gt;
* The program runs each benchmark many different times in order to produce enough numbers that noise is visually obvious in the resulting graph. (Most of the speed graphs are nice and smooth.)&lt;br /&gt;
&lt;br /&gt;
= Results =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Memory usage ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-1.png]]&lt;br /&gt;
&lt;br /&gt;
All three implementations double the size of the table whenever it gets too full. On a log-log plot, this shows as stair-steps of a constant height. The slope of each staircase is 1, indicating linear growth.&lt;br /&gt;
&lt;br /&gt;
Both OpenTable and CloseTable are much more memory-efficient than DenseTable, because &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; is tuned for fast lookups at all costs.&lt;br /&gt;
&lt;br /&gt;
For any &#039;&#039;N&#039;&#039; &amp;gt; 5, a CloseTable with &#039;&#039;N&#039;&#039; entries allocates &#039;&#039;&#039;either 1.0625x or 2.125x as much memory&#039;&#039;&#039; as an OpenTable with &#039;&#039;N&#039;&#039; entries (1.125x or 2.25x as much memory on 64-bit systems). Both tables double in size at certain thresholds, and the thresholds for CloseTable are lower than those for OpenTable. That is, as a CloseTable is populated, it doubles in size sooner than the corresponding OpenTable. The factors determining this behavior are (1) the fact that CloseTable entries are 50% larger, and it therefore takes fewer of them to fill up a power-of-two-sized allocation; and (2) the value of &amp;lt;code&amp;gt;OpenTable::max_fill_factor()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is tempting to reduce this complicated picture to a single number, and write that CloseTables are, for example, 20% larger. Or 30%. But such a number would not be easily justified mathematically: the ratio does not converge as the number of entries increases.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-2.png]]&lt;br /&gt;
&lt;br /&gt;
DenseTable and OpenTable must initialize the entire table each time they resize. CloseTable also allocates large chunks of memory, but like a &amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt;, it does not need to write to that memory until there is data that needs to be stored there.&lt;br /&gt;
&lt;br /&gt;
This means that for a huge Map with no delete operations, a Close table could use more virtual memory but less physical memory than its open addressing counterparts. This will not be the only use case that stresses memory usage, though. Applications may also create many small tables and may delete entries from large tables.&lt;br /&gt;
&lt;br /&gt;
== Insertion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertSmallTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This measures the time required to fill a table to about 100 entries, repeatedly. (The “1e7” on the axes indicates that the numbers are in tens of millions: the Close table is doing about 60 million inserts per second on this machine.)&lt;br /&gt;
&lt;br /&gt;
This graph and the following ones show speed, so &#039;&#039;&#039;higher is better&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ideally all these graphs would show three straight horizontal lines, indicating that all three implementations scale beautifully to large work loads. And indeed this seems to be the case, mostly.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertLargeTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the time required to fill a single gigantic table.&lt;br /&gt;
&lt;br /&gt;
The jagged shape of this graph is robust. It reflects the fact that the table doubles in size as it grows, and rehashing is a significant part of the expense of populating a huge table.&lt;br /&gt;
&lt;br /&gt;
== Lookup speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupHitTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where &#039;&#039;k&#039;&#039; is the key of an existing entry in the table.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupMissTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where the key &#039;&#039;k&#039;&#039; is not found in the table.&lt;br /&gt;
&lt;br /&gt;
In an OpenTable, lookups that miss are slower than lookups that hit &#039;&#039;when there is at least one collision&#039;&#039;. This is because we keep probing the hash table until we find an empty entry.&lt;br /&gt;
&lt;br /&gt;
DenseTable is only slightly slower for misses, perhaps because more lookups have zero collisions. (?)&lt;br /&gt;
&lt;br /&gt;
== Deletion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-WorklistTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test creates a table with 700 entries, then measures the speed of alternately adding an entry and deleting the oldest remaining entry from the table. Entries are therefore removed in FIFO order. Each “operation” here includes both an insert and a delete.&lt;br /&gt;
&lt;br /&gt;
The CloseTable stores the entries in insertion order, so this test gets extremely good memory locality. The effect is even more pronounced in a 32-bit build.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-DeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of deleting all entries from a very large table.&lt;br /&gt;
&lt;br /&gt;
The numbers for dense_hash_map are jagged because &amp;lt;code&amp;gt;DenseMap&amp;lt;/code&amp;gt; shrinks the table at certain threshold sizes as entries are deleted, and shrinking the table is expensive.&lt;br /&gt;
&lt;br /&gt;
The apparent randomness of the OpenTable and CloseTable numbers is reproducible and unexplained.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupAfterDeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the performance of lookups, mostly misses, in a table that was filled to size 50000, then reduced to size 195 by deleting most of the entries.&lt;br /&gt;
&lt;br /&gt;
The results here are sensitive to the two sizes, which are totally arbitrary choices. A less arbitrary replacement for this test would be welcome.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401415</id>
		<title>User:Jorend/Deterministic hash tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401415"/>
		<updated>2012-02-27T19:46:50Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Theory */ fmt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
&lt;br /&gt;
A deterministic hash table proposed by Tyler Close was implemented in C++ and its performance was compared to two hash table implementations using open addressing. Speed and memory usage were measured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; The Close table implementation was very fast, faster than the open addressing implementations. (It is unclear why; theory suggests it &amp;quot;should&amp;quot; be slower, and measurement confirms that the Close table is doing more memory accesses and more branches. More investigation is needed!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; The Close table implementation always allocates more memory than the leanest open addressing implementation. See the Results section for details.&lt;br /&gt;
&lt;br /&gt;
= Background =&lt;br /&gt;
&lt;br /&gt;
Most hash table APIs (including C++&#039;s &amp;lt;code&amp;gt;unordered_map&amp;lt;/code&amp;gt;, Java&#039;s &amp;lt;code&amp;gt;java.util.HashMap&amp;lt;/code&amp;gt;, Python&#039;s &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt;, Ruby&#039;s &amp;lt;code&amp;gt;Hash&amp;lt;/code&amp;gt;, and many others) allow users to iterate over all the entries in the hash table in an arbitrary order. This exposes the user to an aspect of the library&#039;s behavior (the iteration order) that is unspecified and indeed intentionally arbitrary.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Map&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Set&amp;lt;/code&amp;gt; data structures are proposed for a future version of the ECMAScript programming language. The standard committee would like to specify deterministic behavior if possible. There are several reasons for this:&lt;br /&gt;
&lt;br /&gt;
* There is evidence that some programmers find arbitrary iteration order surprising or confusing at first. [http://stackoverflow.com/questions/2453624/unsort-hashtable][http://stackoverflow.com/questions/1872329/storing-python-dictionary-entries-in-the-order-they-are-pushed][https://groups.google.com/group/comp.lang.python/browse_thread/thread/15f3b4a5cd6221b1/1b6621daf5d78d73][http://bytes.com/topic/c-sharp/answers/439203-hashtable-items-order][http://stackoverflow.com/questions/1419708/how-to-keep-the-order-of-elements-in-hashtable][http://stackoverflow.com/questions/7105540/hashtable-values-reordered]&lt;br /&gt;
* Property enumeration order is unspecified in ECMAScript, yet all the major implementations have been forced to converge on insertion order, for compatibility with the Web as it is. There is, therefore, some concern that if TC39 does not specify a deterministic iteration order, “the web will just go and specify it for us”.[https://mail.mozilla.org/pipermail/es-discuss/2012-February/020576.html]&lt;br /&gt;
* Hash table iteration order can expose some bits of object hash codes. This imposes some astonishing security concerns on the hashing function implementer. For example, an object&#039;s address must not be recoverable from the exposed bits of its hash code. (Revealing object addresses to untrusted ECMAScript code, while not exploitable by itself, would be a bad security bug on the Web.)&lt;br /&gt;
&lt;br /&gt;
Can a data structure retain the performance of traditional, arbitrary-order hash tables while also storing the order in which entries were added, so that iteration order is deterministic?&lt;br /&gt;
&lt;br /&gt;
Tyler Close has developed a deterministic hash table that is structured like this (pseudocode):&lt;br /&gt;
&lt;br /&gt;
 struct Entry {&lt;br /&gt;
     Key key;&lt;br /&gt;
     Value value;&lt;br /&gt;
     Entry *chain;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class CloseTable {&lt;br /&gt;
     Entry*[] hashTable;  // array of pointers into the data table&lt;br /&gt;
     Entry[] dataTable;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Lookups and inserts proceed much like a bucket-and-chain hash table, but instead of each entry being allocated separately from the heap, they are stored in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; in insertion order.&lt;br /&gt;
&lt;br /&gt;
Removing an entry simply replaces its &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; with some sentinel while leaving the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
== Theory ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; Every map data structure must store the keys and values. A map with &#039;&#039;N&#039;&#039; entries must use at least &#039;&#039;NE&#039;&#039; memory, where &#039;&#039;E&#039;&#039; is the size of a key-value pair (we assume the data can’t be compressed).&lt;br /&gt;
&lt;br /&gt;
In the following discussion we neglect the effect of deletions, which can cause both kinds of table to have extra memory that isn&#039;t in use at a given moment.&lt;br /&gt;
&lt;br /&gt;
An open addressing hash table has additional overhead depending on the fill factor. &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; in particular has a maximum fill factor &#039;&#039;F&#039;&#039;=3/4. When it becomes more than 3/4 full, it doubles in size, becoming just over 3/8 full. The amount of overhead in an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; is &#039;&#039;(1/f)NE&#039;&#039;, where &#039;&#039;f&#039;&#039; is the actual current fill ratio of the table and &#039;&#039;F/2 &amp;amp;lt; f &amp;amp;le; F&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A Close table has three sources of overhead: the entire &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointers in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;, and the unused portion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;. In &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointer causes each entry to require &#039;&#039;(3/2)E&#039;&#039; memory rather than &#039;&#039;E&#039;&#039;. The &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; doubles in size when it becomes completely full, so its size is &#039;&#039;(3/2)(1/u)NE&#039;&#039; where &#039;&#039;u&#039;&#039; is the proportion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; that is in use and &#039;&#039;1/2 &amp;amp;lt; u &amp;amp;le; 1&#039;&#039;. The &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt; is always 1/16 the size of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; (1/8 on 64-bit platforms), so the total size of both tables is &#039;&#039;(1+1/16)(3/2)(1/u)NE&#039;&#039; (substitute 1/8 on 64-bit platforms).&lt;br /&gt;
&lt;br /&gt;
For back-of-envelope purposes, then, &#039;&#039;f&#039;&#039; may be expected to be about &#039;&#039;3F/4&#039;&#039; (halfway between F/2 and F) and &#039;&#039;u&#039;&#039; about 3/4 on average; plugging these numbers in, we expect an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; to have about (1/(3F/4))&amp;amp;times;100% -&amp;amp;nbsp;100% = 78% memory overhead, and a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; about 113% (125% on 64-bit), on average. This would mean that the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; would be 20% larger on average (27% larger on 64-bit). However, see the Results section for a picture of how the two implementations compare in practice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; We consider the speed of lookups only. The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;has&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; operations all start with a lookup. We will quantify the speed of lookups in terms of how many memory locations must be accessed. To simulate locality effects, we treat multiple reads from a single entry, or from the table object, as a single read.&lt;br /&gt;
&lt;br /&gt;
In an open addressing hash table with fill factor &#039;&#039;f&#039;&#039;, an unsuccessful lookup performs about &#039;&#039;1/(1-f)&#039;&#039; probes.[https://en.wikipedia.org/wiki/Hash_table#Performance_analysis] In an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;, at worst &#039;&#039;f=F=3/4&#039;&#039; and so an unsuccessful lookup performs 4 probes on average. In the usual case, &#039;&#039;f=3F/4=9/16&#039;&#039;, so about 2.3 probes on average. A successful lookup performs half as many probes on average. Before probing the table, the lookup must access the &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; struct itself, so the final numbers are as shown in the table: 5 reads, 3.3 reads, etc.&lt;br /&gt;
&lt;br /&gt;
A Close table uses direct chaining. Each lookup must read first the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; object itself, and next the &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;. Then, for an unsuccessful lookup, the whole chain is walked; the expected length of the chain is simply the number of keys in the table divided by the number of hash buckets. For a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, this quotient is at most 8/3 and typically 2. ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of unsuccessful lookup (miss)&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of successful lookup (hit)&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Data structure&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;5&lt;br /&gt;
    &amp;lt;td&amp;gt;3.3&lt;br /&gt;
    &amp;lt;td&amp;gt;3&lt;br /&gt;
    &amp;lt;td&amp;gt;2.2&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;4.7&lt;br /&gt;
    &amp;lt;td&amp;gt;3&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Method =&lt;br /&gt;
&lt;br /&gt;
The code I used to make these pictures is available at: https://github.com/jorendorff/dht&lt;br /&gt;
&lt;br /&gt;
The graphs below show data collected on a MacBook Pro, using g++-apple-4.2 and a 64-bit build. The results from running the test on a 32-bit Windows build were basically qualitatively the same. CloseTable performance was even better on Windows, for most tests; however, on LookupHitTest, OpenTable achieved almost equal speed.&lt;br /&gt;
&lt;br /&gt;
The project contains two complete hash map implementations: OpenTable and CloseTable. A third implementation, DenseTable, is a thin wrapper around the &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; type from [https://code.google.com/p/sparsehash/ Sparsehash]. The three classes have the same API and were all benchmarked using the same templates (in hashbench.cpp).&lt;br /&gt;
&lt;br /&gt;
Hash table implementation design notes:&lt;br /&gt;
&lt;br /&gt;
* The API was designed to match the [http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets proposal for ECMAScript Map objects] as of February 2012.&lt;br /&gt;
&lt;br /&gt;
* The Key and Value types are &amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; because ECMAScript values are 64 bits in the implementation I&#039;m most familiar with.&lt;br /&gt;
&lt;br /&gt;
* OpenTable and CloseTable are meant to be as fast and as memory-efficient as possible. Pretty much everything that can be omitted was omitted. For example, the hashing function is trivial: &#039;&#039;hash(key) = key&#039;&#039;, and neither OpenTable nor CloseTable further munges the hashcode before using it as a table index. Rationale: Making each implementation as fast as possible should highlight any performance difference between OpenTable and CloseTable, which is the purpose of the exercise. Using a more sophisticated hashing function would slow down both implementations, reducing the observed difference between the two techniques.&lt;br /&gt;
&lt;br /&gt;
* DenseTable is provided as a baseline. (It&#039;s nice to have some realistic numbers in the graphs too.)&lt;br /&gt;
&lt;br /&gt;
* dense_hash_map and OpenTable both implement straightforward hash tables with open addressing. The main difference between the two is one of tuning. dense_hash_map has a maximum load factor of 0.5. OpenTable has a maximum load factor of 0.75, which causes it to use about half as much memory most of the time. &lt;br /&gt;
&lt;br /&gt;
* The purpose of the typedefs KeyArg and ValueArg is to make it possible to switch the API from pass-by-value to pass-by-reference by editing just a couple of lines of code. (I tried this. Pass-by-reference is no faster on 64-bit machines.)&lt;br /&gt;
&lt;br /&gt;
* CloseTable attempts to allocate chunks of memory with sizes that are near powers of 2. This is to avoid wasting space when used with size-class-based malloc implementations.&lt;br /&gt;
&lt;br /&gt;
* A Close table can trade some speed for compactness, but it seems to be a bad bargain:&lt;br /&gt;
** The load factor is adjustable. (The hash table size must remain at a power of two, but the data vector can have non-power-of-2 sizes.) However, increasing the load factor directly affects LookupMiss speed.&lt;br /&gt;
** An implementation could grow the data array by less than doubling it each time. I tried this. Insert speed suffered; lookup speed was unaffected; but the modified CloseTable still used more memory than OpenTable.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; never shrinks the table unless you explicitly ask it to. &amp;lt;code&amp;gt;DenseTable::remove()&amp;lt;/code&amp;gt; periodically shrinks, because otherwise, the performance on LookupAfterDeleteTest is pathologically bad.&lt;br /&gt;
&lt;br /&gt;
Benchmark design notes:&lt;br /&gt;
&lt;br /&gt;
* The benchmark is pure C++, rather than a Map/Set implementation embedded in an existing ES implementation, in order to make the results as stable as possible, to avoid biasing the results to a particular ES implementation, to encourage contributors, and to focus on the performance differences in the hash table implementations by eliminating all other performance effects as much as possible.&lt;br /&gt;
&lt;br /&gt;
* The program runs each benchmark many different times in order to produce enough numbers that noise is visually obvious in the resulting graph. (Most of the speed graphs are nice and smooth.)&lt;br /&gt;
&lt;br /&gt;
= Results =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Memory usage ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-1.png]]&lt;br /&gt;
&lt;br /&gt;
All three implementations double the size of the table whenever it gets too full. On a log-log plot, this shows as stair-steps of a constant height. The slope of each staircase is 1, indicating linear growth.&lt;br /&gt;
&lt;br /&gt;
Both OpenTable and CloseTable are much more memory-efficient than DenseTable, because &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; is tuned for fast lookups at all costs.&lt;br /&gt;
&lt;br /&gt;
For any &#039;&#039;N&#039;&#039; &amp;gt; 5, a CloseTable with &#039;&#039;N&#039;&#039; entries allocates &#039;&#039;&#039;either 1.0625x or 2.125x as much memory&#039;&#039;&#039; as an OpenTable with &#039;&#039;N&#039;&#039; entries (1.125x or 2.25x as much memory on 64-bit systems). Both tables double in size at certain thresholds, and the thresholds for CloseTable are lower than those for OpenTable. That is, as a CloseTable is populated, it doubles in size sooner than the corresponding OpenTable. The factors determining this behavior are (1) the fact that CloseTable entries are 50% larger, and it therefore takes fewer of them to fill up a power-of-two-sized allocation; and (2) the value of &amp;lt;code&amp;gt;OpenTable::max_fill_factor()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is tempting to reduce this complicated picture to a single number, and write that CloseTables are, for example, 20% larger. Or 30%. But such a number would not be easily justified mathematically: the ratio does not converge as the number of entries increases.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-2.png]]&lt;br /&gt;
&lt;br /&gt;
DenseTable and OpenTable must initialize the entire table each time they resize. CloseTable also allocates large chunks of memory, but like a &amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt;, it does not need to write to that memory until there is data that needs to be stored there.&lt;br /&gt;
&lt;br /&gt;
This means that for a huge Map with no delete operations, a Close table could use more virtual memory but less physical memory than its open addressing counterparts. This will not be the only use case that stresses memory usage, though. Applications may also create many small tables and may delete entries from large tables.&lt;br /&gt;
&lt;br /&gt;
== Insertion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertSmallTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This measures the time required to fill a table to about 100 entries, repeatedly. (The “1e7” on the axes indicates that the numbers are in tens of millions: the Close table is doing about 60 million inserts per second on this machine.)&lt;br /&gt;
&lt;br /&gt;
This graph and the following ones show speed, so &#039;&#039;&#039;higher is better&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ideally all these graphs would show three straight horizontal lines, indicating that all three implementations scale beautifully to large work loads. And indeed this seems to be the case, mostly.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertLargeTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the time required to fill a single gigantic table.&lt;br /&gt;
&lt;br /&gt;
The jagged shape of this graph is robust. It reflects the fact that the table doubles in size as it grows, and rehashing is a significant part of the expense of populating a huge table.&lt;br /&gt;
&lt;br /&gt;
== Lookup speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupHitTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where &#039;&#039;k&#039;&#039; is the key of an existing entry in the table.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupMissTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where the key &#039;&#039;k&#039;&#039; is not found in the table.&lt;br /&gt;
&lt;br /&gt;
In an OpenTable, lookups that miss are slower than lookups that hit &#039;&#039;when there is at least one collision&#039;&#039;. This is because we keep probing the hash table until we find an empty entry.&lt;br /&gt;
&lt;br /&gt;
DenseTable is only slightly slower for misses, perhaps because more lookups have zero collisions. (?)&lt;br /&gt;
&lt;br /&gt;
== Deletion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-WorklistTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test creates a table with 700 entries, then measures the speed of alternately adding an entry and deleting the oldest remaining entry from the table. Entries are therefore removed in FIFO order. Each “operation” here includes both an insert and a delete.&lt;br /&gt;
&lt;br /&gt;
The CloseTable stores the entries in insertion order, so this test gets extremely good memory locality. The effect is even more pronounced in a 32-bit build.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-DeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of deleting all entries from a very large table.&lt;br /&gt;
&lt;br /&gt;
The numbers for dense_hash_map are jagged because &amp;lt;code&amp;gt;DenseMap&amp;lt;/code&amp;gt; shrinks the table at certain threshold sizes as entries are deleted, and shrinking the table is expensive.&lt;br /&gt;
&lt;br /&gt;
The apparent randomness of the OpenTable and CloseTable numbers is reproducible and unexplained.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupAfterDeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the performance of lookups, mostly misses, in a table that was filled to size 50000, then reduced to size 195 by deleting most of the entries.&lt;br /&gt;
&lt;br /&gt;
The results here are sensitive to the two sizes, which are totally arbitrary choices. A less arbitrary replacement for this test would be welcome.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401409</id>
		<title>User:Jorend/Deterministic hash tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401409"/>
		<updated>2012-02-27T19:39:58Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
&lt;br /&gt;
A deterministic hash table proposed by Tyler Close was implemented in C++ and its performance was compared to two hash table implementations using open addressing. Speed and memory usage were measured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; The Close table implementation was very fast, faster than the open addressing implementations. (It is unclear why; theory suggests it &amp;quot;should&amp;quot; be slower, and measurement confirms that the Close table is doing more memory accesses and more branches. More investigation is needed!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; The Close table implementation always allocates more memory than the leanest open addressing implementation. See the Results section for details.&lt;br /&gt;
&lt;br /&gt;
= Background =&lt;br /&gt;
&lt;br /&gt;
Most hash table APIs (including C++&#039;s &amp;lt;code&amp;gt;unordered_map&amp;lt;/code&amp;gt;, Java&#039;s &amp;lt;code&amp;gt;java.util.HashMap&amp;lt;/code&amp;gt;, Python&#039;s &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt;, Ruby&#039;s &amp;lt;code&amp;gt;Hash&amp;lt;/code&amp;gt;, and many others) allow users to iterate over all the entries in the hash table in an arbitrary order. This exposes the user to an aspect of the library&#039;s behavior (the iteration order) that is unspecified and indeed intentionally arbitrary.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Map&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Set&amp;lt;/code&amp;gt; data structures are proposed for a future version of the ECMAScript programming language. The standard committee would like to specify deterministic behavior if possible. There are several reasons for this:&lt;br /&gt;
&lt;br /&gt;
* There is evidence that some programmers find arbitrary iteration order surprising or confusing at first. [http://stackoverflow.com/questions/2453624/unsort-hashtable][http://stackoverflow.com/questions/1872329/storing-python-dictionary-entries-in-the-order-they-are-pushed][https://groups.google.com/group/comp.lang.python/browse_thread/thread/15f3b4a5cd6221b1/1b6621daf5d78d73][http://bytes.com/topic/c-sharp/answers/439203-hashtable-items-order][http://stackoverflow.com/questions/1419708/how-to-keep-the-order-of-elements-in-hashtable][http://stackoverflow.com/questions/7105540/hashtable-values-reordered]&lt;br /&gt;
* Property enumeration order is unspecified in ECMAScript, yet all the major implementations have been forced to converge on insertion order, for compatibility with the Web as it is. There is, therefore, some concern that if TC39 does not specify a deterministic iteration order, “the web will just go and specify it for us”.[https://mail.mozilla.org/pipermail/es-discuss/2012-February/020576.html]&lt;br /&gt;
* Hash table iteration order can expose some bits of object hash codes. This imposes some astonishing security concerns on the hashing function implementer. For example, an object&#039;s address must not be recoverable from the exposed bits of its hash code. (Revealing object addresses to untrusted ECMAScript code, while not exploitable by itself, would be a bad security bug on the Web.)&lt;br /&gt;
&lt;br /&gt;
Can a data structure retain the performance of traditional, arbitrary-order hash tables while also storing the order in which entries were added, so that iteration order is deterministic?&lt;br /&gt;
&lt;br /&gt;
Tyler Close has developed a deterministic hash table that is structured like this (pseudocode):&lt;br /&gt;
&lt;br /&gt;
 struct Entry {&lt;br /&gt;
     Key key;&lt;br /&gt;
     Value value;&lt;br /&gt;
     Entry *chain;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class CloseTable {&lt;br /&gt;
     Entry*[] hashTable;  // array of pointers into the data table&lt;br /&gt;
     Entry[] dataTable;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Lookups and inserts proceed much like a bucket-and-chain hash table, but instead of each entry being allocated separately from the heap, they are stored in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; in insertion order.&lt;br /&gt;
&lt;br /&gt;
Removing an entry simply replaces its &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; with some sentinel while leaving the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
== Theory ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; Every map data structure must store the keys and values. A map with &#039;&#039;N&#039;&#039; entries must use at least &#039;&#039;NE&#039;&#039; memory, where &#039;&#039;E&#039;&#039; is the size of a key-value pair (we assume the data can’t be compressed).&lt;br /&gt;
&lt;br /&gt;
In the following discussion we neglect the effect of deletions, which can cause both kinds of table to have extra memory that isn&#039;t in use at a given moment.&lt;br /&gt;
&lt;br /&gt;
An open addressing hash table has additional overhead depending on the fill factor. &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; in particular has a maximum fill factor &#039;&#039;F&#039;&#039;=3/4. When it becomes more than 3/4 full, it doubles in size, becoming just over 3/8 full. The amount of overhead in an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; is &#039;&#039;(1/f)NE&#039;&#039;, where &#039;&#039;f&#039;&#039; is the actual current fill ratio of the table and &#039;&#039;F/2 &amp;amp;lt; f &amp;amp;le; F&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A Close table has three sources of overhead: the entire &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointers in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;, and the unused portion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;. In &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointer causes each entry to require &#039;&#039;(3/2)E&#039;&#039; memory rather than &#039;&#039;E&#039;&#039;. The &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; doubles in size when it becomes completely full, so its size is &#039;&#039;(3/2)(1/u)NE&#039;&#039; where &#039;&#039;u&#039;&#039; is the proportion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; that is in use and &#039;&#039;1/2 &amp;amp;lt; u &amp;amp;le; 1&#039;&#039;. The &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt; is always 1/16 the size of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; (1/8 on 64-bit platforms), so the total size of both tables is &#039;&#039;(1+1/16)(3/2)(1/u)NE&#039;&#039; (substitute 1/8 on 64-bit platforms).&lt;br /&gt;
&lt;br /&gt;
For back-of-envelope purposes, then, &#039;&#039;f&#039;&#039; may be expected to be about &#039;&#039;3F/4&#039;&#039; (halfway between F/2 and F) and &#039;&#039;u&#039;&#039; about 3/4 on average; plugging these numbers in, we expect an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; to have about (1/(3F/4))&amp;amp;times100%-100% = 78% memory overhead, and a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; about 113% (125% on 64-bit), on average. This would mean that the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; would be 20% larger on average (27% larger on 64-bit). However, see the Results section for a picture of how the two implementations compare in practice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; We consider the speed of lookups only. The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;has&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; operations all start with a lookup. We will quantify the speed of lookups in terms of how many memory locations must be accessed. To simulate locality effects, we treat multiple reads from a single entry, or from the table object, as a single read.&lt;br /&gt;
&lt;br /&gt;
In an open addressing hash table with fill factor &#039;&#039;f&#039;&#039;, an unsuccessful lookup performs about &#039;&#039;1/(1-f)&#039;&#039; probes.[https://en.wikipedia.org/wiki/Hash_table#Performance_analysis] In an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;, at worst &#039;&#039;f=F=3/4&#039;&#039; and so an unsuccessful lookup performs 4 probes on average. In the usual case, &#039;&#039;f=3F/4=9/16&#039;&#039;, so about 2.3 probes on average. A successful lookup performs half as many probes on average. Before probing the table, the lookup must access the &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; struct itself, so the final numbers are as shown in the table: 5 reads, 3.3 reads, etc.&lt;br /&gt;
&lt;br /&gt;
A Close table uses direct chaining. Each lookup must read first the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; object itself, and next the &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;. Then, for an unsuccessful lookup, the whole chain is walked; the expected length of the chain is simply the number of keys in the table divided by the number of hash buckets. For a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, this quotient is at most 8/3 and typically 2. ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th rowspan=2&amp;gt;Data structure&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of unsuccessful lookup (miss)&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of successful lookup (hit)&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;5&lt;br /&gt;
    &amp;lt;td&amp;gt;3.3&lt;br /&gt;
    &amp;lt;td&amp;gt;3&lt;br /&gt;
    &amp;lt;td&amp;gt;2.2&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;4.7&lt;br /&gt;
    &amp;lt;td&amp;gt;3&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Method =&lt;br /&gt;
&lt;br /&gt;
The code I used to make these pictures is available at: https://github.com/jorendorff/dht&lt;br /&gt;
&lt;br /&gt;
The graphs below show data collected on a MacBook Pro, using g++-apple-4.2 and a 64-bit build. The results from running the test on a 32-bit Windows build were basically qualitatively the same. CloseTable performance was even better on Windows, for most tests; however, on LookupHitTest, OpenTable achieved almost equal speed.&lt;br /&gt;
&lt;br /&gt;
The project contains two complete hash map implementations: OpenTable and CloseTable. A third implementation, DenseTable, is a thin wrapper around the &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; type from [https://code.google.com/p/sparsehash/ Sparsehash]. The three classes have the same API and were all benchmarked using the same templates (in hashbench.cpp).&lt;br /&gt;
&lt;br /&gt;
Hash table implementation design notes:&lt;br /&gt;
&lt;br /&gt;
* The API was designed to match the [http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets proposal for ECMAScript Map objects] as of February 2012.&lt;br /&gt;
&lt;br /&gt;
* The Key and Value types are &amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; because ECMAScript values are 64 bits in the implementation I&#039;m most familiar with.&lt;br /&gt;
&lt;br /&gt;
* OpenTable and CloseTable are meant to be as fast and as memory-efficient as possible. Pretty much everything that can be omitted was omitted. For example, the hashing function is trivial: &#039;&#039;hash(key) = key&#039;&#039;, and neither OpenTable nor CloseTable further munges the hashcode before using it as a table index. Rationale: Making each implementation as fast as possible should highlight any performance difference between OpenTable and CloseTable, which is the purpose of the exercise. Using a more sophisticated hashing function would slow down both implementations, reducing the observed difference between the two techniques.&lt;br /&gt;
&lt;br /&gt;
* DenseTable is provided as a baseline. (It&#039;s nice to have some realistic numbers in the graphs too.)&lt;br /&gt;
&lt;br /&gt;
* dense_hash_map and OpenTable both implement straightforward hash tables with open addressing. The main difference between the two is one of tuning. dense_hash_map has a maximum load factor of 0.5. OpenTable has a maximum load factor of 0.75, which causes it to use about half as much memory most of the time. &lt;br /&gt;
&lt;br /&gt;
* The purpose of the typedefs KeyArg and ValueArg is to make it possible to switch the API from pass-by-value to pass-by-reference by editing just a couple of lines of code. (I tried this. Pass-by-reference is no faster on 64-bit machines.)&lt;br /&gt;
&lt;br /&gt;
* CloseTable attempts to allocate chunks of memory with sizes that are near powers of 2. This is to avoid wasting space when used with size-class-based malloc implementations.&lt;br /&gt;
&lt;br /&gt;
* A Close table can trade some speed for compactness, but it seems to be a bad bargain:&lt;br /&gt;
** The load factor is adjustable. (The hash table size must remain at a power of two, but the data vector can have non-power-of-2 sizes.) However, increasing the load factor directly affects LookupMiss speed.&lt;br /&gt;
** An implementation could grow the data array by less than doubling it each time. I tried this. Insert speed suffered; lookup speed was unaffected; but the modified CloseTable still used more memory than OpenTable.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; never shrinks the table unless you explicitly ask it to. &amp;lt;code&amp;gt;DenseTable::remove()&amp;lt;/code&amp;gt; periodically shrinks, because otherwise, the performance on LookupAfterDeleteTest is pathologically bad.&lt;br /&gt;
&lt;br /&gt;
Benchmark design notes:&lt;br /&gt;
&lt;br /&gt;
* The benchmark is pure C++, rather than a Map/Set implementation embedded in an existing ES implementation, in order to make the results as stable as possible, to avoid biasing the results to a particular ES implementation, to encourage contributors, and to focus on the performance differences in the hash table implementations by eliminating all other performance effects as much as possible.&lt;br /&gt;
&lt;br /&gt;
* The program runs each benchmark many different times in order to produce enough numbers that noise is visually obvious in the resulting graph. (Most of the speed graphs are nice and smooth.)&lt;br /&gt;
&lt;br /&gt;
= Results =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Memory usage ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-1.png]]&lt;br /&gt;
&lt;br /&gt;
All three implementations double the size of the table whenever it gets too full. On a log-log plot, this shows as stair-steps of a constant height. The slope of each staircase is 1, indicating linear growth.&lt;br /&gt;
&lt;br /&gt;
Both OpenTable and CloseTable are much more memory-efficient than DenseTable, because &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; is tuned for fast lookups at all costs.&lt;br /&gt;
&lt;br /&gt;
For any &#039;&#039;N&#039;&#039; &amp;gt; 5, a CloseTable with &#039;&#039;N&#039;&#039; entries allocates &#039;&#039;&#039;either 1.0625x or 2.125x as much memory&#039;&#039;&#039; as an OpenTable with &#039;&#039;N&#039;&#039; entries (1.125x or 2.25x as much memory on 64-bit systems). Both tables double in size at certain thresholds, and the thresholds for CloseTable are lower than those for OpenTable. That is, as a CloseTable is populated, it doubles in size sooner than the corresponding OpenTable. The factors determining this behavior are (1) the fact that CloseTable entries are 50% larger, and it therefore takes fewer of them to fill up a power-of-two-sized allocation; and (2) the value of &amp;lt;code&amp;gt;OpenTable::max_fill_factor()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is tempting to reduce this complicated picture to a single number, and write that CloseTables are, for example, 20% larger. Or 30%. But such a number would not be easily justified mathematically: the ratio does not converge as the number of entries increases.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-2.png]]&lt;br /&gt;
&lt;br /&gt;
DenseTable and OpenTable must initialize the entire table each time they resize. CloseTable also allocates large chunks of memory, but like a &amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt;, it does not need to write to that memory until there is data that needs to be stored there.&lt;br /&gt;
&lt;br /&gt;
This means that for a huge Map with no delete operations, a Close table could use more virtual memory but less physical memory than its open addressing counterparts. This will not be the only use case that stresses memory usage, though. Applications may also create many small tables and may delete entries from large tables.&lt;br /&gt;
&lt;br /&gt;
== Insertion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertSmallTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This measures the time required to fill a table to about 100 entries, repeatedly. (The “1e7” on the axes indicates that the numbers are in tens of millions: the Close table is doing about 60 million inserts per second on this machine.)&lt;br /&gt;
&lt;br /&gt;
This graph and the following ones show speed, so &#039;&#039;&#039;higher is better&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ideally all these graphs would show three straight horizontal lines, indicating that all three implementations scale beautifully to large work loads. And indeed this seems to be the case, mostly.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertLargeTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the time required to fill a single gigantic table.&lt;br /&gt;
&lt;br /&gt;
The jagged shape of this graph is robust. It reflects the fact that the table doubles in size as it grows, and rehashing is a significant part of the expense of populating a huge table.&lt;br /&gt;
&lt;br /&gt;
== Lookup speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupHitTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where &#039;&#039;k&#039;&#039; is the key of an existing entry in the table.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupMissTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where the key &#039;&#039;k&#039;&#039; is not found in the table.&lt;br /&gt;
&lt;br /&gt;
In an OpenTable, lookups that miss are slower than lookups that hit &#039;&#039;when there is at least one collision&#039;&#039;. This is because we keep probing the hash table until we find an empty entry.&lt;br /&gt;
&lt;br /&gt;
DenseTable is only slightly slower for misses, perhaps because more lookups have zero collisions. (?)&lt;br /&gt;
&lt;br /&gt;
== Deletion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-WorklistTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test creates a table with 700 entries, then measures the speed of alternately adding an entry and deleting the oldest remaining entry from the table. Entries are therefore removed in FIFO order. Each “operation” here includes both an insert and a delete.&lt;br /&gt;
&lt;br /&gt;
The CloseTable stores the entries in insertion order, so this test gets extremely good memory locality. The effect is even more pronounced in a 32-bit build.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-DeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of deleting all entries from a very large table.&lt;br /&gt;
&lt;br /&gt;
The numbers for dense_hash_map are jagged because &amp;lt;code&amp;gt;DenseMap&amp;lt;/code&amp;gt; shrinks the table at certain threshold sizes as entries are deleted, and shrinking the table is expensive.&lt;br /&gt;
&lt;br /&gt;
The apparent randomness of the OpenTable and CloseTable numbers is reproducible and unexplained.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupAfterDeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the performance of lookups, mostly misses, in a table that was filled to size 50000, then reduced to size 195 by deleting most of the entries.&lt;br /&gt;
&lt;br /&gt;
The results here are sensitive to the two sizes, which are totally arbitrary choices. A less arbitrary replacement for this test would be welcome.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401394</id>
		<title>User:Jorend/Deterministic hash tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=User:Jorend/Deterministic_hash_tables&amp;diff=401394"/>
		<updated>2012-02-27T19:13:34Z</updated>

		<summary type="html">&lt;p&gt;Jorend: /* Theory */ fmt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
&lt;br /&gt;
A deterministic hash table proposed by Tyler Close was implemented in C++ and its performance was compared to two hash table implementations using open addressing. Speed and memory usage were measured.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; The Close table implementation was very fast, faster than the open addressing implementations. (It is unclear why; theory suggests it &amp;quot;should&amp;quot; be slower, and measurement confirms that the Close table is doing more memory accesses and more branches. More investigation is needed!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; The Close table implementation always allocates more memory than the leanest open addressing implementation. See the Results section for details.&lt;br /&gt;
&lt;br /&gt;
= Background =&lt;br /&gt;
&lt;br /&gt;
Most hash table APIs (including C++&#039;s &amp;lt;code&amp;gt;unordered_map&amp;lt;/code&amp;gt;, Java&#039;s &amp;lt;code&amp;gt;java.util.HashMap&amp;lt;/code&amp;gt;, Python&#039;s &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt;, Ruby&#039;s &amp;lt;code&amp;gt;Hash&amp;lt;/code&amp;gt;, and many others) allow users to iterate over all the entries in the hash table in an arbitrary order. This exposes the user to an aspect of the library&#039;s behavior (the iteration order) that is unspecified and indeed intentionally arbitrary.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Map&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Set&amp;lt;/code&amp;gt; data structures are proposed for a future version of the ECMAScript programming language. The standard committee would like to specify deterministic behavior if possible. There are several reasons for this:&lt;br /&gt;
&lt;br /&gt;
* There is evidence that some programmers find arbitrary iteration order surprising or confusing at first. [http://stackoverflow.com/questions/2453624/unsort-hashtable][http://stackoverflow.com/questions/1872329/storing-python-dictionary-entries-in-the-order-they-are-pushed][https://groups.google.com/group/comp.lang.python/browse_thread/thread/15f3b4a5cd6221b1/1b6621daf5d78d73][http://bytes.com/topic/c-sharp/answers/439203-hashtable-items-order][http://stackoverflow.com/questions/1419708/how-to-keep-the-order-of-elements-in-hashtable][http://stackoverflow.com/questions/7105540/hashtable-values-reordered]&lt;br /&gt;
* Property enumeration order is unspecified in ECMAScript, yet all the major implementations have been forced to converge on insertion order, for compatibility with the Web as it is. There is, therefore, some concern that if TC39 does not specify a deterministic iteration order, “the web will just go and specify it for us”.[https://mail.mozilla.org/pipermail/es-discuss/2012-February/020576.html]&lt;br /&gt;
* Hash table iteration order can expose some bits of object hash codes. This imposes some astonishing security concerns on the hashing function implementer. For example, an object&#039;s address must not be recoverable from the exposed bits of its hash code. (Revealing object addresses to untrusted ECMAScript code, while not exploitable by itself, would be a bad security bug on the Web.)&lt;br /&gt;
&lt;br /&gt;
Can a data structure retain the performance of traditional, arbitrary-order hash tables while also storing the order in which entries were added, so that iteration order is deterministic?&lt;br /&gt;
&lt;br /&gt;
Tyler Close has developed a deterministic hash table that is structured like this (pseudocode):&lt;br /&gt;
&lt;br /&gt;
 struct Entry {&lt;br /&gt;
     Key key;&lt;br /&gt;
     Value value;&lt;br /&gt;
     Entry *chain;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class CloseTable {&lt;br /&gt;
     Entry*[] hashTable;  // array of pointers into the data table&lt;br /&gt;
     Entry[] dataTable;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Lookups and inserts proceed much like a bucket-and-chain hash table, but instead of each entry being allocated separately from the heap, they are stored in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; in insertion order.&lt;br /&gt;
&lt;br /&gt;
Removing an entry simply replaces its &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; with some sentinel while leaving the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; intact.&lt;br /&gt;
&lt;br /&gt;
== Theory ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory.&#039;&#039;&#039; Every map data structure must store the keys and values. A map with &#039;&#039;N&#039;&#039; entries must use at least &#039;&#039;NE&#039;&#039; memory, where &#039;&#039;E&#039;&#039; is the size of a key-value pair (we assume the data can’t be compressed).&lt;br /&gt;
&lt;br /&gt;
In the following discussion we neglect the effect of deletions, which can cause both kinds of table to have extra memory that isn&#039;t in use at a given moment.&lt;br /&gt;
&lt;br /&gt;
An open addressing hash table has additional overhead depending on the fill factor. &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; in particular has a maximum fill factor &#039;&#039;F&#039;&#039;=3/4. When it becomes more than 3/4 full, it doubles in size, becoming just over 3/8 full. The amount of overhead in an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; is &#039;&#039;(1/f)NE&#039;&#039;, where &#039;&#039;f&#039;&#039; is the actual current fill ratio of the table and &#039;&#039;F/2 &amp;amp;lt; f &amp;amp;le; F&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A Close table has three sources of overhead: the entire &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointers in the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;, and the unused portion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt;. In &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; pointer causes each entry to require &#039;&#039;(3/2)E&#039;&#039; memory rather than &#039;&#039;E&#039;&#039;. The &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; doubles in size when it becomes completely full, so its size is &#039;&#039;(3/2)(1/u)NE&#039;&#039; where &#039;&#039;u&#039;&#039; is the proportion of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; that is in use and &#039;&#039;1/2 &amp;amp;lt; u &amp;amp;le; 1&#039;&#039;. The &amp;lt;code&amp;gt;hashTable&amp;lt;/code&amp;gt; is always 1/16 the size of the &amp;lt;code&amp;gt;dataTable&amp;lt;/code&amp;gt; (1/8 on 64-bit platforms), so the total size of both tables is &#039;&#039;(1+1/16)(3/2)(1/u)NE&#039;&#039; (substitute 1/8 on 64-bit platforms).&lt;br /&gt;
&lt;br /&gt;
For back-of-envelope purposes, then, &#039;&#039;f&#039;&#039; may be expected to be about &#039;&#039;3F/4&#039;&#039; (halfway between F/2 and F) and &#039;&#039;u&#039;&#039; about 3/4 on average; plugging these numbers in, we expect an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt; to have about (1/(3F/4))&amp;amp;times100%-100% = 78% memory overhead, and a &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; about 113% (125% on 64-bit), on average. This would mean that the &amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt; would be 20% larger on average (27% larger on 64-bit). However, see the Results section for a picture of how the two implementations compare in practice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed.&#039;&#039;&#039; We consider the speed of lookups only. The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;has&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; operations all start with a lookup. We will quantify the speed of lookups in terms of how many memory locations must be accessed. To simulate locality effects, we treat multiple reads from a single entry, or from the table object, as a single read.&lt;br /&gt;
&lt;br /&gt;
In an open addressing hash table with fill factor &#039;&#039;f&#039;&#039;, an unsuccessful lookup performs about &#039;&#039;1/(1-f)&#039;&#039; probes.[https://en.wikipedia.org/wiki/Hash_table#Performance_analysis] In an &amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;, at worst &#039;&#039;f=F=3/4&#039;&#039; and so an unsuccessful lookup performs 4 probes on average. In the usual case, &#039;&#039;f=3F/4=9/16&#039;&#039;, so about 2.3 probes on average.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th rowspan=2&amp;gt;Data structure&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of unsuccessful lookup (miss)&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th colspan=2&amp;gt;Expected cost of successful lookup (hit)&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Maximum load&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Typical load&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;OpenTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;5&lt;br /&gt;
    &amp;lt;td&amp;gt;3.3&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CloseTable&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
    &amp;lt;td&amp;gt;-&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Method =&lt;br /&gt;
&lt;br /&gt;
The code I used to make these pictures is available at: https://github.com/jorendorff/dht&lt;br /&gt;
&lt;br /&gt;
The graphs below show data collected on a MacBook Pro, using g++-apple-4.2 and a 64-bit build. The results from running the test on a 32-bit Windows build were basically qualitatively the same. CloseTable performance was even better on Windows, for most tests; however, on LookupHitTest, OpenTable achieved almost equal speed.&lt;br /&gt;
&lt;br /&gt;
The project contains two complete hash map implementations: OpenTable and CloseTable. A third implementation, DenseTable, is a thin wrapper around the &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; type from [https://code.google.com/p/sparsehash/ Sparsehash]. The three classes have the same API and were all benchmarked using the same templates (in hashbench.cpp).&lt;br /&gt;
&lt;br /&gt;
Hash table implementation design notes:&lt;br /&gt;
&lt;br /&gt;
* The API was designed to match the [http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets proposal for ECMAScript Map objects] as of February 2012.&lt;br /&gt;
&lt;br /&gt;
* The Key and Value types are &amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; because ECMAScript values are 64 bits in the implementation I&#039;m most familiar with.&lt;br /&gt;
&lt;br /&gt;
* OpenTable and CloseTable are meant to be as fast and as memory-efficient as possible. Pretty much everything that can be omitted was omitted. For example, the hashing function is trivial: &#039;&#039;hash(key) = key&#039;&#039;, and neither OpenTable nor CloseTable further munges the hashcode before using it as a table index. Rationale: Making each implementation as fast as possible should highlight any performance difference between OpenTable and CloseTable, which is the purpose of the exercise. Using a more sophisticated hashing function would slow down both implementations, reducing the observed difference between the two techniques.&lt;br /&gt;
&lt;br /&gt;
* DenseTable is provided as a baseline. (It&#039;s nice to have some realistic numbers in the graphs too.)&lt;br /&gt;
&lt;br /&gt;
* dense_hash_map and OpenTable both implement straightforward hash tables with open addressing. The main difference between the two is one of tuning. dense_hash_map has a maximum load factor of 0.5. OpenTable has a maximum load factor of 0.75, which causes it to use about half as much memory most of the time. &lt;br /&gt;
&lt;br /&gt;
* The purpose of the typedefs KeyArg and ValueArg is to make it possible to switch the API from pass-by-value to pass-by-reference by editing just a couple of lines of code. (I tried this. Pass-by-reference is no faster on 64-bit machines.)&lt;br /&gt;
&lt;br /&gt;
* CloseTable attempts to allocate chunks of memory with sizes that are near powers of 2. This is to avoid wasting space when used with size-class-based malloc implementations.&lt;br /&gt;
&lt;br /&gt;
* A Close table can trade some speed for compactness, but it seems to be a bad bargain:&lt;br /&gt;
** The load factor is adjustable. (The hash table size must remain at a power of two, but the data vector can have non-power-of-2 sizes.) However, increasing the load factor directly affects LookupMiss speed.&lt;br /&gt;
** An implementation could grow the data array by less than doubling it each time. I tried this. Insert speed suffered; lookup speed was unaffected; but the modified CloseTable still used more memory than OpenTable.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; never shrinks the table unless you explicitly ask it to. &amp;lt;code&amp;gt;DenseTable::remove()&amp;lt;/code&amp;gt; periodically shrinks, because otherwise, the performance on LookupAfterDeleteTest is pathologically bad.&lt;br /&gt;
&lt;br /&gt;
Benchmark design notes:&lt;br /&gt;
&lt;br /&gt;
* The benchmark is pure C++, rather than a Map/Set implementation embedded in an existing ES implementation, in order to make the results as stable as possible, to avoid biasing the results to a particular ES implementation, to encourage contributors, and to focus on the performance differences in the hash table implementations by eliminating all other performance effects as much as possible.&lt;br /&gt;
&lt;br /&gt;
* The program runs each benchmark many different times in order to produce enough numbers that noise is visually obvious in the resulting graph. (Most of the speed graphs are nice and smooth.)&lt;br /&gt;
&lt;br /&gt;
= Results =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Memory usage ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-1.png]]&lt;br /&gt;
&lt;br /&gt;
All three implementations double the size of the table whenever it gets too full. On a log-log plot, this shows as stair-steps of a constant height. The slope of each staircase is 1, indicating linear growth.&lt;br /&gt;
&lt;br /&gt;
Both OpenTable and CloseTable are much more memory-efficient than DenseTable, because &amp;lt;code&amp;gt;dense_hash_map&amp;lt;/code&amp;gt; is tuned for fast lookups at all costs.&lt;br /&gt;
&lt;br /&gt;
For any &#039;&#039;N&#039;&#039; &amp;gt; 5, a CloseTable with &#039;&#039;N&#039;&#039; entries allocates &#039;&#039;&#039;either 1.0625x or 2.125x as much memory&#039;&#039;&#039; as an OpenTable with &#039;&#039;N&#039;&#039; entries (1.125x or 2.25x as much memory on 64-bit systems). Both tables double in size at certain thresholds, and the thresholds for CloseTable are lower than those for OpenTable. That is, as a CloseTable is populated, it doubles in size sooner than the corresponding OpenTable. The factors determining this behavior are (1) the fact that CloseTable entries are 50% larger, and it therefore takes fewer of them to fill up a power-of-two-sized allocation; and (2) the value of &amp;lt;code&amp;gt;OpenTable::max_fill_factor()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is tempting to reduce this complicated picture to a single number, and write that CloseTables are, for example, 20% larger. Or 30%. But such a number would not be easily justified mathematically: the ratio does not converge as the number of entries increases.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-figure-2.png]]&lt;br /&gt;
&lt;br /&gt;
DenseTable and OpenTable must initialize the entire table each time they resize. CloseTable also allocates large chunks of memory, but like a &amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt;, it does not need to write to that memory until there is data that needs to be stored there.&lt;br /&gt;
&lt;br /&gt;
This means that for a huge Map with no delete operations, a Close table could use more virtual memory but less physical memory than its open addressing counterparts. This will not be the only use case that stresses memory usage, though. Applications may also create many small tables and may delete entries from large tables.&lt;br /&gt;
&lt;br /&gt;
== Insertion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertSmallTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This measures the time required to fill a table to about 100 entries, repeatedly. (The “1e7” on the axes indicates that the numbers are in tens of millions: the Close table is doing about 60 million inserts per second on this machine.)&lt;br /&gt;
&lt;br /&gt;
This graph and the following ones show speed, so &#039;&#039;&#039;higher is better&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ideally all these graphs would show three straight horizontal lines, indicating that all three implementations scale beautifully to large work loads. And indeed this seems to be the case, mostly.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-InsertLargeTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the time required to fill a single gigantic table.&lt;br /&gt;
&lt;br /&gt;
The jagged shape of this graph is robust. It reflects the fact that the table doubles in size as it grows, and rehashing is a significant part of the expense of populating a huge table.&lt;br /&gt;
&lt;br /&gt;
== Lookup speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupHitTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where &#039;&#039;k&#039;&#039; is the key of an existing entry in the table.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupMissTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of &amp;lt;code&amp;gt;table.get(k)&amp;lt;/code&amp;gt; operations, where the key &#039;&#039;k&#039;&#039; is not found in the table.&lt;br /&gt;
&lt;br /&gt;
In an OpenTable, lookups that miss are slower than lookups that hit &#039;&#039;when there is at least one collision&#039;&#039;. This is because we keep probing the hash table until we find an empty entry.&lt;br /&gt;
&lt;br /&gt;
DenseTable is only slightly slower for misses, perhaps because more lookups have zero collisions. (?)&lt;br /&gt;
&lt;br /&gt;
== Deletion speed ==&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-WorklistTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test creates a table with 700 entries, then measures the speed of alternately adding an entry and deleting the oldest remaining entry from the table. Entries are therefore removed in FIFO order. Each “operation” here includes both an insert and a delete.&lt;br /&gt;
&lt;br /&gt;
The CloseTable stores the entries in insertion order, so this test gets extremely good memory locality. The effect is even more pronounced in a 32-bit build.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-DeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the speed of deleting all entries from a very large table.&lt;br /&gt;
&lt;br /&gt;
The numbers for dense_hash_map are jagged because &amp;lt;code&amp;gt;DenseMap&amp;lt;/code&amp;gt; shrinks the table at certain threshold sizes as entries are deleted, and shrinking the table is expensive.&lt;br /&gt;
&lt;br /&gt;
The apparent randomness of the OpenTable and CloseTable numbers is reproducible and unexplained.&lt;br /&gt;
&lt;br /&gt;
[[Image:jorendorff-dht-LookupAfterDeleteTest-speed.png]]&lt;br /&gt;
&lt;br /&gt;
This test measures the performance of lookups, mostly misses, in a table that was filled to size 50000, then reduced to size 195 by deleting most of the entries.&lt;br /&gt;
&lt;br /&gt;
The results here are sensitive to the two sizes, which are totally arbitrary choices. A less arbitrary replacement for this test would be welcome.&lt;/div&gt;</summary>
		<author><name>Jorend</name></author>
	</entry>
</feed>