https://wiki.mozilla.org/api.php?action=feedcontributions&user=Masayuki&feedformat=atomMozillaWiki - User contributions [en]2024-03-29T13:50:45ZUser contributionsMediaWiki 1.27.4https://wiki.mozilla.org/index.php?title=Modules/Core&diff=1220142Modules/Core2019-11-12T03:21:44Z<p>Masayuki: Update Masayuki Nakano's email from mozilla.com's to personal one which is used in bugzilla for over a decade</p>
<hr />
<div><noinclude><br />
'''Only module owners may edit this page.''' <br />
<br />
They may:<br />
<br />
* update any information about their module except the name of the owner<br />
* add or remove sub-modules<br />
* change the owner of a sub-module <br />
* add emeritus owners or peers<br />
<br />
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].<br />
</noinclude><br />
{{Module<br />
|name=Accessibility<br />
|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.<br />
|owner=[mailto:jteh@mozilla.com Jamie Teh]<br />
|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]<br />
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal], [mailto:surkov.alexander@gmail.com Alexander Surkov]<br />
|peersemeritus=[mailto:dbolter@mozilla.com David Bolter], [mailto:tbsaunde+mozbugs@tbsaunde.org Trevor Saunders], [mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan<br />
|group=dev-accessibility<br />
|source_dirs=accessible/<br />
|url=http://www.mozilla.org/access/<br />
|components=Core::Disability Access APIs<br />
}}<br />
<br />
{{Module<br />
|name=Animation<br />
|description=Declarative animations: CSS animations, CSS transitions, Web Animations API, and off-main thread animations.<br />
|owner=[mailto:bbirtles@mozilla.com Brian Birtles] (:birtles)<br />
|peers=[mailto:hiro@mozilla.com Hiroyuki Ikezoe] (:hiro), [mailto:mwoodrow@mozilla.com Matt Woodrow] (:mattwoodrow)<br />
|group=dev-tech-layout<br />
|source_dirs=dom/animation; and animation-related and interpolation-related code in layout/style, gfx/layers, servo/components/style and servo/ports/gecko<br />
|components=Core::DOM::Animation, Core::CSS Transitions and Animations<br />
}}<br />
<br />
{{Module<br />
|name=Anti-Tracking<br />
|description=Tracking detection and content-blocking.<br />
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]<br />
|peers=[mailto:dlee@mozilla.com Dimi Lee], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:ewright@mozilla.com Erica Wright], [mailto:jhofmann@mozilla.com Johann Hofmann]<br />
|group=dev-platform<br />
|source_dirs=toolkit/components/antitracking/, several files under browser/ and netwerk/url-classifier/<br />
|components=Core::Privacy: Anti-Tracking<br />
}}<br />
<br />
{{Module<br />
|name=Browser WebAPI<br />
|description=Web API for rendering apps, browser windows and widgets.<br />
|owner=[mailto:Olli.Pettay@helsinki.fi Olli Pettay]<br />
|peers=[mailto:fabrice@mozilla.com Fabrice Desré]<br />
|ownersemeritus=[mailto:kchen@mozilla.com Kan-Ru Chen]<br />
|group=dev-webapi<br />
|source_dirs=dom/browser-element/<br />
|url=<br />
|components=Core::DOM<br />
}}<br />
<br />
{{Module<br />
|name=Build and Release Tools<br />
|description=Tools related to build and release automation and configuration of release builds.<br />
|owner=[mailto:nthomas@mozilla.com Nick Thomas]<br />
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]<br />
|group=release-engineering<br />
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/<br />
|url=https://wiki.mozilla.org/ReleaseEngineering<br />
|components=Release Engineering::*<br />
}}<br />
<br />
{{Module<br />
|name=Build Config<br />
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.<br />
|owner=[mailto:cmanchester@mozilla.com Chris Manchester](:chmanchester)<br />
|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), [mailto:gps@mozilla.com Gregory Szorc] (:gps)<br />
|ownersemeritus=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]), <br />
|group=dev-builds<br />
|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/<br />
|url=http://www.mozilla.org/build/<br />
|components=Core::Build Config<br />
}}<br />
<br />
{{Module<br />
|name=Code Analysis and Debugging Tools<br />
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=<br />
|group=dev-performance<br />
|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/, <br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Content Security<br />
|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.<br />
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]<br />
|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]<br />
|peersemeritus=[mailto:mozilla@sidstamm.com Sid Stamm], [mailto:jonas@sicking.cc Jonas Sicking], François Marier<br />
|group=dev-security<br />
|source_dirs=dom/security<br />
|components=Core::DOM: Security<br />
}}<br />
<br />
{{Module<br />
|name=Cookies<br />
|description=<br />
|owner=[mailto:amarchesini@mozilla.com Andrea Marchesini]<br />
|peers=[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:honzab.moz@firemni.cz Honza Bambas] <br />
|ownersemeritus=Monica Chew<br />
|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)]<br />
|group=dev-platform<br />
|source_dirs=netwerk/cookie/<br />
|url=<br />
|components=Core::Networking: Cookies<br />
}}<br />
<br />
{{Module<br />
|name=Permissions<br />
|description=<br />
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:honzab.moz@firemni.cz Honza Bambas]<br />
|ownersemeritus=Monica Chew<br />
|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)]<br />
|group=dev-platform<br />
|source_dirs=extensions/permissions/<br />
|url=<br />
|components=Core :: Permission Manager<br />
}}<br />
<br />
{{Module<br />
|name=Cycle Collector<br />
|description=Code to break and collect objects within reference cycles<br />
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]<br />
|peers=Peter Van der Beken, Olli Pettay, David Baron<br />
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers<br />
|components=Core::XPCOM<br />
|group=dev-platform<br />
}}<br />
{{Module<br />
|name=C++/Rust usage, tools, and style<br />
|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<br />
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]<br />
|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:ehsan@mozilla.com Ehsan Akhgari]<br />
|source_dirs=non-third-party C++ and Rust code in the tree<br />
|components=Various components<br />
|group=dev-platform<br />
}}<br />
{{Module<br />
|name=docshell<br />
|description=<br />
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:nika@thelayzells.com Nika Layzell]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=docshell/, uriloader/<br />
|url=<br />
|components=Core::Document Navigation<br />
}}<br />
<br />
{{Module<br />
|name=Document Object Model<br />
|description=<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [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],<br />
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:nika@thelayzells.com Nika Layzell], [mailto:afarre@mozilla.com Andreas Farre]<br />
|ownersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]<br />
|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]<br />
|group=dev-tech-dom<br />
|source_dirs=dom/*, except directories covered by other modules<br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core & HTML<br />
}}<br />
<br />
{{Module<br />
|name=DOM File<br />
|description=DOM Blob, File and FileSystem APIs <br />
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]<br />
|peers=[mailto:olli@pettay.fi Olli Pettay]<br />
|group=dev-platform<br />
|source_dirs=dom/file, dom/filesystem<br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM: File<br />
}}<br />
<br />
{{Module<br />
|name=Event Handling<br />
|description=DOM Events and Event Handling <br />
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]<br />
|peersemeritus=[mailto:sshih@mozilla.com Stone Shih]<br />
|group=dev-platform<br />
|source_dirs=dom/events and event handling related code elsewhere <br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM: Events, Core::Event Handling<br />
}}<br />
<br />
{{Module<br />
|name=Web Workers<br />
|description=<br />
|owner=[mailto:baku@mozilla.com Andrea Marchesini]<br />
|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]<br />
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]<br />
|group=dev-platform<br />
|source_dirs=dom/workers/<br />
|url=https://developer.mozilla.org/En/Using_web_workers<br />
|components=Core::DOM: Workers<br />
}}<br />
<br />
{{Module<br />
|name=IndexedDB<br />
|description=<br />
|owner=[mailto:jvarga@mozilla.com Jan Varga]<br />
|peers=[mailto:btseng@mozilla.com Bevis Tseng], [mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:baku@mozilla.com Andrea Marchesini]<br />
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]<br />
|group=dev-platform<br />
|source_dirs=dom/indexedDB/<br />
|url=https://developer.mozilla.org/en/IndexedDB<br />
|components=Core::DOM: IndexedDB<br />
}}<br />
<br />
{{Module<br />
|name=Editor<br />
|description=<br />
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]<br />
|peers=[mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]<br />
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|group=dev-platform<br />
|source_dirs=editor/<br />
|url=http://www.mozilla.org/editor/<br />
|components=Core::Editor<br />
}}<br />
<br />
{{Module<br />
|name=Gecko Profiler<br />
|description=Gecko's built-in profiler<br />
|owner=[mailto:mstange@themasta.com Markus Stange]<br />
|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).<br />
|ownersemeritus=[mailto:b56girard@gmail.com Benoit Girard]<br />
|peersemeritus=[mailto:shu@mozilla.com Shu-yu Guo] (JS integration), [mailto:tlee@mozilla.com Thinker Lee] (TaskTracer), [mailto:cyu@mozilla.com Cervantes Yu] (TaskTracer)<br />
|group=dev-platform<br />
|source_dirs=tools/profiler/<br />
|url=https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler<br />
|components=Core::Gecko Profiler<br />
}}<br />
<br />
{{Module<br />
|name=Global Key Bindings<br />
|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.<br />
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]<br />
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]<br />
|group=dev-accessibility<br />
|source_dirs=dom/events (and platform specific directories under it)<br />
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html<br />
|components=Core::Keyboard: Navigation<br />
}}<br />
<br />
{{Module<br />
|name=Graphics<br />
|description=Mozilla graphics API<br />
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|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)<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=gfx/, dom/canvas/<br />
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch<br />
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::Graphics: WebRender, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL<br />
}}<br />
<br />
{{Module<br />
|name=WebGPU (Graphics submodule)<br />
|description=WebGPU implementation<br />
|owner=[mailto:dmalyshau@mozilla.com Dzmitry Malyshau]<br />
|peers=[mailto:josh@joshgroves.com Joshua Groves], [mailto:jgilbert@mozilla.com Jeff Gilbert],<br />
|group=dev-platform<br />
|source_dirs=dom/webgpu<br />
|url=https://github.com/gfx-rs/wgpu<br />
|components=Core::Graphics::WebGPU<br />
}}<br />
<br />
{{Module<br />
|name=APZ (Graphics submodule)<br />
|description=Asynchronous panning and zooming<br />
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=gfx/layers/apz<br />
|url=https://wiki.mozilla.org/Platform/GFX/APZ<br />
|components=Core::Panning and Zooming<br />
}}<br />
<br />
{{Module<br />
|name=Moz2D (Graphics submodule)<br />
|description=Platform independent 2D graphics API<br />
|owner=[mailto:bschouten@mozilla.com Bas Schouten]<br />
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@jwatt.org Jonathan Watt]<br />
|group=dev-platform<br />
|source=gfx/2d<br />
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D<br />
|components=Core::Graphics<br />
}}<br />
<br />
{{Module<br />
|name=Legacy HTML Parser<br />
|description=<br />
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]<br />
|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]<br />
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]<br />
|source_dirs=parser/htmlparser<br />
|url=http://www.mozilla.org/newlayout/doc/parser.html<br />
|components=Core::HTML: Parser<br />
}}<br />
<br />
{{Module<br />
|name=HAL<br />
|description=Hardware Abstraction Layer<br />
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto]<br />
|peers=<br />
|group=dev-platform<br />
|source_dirs=hal/<br />
|components=Core::Hardware Abstraction Layer (HAL)<br />
}}<br />
<br />
{{Module<br />
|name=HTML Parser<br />
|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++.<br />
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]<br />
|peers=[mailto:wchen@mozilla.com William Chen]<br />
|group=dev-platform<br />
|source_dirs=parser/html<br />
|url=http://about.validator.nu/<br />
|components=Core::HTML: Parser<br />
}}<br />
<br />
{{Module<br />
|name=I18N Library<br />
|description=<br />
|owner=[mailto:hsivonen@hsivonen.fi Henri Sivonen (encoding)], [mailto:jfkthame@gmail.com Jonathan Kew (except to encoding)]<br />
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura], [mailto:gandalf@aviary.pl Zibi Braniecki], [mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]<br />
|ownersemeritus=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]<br />
|group=dev-i18n<br />
|source_dirs=intl/<br />
|url=http://mozilla.org/projects/intl/index.html<br />
|components=Core::Internationalization<br />
}}<br />
<br />
{{Module<br />
|name=ImageLib<br />
|description=<br />
|owner=[mailto:tnikkel@gmail.com Timothy Nikkel]<br />
|peers=[mailto:aosmond@mozilla.com Andrew Osmond], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar]<br />
|peersemeritus=[mailto:seth.bugzilla@blackhail.net Seth Fowler], [mailto:netzen@gmail.com Brian Bondy], [mailto:justin.lebar@gmail.com Justin Lebar]<br />
|group=dev-platform<br />
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/<br />
|url=<br />
|components=Core::ImageLib<br />
}}<br />
<br />
{{Module<br />
|name=IPC<br />
|description=Native message-passing between threads and processes<br />
|owner=[mailto:jld@mozilla.com Jed Davis]<br />
|ownersemeritus=Chris Jones, Bill McCloskey<br />
|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]<br />
|peersemeritus=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bent.mozilla@gmail.com Ben Turner], David Anderson, Kan-Ru Chen, Bevis Tseng, Ben Kelly<br />
|group=dev-platform<br />
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/<br />
|url=<br />
|components=Core::IPC}}<br />
<br />
{{Module<br />
|name=JavaScript<br />
|description=JavaScript engine (SpiderMonkey)<br />
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]<br />
|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]<br />
|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<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/src<br />
|url=http://www.mozilla.org/js/spidermonkey,<br />
http://developer.mozilla.org/en/docs/About_JavaScript<br />
|components=Core::JavaScript Engine<br />
}}<br />
<br />
{{Module<br />
|name=JavaScript JIT<br />
|description=JavaScript engine's JIT compilers (IonMonkey, Baseline)<br />
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]<br />
|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]<br />
|peersemeritus=[mailto:danderson@mozilla.com David Anderson], [mailto:hv1989@gmail.com Hannes Verschore]<br />
|group=dev-tech-js-engine-internals<br />
|source_dirs=js/src/jit<br />
|url=http://www.mozilla.org/js/spidermonkey<br />
|components=Core::JavaScript Engine: JIT<br />
}}<br />
<br />
{{Module<br />
|name=jsat<br />
|description=Javascript screen reader that is used in Android and B2G<br />
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]<br />
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]<br />
|group=dev-accessibility<br />
|source_dirs=accessible/jsat/<br />
|url=http://www.mozilla.org/access/<br />
|components=Core::Disability Access APIs<br />
}}<br />
<br />
{{Module<br />
|name=js-ctypes<br />
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.<br />
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]<br />
|peers=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/src/ctypes/<br />
|url=https://wiki.mozilla.org/JSctypes<br />
|components=Core::js-ctypes<br />
}}<br />
<br />
{{Module<br />
|name=js-tests<br />
|description=JavaScript test suite<br />
|owner=[mailto:bclary@bclary.com Bob Clary]<br />
|peers=<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/tests/<br />
|url=http://www.mozilla.org/js/tests/library.html<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Layout Engine<br />
|description=rendering tree construction, layout (reflow), etc.<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=[mailto:robert@ocallahan.org Robert O'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]<br />
|group=dev-tech-layout<br />
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/printing/, layout/tables/, layout/tools/<br />
|url=https://wiki.mozilla.org/Gecko:Overview#Layout<br />
|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<br />
}}<br />
<br />
{{Module<br />
|name=libjar<br />
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).<br />
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]<br />
|ownersemeritus=Taras Glek, Michael Wu<br />
|peers=[mailto:mnovotny@mozilla.com Michal Novotny], [mailto:vgosu@mozilla.com Valentin Gosu]<br />
|group=dev-platform<br />
|source_dirs=modules/libjar<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=MathML<br />
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.<br />
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]<br />
|peers=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|group=dev-tech-mathml<br />
|source_dirs=layout/mathml/<br />
|url=http://www.mozilla.org/projects/mathml/<br />
|components=Core::MathML<br />
}}<br />
<br />
{{Module<br />
|name=Media Playback<br />
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).<br />
|owner=[mailto:jyavenard@mozilla.com Jean-Yves Avenard]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan], [mailto:cpearce@mozilla.com Chris Pearce]<br />
|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]<br />
|group=dev-media<br />
|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/<br />
|url=<br />
|components=Core::Audio/Video<br />
}}<br />
<br />
{{Module<br />
|name=Media Transport<br />
|description=Pluggable transport for real-time media<br />
|owner=[mailto:ekr@rtfm.com Eric Rescorla]<br />
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]<br />
|group=dev-media<br />
|source_dirs=media/mtransport<br />
|url=<br />
|components=Core::WebRTC::Networking<br />
}}<br />
<br />
{{Module<br />
|name=Memory Allocator<br />
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.<br />
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote], [mailto:erahm@mozilla.com Eric Rahm]<br />
|group=dev-platform<br />
|source_dirs=memory/<br />
|components=Core::DMD, Core::jemalloc<br />
}}<br />
<br />
{{Module<br />
|name=mfbt<br />
|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).<br />
|owner=[mailto:jwalden@mit.edu Jeff Walden]<br />
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|group=dev-platform<br />
|source_dirs=mfbt/<br />
|url=<br />
|components=Core::MFBT<br />
}}<br />
<br />
{{Module<br />
|name=Mozglue<br />
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.<br />
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|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)<br />
|group=dev-platform<br />
|source_dirs=mozglue/<br />
|components=Core::mozglue<br />
}}<br />
<br />
{{Module<br />
|name=mozilla-toplevel<br />
|description=The top level directory for the mozilla tree.<br />
|owner=[[Modules/Firefox_Technical_Leadership|Firefox Technical Leadership module]]<br />
|ownersemeritus=[mailto:brendan@mozilla.org Brendan Eich]<br />
|peers=<br />
|group=<br />
|source_dirs=tools/README<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=MSCOM<br />
|description=Integration with Microsoft Distributed COM<br />
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]<br />
|peers=[mailto:jteh@mozilla.com James Teh], [mailto:jmathies@mozilla.com Jim Mathies]<br />
|group=dev-platform<br />
|source_dirs=ipc/mscom/%<br />
|url=<br />
|components=Core::IPC: MSCOM}}<br />
<br />
{{Module<br />
|name=Necko<br />
|description=The Mozilla Networking Library<br />
|owner=[mailto:dd.mozilla@gmail.com Dragana Damjanovic]<br />
|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]<br />
|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]<br />
|group=dev-tech-network<br />
|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/<br />
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko<br />
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets<br />
}}<br />
<br />
{{Module<br />
|name=NSPR<br />
|description=Netscape Portable Runtime<br />
|owner=[mailto:kaie@kuix.de Kai Engert]<br />
|peers=[mailto:mh@glandium.org Mike Hommey]<br />
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang]<br />
|group=dev-tech-nspr<br />
|source_dirs=nsprpub/<br />
|url=http://www.mozilla.org/projects/nspr/<br />
http://www.mozilla.org/projects/nspr/reference/html/<br />
http://www.mozilla.org/projects/nspr/release-notes/<br />
|components=NSPR<br />
}}<br />
<br />
{{Module<br />
|name=PDF<br />
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF' format.<br />
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]<br />
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:vnicolas@mozilla.com Vivien Nicolas]<br />
|group=dev-platform<br />
|source_dirs=media/pdf/<br />
|url=https://github.com/mozilla/pdf.js<br />
|components=Core::PDF<br />
}}<br />
<br />
{{Module<br />
|name=Plugins<br />
|description= NPAPI Plugin support.<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|peers=[mailto:davidp99@gmail.com David Parks]<br />
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O'Callahan], [mailto:jstenback@gmail.com Johnny Stenback], Benjamin Smedberg<br />
|group=<br />
|source_dirs=dom/plugins/, modules/plugin/<br />
|url=https://wiki.mozilla.org/Plugins<br />
|components=Core::Plug-ins<br />
}}<br />
<br />
{{Module<br />
|name=Preferences<br />
|description=Preference library<br />
|owner=[mailto:nnethercote@mozilla.com Nicholas Nethercote]<br />
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:glandium@mozilla.com Mike Hommey], [mailto:erahm@mozilla.com Eric Rahm]<br />
|peersemeritus=Felipe Gomes<br />
|group=dev-platform<br />
|source_dirs=modules/libpref/<br />
|url=<br />
|components=Core::Preferences: Backend<br />
}}<br />
<br />
{{Module<br />
|name=Private Browsing<br />
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.<br />
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:josh@joshmatthews.net Josh Matthews]<br />
|group=dev-platform<br />
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. <br />
|url=https://wiki.mozilla.org/Private_Browsing<br />
|components=Firefox::Private Browsing<br />
}}<br />
<br />
{{Module<br />
|name=Privilege Manager<br />
|description="caps"<br />
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:dveditz@mozilla.com Dan Veditz]<br />
|group=dev-tech-dom<br />
|source_dirs=caps/<br />
|url=http://www.mozilla.org/projects/security/components/index.html<br />
|components=Core::Security: CAPS<br />
}}<br />
<br />
{{Module<br />
|name=Push Notifications<br />
|description=Push is a way for application developers to send messages to their web applications.<br />
|owners=[mailto:lina@mozilla.com Lina Cambridge]<br />
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner]<br />
|peers=[mailto:mt@lowentropy.net Martin Thomson], [mailto:ddamjanovic@mozilla.com Dragana Damjanovic]<br />
|peersemeritus=[mailto:nsm.nikhil@gmail.com Nikhil Marathe]<br />
|group=<br />
|source_dirs=dom/push<br />
|url=<br />
|components=Core::DOM: Push Notifications<br />
}}<br />
<br />
{{Module<br />
|name=security<br />
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)<br />
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:mt@lowentropy.net Martin Thomson]<br />
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang], [mailto:ttaubert@mozilla.com Tim Taubert]<br />
|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]<br />
|peersemeritus=[mailto:emaldona@redhat.com Elio Maldonado]<br />
|group=dev-tech-crypto<br />
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/<br />
|url=http://mozilla.org/projects/security/pki/<br />
|components=NSS, JSS, Core::Security, Core::Security: S/MIME<br />
}}<br />
<br />
{{Module<br />
|name=Security - Mozilla PSM Glue<br />
|description=Personal Security Manager<br />
|owner=[mailto:dkeeler@mozilla.com Dana Keeler]<br />
|ownersemeritus=[mailto:kaie@kuix.de Kai Engert (2001-2012)]<br />
|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]<br />
|group=dev-tech-crypto<br />
|source_dirs=security/manager/<br />
|url=<br />
|components=Core::Security: PSM<br />
}}<br />
<br />
{{Module<br />
|name=Static analysis & rewriting for C++<br />
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.<br />
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:sfink@mozilla.com Steve Fink], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:birunthan@mohanathas.com Birunthan Mohanathas], [mailto:andi@mozilla.com Andi-Bogdan Postelnicu]<br />
|group=dev-platform<br />
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools<br />
|url=<br />
|components=Core::Rewriting & Analysis<br />
}}<br />
{{Module<br />
|name=storage<br />
|description=Storage APIs with a SQLite backend<br />
|owner=[mailto:mak77@bonardo.net Marco Bonardo]<br />
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:jvarga@mozilla.com Jan Varga]<br />
|group=dev-platform<br />
|source_dirs=db/sqlite3/, storage/<br />
|url=http://developer.mozilla.org/en/docs/Storage<br />
|components=Toolkit::Storage, Core::SQL<br />
}}<br />
<br />
{{Module<br />
|name=String<br />
|description=<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd], [mailto:erahm@mozilla.com Eric Rahm]<br />
|group=dev-tech-xpcom<br />
|source_dirs=string/, xpcom/string/<br />
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide<br />
|components=Core::String<br />
}}<br />
<br />
{{Module<br />
|name=Style System<br />
|description=CSS style sheet handling; style data computation<br />
|owner=[mailto:cam@mcc.id.au Cameron McCormack]<br />
|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]<br />
|group=dev-tech-layout<br />
|source_dirs=layout/style/, servo/<br />
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System<br />
|components=Core::CSS Parsing and Computation<br />
}}<br />
<br />
{{Module<br />
|name=SVG<br />
|description=Scalable Vector Graphics<br />
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]<br />
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O'Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]<br />
|group=dev-tech-svg<br />
|source_dirs=dom/svg/, layout/svg/, dom/smil/<br />
|url=https://developer.mozilla.org/en-US/docs/Web/SVG<br />
|components=Core::SVG<br />
}}<br />
<br />
{{Module<br />
|name=View System<br />
|description=The View Manager is responsible for handling "heavyweight" rendering (some clipping, compositing) and event handling tasks.<br />
|owner=[mailto:mstange@themasta.com Markus Stange]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]<br />
|group=dev-tech-layout<br />
|source_dirs=view/<br />
|url=<br />
|components=Core::Layout: View Rendering<br />
}}<br />
<br />
{{Module<br />
|name=Web Audio<br />
|description=Support for the W3C Web Audio API specification.<br />
|owner=[mailto:padenot@mozilla.com Paul Adenot]<br />
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:robert@ocallahan.org Robert O'Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]<br />
|group=dev-platform<br />
|source_dirs=dom/media/webaudio<br />
|url=https://wiki.mozilla.org/Web_Audio_API<br />
|components=Core::Web Audio<br />
}}<br />
<br />
{{Module<br />
|name=Web Painting<br />
|description=painting, display lists, and layer construction<br />
|owner=[mailto:matt.woodrow@gmail.com Matt Woodrow]<br />
|peers=[mailto:robert@ocallahan.org Robert O'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]<br />
|group=dev-tech-layout<br />
|source_dirs= layout/painting, the display list and layer related methods on nsIFrame and its subclasses<br />
|url=http://mozilla.org/newlayout/doc/ ,<br />
http://lxr.mozilla.org/mozilla/source/layout/doc/<br />
|components=Core::Layout: Web Painting<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC<br />
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access<br />
|owner=[mailto:rjesup@mozilla.com Randell Jesup]<br />
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]<br />
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=netwerk/sctp (also see submodules "WebRTC Media" and "WebRTC Signaling")<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC, Core::WebRTC Networking<br />
}}<br />
<br />
{{Module<br />
|name=WebVR<br />
|description=Gecko's implementation of WebVR (Virtual Reality) functionality, including API, devices, graphics and integration<br />
|owner=[mailto:kgilbert@mozilla.com Kip Gilbert]<br />
|peers=[mailto:dmu@mozilla.com Daosheng Mu]<br />
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic]<br />
|group=dev-platform<br />
|source_dirs=dom/vr, gfx/vr<br />
|url=https://mozvr.com/<br />
|components=Core::WebVR<br />
}}<br />
<br />
{{Module<br />
|name=Widget<br />
|description=Top level Widget<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|ownersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:robert@ocallahan.org Robert O'Callahan]<br />
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], <br />
|group=dev-platform<br />
|source_dirs=widget/, widget/xpwidgets/<br />
|url=<br />
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup<br />
}}<br />
<br />
{{Module<br />
|name=Widget - Android<br />
|description=Android widget support<br />
|owner=[mailto:jwillcox@mozilla.com James Willcox]<br />
|peers=<br />
|ownersemeritus=[mailto:blassey.bugs@lassey.us Brad Lassey]<br />
|group=dev-platforms-mobile<br />
|source_dirs=widget/android/, embedding/android<br />
|url=<br />
|components=Core::Widget: Android<br />
}}<br />
<br />
{{Module<br />
|name=Widget - GTK<br />
|description=GTK widget support<br />
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]<br />
|peers=[mailto:stransky@redhat.com Martin Stránský]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|group=dev-platform<br />
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/<br />
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/<br />
|components=Core::Widget: Gtk<br />
}}<br />
<br />
{{Module<br />
|name=Widget - Headless<br />
|description=Headless widget support<br />
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]<br />
|peers=<br />
|ownersemeritus=<br />
|group=dev-platform<br />
|source_dirs=widget/headless/<br />
|url=<br />
|components=Firefox::Headless<br />
}}<br />
<br />
{{Module<br />
|name=Widget - OS X<br />
|description= OSX widget support<br />
|owner=[mailto:spohl@mozilla.com Stephen Pohl]<br />
|peers=[mailto:mstange@themasta.com Markus Stange]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan], [mailto:mstange@themasta.com Markus Stange]<br />
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:b56girard@gmail.com Benoit Girard], [mailto:smichaud@pobox.com Steven Michaud]<br />
|group=dev-platform<br />
|source_dirs=widget/cocoa/<br />
|url=<br />
|components=Core::Widget: Cocoa<br />
}}<br />
<br />
{{Module<br />
|name=Widget - Windows<br />
|description=Windows widget support<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:robert.strong.bugs@gmail.com Rob Strong], [mailto:aklotz@mozilla.com Aaron Klotz]<br />
|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 'timeless' Soref], [mailto:robarnold@cmu.edu Rob Arnold]<br />
|group=dev-platform<br />
|source_dirs=widget/windows/<br />
|url=<br />
|components=Core::Widget: Win32<br />
}}<br />
<br />
{{Module<br />
|name=XBL<br />
|description=eXtensible Binding Language<br />
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|peers=[mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:jonas@sicking.cc Jonas Sicking]<br />
|ownersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]<br />
|group=dev-tech-xbl<br />
|source_dirs=dom/xbl/<br />
|url=http://www.mozilla.org/projects/xbl/<br />
|components=Core::XBL<br />
}}<br />
<br />
{{Module<br />
|name=XML<br />
|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.<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:erahm@mozilla.com Eric Rahm]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback]<br />
|group=dev-tech-xml<br />
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/<br />
|url=http://www.mozilla.org/newlayout/xml/<br />
|components=Core::XML<br />
}}<br />
<br />
{{Module<br />
|name=XPApps<br />
|description=Cross-Platform Applications, mostly Navigator front end and application shell.<br />
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]<br />
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|group=dev-apps-seamonkey<br />
|source_dirs=xpfe/<br />
|url=http://www.mozilla.org/xpapps/<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=XPCOM<br />
|description=The cross-platform object model and core data structures.<br />
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]<br />
|peers=[mailto:erahm@mozilla.com Eric Rahm], [mailto:nika@thelayzells.com Nika Layzell], [mailto:kmaglione@mozilla.com Kris Maglione]<br />
|ownersemeritus=Benjamin Smedberg<br />
|peersemeritus=[https://mozillians.org/en-US/u/dougt/ Doug Turner]<br />
|group=dev-platform<br />
|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/<br />
|url=http://developer.mozilla.org/en/XPCOM<br />
|components=Core::XPCOM<br />
}}<br />
<br />
{{Module<br />
|name=XPConnect<br />
|description=Deep Magic<br />
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|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]<br />
|peersemeritus=[mailto:gal@uci.edu Andreas Gal], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]<br />
|group=<br />
|source_dirs=js/xpconnect/<br />
|url=<br />
|components=Core::XPConnect<br />
}}<br />
<br />
{{Module<br />
|name=XPIDL<br />
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.<br />
|owner=[mailto:nika@thelayzells.com Nika Layzell]<br />
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:amccreight@mozilla.com Andrew McCreight]<br />
|ownersemeritus=[mailto:me@kylehuey.com Kyle Huey]<br />
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|group=dev-tech-xpcom<br />
|source_dirs=xpcom/typelib/<br />
|url=http://www.mozilla.org/scriptable/xpidl<br />
http://www.mozilla.org/scriptable<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=XSLT Processor<br />
|description=XSLT transformations processor<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:erahm@mozilla.com Eric Rahm]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]<br />
|group=dev-tech-xslt<br />
|source_dirs=dom/xslt/<br />
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html<br />
|components=Core::XSLT<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - Windows <br />
|description=Sandboxing for the Windows platform <br />
|owner=[mailto:bobowencode@gmail.com Bob Owen] (:bobowen)<br />
|peers=[mailto:aklotz@mozilla.com Aaron Klotz] (:aklotz), [mailto:jimm@mozilla.com Jim Mathies] (:jimm), [mailto:davidp99@gmail.com David Parks] (:handyman)<br />
|ownersemeritus=[https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes]<br />
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy]<br />
|group=dev-platform<br />
|source_dirs=security/sandbox/win <br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - OSX <br />
|description=Sandboxing for the OSX platform <br />
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]<br />
|peers=<br />
|group=dev-platform <br />
|source_dirs=security/sandbox/mac <br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - Linux<br />
|description=Sandboxing for the Linux platform<br />
|owner=[mailto:jld@mozilla.com Jed Davis]<br />
|peers=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]<br />
|group=dev-platform<br />
|source_dirs=security/sandbox/linux<br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Crash reporting<br />
|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.<br />
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto] (:gsvelto)<br />
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj)<br />
|group=dev-platform<br />
|source_dirs=toolkit/crashreporter, toolkit/components/crashes, tools/crashreporter, ipc/glue/CrashReporter*, mobile/android/geckoview/src/main/java/org/mozilla/geckoview/CrashReporter.java<br />
|url=https://firefox-source-docs.mozilla.org/toolkit/crashreporter/crashreporter/index.html<br />
|components=Toolkit::Crash Reporting<br />
}}<br />
<br />
===Submodules===<br />
{{Module<br />
|name=Build Config - Fennec<br />
|description=Submodule of the build config covering Fennec's build system in mobile/android.<br />
|owner=[mailto:nalexander@mozilla.com Nicholas Alexander]<br />
|peers=Same as Build Config<br />
|group=dev-builds<br />
|components=Core::Build Config<br />
}}<br />
<br />
{{Module<br />
|name=Build Config - Taskgraph<br />
|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.<br />
|owner=[mailto:mozilla@hocat.ca Tom Prince]<br />
|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]<br />
|components=Firefox Build System::Task Configuration<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC Media<br />
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.<br />
|owner=[mailto:rjesup@mozilla.com Randell Jesup]<br />
|peers=[mailto:jib@mozilla.com Jan-Ivar Bruaroey], [mailto:dminor@mozilla.com Dan Minor], [mailto:apehrson@mozilla.com Andreas Pehrson], <br />
|peersemeritus=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=/media/webrtc, /dom/media/webrtc, /dom/media/systemservices<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC (Audio/Video)<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC Signaling<br />
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling<br />
|owner=[mailto:bcampen@mozilla.com Byron Campen]<br />
|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]<br />
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=/media/webrtc/signaling/<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC (Signaling)<br />
}}<br />
<br />
<noinclude><br />
<br />
===Unassigned Bugzilla Components===<br />
<br />
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):<br />
<br />
<pre><br />
Core::Find Backend<br />
Core::General<br />
Core::History: Global<br />
Core::Image Blocking<br />
Core::Localization<br />
Core::Networking: Domain Lists<br />
Core::Selection<br />
Core::Serializers<br />
Core::Spelling checker<br />
Core::X-remote<br />
Core::XUL<br />
</pre><br />
</noinclude></div>Masayukihttps://wiki.mozilla.org/index.php?title=Modules/Core&diff=1220141Modules/Core2019-11-12T03:18:06Z<p>Masayuki: Update source_dirs of Global Key Bindings</p>
<hr />
<div><noinclude><br />
'''Only module owners may edit this page.''' <br />
<br />
They may:<br />
<br />
* update any information about their module except the name of the owner<br />
* add or remove sub-modules<br />
* change the owner of a sub-module <br />
* add emeritus owners or peers<br />
<br />
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].<br />
</noinclude><br />
{{Module<br />
|name=Accessibility<br />
|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.<br />
|owner=[mailto:jteh@mozilla.com Jamie Teh]<br />
|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]<br />
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal], [mailto:surkov.alexander@gmail.com Alexander Surkov]<br />
|peersemeritus=[mailto:dbolter@mozilla.com David Bolter], [mailto:tbsaunde+mozbugs@tbsaunde.org Trevor Saunders], [mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan<br />
|group=dev-accessibility<br />
|source_dirs=accessible/<br />
|url=http://www.mozilla.org/access/<br />
|components=Core::Disability Access APIs<br />
}}<br />
<br />
{{Module<br />
|name=Animation<br />
|description=Declarative animations: CSS animations, CSS transitions, Web Animations API, and off-main thread animations.<br />
|owner=[mailto:bbirtles@mozilla.com Brian Birtles] (:birtles)<br />
|peers=[mailto:hiro@mozilla.com Hiroyuki Ikezoe] (:hiro), [mailto:mwoodrow@mozilla.com Matt Woodrow] (:mattwoodrow)<br />
|group=dev-tech-layout<br />
|source_dirs=dom/animation; and animation-related and interpolation-related code in layout/style, gfx/layers, servo/components/style and servo/ports/gecko<br />
|components=Core::DOM::Animation, Core::CSS Transitions and Animations<br />
}}<br />
<br />
{{Module<br />
|name=Anti-Tracking<br />
|description=Tracking detection and content-blocking.<br />
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]<br />
|peers=[mailto:dlee@mozilla.com Dimi Lee], [mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:ewright@mozilla.com Erica Wright], [mailto:jhofmann@mozilla.com Johann Hofmann]<br />
|group=dev-platform<br />
|source_dirs=toolkit/components/antitracking/, several files under browser/ and netwerk/url-classifier/<br />
|components=Core::Privacy: Anti-Tracking<br />
}}<br />
<br />
{{Module<br />
|name=Browser WebAPI<br />
|description=Web API for rendering apps, browser windows and widgets.<br />
|owner=[mailto:Olli.Pettay@helsinki.fi Olli Pettay]<br />
|peers=[mailto:fabrice@mozilla.com Fabrice Desré]<br />
|ownersemeritus=[mailto:kchen@mozilla.com Kan-Ru Chen]<br />
|group=dev-webapi<br />
|source_dirs=dom/browser-element/<br />
|url=<br />
|components=Core::DOM<br />
}}<br />
<br />
{{Module<br />
|name=Build and Release Tools<br />
|description=Tools related to build and release automation and configuration of release builds.<br />
|owner=[mailto:nthomas@mozilla.com Nick Thomas]<br />
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]<br />
|group=release-engineering<br />
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/<br />
|url=https://wiki.mozilla.org/ReleaseEngineering<br />
|components=Release Engineering::*<br />
}}<br />
<br />
{{Module<br />
|name=Build Config<br />
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.<br />
|owner=[mailto:cmanchester@mozilla.com Chris Manchester](:chmanchester)<br />
|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), [mailto:gps@mozilla.com Gregory Szorc] (:gps)<br />
|ownersemeritus=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]), <br />
|group=dev-builds<br />
|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/<br />
|url=http://www.mozilla.org/build/<br />
|components=Core::Build Config<br />
}}<br />
<br />
{{Module<br />
|name=Code Analysis and Debugging Tools<br />
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=<br />
|group=dev-performance<br />
|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/, <br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Content Security<br />
|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.<br />
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]<br />
|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]<br />
|peersemeritus=[mailto:mozilla@sidstamm.com Sid Stamm], [mailto:jonas@sicking.cc Jonas Sicking], François Marier<br />
|group=dev-security<br />
|source_dirs=dom/security<br />
|components=Core::DOM: Security<br />
}}<br />
<br />
{{Module<br />
|name=Cookies<br />
|description=<br />
|owner=[mailto:amarchesini@mozilla.com Andrea Marchesini]<br />
|peers=[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:honzab.moz@firemni.cz Honza Bambas] <br />
|ownersemeritus=Monica Chew<br />
|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)]<br />
|group=dev-platform<br />
|source_dirs=netwerk/cookie/<br />
|url=<br />
|components=Core::Networking: Cookies<br />
}}<br />
<br />
{{Module<br />
|name=Permissions<br />
|description=<br />
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:amarchesini@mozilla.com Andrea Marchesini], [mailto:honzab.moz@firemni.cz Honza Bambas]<br />
|ownersemeritus=Monica Chew<br />
|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)]<br />
|group=dev-platform<br />
|source_dirs=extensions/permissions/<br />
|url=<br />
|components=Core :: Permission Manager<br />
}}<br />
<br />
{{Module<br />
|name=Cycle Collector<br />
|description=Code to break and collect objects within reference cycles<br />
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]<br />
|peers=Peter Van der Beken, Olli Pettay, David Baron<br />
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers<br />
|components=Core::XPCOM<br />
|group=dev-platform<br />
}}<br />
{{Module<br />
|name=C++/Rust usage, tools, and style<br />
|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<br />
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]<br />
|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:ehsan@mozilla.com Ehsan Akhgari]<br />
|source_dirs=non-third-party C++ and Rust code in the tree<br />
|components=Various components<br />
|group=dev-platform<br />
}}<br />
{{Module<br />
|name=docshell<br />
|description=<br />
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:nika@thelayzells.com Nika Layzell]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=docshell/, uriloader/<br />
|url=<br />
|components=Core::Document Navigation<br />
}}<br />
<br />
{{Module<br />
|name=Document Object Model<br />
|description=<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [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],<br />
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:nika@thelayzells.com Nika Layzell], [mailto:afarre@mozilla.com Andreas Farre]<br />
|ownersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]<br />
|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]<br />
|group=dev-tech-dom<br />
|source_dirs=dom/*, except directories covered by other modules<br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core & HTML<br />
}}<br />
<br />
{{Module<br />
|name=DOM File<br />
|description=DOM Blob, File and FileSystem APIs <br />
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]<br />
|peers=[mailto:olli@pettay.fi Olli Pettay]<br />
|group=dev-platform<br />
|source_dirs=dom/file, dom/filesystem<br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM: File<br />
}}<br />
<br />
{{Module<br />
|name=Event Handling<br />
|description=DOM Events and Event Handling <br />
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]<br />
|peersemeritus=[mailto:sshih@mozilla.com Stone Shih]<br />
|group=dev-platform<br />
|source_dirs=dom/events and event handling related code elsewhere <br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM: Events, Core::Event Handling<br />
}}<br />
<br />
{{Module<br />
|name=Web Workers<br />
|description=<br />
|owner=[mailto:baku@mozilla.com Andrea Marchesini]<br />
|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]<br />
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]<br />
|group=dev-platform<br />
|source_dirs=dom/workers/<br />
|url=https://developer.mozilla.org/En/Using_web_workers<br />
|components=Core::DOM: Workers<br />
}}<br />
<br />
{{Module<br />
|name=IndexedDB<br />
|description=<br />
|owner=[mailto:jvarga@mozilla.com Jan Varga]<br />
|peers=[mailto:btseng@mozilla.com Bevis Tseng], [mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:baku@mozilla.com Andrea Marchesini]<br />
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]<br />
|group=dev-platform<br />
|source_dirs=dom/indexedDB/<br />
|url=https://developer.mozilla.org/en/IndexedDB<br />
|components=Core::DOM: IndexedDB<br />
}}<br />
<br />
{{Module<br />
|name=Editor<br />
|description=<br />
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]<br />
|peers=[mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]<br />
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|group=dev-platform<br />
|source_dirs=editor/<br />
|url=http://www.mozilla.org/editor/<br />
|components=Core::Editor<br />
}}<br />
<br />
{{Module<br />
|name=Gecko Profiler<br />
|description=Gecko's built-in profiler<br />
|owner=[mailto:mstange@themasta.com Markus Stange]<br />
|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).<br />
|ownersemeritus=[mailto:b56girard@gmail.com Benoit Girard]<br />
|peersemeritus=[mailto:shu@mozilla.com Shu-yu Guo] (JS integration), [mailto:tlee@mozilla.com Thinker Lee] (TaskTracer), [mailto:cyu@mozilla.com Cervantes Yu] (TaskTracer)<br />
|group=dev-platform<br />
|source_dirs=tools/profiler/<br />
|url=https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler<br />
|components=Core::Gecko Profiler<br />
}}<br />
<br />
{{Module<br />
|name=Global Key Bindings<br />
|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.<br />
|owner=[mailto:mnakano@mozilla.com Masayuki Nakano]<br />
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]<br />
|group=dev-accessibility<br />
|source_dirs=dom/events (and platform specific directories under it)<br />
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html<br />
|components=Core::Keyboard: Navigation<br />
}}<br />
<br />
{{Module<br />
|name=Graphics<br />
|description=Mozilla graphics API<br />
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|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)<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=gfx/, dom/canvas/<br />
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch<br />
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::Graphics: WebRender, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL<br />
}}<br />
<br />
{{Module<br />
|name=WebGPU (Graphics submodule)<br />
|description=WebGPU implementation<br />
|owner=[mailto:dmalyshau@mozilla.com Dzmitry Malyshau]<br />
|peers=[mailto:josh@joshgroves.com Joshua Groves], [mailto:jgilbert@mozilla.com Jeff Gilbert],<br />
|group=dev-platform<br />
|source_dirs=dom/webgpu<br />
|url=https://github.com/gfx-rs/wgpu<br />
|components=Core::Graphics::WebGPU<br />
}}<br />
<br />
{{Module<br />
|name=APZ (Graphics submodule)<br />
|description=Asynchronous panning and zooming<br />
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=gfx/layers/apz<br />
|url=https://wiki.mozilla.org/Platform/GFX/APZ<br />
|components=Core::Panning and Zooming<br />
}}<br />
<br />
{{Module<br />
|name=Moz2D (Graphics submodule)<br />
|description=Platform independent 2D graphics API<br />
|owner=[mailto:bschouten@mozilla.com Bas Schouten]<br />
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@jwatt.org Jonathan Watt]<br />
|group=dev-platform<br />
|source=gfx/2d<br />
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D<br />
|components=Core::Graphics<br />
}}<br />
<br />
{{Module<br />
|name=Legacy HTML Parser<br />
|description=<br />
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]<br />
|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]<br />
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]<br />
|source_dirs=parser/htmlparser<br />
|url=http://www.mozilla.org/newlayout/doc/parser.html<br />
|components=Core::HTML: Parser<br />
}}<br />
<br />
{{Module<br />
|name=HAL<br />
|description=Hardware Abstraction Layer<br />
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto]<br />
|peers=<br />
|group=dev-platform<br />
|source_dirs=hal/<br />
|components=Core::Hardware Abstraction Layer (HAL)<br />
}}<br />
<br />
{{Module<br />
|name=HTML Parser<br />
|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++.<br />
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]<br />
|peers=[mailto:wchen@mozilla.com William Chen]<br />
|group=dev-platform<br />
|source_dirs=parser/html<br />
|url=http://about.validator.nu/<br />
|components=Core::HTML: Parser<br />
}}<br />
<br />
{{Module<br />
|name=I18N Library<br />
|description=<br />
|owner=[mailto:hsivonen@hsivonen.fi Henri Sivonen (encoding)], [mailto:jfkthame@gmail.com Jonathan Kew (except to encoding)]<br />
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura], [mailto:gandalf@aviary.pl Zibi Braniecki], [mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]<br />
|ownersemeritus=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]<br />
|group=dev-i18n<br />
|source_dirs=intl/<br />
|url=http://mozilla.org/projects/intl/index.html<br />
|components=Core::Internationalization<br />
}}<br />
<br />
{{Module<br />
|name=ImageLib<br />
|description=<br />
|owner=[mailto:tnikkel@gmail.com Timothy Nikkel]<br />
|peers=[mailto:aosmond@mozilla.com Andrew Osmond], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar]<br />
|peersemeritus=[mailto:seth.bugzilla@blackhail.net Seth Fowler], [mailto:netzen@gmail.com Brian Bondy], [mailto:justin.lebar@gmail.com Justin Lebar]<br />
|group=dev-platform<br />
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/<br />
|url=<br />
|components=Core::ImageLib<br />
}}<br />
<br />
{{Module<br />
|name=IPC<br />
|description=Native message-passing between threads and processes<br />
|owner=[mailto:jld@mozilla.com Jed Davis]<br />
|ownersemeritus=Chris Jones, Bill McCloskey<br />
|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]<br />
|peersemeritus=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bent.mozilla@gmail.com Ben Turner], David Anderson, Kan-Ru Chen, Bevis Tseng, Ben Kelly<br />
|group=dev-platform<br />
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/<br />
|url=<br />
|components=Core::IPC}}<br />
<br />
{{Module<br />
|name=JavaScript<br />
|description=JavaScript engine (SpiderMonkey)<br />
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]<br />
|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]<br />
|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<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/src<br />
|url=http://www.mozilla.org/js/spidermonkey,<br />
http://developer.mozilla.org/en/docs/About_JavaScript<br />
|components=Core::JavaScript Engine<br />
}}<br />
<br />
{{Module<br />
|name=JavaScript JIT<br />
|description=JavaScript engine's JIT compilers (IonMonkey, Baseline)<br />
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]<br />
|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]<br />
|peersemeritus=[mailto:danderson@mozilla.com David Anderson], [mailto:hv1989@gmail.com Hannes Verschore]<br />
|group=dev-tech-js-engine-internals<br />
|source_dirs=js/src/jit<br />
|url=http://www.mozilla.org/js/spidermonkey<br />
|components=Core::JavaScript Engine: JIT<br />
}}<br />
<br />
{{Module<br />
|name=jsat<br />
|description=Javascript screen reader that is used in Android and B2G<br />
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]<br />
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]<br />
|group=dev-accessibility<br />
|source_dirs=accessible/jsat/<br />
|url=http://www.mozilla.org/access/<br />
|components=Core::Disability Access APIs<br />
}}<br />
<br />
{{Module<br />
|name=js-ctypes<br />
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.<br />
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]<br />
|peers=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/src/ctypes/<br />
|url=https://wiki.mozilla.org/JSctypes<br />
|components=Core::js-ctypes<br />
}}<br />
<br />
{{Module<br />
|name=js-tests<br />
|description=JavaScript test suite<br />
|owner=[mailto:bclary@bclary.com Bob Clary]<br />
|peers=<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/tests/<br />
|url=http://www.mozilla.org/js/tests/library.html<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Layout Engine<br />
|description=rendering tree construction, layout (reflow), etc.<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=[mailto:robert@ocallahan.org Robert O'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]<br />
|group=dev-tech-layout<br />
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/printing/, layout/tables/, layout/tools/<br />
|url=https://wiki.mozilla.org/Gecko:Overview#Layout<br />
|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<br />
}}<br />
<br />
{{Module<br />
|name=libjar<br />
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).<br />
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]<br />
|ownersemeritus=Taras Glek, Michael Wu<br />
|peers=[mailto:mnovotny@mozilla.com Michal Novotny], [mailto:vgosu@mozilla.com Valentin Gosu]<br />
|group=dev-platform<br />
|source_dirs=modules/libjar<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=MathML<br />
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.<br />
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]<br />
|peers=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|group=dev-tech-mathml<br />
|source_dirs=layout/mathml/<br />
|url=http://www.mozilla.org/projects/mathml/<br />
|components=Core::MathML<br />
}}<br />
<br />
{{Module<br />
|name=Media Playback<br />
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).<br />
|owner=[mailto:jyavenard@mozilla.com Jean-Yves Avenard]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan], [mailto:cpearce@mozilla.com Chris Pearce]<br />
|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]<br />
|group=dev-media<br />
|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/<br />
|url=<br />
|components=Core::Audio/Video<br />
}}<br />
<br />
{{Module<br />
|name=Media Transport<br />
|description=Pluggable transport for real-time media<br />
|owner=[mailto:ekr@rtfm.com Eric Rescorla]<br />
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]<br />
|group=dev-media<br />
|source_dirs=media/mtransport<br />
|url=<br />
|components=Core::WebRTC::Networking<br />
}}<br />
<br />
{{Module<br />
|name=Memory Allocator<br />
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.<br />
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote], [mailto:erahm@mozilla.com Eric Rahm]<br />
|group=dev-platform<br />
|source_dirs=memory/<br />
|components=Core::DMD, Core::jemalloc<br />
}}<br />
<br />
{{Module<br />
|name=mfbt<br />
|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).<br />
|owner=[mailto:jwalden@mit.edu Jeff Walden]<br />
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|group=dev-platform<br />
|source_dirs=mfbt/<br />
|url=<br />
|components=Core::MFBT<br />
}}<br />
<br />
{{Module<br />
|name=Mozglue<br />
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.<br />
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|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)<br />
|group=dev-platform<br />
|source_dirs=mozglue/<br />
|components=Core::mozglue<br />
}}<br />
<br />
{{Module<br />
|name=mozilla-toplevel<br />
|description=The top level directory for the mozilla tree.<br />
|owner=[[Modules/Firefox_Technical_Leadership|Firefox Technical Leadership module]]<br />
|ownersemeritus=[mailto:brendan@mozilla.org Brendan Eich]<br />
|peers=<br />
|group=<br />
|source_dirs=tools/README<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=MSCOM<br />
|description=Integration with Microsoft Distributed COM<br />
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]<br />
|peers=[mailto:jteh@mozilla.com James Teh], [mailto:jmathies@mozilla.com Jim Mathies]<br />
|group=dev-platform<br />
|source_dirs=ipc/mscom/%<br />
|url=<br />
|components=Core::IPC: MSCOM}}<br />
<br />
{{Module<br />
|name=Necko<br />
|description=The Mozilla Networking Library<br />
|owner=[mailto:dd.mozilla@gmail.com Dragana Damjanovic]<br />
|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]<br />
|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]<br />
|group=dev-tech-network<br />
|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/<br />
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko<br />
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets<br />
}}<br />
<br />
{{Module<br />
|name=NSPR<br />
|description=Netscape Portable Runtime<br />
|owner=[mailto:kaie@kuix.de Kai Engert]<br />
|peers=[mailto:mh@glandium.org Mike Hommey]<br />
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang]<br />
|group=dev-tech-nspr<br />
|source_dirs=nsprpub/<br />
|url=http://www.mozilla.org/projects/nspr/<br />
http://www.mozilla.org/projects/nspr/reference/html/<br />
http://www.mozilla.org/projects/nspr/release-notes/<br />
|components=NSPR<br />
}}<br />
<br />
{{Module<br />
|name=PDF<br />
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF' format.<br />
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]<br />
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:vnicolas@mozilla.com Vivien Nicolas]<br />
|group=dev-platform<br />
|source_dirs=media/pdf/<br />
|url=https://github.com/mozilla/pdf.js<br />
|components=Core::PDF<br />
}}<br />
<br />
{{Module<br />
|name=Plugins<br />
|description= NPAPI Plugin support.<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|peers=[mailto:davidp99@gmail.com David Parks]<br />
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O'Callahan], [mailto:jstenback@gmail.com Johnny Stenback], Benjamin Smedberg<br />
|group=<br />
|source_dirs=dom/plugins/, modules/plugin/<br />
|url=https://wiki.mozilla.org/Plugins<br />
|components=Core::Plug-ins<br />
}}<br />
<br />
{{Module<br />
|name=Preferences<br />
|description=Preference library<br />
|owner=[mailto:nnethercote@mozilla.com Nicholas Nethercote]<br />
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:glandium@mozilla.com Mike Hommey], [mailto:erahm@mozilla.com Eric Rahm]<br />
|peersemeritus=Felipe Gomes<br />
|group=dev-platform<br />
|source_dirs=modules/libpref/<br />
|url=<br />
|components=Core::Preferences: Backend<br />
}}<br />
<br />
{{Module<br />
|name=Private Browsing<br />
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.<br />
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:josh@joshmatthews.net Josh Matthews]<br />
|group=dev-platform<br />
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. <br />
|url=https://wiki.mozilla.org/Private_Browsing<br />
|components=Firefox::Private Browsing<br />
}}<br />
<br />
{{Module<br />
|name=Privilege Manager<br />
|description="caps"<br />
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:dveditz@mozilla.com Dan Veditz]<br />
|group=dev-tech-dom<br />
|source_dirs=caps/<br />
|url=http://www.mozilla.org/projects/security/components/index.html<br />
|components=Core::Security: CAPS<br />
}}<br />
<br />
{{Module<br />
|name=Push Notifications<br />
|description=Push is a way for application developers to send messages to their web applications.<br />
|owners=[mailto:lina@mozilla.com Lina Cambridge]<br />
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner]<br />
|peers=[mailto:mt@lowentropy.net Martin Thomson], [mailto:ddamjanovic@mozilla.com Dragana Damjanovic]<br />
|peersemeritus=[mailto:nsm.nikhil@gmail.com Nikhil Marathe]<br />
|group=<br />
|source_dirs=dom/push<br />
|url=<br />
|components=Core::DOM: Push Notifications<br />
}}<br />
<br />
{{Module<br />
|name=security<br />
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)<br />
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:mt@lowentropy.net Martin Thomson]<br />
|ownersemeritus=[mailto:wtc@google.com Wan-Teh Chang], [mailto:ttaubert@mozilla.com Tim Taubert]<br />
|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]<br />
|peersemeritus=[mailto:emaldona@redhat.com Elio Maldonado]<br />
|group=dev-tech-crypto<br />
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/<br />
|url=http://mozilla.org/projects/security/pki/<br />
|components=NSS, JSS, Core::Security, Core::Security: S/MIME<br />
}}<br />
<br />
{{Module<br />
|name=Security - Mozilla PSM Glue<br />
|description=Personal Security Manager<br />
|owner=[mailto:dkeeler@mozilla.com Dana Keeler]<br />
|ownersemeritus=[mailto:kaie@kuix.de Kai Engert (2001-2012)]<br />
|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]<br />
|group=dev-tech-crypto<br />
|source_dirs=security/manager/<br />
|url=<br />
|components=Core::Security: PSM<br />
}}<br />
<br />
{{Module<br />
|name=Static analysis & rewriting for C++<br />
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.<br />
|owner=[mailto:eakhgari@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:sfink@mozilla.com Steve Fink], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:birunthan@mohanathas.com Birunthan Mohanathas], [mailto:andi@mozilla.com Andi-Bogdan Postelnicu]<br />
|group=dev-platform<br />
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools<br />
|url=<br />
|components=Core::Rewriting & Analysis<br />
}}<br />
{{Module<br />
|name=storage<br />
|description=Storage APIs with a SQLite backend<br />
|owner=[mailto:mak77@bonardo.net Marco Bonardo]<br />
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:jvarga@mozilla.com Jan Varga]<br />
|group=dev-platform<br />
|source_dirs=db/sqlite3/, storage/<br />
|url=http://developer.mozilla.org/en/docs/Storage<br />
|components=Toolkit::Storage, Core::SQL<br />
}}<br />
<br />
{{Module<br />
|name=String<br />
|description=<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd], [mailto:erahm@mozilla.com Eric Rahm]<br />
|group=dev-tech-xpcom<br />
|source_dirs=string/, xpcom/string/<br />
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide<br />
|components=Core::String<br />
}}<br />
<br />
{{Module<br />
|name=Style System<br />
|description=CSS style sheet handling; style data computation<br />
|owner=[mailto:cam@mcc.id.au Cameron McCormack]<br />
|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]<br />
|group=dev-tech-layout<br />
|source_dirs=layout/style/, servo/<br />
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System<br />
|components=Core::CSS Parsing and Computation<br />
}}<br />
<br />
{{Module<br />
|name=SVG<br />
|description=Scalable Vector Graphics<br />
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]<br />
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O'Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]<br />
|group=dev-tech-svg<br />
|source_dirs=dom/svg/, layout/svg/, dom/smil/<br />
|url=https://developer.mozilla.org/en-US/docs/Web/SVG<br />
|components=Core::SVG<br />
}}<br />
<br />
{{Module<br />
|name=View System<br />
|description=The View Manager is responsible for handling "heavyweight" rendering (some clipping, compositing) and event handling tasks.<br />
|owner=[mailto:mstange@themasta.com Markus Stange]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]<br />
|group=dev-tech-layout<br />
|source_dirs=view/<br />
|url=<br />
|components=Core::Layout: View Rendering<br />
}}<br />
<br />
{{Module<br />
|name=Web Audio<br />
|description=Support for the W3C Web Audio API specification.<br />
|owner=[mailto:padenot@mozilla.com Paul Adenot]<br />
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:robert@ocallahan.org Robert O'Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]<br />
|group=dev-platform<br />
|source_dirs=dom/media/webaudio<br />
|url=https://wiki.mozilla.org/Web_Audio_API<br />
|components=Core::Web Audio<br />
}}<br />
<br />
{{Module<br />
|name=Web Painting<br />
|description=painting, display lists, and layer construction<br />
|owner=[mailto:matt.woodrow@gmail.com Matt Woodrow]<br />
|peers=[mailto:robert@ocallahan.org Robert O'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]<br />
|group=dev-tech-layout<br />
|source_dirs= layout/painting, the display list and layer related methods on nsIFrame and its subclasses<br />
|url=http://mozilla.org/newlayout/doc/ ,<br />
http://lxr.mozilla.org/mozilla/source/layout/doc/<br />
|components=Core::Layout: Web Painting<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC<br />
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access<br />
|owner=[mailto:rjesup@mozilla.com Randell Jesup]<br />
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]<br />
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=netwerk/sctp (also see submodules "WebRTC Media" and "WebRTC Signaling")<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC, Core::WebRTC Networking<br />
}}<br />
<br />
{{Module<br />
|name=WebVR<br />
|description=Gecko's implementation of WebVR (Virtual Reality) functionality, including API, devices, graphics and integration<br />
|owner=[mailto:kgilbert@mozilla.com Kip Gilbert]<br />
|peers=[mailto:dmu@mozilla.com Daosheng Mu]<br />
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic]<br />
|group=dev-platform<br />
|source_dirs=dom/vr, gfx/vr<br />
|url=https://mozvr.com/<br />
|components=Core::WebVR<br />
}}<br />
<br />
{{Module<br />
|name=Widget<br />
|description=Top level Widget<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|ownersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:robert@ocallahan.org Robert O'Callahan]<br />
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], <br />
|group=dev-platform<br />
|source_dirs=widget/, widget/xpwidgets/<br />
|url=<br />
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup<br />
}}<br />
<br />
{{Module<br />
|name=Widget - Android<br />
|description=Android widget support<br />
|owner=[mailto:jwillcox@mozilla.com James Willcox]<br />
|peers=<br />
|ownersemeritus=[mailto:blassey.bugs@lassey.us Brad Lassey]<br />
|group=dev-platforms-mobile<br />
|source_dirs=widget/android/, embedding/android<br />
|url=<br />
|components=Core::Widget: Android<br />
}}<br />
<br />
{{Module<br />
|name=Widget - GTK<br />
|description=GTK widget support<br />
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]<br />
|peers=[mailto:stransky@redhat.com Martin Stránský]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|group=dev-platform<br />
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/<br />
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/<br />
|components=Core::Widget: Gtk<br />
}}<br />
<br />
{{Module<br />
|name=Widget - Headless<br />
|description=Headless widget support<br />
|owner=[mailto:bdahl@mozilla.com Brendan Dahl]<br />
|peers=<br />
|ownersemeritus=<br />
|group=dev-platform<br />
|source_dirs=widget/headless/<br />
|url=<br />
|components=Firefox::Headless<br />
}}<br />
<br />
{{Module<br />
|name=Widget - OS X<br />
|description= OSX widget support<br />
|owner=[mailto:spohl@mozilla.com Stephen Pohl]<br />
|peers=[mailto:mstange@themasta.com Markus Stange]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan], [mailto:mstange@themasta.com Markus Stange]<br />
|peersemeritus=[mailto:joshmoz@gmail.com Josh Aas], [mailto:b56girard@gmail.com Benoit Girard], [mailto:smichaud@pobox.com Steven Michaud]<br />
|group=dev-platform<br />
|source_dirs=widget/cocoa/<br />
|url=<br />
|components=Core::Widget: Cocoa<br />
}}<br />
<br />
{{Module<br />
|name=Widget - Windows<br />
|description=Windows widget support<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:robert.strong.bugs@gmail.com Rob Strong], [mailto:aklotz@mozilla.com Aaron Klotz]<br />
|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 'timeless' Soref], [mailto:robarnold@cmu.edu Rob Arnold]<br />
|group=dev-platform<br />
|source_dirs=widget/windows/<br />
|url=<br />
|components=Core::Widget: Win32<br />
}}<br />
<br />
{{Module<br />
|name=XBL<br />
|description=eXtensible Binding Language<br />
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|peers=[mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:jonas@sicking.cc Jonas Sicking]<br />
|ownersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]<br />
|group=dev-tech-xbl<br />
|source_dirs=dom/xbl/<br />
|url=http://www.mozilla.org/projects/xbl/<br />
|components=Core::XBL<br />
}}<br />
<br />
{{Module<br />
|name=XML<br />
|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.<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:erahm@mozilla.com Eric Rahm]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback]<br />
|group=dev-tech-xml<br />
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/<br />
|url=http://www.mozilla.org/newlayout/xml/<br />
|components=Core::XML<br />
}}<br />
<br />
{{Module<br />
|name=XPApps<br />
|description=Cross-Platform Applications, mostly Navigator front end and application shell.<br />
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]<br />
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|group=dev-apps-seamonkey<br />
|source_dirs=xpfe/<br />
|url=http://www.mozilla.org/xpapps/<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=XPCOM<br />
|description=The cross-platform object model and core data structures.<br />
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]<br />
|peers=[mailto:erahm@mozilla.com Eric Rahm], [mailto:nika@thelayzells.com Nika Layzell], [mailto:kmaglione@mozilla.com Kris Maglione]<br />
|ownersemeritus=Benjamin Smedberg<br />
|peersemeritus=[https://mozillians.org/en-US/u/dougt/ Doug Turner]<br />
|group=dev-platform<br />
|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/<br />
|url=http://developer.mozilla.org/en/XPCOM<br />
|components=Core::XPCOM<br />
}}<br />
<br />
{{Module<br />
|name=XPConnect<br />
|description=Deep Magic<br />
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|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]<br />
|peersemeritus=[mailto:gal@uci.edu Andreas Gal], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits]<br />
|group=<br />
|source_dirs=js/xpconnect/<br />
|url=<br />
|components=Core::XPConnect<br />
}}<br />
<br />
{{Module<br />
|name=XPIDL<br />
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.<br />
|owner=[mailto:nika@thelayzells.com Nika Layzell]<br />
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:amccreight@mozilla.com Andrew McCreight]<br />
|ownersemeritus=[mailto:me@kylehuey.com Kyle Huey]<br />
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|group=dev-tech-xpcom<br />
|source_dirs=xpcom/typelib/<br />
|url=http://www.mozilla.org/scriptable/xpidl<br />
http://www.mozilla.org/scriptable<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=XSLT Processor<br />
|description=XSLT transformations processor<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:erahm@mozilla.com Eric Rahm]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]<br />
|group=dev-tech-xslt<br />
|source_dirs=dom/xslt/<br />
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html<br />
|components=Core::XSLT<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - Windows <br />
|description=Sandboxing for the Windows platform <br />
|owner=[mailto:bobowencode@gmail.com Bob Owen] (:bobowen)<br />
|peers=[mailto:aklotz@mozilla.com Aaron Klotz] (:aklotz), [mailto:jimm@mozilla.com Jim Mathies] (:jimm), [mailto:davidp99@gmail.com David Parks] (:handyman)<br />
|ownersemeritus=[https://mozillians.org/en-US/u/TimAbraldes Tim Abraldes]<br />
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy]<br />
|group=dev-platform<br />
|source_dirs=security/sandbox/win <br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - OSX <br />
|description=Sandboxing for the OSX platform <br />
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]<br />
|peers=<br />
|group=dev-platform <br />
|source_dirs=security/sandbox/mac <br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - Linux<br />
|description=Sandboxing for the Linux platform<br />
|owner=[mailto:jld@mozilla.com Jed Davis]<br />
|peers=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]<br />
|group=dev-platform<br />
|source_dirs=security/sandbox/linux<br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Crash reporting<br />
|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.<br />
|owner=[mailto:gsvelto@mozilla.com Gabriele Svelto] (:gsvelto)<br />
|peers=[mailto:nfroyd@mozilla.com Nathan Froyd] (:froydnj)<br />
|group=dev-platform<br />
|source_dirs=toolkit/crashreporter, toolkit/components/crashes, tools/crashreporter, ipc/glue/CrashReporter*, mobile/android/geckoview/src/main/java/org/mozilla/geckoview/CrashReporter.java<br />
|url=https://firefox-source-docs.mozilla.org/toolkit/crashreporter/crashreporter/index.html<br />
|components=Toolkit::Crash Reporting<br />
}}<br />
<br />
===Submodules===<br />
{{Module<br />
|name=Build Config - Fennec<br />
|description=Submodule of the build config covering Fennec's build system in mobile/android.<br />
|owner=[mailto:nalexander@mozilla.com Nicholas Alexander]<br />
|peers=Same as Build Config<br />
|group=dev-builds<br />
|components=Core::Build Config<br />
}}<br />
<br />
{{Module<br />
|name=Build Config - Taskgraph<br />
|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.<br />
|owner=[mailto:mozilla@hocat.ca Tom Prince]<br />
|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]<br />
|components=Firefox Build System::Task Configuration<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC Media<br />
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.<br />
|owner=[mailto:rjesup@mozilla.com Randell Jesup]<br />
|peers=[mailto:jib@mozilla.com Jan-Ivar Bruaroey], [mailto:dminor@mozilla.com Dan Minor], [mailto:apehrson@mozilla.com Andreas Pehrson], <br />
|peersemeritus=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=/media/webrtc, /dom/media/webrtc, /dom/media/systemservices<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC (Audio/Video)<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC Signaling<br />
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling<br />
|owner=[mailto:bcampen@mozilla.com Byron Campen]<br />
|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]<br />
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=/media/webrtc/signaling/<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC (Signaling)<br />
}}<br />
<br />
<noinclude><br />
<br />
===Unassigned Bugzilla Components===<br />
<br />
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):<br />
<br />
<pre><br />
Core::Find Backend<br />
Core::General<br />
Core::History: Global<br />
Core::Image Blocking<br />
Core::Localization<br />
Core::Networking: Domain Lists<br />
Core::Selection<br />
Core::Serializers<br />
Core::Spelling checker<br />
Core::X-remote<br />
Core::XUL<br />
</pre><br />
</noinclude></div>Masayukihttps://wiki.mozilla.org/index.php?title=Modules/Core&diff=1186474Modules/Core2018-01-09T08:11:08Z<p>Masayuki: Adding Makto Kato to peers of Editor module</p>
<hr />
<div><noinclude><br />
'''Only module owners may edit this page.''' <br />
<br />
They may:<br />
<br />
* update any information about their module except the name of the owner<br />
* add or remove sub-modules<br />
* change the owner of a sub-module <br />
* add emeritus owners or peers<br />
<br />
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].<br />
</noinclude><br />
{{Module<br />
|name=Accessibility<br />
|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.<br />
|owner=[mailto:surkov.alexander@gmail.com Alexander Surkov]<br />
|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]<br />
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal]<br />
|peersemeritus=[mailto:tbsaunde+mozbugs@tbsaunde.org Trevor Saunders], [mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan<br />
|group=dev-accessibility<br />
|source_dirs=accessible/<br />
|url=http://www.mozilla.org/access/<br />
|components=Core::Disability Access APIs<br />
}}<br />
<br />
{{Module<br />
|name=Browser WebAPI<br />
|description=Web API for rendering apps, browser windows and widgets.<br />
|owner=[mailto:kchen@mozilla.com Kan-Ru Chen]<br />
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:fabrice@mozilla.com Fabrice Desré]<br />
|group=dev-webapi<br />
|source_dirs=dom/browser-element/<br />
|url=<br />
|components=Core::DOM<br />
}}<br />
<br />
{{Module<br />
|name=Build and Release Tools<br />
|description=Tools related to build and release automation and configuration of release builds.<br />
|owner=[mailto:nthomas@mozilla.com Nick Thomas]<br />
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]<br />
|group=release-engineering<br />
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/<br />
|url=https://wiki.mozilla.org/ReleaseEngineering<br />
|components=Release Engineering::*<br />
}}<br />
<br />
{{Module<br />
|name=Build Config<br />
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.<br />
|owner=[mailto:gps@mozilla.com Gregory Szorc] (:gps)<br />
|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:rgiles@mozilla.com Ralph Giles] (:rillian)<br />
|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]), <br />
|group=dev-builds<br />
|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/<br />
|url=http://www.mozilla.org/build/<br />
|components=Core::Build Config<br />
}}<br />
<br />
{{Module<br />
|name=Code Analysis and Debugging Tools<br />
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=<br />
|group=dev-performance<br />
|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/, <br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Content HTTP Headers<br />
|description=HTTP headers related to content, e.g. User-Agent, Content-Type, Accept. (Transport-related headers are the responsibility of the Necko module owner.)<br />
|owner=[mailto:gerv@mozilla.org Gervase Markham]<br />
|peers=[mailto:lmandel@mozilla.com Lawrence Mandel]<br />
|group=dev-platform<br />
|source_dirs= <br />
|url=https://developer.mozilla.org/en/Gecko_user_agent_string_reference<br />
|components=Core::Networking: HTTP<br />
}}<br />
<br />
{{Module<br />
|name=Content Security<br />
|description=Native content-based security features, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Subresource Integrity (SRI) and CORS.<br />
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]<br />
|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] <br />
|group=dev-security<br />
|source_dirs=dom/security<br />
|components=Core::DOM: Security<br />
}}<br />
<br />
{{Module<br />
|name=Cookies and Permissions<br />
|description=<br />
|owner=Monica Chew<br />
|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)]<br />
|group=dev-tech-network<br />
|source_dirs=extensions/cookie/, netwerk/cookie/<br />
|url=<br />
|components=Core::Networking: Cookies<br />
}}<br />
{{Module<br />
|name=Cycle Collector<br />
|description=Code to break and collect objects within reference cycles<br />
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]<br />
|peers=Peter Van der Beken, Olli Pettay, David Baron<br />
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers<br />
|components=Core::XPCOM<br />
|group=dev-platform<br />
}}<br />
{{Module<br />
|name=C++/Rust usage, tools, and style<br />
|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<br />
|owner=[mailto:nfroyd@mozilla.com Nathan Froyd] (while Ehsan is away)<br />
|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]<br />
|source_dirs=non-third-party C++ and Rust code in the tree<br />
|components=Various components<br />
|group=dev-platform<br />
}}<br />
{{Module<br />
|name=docshell<br />
|description=<br />
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:sawang@mozilla.com Samael Wang]<br />
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback],[mailto:cbiesinger@gmail.com Christian Biesinger],[mailto:justin.lebar@gmail.com Justin Lebar]<br />
|group=dev-platform<br />
|source_dirs=docshell/, uriloader/<br />
|url=<br />
|components=Core::Document Navigation<br />
}}<br />
<br />
{{Module<br />
|name=Document Object Model<br />
|description=<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|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],<br />
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:kyle@nonpolynomial.com Kyle Machulis]<br />
|ownersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]<br />
|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]<br />
|group=dev-tech-dom<br />
|source_dirs=dom/*, except directories covered by other modules<br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core & HTML<br />
}}<br />
<br />
{{Module<br />
|name=DOM File<br />
|description=DOM Blob, File and FileSystem APIs <br />
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]<br />
|peers=[mailto:olli@pettay.fi Olli Pettay]<br />
|group=dev-platform<br />
|source_dirs=dom/file, dom/filesystem<br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM: File<br />
}}<br />
<br />
{{Module<br />
|name=Event Handling<br />
|description=DOM Events and Event Handling <br />
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]<br />
|peers=[mailto:sshih@mozilla.com Stone Shih]<br />
|group=dev-platform<br />
|source_dirs=dom/events and event handling related code elsewhere <br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM: Events, Core::Event Handling<br />
}}<br />
<br />
{{Module<br />
|name=Web Workers<br />
|description=<br />
|owner=[mailto:baku@mozilla.com Andrea Marchesini]<br />
|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]<br />
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]<br />
|group=dev-platform<br />
|source_dirs=dom/workers/<br />
|url=https://developer.mozilla.org/En/Using_web_workers<br />
|components=Core::DOM: Workers<br />
}}<br />
<br />
{{Module<br />
|name=IndexedDB<br />
|description=<br />
|owner=[mailto:jvarga@mozilla.com Jan Varga]<br />
|peers=[mailto:btseng@mozilla.com Bevis Tseng], [mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:baku@mozilla.com Andrea Marchesini]<br />
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]<br />
|group=dev-platform<br />
|source_dirs=dom/indexedDB/<br />
|url=https://developer.mozilla.org/en/IndexedDB<br />
|components=Core::DOM: IndexedDB<br />
}}<br />
<br />
{{Module<br />
|name=Editor<br />
|description=<br />
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]<br />
|peers=[mailto:m_kato@ga2.so-net.ne.jp Makoto Kato]<br />
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|group=dev-platform<br />
|source_dirs=editor/<br />
|url=http://www.mozilla.org/editor/<br />
|components=Core::Editor<br />
}}<br />
<br />
{{Module<br />
|name=Embedding<br />
|description=Gecko embedding APIs and frameworks<br />
|owner=[mailto:myk@mykzilla.org Myk Melez]<br />
|ownersemeritus=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:doug.turner@gmail.com Doug Turner]<br />
|peers=[mailto:bdahl@mozilla.com Brendan Dahl], [mailto:tbsaunde@tbsaunde.org Trevor Saunders]<br />
|peersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jstenback@gmail.com Johnny Stenback]<br />
|group=dev-platform<br />
|source_dirs=embedding/<br />
|url=<br />
|components=Core::Embedding: APIs<br />
}}<br />
<br />
{{Module<br />
|name=Find As You Type<br />
|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.<br />
|owner=<br />
|peers=<br />
|group=dev-accessibility<br />
|source_dirs=extensions/typeaheadfind/<br />
|url=http://www.mozilla.org/access/type-ahead/<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Gecko Profiler<br />
|description=Gecko's built-in profiler<br />
|owner=[mailto:mstange@themasta.com Markus Stange]<br />
|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].<br />
|group=dev-platform<br />
|source_dirs=tools/profiler/<br />
|url=https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler<br />
|components=Core::Gecko Profiler<br />
}}<br />
<br />
{{Module<br />
|name=Geolocation<br />
|description=Implementation of the Geolocation W3C Spec, location provider apis, and wifi scanning code.<br />
|owner=[mailto:josh@joshmatthews.net Josh Matthews], [mailto:kchen@mozilla.com Kan-Ru Chen]<br />
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner], Garvan Keeley<br />
|peers=<br />
|group=dev-tech-dom<br />
|source_dirs=dom/geolocation, dom/system/, netwerk/wifi<br />
|url=https://developer.mozilla.org/En/Using_geolocation<br />
|components=Core::Geolocation<br />
}}<br />
<br />
{{Module<br />
|name=Global Key Bindings<br />
|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.<br />
|owner=Aaron Leventhal<br />
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]<br />
|group=dev-accessibility<br />
|source_dirs=dom/xbl/builtin/<br />
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html<br />
|components=Core::Keyboard: Navigation<br />
}}<br />
<br />
{{Module<br />
|name=Graphics<br />
|description=Mozilla graphics API<br />
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=gfx/, dom/canvas/<br />
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch<br />
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL<br />
}}<br />
<br />
{{Module<br />
|name=APZ (Graphics submodule)<br />
|description=Asynchronous panning and zooming<br />
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]<br />
|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]<br />
|group=dev-platform<br />
|source=gfx/layers/apz<br />
|url=https://wiki.mozilla.org/Platform/GFX/APZ<br />
|components=Core::Panning and Zooming<br />
}}<br />
<br />
{{Module<br />
|name=Moz2D (Graphics submodule)<br />
|description=Platform independent 2D graphics API<br />
|owner=[mailto:bschouten@mozilla.com Bas Schouten]<br />
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@jwatt.org Jonathan Watt]<br />
|group=dev-platform<br />
|source=gfx/2d<br />
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D<br />
|components=Core::Graphics<br />
}}<br />
<br />
{{Module<br />
|name=Legacy HTML Parser<br />
|description=<br />
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]<br />
|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]<br />
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]<br />
|source_dirs=parser/htmlparser<br />
|url=http://www.mozilla.org/newlayout/doc/parser.html<br />
|components=Core::HTML: Parser<br />
}}<br />
<br />
{{Module<br />
|name=HAL<br />
|description=Hardware Abstraction Layer<br />
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands]<br />
|peers=[mailto:gsvelto@mozilla.com Gabriele Svelto]<br />
|group=dev-platform<br />
|source_dirs=hal/<br />
|components=Core::Hardware Abstraction Layer (HAL)<br />
}}<br />
<br />
{{Module<br />
|name=HTML Parser<br />
|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++.<br />
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]<br />
|peers=[mailto:wchen@mozilla.com William Chen]<br />
|group=dev-platform<br />
|source_dirs=parser/html<br />
|url=http://about.validator.nu/<br />
|components=Core::HTML: Parser<br />
}}<br />
<br />
{{Module<br />
|name=I18N Library<br />
|description=<br />
|owner=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]<br />
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura]<br />
|group=dev-i18n<br />
|source_dirs=intl/<br />
|url=http://mozilla.org/projects/intl/index.html<br />
|components=Core::Internationalization<br />
}}<br />
<br />
{{Module<br />
|name=ImageLib<br />
|description=<br />
|owner=[mailto:tnikkel@gmail.com Timothy Nikkel]<br />
|peers=[mailto:aosmond@mozilla.com Andrew Osmond], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:seth.bugzilla@blackhail.net Seth Fowler]<br />
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy], [mailto:justin.lebar@gmail.com Justin Lebar]<br />
|group=dev-platform<br />
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/<br />
|url=<br />
|components=Core::ImageLib<br />
}}<br />
<br />
{{Module<br />
|name=IPC<br />
|description=Message-passing between threads and processes<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|peers=[mailto:danderson@mozilla.com David Anderson], [mailto:kchen@mozilla.com Kan-Ru Chen], [mailto:jld@mozilla.com Jed Davis], [mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:btseng@mozilla.com Bevis Tseng]<br />
|group=dev-platform<br />
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/<br />
|url=<br />
|components=Core::IPC}}<br />
<br />
{{Module<br />
|name=JavaScript<br />
|description=JavaScript engine (SpiderMonkey)<br />
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]<br />
|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<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/src<br />
|url=http://www.mozilla.org/js/spidermonkey,<br />
http://developer.mozilla.org/en/docs/About_JavaScript<br />
|components=Core::JavaScript Engine<br />
}}<br />
<br />
{{Module<br />
|name=JavaScript JIT<br />
|description=JavaScript engine's JIT compilers (IonMonkey, Baseline)<br />
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]<br />
|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]<br />
|group=dev-tech-js-engine-internals<br />
|source_dirs=js/src/jit<br />
|url=http://www.mozilla.org/js/spidermonkey<br />
|components=Core::JavaScript Engine: JIT<br />
}}<br />
<br />
{{Module<br />
|name=JavaScript Debugger Backend<br />
|description=JavaScript debugging hooks<br />
|owner=[mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:rginda@hacksrus.com Rob Ginda]<br />
|group=dev-apps-js-debugger<br />
|source_dirs=js/jsd/<br />
|url=http://www.mozilla.org/js/jsd<br />
|components=Other Applications::Venkman JS Debugger<br />
}}<br />
<br />
{{Module<br />
|name=jsat<br />
|description=Javascript screen reader that is used in Android and B2G<br />
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]<br />
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]<br />
|group=dev-accessibility<br />
|source_dirs=accessible/jsat/<br />
|url=http://www.mozilla.org/access/<br />
|components=Core::Disability Access APIs<br />
}}<br />
<br />
{{Module<br />
|name=js-ctypes<br />
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.<br />
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]<br />
|peers=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/src/ctypes/<br />
|url=https://wiki.mozilla.org/JSctypes<br />
|components=Core::js-ctypes<br />
}}<br />
<br />
{{Module<br />
|name=js-tests<br />
|description=JavaScript test suite<br />
|owner=[mailto:bclary@bclary.com Bob Clary]<br />
|peers=<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/tests/<br />
|url=http://www.mozilla.org/js/tests/library.html<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Layout Engine<br />
|description=rendering tree construction, layout (reflow), etc.<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=[mailto:robert@ocallahan.org Robert O'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]<br />
|group=dev-tech-layout<br />
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/printing/, layout/tables/, layout/tools/<br />
|url=http://mozilla.org/newlayout/doc/ ,<br />
http://lxr.mozilla.org/mozilla/source/layout/doc/<br />
|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 & A Pos, Core::Layout: Tables, Core::Layout: Text, Core::Print Preview, Core::Printing: Output<br />
}}<br />
<br />
{{Module<br />
|name=libjar<br />
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).<br />
|owner=[mailto:mwu@mozilla.com Michael Wu]<br />
|peers=[mailto:aklotz@mozilla.com Aaron Klotz]<br />
|group=dev-platform<br />
|source_dirs=modules/libjar<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=MathML<br />
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.<br />
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]<br />
|peers=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|group=dev-tech-mathml<br />
|source_dirs=layout/mathml/<br />
|url=http://www.mozilla.org/projects/mathml/<br />
|components=Core::MathML<br />
}}<br />
<br />
{{Module<br />
|name=Media Playback<br />
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).<br />
|owner=[mailto:cpearce@mozilla.com Chris Pearce]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|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]<br />
|group=dev-media<br />
|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/<br />
|url=<br />
|components=Core::Audio/Video<br />
}}<br />
<br />
{{Module<br />
|name=Media Transport<br />
|description=Pluggable transport for real-time media<br />
|owner=[mailto:ekr@rtfm.com Eric Rescorla]<br />
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]<br />
|group=dev-media<br />
|source_dirs=media/mtransport<br />
|url=<br />
|components=Core::WebRTC::Networking<br />
}}<br />
<br />
{{Module<br />
|name=Memory Allocator<br />
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.<br />
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote], [mailto:erahm@mozilla.com Eric Rahm]<br />
|group=dev-platform<br />
|source_dirs=memory/<br />
|components=Core::DMD, Core::jemalloc<br />
}}<br />
<br />
{{Module<br />
|name=mfbt<br />
|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).<br />
|owner=[mailto:jwalden@mit.edu Jeff Walden]<br />
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|group=dev-platform<br />
|source_dirs=mfbt/<br />
|url=<br />
|components=Core::MFBT<br />
}}<br />
<br />
{{Module<br />
|name=mozApps API & UI<br />
|description=Implementation of the navigator.mozApps API<br />
|owner=[mailto:fabrice@mozilla.com Fabrice Desré], [mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:myk@mozilla.org Myk Melez], [mailto:mar.castelluccio@studenti.unina.it Marco Castelluccio], [mailto:ferjmoreno@gmail.com Fernando Jiménez]<br />
|group=dev-webapi<br />
|source_dirs=dom/apps/, dom/interfaces/apps, product specific files implementing UI hooks.<br />
|url=<br />
|components=Core::DOM: Apps<br />
}}<br />
<br />
{{Module<br />
|name=Mozglue<br />
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.<br />
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|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)<br />
|group=dev-platform<br />
|source_dirs=mozglue/<br />
|components=Core::mozglue<br />
}}<br />
<br />
{{Module<br />
|name=mozilla-toplevel<br />
|description=The top level directory for the mozilla tree.<br />
|owner=[mailto:brendan@mozilla.org Brendan Eich]<br />
|peers=<br />
|group=<br />
|source_dirs=tools/README<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=MSCOM<br />
|description=Integration with Microsoft Distributed COM<br />
|owner=[mailto:aklotz@mozilla.com Aaron Klotz]<br />
|peers=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|group=dev-platform<br />
|source_dirs=ipc/mscom/%<br />
|url=<br />
|components=Core::IPC: MSCOM}}<br />
<br />
{{Module<br />
|name=Necko<br />
|description=The Mozilla Networking Library<br />
|owner=[mailto:mcmanus@ducksong.com Patrick McManus]<br />
|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 ], [mailto:schien@mozilla.com ShihChiang Chien]<br />
|peersemeritus= [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sworkman@mozilla.com Steve Workman], [mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|group=dev-tech-network<br />
|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/<br />
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko<br />
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets<br />
}}<br />
<br />
{{Module<br />
|name=NSPR<br />
|description=Netscape Portable Runtime<br />
|owner=[mailto:kaie@kuix.de Kai Engert]<br />
|peers=[mailto:wtc@google.com Wan-Teh Chang], [mailto:mh@glandium.org Mike Hommey]<br />
|group=dev-tech-nspr<br />
|source_dirs=nsprpub/<br />
|url=http://www.mozilla.org/projects/nspr/<br />
http://www.mozilla.org/projects/nspr/reference/html/<br />
http://www.mozilla.org/projects/nspr/release-notes/<br />
|components=NSPR<br />
}}<br />
<br />
{{Module<br />
|name=PDF<br />
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF' format.<br />
|owner=Chris Jones, Andreas Gal<br />
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:bdahl@mozilla.com Brendan Dahl], [mailto:vnicolas@mozilla.com Vivien Nicolas]<br />
|group=dev-platform<br />
|source_dirs=media/pdf/<br />
|url=https://github.com/mozilla/pdf.js<br />
|components=Core::PDF<br />
}}<br />
<br />
{{Module<br />
|name=Plugins<br />
|description= NPAPI Plugin support.<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|peers=[mailto:joshmoz@gmail.com Josh Aas]<br />
|peersemeritus=[mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O'Callahan], [mailto:jstenback@gmail.com Johnny Stenback], Benjamin Smedberg<br />
|group=<br />
|source_dirs=dom/plugins/, modules/plugin/<br />
|url=https://wiki.mozilla.org/Plugins<br />
|components=Core::Plug-ins<br />
}}<br />
<br />
{{Module<br />
|name=Preferences<br />
|description=Preference library<br />
|owner=[mailto:nnethercote@mozilla.com Nicholas Nethercote]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=modules/libpref/<br />
|url=<br />
|components=Core::Preferences: Backend<br />
}}<br />
<br />
{{Module<br />
|name=Private Browsing<br />
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.<br />
|owner=[mailto:josh@joshmatthews.net Josh Matthews] (while Ehsan is away)<br />
|peers=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|group=dev-platform<br />
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. <br />
|url=https://wiki.mozilla.org/Private_Browsing<br />
|components=Firefox::Private Browsing<br />
}}<br />
<br />
{{Module<br />
|name=Privilege Manager<br />
|description="caps"<br />
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:dveditz@mozilla.com Dan Veditz]<br />
|group=dev-tech-dom<br />
|source_dirs=caps/<br />
|url=http://www.mozilla.org/projects/security/components/index.html<br />
|components=Core::Security: CAPS<br />
}}<br />
<br />
{{Module<br />
|name=Push Notifications<br />
|description=Push is a way for application developers to send messages to their web applications.<br />
|owners=<br />
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner]<br />
|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]<br />
|group=<br />
|source_dirs=dom/push, dom/simplepush<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=PyXPCOM<br />
|description=The Python to XPCOM bridge.<br />
|owner=Todd Whiteman<br />
|peers=[mailto:mhammond@skippinet.com.au Mark Hammond]<br />
|group=<br />
|source_dirs=extension/python<br />
|url=https://developer.mozilla.org/en/PyXPCOM<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=RDF<br />
|description=<br />
|owner=[mailto:axel@pike.org Axel Hecht]<br />
|peers=<br />
|group=dev-tech-rdf<br />
|source_dirs=rdf/<br />
|url=http://www.mozilla.org/rdf/doc/<br />
|components=Core::RDF<br />
}}<br />
<br />
{{Module<br />
|name=security<br />
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)<br />
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:ttaubert@mozilla.com Tim Taubert]<br />
|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:wtc@google.com Wan-Teh Chang]<br />
|group=dev-tech-crypto<br />
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/<br />
|url=http://mozilla.org/projects/security/pki/<br />
|components=NSS, JSS, Core::Security, Core::Security: S/MIME<br />
}}<br />
<br />
{{Module<br />
|name=Security - Mozilla PSM Glue<br />
|description=Personal Security Manager<br />
|owner=[mailto:dkeeler@mozilla.com David Keeler]<br />
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka]<br />
|group=dev-tech-crypto<br />
|source_dirs=security/manager/<br />
|url=<br />
|components=Core::Security: PSM, Core::Security: UI<br />
}}<br />
<br />
{{Module<br />
|name=Static analysis & rewriting for C++<br />
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.<br />
|owner=[mailto:nika@thelayzells.com Nika Layzell] (while Ehsan is away)<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools<br />
|url=<br />
|components=Core::Rewriting & Analysis<br />
}}<br />
{{Module<br />
|name=storage<br />
|description=Storage APIs with a SQLite backend<br />
|owner=[mailto:mak77@bonardo.net Marco Bonardo]<br />
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:jvarga@mozilla.com Jan Varga]<br />
|group=dev-platform<br />
|source_dirs=db/sqlite3/, storage/<br />
|url=http://developer.mozilla.org/en/docs/Storage<br />
|components=Toolkit::Storage, Core::SQL<br />
}}<br />
<br />
{{Module<br />
|name=String<br />
|description=<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd], [mailto:erahm@mozilla.com Eric Rahm]<br />
|group=dev-tech-xpcom<br />
|source_dirs=string/, xpcom/string/<br />
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide<br />
|components=Core::String<br />
}}<br />
<br />
{{Module<br />
|name=Style System<br />
|description=CSS style sheet handling; style data computation<br />
|owner= [mailto:cam@mcc.id.au Cameron McCormack]<br />
|peers=[mailto:dbaron@dbaron.org David Baron], [mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|group=dev-tech-layout<br />
|source_dirs=layout/style/<br />
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System<br />
|components=Core::CSS Parsing and Computation<br />
}}<br />
<br />
{{Module<br />
|name=SVG<br />
|description=Scalable Vector Graphics<br />
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]<br />
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O'Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]<br />
|group=dev-tech-svg<br />
|source_dirs=dom/svg/, layout/svg/, dom/smil/<br />
|url=https://developer.mozilla.org/en-US/docs/Web/SVG<br />
|components=Core::SVG<br />
}}<br />
<br />
{{Module<br />
|name=Tamarin<br />
|description=VM for ActionScript and JavaScript<br />
|owner=Edwin Smith, [mailto:jodyer@adobe.com Jeff Dyer]<br />
|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]<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/tamarin<br />
|url=http://www.mozilla.org/projects/tamarin/<br />
http://wiki.mozilla.org/tamarin/<br />
http://hg.mozilla.org/tamarin-central/<br />
http://hg.mozilla.org/tamarin-tracing/<br />
|components=Tamarin<br />
}}<br />
<br />
{{Module<br />
|name=Test Harness<br />
|description=In-tree test infrastructure and tools. Harnesses include, XPCShell, Mochitest (& Chrome), Reftest, JsREftest, Compiled Code Tests, Robocop, Mozmill, Marionette, Firefox UI Tests. Requests for new harnesses should go to Testing::General.<br />
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]<br />
|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), <br />
<br />
|group=dev-quality<br />
|source_dirs=/testing<br />
|url=http://wiki.mozilla.org/SoftwareTesting<br />
|components=Testing::General, Testing::Mochitest, Testing::Mochitest Chrome, Testing::Marionette, Testing::Mozmill, Testing::Reftest, Testing::XPCShell Harness, Testing::httpd.js<br />
}}<br />
<br />
{{Module<br />
|name=Testing Infrastructure<br />
|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<br />
|owner=[mailto:jmaher@mozilla.com Joel Maher]<br />
|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é]<br />
|group=dev-quality<br />
|source_dirs=testing/, tools/httptester/, tools/page-loader/, tools/test-harness/, tools/tests/, tools/testserver/, tools/testy/<br />
|url=http://wiki.mozilla.org/SoftwareTesting<br />
|components=Testing::Infrastructure<br />
}}<br />
<br />
{{Module<br />
|name=JS Marionette<br />
|description=NodeJS test harness, marionette client, and other utilities for running marionette tests (submodule of Test Infrastructure)<br />
|owner=[mailto:jlal@mozilla.com James Lal] <lightsofapollo>, [mailto:gaye@mozilla.com Gareth Aye] <gaye><br />
|peers=[mailto:aus@mozilla.com Ghislain "Aus" Lacroix] <auswerk><br />
|source_dirs=gaia/tests/jsmarionette<br />
|components=Testing::JSMarionette<br />
|group=dev-gaia<br />
}}<br />
<br />
{{Module<br />
|name=XPCShell Test Harness<br />
|description=The XPCShell Harness<br />
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]<br />
|peers=[mailto:jmaher@mozilla.com Joel Maher]<br />
|source_dirs=testing/xpcshell<br />
|components=Testing::XPCShell Harness<br />
}}<br />
<br />
{{Module<br />
|name=Update Service<br />
|description=server code for Mozilla Update services (aus, addons, pfs)<br />
|owner=Mike Morgan<br />
|peers=[mailto:jscott@mozilla.com Justin Scott], [mailto:shaver@mozilla.org Mike Shaver], [mailto:wclouser@mozilla.com Will Clouser]<br />
|group=dev-amo<br />
|source_dirs=webtools/addons/, webtools/aus/, webtools/update/<br />
|url=http://wiki.mozilla.org/wiki/AMO<br />
|components=AUS::Administration, AUS::Systems<br />
}}<br />
<br />
{{Module<br />
|name=View System<br />
|description=The View Manager is responsible for handling "heavyweight" rendering (some clipping, compositing) and event handling tasks.<br />
|owner=[mailto:mstange@themasta.com Markus Stange]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]<br />
|group=dev-tech-layout<br />
|source_dirs=view/<br />
|url=<br />
|components=Core::Layout: View Rendering<br />
}}<br />
<br />
{{Module<br />
|name=Web Audio<br />
|description=Support for the W3C Web Audio API specification.<br />
|owner=[mailto:padenot@mozilla.com Paul Adenot]<br />
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:robert@ocallahan.org Robert O'Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]<br />
|group=dev-platform<br />
|source_dirs=dom/media/webaudio<br />
|url=https://wiki.mozilla.org/Web_Audio_API<br />
|components=Core::Web Audio<br />
}}<br />
<br />
{{Module<br />
|name=Web Painting<br />
|description=painting, display lists, and layer construction<br />
|owner=[mailto:matt.woodrow@gmail.com Matt Woodrow]<br />
|peers=[mailto:robert@ocallahan.org Robert O'Callahan], [mailto:dbaron@dbaron.org David Baron], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:mstange@themasta.com Markus Stange]<br />
|group=dev-tech-layout<br />
|source_dirs= layout/painting, the display list and layer related methods on nsIFrame and its subclasses<br />
|url=http://mozilla.org/newlayout/doc/ ,<br />
http://lxr.mozilla.org/mozilla/source/layout/doc/<br />
|components=Core::Layout: Web Painting<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC<br />
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access<br />
|owner=[mailto:rjesup@mozilla.com Randell Jesup]<br />
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]<br />
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=netwerk/sctp (also see submodules "WebRTC Media" and "WebRTC Signaling")<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC, Core::WebRTC Networking<br />
}}<br />
<br />
{{Module<br />
|name=WebVR<br />
|description=Gecko's implementation of WebVR (Virtual Reality) functionality, including API, devices, graphics and integration<br />
|owner=[mailto:kgilbert@mozilla.com Kip Gilbert]<br />
|peers=[mailto:dmu@mozilla.com Daosheng Mu]<br />
|peersemeritus=[mailto:vladimir@pobox.com Vladimir Vukicevic]<br />
|group=dev-platform<br />
|source_dirs=dom/vr, gfx/vr<br />
|url=https://mozvr.com/<br />
|components=Core::WebVR<br />
}}<br />
<br />
{{Module<br />
|name=Widget<br />
|description=<br />
|owner=[mailto:vladimir@pobox.com Vladimir Vukicevic]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], <br />
|group=dev-platform<br />
|source_dirs=widget/, widget/xpwidgets/<br />
|url=<br />
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup<br />
}}<br />
<br />
{{Module<br />
|name=Widget - Android<br />
|description=The Android Port<br />
|owner=[mailto:blassey.bugs@lassey.us Brad Lassey]<br />
|peers=[mailto:jwillcox@mozilla.com James Willcox]<br />
|group=dev-platforms-mobile<br />
|source_dirs=widget/android/, embedding/android<br />
|url=<br />
|components=Core::Widget: Android<br />
}}<br />
<br />
{{Module<br />
|name=Widget - GTK<br />
|description=supported X widgetry and gfx<br />
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|group=dev-platform<br />
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/<br />
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/<br />
|components=Core::Widget: Gtk<br />
}}<br />
<br />
{{Module<br />
|name=Widget - OS X<br />
|description= Gecko's OS X compatibility layer.<br />
|owner=[mailto:mstange@themasta.com Markus Stange]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=widget/cocoa/<br />
|url=<br />
|components=Core::Widget: Cocoa<br />
}}<br />
<br />
{{Module<br />
|name=Widget - Windows<br />
|description=Windows widgets and desktop integration<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:jmathies@mozilla.com Jim Mathies]<br />
|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 'timeless' Soref], [mailto:robarnold@cmu.edu Rob Arnold]<br />
|group=dev-platform<br />
|source_dirs=widget/windows/<br />
|url=<br />
|components=Core::Widget: Win32<br />
}}<br />
<br />
{{Module<br />
|name=XBL<br />
|description=eXtensible Binding Language<br />
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|peers=[mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:jonas@sicking.cc Jonas Sicking]<br />
|ownersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]<br />
|group=dev-tech-xbl<br />
|source_dirs=dom/xbl/<br />
|url=http://www.mozilla.org/projects/xbl/<br />
|components=Core::XBL<br />
}}<br />
<br />
{{Module<br />
|name=XML<br />
|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.<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:erahm@mozilla.com Eric Rahm]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback]<br />
|group=dev-tech-xml<br />
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/<br />
|url=http://www.mozilla.org/newlayout/xml/<br />
|components=Core::XML<br />
}}<br />
<br />
{{Module<br />
|name=XPApps<br />
|description=Cross-Platform Applications, mostly Navigator front end and application shell.<br />
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]<br />
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|group=dev-apps-seamonkey<br />
|source_dirs=xpfe/<br />
|url=http://www.mozilla.org/xpapps/<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=XPCOM<br />
|description=The cross-platform object model and core data structures.<br />
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]<br />
|peers=[mailto:erahm@mozilla.com Eric Rahm]<br />
|ownersemeritus=Benjamin Smedberg<br />
|peersemeritus=[https://mozillians.org/en-US/u/dougt/ Doug Turner]<br />
|group=dev-platform<br />
|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/<br />
|url=http://developer.mozilla.org/en/XPCOM<br />
|components=Core::XPCOM<br />
}}<br />
<br />
{{Module<br />
|name=XPConnect<br />
|description=Deep Magic<br />
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits], [mailto:amccreight@mozilla.com Andrew McCreight], [mailto:kmaglione@mozilla.com Kris Maglione]<br />
|peersemeritus=[mailto:gal@uci.edu Andreas Gal], [mailto:jstenback@gmail.com Johnny Stenback]<br />
|group=<br />
|source_dirs=js/xpconnect/<br />
|url=<br />
|components=Core::XPConnect<br />
}}<br />
<br />
{{Module<br />
|name=XPIDL<br />
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.<br />
|owner=[mailto:me@kylehuey.com Kyle Huey]<br />
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|group=dev-tech-xpcom<br />
|source_dirs=xpcom/typelib/<br />
|url=http://www.mozilla.org/scriptable/xpidl<br />
http://www.mozilla.org/scriptable<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=XPInstall<br />
|description=<br />
|owner=[mailto:dveditz@mozilla.com Dan Veditz]<br />
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]<br />
|group=dev-tech-xpinstall<br />
|source_dirs=xpinstall/<br />
|url=<br />
|components=Core::Installer: XPInstall Engine<br />
}}<br />
<br />
{{Module<br />
|name=XPToolkit<br />
|description=Cross-platform user interface toolkit<br />
|owner=<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:Jan.Varga@gmail.com Jan Varga]<br />
|group=dev-tech-xul<br />
|source_dirs=dom/xul/, layout/xul/<br />
|url=http://www.mozilla.org/xpfe/<br />
|components=Core::XP Toolkit/Widgets: Menus, Core::XP Toolkit/Widgets: XUL<br />
}}<br />
<br />
{{Module<br />
|name=XSLT Processor<br />
|description=XSLT transformations processor<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:erahm@mozilla.com Eric Rahm]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]<br />
|group=dev-tech-xslt<br />
|source_dirs=dom/xslt/<br />
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html<br />
|components=Core::XSLT<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing<br />
|description=Cross platform sandboxing<br />
|owner=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]<br />
|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:jld@mozilla.com Jed Davis]<br />
|group=dev-platform <br />
|source_dirs=security/sandbox<br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - Windows <br />
|description=Sandboxing for the Windows platform <br />
|owner=[mailto:bowen@mozilla.com Bob Owen]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=security/sandbox/win <br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - OSX <br />
|description=Sandboxing for the OSX platform <br />
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]<br />
|peers=<br />
|group=dev-platform <br />
|source_dirs=security/sandbox/mac <br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - Linux & B2G<br />
|description=Sandboxing for the Linux & B2G platforms<br />
|owner=[mailto:jhector@mozilla.com Julian Hector]<br />
|peers=[mailto:jld@mozilla.com Jed Davis] [mailto:gcp@mozilla.com Gian-Carlo Pascutto]<br />
|group=dev-platform<br />
|source_dirs=security/sandbox/linux<br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
===Submodules===<br />
{{Module<br />
|name=Build Config - Fennec<br />
|description=Submodule of the build config covering Fennec's build system in mobile/android.<br />
|owner=[mailto:nalexander@mozilla.com Nicholas Alexander]<br />
|peers=Same as Build Config<br />
|group=dev-builds<br />
|components=Core::Build Config<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC Media<br />
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.<br />
|owner=[mailto:rjesup@mozilla.com Randell Jesup]<br />
|peers=[mailto:jib@mozilla.com Jan-Ivar Bruaroey], [mailto:dminor@mozilla.com Dan Minor], [mailto:apehrson@mozilla.com Andreas Pehrson], <br />
|peersemeritus=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=/media/webrtc, /dom/media/webrtc, /dom/media/systemservices<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC (Audio/Video)<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC Signaling<br />
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling<br />
|owner=[mailto:bcampen@mozilla.com Byron Campen]<br />
|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]<br />
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=/media/webrtc/signaling/<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC (Signaling)<br />
}}<br />
<br />
<br />
<noinclude><br />
<br />
===Unassigned Bugzilla Components===<br />
<br />
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):<br />
<br />
<pre><br />
Core::Find Backend<br />
Core::General<br />
Core::HTML: Form Submission<br />
Core::History: Global<br />
Core::Image Blocking<br />
Core::Localization<br />
Core::Networking: Domain Lists<br />
Core::Selection<br />
Core::Serializers<br />
Core::Spelling checker<br />
Core::X-remote<br />
Core::XUL<br />
</pre><br />
</noinclude></div>Masayukihttps://wiki.mozilla.org/index.php?title=Modules/Core&diff=1178923Modules/Core2017-08-21T06:31:53Z<p>Masayuki: Removing Aryeh Gregor from peer of Editor because of leaving.</p>
<hr />
<div><noinclude><br />
'''Only module owners may edit this page.''' <br />
<br />
They may:<br />
<br />
* update any information about their module except the name of the owner<br />
* add or remove sub-modules<br />
* change the owner of a sub-module <br />
* add emeritus owners or peers<br />
<br />
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].<br />
</noinclude><br />
{{Module<br />
|name=Accessibility<br />
|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.<br />
|owner=[mailto:surkov.alexander@gmail.com Alexander Surkov]<br />
|peers=[mailto:dbolter@mozilla.com David Bolter], [mailto:eitan@monotonous.org Eitan Isaacson],[mailto:tbsaunde+mozbugs@tbsaunde.org Trevor Saunders], [mailto:mzehe@mozilla.com Marco Zehe], [mailto:yzenevich@mozilla.com Yura Zenevich]<br />
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal]<br />
|peersemeritus=[mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan<br />
|group=dev-accessibility<br />
|source_dirs=accessible/<br />
|url=http://www.mozilla.org/access/<br />
|components=Core::Disability Access APIs<br />
}}<br />
<br />
{{Module<br />
|name=Browser WebAPI<br />
|description=Web API for rendering apps, browser windows and widgets.<br />
|owner=[mailto:kchen@mozilla.com Kan-Ru Chen]<br />
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:fabrice@mozilla.com Fabrice Desré]<br />
|group=dev-webapi<br />
|source_dirs=dom/browser-element/<br />
|url=<br />
|components=Core::DOM<br />
}}<br />
<br />
{{Module<br />
|name=Build and Release Tools<br />
|description=Tools related to build and release automation and configuration of release builds.<br />
|owner=[mailto:nthomas@mozilla.com Nick Thomas]<br />
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]<br />
|group=release-engineering<br />
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/<br />
|url=https://wiki.mozilla.org/ReleaseEngineering<br />
|components=Release Engineering::*<br />
}}<br />
<br />
{{Module<br />
|name=Build Config<br />
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.<br />
|owner=[mailto:gps@mozilla.com Gregory Szorc] (:gps)<br />
|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:rgiles@mozilla.com Ralph Giles] (:rillian)<br />
|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]), <br />
|group=dev-builds<br />
|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/<br />
|url=http://www.mozilla.org/build/<br />
|components=Core::Build Config<br />
}}<br />
<br />
{{Module<br />
|name=Code Analysis and Debugging Tools<br />
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=<br />
|group=dev-performance<br />
|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/, <br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Content HTTP Headers<br />
|description=HTTP headers related to content, e.g. User-Agent, Content-Type, Accept. (Transport-related headers are the responsibility of the Necko module owner.)<br />
|owner=[mailto:gerv@mozilla.org Gervase Markham]<br />
|peers=[mailto:lmandel@mozilla.com Lawrence Mandel]<br />
|group=dev-platform<br />
|source_dirs= <br />
|url=https://developer.mozilla.org/en/Gecko_user_agent_string_reference<br />
|components=Core::Networking: HTTP<br />
}}<br />
<br />
{{Module<br />
|name=Content Security<br />
|description=Native content-based security features, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Subresource Integrity (SRI) and CORS.<br />
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]<br />
|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] <br />
|group=dev-security<br />
|source_dirs=dom/security<br />
|components=Core::DOM: Security<br />
}}<br />
<br />
{{Module<br />
|name=Cookies and Permissions<br />
|description=<br />
|owner=Monica Chew<br />
|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)]<br />
|group=dev-tech-network<br />
|source_dirs=extensions/cookie/, netwerk/cookie/<br />
|url=<br />
|components=Core::Networking: Cookies<br />
}}<br />
{{Module<br />
|name=Cycle Collector<br />
|description=Code to break and collect objects within reference cycles<br />
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]<br />
|peers=Peter Van der Beken, Olli Pettay, David Baron<br />
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers<br />
|components=Core::XPCOM<br />
|group=dev-platform<br />
}}<br />
{{Module<br />
|name=C++/Rust usage, tools, and style<br />
|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<br />
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:bballo@mozilla.com Botond Ballo], [mailto:nfroyd@mozilla.com Nathan Froyd], [mailto:glandium@mozilla.com Mike Hommey], [mailto:jwalden@mozilla.com Jeff Walden]<br />
|source_dirs=non-third-party C++ and Rust code in the tree<br />
|components=Various components<br />
|group=dev-platform<br />
}}<br />
{{Module<br />
|name=docshell<br />
|description=<br />
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|peers=[mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:justin.lebar@gmail.com Justin Lebar]<br />
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]<br />
|group=dev-tech-layout<br />
|source_dirs=docshell/, uriloader/<br />
|url=<br />
|components=Core::Document Navigation<br />
}}<br />
<br />
{{Module<br />
|name=Document Object Model<br />
|description=<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:Olli.Pettay@helsinki.fi Olli Pettay], [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:hsivonen@iki.fi Henri Sivonen], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:baku@mozilla.com Andrea Marchesini],<br />
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:bkelly@mozilla.com Ben Kelly], [mailto:billm@mozilla.com Bill McCloskey], [mailto:kyle@nonpolynomial.com Kyle Machulis]<br />
|ownersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]<br />
|peersemeritus=[mailto:justin.lebar@gmail.com Justin Lebar]<br />
|group=dev-tech-dom<br />
|source_dirs=dom/*, except directories covered by other modules<br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core & HTML<br />
}}<br />
<br />
{{Module<br />
|name=DOM File<br />
|description=DOM Blob, File and FileSystem APIs <br />
|owner=[mailto:amarchesini@Mozilla.com Andrea Marchesini]<br />
|peers=[mailto:olli@pettay.fi Olli Pettay]<br />
|group=dev-platform<br />
|source_dirs=dom/file, dom/filesystem<br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM: File<br />
}}<br />
<br />
{{Module<br />
|name=Event Handling<br />
|description=DOM Events and Event Handling <br />
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]<br />
|group=dev-platform<br />
|source_dirs=dom/events and event handling related code elsewhere <br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM: Events, Core::Event Handling<br />
}}<br />
<br />
{{Module<br />
|name=Web Workers<br />
|description=<br />
|owner=[mailto:baku@mozilla.com Andrea Marchesini]<br />
|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]<br />
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]<br />
|group=dev-platform<br />
|source_dirs=dom/workers/<br />
|url=https://developer.mozilla.org/En/Using_web_workers<br />
|components=Core::DOM: Workers<br />
}}<br />
<br />
{{Module<br />
|name=IndexedDB<br />
|description=<br />
|owner=[mailto:jvarga@mozilla.com Jan Varga]<br />
|peers=[mailto:btseng@mozilla.com Bevis Tseng], [mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:baku@mozilla.com Andrea Marchesini]<br />
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]<br />
|group=dev-platform<br />
|source_dirs=dom/indexedDB/<br />
|url=https://developer.mozilla.org/en/IndexedDB<br />
|components=Core::DOM: IndexedDB<br />
}}<br />
<br />
{{Module<br />
|name=Editor<br />
|description=<br />
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]<br />
|peers=<br />
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|group=dev-platform<br />
|source_dirs=editor/<br />
|url=http://www.mozilla.org/editor/<br />
|components=Core::Editor<br />
}}<br />
<br />
{{Module<br />
|name=Embedding<br />
|description=Gecko embedding APIs and frameworks<br />
|owner=[mailto:myk@mykzilla.org Myk Melez]<br />
|ownersemeritus=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:doug.turner@gmail.com Doug Turner]<br />
|peers=[mailto:bdahl@mozilla.com Brendan Dahl], [mailto:tbsaunde@tbsaunde.org Trevor Saunders]<br />
|peersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jstenback@gmail.com Johnny Stenback]<br />
|group=dev-platform<br />
|source_dirs=embedding/<br />
|url=<br />
|components=Core::Embedding: APIs<br />
}}<br />
<br />
{{Module<br />
|name=Find As You Type<br />
|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.<br />
|owner=<br />
|peers=<br />
|group=dev-accessibility<br />
|source_dirs=extensions/typeaheadfind/<br />
|url=http://www.mozilla.org/access/type-ahead/<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Gecko Profiler<br />
|description=Gecko's built-in profiler<br />
|owner=[mailto:mstange@themasta.com Markus Stange]<br />
|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].<br />
|group=dev-platform<br />
|source_dirs=tools/profiler/<br />
|url=https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler<br />
|components=Core::Gecko Profiler<br />
}}<br />
<br />
{{Module<br />
|name=Geolocation<br />
|description=Implementation of the Geolocation W3C Spec, location provider apis, and wifi scanning code.<br />
|owner=[mailto:josh@joshmatthews.net Josh Matthews], [mailto:kchen@mozilla.com Kan-Ru Chen]<br />
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner], Garvan Keeley<br />
|peers=<br />
|group=dev-tech-dom<br />
|source_dirs=dom/geolocation, dom/system/, netwerk/wifi<br />
|url=https://developer.mozilla.org/En/Using_geolocation<br />
|components=Core::Geolocation<br />
}}<br />
<br />
{{Module<br />
|name=Global Key Bindings<br />
|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.<br />
|owner=Aaron Leventhal<br />
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]<br />
|group=dev-accessibility<br />
|source_dirs=dom/xbl/builtin/<br />
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html<br />
|components=Core::Keyboard: Navigation<br />
}}<br />
<br />
{{Module<br />
|name=Graphics<br />
|description=Mozilla graphics API<br />
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|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), [mailto:lsalzman@mozilla.com Lee Salzman], [mailto:mchang@mozilla.com Mason Chang], [mailto:dvander@mozilla.com David Anderson]<br />
|group=dev-platform<br />
|source_dirs=gfx/, dom/canvas/<br />
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch<br />
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL<br />
}}<br />
<br />
{{Module<br />
|name=APZ (Graphics submodule)<br />
|description=Asynchronous panning and zooming<br />
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]<br />
|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]<br />
|group=dev-platform<br />
|source=gfx/layers/apz<br />
|url=https://wiki.mozilla.org/Platform/GFX/APZ<br />
|components=Core::Panning and Zooming<br />
}}<br />
<br />
{{Module<br />
|name=Moz2D (Graphics submodule)<br />
|description=Platform independent 2D graphics API<br />
|owner=[mailto:bschouten@mozilla.com Bas Schouten]<br />
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@mozilla.com Jonathan Watt]<br />
|group=dev-platform<br />
|source=gfx/2d<br />
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D<br />
|components=Core::Graphics<br />
}}<br />
<br />
{{Module<br />
|name=Legacy HTML Parser<br />
|description=<br />
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]<br />
|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]<br />
|peersemeritus=[mailto:jstenback@gmail.com Johnny Stenback]<br />
|source_dirs=parser/htmlparser<br />
|url=http://www.mozilla.org/newlayout/doc/parser.html<br />
|components=Core::HTML: Parser<br />
}}<br />
<br />
{{Module<br />
|name=HAL<br />
|description=Hardware Abstraction Layer<br />
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands]<br />
|peers=[mailto:gsvelto@mozilla.com Gabriele Svelto]<br />
|group=dev-platform<br />
|source_dirs=hal/<br />
|components=Core::Hardware Abstraction Layer (HAL)<br />
}}<br />
<br />
{{Module<br />
|name=HTML Parser<br />
|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++.<br />
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]<br />
|peers=[mailto:wchen@mozilla.com William Chen]<br />
|group=dev-platform<br />
|source_dirs=parser/html<br />
|url=http://about.validator.nu/<br />
|components=Core::HTML: Parser<br />
}}<br />
<br />
{{Module<br />
|name=I18N Library<br />
|description=<br />
|owner=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]<br />
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura]<br />
|group=dev-i18n<br />
|source_dirs=intl/<br />
|url=http://mozilla.org/projects/intl/index.html<br />
|components=Core::Internationalization<br />
}}<br />
<br />
{{Module<br />
|name=ImageLib<br />
|description=<br />
|owner=[mailto:tnikkel@gmail.com Timothy Nikkel]<br />
|peers=[mailto:aosmond@mozilla.com Andrew Osmond], [mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:seth.bugzilla@blackhail.net Seth Fowler]<br />
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy], [mailto:justin.lebar@gmail.com Justin Lebar]<br />
|group=dev-platform<br />
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/<br />
|url=<br />
|components=Core::ImageLib<br />
}}<br />
<br />
{{Module<br />
|name=IPC<br />
|description=Message-passing between threads and processes<br />
|owner=[mailto:wmccloskey@mozilla.com Bill McCloskey]<br />
|peers=[mailto:danderson@mozilla.com David Anderson], [mailto:jld@mozilla.com Jed Davis], [mailto:kchen@mozilla.com Kan-Ru Chen]<br />
|group=dev-platform<br />
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/<br />
|url=<br />
|components=Core::IPC}}<br />
<br />
{{Module<br />
|name=JavaScript<br />
|description=JavaScript engine (SpiderMonkey)<br />
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]<br />
|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<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/src<br />
|url=http://www.mozilla.org/js/spidermonkey,<br />
http://developer.mozilla.org/en/docs/About_JavaScript<br />
|components=Core::JavaScript Engine<br />
}}<br />
<br />
{{Module<br />
|name=JavaScript JIT<br />
|description=JavaScript engine's JIT compilers (IonMonkey, Baseline)<br />
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]<br />
|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]<br />
|group=dev-tech-js-engine-internals<br />
|source_dirs=js/src/jit<br />
|url=http://www.mozilla.org/js/spidermonkey<br />
|components=Core::JavaScript Engine: JIT<br />
}}<br />
<br />
{{Module<br />
|name=JavaScript Debugger Backend<br />
|description=JavaScript debugging hooks<br />
|owner=[mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:rginda@hacksrus.com Rob Ginda]<br />
|group=dev-apps-js-debugger<br />
|source_dirs=js/jsd/<br />
|url=http://www.mozilla.org/js/jsd<br />
|components=Other Applications::Venkman JS Debugger<br />
}}<br />
<br />
{{Module<br />
|name=jsat<br />
|description=Javascript screen reader that is used in Android and B2G<br />
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]<br />
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]<br />
|group=dev-accessibility<br />
|source_dirs=accessible/jsat/<br />
|url=http://www.mozilla.org/access/<br />
|components=Core::Disability Access APIs<br />
}}<br />
<br />
{{Module<br />
|name=js-ctypes<br />
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.<br />
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]<br />
|peers=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/src/ctypes/<br />
|url=https://wiki.mozilla.org/JSctypes<br />
|components=Core::js-ctypes<br />
}}<br />
<br />
{{Module<br />
|name=js-tests<br />
|description=JavaScript test suite<br />
|owner=[mailto:bclary@bclary.com Bob Clary]<br />
|peers=<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/tests/<br />
|url=http://www.mozilla.org/js/tests/library.html<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Layout Engine<br />
|description=rendering tree construction, layout (reflow), etc.<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=[mailto:robert@ocallahan.org Robert O'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]<br />
|group=dev-tech-layout<br />
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/printing/, layout/tables/, layout/tools/<br />
|url=http://mozilla.org/newlayout/doc/ ,<br />
http://lxr.mozilla.org/mozilla/source/layout/doc/<br />
|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 & A Pos, Core::Layout: Tables, Core::Layout: Text, Core::Print Preview, Core::Printing: Output<br />
}}<br />
<br />
{{Module<br />
|name=libjar<br />
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).<br />
|owner=[mailto:mwu@mozilla.com Michael Wu]<br />
|peers=[mailto:aklotz@mozilla.com Aaron Klotz]<br />
|group=dev-platform<br />
|source_dirs=modules/libjar<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=MathML<br />
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.<br />
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]<br />
|peers=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|group=dev-tech-mathml<br />
|source_dirs=layout/mathml/<br />
|url=http://www.mozilla.org/projects/mathml/<br />
|components=Core::MathML<br />
}}<br />
<br />
{{Module<br />
|name=Media Playback<br />
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).<br />
|owner=[mailto:cpearce@mozilla.com Chris Pearce]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|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]<br />
|group=dev-media<br />
|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/<br />
|url=<br />
|components=Core::Audio/Video<br />
}}<br />
<br />
{{Module<br />
|name=Media Transport<br />
|description=Pluggable transport for real-time media<br />
|owner=[mailto:ekr@rtfm.com Eric Rescorla]<br />
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach], [mailto:nohlmeier@mozilla.com Nils Ohlmeier]<br />
|group=dev-media<br />
|source_dirs=media/mtransport<br />
|url=<br />
|components=Core::WebRTC::Networking<br />
}}<br />
<br />
{{Module<br />
|name=Memory Allocator<br />
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.<br />
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote], [mailto:erahm@mozilla.com Eric Rahm]<br />
|group=dev-platform<br />
|source_dirs=memory/<br />
|components=Core::DMD, Core::jemalloc<br />
}}<br />
<br />
{{Module<br />
|name=mfbt<br />
|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).<br />
|owner=[mailto:jwalden@mit.edu Jeff Walden]<br />
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|group=dev-platform<br />
|source_dirs=mfbt/<br />
|url=<br />
|components=Core::MFBT<br />
}}<br />
<br />
{{Module<br />
|name=mozApps API & UI<br />
|description=Implementation of the navigator.mozApps API<br />
|owner=[mailto:fabrice@mozilla.com Fabrice Desré], [mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:myk@mozilla.org Myk Melez], [mailto:mar.castelluccio@studenti.unina.it Marco Castelluccio], [mailto:ferjmoreno@gmail.com Fernando Jiménez]<br />
|group=dev-webapi<br />
|source_dirs=dom/apps/, dom/interfaces/apps, product specific files implementing UI hooks.<br />
|url=<br />
|components=Core::DOM: Apps<br />
}}<br />
<br />
{{Module<br />
|name=Mozglue<br />
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.<br />
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|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)<br />
|group=dev-platform<br />
|source_dirs=mozglue/<br />
|components=Core::mozglue<br />
}}<br />
<br />
{{Module<br />
|name=mozilla-toplevel<br />
|description=The top level directory for the mozilla tree.<br />
|owner=[mailto:brendan@mozilla.org Brendan Eich]<br />
|peers=<br />
|group=<br />
|source_dirs=tools/README<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Necko<br />
|description=The Mozilla Networking Library<br />
|owner=[mailto:mcmanus@ducksong.com Patrick McManus]<br />
|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 ]<br />
|peersemeritus= [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sworkman@mozilla.com Steve Workman], [mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|group=dev-tech-network<br />
|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/<br />
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko<br />
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets<br />
}}<br />
<br />
{{Module<br />
|name=NSPR<br />
|description=Netscape Portable Runtime<br />
|owner=[mailto:kaie@kuix.de Kai Engert]<br />
|peers=[mailto:wtc@google.com Wan-Teh Chang], [mailto:mh@glandium.org Mike Hommey]<br />
|group=dev-tech-nspr<br />
|source_dirs=nsprpub/<br />
|url=http://www.mozilla.org/projects/nspr/<br />
http://www.mozilla.org/projects/nspr/reference/html/<br />
http://www.mozilla.org/projects/nspr/release-notes/<br />
|components=NSPR<br />
}}<br />
<br />
{{Module<br />
|name=PDF<br />
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF' format.<br />
|owner=Chris Jones, Andreas Gal<br />
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:bdahl@mozilla.com Brendan Dahl], [mailto:vnicolas@mozilla.com Vivien Nicolas]<br />
|group=dev-platform<br />
|source_dirs=media/pdf/<br />
|url=https://github.com/mozilla/pdf.js<br />
|components=Core::PDF<br />
}}<br />
<br />
{{Module<br />
|name=Plugins<br />
|description= NPAPI Plugin support.<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|peers=[mailto:joshmoz@gmail.com Josh Aas]<br />
|peersemeritus=[mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O'Callahan], [mailto:jstenback@gmail.com Johnny Stenback], Benjamin Smedberg<br />
|group=<br />
|source_dirs=dom/plugins/, modules/plugin/<br />
|url=https://wiki.mozilla.org/Plugins<br />
|components=Core::Plug-ins<br />
}}<br />
<br />
{{Module<br />
|name=Preferences<br />
|description=Preference library<br />
|owner=<br />
|peers=Nick Nethercote<br />
|group=dev-platform<br />
|source_dirs=modules/libpref/<br />
|url=<br />
|components=Core::Preferences: Backend<br />
}}<br />
<br />
{{Module<br />
|name=Private Browsing<br />
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.<br />
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:josh@joshmatthews.net Josh Matthews]<br />
|group=dev-platform<br />
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. <br />
|url=https://wiki.mozilla.org/Private_Browsing<br />
|components=Firefox::Private Browsing<br />
}}<br />
<br />
{{Module<br />
|name=Privilege Manager<br />
|description="caps"<br />
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|peersemeritus=[mailto:brendan@mozilla.org Brendan Eich], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:dveditz@mozilla.com Dan Veditz]<br />
|group=dev-tech-dom<br />
|source_dirs=caps/<br />
|url=http://www.mozilla.org/projects/security/components/index.html<br />
|components=Core::Security: CAPS<br />
}}<br />
<br />
{{Module<br />
|name=Push Notifications<br />
|description=Push is a way for application developers to send messages to their web applications.<br />
|owners=<br />
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner]<br />
|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]<br />
|group=<br />
|source_dirs=dom/push, dom/simplepush<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=PyXPCOM<br />
|description=The Python to XPCOM bridge.<br />
|owner=Todd Whiteman<br />
|peers=[mailto:mhammond@skippinet.com.au Mark Hammond]<br />
|group=<br />
|source_dirs=extension/python<br />
|url=https://developer.mozilla.org/en/PyXPCOM<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=RDF<br />
|description=<br />
|owner=[mailto:axel@pike.org Axel Hecht]<br />
|peers=<br />
|group=dev-tech-rdf<br />
|source_dirs=rdf/<br />
|url=http://www.mozilla.org/rdf/doc/<br />
|components=Core::RDF<br />
}}<br />
<br />
{{Module<br />
|name=security<br />
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)<br />
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:ttaubert@mozilla.com Tim Taubert]<br />
|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:wtc@google.com Wan-Teh Chang]<br />
|group=dev-tech-crypto<br />
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/<br />
|url=http://mozilla.org/projects/security/pki/<br />
|components=NSS, JSS, Core::Security, Core::Security: S/MIME<br />
}}<br />
<br />
{{Module<br />
|name=Security - Mozilla PSM Glue<br />
|description=Personal Security Manager<br />
|owner=[mailto:dkeeler@mozilla.com David Keeler]<br />
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka]<br />
|group=dev-tech-crypto<br />
|source_dirs=security/manager/<br />
|url=<br />
|components=Core::Security: PSM, Core::Security: UI<br />
}}<br />
<br />
{{Module<br />
|name=Static analysis & rewriting for C++<br />
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.<br />
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools<br />
|url=<br />
|components=Core::Rewriting & Analysis<br />
}}<br />
{{Module<br />
|name=storage<br />
|description=Storage APIs with a SQLite backend<br />
|owner=[mailto:mak77@bonardo.net Marco Bonardo]<br />
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:jvarga@mozilla.com Jan Varga]<br />
|group=dev-platform<br />
|source_dirs=db/sqlite3/, storage/<br />
|url=http://developer.mozilla.org/en/docs/Storage<br />
|components=Toolkit::Storage, Core::SQL<br />
}}<br />
<br />
{{Module<br />
|name=String<br />
|description=<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd], [mailto:erahm@mozilla.com Eric Rahm]<br />
|group=dev-tech-xpcom<br />
|source_dirs=string/, xpcom/string/<br />
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide<br />
|components=Core::String<br />
}}<br />
<br />
{{Module<br />
|name=Style System<br />
|description=CSS style sheet handling; style data computation<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:cam@mcc.id.au Cameron McCormack]<br />
|group=dev-tech-layout<br />
|source_dirs=layout/style/<br />
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System<br />
|components=Core::CSS Parsing and Computation<br />
}}<br />
<br />
{{Module<br />
|name=SVG<br />
|description=Scalable Vector Graphics<br />
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]<br />
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O'Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]<br />
|group=dev-tech-svg<br />
|source_dirs=dom/svg/, layout/svg/, dom/smil/<br />
|url=https://developer.mozilla.org/en-US/docs/Web/SVG<br />
|components=Core::SVG<br />
}}<br />
<br />
{{Module<br />
|name=Tamarin<br />
|description=VM for ActionScript and JavaScript<br />
|owner=Edwin Smith, [mailto:jodyer@adobe.com Jeff Dyer]<br />
|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]<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/tamarin<br />
|url=http://www.mozilla.org/projects/tamarin/<br />
http://wiki.mozilla.org/tamarin/<br />
http://hg.mozilla.org/tamarin-central/<br />
http://hg.mozilla.org/tamarin-tracing/<br />
|components=Tamarin<br />
}}<br />
<br />
{{Module<br />
|name=Test Harness<br />
|description=In-tree test infrastructure and tools. Harnesses include, XPCShell, Mochitest (& Chrome), Reftest, JsREftest, Compiled Code Tests, Robocop, Mozmill, Marionette, Firefox UI Tests. Requests for new harnesses should go to Testing::General.<br />
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]<br />
|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), <br />
<br />
|group=dev-quality<br />
|source_dirs=/testing<br />
|url=http://wiki.mozilla.org/SoftwareTesting<br />
|components=Testing::General, Testing::Mochitest, Testing::Mochitest Chrome, Testing::Marionette, Testing::Mozmill, Testing::Reftest, Testing::XPCShell Harness, Testing::httpd.js<br />
}}<br />
<br />
{{Module<br />
|name=Testing Infrastructure<br />
|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<br />
|owner=[mailto:jmaher@mozilla.com Joel Maher]<br />
|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é]<br />
|group=dev-quality<br />
|source_dirs=testing/, tools/httptester/, tools/page-loader/, tools/test-harness/, tools/tests/, tools/testserver/, tools/testy/<br />
|url=http://wiki.mozilla.org/SoftwareTesting<br />
|components=Testing::Infrastructure<br />
}}<br />
<br />
{{Module<br />
|name=JS Marionette<br />
|description=NodeJS test harness, marionette client, and other utilities for running marionette tests (submodule of Test Infrastructure)<br />
|owner=[mailto:jlal@mozilla.com James Lal] <lightsofapollo>, [mailto:gaye@mozilla.com Gareth Aye] <gaye><br />
|peers=[mailto:aus@mozilla.com Ghislain "Aus" Lacroix] <auswerk><br />
|source_dirs=gaia/tests/jsmarionette<br />
|components=Testing::JSMarionette<br />
|group=dev-gaia<br />
}}<br />
<br />
{{Module<br />
|name=XPCShell Test Harness<br />
|description=The XPCShell Harness<br />
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]<br />
|peers=[mailto:jmaher@mozilla.com Joel Maher]<br />
|source_dirs=testing/xpcshell<br />
|components=Testing::XPCShell Harness<br />
}}<br />
<br />
{{Module<br />
|name=Update Service<br />
|description=server code for Mozilla Update services (aus, addons, pfs)<br />
|owner=Mike Morgan<br />
|peers=[mailto:jscott@mozilla.com Justin Scott], [mailto:shaver@mozilla.org Mike Shaver], [mailto:wclouser@mozilla.com Will Clouser]<br />
|group=dev-amo<br />
|source_dirs=webtools/addons/, webtools/aus/, webtools/update/<br />
|url=http://wiki.mozilla.org/wiki/AMO<br />
|components=AUS::Administration, AUS::Systems<br />
}}<br />
<br />
{{Module<br />
|name=View System<br />
|description=The View Manager is responsible for handling "heavyweight" rendering (some clipping, compositing) and event handling tasks.<br />
|owner=[mailto:mstange@themasta.com Markus Stange]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]<br />
|group=dev-tech-layout<br />
|source_dirs=view/<br />
|url=<br />
|components=Core::Layout: View Rendering<br />
}}<br />
<br />
{{Module<br />
|name=Web Audio<br />
|description=Support for the W3C Web Audio API specification.<br />
|owner=[mailto:padenot@mozilla.com Paul Adenot]<br />
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:robert@ocallahan.org Robert O'Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]<br />
|group=dev-platform<br />
|source_dirs=dom/media/webaudio<br />
|url=https://wiki.mozilla.org/Web_Audio_API<br />
|components=Core::Web Audio<br />
}}<br />
<br />
{{Module<br />
|name=Web Painting<br />
|description=painting, display lists, and layer construction<br />
|owner=[mailto:matt.woodrow@gmail.com Matt Woodrow]<br />
|peers=[mailto:robert@ocallahan.org Robert O'Callahan], [mailto:dbaron@dbaron.org David Baron], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:mstange@themasta.com Markus Stange]<br />
|group=dev-tech-layout<br />
|source_dirs= layout/painting, the display list and layer related methods on nsIFrame and its subclasses<br />
|url=http://mozilla.org/newlayout/doc/ ,<br />
http://lxr.mozilla.org/mozilla/source/layout/doc/<br />
|components=Core::Layout: Web Painting<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC<br />
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access<br />
|owner=[mailto:rjesup@mozilla.com Randell Jesup]<br />
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]<br />
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=N/A (see submodules "WebRTC Media" and "WebRTC Signaling")<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC<br />
}}<br />
<br />
{{Module<br />
|name=Widget<br />
|description=<br />
|owner=[mailto:vladimir@pobox.com Vladimir Vukicevic]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], <br />
|group=dev-platform<br />
|source_dirs=widget/, widget/xpwidgets/<br />
|url=<br />
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup<br />
}}<br />
<br />
{{Module<br />
|name=Widget - Android<br />
|description=The Android Port<br />
|owner=[mailto:blassey.bugs@lassey.us Brad Lassey]<br />
|peers=[mailto:jwillcox@mozilla.com James Willcox]<br />
|group=dev-platforms-mobile<br />
|source_dirs=widget/android/, embedding/android<br />
|url=<br />
|components=Core::Widget: Android<br />
}}<br />
<br />
{{Module<br />
|name=Widget - GTK<br />
|description=supported X widgetry and gfx<br />
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|group=dev-platform<br />
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/<br />
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/<br />
|components=Core::Widget: Gtk<br />
}}<br />
<br />
{{Module<br />
|name=Widget - OS X<br />
|description= Gecko's OS X compatibility layer.<br />
|owner=[mailto:mstange@themasta.com Markus Stange]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=widget/cocoa/<br />
|url=<br />
|components=Core::Widget: Cocoa<br />
}}<br />
<br />
{{Module<br />
|name=Widget - Windows<br />
|description=Windows widgets and desktop integration<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:jmathies@mozilla.com Jim Mathies]<br />
|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 'timeless' Soref], [mailto:robarnold@cmu.edu Rob Arnold]<br />
|group=dev-platform<br />
|source_dirs=widget/windows/<br />
|url=<br />
|components=Core::Widget: Win32<br />
}}<br />
<br />
{{Module<br />
|name=XBL<br />
|description=eXtensible Binding Language<br />
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|peers=[mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley], [mailto:jonas@sicking.cc Jonas Sicking]<br />
|ownersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]<br />
|group=dev-tech-xbl<br />
|source_dirs=dom/xbl/<br />
|url=http://www.mozilla.org/projects/xbl/<br />
|components=Core::XBL<br />
}}<br />
<br />
{{Module<br />
|name=XML<br />
|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.<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:erahm@mozilla.com Eric Rahm]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback]<br />
|group=dev-tech-xml<br />
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/<br />
|url=http://www.mozilla.org/newlayout/xml/<br />
|components=Core::XML<br />
}}<br />
<br />
{{Module<br />
|name=XPApps<br />
|description=Cross-Platform Applications, mostly Navigator front end and application shell.<br />
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]<br />
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|group=dev-apps-seamonkey<br />
|source_dirs=xpfe/<br />
|url=http://www.mozilla.org/xpapps/<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=XPCOM<br />
|description=The cross-platform object model and core data structures.<br />
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]<br />
|peers=[mailto:erahm@mozilla.com Eric Rahm]<br />
|ownersemeritus=Benjamin Smedberg<br />
|peersemeritus=[https://mozillians.org/en-US/u/dougt/ Doug Turner]<br />
|group=dev-platform<br />
|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/<br />
|url=http://developer.mozilla.org/en/XPCOM<br />
|components=Core::XPCOM<br />
}}<br />
<br />
{{Module<br />
|name=XPConnect<br />
|description=Deep Magic<br />
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:peterv@propagandism.org Peter Van der Beken], [mailto:mrbkap@gmail.com Blake Kaplan], [mailto:gkrizsanits@mozilla.com Gabor Krizsanits], [mailto:amccreight@mozilla.com Andrew McCreight]<br />
|peersemeritus=[mailto:gal@uci.edu Andreas Gal], [mailto:jstenback@gmail.com Johnny Stenback]<br />
|group=<br />
|source_dirs=js/xpconnect/<br />
|url=<br />
|components=Core::XPConnect<br />
}}<br />
<br />
{{Module<br />
|name=XPIDL<br />
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.<br />
|owner=[mailto:me@kylehuey.com Kyle Huey]<br />
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|group=dev-tech-xpcom<br />
|source_dirs=xpcom/typelib/<br />
|url=http://www.mozilla.org/scriptable/xpidl<br />
http://www.mozilla.org/scriptable<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=XPInstall<br />
|description=<br />
|owner=[mailto:dveditz@mozilla.com Dan Veditz]<br />
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]<br />
|group=dev-tech-xpinstall<br />
|source_dirs=xpinstall/<br />
|url=<br />
|components=Core::Installer: XPInstall Engine<br />
}}<br />
<br />
{{Module<br />
|name=XPToolkit<br />
|description=Cross-platform user interface toolkit<br />
|owner=<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:Jan.Varga@gmail.com Jan Varga]<br />
|group=dev-tech-xul<br />
|source_dirs=dom/xul/, layout/xul/<br />
|url=http://www.mozilla.org/xpfe/<br />
|components=Core::XP Toolkit/Widgets: Menus, Core::XP Toolkit/Widgets: XUL<br />
}}<br />
<br />
{{Module<br />
|name=XSLT Processor<br />
|description=XSLT transformations processor<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:erahm@mozilla.com Eric Rahm]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking]<br />
|group=dev-tech-xslt<br />
|source_dirs=dom/xslt/<br />
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html<br />
|components=Core::XSLT<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing<br />
|description=Cross platform sandboxing<br />
|owner=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]<br />
|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:jld@mozilla.com Jed Davis]<br />
|group=dev-platform <br />
|source_dirs=security/sandbox<br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - Windows <br />
|description=Sandboxing for the Windows platform <br />
|owner=[mailto:bowen@mozilla.com Bob Owen]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=security/sandbox/win <br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - OSX <br />
|description=Sandboxing for the OSX platform <br />
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]<br />
|peers=<br />
|group=dev-platform <br />
|source_dirs=security/sandbox/mac <br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - Linux & B2G<br />
|description=Sandboxing for the Linux & B2G platforms<br />
|owner=[mailto:jhector@mozilla.com Julian Hector]<br />
|peers=[mailto:jld@mozilla.com Jed Davis] [mailto:gcp@mozilla.com Gian-Carlo Pascutto]<br />
|group=dev-platform<br />
|source_dirs=security/sandbox/linux<br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
===Submodules===<br />
{{Module<br />
|name=Build Config - Fennec<br />
|description=Submodule of the build config covering Fennec's build system in mobile/android.<br />
|owner=[mailto:nalexander@mozilla.com Nicholas Alexander]<br />
|peers=Same as Build Config<br />
|group=dev-builds<br />
|components=Core::Build Config<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC Media<br />
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.<br />
|owner=[mailto:rjesup@mozilla.com Randell Jesup]<br />
|peers=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:jib@mozilla.com Jan-Ivar Bruaroey]<br />
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=/media/webrtc, /dom/media/webrtc<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC (Audio/Video)<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC Signaling<br />
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling<br />
|owner=[mailto:bcampen@mozilla.com Byron Campen]<br />
|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]<br />
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=/media/webrtc/signaling/<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC (Signaling)<br />
}}<br />
<br />
<br />
<noinclude><br />
<br />
===Unassigned Bugzilla Components===<br />
<br />
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):<br />
<br />
<pre><br />
Core::File Handling<br />
Core::Find Backend<br />
Core::Gecko Profiler<br />
Core::General<br />
Core::HTML: Form Submission<br />
Core::History: Global<br />
Core::Image Blocking<br />
Core::JavaScript Debugging APIs<br />
Core::Localization<br />
Core::Nanojit<br />
Core::Networking: Domain Lists<br />
Core::Print Preview<br />
Core::Printing: Output<br />
Core::Printing: Setup<br />
Core::Profile: BackEnd<br />
Core::Profile: Migration<br />
Core::Profile: Roaming<br />
Core::QuickLaunch (AKA turbo mode)<br />
Core::Rewriting and Analysis<br />
Core::Selection<br />
Core::Serializers<br />
Core::Spelling checker<br />
Core::Tracking<br />
Core::Web Services<br />
Core::WebDAV<br />
Core::Widget: OS/2<br />
Core::Widget: Photon<br />
Core::X-remote<br />
Core::XForms<br />
Core::XUL<br />
</pre><br />
</noinclude></div>Masayukihttps://wiki.mozilla.org/index.php?title=Modules/Core&diff=1143835Modules/Core2016-08-15T08:25:35Z<p>Masayuki: Adding "Editor" module owner and its peer</p>
<hr />
<div><noinclude><br />
'''Only module owners may edit this page.''' <br />
<br />
They may:<br />
<br />
* update any information about their module except the name of the owner<br />
* add or remove sub-modules<br />
* change the owner of a sub-module <br />
* add emeritus owners or peers<br />
<br />
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].<br />
</noinclude><br />
{{Module<br />
|name=Accessibility<br />
|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.<br />
|owner=[mailto:surkov.alexander@gmail.com Alexander Surkov]<br />
|peers=[mailto:bolterbugz@gmail.com David Bolter], [mailto:trev.saunders@gmail.com Trevor Saunders], [mailto:marco.zehe@googlemail.com Marco Zehe]<br />
|ownersemeritus=[mailto:aaron@moonset.net. Aaron Leventhal]<br />
|peersemeritus=[mailto:ginn.chen@oracle.com Ginn Chen], Evan Yan<br />
|group=dev-accessibility<br />
|source_dirs=accessible/<br />
|url=http://www.mozilla.org/access/<br />
|components=Core::Disability Access APIs<br />
}}<br />
<br />
{{Module<br />
|name=Browser WebAPI<br />
|description=Web API for rendering apps, browser windows and widgets.<br />
|owner=[mailto:kchen@mozilla.com Kan-Ru Chen]<br />
|peers=[mailto:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:fabrice@mozilla.com Fabrice Desré]<br />
|group=dev-webapi<br />
|source_dirs=dom/browser-element/<br />
|url=<br />
|components=Core::DOM<br />
}}<br />
<br />
{{Module<br />
|name=Build and Release Tools<br />
|description=Tools related to build and release automation and configuration of release builds.<br />
|owner=[mailto:nthomas@mozilla.com Nick Thomas]<br />
|peers=[mailto:bhearsum@mozilla.com Ben Hearsum], [mailto:coop@mozilla.com Chris Cooper]<br />
|group=release-engineering<br />
|source_dirs=browser/config/mozconfigs/, mobile/android/config/mozconfigs/, xulrunner/config/mozconfigs/, b2g/config/, tools/update-packaging/<br />
|url=https://wiki.mozilla.org/ReleaseEngineering<br />
|components=Release Engineering::*<br />
}}<br />
<br />
{{Module<br />
|name=Build Config<br />
|description=The build system for Gecko and several mozilla.org hosted Gecko-based applications.<br />
|owner=[mailto:gps@mozilla.com Gregory Szorc] (:gps)<br />
|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)<br />
|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]), <br />
|group=dev-builds<br />
|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/<br />
|url=http://www.mozilla.org/build/<br />
|components=Core::Build Config<br />
}}<br />
<br />
{{Module<br />
|name=Code Analysis and Debugging Tools<br />
|description=Tools for debugging Mozilla code or for analyzing speed, memory use, and other characteristics of it.<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=<br />
|group=dev-performance<br />
|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/, <br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Content HTTP Headers<br />
|description=HTTP headers related to content, e.g. User-Agent, Content-Type, Accept. (Transport-related headers are the responsibility of the Necko module owner.)<br />
|owner=[mailto:gerv@mozilla.org Gervase Markham]<br />
|peers=[mailto:lmandel@mozilla.com Lawrence Mandel]<br />
|group=dev-platform<br />
|source_dirs= <br />
|url=https://developer.mozilla.org/en/Gecko_user_agent_string_reference<br />
|components=Core::Networking: HTTP<br />
}}<br />
<br />
{{Module<br />
|name=Content Security<br />
|description=Native content-based security features, including: Content Security Policy (CSP), Mixed Content Blocker (MCB), Subresource Integrity (SRI) and CORS.<br />
|owner=[mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]<br />
|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] <br />
|group=dev-security<br />
|source_dirs=dom/security<br />
|components=Core::DOM: Security<br />
}}<br />
<br />
{{Module<br />
|name=Cookies and Permissions<br />
|description=<br />
|owner=Monica Chew<br />
|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)]<br />
|group=dev-tech-network<br />
|source_dirs=extensions/cookie/, netwerk/cookie/<br />
|url=<br />
|components=Core::Networking: Cookies<br />
}}<br />
{{Module<br />
|name=Cycle Collector<br />
|description=Code to break and collect objects within reference cycles<br />
|owner=[https://mozillians.org/en-US/u/mccr8/ Andrew McCreight]<br />
|peers=Peter Van der Beken, Olli Pettay, David Baron<br />
|source_dirs=xpcom/base/nsCycleCollector.* and some support headers<br />
|components=Core::XPCOM<br />
|group=dev-platform<br />
}}<br />
{{Module<br />
|name=docshell<br />
|description=<br />
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky]<br />
|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]<br />
|group=dev-tech-layout<br />
|source_dirs=docshell/, uriloader/<br />
|url=<br />
|components=Core::Document Navigation<br />
}}<br />
<br />
{{Module<br />
|name=Device Storage<br />
|description=Support for the device storage API<br />
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands] (:dhylands), [mailto:jvarga@mozilla.com Jan Varga] (:janv)<br />
|peers=<br />
|ownersemeritus=[mailto:doug.turner@gmail.com Doug Turner] (:dougt)<br />
|group=dev-tech-dom<br />
|source_dirs=dom/devicestorage/, dom/interfaces/devicestorage/<br />
|url=https://developer.mozilla.org/en-US/docs/WebAPI/Device_Storage<br />
|components=Core::DOM: Device Interfaces<br />
}}<br />
<br />
{{Module<br />
|name=Document Object Model<br />
|description=<br />
|owner=[mailto:jst@mozilla.org Johnny Stenback], [mailto:peterv@propagandism.org Peter Van der Beken]<br />
|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],<br />
[mailto:ehsan@mozilla.com Ehsan Akhgari], [mailto:bkelly@mozilla.com Ben Kelly]<br />
|group=dev-tech-dom<br />
|source_dirs=dom/*, except directories covered by other modules<br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM, Core::DOM: CSS Object Model, Core::DOM: Core & HTML<br />
}}<br />
<br />
{{Module<br />
|name=Event Handling<br />
|description=DOM Events and Event Handling <br />
|owner=[mailto:olli@pettay.fi Olli Pettay], [mailto:masayuki@d-toybox.com Masayuki Nakano]<br />
|group=dev-platform<br />
|source_dirs=dom/events and event handling related code elsewhere <br />
|url=http://developer.mozilla.org/en/docs/DOM<br />
|components=Core::DOM: Events, Core::Event Handling<br />
}}<br />
<br />
{{Module<br />
|name=Web Workers<br />
|description=<br />
|owner=[mailto:bent@mozilla.com Ben Turner]<br />
|peers=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey]<br />
|group=dev-platform<br />
|source_dirs=dom/workers/<br />
|url=https://developer.mozilla.org/En/Using_web_workers<br />
|components=Core::DOM: Workers<br />
}}<br />
<br />
{{Module<br />
|name=IndexedDB<br />
|description=<br />
|owner=[mailto:bent@mozilla.com Ben Turner]<br />
|peers=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:jvarga@mozilla.com Jan Varga]<br />
|group=dev-platform<br />
|source_dirs=dom/indexedDB/<br />
|url=https://developer.mozilla.org/en/IndexedDB<br />
|components=Core::DOM: IndexedDB<br />
}}<br />
<br />
{{Module<br />
|name=Editor<br />
|description=<br />
|owner=[mailto:masayuki@d-toybox.com Masayuki Nakano]<br />
|peers=[mailto:ayg@aryeh.name Aryeh Gregor]<br />
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|group=dev-platform<br />
|source_dirs=editor/<br />
|url=http://www.mozilla.org/editor/<br />
|components=Core::Editor<br />
}}<br />
<br />
{{Module<br />
|name=Embedding<br />
|description=<br />
|owner=[mailto:benjamin@smedbergs.us Benjamin Smedberg]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jst@mozilla.org Johnny Stenback]<br />
|group=dev-embedding<br />
|source_dirs=embedding/<br />
|url=<br />
|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<br />
}}<br />
<br />
{{Module<br />
|name=Find As You Type<br />
|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.<br />
|owner=<br />
|peers=<br />
|group=dev-accessibility<br />
|source_dirs=extensions/typeaheadfind/<br />
|url=http://www.mozilla.org/access/type-ahead/<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Geolocation<br />
|description=Implementation of the Geolocation W3C Spec, location provider apis, and wifi scanning code.<br />
|owner=[mailto:doug.turner@gmail.com Doug Turner]<br />
|peers=[mailto:josh@joshmatthews.net Josh Matthews], [mailto:kchen@mozilla.com Kan-Ru Chen], Garvan Keeley<br />
|group=dev-tech-dom<br />
|source_dirs=dom/geolocation, dom/system/, netwerk/wifi<br />
|url=https://developer.mozilla.org/En/Using_geolocation<br />
|components=Core::Geolocation<br />
}}<br />
<br />
{{Module<br />
|name=Global Key Bindings<br />
|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.<br />
|owner=Aaron Leventhal<br />
|peers=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]<br />
|group=dev-accessibility<br />
|source_dirs=dom/xbl/builtin/<br />
|url=http://www.mozilla.org/projects/ui/accessibility/mozkeyintro.html<br />
|components=Core::Keyboard: Navigation<br />
}}<br />
<br />
{{Module<br />
|name=Graphics<br />
|description=Mozilla graphics API<br />
|owner=[mailto:jrmuizel@mozilla.com Jeff Muizelaar](Thebes, QCMS, YCbCr, Cairo/Pixman, Regions, OS X, Other)<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|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)<br />
|group=dev-platform<br />
|source_dirs=gfx/, dom/canvas/<br />
|url=https://wiki.mozilla.org/Platform/GFX https://wiki.mozilla.org/Gecko:Layers https://wiki.mozilla.org/Gecko:2DGraphicsSketch<br />
|components=Core::Graphics, Core::Graphics: Layers, Core::Graphics: Text, Core::GFX: Color Management, Core::Canvas: 2D, Core::Canvas: WebGL<br />
}}<br />
<br />
{{Module<br />
|name=APZ (Graphics submodule)<br />
|description=Asynchronous panning and zooming<br />
|owner=[mailto:kgupta@mozilla.com Kartikaya Gupta]<br />
|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]<br />
|group=dev-platform<br />
|source=gfx/layers/apz<br />
|url=https://wiki.mozilla.org/Platform/GFX/APZ<br />
|components=Core::Panning and Zooming<br />
}}<br />
<br />
{{Module<br />
|name=Moz2D (Graphics submodule)<br />
|description=Platform independent 2D graphics API<br />
|owner=[mailto:bschouten@mozilla.com Bas Schouten]<br />
|peers=[mailto:jmuizelaar@mozilla.com Jeff Muizelaar], [mailto:gwright@mozilla.com George Wright], [mailto:jwatt@mozilla.com Jonathan Watt]<br />
|group=dev-platform<br />
|source=gfx/2d<br />
|url=https://wiki.mozilla.org/Platform/GFX/Moz2D<br />
|components=Core::Graphics<br />
}}<br />
<br />
<br />
{{Module<br />
|name=GTK Embedding Widget<br />
|description=Gtk Widget for embedding Mozilla into Gtk applications<br />
|owner=Marco Pesenti Gritti<br />
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:doug.turner@gmail.com Doug Turner]<br />
|group=dev-embedding<br />
|source_dirs=<br />
|url=<br />
|components=Core::Embedding: GTK Widget<br />
}}<br />
<br />
{{Module<br />
|name=Legacy HTML Parser<br />
|description=<br />
|owner=[mailto:mrbkap@gmail.com Blake Kaplan]<br />
|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]<br />
|group=dev-tech-dom<br />
|source_dirs=parser/htmlparser<br />
|url=http://www.mozilla.org/newlayout/doc/parser.html<br />
|components=Core::HTML: Parser<br />
}}<br />
<br />
{{Module<br />
|name=HAL<br />
|description=Hardware Abstraction Layer<br />
|owner=[https://mozillians.org/u/dhylands/ Dave Hylands]<br />
|peers=[mailto:gsvelto@mozilla.com Gabriele Svelto]<br />
|group=dev-platform<br />
|source_dirs=hal/<br />
|components=Core::Hardware Abstraction Layer (HAL)<br />
}}<br />
<br />
{{Module<br />
|name=HTML Parser<br />
|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++.<br />
|owner=[mailto:hsivonen@iki.fi Henri Sivonen]<br />
|peers=<br />
|group=dev-tech-dom<br />
|source_dirs=parser/html<br />
|url=http://about.validator.nu/<br />
|components=Core::HTML: Parser<br />
}}<br />
<br />
{{Module<br />
|name=I18N Library<br />
|description=<br />
|owner=[mailto:jshin1987@gmail.com Jungshik Shin], [mailto:smontagu@smontagu.org Simon Montagu]<br />
|peers=[mailto:VYV03354@nifty.ne.jp Masatoshi Kimura]<br />
|group=dev-i18n<br />
|source_dirs=intl/<br />
|url=http://mozilla.org/projects/intl/index.html<br />
|components=Core::Internationalization<br />
}}<br />
<br />
{{Module<br />
|name=ImageLib<br />
|description=<br />
|owner=[mailto:seth@mozilla.com Seth Fowler]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=media/libjpeg/, media/libpng/, image/, modules/zlib/<br />
|url=<br />
|components=Core::ImageLib<br />
}}<br />
<br />
{{Module<br />
|name=IPC<br />
|description=Message-passing between threads and processes<br />
|owner=[mailto:wmccloskey@mozilla.com Bill McCloskey]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=ipc/glue/, ipc/ipdl/, ipc/chromium/<br />
|url=<br />
|components=Core::IPC}}<br />
<br />
{{Module<br />
|name=JavaScript<br />
|description=JavaScript engine (SpiderMonkey)<br />
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]<br />
|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<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/src<br />
|url=http://www.mozilla.org/js/spidermonkey,<br />
http://developer.mozilla.org/en/docs/About_JavaScript<br />
|components=Core::JavaScript Engine<br />
}}<br />
<br />
{{Module<br />
|name=JavaScript JIT<br />
|description=JavaScript engine's JIT compilers (IonMonkey, Baseline)<br />
|owner=[mailto:jdemooij@mozilla.com Jan de Mooij]<br />
|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]<br />
|group=dev-tech-js-engine-internals<br />
|source_dirs=js/src/jit<br />
|url=http://www.mozilla.org/js/spidermonkey<br />
|components=Core::JavaScript Engine: JIT<br />
}}<br />
<br />
{{Module<br />
|name=JavaScript Debugger Backend<br />
|description=JavaScript debugging hooks<br />
|owner=[mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|peers=[mailto:brendan@mozilla.org Brendan Eich], [mailto:rginda@hacksrus.com Rob Ginda]<br />
|group=dev-apps-js-debugger<br />
|source_dirs=js/jsd/<br />
|url=http://www.mozilla.org/js/jsd<br />
|components=Other Applications::Venkman JS Debugger<br />
}}<br />
<br />
{{Module<br />
|name=jsat<br />
|description=Javascript screen reader that is used in Android and B2G<br />
|owner=[mailto:eitan@monotonous.org Eitan Isaacson]<br />
|peers=[mailto:yzenevich@mozilla.com Yura Zenevich]<br />
|group=dev-accessibility<br />
|source_dirs=accessible/jsat/<br />
|url=http://www.mozilla.org/access/<br />
|components=Core::Disability Access APIs<br />
}}<br />
<br />
{{Module<br />
|name=js-ctypes<br />
|description=A foreign function interface which allows privileged JS code to interact with binary code without using XPCOM/XPConnect.<br />
|owner=[mailto:jorendorff@mozilla.com Jason Orendorff]<br />
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:bobbyholley@gmail.com Bobby Holley]<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/src/ctypes/<br />
|url=https://wiki.mozilla.org/JSctypes<br />
|components=Core::js-ctypes<br />
}}<br />
<br />
{{Module<br />
|name=js-tests<br />
|description=JavaScript test suite<br />
|owner=[mailto:bclary@bclary.com Bob Clary]<br />
|peers=<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/tests/<br />
|url=http://www.mozilla.org/js/tests/library.html<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Layout Engine<br />
|description=rendering tree construction, layout (reflow), painting, etc.<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=[mailto:robert@ocallahan.org Robert O'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]<br />
|group=dev-tech-layout<br />
|source_dirs=layout/%, layout/base/, layout/build/, layout/doc/, layout/forms/, layout/generic/, layout/html/, layout/macbuild/, layout/printing/, layout/tables/, layout/tools/<br />
|url=http://mozilla.org/newlayout/doc/ ,<br />
http://lxr.mozilla.org/mozilla/source/layout/doc/<br />
|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 & A Pos, Core::Layout: Tables, Core::Layout: Text, Core::Layout: View Rendering, Core::Print Preview, Core::Printing: Output<br />
}}<br />
<br />
{{Module<br />
|name=libjar<br />
|description=The JAR handling code (protocol handler, stream implementation, and zipreader/zipwriter).<br />
|owner=[mailto:mwu@mozilla.com Michael Wu]<br />
|peers=[mailto:aklotz@mozilla.com Aaron Klotz]<br />
|group=dev-platform<br />
|source_dirs=modules/libjar<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=MathML<br />
|description=MathML is a low-level specification for describing mathematics which provides a foundation for the inclusion of mathematical expressions in Web pages.<br />
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]<br />
|peers=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|group=dev-tech-mathml<br />
|source_dirs=layout/mathml/<br />
|url=http://www.mozilla.org/projects/mathml/<br />
|components=Core::MathML<br />
}}<br />
<br />
{{Module<br />
|name=Media Playback<br />
|description=HTML Media APIs, including Media Source Extensions and non-MSE video/audio element playback, and Encrypted Media Extensions. (WebRTC and WebAudio not included).<br />
|owner=[mailto:cpearce@mozilla.com Chris Pearce]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|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]<br />
|group=dev-media<br />
|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/<br />
|url=<br />
|components=Core::Audio/Video<br />
}}<br />
<br />
{{Module<br />
|name=Media Transport<br />
|description=Pluggable transport for real-time media<br />
|owner=[mailto:ekr@rtfm.com Eric Rescorla]<br />
|peers=[mailto:bcampen@mozilla.com Byron Campen], [mailto:abr@mozilla.com Adam Roach]<br />
|group=dev-media<br />
|source_dirs=media/mtransport<br />
|url=<br />
|components=Core::WebRTC::Networking<br />
}}<br />
<br />
{{Module<br />
|name=Memory Allocator<br />
|description=Most things related to memory allocation in Gecko, including jemalloc, replace-malloc, DMD (dark matter detector), logalloc, etc.<br />
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|peers=[mailto:n.nethercote@gmail.com Nicholas Nethercote]<br />
|group=dev-platform<br />
|source_dirs=memory/<br />
|components=Core::DMD, Core::jemalloc<br />
}}<br />
<br />
{{Module<br />
|name=mfbt<br />
|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).<br />
|owner=[mailto:jwalden@mit.edu Jeff Walden]<br />
|peers=[mailto:froydnj@mozilla.com Nathan Froyd], [mailto:Ms2ger@gmail.com Ms2ger], [mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|group=dev-platform<br />
|source_dirs=mfbt/<br />
|url=<br />
|components=Core::MFBT<br />
}}<br />
<br />
{{Module<br />
|name=mozApps API & UI<br />
|description=Implementation of the navigator.mozApps API<br />
|owner=[mailto:fabrice@mozilla.com Fabrice Desré], [mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:myk@mozilla.org Myk Melez], [mailto:mar.castelluccio@studenti.unina.it Marco Castelluccio], [mailto:ferjmoreno@gmail.com Fernando Jiménez]<br />
|group=dev-webapi<br />
|source_dirs=dom/apps/, dom/interfaces/apps, product specific files implementing UI hooks.<br />
|url=<br />
|components=Core::DOM: Apps<br />
}}<br />
<br />
{{Module<br />
|name=Mozglue<br />
|description=Glue library containing various low-level functionality, including a dynamic linker for Android, a DLL block list for Windows, etc.<br />
|owner=[mailto:mh+mozilla@glandium.org Mike Hommey]<br />
|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)<br />
|group=dev-platform<br />
|source_dirs=mozglue/<br />
|components=Core::mozglue<br />
}}<br />
<br />
{{Module<br />
|name=mozilla-toplevel<br />
|description=The top level directory for the mozilla tree.<br />
|owner=[mailto:brendan@mozilla.org Brendan Eich]<br />
|peers=<br />
|group=<br />
|source_dirs=tools/README<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Necko<br />
|description=The Mozilla Networking Library<br />
|owner=[mailto:mcmanus@ducksong.com Patrick McManus]<br />
|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 ]<br />
|peersemeritus= [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:sworkman@mozilla.com Steve Workman]<br />
|group=dev-tech-network<br />
|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/<br />
|url=http://www.mozilla.org/projects/netlib/, https://developer.mozilla.org/en/Necko<br />
|components=Core::Networking, Core::Networking: Cache, Core::Networking: Cookies, Core::Networking: FTP, Core::Networking: File, Core::Networking: HTTP, Core::Networking: JAR, Core::Networking: Websockets<br />
}}<br />
<br />
{{Module<br />
|name=NSPR<br />
|description=Netscape Portable Runtime<br />
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]<br />
|peers=[mailto:wtc@google.com Wan-Teh Chang], [mailto:mh@glandium.org Mike Hommey], [mailto:kaie@kuix.de Kai Engert]<br />
|group=dev-tech-nspr<br />
|source_dirs=nsprpub/<br />
|url=http://www.mozilla.org/projects/nspr/<br />
http://www.mozilla.org/projects/nspr/reference/html/<br />
http://www.mozilla.org/projects/nspr/release-notes/<br />
|components=NSPR<br />
}}<br />
<br />
{{Module<br />
|name=PDF<br />
|description=Rendering code to display documents encoded in the ISO 32000-1 `PDF' format.<br />
|owner=Chris Jones, Andreas Gal<br />
|peers=[mailto:aadib@mozilla.com Artur Adib], [mailto:bdahl@mozilla.com Brendan Dahl], [mailto:vnicolas@mozilla.com Vivien Nicolas]<br />
|group=dev-platform<br />
|source_dirs=media/pdf/<br />
|url=https://github.com/mozilla/pdf.js<br />
|components=Core::PDF<br />
}}<br />
<br />
{{Module<br />
|name=Plugins<br />
|description= NPAPI Plugin support.<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|peers=[mailto:jst@mozilla.org Johnny Stenback], [mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:joshmoz@gmail.com Josh Aas]<br />
|peersemeritus=[mailto:john@pointysoftware.net John Schoenick], [mailto:robert@ocallahan.org Robert O'Callahan]<br />
|group=<br />
|source_dirs=dom/plugins/, modules/plugin/<br />
|url=https://wiki.mozilla.org/Plugins<br />
|components=Core::Plug-ins<br />
}}<br />
<br />
{{Module<br />
|name=Preferences<br />
|description=Preference library<br />
|owner=<br />
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]<br />
|group=dev-platform<br />
|source_dirs=modules/libpref/<br />
|url=<br />
|components=Core::Preferences: Backend<br />
}}<br />
<br />
{{Module<br />
|name=Private Browsing<br />
|description=Implementation of the Private Browsing mode, and the integration of other modules with Private Browsing APIs.<br />
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:josh@joshmatthews.net Josh Matthews]<br />
|group=dev-platform<br />
|source_dirs=Implementation and consumers of Private Browsing APIs in nsILoadContext, nsIPrivateBrowsingChannel, PrivateBrowsingUtils.jsm and the related glue code. <br />
|url=https://wiki.mozilla.org/Private_Browsing<br />
|components=Firefox::Private Browsing<br />
}}<br />
<br />
{{Module<br />
|name=Privilege Manager<br />
|description="caps"<br />
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|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]<br />
|group=dev-tech-dom<br />
|source_dirs=caps/<br />
|url=http://www.mozilla.org/projects/security/components/index.html<br />
|components=Core::Security: CAPS<br />
}}<br />
<br />
{{Module<br />
|name=Push Notifications<br />
|description=Push is a way for application developers to send messages to their web applications.<br />
|owner=[mailto:doug.turner@gmail.com Doug Turner]<br />
|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]<br />
|group=<br />
|source_dirs=dom/push, dom/simplepush<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=PyXPCOM<br />
|description=The Python to XPCOM bridge.<br />
|owner=Todd Whiteman<br />
|peers=[mailto:mhammond@skippinet.com.au Mark Hammond]<br />
|group=<br />
|source_dirs=extension/python<br />
|url=https://developer.mozilla.org/en/PyXPCOM<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Qt-based gfx and widget<br />
|description=Qt-based rendering and widget code<br />
|owner=[mailto:romaxa@gmail.com Oleg Romashin]<br />
|peers=[mailto:mozilla@rosenauer.org Wolfgang Rosenauer], [mailto:doug.turner@gmail.com Doug Turner]<br />
|group=dev-tech-widget<br />
|source_dirs=widget/qt/<br />
|url=<br />
|components=Core::Widget: Qt<br />
}}<br />
<br />
{{Module<br />
|name=RDF<br />
|description=<br />
|owner=[mailto:axel@pike.org Axel Hecht]<br />
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]<br />
|group=dev-tech-rdf<br />
|source_dirs=rdf/<br />
|url=http://www.mozilla.org/rdf/doc/<br />
|components=Core::RDF<br />
}}<br />
<br />
{{Module<br />
|name=security<br />
|description=Crypto/PKI code, including NSS (Network Security Services) and JSS (NSS for Java)<br />
|owner=[mailto:rrelyea@redhat.com Bob Relyea], [mailto:wtc@google.com Wan-Teh Chang]<br />
|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]<br />
|group=dev-tech-crypto<br />
|source_dirs=dbm/, security/coreconf/, security/dbm/, security/jss/, security/nss/, security/tinderbox/, security/tinderlight/<br />
|url=http://mozilla.org/projects/security/pki/<br />
|components=NSS, JSS, Core::Security, Core::Security: S/MIME<br />
}}<br />
<br />
{{Module<br />
|name=Security - Mozilla PSM Glue<br />
|description=Personal Security Manager<br />
|owner=[mailto:dkeeler@mozilla.com David Keeler]<br />
|peers=[mailto:honzab.moz@firemni.cz Honza Bambas], [mailto:cykesiopka.bmo@gmail.com Cykesiopka]<br />
|group=dev-tech-crypto<br />
|source_dirs=security/manager/<br />
|url=<br />
|components=Core::Security: PSM, Core::Security: UI<br />
}}<br />
<br />
{{Module<br />
|name=Static analysis & rewriting for C++<br />
|description=Tools for checking C++ code looking for problems at compile time, plus tools for automated rewriting of C++ code.<br />
|owner=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=build/clang-plugin, tools/rewriting among other out of tree tools<br />
|url=<br />
|components=Core::Rewriting & Analysis<br />
}}<br />
{{Module<br />
|name=storage<br />
|description=Storage APIs with a SQLite backend<br />
|owner=[mailto:mak77@bonardo.net Marco Bonardo]<br />
|peers=[mailto:bugmail@asutherland.org Andrew Sutherland], [mailto:bent.mozillla@gmail.com Ben Turner]<br />
|group=dev-platform<br />
|source_dirs=db/sqlite3/, storage/<br />
|url=http://developer.mozilla.org/en/docs/Storage<br />
|components=Toolkit::Storage, Core::SQL<br />
}}<br />
<br />
{{Module<br />
|name=String<br />
|description=<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:jlebar@mozilla.com Justin Lebar]<br />
|group=dev-tech-xpcom<br />
|source_dirs=string/, xpcom/string/<br />
|url=https://developer.mozilla.org/En/Mozilla_internal_string_guide<br />
|components=Core::String<br />
}}<br />
<br />
{{Module<br />
|name=Style System<br />
|description=CSS style sheet handling; style data computation<br />
|owner=[mailto:dbaron@dbaron.org David Baron]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:cam@mcc.id.au Cameron McCormack]<br />
|group=dev-tech-layout<br />
|source_dirs=layout/style/<br />
|url=https://wiki.mozilla.org/Gecko:Overview#Style_System<br />
|components=Core::CSS Parsing and Computation<br />
}}<br />
<br />
{{Module<br />
|name=SVG<br />
|description=Scalable Vector Graphics<br />
|owner=[mailto:jwatt@jwatt.org Jonathan Watt]<br />
|peers=[mailto:longsonr@gmail.com Robert Longson], [mailto:robert@ocallahan.org Robert O'Callahan], [mailto:dholbert@mozilla.com Daniel Holbert], [mailto:birtles@gmail.com Brian Birtles]<br />
|group=dev-tech-svg<br />
|source_dirs=dom/svg/, layout/svg/, dom/smil/<br />
|url=https://developer.mozilla.org/en-US/docs/Web/SVG<br />
|components=Core::SVG<br />
}}<br />
<br />
{{Module<br />
|name=Tamarin<br />
|description=VM for ActionScript and JavaScript<br />
|owner=Edwin Smith, [mailto:jodyer@adobe.com Jeff Dyer]<br />
|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]<br />
|group=dev-tech-js-engine<br />
|source_dirs=js/tamarin<br />
|url=http://www.mozilla.org/projects/tamarin/<br />
http://wiki.mozilla.org/tamarin/<br />
http://hg.mozilla.org/tamarin-central/<br />
http://hg.mozilla.org/tamarin-tracing/<br />
|components=Tamarin<br />
}}<br />
<br />
{{Module<br />
|name=Test Harness<br />
|description=In-tree test infrastructure and tools. Harnesses include, XPCShell, Mochitest (& Chrome), Reftest, JsREftest, Compiled Code Tests, Robocop, Mozmill, Marionette, Firefox UI Tests. Requests for new harnesses should go to Testing::General.<br />
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]<br />
|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), <br />
<br />
|group=dev-quality<br />
|source_dirs=/testing<br />
|url=http://wiki.mozilla.org/SoftwareTesting<br />
|components=Testing::General, Testing::Mochitest, Testing::Mochitest Chrome, Testing::Marionette, Testing::Mozmill, Testing::Reftest, Testing::XPCShell Harness, Testing::httpd.js<br />
}}<br />
<br />
{{Module<br />
|name=Testing Infrastructure<br />
|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<br />
|owner=[mailto:jmaher@mozilla.com Joel Maher]<br />
|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é]<br />
|group=dev-quality<br />
|source_dirs=testing/, tools/httptester/, tools/page-loader/, tools/test-harness/, tools/tests/, tools/testserver/, tools/testy/<br />
|url=http://wiki.mozilla.org/SoftwareTesting<br />
|components=Testing::Infrastructure<br />
}}<br />
<br />
{{Module<br />
|name=JS Marionette<br />
|description=NodeJS test harness, marionette client, and other utilities for running marionette tests (submodule of Test Infrastructure)<br />
|owner=[mailto:jlal@mozilla.com James Lal] <lightsofapollo>, [mailto:gaye@mozilla.com Gareth Aye] <gaye><br />
|peers=[mailto:aus@mozilla.com Ghislain "Aus" Lacroix] <auswerk><br />
|source_dirs=gaia/tests/jsmarionette<br />
|components=Testing::JSMarionette<br />
|group=dev-gaia<br />
}}<br />
<br />
{{Module<br />
|name=XPCShell Test Harness<br />
|description=The XPCShell Harness<br />
|owner=[mailto:ted@mielczarek.org Ted Mielczarek]<br />
|peers=[mailto:jmaher@mozilla.com Joel Maher]<br />
|source_dirs=testing/xpcshell<br />
|components=Testing::XPCShell Harness<br />
}}<br />
<br />
{{Module<br />
|name=Update Service<br />
|description=server code for Mozilla Update services (aus, addons, pfs)<br />
|owner=Mike Morgan<br />
|peers=[mailto:jscott@mozilla.com Justin Scott], [mailto:shaver@mozilla.org Mike Shaver], [mailto:wclouser@mozilla.com Will Clouser]<br />
|group=dev-amo<br />
|source_dirs=webtools/addons/, webtools/aus/, webtools/update/<br />
|url=http://wiki.mozilla.org/wiki/AMO<br />
|components=AUS::Administration, AUS::Systems<br />
}}<br />
<br />
{{Module<br />
|name=View System<br />
|description=The View Manager is responsible for handling "heavyweight" rendering (some clipping, compositing) and event handling tasks.<br />
|owner=[mailto:mstange@themasta.com Markus Stange]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:dbaron@dbaron.org David Baron]<br />
|group=dev-tech-layout<br />
|source_dirs=view/<br />
|url=<br />
|components=Core::Layout: View Rendering<br />
}}<br />
<br />
{{Module<br />
|name=Web Audio<br />
|description=Support for the W3C Web Audio API specification.<br />
|owner=[mailto:padenot@mozilla.com Paul Adenot]<br />
|ownersemeritus=[mailto:ehsan@mozilla.com Ehsan Akhgari]<br />
|peers=[mailto:robert@ocallahan.org Robert O'Callahan], [mailto:karlt+@karlt.net Karl Tomlinson]<br />
|group=dev-platform<br />
|source_dirs=dom/media/webaudio<br />
|url=https://wiki.mozilla.org/Web_Audio_API<br />
|components=Core::Web Audio<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC<br />
|description=WebRTC is responsible for realtime audio and video communication, as well as related issues like low-level camera and microphone access<br />
|owner=[mailto:rjesup@mozilla.com Randell Jesup]<br />
|peers=[mailto:ekr@mozilla.com Eric Rescorla], [mailto:bcampen@mozilla.com Byron Campen] [mailto:abr@mozilla.com Adam Roach]<br />
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=N/A (see submodules "WebRTC Media" and "WebRTC Signaling")<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC<br />
}}<br />
<br />
{{Module<br />
|name=Widget<br />
|description=<br />
|owner=[mailto:vladimir@pobox.com Vladimir Vukicevic]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|peersemeritus=[mailto:pavlov@pavlov.net Stuart Parmenter], <br />
|group=dev-platform<br />
|source_dirs=widget/, widget/xpwidgets/<br />
|url=<br />
|components=Core::Drag and Drop, Core::Widget, Core::Printing: Setup<br />
}}<br />
<br />
{{Module<br />
|name=Widget - Android<br />
|description=The Android Port<br />
|owner=[mailto:blassey.bugs@lassey.us Brad Lassey]<br />
|peers=[mailto:jwillcox@mozilla.com James Willcox]<br />
|group=dev-platforms-mobile<br />
|source_dirs=widget/android/, embedding/android<br />
|url=<br />
|components=Core::Widget: Android<br />
}}<br />
<br />
{{Module<br />
|name=Widget - GTK<br />
|description=supported X widgetry and gfx<br />
|owner=[mailto:karlt+@karlt.net Karl Tomlinson]<br />
|ownersemeritus=[mailto:robert@ocallahan.org Robert O'Callahan]<br />
|group=dev-platform<br />
|source_dirs=widget/gtk/, widget/gtk2/, widget/gtksuperwin/, widget/gtkxtbin/<br />
|url=http://www.mozilla.org/unix/, http://www.gtk.org, http://www.mozilla.org/ports/gtk/<br />
|components=Core::Widget: Gtk<br />
}}<br />
<br />
{{Module<br />
|name=Widget - OS X<br />
|description= Gecko's OS X compatibility layer.<br />
|owner=[mailto:mstange@themasta.com Markus Stange]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=widget/cocoa/<br />
|url=<br />
|components=Core::Widget: Cocoa<br />
}}<br />
<br />
{{Module<br />
|name=Widget - Windows<br />
|description=Windows widgets and desktop integration<br />
|owner=[mailto:jmathies@mozilla.com Jim Mathies]<br />
|peers=[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:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:robarnold@cmu.edu Rob Arnold], [mailto:vladimir@pobox.com Vladimir Vukicevic]<br />
|peersemeritus=[mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|group=dev-platform<br />
|source_dirs=widget/windows/<br />
|url=<br />
|components=Core::Widget: Win32<br />
}}<br />
<br />
{{Module<br />
|name=XBL<br />
|description=eXtensible Binding Language<br />
|owner=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking]<br />
|peers=[mailto:mrbkap@gmail.com Blake Kaplan], [mailto:bobbyholley@gmail.com Bobby Holley]<br />
|group=dev-tech-xbl<br />
|source_dirs=dom/xbl/<br />
|url=http://www.mozilla.org/projects/xbl/<br />
|components=Core::XBL<br />
}}<br />
<br />
{{Module<br />
|name=XML<br />
|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.<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:jst@mozilla.org Johnny Stenback]<br />
|group=dev-tech-xml<br />
|source_dirs=dom/xml/, extensions/xmlextras/, parser/expat/<br />
|url=http://www.mozilla.org/newlayout/xml/<br />
|components=Core::XML<br />
}}<br />
<br />
{{Module<br />
|name=XPApps<br />
|description=Cross-Platform Applications, mostly Navigator front end and application shell.<br />
|owner=[mailto:neil@parkwaycc.co.uk Neil Rashbrook]<br />
|peers=[mailto:dean_tessman@hotmail.com Dean Tessman], [mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|group=dev-apps-seamonkey<br />
|source_dirs=xpfe/<br />
|url=http://www.mozilla.org/xpapps/<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=XPCOM<br />
|description=The cross-platform object model and core data structures.<br />
|owner=[https://mozillians.org/en-US/u/froydnj/ Nathan Froyd]<br />
|peers=[https://mozillians.org/en-US/u/dougt/ Doug Turner], [https://mozillians.org/en-US/u/bsmedberg/ Benjamin Smedberg]<br />
|group=dev-platform<br />
|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/<br />
|url=http://developer.mozilla.org/en/XPCOM<br />
|components=Core::XPCOM<br />
}}<br />
<br />
{{Module<br />
|name=XPConnect<br />
|description=Deep Magic<br />
|owner=[mailto:bobbyholley@gmail.com Bobby Holley]<br />
|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]<br />
|peersemeritus=[mailto:gal@uci.edu Andreas Gal]<br />
|group=<br />
|source_dirs=js/xpconnect/<br />
|url=<br />
|components=Core::XPConnect<br />
}}<br />
<br />
{{Module<br />
|name=XPIDL<br />
|description=Cross-platform IDL compiler; produces .h C++ header files and .xpt runtime type description files from .idl interface description files.<br />
|owner=[mailto:me@kylehuey.com Kyle Huey]<br />
|peersemeritus=[mailto:shaver@mozilla.org Mike Shaver], [mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|group=dev-tech-xpcom<br />
|source_dirs=xpcom/typelib/<br />
|url=http://www.mozilla.org/scriptable/xpidl<br />
http://www.mozilla.org/scriptable<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=XPInstall<br />
|description=<br />
|owner=[mailto:dveditz@mozilla.com Dan Veditz]<br />
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg]<br />
|group=dev-tech-xpinstall<br />
|source_dirs=xpinstall/<br />
|url=<br />
|components=Core::Installer: XPInstall Engine<br />
}}<br />
<br />
{{Module<br />
|name=xptcall<br />
|description=XPTCall - platform-specific assembly for calling and implementing arbitrary XPCOM interfaces.<br />
|owner=<br />
|ownersemeritus=[mailto:timeless@mozdev.org Josh 'timeless' Soref]<br />
|peers=[mailto:benjamin@smedbergs.us Benjamin Smedberg], [mailto:shaver@mozilla.org Mike Shaver]<br />
|group=dev-xpcom<br />
|source_dirs=xpcom/reflect/xptcall/<br />
|url=http://www.mozilla.org/scriptable/xptcall-faq.html<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=XPToolkit<br />
|description=Cross-platform user interface toolkit<br />
|owner=<br />
|peers=[mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:Jan.Varga@gmail.com Jan Varga]<br />
|group=dev-tech-xul<br />
|source_dirs=dom/xul/, layout/xul/<br />
|url=http://www.mozilla.org/xpfe/<br />
|components=Core::XP Toolkit/Widgets: Menus, Core::XP Toolkit/Widgets: XUL<br />
}}<br />
<br />
{{Module<br />
|name=XSLT Processor<br />
|description=XSLT transformations processor<br />
|owner=[mailto:peterv@propagandism.org Peter Van der Beken]<br />
|peers=[mailto:axel@pike.org Axel Hecht], [mailto:jonas@sicking.cc Jonas Sicking]<br />
|group=dev-tech-xslt<br />
|source_dirs=dom/xslt/<br />
|url=http://www.mozilla.org/projects/xslt/, http://www.w3.org/TR/xslt.html<br />
|components=Core::XSLT<br />
}}<br />
<br />
{{Module<br />
|name=XTF<br />
|description=eXtensible Tag Framework<br />
|owner=<br />
|peers=[mailto:alex@croczilla.com alex@croczilla.com], [mailto:bzbarsky@mit.edu Boris Zbarsky], [mailto:jonas@sicking.cc Jonas Sicking]<br />
|group=dev-tech-xbl<br />
|source_dirs=content/xtf/, layout/xtf/<br />
|url=http://www.croczilla.com/bits_and_pieces/xtf/<br />
|components=Core::XTF<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing<br />
|description=Cross platform sandboxing<br />
|owner=[mailto:gcp@mozilla.com Gian-Carlo Pascutto]<br />
|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]<br />
|group=dev-platform <br />
|source_dirs=security/sandbox<br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - Windows <br />
|description=Sandboxing for the Windows platform <br />
|owner=[mailto:bowen@mozilla.com Bob Owen]<br />
|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]<br />
|group=dev-platform<br />
|source_dirs=security/sandbox/win <br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - OSX <br />
|description=Sandboxing for the OSX platform <br />
|owner=[mailto:haftandilian@mozilla.com Haik Aftandilian]<br />
|peers=<br />
|group=dev-platform <br />
|source_dirs=security/sandbox/mac <br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
{{Module<br />
|name=Sandboxing - Linux & B2G<br />
|description=Sandboxing for the Linux & B2G platforms<br />
|owner=[mailto:jhector@mozilla.com Julian Hector]<br />
|peers=[mailto:jld@mozilla.com Jed Davis] [mailto:gcp@mozilla.com Gian-Carlo Pascutto]<br />
|group=dev-platform<br />
|source_dirs=security/sandbox/linux<br />
|url=https://wiki.mozilla.org/Security/Sandbox <br />
|components=Core::Security: Process Sandboxing<br />
}}<br />
<br />
===Submodules===<br />
{{Module<br />
|name=Build Config - Fennec<br />
|description=Submodule of the build config covering Fennec's build system in mobile/android.<br />
|owner=[mailto:gps@mozilla.com Gregory Szorc]<br />
|peers=Same as Build Config plus [mailto:nalexander@mozilla.com Nicholas Alexander].<br />
|group=dev-builds<br />
|components=Core::Build Config<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC Media<br />
|description=Submodule of WebRTC responsible for access to media input devices (microphones, cameras, screen capture), as well as realtime audiovisual codecs and packetization.<br />
|owner=[mailto:rjesup@mozilla.com Randell Jesup]<br />
|peers=[mailto:pkerr@mozilla.com Paul Kerr], [mailto:jib@mozilla.com Jan-Ivar Bruaroey]<br />
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=/media/webrtc, /dom/media/webrtc<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC (Audio/Video)<br />
}}<br />
<br />
{{Module<br />
|name=WebRTC Signaling<br />
|description=Submodule of WebRTC responsible for implementation of PeerConnection API, WebRTC identity, and SDP/JSEP handling<br />
|owner=[mailto:bcampen@mozilla.com Byron Campen]<br />
|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]<br />
|peersemeritus=[mailto:ehugg@cisco.com Ethan Hugg]<br />
|group=dev-media<br />
|source_dirs=/media/webrtc/signaling/<br />
|url=https://wiki.mozilla.org/Media/webrtc<br />
|components=Core::WebRTC (Signaling)<br />
}}<br />
<br />
<br />
<noinclude><br />
<br />
===Unassigned Bugzilla Components===<br />
<br />
The following Bugzilla components in the Core project have not been assigned to a module (this list is not exhaustive):<br />
<br />
<pre><br />
Core::File Handling<br />
Core::Find Backend<br />
Core::Gecko Profiler<br />
Core::General<br />
Core::HTML: Form Submission<br />
Core::History: Global<br />
Core::Image Blocking<br />
Core::JavaScript Debugging APIs<br />
Core::Localization<br />
Core::Nanojit<br />
Core::Networking: Domain Lists<br />
Core::Print Preview<br />
Core::Printing: Output<br />
Core::Printing: Setup<br />
Core::Profile: BackEnd<br />
Core::Profile: Migration<br />
Core::Profile: Roaming<br />
Core::QuickLaunch (AKA turbo mode)<br />
Core::Rewriting and Analysis<br />
Core::Selection<br />
Core::Serializers<br />
Core::Spelling checker<br />
Core::Tracking<br />
Core::Web Services<br />
Core::WebDAV<br />
Core::Widget: OS/2<br />
Core::Widget: Photon<br />
Core::X-remote<br />
Core::XForms<br />
Core::XUL<br />
</pre><br />
</noinclude></div>Masayukihttps://wiki.mozilla.org/index.php?title=Summit2013/Experiences/signups&diff=717810Summit2013/Experiences/signups2013-09-30T07:40:15Z<p>Masayuki: /* Great America */</p>
<hr />
<div>Please sign up below.<br />
<br />
'''UPDATE:''' There are many folks who are also asking if they can add sessions to this. The answer is yes! And, there will also be white boards and post its in the main area of each venue for you to propose/add organic social sessions there as well. Sessions which are full have been moved to a separate page to make the page shorter for editing.<br />
<br />
=Santa Clara=<br />
==Friday ==<br />
=== Photo Walk ===<br />
<br />
If you are interested in an early morning [6:30am] tour in the beautiful Silicon Valley, you are in luck! [https://mozillians.org/en-US/u/Ludovic Ludovic Hirlimann] and [https://mozillians.org/en-US/u/rolandtanglao Roland Tanglao]<br />
<br />
More information here: http://sietch-tabr.tumblr.com/post/60429342277/extra-summit-activity-part-1-santa-clara-photowalks<br />
<br />
Sign Up Here: <br />
<table border=1><tr><th colspan=2>Name</th></tr><br />
<tr><td>Oarabile Mudongo</td><td>Jaydev Ajit Kumar</td></tr><br />
<tr><td>Bill Walker</td><td>Viking KARWUR</td></tr><br />
<tr><td>Muhammad Mehmood Ali</td><td>Asad Sajjad</td></tr><br />
<tr><td>Shazia Rizwan</td><td>Nagasahas DS </td></tr><br />
<tr><td>Abdul Rauf</td><td>Jemmy RORONG</td></tr><br />
<tr><td>Finan AKBAR</td><td>Dimas ANDHANA</td></tr><br />
<tr><td>Fauzan ALFI</td><td>Artanto ISHAAM</td></tr><br />
<tr><td>Kalpa Welivitigoda</td><td>Ashkary Rahman</td></tr><br />
<tr><td>Irayani Queencyputri</td><td>Eriska Triana Primayasari</td></tr><br />
<tr><td>Deryan Everestha Maured</td><td>Nuri Abidin</td></tr><br />
<tr><td>Rahmat Dwi Jatmiko</td><td>Andi Darmawan</td></tr><br />
<tr><td>I Gede Bagus Kosha</td><td>Sayak Sarkar</td></tr><br />
<tr><td>Shahrin Hossain</td><td>Soumya Deb</td></tr><br />
<tr><td>Sankha Narayan Guria</td><td>Swarnava Sengupta</td></tr><br />
<tr><td>Avik Pal</td><td>Gaurab Patra</td></tr><br />
<tr><td>Diwanshi Pandey</td><td>Subhashish Kundu</td></tr><br />
<tr><td>Shafiul Azam Chowdhury</td><td>Rahid Hasan</td></tr><br />
<tr><td>Hilary Ho Jia Hao</td><td>Gauthamraj Elango</td></tr><br />
<tr><td>Jayakumar Sadhasivam</td><td>Md Aminul Islam Sajib</td></tr><br />
<tr><td>Md Golam Mostafa</td><td>[[user:maktrix|Mahay Alam Khan]]</td></tr><br />
<tr><td>[[user:Rifaz|Rifaz Nahiyan]]</td><td>Zobayer Ahmed Khan</td></tr><br />
<tr><td>Benny Chandra</td><td>Yoe One Ariestya Niovitta</td></tr><br />
<tr><td>Rizqinofa Putra M</td><td>Gasper Derzanic</td></tr><br />
<tr><td>Atul Jangra</td><td>Akshay Aurora</td></tr><br />
<tr><td>Aji Kisworo Mukti</td><td>[[user:ahsan.net|Mashkawat Ahsan]]</td></tr><br />
<tr><td>Matjaž Horvat</td><td>[[user:rok.samsa|Rok Samsa]]</td></tr><br />
<tr><td>[[user:mythrobin|Robin Mehdee]]</td><td>Rohan Dasanayaka</td></tr><br />
<tr><td>Anup Kumar Mishra</td><td>Ankit Gadgil</td></tr><br />
<tr><td>Ajay Kumar</td><td>Ankit Kumar Mishra</td></tr><br />
<tr><td>Parmpreet Singh</td><td>Gary Chen</td></tr><br />
<tr><td>Clarice Wang</td><td>[[user:RodrigoPadula|Rodrigo Padula]]</td></tr><br />
<tr><td>Dominic Kuo</td><td>Steve Chung</td></tr><br />
<tr><td>Kate Huang</td><td>Linear Li</td></tr><br />
<tr><td>Yuren Ju</td><td>Kan-Ru Chen (:kanru)</td></tr><br />
<tr><td>Szu-Yu Chen (:aknow)</td><td>Goran Kohek</td></tr><br />
<tr><td>Soumya Kanti Chakraborty</td><td>Jon Buckley</td></tr><br />
<tr><td>Rizky Ariestiyansyah</td><td>Ani Peter</td></tr><br />
<tr><td>Alex Lakatos</td><td>Marcela Oniga</td></tr><br />
<tr><td>Sammy Fung</td><td>Kengatharaiyer Sarveswaran (Sarves)</td></tr><br />
<tr><td>Jim Chen (:jchen)</td><td>Muhammad Syafiq Mazli (:syafiqmazli)</td></tr><br />
<tr><td>Mohamed Aidid Jaafar (:aidid)</td><td>Haryati Salehin (:yadyadun)</td></tr><br />
<tr><td>Lai Chen Haw (:chenhaw)</td><td>Rishabh Narayan</td></tr><br />
<tr><td>Manoj Kumar Giri</td><td>Shankar Prasad (:shanky)</td></tr><br />
<tr><td>Sandeep Shedmake</td><td>Krishnababu K (:Krishna)</td></tr><br />
<tr><td>Grigorios Petsos</td><td>Benjamin Pokharel</td></tr><br />
<tr><td>[[user:Ashickurnoor|Ashickur Rahman]]</td><td>Luigi Tedone</td></tr><br />
<tr><td>Michael Comella (:mcomella)</td><td>[[user:Bobreyes|Robert 'Bob' Reyes]]</td></tr><br />
<tr><td>Kevin John Ventura (:kjventura)</td><td>Kathrine Faye Tandog</td></tr><br />
<tr><td>Kathleen Joyce Domanog</td><td>Erika Aurea Gatmaitan</td></tr><br />
<tr><td>Michelle Anne Santos</td><td>Arun Balachandran Ganesan (:abc)</td></tr><br />
<tr><td>Kevin Ngo (:ngoke/:kngo)</td><td>Cherlowe Reinard Ramirez</td></tr><br />
<tr><td>Mark Giffin (markg)</td><td>Marcus Ang</td></tr><br />
<tr><td>Cervantes Yu</td><td>Aditya Fitri Hananta Putra</td></tr><br />
<tr><td>John Daggett</td><td>PATIL Kailas Ravsaheb</td></tr><br />
<tr><td>Vaibhav Bajaj</td><td>Komal Gandhi</td></tr><br />
<tr><td>Ajay Jogawath</td><td>Jafar Muhammed</td></tr><br />
<tr><td>Srikar Ananthula</td><td>Sai Kiran Alagundula</td></tr><br />
<tr><td> Raghuram K</td><td> Srikanth Namu</td></tr><br />
<tr><td> Sandraghassen Subbaraya Pillai</td><td> André Reinald</td></tr><br />
<tr><td>Remco Kaptein</td><td>Shahmir Khan</td></tr><br />
<tr><td>Meraj Imran</td><td>Hema Bhanu</td></tr><br />
<tr><td> Maniraj</td><td>Saurabh Anand</td></tr><br />
<tr><td> Abhishek Potnis</td><td>Amod Narvekar</td></tr><br />
<tr><td> [https://mozillians.org/zh-CN/u/steekid/ Hao Shen]</td><td>Chihiro Akiba</td></tr><br />
<tr><td>Atsushi Shimono (:himorin)</td><td>Hideki Akiba</td></tr><br />
<tr><td>Masashi Honma</td><td>[[user:kinshuksunil|Kinshuk Sunil]]</td></tr><br />
<tr><td>Fang, Chiung-Hui (GDH)</td><td>Xin Mu </td></tr><br />
<tr><td>Hiro Imamura</td><td>Midhun Manojkumar </td></tr><br />
<tr><td>Hector Zhao (:hectorz)</td><td>Miyake Shuuji</td></tr><br />
<tr><td>Changyu Hu</td><td>Yi Chen</td></tr><br />
</table><br />
<br />
==Saturday==<br />
=== Movie Night ===<br />
<br />
On Saturday in '''all three''' locations, we will be holding a movie night complete with big screens and old fashioned pop corn. We will be starting with Code Rush the documentary about the early days of Mozilla. <br />
<br />
We may be showing another movie after this, if there is enough interest. <br />
<br />
We have plenty of room, but would like to get a count of how many people will be joining us. Please add your name to the sign up below if you are interested. <br />
<br />
<table border=1><tr><th>Name</th></tr><br />
<tr><td>Heather Arthur</td></tr><br />
<tr><td>Oarabile Mudongo</td></tr><br />
<tr><td>Pascal Finette</td></tr><br />
<tr><td>Jon Hylands</td></tr><br />
<tr><td>Rob Hudson</td></tr><br />
<tr><td>Viking KARWUR</td></tr><br />
<tr><td>Shahmir Khan</td></tr><br />
<tr><td>Muhammad Mehmood Ali</td></tr><br />
<tr><td>Asad Sajjad</td></tr><br />
<tr><td>Shazia Rizwan</td></tr><br />
<tr><td>Alex Vincent</td></tr><br />
<tr><td>Gautam A</td></tr><br />
<tr><td>Nagasahas DS</td></tr><br />
<tr><td>Jemmy RORONG</td></tr><br />
<tr><td>Finan AKBAR</td></tr><br />
<tr><td>Dimas ANDHANA</td></tr><br />
<tr><td>Artanto ISHAAM</td></tr><br />
<tr><td>Fauzan ALFI</td></tr><br />
<tr><td>Kalpa Welivitigoda</td></tr><br />
<tr><td>Ashkary Rahman</td></tr><br />
<tr><td>Irayani Queencyputri</td></tr><br />
<tr><td>Eriska Triana Primayasari</td></tr><br />
<tr><td>Deryan Everestha Maured</td></tr><br />
<tr><td>Nuri Abidin</td></tr><br />
<tr><td>Rahmat Dwi Jatmiko</td></tr><br />
<tr><td>Andi Darmawan</td></tr><br />
<tr><td>I Gede Bagus Kosha</td></tr><br />
<tr><td>Sayak Sarkar</td></tr><br />
<tr><td>Priyanka Nag</td></tr><br />
<tr><td>Soumya Deb</td></tr><br />
<tr><td>Sankha Narayan Guria</td></tr><br />
<tr><td>Swarnava Sengupta</td></tr><br />
<tr><td>Ankit Gadgil</td></tr><br />
<tr><td>Jaydev Ajit Kumar</td></tr><br />
<tr><td>Diwanshi Pandey</td></tr><br />
<tr><td>Avik Pal</td></tr><br />
<tr><td>Gaurab Patra</td></tr><br />
<tr><td>Subhashish Kundu</td></tr><br />
<tr><td>Hilary Ho Jia Hao</td></tr><br />
<tr><td>Gauthamraj Elango</td></tr><br />
<tr><td>[[user:maktrix|Mahay Alam Khan]]</td></tr><br />
<tr><td>[[user:Rifaz|Rifaz Nahiyan]]</td></tr><br />
<tr><td>Zobayer Ahmed Khan</td></tr><br />
<tr><td>Benny Chandra</td></tr><br />
<tr><td>Yoe One Ariestya Niovitta</td></tr><br />
<tr><td>Rizqinofa Putra M</td></tr><br />
<tr><td>Jayakumar Sadhasivam</td></tr><br />
<tr><td>Atul Jangra</td></tr><br />
<tr><td>Akshay Aurora</td></tr><br />
<tr><td>Aji Kisworo Mukti</td></tr><br />
<tr><td>Matjaž Horvat</td></tr><br />
<tr><td>[[user:mythrobin|Robin Mehdee]]</td></tr><br />
<tr><td>Rohan Dasanayaka</td></tr><br />
<tr><td>Ajay Kumar</td></tr><br />
<tr><td>Ankit Mishra</td></tr><br />
<tr><td>Parmpreet Singh</td></tr><br />
<tr><td>Anup Kumar Mishra</td></tr><br />
<tr><td>Goran Kohek</td></tr><br />
<tr><td>Soumya Kanti Chakraborty</td></tr><br />
<tr><td>Jon Buckley</td></tr><br />
<tr><td>Tim Taubert</td></tr><br />
<tr><td>Rizky Ariestiyansyah</td></tr><br />
<tr><td>Ani Peter</td></tr><br />
<tr><td>Sammy Fung</td></tr><br />
<tr><td>Jim Chen (:jchen)</td></tr><br />
<tr><td>Muhammad Syafiq Mazli (:syafiqmazli)</td></tr><br />
<tr><td>Mohamed Aidid Jaafar (:aidid)</td></tr><br />
<tr><td>Haryati Salehin (:yadyadun)</td></tr><br />
<tr><td>Lai Chen Haw (:chenhaw)</td></tr><br />
<tr><td>Rishabh Narayan </td></tr><br />
<tr><td>Manoj Kumar Giri </td></tr><br />
<tr><td>Shankar Prasad (:shanky)</td></tr><br />
<tr><td>Sandeep Shedmake</td></tr><br />
<tr><td>Krishnababu K (:Krishna)</td></tr><br />
<tr><td>Grigorios Petsos</td></tr><br />
<tr><td>Benjamin Pokharel</td></tr><br />
<tr><td>[[user:Ashickurnoor|Ashickur Rahman]]</td></tr><br />
<tr><td>Luigi Tedone</td></tr><br />
<tr><td>Nick Fitzgerald</td></tr><br />
<tr><td>Anton Kovalyov</td></tr><br />
<tr><td>Arun Balachandran Ganesan</td></tr><br />
<tr><td>Kevin Ngo</td></tr><br />
<tr><td>Brendan Dahl</td></tr><br />
<tr><td>Johnny Stenback</td></tr><br />
<tr><td>Christopher De Cairos</td></tr><br />
<tr><td>Sean Bolton</td></tr><br />
<tr><td>Joanna Mazgaj</td></tr><br />
<tr><td>[[user:Netoarmando|Armando Neto]]</td></tr><br />
<tr><td>[[user:RodrigoPadula|Rodrigo Padula]]</td></tr><br />
<tr><td>Aditya Fitri Hananta Putra</td></tr><br />
<tr><td>John Daggett</td></tr><br />
<tr><td>Dwi Hardyanto</td></tr><br />
<tr><td>PATIL Kailas Ravsaheb</td></tr><br />
<tr><td>Blair McBride</td></tr><br />
<tr><td>Ajay Jogawath</td></tr><br />
<tr><td>[[user:Komal gandhi|Komal Gandhi]]</td></tr><br />
<tr><td>Vaibhav Bajaj</td></tr><br />
<tr><td>Jafar Muhammed</td></tr><br />
<tr><td>Srikar Ananthula</td></tr><br />
<tr><td>Sai Kiran Alagundula</td></tr><br />
<tr><td>Raghuram K</td></tr><br />
<tr><td>Srikanth Namu</td></tr><br />
<tr><td>Alexis M</td></tr><br />
<tr><td>Sandraghassen Subbaraya Pillai</td></tr><br />
<tr><td>byron jones</td></tr><br />
<tr><td>André Reinald</td></tr><br />
<tr><td>Aaron Druck</td></tr><br />
<tr><td>Ville Pohjanheimo</td></tr><br />
<tr><td>Jay Sullivan</td></tr><br />
<tr><td>Meraj Imran</td></tr><br />
<tr><td>Hema Bhanu</td></tr><br />
<tr><td>Maniraj</td></tr><br />
<tr><td>Philipp Wagner</td></tr><br />
<tr><td>Saurabh Anand</td></tr><br />
<tr><td>Abhishek Potnis</td></tr><br />
<tr><td>Amod Narvekar</td></tr><br />
<tr><td>Behnam Esfahbod</td></tr><br />
<tr><td>Felipe Gomes</td></tr><br />
<tr><td>Amy Hu</td></tr><br />
<tr><td>[[User:kinshuksunil|Kinshuk Sunil]]</td></tr><br />
<tr><td>David Chen</td></tr><br />
</td><td>Midhun Manojkumar </td></tr><br />
</table><br />
<br />
=== Mozillians Pilates ===<br />
<br />
Not just any Pilates - Pilates instructed by [https://mozillians.org/en-US/u/pfinette/ Pascal Finette] who is a certified Pilates trainer!(little known fact he also trains two Olympic B-Cadre Team USA marathoners)<br />
<br />
He's offered to lead a wake you up Pilates session for 15-20 people on Friday. If more would like to join, he will host it again on Saturday. <br />
<br />
If you are local, please bring a yoga mat or bath towel with you. We will provide a limited number of mats for those who need them. <br />
<br />
<table border=1><tr><th>Name</th></tr><br />
<tr><td>Jennifer Bertsch </td></tr><br />
<tr><td>Iacopo Benesperi</td></tr><br />
<tr><td>Gautam A</td></tr><br />
<tr><td>Nagasahas DS</td></tr><br />
<tr><td>Lindsay Kenzig</td></tr><br />
<tr><td>[[user:maktrix|Mahay Alam Khan]]</td></tr><br />
<tr><td>Aashish Jagini</td></tr><br />
<tr><td>Kathryn Meisner</td></tr><br />
<tr><td>Ani Peter</td></tr><br />
<tr><td>Jayakumar Sadhasivam</td></tr><br />
<tr><td>Mardi Douglass</td></tr><br />
<tr><td>Kate Naszradi</td></tr><br />
<tr><td>Manoj Kumar Giri</td></tr><br />
<tr><td>Shankar Prasad (:shanky)</td></tr><br />
<tr><td>Krishnababu K (:Krishna)</td></tr><br />
<tr><td>[[user:Ashickurnoor|Ashickur Rahman]]</td></tr><br />
<tr><td>[[user:Rifaz|Rifaz Nahiyan]]</td></tr><br />
<tr><td>Luigi Tedone</td></tr><br />
<tr><td>Sean Bolton</td></tr><br />
<tr><td>Joanna Mazgaj</td></tr><br />
<tr><td>Zobayer Ahmed Khan</td></tr><br />
<tr><td>Sandraghassen Subbaraya Pillai</td></tr><br />
<tr><td>Vaibhav Bajaj</td></tr><br />
<tr><td>Chihiro Akiba</td></tr><br />
</table><br />
<br />
=== Great America ===<br />
<br />
Are you up for a night of shows, fast rides, daring drops and good old fashioned American fair food? Did I mention they have a Halloween themed side of the park as well? If you'd like to join in the experience, come join your fellow Mozillians at Great America! <br />
<br />
There are plenty (200+) tickets available, but you must sign up by 10/1 to receive an admission ticket. <br />
<br />
<table border=1><tr><th colspan=2>Name</th></tr><br />
<tr><td>1 Pascal Finette</td> <td>2 Jennifer Bertsch</td></tr><br />
<tr><td>3 Rob Hudson</td> <td>4 Viking KARWUR</td></tr><br />
<tr><td>5 Iacopo Benesperi</td> <td>6 Michelle Cristobal</td></tr><br />
<tr><td>7 Shahmir Khan</td> <td>8 Asad Sajjad</td></tr><br />
<tr><td>9 Muhammad Mehmood Ali</td> <td>10 Gautam A</td></tr><br />
<tr><td>11 Nagasahas DS</td> <td>12 Abdul Rauf</td></tr><br />
<tr><td>13 Jemmy RORONG</td> <td>14 Finan AKBAR</td></tr><br />
<tr><td>15 Dimas ANDHANA</td> <td>16 Artanto ISHAAM</td></tr><br />
<tr><td>17 Fauzan ALFI</td> <td>18 Ashkary Rahman</td></tr><br />
<tr><td>19 Irayani Queencyputri</td> <td>20 Eriska Triana Primayasari</td></tr><br />
<tr><td>21 Deryan Everestha Maured</td> <td>22 Nuri Abidin</td></tr><br />
<tr><td>23 Rahmat Dwi Jatmiko</td> <td>24 Andi Darmawan</td></tr><br />
<tr><td>25 I Gede Bagus Kosha</td> <td>26 Shazia Rizwan</td></tr><br />
<tr><td>27 Shafiul Azam Chowdhury</td> <td>28 Rahid Hasan</td></tr><br />
<tr><td>29 Sayak Sarkar</td> <td>30 Shahrin Hossain</td><br />
<tr><td>31 Soumya Deb</td> <td>32 Swarnava Sengupta</td></tr><br />
<tr><td>33 Avik Pal</td> <td>34 Gaurab Patra</td></tr><br />
<tr><td>35 Subhashish Kundu</td> <td>36 Kaustav Das Modak </td></tr><br />
<tr><td>37 Galaxy Kadiyala</td> <td>38 Vineel Reddy Pindi</td></tr><br />
<tr><td>39 Gauthamraj Elango</td> <td>40 Faizal Aziz</td></tr><br />
<tr><td>41 Sara Khan</td> <td>42 Hilary Ho Jia Hao</td></tr><br />
<tr><td>43 Md Aminul Islam Sajib</td> <td>44 [[user:maktrix|Mahay Alam Khan]]</td></tr><br />
<tr><td>45 Zobayer Ahmed Khan</td> <td>46 Abdur Rahman </td></tr><br />
<tr><td>47 Benny Chandra</td> <td>48 Yoe One Ariestya Niovitta</td></tr><br />
<tr><td>49 [[user:ahsan.net|Mashkawat Ahsan]]</td> <td>50 Jayakumar Sadhasivam</td></tr><br />
<tr><td>51 Rizqinofa Putra M</td> <td>52 Gasper Derzanic</td></tr><br />
<tr><td>53 Atul Jangra</td> <td>54 Aji Kisworo Mukti</td></tr><br />
<tr><td>55 Matjaž Horvat</td> <td>56 [[user:rok.samsa|Rok Samsa]]</td></tr><br />
<tr><td>57 [[user:mythrobin|Robin Mehdee]]</td> <td>58 Rohan Dasanayaka </td></tr><br />
<tr><td>59 Anup Kumar Mishra </td> <td>60 Ankit Mishra </td></tr><br />
<tr><td>61 Parmpreet Singh </td> <td>62 Ajay Kumar </td></tr><br />
<tr><td>63 Clarice Wang </td> <td>64 Goran Kohek </td></tr><br />
<tr><td>65 Soumya Kanti Chakraborty</td> <td>66 Jon Buckley</td></tr><br />
<tr><td>67 [[user:alefteris|Thanos Lefteris]]</td> <td>68 Akshay Aurora</td></tr><br />
<tr><td>69 Rizky Ariestiyansyah</td> <td>70 Ani Peter</td></tr><br />
<tr><td>71 Angela Leung</td> <td>72 Alex Lakatos</td></tr><br />
<tr><td>73 Marcela Oniga</td> <td>74 Nikki Tran</td></tr><br />
<tr><td>75 Kengatharaiyer Sarveswaran (Sarves) </td> <td>76 Ankit Gadgil</td></tr><br />
<tr><td>77 Diwanshi Pandey</td> <td>78 Jake Watkins</td></tr><br />
<tr><td>79 Jim Chen (:jchen)</td> <td>80 Md Golam Mostafa</td></tr><br />
<tr><td>81 Muhammad Syafiq Mazli (:syafiqmazli)</td> <td>82 Mohamed Aidid Jaafar (:aidid)</td></tr><br />
<tr><td>83 Haryati Salehin (:yadyadun)</td> <td>84 Lai Chen Haw (:chenhaw)</td></tr><br />
<tr><td>85 Rishabh Narayan</td> <td>86 Louis-Rémi Babé</td></tr><br />
<tr><td>87 James Kitchener</td> <td>88 Manoj Kumar Giri</td></tr><br />
<tr><td>89 Shankar Prasad (:shanky)</td> <td>90 Krishnababu K (:Krishna)</td></tr><br />
<tr><td>91 Grigorios Petsos</td> <td>92 Benjamin Pokharel</td></tr><br />
<tr><td>93 [[user:Rifaz|Rifaz Nahiyan]]</td> <td>94 [[user:Ashickurnoor|Ashickur Rahman]]</td></tr><br />
<tr><td>95 Sofanit Belay (Sofi)</td> <td>96 Luigi Tedone</td></tr><br />
<tr><td>97 Jennifer Fong</td> <td>98 Soledad Penades</td></tr><br />
<tr><td>99 [[user:Ckolos|Chris Kolosiwsky]]</td> <td>100 [[user:bobm|Bob Micheletto]]</td></tr><br />
<tr><td>101 [[user:bnicholson|Brian Nicholson]]</td> <td>102 [[user:hoosteeno|Justin Crawford]]</td></tr><br />
<tr><td>103 [[user:AxelHecht|Axel Hecht]]</td> <td>104 Michael Comella (:mcomella)</td></tr><br />
<tr><td>105 Arun Balachandran Ganesan (:abc)</td> <td>106 Kevin Ngo (:kngo/:ngoke)</td></tr><br />
<tr><td>107 Brendan Dahl</td> <td>107 Nick Fitzgerald</td></tr><br />
<tr><td>107 Anton Kovalyov</td> <td>108 Matt Woodrow</td></tr><br />
<tr><td>109 Cherlowe Reinard Ramirez</td> <td>110 Bas Schouten</td></tr><br />
<tr><td>111 [[user:Netoarmando|Armando Neto]]</td> <td>112 Gary Chen</td></tr><br />
<tr><td>113 Linear Li</td> <td>114 Kate Huang</td></tr><br />
<tr><td>115 Steve Chung</td> <td>116 Dominic Kuo</td></tr><br />
<tr><td>117 Ian Liu</td> <td>118 Sankha Narayan Guria</td></tr><br />
<tr><td>119 Szu-Yu Chen (:aknow)</td> <td>120 [[user:Bobreyes|Robert 'Bob' Reyes]]</td></tr><br />
<tr><td>121 Cervantes Yu</td> <td>122 Anne Michelle Santos</td></tr><br />
<tr><td>123 Kevin John Ventura</td> <td>124 Kathrine Faye Tandog</td></tr><br />
<tr><td>125 Kathleen Joyce Domanog</td> <td>126 Erika Aurea Gatmaitan</td></tr><br />
<tr><td>127 Marcus Ang</td> <td>128 Aditya Fitri Hananta Putra</td></tr><br />
<tr><td>129 Dwi Hardyanto</td> <td>130 PATIL Kailas Ravsaheb</td></tr><br />
<tr><td>131 Vaibhav Bajaj</td> <td>132[[user:Komal gandhi| Komal Gandhi]]</td></tr><br />
<tr><td>133 Ajay Jogawath</td> <td>134 Jafar Muhammed</td></tr><br />
<tr><td>135 Sandeep Shedmake</td> <td>136 Srikar Ananthula</td></tr><br />
<tr><td>137 Sai Kiran Alagundula</td> <td>138 Raghuram K </td></tr><br />
<tr><td>139 Ginn Chen </td> <td>140 Leon Sha </td></tr><br />
<tr><td>[[user:RodrigoPadula|141 Rodrigo Padula]]</td> <td>142 Sandraghassen Subbaraya Pillai </td></tr><br />
<tr><td>143 byron jones</td> <td>144 Srikanth Namu</td></tr><br />
<tr><td>145 [[User:KaiRo|Robert Kaiser (KaiRo)]]</td> <td>146 André Reinald</td></tr><br />
<tr><td>147 Aaron Druck</td> <td>148 Remco Kaptein</td></tr><br />
<tr><td>149 Harvey Anderson</td> <td>150 Alexis Stowers</td></tr><br />
<tr><td>151 Mary Biondi</td><td>152 Kim Murphy</td></tr><br />
<tr><td>153 Ashlee Chavez</td><td>154 Meraj Imran</td></tr><br />
<tr><td>155 Hema Bhanu</td><td>156 Maniraj</td></tr><br />
<tr><td>157 [https://mozillians.org/en-US/u/TimAbraldes/ Tim Abraldes]</td><td>158 Philipp Wagner</td></tr><br />
<tr><td>159 Saurabh Anand</td><td>160 Oarabile Mudongo</td></tr><br />
<tr><td>161 Jaydev Ajit Kumar</td><td>162 Marina Samuel</td></tr><br />
<tr><td>163 Axilleas Pipinellis</td><td>164 [https://mozillians.org/en-US/u/relud/ Daniel Thornton]</td></tr><br />
<tr><td>165 [https://mozillians.org/en-US/u/taratatach/ Erwan Guyader]</td><td>166 Antoine D. (Flaburgan)</td></tr><br />
<tr><td>167 [https://mozillians.org/zh-CN/u/steekid/ Hao Shen]</td><td>168 Makoto Kato</td></tr><br />
<tr><td>169 Yumi Ochiai</td><td>170 Eri Inoue</td></tr><br />
<tr><td>171 Atsushi Shimono (:himorin)</td><td>172 Tetsuharu OHZEKI</td></tr><br />
<tr><td>173 ABE Hiroki (hATrayflood)</td><td>174 Masashi Honma</td></tr><br />
<tr><td>175 Tetsuya Kosaka</td><td>176 Peter Chen [:petercpg]</td></tr><br />
<tr><td>177 Irvin [:irvinfly]</td><td>178 [https://mozillians.org/en-US/u/benbangert/ Ben Bangert]</td></tr><br />
<tr><td>179 Toby Elliott</td><td>180 [https://mozillians.org/en-US/u/jrconlin/ jr conlin]</td></tr><br />
<tr><td>181 Dayo Choul</td><td>182 Behnam Esfahbod</td></tr><br />
<tr><td>183 Daisuke MORI</td><td>184 Edward Hu</td></tr><br />
<tr><td>185 Felipe Gomes</td><td>186 [[User:kinshuksunil|Kinshuk Sunil]]</td></tr><br />
<tr><td>187 Hideki Akiba</td><td>188 Chihiro Akiba</td></tr><br />
<tr><td>189 Rachel Zhang</td><td>190 Fang, Chiung-Hui(GDH)</td></tr><br />
<tr><td>191 Xin Mu</td><td>192 [https://mozillians.org/en-US/u/Med0paW/ Rui You] (:ryou)</td></tr><br />
<tr><td>193 Hiro Imamura</td><td>194 Midhun Manojkumar</td></tr><br />
<tr><td>195 Miyake Shuuji</td><td>196 [https://mozillians.org/en-US/u/yuanxulei/ Yuan Xulei] (:yxl)</td></tr><br />
<tr><td>197 Wayne Chang</td><td>198 Ivan Tsay</td></tr><br />
<tr><td>199 Bruce Huang</td><td>200 Dapeng Wei</td></tr><br />
<tr><td>201 Changyu Hu</td><td>202 Yi Chen</td></tr><br />
<tr><td>203 Masayuki Nakano</td><td></td></tr><br />
</table><br />
<br />
=== Bill Walker w/the Roger Steen Band @ San Pedro Square Market ===<br />
<br />
Come see Bill Walker perform original rock and roll with the [http://rogersteenband.com Roger Steen Band] at 8pm in [http://www.sanpedrosquaremarket.com/ San Pedro Square], San Jose. Roger Steen is the founding guitarist of The Tubes, and has recently released his [https://itunes.apple.com/us/album/roger-steen/id635651246 first solo album]. We'll be performing songs from that album as well as some cool covers. If you put your names here, we can work out some way to carpool and/or take public transit together.<br />
<br />
<table border=1><tr><th>Name</th></tr><br />
<tr><td>Bill Walker</td></tr><br />
</table><br />
<br />
==Sunday==<br />
=== Mozillians Pilates ===<br />
<br />
Not just any Pilates - Pilates instructed by [https://mozillians.org/en-US/u/pfinette/ Pascal Finette] who is a certified Pilates trainer!(little known fact he also trains two Olympic B-Cadre Team USA marathoners)<br />
<br />
He's offered to lead a wake you up Pilates session for 15-20 people. He is also offering a class on Saturday, if you haven't yet signed up there. :-) <br />
<br />
If you are local, please bring a yoga mat or bath towel with you. We will provide a limited number of mats for those who need them. <br />
<br />
<table border=1><tr><th>Name</th></tr><br />
<tr><td>Kalpa Welivitigoda</td></tr><br />
<tr><td>Ani Peter</td></tr><br />
<tr><td>Mardi Douglass</td></tr><br />
<tr><td>Kate Naszradi</td></tr><br />
<tr><td>Krishnababu K</td></tr><br />
<tr><td>[[user:Rifaz|Rifaz Nahiyan]]</td></tr><br />
<tr><td>[[user:Ashickurnoor|Ashickur Rahman]]</td></tr><br />
<tr><td>Nick Fitzgerald</td></tr><br />
<tr><td>Anton Kovalyov</td></tr><br />
<tr><td>Benjamin Pokharel</td></tr><br />
<tr><td>Michael Comella (:mcomella)</td></tr><br />
<tr><td>Joanna Mazgaj</td></tr><br />
<tr><td>Szu-Yu Chen (:aknow)</td></tr><br />
<tr><td>Vaibhav Bajaj</tr></td><br />
<tr><td>[https://mozillians.org/en-US/u/TimAbraldes/ Tim Abraldes]</td></tr><br />
<tr><td>Chihiro Akiba</td></tr><br />
<tr><td>Kathleen Joyce Domanog</tr></td><br />
<tr><td>Erika Aurea Gatmaitan<tr><td><br />
<tr><td>Fang, Chiung-Hui (GDH)<tr><td><br />
</table><br />
<br />
=Toronto=<br />
==Friday ==<br />
=== Real Canadian Superhero Pub Crawl ===<br />
[[File:WeWantYou2.jpg|right]] Sure, Canada is a fun clean country filled with really nice people. And, as some know, Toronto is the "New York" of Canada, crammed with exciting architecture, extremely diverse culture, and Smarties.<br />
<br><br />
'''BUT.... '''<br />
<br />
When the sun sets on this northern community, there arises a seedy side to Canada's Gotham city. Mozilla is recruiting a brave set of individuals to help us clean up the streets, one bar at a time. This isn't a job for the weak or vertically impaired. You must have a strong constitution and some comfortable walking shoes to participate.<br />
<br />
'''Sign up NOW''' for the one and only Real Canadian Superhero Pub Crawl. We will be walking from the Sheraton Center down to the Distillery district and pub hopping the entire way. We will provide masks and other paraphernalia, you bring your favorite super hero t-shirt (or any brightly colored t-shirt you have), as well as your super power, and of course, the super strength to finish the crawl. <b>BAM!</b> <br />
<br />
Gifts and prizes for anyone who brings their own costume, and/or for anyone who is willing to wear tights. '''KAPOW!'''<br />
<br />
Here's some juju to help think of great alter egos: [http://en.wikipedia.org/wiki/List_of_The_Incredibles_characters#Other_superheroes GET ALTER EGO IDEAS NOW!]<br />
<br />
; '''Feedback or questions?''' : Email this mild mannered guy: [https://mozillians.org/en-US/u/phundal/ phundal@mozilla.com]<br />
<br />
; '''Note:''': The drinking age is 19 in Ontario. Please plan on bringing photo ID, as they will definitely check at every bar!<br />
<br />
''' Super Sign up sheet '''<br />
<table class="wikitable" border=1><tr><th>Name</th><th>Alter Ego</th></tr><br />
<tr><td>[https://mozillians.org/en-US/u/phundal/ Patrick Hundal]</td><td>Ale-inhaler</td></tr><br />
<tr><td>Maya Barrow</td><td>Margareeta</td></tr><br />
<tr><td>Leo Balter</td><td>The Mozillator</td></tr><br />
<tr><td>Gabriela Oliveira</td><td>Chuchu Girl</td></tr><br />
<tr><td>Bernard De Luna</td><td></td></tr><br />
<tr><td>Jay Sullivan</td><td></td></tr><br />
<tr><td>Giovanni Keppelen</td><td></td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/alex_mayorga/ Alex Mayorga]</td><td>The Mexican red panda</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/lasr21/ LASR21 a.k.a Luis Sanchez]</td><td>Orange Zorro</td></tr><br />
<tr><td>Brandon Johnson</td><td>[http://www.youtube.com/watch?v=UZuZkhbNPjs Super DBA]</td></tr><br />
<tr><td>Carlos Valim "Coragem"</td><td>Fox from tha ghetto</td></tr><br />
<tr><td>Marcelo Poli</td><td></td></tr><br />
<tr><td>Ricardo Panaggio</td><td>Super Sober</td></tr><br />
<tr><td>Julien Wajsberg</td><td>FlashBerg</td></tr><br />
<tr><td>Leonard Camacho</td><td></td></tr><br />
<tr><td>Eduardo Urcullú Madrid</td><td>Urcuneitor</td></tr><br />
<tr><td>Manuel Camacho</td><td>Maedca Lanter</td></tr><br />
<tr><td>Romina Guerra</td><td>Super Pink</td></tr><br />
<tr><td>Sara Prussak</td><td></td></tr><br />
<tr><td>Evelyn Urcullú Madrid</td><td></td></tr><br />
<tr><td>Peter Radcliffe</td><td></td></tr><br />
</table><br />
<br />
=== People in town Friday but not into drinking ===<br />
<table border=1><tr><th>Name</th></tr><br />
<tr><td>Vuyisile Ndlovu </td></tr><br />
<tr><td>Jose Junior Villagomez Melgar </td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/prixon/ Matej Priteržnik]</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/gueroJeff/ Jeff Beatty]</td></tr><br />
<tr><td>[https://mozillians.org/pt-BR/u/jaymeayres/ Jayme Ayres]</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/pmac/ Paul McLanahan]</td></tr><br />
<tr><td>[https://mozillians.org/es-Mx/u/leonshion/ Miriam León]</td></tr><br />
<tr><td>[https://mozillians.org/es-Mx/u/Ednah/ Ednah Kiome]</td></tr><br />
<tr><td>[https://mozillians.org/es-Mx/u/alexfuser/ Alex Fuser]</td></tr><br />
<tr><td>[https://mozillians.org/es/u/Nex/ Hugo Acosta]</td></tr><br />
<tr><td>[https://mozillians.org/es/u/lourcastillo/ Lourdes Castillo]</td></tr><br />
<tr><td>[https://mozillians.org/es/u/psep/ Pablo Sepúlveda]</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/ZiggyMaes/ Ziggy Maes]</td></tr><br />
<tr><td>Lianne Lee</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/andreags/ Andrea Guzmán Siu]</td></tr><br />
<tr><td>Huda Sarfraz</td></tr><br />
</table><br />
<br />
==Saturday==<br />
=== Movie Night ===<br />
On Saturday in '''all three''' locations, we will be holding a movie night complete with big screens and old fashioned pop corn. We will be starting with Code Rush the documentary about the early days of Mozilla. <br />
<br />
We may be showing another movie after this, if there is enough interest. <br />
<br />
We have plenty of room, but would like to get a count of how many people will be joining us. Please add your name to the sign up below if you are interested. <br />
<br />
<table border=1><tr><th>Name</th></tr><br />
<tr><td>Gloria Meneses</td></tr><br />
<tr><td>Lianne Lee</td></tr><br />
<tr><td>Huda Sarfraz</td></tr><br />
<tr><td>Etienne Segonzac</td></tr><br />
<tr><td>Vuyisile Ndlovu </td></tr><br />
<tr><td>Peter Radcliffe</td></tr><br />
<tr><td>Amira Dhalla</td></tr><br />
<tr><td>Elsa Rodriguez</td></tr><br />
<tr><td>Ednah Kiome</td></tr><br />
<tr><td>Sam Foster</td></tr><br />
<tr><td>Jay Sullivan</td><tr><br />
<tr><td>Diane Bisgeier</td></tr><br />
<tr><td>Marcelo Poli</td></tr><br />
<tr><td>Carlos Valim "Coragem"</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/Joshua-S/ Joshua Smith]</td></tr><br />
<tr><td>[https://mozillians.org/pt-BR/u/jayme.ayres/ Jayme Ayres]</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/pmac/ Paul McLanahan]</td></tr><br />
<tr><td>[https://mozillians.org/es-Mx/u/leonshion/ Miriam León]</td></tr><br />
<tr><td>[https://mozillians.org/es-Mx/u/alexfuser/ Alex Fuser]</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/bsilverberg/ Bob Silverberg]</td></tr><br />
<tr><td>Nikhil Marathe</td></tr><br />
<tr><td>Nicholas Nethercote</td></tr><br />
<tr><td>Julien Wajsberg</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/mchris/ Chris Riley]</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/ZiggyMaes/ Ziggy Maes]</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/Faten/ Faten Ben Thabet]</td></tr><br />
<tr><td>Zhou Huiling</td></tr><br />
<tr><td>Hannes Verschore</td></tr><br />
<tr><td>Bhavana Bajaj</td></tr><br />
</table><br />
<br />
{{:Summit2013/Experiences/signups/Toronto}}<br />
<br />
=== Mozillians Hockey ===<br />
Hockey is Canada's national winter sport. Sign-up to participate in or watch a shinny hockey game* at the old Maple Leaf Gardens on Saturday, October 5, 9:00pm.<br />
<br />
Note: Skating is difficult. This game is open to anyone but it is suggested that only people who have previous skating experience participate in the game itself.<br />
<br />
*Shinny hockey, a Canadian tradition, is played with only skates, a helmet, gloves, and a stick. There are no goalies, no body contact, and no raising the puck or slap-shots.<br />
<br />
What you need to know: <br />
<br />
We will be meeting in the lobby of the hotel at 8:00pm. We'll walk to the rink and the game will start at 9:00pm. <br />
<br />
[https://mozillians.org/lmandel Lawrence Mandel] and [https://mozillians.org/lsblakk Lukas Blakk] have stepped up to help drive this. Please ping them with additional questions. <br />
<br />
'''Sign up here!'''<br />
https://docs.google.com/forms/d/1fhE8oVSAkk5gN9-pfoQ-lCJjQEO2My3kup2NcuAagW0/viewform<br />
<br />
<br />
=== Nuit Blanche Stroll ===<br />
<br />
From 6:51pm to sunrise on Sunday, Toronto will be a large exhibit hall of contemporary art. [http://www.scotiabanknuitblanche.ca/ Nuit Blanche] is an annual art exhibit with hundreds of art projects and installations in the streets of the city.<br />
<br />
# Jay Sullivan<br />
# Vuyisile Ndlovu<br />
# Nicholas Nethercote<br />
# Faten Ben Thabet<br />
# Lianne Lee<br />
# Huda Sarfraz<br />
<br />
==Sunday==<br />
<br />
=Brussels=<br />
==Full==<br />
{{:Summit2013/Experiences/signups/Brussels}}<br />
==Spaces==<br />
The following still have spaces:<br />
<br />
=== Bikram yoga ===<br />
<br />
We're looking into setting up a [http://en.wikipedia.org/wiki/Bikram_Yoga Bikram yoga] (hot yoga) class which we could attend at [http://www.fbyci.com/brussels/index.htm the Brussels school]. This would depend on the number of signups and if it could be fit in the schedule. Please sign up if you'd like to attend, and we'll make sure we let you know if it can go ahead (day/time TBD).<br />
<br />
#Dirkjan Ochtman<br />
#John Baptist Ochieng<br />
#Nicholas Grammater<br />
#Jonathan Watt<br />
#Shane Tomlinson<br />
#Jovan Ssebaggala<br />
#Giorgio Maone<br />
#Reed Loden<br />
# MA Darche<br />
<br />
==Friday ==<br />
#Jovan Ssebaggala<br />
<br />
==Saturday==<br />
=== Movie Night ===<br />
<br />
On Saturday in '''all three''' locations, we will be holding a movie night complete with big screens and old fashioned pop corn. We will be starting with Code Rush the documentary about the early days of Mozilla. <br />
<br />
We may be showing another movie after this, if there is enough interest. <br />
<br />
We have plenty of room, but would like to get a count of how many people will be joining us. Please add your name to the sign up below if you are interested. <br />
<br />
<br />
*Gene Wood<br />
*Mihnea Dobrescu-Balaur<br />
*Aashish Jagini<br />
*Netha Hussain<br />
*Liz Compton<br />
*Piniel Romulia Hasibuan<br />
*Mubiru Jonathan<br />
*André Fiedler<br />
*Antoine Turmel<br />
*Avinash Kundaliya<br />
*Justin O'Kelly<br />
*David Rajchenbach-Teller<br />
*Robyn Chau<br />
*Dirkjan Ochtman<br />
*John Baptist Ochieng<br />
*Joyce Nalwadda<br />
*Dave Hunt<br />
*Felix Klock<br />
*William Dorffer<br />
*Sheeri Cabral<br />
*Luca Greco<br />
*Alex Fuser<br />
*Zach Carter<br />
*Laura Thomson<br />
*Jonathan Watt<br />
*Shane Tomlinson<br />
*Dejan Strbad<br />
*Jordan Lund<br />
*Reed Loden<br />
*Aki Laaksovirta<br />
*Flore Allemandou<br />
*Monique Brunel<br />
*Majda Nafissa Rahal<br />
*Rubén Martín<br />
<br />
=== La Bier Circus ===<br />
Saturday Beer geek trip - http://www.bier-circus.be/beer-catalog/. This place is small, so let's not pile on! Meet there at 7:30 - it's a ten-minute walk from SQUARE. The Mozilla swag will, doubtless, make us obvious.<br />
<br />
* Dustin J. Mitchell (organizer)<br />
* Rail Aliiev<br />
* Adrian Fernandez<br />
* Monique Brunel<br />
<br />
=== Bar Delirium ===<br />
More information coming soon. We may shift this to Friday. <br />
''(List sorted to remove duplicates)''<br />
*Aashish Jagini<br />
*Adam Newman<br />
*Adrian Fernandez<br />
*Aleksandra Uzelac<br />
*Alex Fuser<br />
*Alex Gibson<br />
*Alexis Metaireau<br />
*Alison Wheeler<br />
*Altin Ukshini <br />
*Amy Tsay<br />
*Andreas Kleinert<br />
*Andreas Wagner<br />
*André Fiedler<br />
*Andy McKay<br />
*Antoine Turmel<br />
*Ardian Haxha <br />
*Arpad Borsos<br />
*Austin King<br />
*Balazs Koren<br />
*Bella Su<br />
*Ben Kero<br />
*Berni Melero<br />
*Bree Tipper<br />
*Chris AtLee<br />
*Chris More <br />
*Chris Turra<br />
*Corey Shields<br />
*Curtis Koenig<br />
*Dan Maher<br />
*Dave Hunt<br />
*David Rajchenbach-Teller<br />
*Dejan Binder<br />
*Derek Moore<br />
*Dietrich Ayala<br />
*Dustin J. Mitchell<br />
*Ed Lim<br />
*Elio Qoshi <br />
*Estela Liu<br />
*Fabio Magnoni<br />
*Fabricio Zuardi<br />
*Frank Wein<br />
*Gene Wood (+1 for Friday)<br />
*Gent Thaci <br />
*Georg Fritzsche<br />
*Gina Yeh<br />
*Giorgio Maone<br />
*Greg Cox<br />
*Gregory Szorc<br />
*Hagen Halbach<br />
*Hernán Rodríguez Colmeiro<br />
*Ilana Segall<br />
*Irina Parievsky<br />
*JB Ochieng<br />
*Jeff Griffiths <br />
*Jennifer Hayashi<br />
*Jennifer Morrow<br />
*Jessica Jong<br />
*Jessilyn Davis<br />
*Joe Cheng <br />
*John Hesling<br />
*Jon Coppeard<br />
*Jorge Villalobos<br />
*Jovan Ssebaggala<br />
*Julen Ruiz Aizpuru<br />
*Justin Dolske<br />
*Justin Dow<br />
*Jürgen Berg<br />
*Kannan Vijayan<br />
*Karsten Düsterloh<br />
*Kris Maglione<br />
*Konstantina Papadea<br />
*Laura Forrest<br />
*Laura Thomson<br />
*Lizz Noonan<br />
*Luca Greco<br />
*Lucas Rocha<br />
*Marc Schifer<br />
*Mark C&ocirc;t&eacute;<br />
*Martin Creutziger<br />
*Mathieu Laurent<br />
*Michelle Marovich<br />
*Mihnea Dobrescu-Balaur <br />
*Mubiru Jonathan<br />
*Naveed Ihsanullah<br />
*Nicholas Grammater<br />
*Niko Visnjic<br />
*Nino Vranešič<br />
*Onur Avsar<br />
*Oskar Ivanić<br />
*Phoebe Chang<br />
*Pierre-Louis Augey<br />
*Raivis Dejus<br />
*Redon Skikuli <br />
*Reed Loden<br />
*Robert Wood<br />
*Robyn Chau<br />
*Rubén Martín<br />
*Sal Espinosa<br />
*Saša Jakovljević<br />
*Shane Caraveo<br />
*Shane Tomlinson<br />
*Shelly Lin<br />
*Shyam Mani<br />
*Simon Sapin<br />
*Sokol Dollani<br />
*Sébastien Barbieri<br />
*Tauni Oxborrow (+1 for Friday)<br />
*Thierry Régagnon<br />
*Théo Chevalier<br />
*Till Schneidereit<br />
*Tom Schuster<br />
*Toni Hermoso<br />
*Ty Flanagan<br />
*Van Le<br />
*Vien Doan<br />
*Vit lai<br />
*William Reynolds<br />
*Wilson Guaraca <br />
*Zac Campbell<br />
*Zach Carter<br />
*Dejan Strbad<br />
*Ana-Maria Antolovic<br />
<br />
===Chocolate Waiting List===<br />
#Avinash Kundaliya<br />
#Pauline Proffett<br />
#Robyn Chau<br />
#Lizz Noonan<br />
#Alexis Metaireau<br />
#Thierry Régagnon<br />
#Jovan Ssebaggala<br />
#JB Ochieng<br />
#Laura Thomson<br />
#Niko Visnjic<br />
#Julen Ruiz Aizpuru<br />
#Pierre-Louis Augey<br />
#Hiroyuki Ikezoe<br />
#Daisuke Akatsuka<br />
#Tomoya Asai<br />
#Giorgio Maone<br />
#Jordan Lund<br />
#Adrian Fernandez<br />
#Joe Cheng<br />
#Majda Nafissa Rahal<br />
#Rubén Martín<br />
#Konstantina Papadea</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=489490Gecko:Mouse Wheel Scrolling2012-11-22T03:19:32Z<p>Masayuki: </p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), Gecko supports DOM Level 3 Events "wheel". All web developers should handle only this event. You can see [https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/wheel the detail of "wheel" event] and [https://developer.mozilla.org/en-US/docs/DOM/WheelEvent WheelEvent interface] in MDN.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's always fired after a DOMMouseScroll event, however, it may be fired without DOMMouseScroll event when native mouse wheel event causes less than one line or page.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. widget/cocoa dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_PIXEL if the mouse (or touchpad) tells Gecko how much pixels should be scrolled. Otherwise, i.e., it tells Gecko only how much lines should be scrolled, it dispatches the event with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. So, widget/windows dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE or nsIDOMWheelEvent::DOM_DELTA_PAGE. And either the deltaX or deltaY values may be non-integer value.<br />
<br />
On the other platforms, widget dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
If neither wheel, DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
This limitation doesn't change the DOM event's delta vales. This is used only at handling the default action.<br />
<br />
Stating with Mozilla 19 (Firefox 19) or later, this limitation is ignored when the delta_multiplier_* pref for the event value equals or is larger than 100000 (x1000). This allows users to scroll to start or end of the page with only one manipulation.<br />
<br />
= Minimum scroll amount at scrolling by line =<br />
<br />
When a wheel event whose deltaMode indicates line scroll scrolls a content, nsEventStateManager refers the line height of the content. However, if the line height is zero, e.g., font-size: 0; is specified, scroll is never performed.<br />
<br />
Against this issue, Mozilla 17 (Firefox 17) or later supports '''mousewheel.min_line_scroll_amount''' pref. If line height of the scroll target is smaller than this value in pixels, a wheel event which represents one line scroll scrolls this amount.<br />
<br />
However, this pref doesn't affect to the DOM event's delta values. This is used only at handling the default action.<br />
<br />
= Preferences for customizing delta values and default action =<br />
<br />
There are some prefs which can customize the delta values or default action. These prefs are applied only to trusted events.<br />
<br />
== Mozilla 17 (Firefox 17) or later ==<br />
<br />
Starting Mozilla 17 (Firefox 17), following new prefs are available.<br />
<br />
; mousewheel.default.delta_multiplier_x<br />
; mousewheel.with_alt.delta_multiplier_x<br />
; mousewheel.with_control.delta_multiplier_x<br />
; mousewheel.with_meta.delta_multiplier_x<br />
; mousewheel.with_shift.delta_multiplier_x<br />
; mousewheel.with_win.delta_multiplier_x<br />
: Customizing deltaX value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaX value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used.<br />
; mousewheel.default.delta_multiplier_y<br />
; mousewheel.with_alt.delta_multiplier_y<br />
; mousewheel.with_control.delta_multiplier_y<br />
; mousewheel.with_meta.delta_multiplier_y<br />
; mousewheel.with_shift.delta_multiplier_y<br />
; mousewheel.with_win.delta_multiplier_y<br />
: Customizing deltaY value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaY value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used.<br />
; mousewheel.default.delta_multiplier_z<br />
; mousewheel.with_alt.delta_multiplier_z<br />
; mousewheel.with_control.delta_multiplier_z<br />
; mousewheel.with_meta.delta_multiplier_z<br />
; mousewheel.with_shift.delta_multiplier_z<br />
; mousewheel.with_win.delta_multiplier_z<br />
: Customizing deltaZ value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaZ value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. NOTE: deltaZ value never becomes non-zero if it's a trusted event. So, these prefs never work actually.<br />
; mousewheel.default.action<br />
; mousewheel.with_alt.action<br />
; mousewheel.with_control.action<br />
; mousewheel.with_meta.action<br />
; mousewheel.with_shift.action<br />
; mousewheel.with_win.action<br />
: Customizing default action of "wheel" event. The value 0 means "Do nothing", 1 means "Scroll contents", 2 means "Go back or forward in the history", 3 means "Zoom in or out the contents". You cannot specify different action to vertical wheel operation and horizontal wheel operation because both deltaX and deltaY values can be non-zero same time. So, specifying different action doesn't make sense.<br />
<br />
Note that unlike 16 or earlier, you cannot specify the unit of delta values such as scrolling by pixel, line or page. I.e., you cannot specify the deltaMode value of DOM WheelEvent with any preferences. On Windows, the scroll unit is by line or page with mouse wheel. That depends on the system settings. On Mac, the scroll unit is by pixel or line. That depends on whether the device supports pixel scroll or not. On Linux, the scroll unit is always by line.<br />
<br />
== Mozilla 16 (Firefox 16) or earlier ==<br />
<br />
Mozilla 16 (Firefox 16) or earlier, following prefs are available.<br />
<br />
; mousewheel.withnokey.sysnumlines<br />
; mousewheel.withaltkey.sysnumlines<br />
; mousewheel.withcontrolkey.sysnumlines<br />
; mousewheel.withshiftkey.sysnumlines<br />
; mousewheel.withmetakey.sysnumlines<br />
; mousewheel.horizscroll.withnokey.sysnumlines<br />
; mousewheel.horizscroll.withaltkey.sysnumlines<br />
; mousewheel.horizscroll.withcontrolkey.sysnumlines<br />
; mousewheel.horizscroll.withshiftkey.sysnumlines<br />
; mousewheel.horizscroll.withmetakey.sysnumlines<br />
: If the value is true, native delta value is used. Otherwise, it's false, numlines pref value replaces the delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.numlines<br />
; mousewheel.withaltkey.numlines<br />
; mousewheel.withcontrolkey.numlines<br />
; mousewheel.withshiftkey.numlines<br />
; mousewheel.withmetakey.numlines<br />
; mousewheel.horizscroll.withnokey.numlines<br />
; mousewheel.horizscroll.withaltkey.numlines<br />
; mousewheel.horizscroll.withcontrolkey.numlines<br />
; mousewheel.horizscroll.withshiftkey.numlines<br />
; mousewheel.horizscroll.withmetakey.numlines<br />
: If "sysnumlines" is false, the pref value replaces native delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.action<br />
; mousewheel.withaltkey.action<br />
; mousewheel.withcontrolkey.action<br />
; mousewheel.withshiftkey.action<br />
; mousewheel.withmetakey.action<br />
; mousewheel.horizscroll.withnokey.action<br />
; mousewheel.horizscroll.withaltkey.action<br />
; mousewheel.horizscroll.withcontrolkey.action<br />
; mousewheel.horizscroll.withshiftkey.action<br />
; mousewheel.horizscroll.withmetakey.action<br />
: These prefs specify the default action of wheel events. The value 0 means "Scroll by lines", 1 means "Scroll by pages", 2 means "Go back or forward in the history", 3 means "Zoom in or out contents", 4 means "Scroll by pixels". If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=489488Gecko:Mouse Wheel Scrolling2012-11-22T03:03:57Z<p>Masayuki: /* Mozilla 17 (Firefox 17) or later */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), Gecko supports DOM Level 3 Events "wheel". All web developers should handle only this event. You can see [https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/wheel the detail of "wheel" event] and [https://developer.mozilla.org/en-US/docs/DOM/WheelEvent WheelEvent interface] in MDN.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's always fired after a DOMMouseScroll event, however, it may be fired without DOMMouseScroll event when native mouse wheel event causes less than one line or page.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. widget/cocoa dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_PIXEL if the mouse (or touchpad) tells Gecko how much pixels should be scrolled. Otherwise, i.e., it tells Gecko only how much lines should be scrolled, it dispatches the event with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. So, widget/windows dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE or nsIDOMWheelEvent::DOM_DELTA_PAGE. And either the deltaX or deltaY values may be non-integer value.<br />
<br />
On the other platforms, widget dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
If neither wheel, DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
Stating with Mozilla 19 (Firefox 19) or later, this limitation is ignored when the delta_multiplier_* pref for the event value equals or is larger than 100000 (x1000). This allows users to scroll to start or end of the page with only one manipulation.<br />
<br />
= Preferences for customizing delta values and default action =<br />
<br />
There are some prefs which can customize the delta values or default action. These prefs are applied only to trusted events.<br />
<br />
== Mozilla 17 (Firefox 17) or later ==<br />
<br />
Starting Mozilla 17 (Firefox 17), following new prefs are available.<br />
<br />
; mousewheel.default.delta_multiplier_x<br />
; mousewheel.with_alt.delta_multiplier_x<br />
; mousewheel.with_control.delta_multiplier_x<br />
; mousewheel.with_meta.delta_multiplier_x<br />
; mousewheel.with_shift.delta_multiplier_x<br />
; mousewheel.with_win.delta_multiplier_x<br />
: Customizing deltaX value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaX value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used.<br />
; mousewheel.default.delta_multiplier_y<br />
; mousewheel.with_alt.delta_multiplier_y<br />
; mousewheel.with_control.delta_multiplier_y<br />
; mousewheel.with_meta.delta_multiplier_y<br />
; mousewheel.with_shift.delta_multiplier_y<br />
; mousewheel.with_win.delta_multiplier_y<br />
: Customizing deltaY value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaY value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used.<br />
; mousewheel.default.delta_multiplier_z<br />
; mousewheel.with_alt.delta_multiplier_z<br />
; mousewheel.with_control.delta_multiplier_z<br />
; mousewheel.with_meta.delta_multiplier_z<br />
; mousewheel.with_shift.delta_multiplier_z<br />
; mousewheel.with_win.delta_multiplier_z<br />
: Customizing deltaZ value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaZ value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. NOTE: deltaZ value never becomes non-zero if it's a trusted event. So, these prefs never work actually.<br />
; mousewheel.default.action<br />
; mousewheel.with_alt.action<br />
; mousewheel.with_control.action<br />
; mousewheel.with_meta.action<br />
; mousewheel.with_shift.action<br />
; mousewheel.with_win.action<br />
: Customizing default action of "wheel" event. The value 0 means "Do nothing", 1 means "Scroll contents", 2 means "Go back or forward in the history", 3 means "Zoom in or out the contents". You cannot specify different action to vertical wheel operation and horizontal wheel operation because both deltaX and deltaY values can be non-zero same time. So, specifying different action doesn't make sense.<br />
<br />
Note that unlike 16 or earlier, you cannot specify the unit of delta values such as scrolling by pixel, line or page. I.e., you cannot specify the deltaMode value of DOM WheelEvent with any preferences. On Windows, the scroll unit is by line or page with mouse wheel. That depends on the system settings. On Mac, the scroll unit is by pixel or line. That depends on whether the device supports pixel scroll or not. On Linux, the scroll unit is always by line.<br />
<br />
== Mozilla 16 (Firefox 16) or earlier ==<br />
<br />
Mozilla 16 (Firefox 16) or earlier, following prefs are available.<br />
<br />
; mousewheel.withnokey.sysnumlines<br />
; mousewheel.withaltkey.sysnumlines<br />
; mousewheel.withcontrolkey.sysnumlines<br />
; mousewheel.withshiftkey.sysnumlines<br />
; mousewheel.withmetakey.sysnumlines<br />
; mousewheel.horizscroll.withnokey.sysnumlines<br />
; mousewheel.horizscroll.withaltkey.sysnumlines<br />
; mousewheel.horizscroll.withcontrolkey.sysnumlines<br />
; mousewheel.horizscroll.withshiftkey.sysnumlines<br />
; mousewheel.horizscroll.withmetakey.sysnumlines<br />
: If the value is true, native delta value is used. Otherwise, it's false, numlines pref value replaces the delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.numlines<br />
; mousewheel.withaltkey.numlines<br />
; mousewheel.withcontrolkey.numlines<br />
; mousewheel.withshiftkey.numlines<br />
; mousewheel.withmetakey.numlines<br />
; mousewheel.horizscroll.withnokey.numlines<br />
; mousewheel.horizscroll.withaltkey.numlines<br />
; mousewheel.horizscroll.withcontrolkey.numlines<br />
; mousewheel.horizscroll.withshiftkey.numlines<br />
; mousewheel.horizscroll.withmetakey.numlines<br />
: If "sysnumlines" is false, the pref value replaces native delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.action<br />
; mousewheel.withaltkey.action<br />
; mousewheel.withcontrolkey.action<br />
; mousewheel.withshiftkey.action<br />
; mousewheel.withmetakey.action<br />
; mousewheel.horizscroll.withnokey.action<br />
; mousewheel.horizscroll.withaltkey.action<br />
; mousewheel.horizscroll.withcontrolkey.action<br />
; mousewheel.horizscroll.withshiftkey.action<br />
; mousewheel.horizscroll.withmetakey.action<br />
: These prefs specify the default action of wheel events. The value 0 means "Scroll by lines", 1 means "Scroll by pages", 2 means "Go back or forward in the history", 3 means "Zoom in or out contents", 4 means "Scroll by pixels". If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=489487Gecko:Mouse Wheel Scrolling2012-11-22T02:58:00Z<p>Masayuki: /* Limitation of scroll amount */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), Gecko supports DOM Level 3 Events "wheel". All web developers should handle only this event. You can see [https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/wheel the detail of "wheel" event] and [https://developer.mozilla.org/en-US/docs/DOM/WheelEvent WheelEvent interface] in MDN.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's always fired after a DOMMouseScroll event, however, it may be fired without DOMMouseScroll event when native mouse wheel event causes less than one line or page.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. widget/cocoa dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_PIXEL if the mouse (or touchpad) tells Gecko how much pixels should be scrolled. Otherwise, i.e., it tells Gecko only how much lines should be scrolled, it dispatches the event with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. So, widget/windows dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE or nsIDOMWheelEvent::DOM_DELTA_PAGE. And either the deltaX or deltaY values may be non-integer value.<br />
<br />
On the other platforms, widget dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
If neither wheel, DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
Stating with Mozilla 19 (Firefox 19) or later, this limitation is ignored when the delta_multiplier_* pref for the event value equals or is larger than 100000 (x1000). This allows users to scroll to start or end of the page with only one manipulation.<br />
<br />
= Preferences for customizing delta values and default action =<br />
<br />
There are some prefs which can customize the delta values or default action. These prefs are applied only to trusted events.<br />
<br />
== Mozilla 17 (Firefox 17) or later ==<br />
<br />
Starting Mozilla 17 (Firefox 17), following new prefs are available.<br />
<br />
; mousewheel.default.delta_multiplier_x<br />
; mousewheel.with_alt.delta_multiplier_x<br />
; mousewheel.with_control.delta_multiplier_x<br />
; mousewheel.with_meta.delta_multiplier_x<br />
; mousewheel.with_shift.delta_multiplier_x<br />
; mousewheel.with_win.delta_multiplier_x<br />
: Customizing deltaX value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaX value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used.<br />
; mousewheel.default.delta_multiplier_y<br />
; mousewheel.with_alt.delta_multiplier_y<br />
; mousewheel.with_control.delta_multiplier_y<br />
; mousewheel.with_meta.delta_multiplier_y<br />
; mousewheel.with_shift.delta_multiplier_y<br />
; mousewheel.with_win.delta_multiplier_y<br />
: Customizing deltaY value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaY value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used.<br />
; mousewheel.default.delta_multiplier_z<br />
; mousewheel.with_alt.delta_multiplier_z<br />
; mousewheel.with_control.delta_multiplier_z<br />
; mousewheel.with_meta.delta_multiplier_z<br />
; mousewheel.with_shift.delta_multiplier_z<br />
; mousewheel.with_win.delta_multiplier_z<br />
: Customizing deltaZ value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaZ value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. NOTE: deltaZ value never becomes non-zero if it's a trusted event. So, these prefs never work actually.<br />
; mousewheel.default.action<br />
; mousewheel.with_alt.action<br />
; mousewheel.with_control.action<br />
; mousewheel.with_meta.action<br />
; mousewheel.with_shift.action<br />
; mousewheel.with_win.action<br />
: Customizing default action of "wheel" event. The value 0 means "Do nothing", 1 means "Scroll contents", 2 means "Go back or forward in the history", 3 means "Zoom in or out the contents". You cannot specify different action to vertical wheel operation and horizontal wheel operation because both deltaX and deltaY values can be non-zero same time. So, specifying different action doesn't make sense.<br />
<br />
Note that unlike 16 or earlier, you cannot specify the unit of delta values such as scrolling by pixel, line or page.<br />
<br />
== Mozilla 16 (Firefox 16) or earlier ==<br />
<br />
Mozilla 16 (Firefox 16) or earlier, following prefs are available.<br />
<br />
; mousewheel.withnokey.sysnumlines<br />
; mousewheel.withaltkey.sysnumlines<br />
; mousewheel.withcontrolkey.sysnumlines<br />
; mousewheel.withshiftkey.sysnumlines<br />
; mousewheel.withmetakey.sysnumlines<br />
; mousewheel.horizscroll.withnokey.sysnumlines<br />
; mousewheel.horizscroll.withaltkey.sysnumlines<br />
; mousewheel.horizscroll.withcontrolkey.sysnumlines<br />
; mousewheel.horizscroll.withshiftkey.sysnumlines<br />
; mousewheel.horizscroll.withmetakey.sysnumlines<br />
: If the value is true, native delta value is used. Otherwise, it's false, numlines pref value replaces the delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.numlines<br />
; mousewheel.withaltkey.numlines<br />
; mousewheel.withcontrolkey.numlines<br />
; mousewheel.withshiftkey.numlines<br />
; mousewheel.withmetakey.numlines<br />
; mousewheel.horizscroll.withnokey.numlines<br />
; mousewheel.horizscroll.withaltkey.numlines<br />
; mousewheel.horizscroll.withcontrolkey.numlines<br />
; mousewheel.horizscroll.withshiftkey.numlines<br />
; mousewheel.horizscroll.withmetakey.numlines<br />
: If "sysnumlines" is false, the pref value replaces native delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.action<br />
; mousewheel.withaltkey.action<br />
; mousewheel.withcontrolkey.action<br />
; mousewheel.withshiftkey.action<br />
; mousewheel.withmetakey.action<br />
; mousewheel.horizscroll.withnokey.action<br />
; mousewheel.horizscroll.withaltkey.action<br />
; mousewheel.horizscroll.withcontrolkey.action<br />
; mousewheel.horizscroll.withshiftkey.action<br />
; mousewheel.horizscroll.withmetakey.action<br />
: These prefs specify the default action of wheel events. The value 0 means "Scroll by lines", 1 means "Scroll by pages", 2 means "Go back or forward in the history", 3 means "Zoom in or out contents", 4 means "Scroll by pixels". If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=489486Gecko:Mouse Wheel Scrolling2012-11-22T02:51:20Z<p>Masayuki: /* Mozilla 17 (Firefox 17) or later */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), Gecko supports DOM Level 3 Events "wheel". All web developers should handle only this event. You can see [https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/wheel the detail of "wheel" event] and [https://developer.mozilla.org/en-US/docs/DOM/WheelEvent WheelEvent interface] in MDN.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's always fired after a DOMMouseScroll event, however, it may be fired without DOMMouseScroll event when native mouse wheel event causes less than one line or page.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. widget/cocoa dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_PIXEL if the mouse (or touchpad) tells Gecko how much pixels should be scrolled. Otherwise, i.e., it tells Gecko only how much lines should be scrolled, it dispatches the event with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. So, widget/windows dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE or nsIDOMWheelEvent::DOM_DELTA_PAGE. And either the deltaX or deltaY values may be non-integer value.<br />
<br />
On the other platforms, widget dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
If neither wheel, DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Preferences for customizing delta values and default action =<br />
<br />
There are some prefs which can customize the delta values or default action. These prefs are applied only to trusted events.<br />
<br />
== Mozilla 17 (Firefox 17) or later ==<br />
<br />
Starting Mozilla 17 (Firefox 17), following new prefs are available.<br />
<br />
; mousewheel.default.delta_multiplier_x<br />
; mousewheel.with_alt.delta_multiplier_x<br />
; mousewheel.with_control.delta_multiplier_x<br />
; mousewheel.with_meta.delta_multiplier_x<br />
; mousewheel.with_shift.delta_multiplier_x<br />
; mousewheel.with_win.delta_multiplier_x<br />
: Customizing deltaX value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaX value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used.<br />
; mousewheel.default.delta_multiplier_y<br />
; mousewheel.with_alt.delta_multiplier_y<br />
; mousewheel.with_control.delta_multiplier_y<br />
; mousewheel.with_meta.delta_multiplier_y<br />
; mousewheel.with_shift.delta_multiplier_y<br />
; mousewheel.with_win.delta_multiplier_y<br />
: Customizing deltaY value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaY value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used.<br />
; mousewheel.default.delta_multiplier_z<br />
; mousewheel.with_alt.delta_multiplier_z<br />
; mousewheel.with_control.delta_multiplier_z<br />
; mousewheel.with_meta.delta_multiplier_z<br />
; mousewheel.with_shift.delta_multiplier_z<br />
; mousewheel.with_win.delta_multiplier_z<br />
: Customizing deltaZ value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaZ value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. NOTE: deltaZ value never becomes non-zero if it's a trusted event. So, these prefs never work actually.<br />
; mousewheel.default.action<br />
; mousewheel.with_alt.action<br />
; mousewheel.with_control.action<br />
; mousewheel.with_meta.action<br />
; mousewheel.with_shift.action<br />
; mousewheel.with_win.action<br />
: Customizing default action of "wheel" event. The value 0 means "Do nothing", 1 means "Scroll contents", 2 means "Go back or forward in the history", 3 means "Zoom in or out the contents". You cannot specify different action to vertical wheel operation and horizontal wheel operation because both deltaX and deltaY values can be non-zero same time. So, specifying different action doesn't make sense.<br />
<br />
Note that unlike 16 or earlier, you cannot specify the unit of delta values such as scrolling by pixel, line or page.<br />
<br />
== Mozilla 16 (Firefox 16) or earlier ==<br />
<br />
Mozilla 16 (Firefox 16) or earlier, following prefs are available.<br />
<br />
; mousewheel.withnokey.sysnumlines<br />
; mousewheel.withaltkey.sysnumlines<br />
; mousewheel.withcontrolkey.sysnumlines<br />
; mousewheel.withshiftkey.sysnumlines<br />
; mousewheel.withmetakey.sysnumlines<br />
; mousewheel.horizscroll.withnokey.sysnumlines<br />
; mousewheel.horizscroll.withaltkey.sysnumlines<br />
; mousewheel.horizscroll.withcontrolkey.sysnumlines<br />
; mousewheel.horizscroll.withshiftkey.sysnumlines<br />
; mousewheel.horizscroll.withmetakey.sysnumlines<br />
: If the value is true, native delta value is used. Otherwise, it's false, numlines pref value replaces the delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.numlines<br />
; mousewheel.withaltkey.numlines<br />
; mousewheel.withcontrolkey.numlines<br />
; mousewheel.withshiftkey.numlines<br />
; mousewheel.withmetakey.numlines<br />
; mousewheel.horizscroll.withnokey.numlines<br />
; mousewheel.horizscroll.withaltkey.numlines<br />
; mousewheel.horizscroll.withcontrolkey.numlines<br />
; mousewheel.horizscroll.withshiftkey.numlines<br />
; mousewheel.horizscroll.withmetakey.numlines<br />
: If "sysnumlines" is false, the pref value replaces native delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.action<br />
; mousewheel.withaltkey.action<br />
; mousewheel.withcontrolkey.action<br />
; mousewheel.withshiftkey.action<br />
; mousewheel.withmetakey.action<br />
; mousewheel.horizscroll.withnokey.action<br />
; mousewheel.horizscroll.withaltkey.action<br />
; mousewheel.horizscroll.withcontrolkey.action<br />
; mousewheel.horizscroll.withshiftkey.action<br />
; mousewheel.horizscroll.withmetakey.action<br />
: These prefs specify the default action of wheel events. The value 0 means "Scroll by lines", 1 means "Scroll by pages", 2 means "Go back or forward in the history", 3 means "Zoom in or out contents", 4 means "Scroll by pixels". If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=468957Gecko:Mouse Wheel Scrolling2012-09-08T16:42:21Z<p>Masayuki: /* Mozilla 17 (Firefox 17) or later */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), Gecko supports DOM Level 3 Events "wheel". All web developers should handle only this event. You can see [https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/wheel the detail of "wheel" event] and [https://developer.mozilla.org/en-US/docs/DOM/WheelEvent WheelEvent interface] in MDN.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's always fired after a DOMMouseScroll event, however, it may be fired without DOMMouseScroll event when native mouse wheel event causes less than one line or page.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. widget/cocoa dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_PIXEL if the mouse (or touchpad) tells Gecko how much pixels should be scrolled. Otherwise, i.e., it tells Gecko only how much lines should be scrolled, it dispatches the event with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. So, widget/windows dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE or nsIDOMWheelEvent::DOM_DELTA_PAGE. And either the deltaX or deltaY values may be non-integer value.<br />
<br />
On the other platforms, widget dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
If neither wheel, DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Preferences for customizing delta values and default action =<br />
<br />
There are some prefs which can customize the delta values or default action. These prefs are applied only to trusted events.<br />
<br />
== Mozilla 17 (Firefox 17) or later ==<br />
<br />
Starting Mozilla 17 (Firefox 17), following new prefs are available.<br />
<br />
; mousewheel.default.delta_multiplier_x<br />
; mousewheel.with_alt.delta_multiplier_x<br />
; mousewheel.with_control.delta_multiplier_x<br />
; mousewheel.with_meta.delta_multiplier_x<br />
; mousewheel.with_shift.delta_multiplier_x<br />
; mousewheel.with_win.delta_multiplier_x<br />
: Customizing deltaX value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaX value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used.<br />
; mousewheel.default.delta_multiplier_y<br />
; mousewheel.with_alt.delta_multiplier_y<br />
; mousewheel.with_control.delta_multiplier_y<br />
; mousewheel.with_meta.delta_multiplier_y<br />
; mousewheel.with_shift.delta_multiplier_y<br />
; mousewheel.with_win.delta_multiplier_y<br />
: Customizing deltaY value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaY value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used.<br />
; mousewheel.default.delta_multiplier_z<br />
; mousewheel.with_alt.delta_multiplier_z<br />
; mousewheel.with_control.delta_multiplier_z<br />
; mousewheel.with_meta.delta_multiplier_z<br />
; mousewheel.with_shift.delta_multiplier_z<br />
; mousewheel.with_win.delta_multiplier_z<br />
: Customizing deltaZ value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaZ value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. NOTE: deltaZ value never becomes non-zero if it's a trusted event. So, these prefs never work actually.<br />
; mousewheel.default.action<br />
; mousewheel.with_alt.action<br />
; mousewheel.with_control.action<br />
; mousewheel.with_meta.action<br />
; mousewheel.with_shift.action<br />
; mousewheel.with_win.action<br />
: Customizing default action of "wheel" event. The value 0 means "Do nothing", 1 means "Scroll contents", 2 means "Go back or forward in the history", 3 means "Zoom in or out the contents". You cannot specify different action to vertical wheel operation and horizontal wheel operation because both deltaX and deltaY values can be non-zero same time. So, specifying different action doesn't make sense.<br />
<br />
== Mozilla 16 (Firefox 16) or earlier ==<br />
<br />
Mozilla 16 (Firefox 16) or earlier, following prefs are available.<br />
<br />
; mousewheel.withnokey.sysnumlines<br />
; mousewheel.withaltkey.sysnumlines<br />
; mousewheel.withcontrolkey.sysnumlines<br />
; mousewheel.withshiftkey.sysnumlines<br />
; mousewheel.withmetakey.sysnumlines<br />
; mousewheel.horizscroll.withnokey.sysnumlines<br />
; mousewheel.horizscroll.withaltkey.sysnumlines<br />
; mousewheel.horizscroll.withcontrolkey.sysnumlines<br />
; mousewheel.horizscroll.withshiftkey.sysnumlines<br />
; mousewheel.horizscroll.withmetakey.sysnumlines<br />
: If the value is true, native delta value is used. Otherwise, it's false, numlines pref value replaces the delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.numlines<br />
; mousewheel.withaltkey.numlines<br />
; mousewheel.withcontrolkey.numlines<br />
; mousewheel.withshiftkey.numlines<br />
; mousewheel.withmetakey.numlines<br />
; mousewheel.horizscroll.withnokey.numlines<br />
; mousewheel.horizscroll.withaltkey.numlines<br />
; mousewheel.horizscroll.withcontrolkey.numlines<br />
; mousewheel.horizscroll.withshiftkey.numlines<br />
; mousewheel.horizscroll.withmetakey.numlines<br />
: If "sysnumlines" is false, the pref value replaces native delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.action<br />
; mousewheel.withaltkey.action<br />
; mousewheel.withcontrolkey.action<br />
; mousewheel.withshiftkey.action<br />
; mousewheel.withmetakey.action<br />
; mousewheel.horizscroll.withnokey.action<br />
; mousewheel.horizscroll.withaltkey.action<br />
; mousewheel.horizscroll.withcontrolkey.action<br />
; mousewheel.horizscroll.withshiftkey.action<br />
; mousewheel.horizscroll.withmetakey.action<br />
: These prefs specify the default action of wheel events. The value 0 means "Scroll by lines", 1 means "Scroll by pages", 2 means "Go back or forward in the history", 3 means "Zoom in or out contents", 4 means "Scroll by pixels". If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=460216Gecko:Mouse Wheel Scrolling2012-08-13T05:12:04Z<p>Masayuki: </p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), Gecko supports DOM Level 3 Events "wheel". All web developers should handle only this event. You can see [https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/wheel the detail of "wheel" event] and [https://developer.mozilla.org/en-US/docs/DOM/WheelEvent WheelEvent interface] in MDN.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's always fired after a DOMMouseScroll event, however, it may be fired without DOMMouseScroll event when native mouse wheel event causes less than one line or page.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. widget/cocoa dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_PIXEL if the mouse (or touchpad) tells Gecko how much pixels should be scrolled. Otherwise, i.e., it tells Gecko only how much lines should be scrolled, it dispatches the event with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. So, widget/windows dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE or nsIDOMWheelEvent::DOM_DELTA_PAGE. And either the deltaX or deltaY values may be non-integer value.<br />
<br />
On the other platforms, widget dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
If neither wheel, DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Preferences for customizing delta values and default action =<br />
<br />
There are some prefs which can customize the delta values or default action. These prefs are applied only to trusted events.<br />
<br />
== Mozilla 17 (Firefox 17) or later ==<br />
<br />
Starting Mozilla 17 (Firefox 17), following new prefs are available.<br />
<br />
; mousewheel.default.delta_multiplier_x<br />
; mousewheel.with_alt.delta_multiplier_x<br />
; mousewheel.with_control.delta_multiplier_x<br />
; mousewheel.with_meta.delta_multiplier_x<br />
; mousewheel.with_shift.delta_multiplier_x<br />
; mousewheel.with_win.delta_multiplier_x<br />
: Customizing deltaX value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaX value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed.<br />
; mousewheel.default.delta_multiplier_y<br />
; mousewheel.with_alt.delta_multiplier_y<br />
; mousewheel.with_control.delta_multiplier_y<br />
; mousewheel.with_meta.delta_multiplier_y<br />
; mousewheel.with_shift.delta_multiplier_y<br />
; mousewheel.with_win.delta_multiplier_y<br />
: Customizing deltaY value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaY value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed.<br />
; mousewheel.default.delta_multiplier_z<br />
; mousewheel.with_alt.delta_multiplier_z<br />
; mousewheel.with_control.delta_multiplier_z<br />
; mousewheel.with_meta.delta_multiplier_z<br />
; mousewheel.with_shift.delta_multiplier_z<br />
; mousewheel.with_win.delta_multiplier_z<br />
: Customizing deltaZ value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaZ value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed. NOTE: deltaZ value never becomes non-zero if it's a trusted event. So, these prefs never work actually.<br />
; mousewheel.default.action<br />
; mousewheel.with_alt.action<br />
; mousewheel.with_control.action<br />
; mousewheel.with_meta.action<br />
; mousewheel.with_shift.action<br />
; mousewheel.with_win.action<br />
: Customizing default action of "wheel" event. The value 0 means "Do nothing", 1 means "Scroll contents", 2 means "Go back or forward in the history", 3 means "Zoom in or out the contents". You cannot specify different action to vertical wheel operation and horizontal wheel operation because both deltaX and deltaY values can be non-zero same time. So, specifying different action doesn't make sense.<br />
<br />
== Mozilla 16 (Firefox 16) or earlier ==<br />
<br />
Mozilla 16 (Firefox 16) or earlier, following prefs are available.<br />
<br />
; mousewheel.withnokey.sysnumlines<br />
; mousewheel.withaltkey.sysnumlines<br />
; mousewheel.withcontrolkey.sysnumlines<br />
; mousewheel.withshiftkey.sysnumlines<br />
; mousewheel.withmetakey.sysnumlines<br />
; mousewheel.horizscroll.withnokey.sysnumlines<br />
; mousewheel.horizscroll.withaltkey.sysnumlines<br />
; mousewheel.horizscroll.withcontrolkey.sysnumlines<br />
; mousewheel.horizscroll.withshiftkey.sysnumlines<br />
; mousewheel.horizscroll.withmetakey.sysnumlines<br />
: If the value is true, native delta value is used. Otherwise, it's false, numlines pref value replaces the delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.numlines<br />
; mousewheel.withaltkey.numlines<br />
; mousewheel.withcontrolkey.numlines<br />
; mousewheel.withshiftkey.numlines<br />
; mousewheel.withmetakey.numlines<br />
; mousewheel.horizscroll.withnokey.numlines<br />
; mousewheel.horizscroll.withaltkey.numlines<br />
; mousewheel.horizscroll.withcontrolkey.numlines<br />
; mousewheel.horizscroll.withshiftkey.numlines<br />
; mousewheel.horizscroll.withmetakey.numlines<br />
: If "sysnumlines" is false, the pref value replaces native delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.action<br />
; mousewheel.withaltkey.action<br />
; mousewheel.withcontrolkey.action<br />
; mousewheel.withshiftkey.action<br />
; mousewheel.withmetakey.action<br />
; mousewheel.horizscroll.withnokey.action<br />
; mousewheel.horizscroll.withaltkey.action<br />
; mousewheel.horizscroll.withcontrolkey.action<br />
; mousewheel.horizscroll.withshiftkey.action<br />
; mousewheel.horizscroll.withmetakey.action<br />
: These prefs specify the default action of wheel events. The value 0 means "Scroll by lines", 1 means "Scroll by pages", 2 means "Go back or forward in the history", 3 means "Zoom in or out contents", 4 means "Scroll by pixels". If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=460207Gecko:Mouse Wheel Scrolling2012-08-13T01:31:21Z<p>Masayuki: /* Preferences for customizing delta values and default action */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), Gecko supports DOM Level 3 Events "wheel". All web developers should handle only this event. You can see [https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/wheel the detail of "wheel" event] and [https://developer.mozilla.org/en-US/docs/DOM/WheelEvent WheelEvent interface] in MDN.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's always fired after a DOMMouseScroll event, however, it may be fired without DOMMouseScroll event when native mouse wheel event causes less than one line or page.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. widget/cocoa dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_PIXEL if the mouse (or touchpad) tells Gecko how much pixels should be scrolled. Otherwise, i.e., it tells Gecko only how much lines should be scrolled, it dispatches the event with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. So, widget/windows dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE or nsIDOMWheelEvent::DOM_DELTA_PAGE. And either the deltaX or deltaY values may be non-integer value.<br />
<br />
On the other platforms, widget dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
If neither wheel, DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Preferences for customizing delta values and default action =<br />
<br />
There are some prefs which can customize the delta values or default action. These prefs are applied only to trusted events.<br />
<br />
Starting Mozilla 17 (Firefox 17), following new prefs are available.<br />
<br />
; mousewheel.default.delta_multiplier_x<br />
; mousewheel.with_alt.delta_multiplier_x<br />
; mousewheel.with_control.delta_multiplier_x<br />
; mousewheel.with_meta.delta_multiplier_x<br />
; mousewheel.with_shift.delta_multiplier_x<br />
; mousewheel.with_win.delta_multiplier_x<br />
: Customizing deltaX value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaX value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed.<br />
; mousewheel.default.delta_multiplier_y<br />
; mousewheel.with_alt.delta_multiplier_y<br />
; mousewheel.with_control.delta_multiplier_y<br />
; mousewheel.with_meta.delta_multiplier_y<br />
; mousewheel.with_shift.delta_multiplier_y<br />
; mousewheel.with_win.delta_multiplier_y<br />
: Customizing deltaY value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaY value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed.<br />
; mousewheel.default.delta_multiplier_z<br />
; mousewheel.with_alt.delta_multiplier_z<br />
; mousewheel.with_control.delta_multiplier_z<br />
; mousewheel.with_meta.delta_multiplier_z<br />
; mousewheel.with_shift.delta_multiplier_z<br />
; mousewheel.with_win.delta_multiplier_z<br />
: Customizing deltaZ value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaZ value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed. NOTE: deltaZ value never becomes non-zero if it's a trusted event. So, these prefs never work actually.<br />
; mousewheel.default.action<br />
; mousewheel.with_alt.action<br />
; mousewheel.with_control.action<br />
; mousewheel.with_meta.action<br />
; mousewheel.with_shift.action<br />
; mousewheel.with_win.action<br />
: Customizing default action of "wheel" event. The value 0 means "Do nothing", 1 means "Scroll contents", 2 means "Go back or forward in the history", 3 means "Zoom in or out the contents". You cannot specify different action to vertical wheel operation and horizontal wheel operation because both deltaX and deltaY values can be non-zero same time. So, specifying different action doesn't make sense.<br />
<br />
Mozilla 16 (Firefox 16) or earlier, following prefs are available.<br />
<br />
; mousewheel.withnokey.sysnumlines<br />
; mousewheel.withaltkey.sysnumlines<br />
; mousewheel.withcontrolkey.sysnumlines<br />
; mousewheel.withshiftkey.sysnumlines<br />
; mousewheel.withmetakey.sysnumlines<br />
; mousewheel.horizscroll.withnokey.sysnumlines<br />
; mousewheel.horizscroll.withaltkey.sysnumlines<br />
; mousewheel.horizscroll.withcontrolkey.sysnumlines<br />
; mousewheel.horizscroll.withshiftkey.sysnumlines<br />
; mousewheel.horizscroll.withmetakey.sysnumlines<br />
: If the value is true, native delta value is used. Otherwise, it's false, numlines pref value replaces the delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.numlines<br />
; mousewheel.withaltkey.numlines<br />
; mousewheel.withcontrolkey.numlines<br />
; mousewheel.withshiftkey.numlines<br />
; mousewheel.withmetakey.numlines<br />
; mousewheel.horizscroll.withnokey.numlines<br />
; mousewheel.horizscroll.withaltkey.numlines<br />
; mousewheel.horizscroll.withcontrolkey.numlines<br />
; mousewheel.horizscroll.withshiftkey.numlines<br />
; mousewheel.horizscroll.withmetakey.numlines<br />
: If "sysnumlines" is false, the pref value replaces native delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.action<br />
; mousewheel.withaltkey.action<br />
; mousewheel.withcontrolkey.action<br />
; mousewheel.withshiftkey.action<br />
; mousewheel.withmetakey.action<br />
; mousewheel.horizscroll.withnokey.action<br />
; mousewheel.horizscroll.withaltkey.action<br />
; mousewheel.horizscroll.withcontrolkey.action<br />
; mousewheel.horizscroll.withshiftkey.action<br />
; mousewheel.horizscroll.withmetakey.action<br />
: These prefs specify the default action of wheel events. The value 0 means "Scroll by lines", 1 means "Scroll by pages", 2 means "Go back or forward in the history", 3 means "Zoom in or out contents", 4 means "Scroll by pixels". If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=460205Gecko:Mouse Wheel Scrolling2012-08-13T01:27:22Z<p>Masayuki: /* Preferences for customizing delta values and default action */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), Gecko supports DOM Level 3 Events "wheel". All web developers should handle only this event. You can see [https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/wheel the detail of "wheel" event] and [https://developer.mozilla.org/en-US/docs/DOM/WheelEvent WheelEvent interface] in MDN.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's always fired after a DOMMouseScroll event, however, it may be fired without DOMMouseScroll event when native mouse wheel event causes less than one line or page.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. widget/cocoa dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_PIXEL if the mouse (or touchpad) tells Gecko how much pixels should be scrolled. Otherwise, i.e., it tells Gecko only how much lines should be scrolled, it dispatches the event with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. So, widget/windows dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE or nsIDOMWheelEvent::DOM_DELTA_PAGE. And either the deltaX or deltaY values may be non-integer value.<br />
<br />
On the other platforms, widget dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
If neither wheel, DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Preferences for customizing delta values and default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), following new prefs are available.<br />
<br />
; mousewheel.default.delta_multiplier_x<br />
; mousewheel.with_alt.delta_multiplier_x<br />
; mousewheel.with_control.delta_multiplier_x<br />
; mousewheel.with_meta.delta_multiplier_x<br />
; mousewheel.with_shift.delta_multiplier_x<br />
; mousewheel.with_win.delta_multiplier_x<br />
: Customizing deltaX value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaX value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed.<br />
; mousewheel.default.delta_multiplier_y<br />
; mousewheel.with_alt.delta_multiplier_y<br />
; mousewheel.with_control.delta_multiplier_y<br />
; mousewheel.with_meta.delta_multiplier_y<br />
; mousewheel.with_shift.delta_multiplier_y<br />
; mousewheel.with_win.delta_multiplier_y<br />
: Customizing deltaY value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaY value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed.<br />
; mousewheel.default.delta_multiplier_z<br />
; mousewheel.with_alt.delta_multiplier_z<br />
; mousewheel.with_control.delta_multiplier_z<br />
; mousewheel.with_meta.delta_multiplier_z<br />
; mousewheel.with_shift.delta_multiplier_z<br />
; mousewheel.with_win.delta_multiplier_z<br />
: Customizing deltaZ value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaZ value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed. NOTE: deltaZ value never becomes non-zero if it's a trusted event. So, these prefs never work actually.<br />
; mousewheel.default.action<br />
; mousewheel.with_alt.action<br />
; mousewheel.with_control.action<br />
; mousewheel.with_meta.action<br />
; mousewheel.with_shift.action<br />
; mousewheel.with_win.action<br />
: Customizing default action of "wheel" event. The value 0 means "Do nothing", 1 means "Scroll contents", 2 means "Go back or forward in the history", 3 means "Zoom in or out the contents". You cannot specify different action to vertical wheel operation and horizontal wheel operation because both deltaX and deltaY values can be non-zero same time. So, specifying different action doesn't make sense.<br />
<br />
Mozilla 16 (Firefox 16) or earlier, following prefs are available.<br />
<br />
; mousewheel.withnokey.sysnumlines<br />
; mousewheel.withaltkey.sysnumlines<br />
; mousewheel.withcontrolkey.sysnumlines<br />
; mousewheel.withshiftkey.sysnumlines<br />
; mousewheel.withmetakey.sysnumlines<br />
; mousewheel.horizscroll.withnokey.sysnumlines<br />
; mousewheel.horizscroll.withaltkey.sysnumlines<br />
; mousewheel.horizscroll.withcontrolkey.sysnumlines<br />
; mousewheel.horizscroll.withshiftkey.sysnumlines<br />
; mousewheel.horizscroll.withmetakey.sysnumlines<br />
: If the value is true, native delta value is used. Otherwise, it's false, numlines pref value replaces the delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.numlines<br />
; mousewheel.withaltkey.numlines<br />
; mousewheel.withcontrolkey.numlines<br />
; mousewheel.withshiftkey.numlines<br />
; mousewheel.withmetakey.numlines<br />
; mousewheel.horizscroll.withnokey.numlines<br />
; mousewheel.horizscroll.withaltkey.numlines<br />
; mousewheel.horizscroll.withcontrolkey.numlines<br />
; mousewheel.horizscroll.withshiftkey.numlines<br />
; mousewheel.horizscroll.withmetakey.numlines<br />
: If "sysnumlines" is false, the pref value replaces native delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.action<br />
; mousewheel.withaltkey.action<br />
; mousewheel.withcontrolkey.action<br />
; mousewheel.withshiftkey.action<br />
; mousewheel.withmetakey.action<br />
; mousewheel.horizscroll.withnokey.action<br />
; mousewheel.horizscroll.withaltkey.action<br />
; mousewheel.horizscroll.withcontrolkey.action<br />
; mousewheel.horizscroll.withshiftkey.action<br />
; mousewheel.horizscroll.withmetakey.action<br />
: These prefs specify the default action of wheel events. The value 0 means "Scroll by lines", 1 means "Scroll by pages", 2 means "Go back or forward in the history", 3 means "Zoom in or out contents", 4 means "Scroll by pixels". If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=460204Gecko:Mouse Wheel Scrolling2012-08-13T01:26:46Z<p>Masayuki: /* Preferences for customizing delta values and default action */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), Gecko supports DOM Level 3 Events "wheel". All web developers should handle only this event. You can see [https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/wheel the detail of "wheel" event] and [https://developer.mozilla.org/en-US/docs/DOM/WheelEvent WheelEvent interface] in MDN.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's always fired after a DOMMouseScroll event, however, it may be fired without DOMMouseScroll event when native mouse wheel event causes less than one line or page.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. widget/cocoa dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_PIXEL if the mouse (or touchpad) tells Gecko how much pixels should be scrolled. Otherwise, i.e., it tells Gecko only how much lines should be scrolled, it dispatches the event with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. So, widget/windows dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE or nsIDOMWheelEvent::DOM_DELTA_PAGE. And either the deltaX or deltaY values may be non-integer value.<br />
<br />
On the other platforms, widget dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
If neither wheel, DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Preferences for customizing delta values and default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), following new prefs available.<br />
<br />
; mousewheel.default.delta_multiplier_x<br />
; mousewheel.with_alt.delta_multiplier_x<br />
; mousewheel.with_control.delta_multiplier_x<br />
; mousewheel.with_meta.delta_multiplier_x<br />
; mousewheel.with_shift.delta_multiplier_x<br />
; mousewheel.with_win.delta_multiplier_x<br />
: Customizing deltaX value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaX value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed.<br />
; mousewheel.default.delta_multiplier_y<br />
; mousewheel.with_alt.delta_multiplier_y<br />
; mousewheel.with_control.delta_multiplier_y<br />
; mousewheel.with_meta.delta_multiplier_y<br />
; mousewheel.with_shift.delta_multiplier_y<br />
; mousewheel.with_win.delta_multiplier_y<br />
: Customizing deltaY value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaY value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed.<br />
; mousewheel.default.delta_multiplier_z<br />
; mousewheel.with_alt.delta_multiplier_z<br />
; mousewheel.with_control.delta_multiplier_z<br />
; mousewheel.with_meta.delta_multiplier_z<br />
; mousewheel.with_shift.delta_multiplier_z<br />
; mousewheel.with_win.delta_multiplier_z<br />
: Customizing deltaZ value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaZ value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed. NOTE: deltaZ value never becomes non-zero if it's a trusted event. So, these prefs never work actually.<br />
; mousewheel.default.action<br />
; mousewheel.with_alt.action<br />
; mousewheel.with_control.action<br />
; mousewheel.with_meta.action<br />
; mousewheel.with_shift.action<br />
; mousewheel.with_win.action<br />
: Customizing default action of "wheel" event. The value 0 means "Do nothing", 1 means "Scroll contents", 2 means "Go back or forward in the history", 3 means "Zoom in or out the contents". You cannot specify different action to vertical wheel operation and horizontal wheel operation because both deltaX and deltaY values can be non-zero same time. So, specifying different action doesn't make sense.<br />
<br />
Mozilla 16 (Firefox 16) or earlier, following prefs are available.<br />
<br />
; mousewheel.withnokey.sysnumlines<br />
; mousewheel.withaltkey.sysnumlines<br />
; mousewheel.withcontrolkey.sysnumlines<br />
; mousewheel.withshiftkey.sysnumlines<br />
; mousewheel.withmetakey.sysnumlines<br />
; mousewheel.horizscroll.withnokey.sysnumlines<br />
; mousewheel.horizscroll.withaltkey.sysnumlines<br />
; mousewheel.horizscroll.withcontrolkey.sysnumlines<br />
; mousewheel.horizscroll.withshiftkey.sysnumlines<br />
; mousewheel.horizscroll.withmetakey.sysnumlines<br />
: If the value is true, native delta value is used. Otherwise, it's false, numlines pref value replaces the delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.numlines<br />
; mousewheel.withaltkey.numlines<br />
; mousewheel.withcontrolkey.numlines<br />
; mousewheel.withshiftkey.numlines<br />
; mousewheel.withmetakey.numlines<br />
; mousewheel.horizscroll.withnokey.numlines<br />
; mousewheel.horizscroll.withaltkey.numlines<br />
; mousewheel.horizscroll.withcontrolkey.numlines<br />
; mousewheel.horizscroll.withshiftkey.numlines<br />
; mousewheel.horizscroll.withmetakey.numlines<br />
: If "sysnumlines" is false, the pref value replaces native delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; mousewheel.withnokey.action<br />
; mousewheel.withaltkey.action<br />
; mousewheel.withcontrolkey.action<br />
; mousewheel.withshiftkey.action<br />
; mousewheel.withmetakey.action<br />
; mousewheel.horizscroll.withnokey.action<br />
; mousewheel.horizscroll.withaltkey.action<br />
; mousewheel.horizscroll.withcontrolkey.action<br />
; mousewheel.horizscroll.withshiftkey.action<br />
; mousewheel.horizscroll.withmetakey.action<br />
: These prefs specify the default action of wheel events. The value 0 means "Scroll by lines", 1 means "Scroll by pages", 2 means "Go back or forward in the history", 3 means "Zoom in or out contents", 4 means "Scroll by pixels". If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=460203Gecko:Mouse Wheel Scrolling2012-08-13T01:20:31Z<p>Masayuki: /* Preferences for customizing delta values and default action */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), Gecko supports DOM Level 3 Events "wheel". All web developers should handle only this event. You can see [https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/wheel the detail of "wheel" event] and [https://developer.mozilla.org/en-US/docs/DOM/WheelEvent WheelEvent interface] in MDN.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's always fired after a DOMMouseScroll event, however, it may be fired without DOMMouseScroll event when native mouse wheel event causes less than one line or page.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. widget/cocoa dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_PIXEL if the mouse (or touchpad) tells Gecko how much pixels should be scrolled. Otherwise, i.e., it tells Gecko only how much lines should be scrolled, it dispatches the event with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. So, widget/windows dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE or nsIDOMWheelEvent::DOM_DELTA_PAGE. And either the deltaX or deltaY values may be non-integer value.<br />
<br />
On the other platforms, widget dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
If neither wheel, DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Preferences for customizing delta values and default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), following new prefs available.<br />
<br />
; '''mousewheel.default.delta_multiplier_x'''<br />
; '''mousewheel.with_alt.delta_multiplier_x'''<br />
; '''mousewheel.with_control.delta_multiplier_x'''<br />
; '''mousewheel.with_meta.delta_multiplier_x'''<br />
; '''mousewheel.with_shift.delta_multiplier_x'''<br />
; '''mousewheel.with_win.delta_multiplier_x'''<br />
: Customizing deltaX value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaX value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed.<br />
; '''mousewheel.default.delta_multiplier_y'''<br />
; '''mousewheel.with_alt.delta_multiplier_y'''<br />
; '''mousewheel.with_control.delta_multiplier_y'''<br />
; '''mousewheel.with_meta.delta_multiplier_y'''<br />
; '''mousewheel.with_shift.delta_multiplier_y'''<br />
; '''mousewheel.with_win.delta_multiplier_y'''<br />
: Customizing deltaY value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaY value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed.<br />
; '''mousewheel.default.delta_multiplier_z'''<br />
; '''mousewheel.with_alt.delta_multiplier_z'''<br />
; '''mousewheel.with_control.delta_multiplier_z'''<br />
; '''mousewheel.with_meta.delta_multiplier_z'''<br />
; '''mousewheel.with_shift.delta_multiplier_z'''<br />
; '''mousewheel.with_win.delta_multiplier_z'''<br />
: Customizing deltaZ value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaZ value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. Currently, value between less than 100 and larger than -100 is not allowed. NOTE: deltaZ value never becomes non-zero if it's a trusted event. So, these prefs never work actually.<br />
; '''mousewheel.default.action'''<br />
; '''mousewheel.with_alt.action'''<br />
; '''mousewheel.with_control.action'''<br />
; '''mousewheel.with_meta.action'''<br />
; '''mousewheel.with_shift.action'''<br />
; '''mousewheel.with_win.action'''<br />
: Customizing default action of "wheel" event. The value 0 means "Do nothing", 1 means "Scroll contents", 2 means "Go back or forward in the history", 3 means "Zoom in or out the contents". You cannot specify different action to vertical wheel operation and horizontal wheel operation because both deltaX and deltaY values can be non-zero same time. So, specifying different action doesn't make sense.<br />
<br />
Mozilla 16 (Firefox 16) or earlier, following prefs are available.<br />
<br />
; '''mousewheel.withnokey.sysnumlines'''<br />
; '''mousewheel.withaltkey.sysnumlines'''<br />
; '''mousewheel.withcontrolkey.sysnumlines'''<br />
; '''mousewheel.withshiftkey.sysnumlines'''<br />
; '''mousewheel.withmetakey.sysnumlines'''<br />
; '''mousewheel.horizscroll.withnokey.sysnumlines'''<br />
; '''mousewheel.horizscroll.withaltkey.sysnumlines'''<br />
; '''mousewheel.horizscroll.withcontrolkey.sysnumlines'''<br />
; '''mousewheel.horizscroll.withshiftkey.sysnumlines'''<br />
; '''mousewheel.horizscroll.withmetakey.sysnumlines'''<br />
: If the value is true, native delta value is used. Otherwise, it's false, '''numlines''' pref value replaces the delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; '''mousewheel.withnokey.numlines'''<br />
; '''mousewheel.withaltkey.numlines'''<br />
; '''mousewheel.withcontrolkey.numlines'''<br />
; '''mousewheel.withshiftkey.numlines'''<br />
; '''mousewheel.withmetakey.numlines'''<br />
; '''mousewheel.horizscroll.withnokey.numlines'''<br />
; '''mousewheel.horizscroll.withaltkey.numlines'''<br />
; '''mousewheel.horizscroll.withcontrolkey.numlines'''<br />
; '''mousewheel.horizscroll.withshiftkey.numlines'''<br />
; '''mousewheel.horizscroll.withmetakey.numlines'''<br />
: If "sysnumlines" is false, the pref value replaces native delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; '''mousewheel.withnokey.action'''<br />
; '''mousewheel.withaltkey.action'''<br />
; '''mousewheel.withcontrolkey.action'''<br />
; '''mousewheel.withshiftkey.action'''<br />
; '''mousewheel.withmetakey.action'''<br />
; '''mousewheel.horizscroll.withnokey.action'''<br />
; '''mousewheel.horizscroll.withaltkey.action'''<br />
; '''mousewheel.horizscroll.withcontrolkey.action'''<br />
; '''mousewheel.horizscroll.withshiftkey.action'''<br />
; '''mousewheel.horizscroll.withmetakey.action'''<br />
: These prefs specify the default action of wheel events. The value 0 means "Scroll by lines", 1 means "Scroll by pages", 2 means "Go back or forward in the history", 3 means "Zoom in or out contents", 4 means "Scroll by pixels". If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=460202Gecko:Mouse Wheel Scrolling2012-08-13T01:18:15Z<p>Masayuki: Add "Preferences for customizing delta values and default action"</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), Gecko supports DOM Level 3 Events "wheel". All web developers should handle only this event. You can see [https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/wheel the detail of "wheel" event] and [https://developer.mozilla.org/en-US/docs/DOM/WheelEvent WheelEvent interface] in MDN.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's always fired after a DOMMouseScroll event, however, it may be fired without DOMMouseScroll event when native mouse wheel event causes less than one line or page.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. widget/cocoa dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_PIXEL if the mouse (or touchpad) tells Gecko how much pixels should be scrolled. Otherwise, i.e., it tells Gecko only how much lines should be scrolled, it dispatches the event with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. So, widget/windows dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE or nsIDOMWheelEvent::DOM_DELTA_PAGE. And either the deltaX or deltaY values may be non-integer value.<br />
<br />
On the other platforms, widget dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
If neither wheel, DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Preferences for customizing delta values and default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), following new prefs available.<br />
<br />
; '''mousewheel.default.delta_multiplier_x'''<br />
; '''mousewheel.with_alt.delta_multiplier_x'''<br />
; '''mousewheel.with_control.delta_multiplier_x'''<br />
; '''mousewheel.with_meta.delta_multiplier_x'''<br />
; '''mousewheel.with_shift.delta_multiplier_x'''<br />
; '''mousewheel.with_win.delta_multiplier_x'''<br />
: Customizing deltaX value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaX value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used.<br />
; '''mousewheel.default.delta_multiplier_y'''<br />
; '''mousewheel.with_alt.delta_multiplier_y'''<br />
; '''mousewheel.with_control.delta_multiplier_y'''<br />
; '''mousewheel.with_meta.delta_multiplier_y'''<br />
; '''mousewheel.with_shift.delta_multiplier_y'''<br />
; '''mousewheel.with_win.delta_multiplier_y'''<br />
: Customizing deltaY value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaY value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used.<br />
; '''mousewheel.default.delta_multiplier_z'''<br />
; '''mousewheel.with_alt.delta_multiplier_z'''<br />
; '''mousewheel.with_control.delta_multiplier_z'''<br />
; '''mousewheel.with_meta.delta_multiplier_z'''<br />
; '''mousewheel.with_shift.delta_multiplier_z'''<br />
; '''mousewheel.with_win.delta_multiplier_z'''<br />
: Customizing deltaZ value of "wheel" event. The value 100 means 1.0. In nsEventStateManager, the deltaZ value which is caused by a native event multiplies by the pref value. When two or more modifier keys are held, "default" pref is used. NOTE: deltaZ value never becomes non-zero if it's a trusted event. So, these prefs never work actually.<br />
; '''mousewheel.default.action'''<br />
; '''mousewheel.with_alt.action'''<br />
; '''mousewheel.with_control.action'''<br />
; '''mousewheel.with_meta.action'''<br />
; '''mousewheel.with_shift.action'''<br />
; '''mousewheel.with_win.action'''<br />
: Customizing default action of "wheel" event. The value 0 means "Do nothing", 1 means "Scroll contents", 2 means "Go back or forward in the history", 3 means "Zoom in or out the contents". You cannot specify different action to vertical wheel operation and horizontal wheel operation because both deltaX and deltaY values can be non-zero same time. So, specifying different action doesn't make sense.<br />
<br />
Mozilla 16 (Firefox 16) or earlier, following prefs are available.<br />
<br />
; '''mousewheel.withnokey.sysnumlines'''<br />
; '''mousewheel.withaltkey.sysnumlines'''<br />
; '''mousewheel.withcontrolkey.sysnumlines'''<br />
; '''mousewheel.withshiftkey.sysnumlines'''<br />
; '''mousewheel.withmetakey.sysnumlines'''<br />
; '''mousewheel.horizscroll.withnokey.sysnumlines'''<br />
; '''mousewheel.horizscroll.withaltkey.sysnumlines'''<br />
; '''mousewheel.horizscroll.withcontrolkey.sysnumlines'''<br />
; '''mousewheel.horizscroll.withshiftkey.sysnumlines'''<br />
; '''mousewheel.horizscroll.withmetakey.sysnumlines'''<br />
: If the value is true, native delta value is used. Otherwise, it's false, '''numlines''' pref value replaces the delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; '''mousewheel.withnokey.numlines'''<br />
; '''mousewheel.withaltkey.numlines'''<br />
; '''mousewheel.withcontrolkey.numlines'''<br />
; '''mousewheel.withshiftkey.numlines'''<br />
; '''mousewheel.withmetakey.numlines'''<br />
; '''mousewheel.horizscroll.withnokey.numlines'''<br />
; '''mousewheel.horizscroll.withaltkey.numlines'''<br />
; '''mousewheel.horizscroll.withcontrolkey.numlines'''<br />
; '''mousewheel.horizscroll.withshiftkey.numlines'''<br />
; '''mousewheel.horizscroll.withmetakey.numlines'''<br />
: If "sysnumlines" is false, the pref value replaces native delta value. If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
; '''mousewheel.withnokey.action'''<br />
; '''mousewheel.withaltkey.action'''<br />
; '''mousewheel.withcontrolkey.action'''<br />
; '''mousewheel.withshiftkey.action'''<br />
; '''mousewheel.withmetakey.action'''<br />
; '''mousewheel.horizscroll.withnokey.action'''<br />
; '''mousewheel.horizscroll.withaltkey.action'''<br />
; '''mousewheel.horizscroll.withcontrolkey.action'''<br />
; '''mousewheel.horizscroll.withshiftkey.action'''<br />
; '''mousewheel.horizscroll.withmetakey.action'''<br />
: These prefs specify the default action of wheel events. The value 0 means "Scroll by lines", 1 means "Scroll by pages", 2 means "Go back or forward in the history", 3 means "Zoom in or out contents", 4 means "Scroll by pixels". If two or modifier keys are pressed, a pref of them is used. If Shift key is pressed, "withshiftkey" is used. Otherwise, if Control key is pressed, "withcontrolkey" is used. Otherwise, if Alt key is pressed, "withaltkey" is used. Otherwise, "withmetakey" is used.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=460201Gecko:Mouse Wheel Scrolling2012-08-13T00:32:35Z<p>Masayuki: /* DOM mouse wheel events and Default action */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
Starting Mozilla 17 (Firefox 17), Gecko supports DOM Level 3 Events "wheel". All web developers should handle only this event. You can see [https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/wheel the detail of "wheel" event] and [https://developer.mozilla.org/en-US/docs/DOM/WheelEvent WheelEvent interface] in MDN.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's always fired after a DOMMouseScroll event, however, it may be fired without DOMMouseScroll event when native mouse wheel event causes less than one line or page.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. widget/cocoa dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_PIXEL if the mouse (or touchpad) tells Gecko how much pixels should be scrolled. Otherwise, i.e., it tells Gecko only how much lines should be scrolled, it dispatches the event with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. So, widget/windows dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE or nsIDOMWheelEvent::DOM_DELTA_PAGE. And either the deltaX or deltaY values may be non-integer value.<br />
<br />
On the other platforms, widget dispatches widget::WheelEvent with nsIDOMWheelEvent::DOM_DELTA_LINE.<br />
<br />
If neither wheel, DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=447170Gecko:Mouse Wheel Scrolling2012-07-03T01:01:19Z<p>Masayuki: /* DOM mouse wheel events and Scrolling and other default action */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Default action =<br />
<br />
The specification of DOM Level 3 Events defines "wheel" event. We're working on this in [https://bugzilla.mozilla.org/show_bug.cgi?id=719320 bug 719320]. All web developers should handle only this event after it's fixed.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's typically fired after a DOMMouseScroll event, however, it may be fired before DOMMouseScroll event when native mouse wheel event causes less than one line or page on Windows.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. Therefore, DOMMouseScroll event is fired first on Mac.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. If the scroll amount is not integer, Gecko dispatches a MozMousePixelScroll event first and stores the amount. When accumulated scroll amount becomes one or more, it dispatches DOMMouseScroll.<br />
<br />
On the other platforms, widget only dispatches DOMMouseScroll event and nsEventStateManager automatically dispatches MozMousePixelScroll event.<br />
<br />
If neither DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=447169Gecko:Mouse Wheel Scrolling2012-07-03T01:00:36Z<p>Masayuki: </p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This page documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When a user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when a user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOM mouse wheel events and Scrolling and other default action =<br />
<br />
The specification of DOM Level 3 Events defines "wheel" event. We're working on this in [https://bugzilla.mozilla.org/show_bug.cgi?id=719320 bug 719320]. All web developers should handle only this event after it's fixed.<br />
<br />
And also, there are two legacy mouse wheel events which are non-standard. One is DOMMouseScroll event. This is typically fired when mouse wheel is turned one or more lines or pages. The other is MozMousePixelScroll. This event tells web applications how much pixels should be scrolled. It's typically fired after a DOMMouseScroll event, however, it may be fired before DOMMouseScroll event when native mouse wheel event causes less than one line or page on Windows.<br />
<br />
On Mac, native events tell Gecko how much lines should be scrolled first. After that, one or more native pixel scroll events may be fired for smooth scroll. Therefore, DOMMouseScroll event is fired first on Mac.<br />
<br />
On Windows, native events tell Gecko how much lines or pages should be scrolled. If the scroll amount is not integer, Gecko dispatches a MozMousePixelScroll event first and stores the amount. When accumulated scroll amount becomes one or more, it dispatches DOMMouseScroll.<br />
<br />
On the other platforms, widget only dispatches DOMMouseScroll event and nsEventStateManager automatically dispatches MozMousePixelScroll event.<br />
<br />
If neither DOMMouseScroll nor MozMousePixelScroll is consumed by peventDefault(), nsEventStateManager performs a default action. There are four default actions: scroll, going back or forward history, zoom in or out, and doing nothing.<br />
<br />
So, the contents can prevent scrolling. Then, mouse wheel transaction isn't updated.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOM mouse wheel events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When a user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When a user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=LandingQueue&diff=259173LandingQueue2010-10-07T05:59:46Z<p>Masayuki: /* Landing Queue for Mozilla-Central */</p>
<hr />
<div>= Landing Queue for Mozilla-Central =<br />
<br />
The mozilla-central tree frequently employs metered checkins to help control the size of regression ranges and ensure that test results are associated with specific checkins. The [http://www.google.com/calendar/embed?src=j6tkvqkuf9elual8l2tbuk2umk%40group.calendar.google.com sheriff] will be in charge of metering the checkins. Note that '''priority will be given to beta 7 blockers''' at all times.<br />
<br />
'''Please add yourself to the queue''' at the bottom. Fill out your name, the bugs you'd like to land, how they're approved to land according to the [[Tree Rules|tree rules]] and when you'll be available to land them and watch the tree: <br />
<br />
{{Queue|<br />
{{QueueEntry<br />
|name=''your irc nick/bugmail''<br />
|bugs=''the {{bug|100}} you will land''<br />
|approval=''betaN+ or name of approver''<br />
|available=''when you're around''<br />
}}<br />
}}<br />
<br />
== Ride-along patches ==<br />
<br />
'''Please add yourself to this queue''' if you are the owner of a bug that is a simple fix (with appropriate approvals as per the [[Tree Rules|tree rules]]) which you would like someone else to land for you along with other checkins: <br />
<br />
{{Queue|<br />
{{QueueEntry<br />
|name=''your name/irc nick''<br />
|bugs=''the bugs with the ridealong patches''<br />
|approval=''betaN+, a=person, NPOTB..."<br />
|available=''how to contact you if there are questions''<br />
}}<br />
{{QueueEntry<br />
|name=Callek<br />
|bugs={{bug|597887}}, {{bug|600364}}, and {{bug|600767}} for SeaMonkey test fails (Someone may ride-along these for me if they wish)<br />
|approval=NPOTB<br />
|available=Ping me on IRC (Callek or Callek_work)<br />
}}<br />
}}</div>Masayukihttps://wiki.mozilla.org/index.php?title=LandingQueue&diff=259140LandingQueue2010-10-07T03:21:13Z<p>Masayuki: /* Landing Queue for Mozilla-Central */</p>
<hr />
<div>= Landing Queue for Mozilla-Central =<br />
<br />
The mozilla-central tree frequently employs metered checkins to help control the size of regression ranges and ensure that test results are associated with specific checkins. The [http://www.google.com/calendar/embed?src=j6tkvqkuf9elual8l2tbuk2umk%40group.calendar.google.com sheriff] will be in charge of metering the checkins. Note that '''priority will be given to beta 7 blockers''' at all times.<br />
<br />
'''Please add yourself to the queue''' at the bottom. Fill out your name, the bugs you'd like to land, how they're approved to land according to the [[Tree Rules|tree rules]] and when you'll be available to land them and watch the tree: <br />
<br />
{{Queue|<br />
{{QueueEntry<br />
|name=''your irc nick/bugmail''<br />
|bugs=''the {{bug|100}} you will land''<br />
|approval=''betaN+ or name of approver''<br />
|available=''when you're around''<br />
}}<br />
{{QueueEntry<br />
|name=bjacob<br />
|bugs={{bug|600620}} -- the two "LAND ME" patches, in that order, and need to be pushed together.<br />
|approval=beta7<br />
|available=until 6:30 pm Toronto time<br />
}}<br />
{{QueueEntry<br />
|name=dbaron<br />
|bugs=numerous, see [http://hg.mozilla.org/try/pushloghtml?changeset=7652197f2d37 try push]<br />
|approval=various<br />
|available=Until 9pm PDT<br />
}}<br />
{{QueueEntry<br />
|name=Callek<br />
|bugs={{bug|597887}}, {{bug|600364}}, and {{bug|600767}} for SeaMonkey test fails (Someone may ride-along these for me if they wish)<br />
|approval=NPOTB<br />
|available=Land Until 2am EDT<br />
}}<br />
{{QueueEntry<br />
|name=masayuki|bugs={{bug|597981}}<br />
|approval=beta8+|available=Until 0am PDT (16pm JST)<br />
}}<br />
}}<br />
<br />
== Ride-along patches ==<br />
<br />
'''Please add yourself to this queue''' if you are the owner of a bug that is a simple fix (with appropriate approvals as per the [[Tree Rules|tree rules]]) which you would like someone else to land for you along with other checkins: <br />
<br />
{{Queue|<br />
{{QueueEntry<br />
|name=''your name/irc nick''<br />
|bugs=''the bugs with the ridealong patches''<br />
|approval=''betaN+, a=person, NPOTB..."<br />
|available=''how to contact you if there are questions''<br />
}}<br />
}}</div>Masayukihttps://wiki.mozilla.org/index.php?title=LandingQueue&diff=259139LandingQueue2010-10-07T03:20:03Z<p>Masayuki: /* Landing Queue for Mozilla-Central */</p>
<hr />
<div>= Landing Queue for Mozilla-Central =<br />
<br />
The mozilla-central tree frequently employs metered checkins to help control the size of regression ranges and ensure that test results are associated with specific checkins. The [http://www.google.com/calendar/embed?src=j6tkvqkuf9elual8l2tbuk2umk%40group.calendar.google.com sheriff] will be in charge of metering the checkins. Note that '''priority will be given to beta 7 blockers''' at all times.<br />
<br />
'''Please add yourself to the queue''' at the bottom. Fill out your name, the bugs you'd like to land, how they're approved to land according to the [[Tree Rules|tree rules]] and when you'll be available to land them and watch the tree: <br />
<br />
{{Queue|<br />
{{QueueEntry<br />
|name=''your irc nick/bugmail''<br />
|bugs=''the {{bug|100}} you will land''<br />
|approval=''betaN+ or name of approver''<br />
|available=''when you're around''<br />
}}<br />
{{QueueEntry<br />
|name=bjacob<br />
|bugs={{bug|600620}} -- the two "LAND ME" patches, in that order, and need to be pushed together.<br />
|approval=beta7<br />
|available=until 6:30 pm Toronto time<br />
}}<br />
{{QueueEntry<br />
|name=dbaron<br />
|bugs=numerous, see [http://hg.mozilla.org/try/pushloghtml?changeset=7652197f2d37 try push]<br />
|approval=various<br />
|available=Until 9pm PDT<br />
}}<br />
{{QueueEntry<br />
|name=Callek<br />
|bugs={{bug|597887}}, {{bug|600364}}, and {{bug|600767}} for SeaMonkey test fails (Someone may ride-along these for me if they wish)<br />
|approval=NPOTB<br />
|available=Land Until 2am EDT<br />
}}<br />
}} <br />
{{QueueEntry<br />
|name=masayuki|bugs={{bug|597981}}<br />
|approval=beta8+|available=Until 0am PDT (16pm JST)<br />
}}<br />
<br />
== Ride-along patches ==<br />
<br />
'''Please add yourself to this queue''' if you are the owner of a bug that is a simple fix (with appropriate approvals as per the [[Tree Rules|tree rules]]) which you would like someone else to land for you along with other checkins: <br />
<br />
{{Queue|<br />
{{QueueEntry<br />
|name=''your name/irc nick''<br />
|bugs=''the bugs with the ridealong patches''<br />
|approval=''betaN+, a=person, NPOTB..."<br />
|available=''how to contact you if there are questions''<br />
}}<br />
}}</div>Masayukihttps://wiki.mozilla.org/index.php?title=LandingQueue&diff=252247LandingQueue2010-09-10T07:24:24Z<p>Masayuki: /* Landing Queue for Mozilla-Central */</p>
<hr />
<div>= Landing Queue for Mozilla-Central =<br />
<br />
<br />
Please add an item containing your name, the bugs you want to land, and what the blocking status of them is to the bottom of the list. After you push, remove yourself from the top of the list. You should only push after consulting with the tree sheriff. <br />
<br />
* josh {{bug|592951}}<br />
* tnikkel - plan to land friday, skip me until then<br />
* volkmar - {{bug|561636}}, {{bug|595067}}, {{bug|582277}}, {{bug|556013}} and {{bug|589696}}<br />
<br />
== Ride-along patches ==<br />
<br />
Add yourself here if you would prefer that some kind soul check your patch in on your behalf. '''And make sure you've read [http://blog.bonardo.net/2010/06/22/so-youre-about-to-use-checkin-needed&nbsp; So You're About To Use checkin-needed]!'''<br />
<br />
<br />
* tglek {{bug|589368}} approval2.0</div>Masayukihttps://wiki.mozilla.org/index.php?title=LandingQueue&diff=252211LandingQueue2010-09-10T04:33:14Z<p>Masayuki: /* Landing Queue for Mozilla-Central */</p>
<hr />
<div>= Landing Queue for Mozilla-Central =<br />
<br />
<br />
Please add an item containing your name, the bugs you want to land, and what the blocking status of them is to the bottom of the list. After you push, remove yourself from the top of the list. You should only push after consulting with the tree sheriff. <br />
<br />
* dolske ({{bug|594454}} / {{bug|594509}} / {{bug|581182}})<br />
* volkmar {{bug|555840}}, {{bug|556007}}, {{bug|583288}}, {{bug|594952}} and {{bug|580575}}<br />
* josh {{bug|592951}}<br />
* tnikkel - plan to land friday, skip me until then<br />
* masayuki {{bug|587243}} blocking final+<br />
<br />
== Ride-along patches ==<br />
<br />
Add yourself here if you would prefer that some kind soul check your patch in on your behalf. '''And make sure you've read [http://blog.bonardo.net/2010/06/22/so-youre-about-to-use-checkin-needed&nbsp; So You're About To Use checkin-needed]!'''<br />
<br />
* tglek {{bug|590242}} approval2.0 (now unbitrotted)<br />
* rs {{bug|594986}} approval2.0<br />
* RyanVM {{bug|593533}} approval2.0<br />
* tglek {{bug|589368}} approval2.0</div>Masayukihttps://wiki.mozilla.org/index.php?title=LandingQueue&diff=251671LandingQueue2010-09-08T13:26:45Z<p>Masayuki: /* Landing Queue for Mozilla-Central */</p>
<hr />
<div>= Landing Queue for Mozilla-Central =<br />
<br />
* volkmar {{bug|590353}}, {{bug|589686}} and {{bug|594109}}<br />
* jlebar {{bug|583849}} (probably won't land until AM PST on 9/8/10. Feel free to skip me.)<br />
* Bas {{bug|593268}}<br />
* hsivonen {{bug|577508}} blocking final<br />
<br />
Please add an item containing your name, the bugs you want to land, and what the blocking status of them is to the bottom of the list. After you push, remove yourself from the top of the list. You should only push after consulting with the tree sheriff. <br />
<br />
== Ride-along patches ==<br />
<br />
Add yourself here if you would prefer that some kind soul check your patch in on your behalf. '''And make sure you've read [http://blog.bonardo.net/2010/06/22/so-youre-about-to-use-checkin-needed&nbsp; So You're About To Use checkin-needed]!'''<br />
<br />
* mak {{bug|594183}} - a+, [strings], ready to qimport</div>Masayukihttps://wiki.mozilla.org/index.php?title=LandingQueue&diff=251667LandingQueue2010-09-08T11:11:29Z<p>Masayuki: /* Landing Queue for Mozilla-Central */</p>
<hr />
<div>= Landing Queue for Mozilla-Central =<br />
<br />
* volkmar {{bug|590353}}, {{bug|589686}} and {{bug|594109}}<br />
* jlebar {{bug|583849}} (probably won't land until AM PST on 9/8/10. Feel free to skip me.)<br />
* Bas {{bug|593268}}<br />
* hsivonen {{bug|577508}} blocking final<br />
* masayuki {{bug|593620}} blocking betaN<br />
<br />
Please add an item containing your name, the bugs you want to land, and what the blocking status of them is to the bottom of the list. After you push, remove yourself from the top of the list. You should only push after consulting with the tree sheriff. <br />
<br />
== Ride-along patches ==<br />
<br />
Add yourself here if you would prefer that some kind soul check your patch in on your behalf. '''And make sure you've read [http://blog.bonardo.net/2010/06/22/so-youre-about-to-use-checkin-needed&nbsp; So You're About To Use checkin-needed]!'''<br />
<br />
* mattwoodrow - {{bug|505115}} (part 1 only) blocking2.0</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Notes_for_mouse_driver_developers_on_Widnows&diff=212294Gecko:Notes for mouse driver developers on Widnows2010-03-31T07:53:38Z<p>Masayuki: Blanked the page</p>
<hr />
<div></div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Home_Page&diff=212293Gecko:Home Page2010-03-31T07:51:57Z<p>Masayuki: /* Feature Planning / Specs */</p>
<hr />
<div>== Are You In The Right Place? ==<br />
This wiki is concerned with development of the Gecko rendering engine itself. If you are a Web developer (building Web pages, sites, apps, etc.) and have questions about (X)HTML, XUL, CSS, DOM, or JavaScript then go to the [http://developer.mozilla.org/ Mozilla Developer Center].<br />
<br />
== Planning ==<br />
<br />
=== Scheduling and Roadmaps ===<br />
<br />
* [[Global:1.9 Trunk 1.8 Branch Plan]] explains the versions of Gecko used for Firefox 1.5, Firefox 2.x, and Firefox 3.<br />
* [[Gecko 1.9 Roadmap]] laid out the vision for Gecko in Firefox 3<br />
* [[Firefox3/Gecko Feature List]] tracks Gecko 1.9 features for Firefox 3; an alpha release of this codenamed "Gran Paradiso" was released in December 2006.<br />
* [[Mozilla2]] is the next-generation of the Mozilla code, including Gecko.<br />
* [[Firefox3.5/StatusMeetings]] has weekly status meetings on Gecko 1.9<br />
<br />
=== Feature Planning / Specs ===<br />
<br />
Most feature planning should happen in Bugzilla, but for some things it's easier to map out a spec on the wiki first. <br />
<br />
*[[Gecko:Line Breaking]]<br />
<br />
*[[Gecko:Mouse Wheel Scrolling]]<br />
** [[Gecko:Notes for mouse driver developers on Windows]]<br />
<br />
*[[Necko: Electrolysis design and subprojects]]<br />
<br />
*[[Necko: support sending OnDataAvailable() to other threads]]<br />
<br />
== Developer Resources ==<br />
[[Frame inheritance hierarchy]] (dated May 18, 2008)<br />
<br />
<br />
<br />
[http://www.mozilla.org/newlayout/doc/layout-2006-12-14/master.xhtml Mozilla's Layout Engine (Presentation by L. David Baron)] (dated Thursday, December 14, 2006, 13:30 PST<br />
<br />
[[Gecko:Miscellaneous Notes]] Random documentation we don't yet know how to categorize.<br />
<br />
[[Gecko:Task List]] If you're familiar with Gecko code and want to contribute.<br />
<br />
[[Gecko:Testing Tasks]] if you're interested in getting started by helping with testing Gecko<br />
<br />
[[Gecko:Getting Started]] If you're just beginning.<br />
<br />
[[Gecko:Frequently Asked Questions]] Developers' FAQ.<br />
<br />
[[Gecko:Wish List]] Architecture and implementation ideas.<br />
<br />
[[Gecko:Content Team Minutes]] Agenda and minutes from the [[Content Team]]<br />
<br />
[[Gecko:Layout Improvements]] Architectural improvements we should make in layout. Also see [[Gecko:Compositor]]<br />
<br />
[[Gecko:Moving Plugins To Content]]<br />
<br />
[[Gecko:Small Device Support]]<br />
<br />
[[Gecko:Obsolete API]]<br />
<br />
[[New stringbundle APIs]]<br />
<br />
[[Font selection]] and [[Font selection/Default fonts]]<br />
<br />
[[Gecko/XUL Box Model]]<br />
<br />
[[CSSFrameConstructor]]<br />
<br />
[[Gecko:GPU Acceleration]]<br />
<br />
== Related Resources ==<br />
XUL development happens at [[XUL:Home Page]].<br />
<br />
RDF development happens at [http://www.axel-hecht.de/mozwiki/RDF/ Axel Hecht's RDF API Wiki].</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Notes_for_mouse_driver_developers_on_Windows&diff=212292Gecko:Notes for mouse driver developers on Windows2010-03-31T07:51:10Z<p>Masayuki: move from Gecko:Notes_for_mouse_driver_developers_on_Widnows</p>
<hr />
<div>This document is informative.<br />
<br />
= Post/Send [http://msdn.microsoft.com/en-us/library/ms645617%28VS.85%29.aspx <code>WM_MOUSEWHEEL</code>] and [http://msdn.microsoft.com/en-us/library/ms645614%28VS.85%29.aspx <code>WM_MOUSEHWHEEL</code>] messages =<br />
<br />
Gecko supports both '''<code>WM_MOUSEWHEEL</code>''' and '''<code>WM_MOUSEHWHEEL</code>''' messages, so, all mouse drivers and utilities should post (or send) them to Gecko's window.<br />
<br />
Be aware, Gecko 1.9.3 and later (Firefox 3.7 and later) is going to support <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> messages too, however, do '''not''' post/send these messages for the wheel action. Gecko handles these messages in different path with <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> because Gecko thinks that the messages are used only for scrolling. To put it concretely, <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages cause [https://developer.mozilla.org/en/Gecko-Specific_DOM_Events#DOMMouseScroll <code>DOMMouseScroll</code> event] on the web pages, so, web application developers can handle the wheel actions and they can prevent scrolling. However, <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> don't cause the DOM event, it only scrolls a scrollable area. So, the scrolling by these messages are same as the scrolling by scrollbar operation. I.e., web developers cannot know whether the scrolling is caused by scrollbar operation or mouse wheel action.<br />
<br />
= Post/Send the messages to focused Gecko's window =<br />
<br />
Please post/send the messages to '''focused''' Gecko's window rather than the window under the mouse cursor. Gecko honors the mouse cursor position when Gecko chose a scrolling target (detail of the rule is documented in [[Gecko:Mouse_Wheel_Scrolling]]). So, Gecko redirects the messages to a window under the cursor automatically.<br />
<br />
Note that Gecko doesn't redirect the messages to a plug-in window even if it's under the mouse cursor (Gecko 1.9.3 and later). The reason is that Gecko manages mouse wheel transaction (documented in [[Gecko:Mouse_Wheel_Scrolling]]). The user may want to scroll the parent scrollable area of plug-in. For example, a plug-in window may come under the mouse cursor by scrolling its parent scrollable area, then, Gecko tries to keep scrolling the parent scrollable area rather than the plug-in's content. So, if some mouse drivers/utilities post/send messages to a plug-in window directly, it causes breaking this feature.<br />
<br />
= Please use wheel messages to unknown window =<br />
<br />
Gecko 1.9.2 and later (Firefox 3.6 and later) create following class name windows. Note that this could be changed in future version.<br />
<br />
* <code>MozillaHiddenWindowClass</code><br />
* <code>MozillaUIWindowClass</code><br />
* <code>MozillaContentWindowClass</code><br />
* <code>MozillaContentFrameWindowClass</code><br />
* <code>MozillaWindowClass</code><br />
* <code>MozillaDialogClass</code><br />
* <code>MozillaDropShadowWindowClass</code><br />
<br />
You can assume that if focused window class name is one of them, you can post/send <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages without any hacks.<br />
<br />
Unfortunately, Gecko window structure was changed at Firefox 3.6. Then, we confirmed that some mouse drivers/utilities become that they don't post/send the messages. The messages are standard mouse wheel events on Windows applications. I can understand that some old applications don't support them by historical reasons. The mouse drivers/utilities developers can use hacky way for them, however, it's bad if you assume that all unknown windows are so.</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Notes_for_mouse_driver_developers_on_Widnows&diff=212291Gecko:Notes for mouse driver developers on Widnows2010-03-31T07:45:02Z<p>Masayuki: /* Please use wheel messages to unknown window */</p>
<hr />
<div>This document is informative.<br />
<br />
= Post/Send [http://msdn.microsoft.com/en-us/library/ms645617%28VS.85%29.aspx <code>WM_MOUSEWHEEL</code>] and [http://msdn.microsoft.com/en-us/library/ms645614%28VS.85%29.aspx <code>WM_MOUSEHWHEEL</code>] messages =<br />
<br />
Gecko supports both '''<code>WM_MOUSEWHEEL</code>''' and '''<code>WM_MOUSEHWHEEL</code>''' messages, so, all mouse drivers and utilities should post (or send) them to Gecko's window.<br />
<br />
Be aware, Gecko 1.9.3 and later (Firefox 3.7 and later) is going to support <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> messages too, however, do '''not''' post/send these messages for the wheel action. Gecko handles these messages in different path with <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> because Gecko thinks that the messages are used only for scrolling. To put it concretely, <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages cause [https://developer.mozilla.org/en/Gecko-Specific_DOM_Events#DOMMouseScroll <code>DOMMouseScroll</code> event] on the web pages, so, web application developers can handle the wheel actions and they can prevent scrolling. However, <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> don't cause the DOM event, it only scrolls a scrollable area. So, the scrolling by these messages are same as the scrolling by scrollbar operation. I.e., web developers cannot know whether the scrolling is caused by scrollbar operation or mouse wheel action.<br />
<br />
= Post/Send the messages to focused Gecko's window =<br />
<br />
Please post/send the messages to '''focused''' Gecko's window rather than the window under the mouse cursor. Gecko honors the mouse cursor position when Gecko chose a scrolling target (detail of the rule is documented in [[Gecko:Mouse_Wheel_Scrolling]]). So, Gecko redirects the messages to a window under the cursor automatically.<br />
<br />
Note that Gecko doesn't redirect the messages to a plug-in window even if it's under the mouse cursor (Gecko 1.9.3 and later). The reason is that Gecko manages mouse wheel transaction (documented in [[Gecko:Mouse_Wheel_Scrolling]]). The user may want to scroll the parent scrollable area of plug-in. For example, a plug-in window may come under the mouse cursor by scrolling its parent scrollable area, then, Gecko tries to keep scrolling the parent scrollable area rather than the plug-in's content. So, if some mouse drivers/utilities post/send messages to a plug-in window directly, it causes breaking this feature.<br />
<br />
= Please use wheel messages to unknown window =<br />
<br />
Gecko 1.9.2 and later (Firefox 3.6 and later) create following class name windows. Note that this could be changed in future version.<br />
<br />
* <code>MozillaHiddenWindowClass</code><br />
* <code>MozillaUIWindowClass</code><br />
* <code>MozillaContentWindowClass</code><br />
* <code>MozillaContentFrameWindowClass</code><br />
* <code>MozillaWindowClass</code><br />
* <code>MozillaDialogClass</code><br />
* <code>MozillaDropShadowWindowClass</code><br />
<br />
You can assume that if focused window class name is one of them, you can post/send <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages without any hacks.<br />
<br />
Unfortunately, Gecko window structure was changed at Firefox 3.6. Then, we confirmed that some mouse drivers/utilities become that they don't post/send the messages. The messages are standard mouse wheel events on Windows applications. I can understand that some old applications don't support them by historical reasons. The mouse drivers/utilities developers can use hacky way for them, however, it's bad if you assume that all unknown windows are so.</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Notes_for_mouse_driver_developers_on_Widnows&diff=212282Gecko:Notes for mouse driver developers on Widnows2010-03-31T07:26:50Z<p>Masayuki: /* Post/Send the messages to focused Gecko's window */</p>
<hr />
<div>This document is informative.<br />
<br />
= Post/Send [http://msdn.microsoft.com/en-us/library/ms645617%28VS.85%29.aspx <code>WM_MOUSEWHEEL</code>] and [http://msdn.microsoft.com/en-us/library/ms645614%28VS.85%29.aspx <code>WM_MOUSEHWHEEL</code>] messages =<br />
<br />
Gecko supports both '''<code>WM_MOUSEWHEEL</code>''' and '''<code>WM_MOUSEHWHEEL</code>''' messages, so, all mouse drivers and utilities should post (or send) them to Gecko's window.<br />
<br />
Be aware, Gecko 1.9.3 and later (Firefox 3.7 and later) is going to support <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> messages too, however, do '''not''' post/send these messages for the wheel action. Gecko handles these messages in different path with <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> because Gecko thinks that the messages are used only for scrolling. To put it concretely, <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages cause [https://developer.mozilla.org/en/Gecko-Specific_DOM_Events#DOMMouseScroll <code>DOMMouseScroll</code> event] on the web pages, so, web application developers can handle the wheel actions and they can prevent scrolling. However, <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> don't cause the DOM event, it only scrolls a scrollable area. So, the scrolling by these messages are same as the scrolling by scrollbar operation. I.e., web developers cannot know whether the scrolling is caused by scrollbar operation or mouse wheel action.<br />
<br />
= Post/Send the messages to focused Gecko's window =<br />
<br />
Please post/send the messages to '''focused''' Gecko's window rather than the window under the mouse cursor. Gecko honors the mouse cursor position when Gecko chose a scrolling target (detail of the rule is documented in [[Gecko:Mouse_Wheel_Scrolling]]). So, Gecko redirects the messages to a window under the cursor automatically.<br />
<br />
Note that Gecko doesn't redirect the messages to a plug-in window even if it's under the mouse cursor (Gecko 1.9.3 and later). The reason is that Gecko manages mouse wheel transaction (documented in [[Gecko:Mouse_Wheel_Scrolling]]). The user may want to scroll the parent scrollable area of plug-in. For example, a plug-in window may come under the mouse cursor by scrolling its parent scrollable area, then, Gecko tries to keep scrolling the parent scrollable area rather than the plug-in's content. So, if some mouse drivers/utilities post/send messages to a plug-in window directly, it causes breaking this feature.<br />
<br />
= Please use wheel messages to unknown window =<br />
<br />
Gecko 1.9.2 and later (Firefox 3.6 and later) create following class name windows. Note that this could be changed in future version.<br />
<br />
* <code>MozillaHiddenWindowClass</code><br />
* <code>MozillaUIWindowClass</code><br />
* <code>MozillaContentWindowClass</code><br />
* <code>MozillaContentFrameWindowClass</code><br />
* <code>MozillaWindowClass</code><br />
* <code>MozillaDialogClass</code><br />
* <code>MozillaDropShadowWindowClass</code><br />
<br />
You can assume that if focused window class name is one of them, you can post/send <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages without any hacks.<br />
<br />
Unfortunately, Gecko window structure was changed at Firefox 3.6. Then, we confirmed that some mouse drivers/utilities become that they don't post/send the messages. The messages are standard mouse wheel events on Windows applications. I can understand that some old applications don't support them by historical reasons. The mouse drivers/utilities developers can use hacky way for them, however, it's bad if you assume that all unknown window is so.</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Notes_for_mouse_driver_developers_on_Widnows&diff=212280Gecko:Notes for mouse driver developers on Widnows2010-03-31T07:21:59Z<p>Masayuki: /* Post/Send the messages to focused Gecko's window */</p>
<hr />
<div>This document is informative.<br />
<br />
= Post/Send [http://msdn.microsoft.com/en-us/library/ms645617%28VS.85%29.aspx <code>WM_MOUSEWHEEL</code>] and [http://msdn.microsoft.com/en-us/library/ms645614%28VS.85%29.aspx <code>WM_MOUSEHWHEEL</code>] messages =<br />
<br />
Gecko supports both '''<code>WM_MOUSEWHEEL</code>''' and '''<code>WM_MOUSEHWHEEL</code>''' messages, so, all mouse drivers and utilities should post (or send) them to Gecko's window.<br />
<br />
Be aware, Gecko 1.9.3 and later (Firefox 3.7 and later) is going to support <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> messages too, however, do '''not''' post/send these messages for the wheel action. Gecko handles these messages in different path with <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> because Gecko thinks that the messages are used only for scrolling. To put it concretely, <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages cause [https://developer.mozilla.org/en/Gecko-Specific_DOM_Events#DOMMouseScroll <code>DOMMouseScroll</code> event] on the web pages, so, web application developers can handle the wheel actions and they can prevent scrolling. However, <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> don't cause the DOM event, it only scrolls a scrollable area. So, the scrolling by these messages are same as the scrolling by scrollbar operation. I.e., web developers cannot know whether the scrolling is caused by scrollbar operation or mouse wheel action.<br />
<br />
= Post/Send the messages to focused Gecko's window =<br />
<br />
Please post/send the messages to '''focused''' Gecko's window rather than the window under the mouse cursor. Gecko honors the mouse cursor position when Gecko chose a scrolling target (detail of the rule is documented in [[Gecko:Mouse_Wheel_Scrolling]]). So, Gecko redirects the messages to a window under the cursor automatically.<br />
<br />
Note that Gecko doesn't redirect the messages to a plug-in window even if it's under the mouse cursor (Gecko 1.9.3 and later). The reason is that Gecko manages mouse wheel transaction (documented in [[Gecko:Mouse_Wheel_Scrolling]]). The user may want to scroll the parent scrollable area of plug-in. For example, a plug-in window may come under the mouse cursor by scrolling its parent scrollable area, then, Gecko tries to keep scrolling the parent scrollable area rather than the plug-in's content.<br />
<br />
= Please use wheel messages to unknown window =<br />
<br />
Gecko 1.9.2 and later (Firefox 3.6 and later) create following class name windows. Note that this could be changed in future version.<br />
<br />
* <code>MozillaHiddenWindowClass</code><br />
* <code>MozillaUIWindowClass</code><br />
* <code>MozillaContentWindowClass</code><br />
* <code>MozillaContentFrameWindowClass</code><br />
* <code>MozillaWindowClass</code><br />
* <code>MozillaDialogClass</code><br />
* <code>MozillaDropShadowWindowClass</code><br />
<br />
You can assume that if focused window class name is one of them, you can post/send <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages without any hacks.<br />
<br />
Unfortunately, Gecko window structure was changed at Firefox 3.6. Then, we confirmed that some mouse drivers/utilities become that they don't post/send the messages. The messages are standard mouse wheel events on Windows applications. I can understand that some old applications don't support them by historical reasons. The mouse drivers/utilities developers can use hacky way for them, however, it's bad if you assume that all unknown window is so.</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Notes_for_mouse_driver_developers_on_Widnows&diff=212278Gecko:Notes for mouse driver developers on Widnows2010-03-31T07:17:51Z<p>Masayuki: /* Post/Send WM_MOUSEWHEEL and WM_MOUSEHWHEEL messages */</p>
<hr />
<div>This document is informative.<br />
<br />
= Post/Send [http://msdn.microsoft.com/en-us/library/ms645617%28VS.85%29.aspx <code>WM_MOUSEWHEEL</code>] and [http://msdn.microsoft.com/en-us/library/ms645614%28VS.85%29.aspx <code>WM_MOUSEHWHEEL</code>] messages =<br />
<br />
Gecko supports both '''<code>WM_MOUSEWHEEL</code>''' and '''<code>WM_MOUSEHWHEEL</code>''' messages, so, all mouse drivers and utilities should post (or send) them to Gecko's window.<br />
<br />
Be aware, Gecko 1.9.3 and later (Firefox 3.7 and later) is going to support <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> messages too, however, do '''not''' post/send these messages for the wheel action. Gecko handles these messages in different path with <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> because Gecko thinks that the messages are used only for scrolling. To put it concretely, <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages cause [https://developer.mozilla.org/en/Gecko-Specific_DOM_Events#DOMMouseScroll <code>DOMMouseScroll</code> event] on the web pages, so, web application developers can handle the wheel actions and they can prevent scrolling. However, <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> don't cause the DOM event, it only scrolls a scrollable area. So, the scrolling by these messages are same as the scrolling by scrollbar operation. I.e., web developers cannot know whether the scrolling is caused by scrollbar operation or mouse wheel action.<br />
<br />
= Post/Send the messages to focused Gecko's window =<br />
<br />
Please post/send the messages to '''focused''' Gecko's window rather than the window under the mouse cursor. Gecko honors the mouse cursor position when Gecko chose a scrolling target (detail of the rule is documented in [[Gecko:Mouse_Wheel_Scrolling]]). So, Gecko redirects the messages to a window under the cursor automatically.<br />
<br />
Note that Gecko doesn't redirect the messages to a plug-in window even if it's under the mouse cursor. The reason is that Gecko manages mouse wheel transaction (documented in [[Gecko:Mouse_Wheel_Scrolling]]). The user may want to scroll the parent scrollable area of plug-in. For example, a plug-in window may come under the mouse cursor by scrolling its parent scrollable area, then, Gecko tries to keep scrolling the parent scrollable area rather than the plug-in's content.<br />
<br />
= Please use wheel messages to unknown window =<br />
<br />
Gecko 1.9.2 and later (Firefox 3.6 and later) create following class name windows. Note that this could be changed in future version.<br />
<br />
* <code>MozillaHiddenWindowClass</code><br />
* <code>MozillaUIWindowClass</code><br />
* <code>MozillaContentWindowClass</code><br />
* <code>MozillaContentFrameWindowClass</code><br />
* <code>MozillaWindowClass</code><br />
* <code>MozillaDialogClass</code><br />
* <code>MozillaDropShadowWindowClass</code><br />
<br />
You can assume that if focused window class name is one of them, you can post/send <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages without any hacks.<br />
<br />
Unfortunately, Gecko window structure was changed at Firefox 3.6. Then, we confirmed that some mouse drivers/utilities become that they don't post/send the messages. The messages are standard mouse wheel events on Windows applications. I can understand that some old applications don't support them by historical reasons. The mouse drivers/utilities developers can use hacky way for them, however, it's bad if you assume that all unknown window is so.</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Notes_for_mouse_driver_developers_on_Widnows&diff=212275Gecko:Notes for mouse driver developers on Widnows2010-03-31T06:47:57Z<p>Masayuki: /* Post/Send WM_MOUSEWHEEL and WM_MOUSEHWHEEL messages */</p>
<hr />
<div>This document is informative.<br />
<br />
= Post/Send [http://msdn.microsoft.com/en-us/library/ms645617%28VS.85%29.aspx <code>WM_MOUSEWHEEL</code>] and [http://msdn.microsoft.com/en-us/library/ms645614%28VS.85%29.aspx <code>WM_MOUSEHWHEEL</code>] messages =<br />
<br />
Gecko supports both '''<code>WM_MOUSEWHEEL</code>''' and '''<code>WM_MOUSEHWHEEL</code>''' messages, so, all mouse drivers and utilities should post (or send) them to Gecko's window.<br />
<br />
Be aware, Gecko 1.9.3 and later (Firefox 3.7 and later) is going to support <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> messages too, however, do '''not''' post/send these messages for the wheel action. Gecko handles these messages in different path with <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> because Gecko thinks that the messages are used only for scrolling. To put it concretely, <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages cause [https://developer.mozilla.org/en/Gecko-Specific_DOM_Events#DOMMouseScroll <code>DOMMouseScroll</code> event] on the web pages, so, web application developers can handle the wheel actions and they can prevent scrolling. However, <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> don't cause the DOM event, it only scrolls a scrollable area.<br />
<br />
= Post/Send the messages to focused Gecko's window =<br />
<br />
Please post/send the messages to '''focused''' Gecko's window rather than the window under the mouse cursor. Gecko honors the mouse cursor position when Gecko chose a scrolling target (detail of the rule is documented in [[Gecko:Mouse_Wheel_Scrolling]]). So, Gecko redirects the messages to a window under the cursor automatically.<br />
<br />
Note that Gecko doesn't redirect the messages to a plug-in window even if it's under the mouse cursor. The reason is that Gecko manages mouse wheel transaction (documented in [[Gecko:Mouse_Wheel_Scrolling]]). The user may want to scroll the parent scrollable area of plug-in. For example, a plug-in window may come under the mouse cursor by scrolling its parent scrollable area, then, Gecko tries to keep scrolling the parent scrollable area rather than the plug-in's content.<br />
<br />
= Please use wheel messages to unknown window =<br />
<br />
Gecko 1.9.2 and later (Firefox 3.6 and later) create following class name windows. Note that this could be changed in future version.<br />
<br />
* <code>MozillaHiddenWindowClass</code><br />
* <code>MozillaUIWindowClass</code><br />
* <code>MozillaContentWindowClass</code><br />
* <code>MozillaContentFrameWindowClass</code><br />
* <code>MozillaWindowClass</code><br />
* <code>MozillaDialogClass</code><br />
* <code>MozillaDropShadowWindowClass</code><br />
<br />
You can assume that if focused window class name is one of them, you can post/send <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages without any hacks.<br />
<br />
Unfortunately, Gecko window structure was changed at Firefox 3.6. Then, we confirmed that some mouse drivers/utilities become that they don't post/send the messages. The messages are standard mouse wheel events on Windows applications. I can understand that some old applications don't support them by historical reasons. The mouse drivers/utilities developers can use hacky way for them, however, it's bad if you assume that all unknown window is so.</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Home_Page&diff=212274Gecko:Home Page2010-03-31T06:46:38Z<p>Masayuki: /* Feature Planning / Specs */</p>
<hr />
<div>== Are You In The Right Place? ==<br />
This wiki is concerned with development of the Gecko rendering engine itself. If you are a Web developer (building Web pages, sites, apps, etc.) and have questions about (X)HTML, XUL, CSS, DOM, or JavaScript then go to the [http://developer.mozilla.org/ Mozilla Developer Center].<br />
<br />
== Planning ==<br />
<br />
=== Scheduling and Roadmaps ===<br />
<br />
* [[Global:1.9 Trunk 1.8 Branch Plan]] explains the versions of Gecko used for Firefox 1.5, Firefox 2.x, and Firefox 3.<br />
* [[Gecko 1.9 Roadmap]] laid out the vision for Gecko in Firefox 3<br />
* [[Firefox3/Gecko Feature List]] tracks Gecko 1.9 features for Firefox 3; an alpha release of this codenamed "Gran Paradiso" was released in December 2006.<br />
* [[Mozilla2]] is the next-generation of the Mozilla code, including Gecko.<br />
* [[Firefox3.5/StatusMeetings]] has weekly status meetings on Gecko 1.9<br />
<br />
=== Feature Planning / Specs ===<br />
<br />
Most feature planning should happen in Bugzilla, but for some things it's easier to map out a spec on the wiki first. <br />
<br />
*[[Gecko:Line Breaking]]<br />
<br />
*[[Gecko:Mouse Wheel Scrolling]]<br />
** [[Gecko:Notes_for_mouse_driver_developers_on_Widnows]]<br />
<br />
*[[Necko: Electrolysis design and subprojects]]<br />
<br />
*[[Necko: support sending OnDataAvailable() to other threads]]<br />
<br />
== Developer Resources ==<br />
[[Frame inheritance hierarchy]] (dated May 18, 2008)<br />
<br />
<br />
<br />
[http://www.mozilla.org/newlayout/doc/layout-2006-12-14/master.xhtml Mozilla's Layout Engine (Presentation by L. David Baron)] (dated Thursday, December 14, 2006, 13:30 PST<br />
<br />
[[Gecko:Miscellaneous Notes]] Random documentation we don't yet know how to categorize.<br />
<br />
[[Gecko:Task List]] If you're familiar with Gecko code and want to contribute.<br />
<br />
[[Gecko:Testing Tasks]] if you're interested in getting started by helping with testing Gecko<br />
<br />
[[Gecko:Getting Started]] If you're just beginning.<br />
<br />
[[Gecko:Frequently Asked Questions]] Developers' FAQ.<br />
<br />
[[Gecko:Wish List]] Architecture and implementation ideas.<br />
<br />
[[Gecko:Content Team Minutes]] Agenda and minutes from the [[Content Team]]<br />
<br />
[[Gecko:Layout Improvements]] Architectural improvements we should make in layout. Also see [[Gecko:Compositor]]<br />
<br />
[[Gecko:Moving Plugins To Content]]<br />
<br />
[[Gecko:Small Device Support]]<br />
<br />
[[Gecko:Obsolete API]]<br />
<br />
[[New stringbundle APIs]]<br />
<br />
[[Font selection]] and [[Font selection/Default fonts]]<br />
<br />
[[Gecko/XUL Box Model]]<br />
<br />
[[CSSFrameConstructor]]<br />
<br />
[[Gecko:GPU Acceleration]]<br />
<br />
== Related Resources ==<br />
XUL development happens at [[XUL:Home Page]].<br />
<br />
RDF development happens at [http://www.axel-hecht.de/mozwiki/RDF/ Axel Hecht's RDF API Wiki].</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Notes_for_mouse_driver_developers_on_Widnows&diff=212273Gecko:Notes for mouse driver developers on Widnows2010-03-31T06:44:58Z<p>Masayuki: Created page with 'This document is informative. = Post/Send [http://msdn.microsoft.com/en-us/library/ms645617%28VS.85%29.aspx <code>WM_MOUSEWHEEL</code>] and [http://msdn.microsoft.com/en-us/libr…'</p>
<hr />
<div>This document is informative.<br />
<br />
= Post/Send [http://msdn.microsoft.com/en-us/library/ms645617%28VS.85%29.aspx <code>WM_MOUSEWHEEL</code>] and [http://msdn.microsoft.com/en-us/library/ms645614%28VS.85%29.aspx <code>WM_MOUSEHWHEEL</code>] messages =<br />
<br />
Gecko supports both '''<code>MOUSEWHEEL</code>''' and '''<code>WM_MOUSEHWHEEL</code>''' messages, so, all mouse drivers and utilities should post (or send) them to Gecko's window.<br />
<br />
Be aware, Gecko 1.9.3 and later (Firefox 3.7 and later) is going to support <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> messages too, however, do '''not''' post/send these messages for the wheel action. Gecko handles these messages in different path with <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> because Gecko thinks that the messages are used only for scrolling. To put it concretely, <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages cause [https://developer.mozilla.org/en/Gecko-Specific_DOM_Events#DOMMouseScroll <code>DOMMouseScroll</code> event] on the web pages, so, web application developers can handle the wheel actions and they can prevent scrolling. However, <code>WM_VSCROLL</code> and <code>WM_HSCROLL</code> don't cause the DOM event, it only scrolls a scrollable area.<br />
<br />
= Post/Send the messages to focused Gecko's window =<br />
<br />
Please post/send the messages to '''focused''' Gecko's window rather than the window under the mouse cursor. Gecko honors the mouse cursor position when Gecko chose a scrolling target (detail of the rule is documented in [[Gecko:Mouse_Wheel_Scrolling]]). So, Gecko redirects the messages to a window under the cursor automatically.<br />
<br />
Note that Gecko doesn't redirect the messages to a plug-in window even if it's under the mouse cursor. The reason is that Gecko manages mouse wheel transaction (documented in [[Gecko:Mouse_Wheel_Scrolling]]). The user may want to scroll the parent scrollable area of plug-in. For example, a plug-in window may come under the mouse cursor by scrolling its parent scrollable area, then, Gecko tries to keep scrolling the parent scrollable area rather than the plug-in's content.<br />
<br />
= Please use wheel messages to unknown window =<br />
<br />
Gecko 1.9.2 and later (Firefox 3.6 and later) create following class name windows. Note that this could be changed in future version.<br />
<br />
* <code>MozillaHiddenWindowClass</code><br />
* <code>MozillaUIWindowClass</code><br />
* <code>MozillaContentWindowClass</code><br />
* <code>MozillaContentFrameWindowClass</code><br />
* <code>MozillaWindowClass</code><br />
* <code>MozillaDialogClass</code><br />
* <code>MozillaDropShadowWindowClass</code><br />
<br />
You can assume that if focused window class name is one of them, you can post/send <code>WM_MOUSEWHEEL</code> and <code>WM_MOUSEHWHEEL</code> messages without any hacks.<br />
<br />
Unfortunately, Gecko window structure was changed at Firefox 3.6. Then, we confirmed that some mouse drivers/utilities become that they don't post/send the messages. The messages are standard mouse wheel events on Windows applications. I can understand that some old applications don't support them by historical reasons. The mouse drivers/utilities developers can use hacky way for them, however, it's bad if you assume that all unknown window is so.</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=198110Gecko:Mouse Wheel Scrolling2010-01-31T12:20:26Z<p>Masayuki: /* Override system of system scroll speed */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed. This was suggested for alternative way of the acceleration system (see next section).<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a '''root''' scrollable view of a document. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=198098Gecko:Mouse Wheel Scrolling2010-01-31T08:08:31Z<p>Masayuki: /* Override system of system scroll speed */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's scrolling speed.<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when it executes to scroll a target actually. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=197014Gecko:Mouse Wheel Scrolling2010-01-27T05:50:33Z<p>Masayuki: /* Override system of system scroll speed */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's default scroll speed.<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this always overrides the speed.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when actually it executes to scroll a target. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=197013Gecko:Mouse Wheel Scrolling2010-01-27T05:49:52Z<p>Masayuki: /* Override system of system scroll speed */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's default scroll speed.<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', only when the system scroll speed settings are not customized by user or mouse driver, this overrides the scrolling speed. '''On the others''', this overrides the speed every time.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when actually it executes to scroll a target. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=197005Gecko:Mouse Wheel Scrolling2010-01-27T01:39:35Z<p>Masayuki: /* Override system of system scroll speed */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's default scroll speed.<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', If the system scroll speed settings are not customized by user or mouse driver, this system can override the scrolling speed. '''On the others''', this can override the speed every time.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when actually it executes to scroll a target. So, DOMMouseScroll event's delta value has never been overwritten by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=197004Gecko:Mouse Wheel Scrolling2010-01-27T01:38:58Z<p>Masayuki: /* Override system of system scroll speed */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
We're providing an override mechanism of system scroll speed because the default system scrolling speed of Windows is slower than WebKit's default scroll speed.<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', If the system scroll speed settings are not customized by user or mouse driver, this system can override the scrolling speed. '''On the others''', this can override the speed every time.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio when actually it executes to scroll a target. So, DOMMouseScroll event's delta value has never been overridden by this.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=197002Gecko:Mouse Wheel Scrolling2010-01-27T01:35:14Z<p>Masayuki: </p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Override system of system scroll speed =<br />
<br />
Instead of the acceleration, we provide an override mechanism of system scroll speed.<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', If the system scroll speed settings are not customized by user or mouse driver, this system can override the scrolling speed. '''On the others''', this can override the speed every time.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
Acceleration is computed after the override system is done.<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=196998Gecko:Mouse Wheel Scrolling2010-01-27T01:33:35Z<p>Masayuki: /* Limitation of scroll amount */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
= Override system of system scroll speed =<br />
<br />
Instead of the acceleration, we provide an override mechanism of system scroll speed.<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', If the system scroll speed settings are not customized by user or mouse driver, this system can override the scrolling speed. '''On the others''', this can override the speed every time.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
The limitation is computed after the overriding and the acceleration are computed. So, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=196993Gecko:Mouse Wheel Scrolling2010-01-27T01:24:35Z<p>Masayuki: /* Limitation of scroll amount */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
= Override system of system scroll speed =<br />
<br />
Instead of the acceleration, we provide an override mechanism of system scroll speed.<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', If the system scroll speed settings are not customized by user or mouse driver, this system can override the scrolling speed. '''On the others''', this can override the speed every time.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find the lines. This is especially serious problem on listbox.<br />
<br />
This limitation is computed when the scrolling is executed, so, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=196992Gecko:Mouse Wheel Scrolling2010-01-27T01:22:58Z<p>Masayuki: </p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
= Override system of system scroll speed =<br />
<br />
Instead of the acceleration, we provide an override mechanism of system scroll speed.<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', If the system scroll speed settings are not customized by user or mouse driver, this system can override the scrolling speed. '''On the others''', this can override the speed every time.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Limitation of scroll amount =<br />
<br />
Even if nsMouseScroll event has larger delta than the target frame size, Gecko scrolls it just one page because if some lines are skipped, the user may not find existing of the lines. This is especially serious problem on listbox.<br />
<br />
This limitation is computed when the scrolling is executed, so, the DOMMouseScroll event has original delta value.<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=196988Gecko:Mouse Wheel Scrolling2010-01-27T01:15:15Z<p>Masayuki: /* Gecko honors the mouse cursor position */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
When it reaches to fixed position frame, it tries to scroll root frame of the content ([https://bugzilla.mozilla.org/show_bug.cgi?id=258006 Bug 258006]).<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
= Override system of system scroll speed =<br />
<br />
Instead of the acceleration, we provide an override mechanism of system scroll speed.<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', If the system scroll speed settings are not customized by user or mouse driver, this system can override the scrolling speed. '''On the others''', this can override the speed every time.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=196982Gecko:Mouse Wheel Scrolling2010-01-27T01:06:23Z<p>Masayuki: /* Override system of system scroll speed */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
= Override system of system scroll speed =<br />
<br />
Instead of the acceleration, we provide an override mechanism of system scroll speed.<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', If the system scroll speed settings are not customized by user or mouse driver, this system can override the scrolling speed. '''On the others''', this can override the speed every time.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Hack for Thinkpad Trackpoint scrolling (Windows)=<br />
<br />
The Thinkpad Trackpoint scrolling drivers make certain assumptions about Gecko's internal window structures that are no longer valid as of Gecko 1.9.2. For backwards compatibility a hack has been inserted that creates fake invisible scrollbars so that the Trackpoint drivers will continue to work. Because this hack can itself break other drivers that make other assumptions about Gecko's window structures, Gecko uses the hack only when a Trackpoint driver is detected. Gecko looks for the Trackpoint driver by checking for the existence of several registry keys that various versions of the Trackpoint driver use.<br />
<br />
The preference '''ui.trackpoint_hack.enabled''' controls whether or not Gecko will activate the Trackpoint hack. The default value of -1 tells Gecko to try to detect the Trackpoint driver and to use the hack if one is found. A value of 0 tells Gecko to never use the hack, and a value of 1 tells Gecko to always use the hack. It is our hope that after this issue is resolved by the driver manufacturer that this hack can be removed in future versions of Gecko.<br />
<br />
See [https://bugzilla.mozilla.org/show_bug.cgi?id=507222 bug 507222] for more details.<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayukihttps://wiki.mozilla.org/index.php?title=Gecko:Mouse_Wheel_Scrolling&diff=196823Gecko:Mouse Wheel Scrolling2010-01-26T15:57:19Z<p>Masayuki: /* Mouse wheel transaction */</p>
<hr />
<div>= Overview =<br />
<br />
Gecko can have multiple scrollable frames in its content. This documents the detail of mouse wheel scrolling rules in Gecko.<br />
<br />
This first version is written for Gecko 1.9.2. But this document isn't stable, so, when this document will be updated for new behavior, the writer must write the version clearly.<br />
<br />
= Gecko honors the mouse cursor position =<br />
<br />
Basically, turning mouse wheel scrolls a scrollable view under the mouse cursor. This behavior was designed in [https://bugzilla.mozilla.org/show_bug.cgi?id=97283 bug 97283].<br />
<br />
Note that on Windows, most mouse drivers honors keyboard focus rather than the mouse cursor position. However, Internet Explorer and other web browsers honor the cursor position too. So, it's not a problem, probably.<br />
<br />
When there are two or more scrollable frames under the mouse cursor, only one frame should be scrolled. Gecko decides one scrollable frame for the target by following rules:<br />
<br />
# Finds a frame under the mouse cursor.<br />
# Checks whether the frame is scrollable to the direction by user operation.<br />
# If the frame is scrollable, Gecko scrolls the frame.<br />
# Otherwise, repeats the steps with its ancestor frames.<br />
<br />
There is a special case. If gecko finds a drop down frame of a select element, it stops going up the frame hierarchy.<br />
<br />
= Mouse wheel transaction =<br />
<br />
By above rules, users can scroll one scrollable frame smoothly. However, when two or more scrollable frames are nested, we need additional rules.<br />
<br />
For example, there is a page body which is scrollable and has a scrollable sub-frame (e.g., listbox of select element with multiple attribute, div element with overflow property, iframe element). When an user is scrolling down the sub-frame, it will be reached to the end of its content. However, some mouse wheel events which were fired after that will scroll the body unexpectedly.<br />
<br />
And there is another example, when the user is scrolling the page body, the sub-frame may come under the mouse cursor. Then, the sub-frame intercepts the mouse wheel events unexpectedly.<br />
<br />
We can fix these problems by a simple idea. That is, all users may want to scroll only one scrollable frame at one time. So, we can assume that two or more mouse wheel events which are fired between short term should scroll only one scrollable frame. The frame must be under the cursor at the first mouse wheel event.<br />
<br />
Gecko manages this transaction by nsMouseWheelTransaction which is in [http://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp nsEventStateManager.cpp]. This was implemented in [https://bugzilla.mozilla.org/show_bug.cgi?id=312831 bug 312831].<br />
<br />
The rules for end of a transaction:<br />
<br />
* When no mouse wheel events are fired during specified term after latest mouse wheel event. The length is defined by '''mousewheel.transaction.timeout'''. The value means millisecond and the default value is 1500.<br />
* When the mouse cursor moves to outside of the targeted scrollable frame.<br />
* When the mouse cursor moves inside the targeted frame. However, we need to ignore some mouse move events which are fired unexpectedly when the user turned wheel. '''mousewheel.transaction.ignoremovedelay''' defines the time of ignoring mouse move events before and after a mouse wheel event. The value is millisecond, the default value is 100.<br />
* When a keydown or keyup or keypress event is fired.<br />
* When a mouse button down or mouse button up or click or double click event is fired.<br />
* When a context menu key event or dragdrop_drop event is fired.<br />
* When a target frame is destroyed.<br />
<br />
Note that the transaction is updated only when a mouse wheel event scrolls the target frame actually. I.e., when an user keeps to turn mouse wheel to unscrollable direction, the transaction will be timed out. This is important for touchpad users, see [https://bugzilla.mozilla.org/show_bug.cgi?id=442774 bug 442774].<br />
<br />
= DOMMouseScroll event vs. Scrolling =<br />
<br />
A native mouse wheel event causes DOMMouseScroll events. The widget code dispatches an nsMouseScroll event when it handles a native mouse wheel event. Then, nsPresShell dispatches DOMMouseScroll events first. If preventDefault() wasn't called, nsEventStateManager tries to scroll a frame by the above rules.<br />
<br />
So, the contents can prevent scrolling. At that time, mouse wheel transaction isn't updated.<br />
<br />
Note that DOMMouseScroll events are fired by the actual cursor position. So, by the mouse wheel transaction system, the scroll target and the target of the DOMMouseScroll event may be different even if the target of DOMMouseScroll is scrollable.<br />
<br />
Windows version of Gecko 1.9.2 and earlier doesn't fire DOMMouseScroll events when the mouse cursor is on a windowed plug-in and it consumes native mouse wheel events. This is going to be improved in [https://bugzilla.mozilla.org/show_bug.cgi?id=483136 bug 483136].<br />
<br />
= Acceleration system =<br />
<br />
See [[Firefox/Projects/AcceleratedScrolling]] for the detail.<br />
<br />
This has many problems, so, this has been disabled in default settings.<br />
<br />
= Override system of system scroll speed =<br />
<br />
Instead of the acceleration, we provide an override mechanism of system scroll speed.<br />
<br />
This is enabled in default settings '''only''' on Windows. '''mousewheel.system_scroll_override_on_root_content.enabled''' can switch it.<br />
<br />
'''On Windows''', If the system scroll speed settings are not customized by user or mouse driver, this system can override the scrolling speed. '''On others''', this can override the speed every time.<br />
<br />
The ratio can be specified by hidden prefs. '''mousewheel.system_scroll_override_on_root_content.vertical.factor''' is for vertical scrolling event. '''mousewheel.system_scroll_override_on_root_content.horizontal.factor''' is for horizontal scrolling event. The values are used as 1/100 (i.e., the default value 200 means 2.0).<br />
<br />
nsEventStateManager multiplies the scrolling speed by the ratio.<br />
<br />
See also [https://bugzilla.mozilla.org/show_bug.cgi?id=513817 bug 513817].<br />
<br />
= Hack for Thinkpad (Windows)=<br />
<br />
= Issues =<br />
<br />
* We don't send mouse wheel events to windowless plug-ins ([https://bugzilla.mozilla.org/show_bug.cgi?id=359403 bug 359403]).<br />
* When an user is turning the mouse wheel but moving the mouse cursor, the transaction will not be finished even if the cursor is moved far.<br />
* When an user finished scrolling a sub-frame but the sub-frame is clipped by its ancestor frame, the user doesn't still watch the all contents of the sub-frame ([https://bugzilla.mozilla.org/show_bug.cgi?id=428350 bug 428350]).</div>Masayuki