https://wiki.mozilla.org/api.php?action=feedcontributions&user=Dmose&feedformat=atomMozillaWiki - User contributions [en]2024-03-29T05:48:25ZUser contributionsMediaWiki 1.27.4https://wiki.mozilla.org/index.php?title=Modules/Desktop_Firefox&diff=1243063Modules/Desktop Firefox2022-06-22T04:40:51Z<p>Dmose: Made Punam Dahiya owner of Messaging System, as discussed in governance list.</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 />
Owners and peers of the Desktop Firefox module may review code anywhere in the browser and toolkit directories. Reviews should be sent to the more specific submodules below where possible.<br />
<br />
{{Module<br />
|name=Desktop Firefox<br />
|description=Standalone Web Browser.<br />
|owner=[mailto:dtownsend@mozilla.com Dave Townsend], [mailto:gkruitbosch@mozilla.com Gijs Kruitbosch]<br />
|fallbackpeers=[mailto:dao@mozilla.com Dão Gottwald], [mailto:jwein@mozilla.com Jared Wein], [mailto:mbonardo@mozilla.com Marco Bonardo], [mailto:mozilla@noorenberghe.ca Matthew Noorenberghe]<br />
|ownersemeritus=<br />
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy], [mailto:lina@mozilla.com Lina Cambridge], [mailto:lchang@mozilla.com Luke Chang], [mailto:rchien@mozilla.com Ricky Chien], [mailto:dolske@mozilla.com Justin Dolske], [mailto:georg.fritzsche@googlemail.com Georg Fritzsche], [mailto:felipc@gmail.com Felipe Gomes], [mailto:tchien@mozilla.com Tim Guan-tin Chien], [mailto:jhofmann@mozilla.com Johann Hofmann], [mailto:rexboy@mozilla.com KM Lee Rex], [mailto:gasolin@mozilla.com Fred Lin], [mailto:ralin@mozilla.com Ray Lin], [mailto:fliu@mozilla.com Fischer Liu], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:mark@moxienet.com Mark Mentovai], [mailto:ted.mielczarek@gmail.com Ted Mielczarek], [mailto:bnicholson@mozilla.com Brian Nicholson], [mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:mano@mozilla.com Asaf Romano], [mailto:msamuel@mozilla.com Marina Samuel], [mailto:jryans@gmail.com J Ryan Stinnett], [mailto:gps@mozilla.com Gregory Szorc], [mailto:ttaubert@mozilla.com Tim Taubert], <br />
|group=firefox-dev<br />
|source_dirs=browser/, toolkit/<br />
|url=[[Firefox/Code_Review|Code Review Guidelines]]<br />
|components=Firefox, Toolkit<br />
}}<br />
<br />
== Submodules ==<br />
<br />
{{Module<br />
|name=Add-ons Manager<br />
|description=Extension management back-end.<br />
|owner=[mailto:scaraveo@mozilla.com Shane Caraveo], [mailto:lgreco@mozilla.com Luca Greco]<br />
|ownersemeritus=[mailto:rstrong@mozilla.com Robert Strong], [mailto:aswan@mozilla.com Andrew Swan], [mailto:kmaglione@mozilla.com Kris Maglione]<br />
|peers=[mailto:lgreco@mozilla.com Luca Greco], [mailto:tjovanovic@mozilla.com Tomislav Jovanovic], [mailto:rwu@mozilla.com Rob Wu], [mailto:wdurand@mozilla.com William Durand]<br />
|source_dirs=toolkit/mozapps/extensions/<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Add-ons Manager UI<br />
|description=about:addons.<br />
|owner=[mailto:scaraveo@mozilla.com Shane Caraveo], [mailto:mstriemer@mozilla.com Mark Striemer]<br />
|ownersemeritus=[mailto:rstrong@mozilla.com Robert Strong], [mailto:aswan@mozilla.com Andrew Swan]<br />
|peers=[mailto:lgreco@mozilla.com Luca Greco], [mailto:tjovanovic@mozilla.com Tomislav Jovanovic], [mailto:rwu@mozilla.com Rob Wu]<br />
|source_dirs=toolkit/mozapps/extensions/content/<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Application Update<br />
|description=The application update services.<br />
|owner=[mailto:ksteuber@mozilla.com Kirk Steuber]<br />
|peers=[mailto:mhowell@mozilla.com Molly Howell], [mailto:agashlin@mozilla.com Adam Gashlin]<br />
|source_dirs=toolkit/mozapps/update/<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Bookmarks & History<br />
|description=The bookmarks and history services (Places).<br />
|owner=[mailto:mbonardo@mozilla.com Marco Bonardo]<br />
|peers=[mailto:standard8@mozilla.com Mark Banner], [mailto:adw@mozilla.com Drew Willcoxon]<br />
|source_dirs=browser/components/places/, toolkit/components/places/<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Desktop Theme<br />
|description=The style rules used in the desktop UI.<br />
|owner=[mailto:dgottwald@mozilla.com Dão Gottwald]<br />
|peers=[mailto:itiel_yn8@walla.com Itiel], [mailto:sfoster@mozilla.com Sam Foster]<br />
|peersemeritus=[mailto:ntim.bugs@gmail.com Tim Nguyen]<br />
|source_dirs=browser/themes/, toolkit/themes/<br />
|url=<br />
|components=Firefox::Theme, Toolkit::Themes<br />
}}<br />
<br />
{{Module<br />
|name=Desktop UI<br />
|description=The main browser UI except where covered by more specific submodules.<br />
|owner=[mailto:jwein@mozilla.com Jared Wein]<br />
|peers=[mailto:mconley@mozilla.com Mike Conley], [mailto:florian@queze.net Florian Quèze] <br />
|source_dirs=browser/base/content/<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Download Manager<br />
|description=The downloads UI and service.<br />
|owner=[mailto:mbonardo@mozilla.com Marco Bonardo]<br />
|peers=[mailto:gijskruitbosch@gmail.com Gijs Kruitbosch], [mailto:mtigley@mozilla.com Micah Tigley]<br />
|source_dirs=browser/components/downloads/, toolkit/mozapps/downloads/<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Enterprise Policies<br />
|description=System policies for controlling Firefox.<br />
|owner=[mailto:mkaply@mozilla.com Michael Kaply]<br />
|peers=<br />
|source_dirs=browser/components/enterprisepolicies/<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Form Autofill<br />
|description=Form detection and autocomplete.<br />
|owner=[mailto:sgalich@mozilla.com Sergey Galich]<br />
|ownersemeritus=[mailto:mozilla@noorenberghe.ca Matthew Noorenberghe]<br />
|peers=[mailto:dlee@mozilla.com Dimi Lee], [mailto:tgiles@mozilla.com Tim Giles]<br />
|source_dirs=browser/extensions/formautofill/, toolkit/components/satchel/<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=In-product Messaging<br />
|description=The system for delivering in-product messaging.<br />
|owner=[mailto:pdahiya@mozilla.com Punam Dahiya]<br />
|peers=[mailto:najiang@mozilla.com Nan Jiang], [mailto:edilee@mozilla.com Ed Lee], [mailto:khudson@mozilla.com Kate Hudson],<br />
|source_dirs=toolkit/components/messaging-system/<br />
|url=https://firefox-source-docs.mozilla.org/browser/components/newtab/content-src/asrouter/docs/index.html<br />
|components=Firefox::Messaging System<br />
}}<br />
<br />
{{Module<br />
|name=Launcher Process<br />
|description=Windows process for bootstrapping the browser process.<br />
|owner=[mailto:tkikuchi@mozilla.com Toshihito Kikuchi]<br />
|ownersemeritus=Aaron Klotz<br />
|peers=[mailto:mhowell@mozilla.com Molly Howell]<br />
|source_dirs=browser/app/winlauncher<br />
|url=<br />
|components=Firefox::Launcher Process<br />
}}<br />
<br />
{{Module<br />
|name=Localization<br />
|description=Tooling to enable translation and facilitate localization.<br />
|owner=[mailto:francesco.lodolo@gmail.com Francesco Lodolo]<br />
|ownersemeritus=<br />
|peers=[mailto:m@owca.info Matjaž Horvat], [mailto:earo@mozilla.com Eemeli Aro]<br />
|source_dirs=<br />
|url=<br />
|components=Mozilla Localizations, Localization Infrastructure and Tools<br />
}}<br />
<br />
{{Module<br />
|name=New Tab Page<br />
|description=The new tab/home page.<br />
|owner=[mailto:elee@mozilla.com Ed Lee]<br />
|peers=[mailto:khudson@mozilla.com Kate Hudson], [mailto:aoprea@mozilla.com Andrei Oprea], [mailto:sdowne@getpocket.com Scott Downe]<br />
|source_dirs=browser/components/newtab/<br />
|url=<br />
|components=Firefox::New Tab Page<br />
}}<br />
<br />
{{Module<br />
|name=Experiments/Rollouts<br />
|description=Desktop clients for our experiments and off-train deployments systems.<br />
|owner=[mailto:brennie@mozilla.com Barret Rennie]<br />
|ownersemeritus=[mailto:mcooper@mozilla.com Michael Cooper]<br />
|peers=[mailto:gkruitbosch@mozilla.com Gijs Kruitbosch], [mailto:emcminn@mozilla.com Emily McMinn]<br />
|source_dirs=toolkit/components/normandy/, toolkit/components/nimbus/<br />
|url=https://experimenter.info/<br />
|components=Firefox::Normandy,Firefox::Nimbus Desktop Client<br />
}}<br />
<br />
{{Module<br />
|name=Onboarding<br />
|description=The onboarding experience including UI tours.<br />
|owner=[mailto:elee@mozilla.com Ed Lee]<br />
|peers=[mailto:mozilla@noorenberghe.ca Matthew Noorenberghe]<br />
|source_dirs=browser/components/uitour/<br />
|url=<br />
|components=Firefox::Tours<br />
}}<br />
<br />
{{Module<br />
|name=Password Manager<br />
|description=Managing, saving and filling logins.<br />
|owner=[mailto:sgalich@mozilla.com Sergey Galich]<br />
|ownersemeritus=[mailto:mozilla@noorenberghe.ca Matthew Noorenberghe]<br />
|peers=[mailto:sfoster@mozilla.com Sam Foster], [mailto:jwein@mozilla.com Jared Wein], [mailto:tgiles@mozilla.com Tim Giles], [mailto:dlee@mozilla.com Dimi Lee]<br />
|peersemeritus=[mailto:bdanforth@mozilla.com Bianca Danforth], [mailto:srudie@mozilla.com Severin Rudie]<br />
|source_dirs=toolkit/components/passwordmgr/, browser/components/aboutlogins<br />
|url=https://wiki.mozilla.org/Toolkit:Password_Manager<br />
|components=Toolkit::Password Manager, Toolkit::Password Manager: Site Compatibility, Firefox::about:logins<br />
}}<br />
<br />
<br />
{{Module<br />
|name= Picture-in-Picture<br />
|description= A component that allows video elements to be pulled out into an always-on-top window.<br />
|owner=[mailto:mconley@mozilla.com Mike Conley], [mailto:mtigley@mozilla.com Micah Tigley], [mailto:mhowell@mozilla.com Molly Howell]<br />
|peers=[mailto:kpatenio@mozilla.com Katherine Patenio], [mailto:nbaumgardner@mozilla.com Niklas Baumgardner]<br />
|source_dirs=toolkit/components/pictureinpicture, browser/extensions/pictureinpicture<br />
|url=https://firefox-source-docs.mozilla.org/toolkit/components/pictureinpicture/pictureinpicture/index.html<br />
}}<br />
<br />
{{Module<br />
|name=Preferences<br />
|description=The front-end preferences system.<br />
|owner=[mailto:jwein@mozilla.com Jared Wein]<br />
|peers=[mailto:mstriemer@mozilla.com Mark Striemer], [mailto:gkruitbosch@mozilla.com Gijs Kruitbosch]<br />
|peersemeritus=[mailto:ntim.bugs@gmail.com Tim Nguyen]<br />
|source_dirs=browser/components/preferences/, browser/themes/*/preferences, toolkit/mozapps/preferences<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Profile Migration<br />
|description=Migrating data from other browsers.<br />
|owner=[mailto:gkruitbosch@mozilla.com Gijs Kruitbosch]<br />
|peers=[mailto:mbonardo@mozilla.com Marco Bonardo], [mailto:mozilla@noorenberghe.ca Matthew Noorenberghe]<br />
|source_dirs=browser/components/migration/<br />
|url=<br />
|components=<br />
}}<br />
<br />
{{Module<br />
|name=Screenshots<br />
|description=Code relating to Screenshots functionality<br />
|owner=[mailto:sfoster@mozilla.com Sam Foster]<br />
|peers=[mailto:jhirsch@mozilla.com Jared Hirsch], [mailto:nbaumgardner@mozilla.com Niklas Baumgardner],<br />
|peersemeritus=[mailto:bchen@mozilla.com Barry Chen]<br />
|ownersemeritus=[mailto:emmamalysz@gmail.com Emma Malysz], [mailto:ian@ianbicking.org Ian Bicking]<br />
|source_dirs=browser/extensions/screenshots, browser/components/screenshots/<br />
|components=Firefox::Screenshots<br />
}}<br />
<br />
{{Module<br />
|name=Search and Address Bar<br />
|description=The search service, address bar and address bar autocomplete.<br />
|owner=[mailto:standard8@mozilla.com Mark Banner], [mailto:dwillcoxon@mozilla.com Drew Willcoxon]<br />
|peers=[mailto:dharvey@mozilla.com Dale Harvey], [mailto:mbonardo@mozilla.com Marco Bonardo], [mailto:dao@mozilla.com Dão Gottwald]<br />
|peersemeritus=[mailto:info@mikedeboer.nl Michael de Boer]<br />
|source_dirs=browser/components/search/, browser/components/urlbar/, toolkit/components/search/<br />
|url=<br />
|components=Firefox::Address Bar, Firefox::Search<br />
}}<br />
<br />
{{Module<br />
|name=Security and Privacy UI<br />
|description=The front-end to our security and privacy features, including Protections UI, Site Identity, Site Permissions and Certificate Errors<br />
|owner=[mailto:pbz@mozilla.com Paul Zühlcke]<br />
|peers=[mailto:prathiksha@mozilla.com Prathiksha]<br />
|peersemeritus=[mailto:ewright@mozilla.com Erica Wright], Nihanth Subramanya<br />
|ownersemeritus=[mailto:jhofmann@mozilla.com Johann Hofmann]<br />
|source_dirs=browser/components/protections/, browser/components/controlcenter/<br />
|url=<br />
|components=Firefox::Security, Firefox::Protections UI, Firefox::Site Identity, Firefox::Site Permissions<br />
}}<br />
<br />
{{Module<br />
|name=Session Restore<br />
|description=Restoring a user's session after starting Firefox.<br />
|owner=[mailto:dao@mozilla.com Dão Gottwald], [mailto:dharvey@mozilla.com Dale Harvey]<br />
|peers=[mailto:afarre@mozilla.com Andreas Farre]<br />
|ownersemeritus=[mailto:info@mikedeboer.nl Michael de Boer], Kashav Madan, Anny Gakhokidze<br />
|source_dirs=browser/components/sessionstore/, toolkit/components/sessionstore/<br />
|url=<br />
|components=Firefox::Session Restore<br />
}}<br />
<br />
{{Module<br />
|name=Tabbed Browser<br />
|description=The UI component controlling browser tabs.<br />
|owner=[mailto:dgottwald@mozilla.com Dão Gottwald]<br />
|peers=<br />
|source_dirs=browser/base/content/tabbrowser*, browser/modules/AsyncTabSwitcher.jsm<br />
|url=<br />
|components=Firefox::Tabbed Browser<br />
}}<br />
<br />
{{Module<br />
|name=Windows Installer<br />
|description=The installer for Windows.<br />
|owner=[mailto:mhowell@mozilla.com Molly Howell]<br />
|peers=[mailto:agashlin@mozilla.com Adam Gashlin], [mailto:nalexander@mozilla.com Nick Alexander]<br />
|source_dirs=browser/installer/, toolkit/mozapps/installer/<br />
|url=<br />
|components=Firefox::Installer<br />
}}</div>Dmosehttps://wiki.mozilla.org/index.php?title=Modules/Core&diff=1232680Modules/Core2020-12-14T22:47:19Z<p>Dmose: Removed jlaster as a nodejs module peer, as he is no longer active.</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:brian@birchill.co.jp Brian Birtles] (:birtles)<br />
|peers=[mailto:boris@mozilla.com Boris Chiou] (:boris), [mailto:hikezoe.birchill@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:xeonchen@gmail.com Gary Chen], [mailto:jhofmann@mozilla.com Johann Hofmann], [mailto:tihuang@mozilla.com Tim Huang]<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:mh@glandium.org Mike Hommey] (:glandium)<br />
|peers=[mailto:dmajor@mozilla.com David Major] (:dmajor), [mailto:rstewart@mozilla.com Ricky Stewart] (:ricky), [mailto:mhentges@mozilla.com Mitchell Hentges]<br />
|ownersemeritus=Chris Manchester (2019-2020), Gregory Szorc (2013-2019), Ted Mielczarek (2008-[https://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/ 2013]), Benjamin Smedberg (???-[http://benjamin.smedbergs.us/blog/2008-04-30/more-changing-of-the-guard-ted-mielczarek/ 2008]), <br />
|peersemeritus=Ted Mielczarek, Ralph Giles, Gregory Szorc, Chris Manchester, Mike Shal, Nathan Froyd<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<br />
|peersemeritus=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:bballo@mozilla.com Botond Ballo], [mailto:glandium@mozilla.com Mike Hommey], [mailto:jwalden@mozilla.com Jeff Walden], [mailto:sgiesecke@mozilla.com Simon Giesecke]<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:Olli.Pettay@helsinki.fi Olli Pettay], [mailto:nika@thelayzells.com Nika Layzell]<br />
|peers=[mailto:peterv@propagandism.org Peter Van der Beken], [mailto:afarre@mozilla.com Andreas Farre]<br />
|ownersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]<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: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], [mailto:emilio@crisal.io Emilio Cobos], [mailto:asuth@mozilla.com Andrew Sutherland]<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], [mailto:bzbarsky@mit.edu Boris Zbarsky]<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:echen@mozilla.com Edgar Chen]<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::DOM: UI Events & Focus Handling<br />
}}<br />
<br />
{{Module<br />
|name=Web Workers<br />
|description=<br />
|owner=[mailto:asuth@mozilla.com Andrew Sutherland]<br />
|peers=[mailto:baku@mozilla.com Andrea Marchesini], [mailto:ytausky@mozilla.com Yaron Tausky]<br />
|ownersemeritus=[mailto:bent.mozilla@gmail.com Ben Turner]<br />
|peersemeritus=[mailto:mrbkap@mozilla.com Blake Kaplan], [mailto:jonas@sicking.cc Jonas Sicking], [mailto:me@kylehuey.com Kyle Huey], [mailto:bkelly@mozilla.com Ben Kelly]<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: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), Nicholas Nethercote<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://wiki.mozilla.org/Platform/GFX/WebGPU<br />
|components=Core::Graphics::WebGPU<br />
}}<br />
<br />
{{Module<br />
|name=APZ (Graphics submodule)<br />
|description=Asynchronous panning and zooming<br />
|owner=[mailto:bballo@mozilla.com Botond Ballo]<br />
|ownersemeritus=[mailto:kgupta@mozilla.staktrace.com Kartikaya Gupta]<br />
|peers=[mailto:kgupta@mozilla.staktrace.com Kartikaya Gupta], [mailto:tnikkel@mozilla.com Timothy Nikkel], [mailto:rhunt@mozilla.com Ryan Hunt], [mailto:mstange@mozilla.com Markus Stange]<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: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:evilpies@gmail.com Tom Schuster], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:jwalden@mit.edu Jeff Walden], [mailto:ystartsev@mozilla.com Yulia Startsev], [mailto:mgaudet@mozilla.com Matthew Gaudet], [mailto:iireland@mozilla.com Iain Ireland], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:ccullen@mozilla.com Caroline Cullen], [mailto:nfitzgerald@mozilla.com Nick Fitzgerald], [mailto:luke@mozilla.com Luke Wagner], [mailto:sunfish@mozilla.com Dan Gohman], [mailto:bobbyholley@gmail.com Bobby Holley]<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, [mailto:efaust@mozilla.com Eric Faust], [mailto:khyperia@mozilla.com Ashley Hauck], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:till@tillschneidereit.net Till Schneidereit], Nicholas Nethercote<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=André Bargull, [mailto:bbouvier@mozilla.com Benjamin Bouvier], [mailto:tcampbell@mozilla.com Ted Campbell], [mailto:ccullen@mozilla.com Caroline Cullen], [mailto:mgaudet@mozilla.com Matthew Gaudet], [mailto:bhackett1024@gmail.com Brian Hackett], [mailto:iireland@mozilla.com Iain Ireland], [mailto:nicolas.b.pierron@mozilla.com Nicolas Pierron], [mailto:evilpies@gmail.com Tom Schuster], [mailto:sstangl@mozilla.com Sean Stangl], [mailto:kvijayan@mozilla.com Kannan Vijayan], [mailto:luke@mozilla.com Luke Wagner]<br />
|peersemeritus=[mailto:danderson@mozilla.com David Anderson], [mailto:shu@mozilla.com Shu-yu Guo], [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:dholbert@mozilla.com Daniel Holbert], [mailto:jfkthame@gmail.com Jonathan Kew], [mailto:tnikkel@gmail.com Timothy Nikkel], [mailto:matt.woodrow@gmail.com Matt Woodrow], [mailto:xidorn+moz@upsuper.org Xidorn Quan], [mailto:emilio@crisal.io Emilio Cobos Álvarez]<br />
|peersemeritus=[mailto:bzbarsky@mit.edu Boris Zbarsky]<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=<br />
|peersemeritus=Eric Rahm, 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: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: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], [mailto:juhsu@mozilla.com Junior Hsu]<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=NodeJS usage, tools, and style<br />
|description=Advises on the use of NodeJS and npm packages at build and runtime. Reviews additions/upgrades/removals of vendored npm packages. Works with appropriate teams to maintain automated license and security audits of npm packages. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored npm packages.<br />
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]<br />
|peers=[mailto:mbanner@mozilla.com Mark Banner], [mailto:dcoates@mozilla.com Danny Coates], [mailto:khudson@mozilla.com Kate Hudson], [mailto:elee@mozilla.com Ed Lee], [mailto:dtownsend@mozilla.com Dave Townsend]<br />
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate<br />
|components=Various components<br />
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev], #nodejs on slack<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:kwright@mozilla.com Kris Wright]<br />
|peers=[mailto:glandium@mozilla.com Mike Hommey], [mailto:kwright@mozilla.com Kris Wright]<br />
|ownersemeritus=Nicholas Nethercote<br />
|peersemeritus=Felipe Gomes, 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: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], [mailto:ckerschbaumer@mozilla.com Christoph Kerschbaumer]<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:andi@mozilla.com Andi-Bogdan Postelnicu]<br />
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:sfink@mozilla.com Steve Fink], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:eakhgari@mozilla.com Ehsan Akhgari]<br />
|peersemeritus=[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=[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 Kearwood (Kip) Gilbert]<br />
|peers=[mailto:dmu@mozilla.com Daosheng Mu], [mailto:igorostizaga@mozilla.com Imanol Fernández]<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 - macOS<br />
|description= macOS widget support<br />
|owner=[mailto:spohl@mozilla.com Stephen A Pohl]<br />
|peers=[mailto:mstange@themasta.com Markus Stange], [mailto:haftandilian@mozilla.com Haik Aftandilian]<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:cmartin@mozilla.com Chris Martin], [mailto:tkikuchi@mozilla.com Toshihito Kikuchi], [mailto:mhowell@mozilla.com Molly Howell], [mailto:aklotz@mozilla.com Aaron Klotz], [mailto:neil@parkwaycc.co.uk Neil Rashbrook]<br />
|peersemeritus=[mailto:robert.strong.bugs@gmail.com Rob Strong], [mailto:vladimir@pobox.com Vladimir Vukicevic], [mailto:blassey@mozilla.com Brad Lassey], [mailto:netzen@gmail.com Brian Bondy], [mailto:cbiesinger@gmail.com Christian Biesinger], [mailto:doug.turner@gmail.com Doug Turner], [mailto:timeless@mozdev.org Josh '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=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:erahm@mozilla.com Eric Rahm]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:jstenback@gmail.com Johnny Stenback], [mailto:bzbarsky@mit.edu Boris Zbarsky]<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=[mailto:nika@thelayzells.com Nika Layzell]<br />
|peers=[mailto:erahm@mozilla.com Eric Rahm], [mailto:kmaglione@mozilla.com Kris Maglione], [mailto:sgiesecke@mozilla.com Simon Giesecke]<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: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:erahm@mozilla.com Eric Rahm]<br />
|peersemeritus=[mailto:jonas@sicking.cc Jonas Sicking], [mailto:axel@pike.org Axel Hecht]<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=<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>Dmosehttps://wiki.mozilla.org/index.php?title=ReleaseEngineering/DisposableProjectRepositories&diff=1223818ReleaseEngineering/DisposableProjectRepositories2020-02-14T16:49:12Z<p>Dmose: /* BOOKING SCHEDULE */</p>
<hr />
<div>== What is a disposable project branch? ==<br />
These are project branches that can be cloned fresh from any mozilla-central based repo with the full gamut of tests enabled. No l10n or<br />
nightlies for now. Similar to [[ReleaseEngineering/TryServer|TryServer]] but for longer, and just for '''you'''. Unlike Try, the commit level on these branches is '''level_2 (and above) contributors only''' so please bear that in mind.<br />
<br />
===Do you need a disposable branch?===<br />
Ask yourself the following:<br />
<br />
'''Does your project have an end date?'''<br />
<br />
If your answer is '''No''' then you should follow the process at [https://wiki.mozilla.org/ReleaseEngineering:ProjectBranchPlanning Project Branch Planning]<br />
<br />
<br />
If your project is a temporary feature sprint that needs its own rapid test coverage but will eventually be merged into mozilla-central and no longer be on its own by all means, please go ahead and <br />
<br />
===Book one of our fabulous "disposable" project branches===<br />
'''''NOTE:''''' The number of disposable branches is limited by CI capacity. If there are no available branches, contact the owners of existing branches to see if you can "sub let".<br />
<br />
* Sign up below in the [[#BOOKING_SCHEDULE|BOOKING SCHEDULE]]<br />
* Make a [https://bugzilla.mozilla.org/enter_bug.cgi?product=Developer%20Services&component=Mercurial:%20hg.mozilla.org&short_desc=Requesting%20twig%20repo%20{booked_repo}%20be%20reset&comment=Please%20run%20the%20{script_name}%20and%20reset%20{booked_repo}%20to%20{url}&cc=buildduty@releng.bugs request] (example: {{bug|1518167}}) to VCS to reset the repo for you. You can specify the source repository and target revision to use, or default to mozilla-central:tip. '''Ask that they run the `hgmo-reset-twig.yml` Ansible playbook found in version-control-tools to accomplish this'''.<br />
* '''NOTE''': Your repository will have no hooks enabled after a reset. You'll need to specify in the request if you need any configured.<br />
* After Developer Services runs the reset, they will also notify the teams who operate the automation, so they can adjust their schedulers to recognize the reset. If you don't see the expected builds, check with the automation teams to ensure their reset occurred.<br />
* Sit back and watch your builds and test results roll in (eg [https://treeherder.mozilla.org/#/jobs?repo=birch Birch], [https://treeherder.mozilla.org/#/jobs?repo=cedar Cedar], [https://treeherder.mozilla.org/#/jobs?repo=larch Larch], [https://treeherder.mozilla.org/#/jobs?repo=maple Maple]). <br />
<br />
<div id="unbook"></div><br />
<br />
===When you're done with one of our fabulous "disposable" project branches===<br />
<br />
Simply clear your data (bug, contact, dates) from the [[#BOOKING_SCHEDULE|BOOKING SCHEDULE]] below. If someone is listed in the "Next in Line" column, please let them know you are done.<br />
<br />
That's all there is to it!<br />
<br />
== Using a custom mozconfig ==<br />
<br />
The mozconfigs used for builds live in the same source tree as the main code, eg<br />
* Firefox: <tt>browser/config/mozconfigs/<platform></tt><br />
* Mobile Native: <tt>mobile/android/config/mozconfigs/android</tt><br />
* Mobile XUL: <tt>mobile/xul/config/mozconfigs/android-xul</tt><br />
<br />
The 'nightly' file is used for optimised builds, 'debug' for debug. If you are unsure which file you need consult a build log to see which is used. You can adjust these as needed on your branch, and they will be carried over to mozilla-central when you merge back. Please take care with any mozconfig changes you merge back (eg exclude local conveniences).<br />
<br />
==Enabling/Disabling of platforms, tests, nightly updates ==<br />
If the specific builds/tests you want are not enabled, or if there are builds/tests which you do not need on your branch, ask RelEng to enable/disable them by filing a bug [https://bugzilla.mozilla.org/enter_bug.cgi?product=Release%20Engineering here].<br />
<br />
Nightly builds and updates are disabled by default but can be enabled on request.<br />
<br />
== BOOKING SCHEDULE ==<br />
<br />
{| class="data wikitable"<br />
|-<br />
! Project Branch<br />
! Regist. bug<br />
! email address of borrower<br />
! User/Dev Team contact <br />
! Booking Dates <br />
! Next in Line<br />
|-<br />
|<br />
|<br />
|<br />
|<br />
|<br />
| <br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=ash Ash]<br />
| {{bug|1537741}}<br />
| peterv@mozilla.com<br />
| fission, :peterv<br />
| 2019-03-21 - 2019-08-31<br />
| <br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=cypress Cypress]<br />
| {{bug|1222301}}<br />
| Pidgeot18@gmail.com<br />
| <br />
| <br />
|<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=elm Elm]<br />
| {{bug|1364561}}<br />
| jgraham@mozilla.com<br />
| wpt-sync<br />
| 2017-09-06 - 2017-12-31<br />
|<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=cedar Cedar]<br />
| {{bug|1554228}}<br />
| vporof@mozilla.com<br />
| :vp, Browser Architecture usage<br />
| 2019-06-01 - 2019-08-01<br />
|<br />
|-<br />
| <strike>[https://treeherder.mozilla.org/#/jobs?repo=fig Fig]</strike><br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
|-<br />
| <strike>[https://treeherder.mozilla.org/#/jobs?repo=gum Gum]</strike><br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=holly Holly]<br />
| {{bug|1599905}}<br />
| jewilde@mozilla.com, tom@mozilla.com<br />
| <-<br />
| 2019-12-02 - 2020-04-02<br />
| -<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=larch Larch]<br />
| {{bug|1322426}} socket process isolation<br />
| hbambas@mozilla.com<br />
| necko, :mayhemer<br />
| 2018-08-20 - 2020-08-20<br />
| -<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=oak Oak]<br />
| {{bug|790467}} and other risky updater work<br />
| mhowell@mozilla.com, rstrong@mozilla.com<br />
| mhowell, rstrong<br />
| 2012-09-11 - 2015-12-31 '''''<span color="yellow">PENDING</span>'''''<br />
| -<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=pine Pine]<br />
|<br />
| <br />
| <br />
| <br />
| -<br />
|}<br />
<br />
Be sure to keep a copy of anything you need from the repo prior to [[#unbook|unbooking]] it.<br />
<br />
== Indefinite booking ==<br />
See also [[ReleaseEngineering/SpecialBranches]] for more info on these branches.<br />
<br />
{| class="data wikitable"<br />
|-<br />
! Project Branch<br />
! Regist. bug<br />
! email address of borrower<br />
! User/Dev Team contact <br />
! Booking Dates<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=date Date]<br />
| disabled<br />
| disabled<br />
| disabled<br />
| DO NOT USE - https://wiki.mozilla.org/ReleaseEngineering/DisposableProjectRepositories<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=jamun Jamun]<br />
| {{bug|1259143}}<br />
| rail@mozilla.com, jlund@mozilla.com<br />
| Release promotion<br />
| 2016-03-23 - indefinite<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=birch Birch]<br />
| {{bug|1426132}}<br />
| release@mozilla.com<br />
| tc release promotion<br />
| 2017-12-19 - indefinite<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=maple Maple]<br />
| {{bug|1397773}}<br />
| aki@mozilla.com<br />
| tc release promotion<br />
| 2017-10-02 - indefinite<br />
|-<br />
|}</div>Dmosehttps://wiki.mozilla.org/index.php?title=Modules/Core&diff=1220846Modules/Core2019-12-02T20:25:46Z<p>Dmose: Add NodeJS module, as discussed in mozilla.governance.</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:sgiesecke@mozilla.com Simon Giesecke]<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=NodeJS usage, tools, and style<br />
|description=Advises on the use of NodeJS and npm packages at build and runtime. Reviews additions/upgrades/removals of vendored npm packages. Works with appropriate teams to maintain automated license and security audits of npm packages. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored npm packages.<br />
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]<br />
|peers=[mailto:mbanner@mozilla.com Mark Banner], [mailto:dcoates@mozilla.com Danny Coates], [mailto:khudson@mozilla.com Kate Hudson], [mailto:jlaster@mozilla.com Jason Laster], [mailto:elee@mozilla.com Ed Lee], [mailto:dtownsend@mozilla.com Dave Townsend]<br />
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate<br />
|components=Various components<br />
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev], #nodejs on slack<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:andi@mozilla.com Andi-Bogdan Postelnicu]<br />
|peers=[mailto:nika@thelayzells.com Nika Layzell], [mailto:sfink@mozilla.com Steve Fink], [mailto:jrmuizel@mozilla.com Jeff Muizelaar], [mailto:eakhgari@mozilla.com Ehsan Akhgari]<br />
|peersemeritus=[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: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>Dmosehttps://wiki.mozilla.org/index.php?title=User:Mossop:NodeModule&diff=1219747User:Mossop:NodeModule2019-11-01T14:30:03Z<p>Dmose: Added Danny Coates to the list of peers</p>
<hr />
<div>{{Module<br />
|name=NodeJS usage, tools, and style<br />
|description=Advises on the use of NodeJS and npm packages at build and runtime. Reviews additions/upgrades/removals of vendored npm packages. Works with appropriate teams to maintain automated license and security audits of npm packages. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored npm packages.<br />
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]<br />
|peers=[mailto:mbanner@mozilla.com Mark Banner], [mailto:dcoates@mozilla.com Danny Coates], [mailto:khudson@mozilla.com Kate Hudson], [mailto:jlaster@mozilla.com Jason Laster], [mailto:elee@mozilla.com Ed Lee], [mailto:dtownsend@mozilla.com Dave Townsend]<br />
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate<br />
|components=Various components<br />
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev], #nodejs on slack<br />
}}</div>Dmosehttps://wiki.mozilla.org/index.php?title=User:Mossop:NodeModule&diff=1219460User:Mossop:NodeModule2019-10-24T16:26:04Z<p>Dmose: Add #nodejs on slack</p>
<hr />
<div>{{Module<br />
|name=NodeJS usage, tools, and style<br />
|description=Advises on the use of NodeJS and npm packages at build and runtime. Reviews additions/upgrades/removals of vendored npm packages. Works with appropriate teams to maintain automated license and security audits of npm packages. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored npm packages.<br />
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]<br />
|peers=[mailto:mbanner@mozilla.com Mark Banner],[mailto:khudson@mozilla.com Kate Hudson], [mailto:jlaster@mozilla.com Jason Laster], [mailto:elee@mozilla.com Ed Lee], [mailto:dtownsend@mozilla.com Dave Townsend]<br />
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate<br />
|components=Various components<br />
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev], #nodejs on slack<br />
}}</div>Dmosehttps://wiki.mozilla.org/index.php?title=User:Mossop:NodeModule&diff=1219201User:Mossop:NodeModule2019-10-17T00:40:41Z<p>Dmose: Add jlast as a peer</p>
<hr />
<div>{{Module<br />
|name=NodeJS usage, tools, and style<br />
|description=Advises on the use of NodeJS and npm packages at build and runtime. Reviews additions/upgrades/removals of vendored npm packages. Works with appropriate teams to maintain automated license and security audits of npm packages. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored npm packages.<br />
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]<br />
|peers=[mailto:mbanner@mozilla.com Mark Banner],[mailto:khudson@mozilla.com Kate Hudson], [mailto:jlaster@mozilla.com Jason Laster], [mailto:elee@mozilla.com Ed Lee], [mailto:dtownsend@mozilla.com Dave Townsend],<br />
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate<br />
|components=Various components<br />
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev]<br />
}}</div>Dmosehttps://wiki.mozilla.org/index.php?title=User:Mossop:NodeModule&diff=1219187User:Mossop:NodeModule2019-10-16T20:52:21Z<p>Dmose: Add some peers</p>
<hr />
<div>{{Module<br />
|name=NodeJS usage, tools, and style<br />
|description=Advises on the use of NodeJS and npm packages at build and runtime. Reviews additions/upgrades/removals of vendored npm packages. Works with appropriate teams to maintain automated license and security audits of npm packages. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored npm packages.<br />
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]<br />
|peers=[mailto:mbanner@mozilla.com Mark Banner],[mailto:khudson@mozilla.com Kate Hudson], [mailto:elee@mozilla.com Ed Lee], [mailto:dtownsend@mozilla.com Dave Townsend],<br />
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate<br />
|components=Various components<br />
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev]<br />
}}</div>Dmosehttps://wiki.mozilla.org/index.php?title=User:Mossop:NodeModule&diff=1219176User:Mossop:NodeModule2019-10-16T15:49:56Z<p>Dmose: Tweaked wording to consistently use the phrase "npm packages" for clarity</p>
<hr />
<div>{{Module<br />
|name=NodeJS usage, tools, and style<br />
|description=Advises on the use of NodeJS and npm packages at build and runtime. Reviews additions/upgrades/removals of vendored npm packages. Works with appropriate teams to maintain automated license and security audits of npm packages. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored npm packages.<br />
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]<br />
|peers=[mailto:dtownsend@mozilla.com Dave Townsend], ...<br />
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate<br />
|components=Various components<br />
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev]<br />
}}</div>Dmosehttps://wiki.mozilla.org/index.php?title=User:Mossop:NodeModule&diff=1219175User:Mossop:NodeModule2019-10-16T15:47:24Z<p>Dmose: Added "Reviews additions/upgrades/removals of npm packages.", since this is arguably the biggest work item</p>
<hr />
<div>{{Module<br />
|name=NodeJS usage, tools, and style<br />
|description=Advises on the use of NodeJS modules at build and runtime. Reviews additions/upgrades/removals of npm packages. Works with appropriate teams to maintain automated license and security audits of vendored node modules. Works with the security team and relevant developers to respond to vulnerabilities in NodeJS and vendored NodeJS modules.<br />
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]<br />
|peers=[mailto:dtownsend@mozilla.com Dave Townsend], ...<br />
|source_dirs=package.json, package-lock.json, node_modules and others as appropriate<br />
|components=Various components<br />
|forum=[https://wiki.mozilla.org/Firefox/firefox-dev firefox-dev]<br />
}}</div>Dmosehttps://wiki.mozilla.org/index.php?title=User:Mossop:NodeModule&diff=1218859User:Mossop:NodeModule2019-10-09T19:50:54Z<p>Dmose: Clean up bad editing; remove jlast, as he hasn't committed (yet, i hope!)</p>
<hr />
<div>{{Module<br />
|name=NodeJS usage, tools, and style<br />
|description=Advises on the use of NodeJS modules at build and runtime. Works with the build team [XXX I'm pretty sure there are going to be multiple teams involved here, and I'm not even sure how major of a role the build team will play -- how about "key stakeholders"] to maintain automated license and security audits of vendored node modules. Works with the security team and relevant developers to respond to vulnerabilities in vendored NodeJS modules [and NodeJS itself?].<br />
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]<br />
|peers=[mailto:dtownsend@mozilla.com Dave Townsend], ...<br />
|source_dirs=node_modules and others as appropriate<br />
|components=Various components<br />
|group=dev-platform<br />
}}</div>Dmosehttps://wiki.mozilla.org/index.php?title=User:Mossop:NodeModule&diff=1218857User:Mossop:NodeModule2019-10-09T19:14:38Z<p>Dmose: Editorial proposals</p>
<hr />
<div>{{Module<br />
|name=Node [Do we want this to be "NodeJS"?] usage, tools, and style<br />
|description=Advises on the use of node modules at build and runtime. Works with the build team [XXX I'm pretty sure there are going to be multiple teams involved here, and I'm not even sure how major of a role the build team will play -- how about "key stakeholders"] to maintain automated license and security audits of vendored node modules. Works with the security team and relevant developers to respond to vulnerabilities in vendored node modules [and NodeJS itself?].<br />
|owner=[mailto:dmosedale@mozilla.com Dan Mosedale]<br />
|peers=[mailto:dtownsend@mozilla.com Dave Townsend], [mailto:jlaster@mozilla.com Jason Laster], ...<br />
|source_dirs=node_modules and others as appropriate<br />
|components=Various components<br />
|group=dev-platform<br />
}}</div>Dmosehttps://wiki.mozilla.org/index.php?title=WeeklyUpdates/2018-06-25&diff=1196150WeeklyUpdates/2018-06-252018-06-25T17:04:32Z<p>Dmose: Remove extra template entry</p>
<hr />
<div><br />
{{WeeklyUpdateNav}}<br />
* Every Monday @ 11:00am Pacific Time (19:00 UTC) <br />
* https://air.mozilla.org/channels/project-meeting/ to watch and listen<br />
* join irc.mozilla.org #airmozilla for backchannel discussion<br />
* Presenters only: Vidyo room "Brownbags". Do '''not''' use this room if you're not planning to speak. <br />
{{conf|8600}}<br />
** If you plan on presenting, please join the Vidyo BrownBags 20 minutes prior to the start of the meeting and announce to the A/V Technicians that you will be speaking so that they can confirm your Audio and Video.<br />
<br />
__TOC__<br />
<br />
= All-hands Status Meeting Agenda =<br />
<br />
Items in this section will be shared during the live all-hand status meeting.<br />
<br />
== Friends of Mozilla [[Image:Tree.gif|Friends of Mozilla]] ==<br />
<br />
== Upcoming Events ==<br />
<br />
=== This Week ===<br />
<br />
=== Monday, {{#time:d F|{{SUBPAGENAME}}}} ===<br />
<br />
=== Tuesday, {{#time:d F|{{SUBPAGENAME}} +1 day}} ===<br />
<br />
=== Wednesday, {{#time:d F|{{SUBPAGENAME}} +2 days}} ===<br />
<br />
=== Thursday, {{#time:d F|{{SUBPAGENAME}} +3 days}} ===<br />
<br />
=== Friday, {{#time:d F|{{SUBPAGENAME}} +4 days}} ===<br />
<br />
=== Saturday, {{#time:d F|{{SUBPAGENAME}} +5 days}} ===<br />
<br />
=== Sunday, {{#time:d F|{{SUBPAGENAME}} +6 days}} ===<br />
<br />
=== Next Week ===<br />
<br />
== Speakers ==<br />
<br />
The limit is '''3 minutes per topic'''. It's like a lightning talk, but don't feel that you have to have slides in order to make a presentation. If you plan on showing a video, you need to contact the Air Mozilla team before the day of the meeting or you will be deferred to the next week. The meeting is streamed in a 4:3 format in order to allow for split screen. If your slides are 16:9 "widescreen" format, please indicate in the "Sharing" column below.<br />
<br />
{| class="fullwidth-table wikitable"<br />
|-<br />
! [https://mozillians.org/u/USERNAME Presenter]<br />
! Title<br />
! Topic<br />
! Location<br />
! Sharing<br />
! Media<br />
! More Details<br />
|-<br />
| Who Are You?<br />
| What Do You Do?<br />
| What are you going to talk about?<br />
| Where are you presenting from? (Moz Space, your house, space)<br />
| Will you be sharing your screen? (yes/no, 4:3 or 16:9)<br />
| Links to slides or images you want displayed on screen<br />
| Link to where audience can find out more information<br />
|-<br />
| Brett Gaylor<br />
| Commissioning Editor, MoFo<br />
| Latest round of Creative Media Awards<br />
| Remotely <br />
| (Potch, please screen share [https://gizmodo.com/mozilla-puts-up-225-000-to-explore-how-ai-threatens-a-1826568797 this story]<br />
| --<br />
| [https://blog.mozilla.org/blog/2018/06/04/mozilla-announces-225000-for-art-and-advocacy-exploring-artificial-intelligence/ Mozilla Announces $225,000 for Art and Advocacy Exploring Artificial Intelligence] <br />
|-<br />
| Andy Kochendorfer<br />
| Product Owner, AirMozilla<br />
| Decommissioning legacy AirMozilla - New AirMozilla<br />
| Remotely <br />
| Screen share<br />
| Live via Vidyo<br />
| [https://airmo.mozilla.org/ New AirMozilla site via SSO] <br />
|-<br />
| Greg Fodor<br />
| Engineering Manager, Social MR<br />
| Emerging Technologies weekly update<br />
| MV<br />
| no<br />
| n/a<br />
| [https://wiki.mozilla.org/WeeklyUpdates/EmergingTechnology#June_25th.2C_2018 ET Headlines wiki page]<br />
|-<br />
| Asa Dotzler<br />
| Firefox Roadmap<br />
| Weekly Firefox Update<br />
| MTV<br />
| no<br />
| n/a<br />
| [https://wiki.mozilla.org/Firefox/Roadmap/Updates#2018-06-25 2018-06-25]<br />
|-<br />
| Michael Van Kleeck<br />
| Enterprise Solutions Architect<br />
| The Weekly MinIT! <br />
| MozPDX<br />
| No<br />
| https://wiki.mozilla.org/IT/WeeklyMinIT<br />
| https://wiki.mozilla.org/IT/WeeklyMinIT<br />
|-<br />
|}<br />
<br />
= Welcome! =<br />
<br />
Let's say hello to some new Mozillians! If you are not able to join the meeting live, you can add a link to a short video introducing yourself.<br />
<br />
{| class="fullwidth-table wikitable"<br />
|-<br />
! ''Who is being introduced?''<br />
! ''Who are you? (the introducer)''<br />
! ''Where are you doing the introduction?''<br />
! ''Where are they from?''<br />
! ''How will they be part of Mozilla?''<br />
|-<br />
<!-- Insert new rows here --><br />
| Vicky Chin<br />
| Andrew Overholt<br />
| Toronto office<br />
| Toronto office<br />
| Senior Engineering Manager, Firefox Performance<br />
|-<br />
| Adam Hillier<br />
| Dan Mosedale<br />
| San Francisco office<br />
| San Francisco office<br />
| Engineering Intern, Activity Stream<br />
|-<br />
|}<br />
<br />
<br />
[[Category:Weekly Updates]]<br />
[[Category:Meeting Notes]]</div>Dmosehttps://wiki.mozilla.org/index.php?title=WeeklyUpdates/2018-06-25&diff=1196149WeeklyUpdates/2018-06-252018-06-25T17:03:52Z<p>Dmose: Added Adam Hillier introduction</p>
<hr />
<div><br />
{{WeeklyUpdateNav}}<br />
* Every Monday @ 11:00am Pacific Time (19:00 UTC) <br />
* https://air.mozilla.org/channels/project-meeting/ to watch and listen<br />
* join irc.mozilla.org #airmozilla for backchannel discussion<br />
* Presenters only: Vidyo room "Brownbags". Do '''not''' use this room if you're not planning to speak. <br />
{{conf|8600}}<br />
** If you plan on presenting, please join the Vidyo BrownBags 20 minutes prior to the start of the meeting and announce to the A/V Technicians that you will be speaking so that they can confirm your Audio and Video.<br />
<br />
__TOC__<br />
<br />
= All-hands Status Meeting Agenda =<br />
<br />
Items in this section will be shared during the live all-hand status meeting.<br />
<br />
== Friends of Mozilla [[Image:Tree.gif|Friends of Mozilla]] ==<br />
<br />
== Upcoming Events ==<br />
<br />
=== This Week ===<br />
<br />
=== Monday, {{#time:d F|{{SUBPAGENAME}}}} ===<br />
<br />
=== Tuesday, {{#time:d F|{{SUBPAGENAME}} +1 day}} ===<br />
<br />
=== Wednesday, {{#time:d F|{{SUBPAGENAME}} +2 days}} ===<br />
<br />
=== Thursday, {{#time:d F|{{SUBPAGENAME}} +3 days}} ===<br />
<br />
=== Friday, {{#time:d F|{{SUBPAGENAME}} +4 days}} ===<br />
<br />
=== Saturday, {{#time:d F|{{SUBPAGENAME}} +5 days}} ===<br />
<br />
=== Sunday, {{#time:d F|{{SUBPAGENAME}} +6 days}} ===<br />
<br />
=== Next Week ===<br />
<br />
== Speakers ==<br />
<br />
The limit is '''3 minutes per topic'''. It's like a lightning talk, but don't feel that you have to have slides in order to make a presentation. If you plan on showing a video, you need to contact the Air Mozilla team before the day of the meeting or you will be deferred to the next week. The meeting is streamed in a 4:3 format in order to allow for split screen. If your slides are 16:9 "widescreen" format, please indicate in the "Sharing" column below.<br />
<br />
{| class="fullwidth-table wikitable"<br />
|-<br />
! [https://mozillians.org/u/USERNAME Presenter]<br />
! Title<br />
! Topic<br />
! Location<br />
! Sharing<br />
! Media<br />
! More Details<br />
|-<br />
| Who Are You?<br />
| What Do You Do?<br />
| What are you going to talk about?<br />
| Where are you presenting from? (Moz Space, your house, space)<br />
| Will you be sharing your screen? (yes/no, 4:3 or 16:9)<br />
| Links to slides or images you want displayed on screen<br />
| Link to where audience can find out more information<br />
|-<br />
| Brett Gaylor<br />
| Commissioning Editor, MoFo<br />
| Latest round of Creative Media Awards<br />
| Remotely <br />
| (Potch, please screen share [https://gizmodo.com/mozilla-puts-up-225-000-to-explore-how-ai-threatens-a-1826568797 this story]<br />
| --<br />
| [https://blog.mozilla.org/blog/2018/06/04/mozilla-announces-225000-for-art-and-advocacy-exploring-artificial-intelligence/ Mozilla Announces $225,000 for Art and Advocacy Exploring Artificial Intelligence] <br />
|-<br />
| Andy Kochendorfer<br />
| Product Owner, AirMozilla<br />
| Decommissioning legacy AirMozilla - New AirMozilla<br />
| Remotely <br />
| Screen share<br />
| Live via Vidyo<br />
| [https://airmo.mozilla.org/ New AirMozilla site via SSO] <br />
|-<br />
| Greg Fodor<br />
| Engineering Manager, Social MR<br />
| Emerging Technologies weekly update<br />
| MV<br />
| no<br />
| n/a<br />
| [https://wiki.mozilla.org/WeeklyUpdates/EmergingTechnology#June_25th.2C_2018 ET Headlines wiki page]<br />
|-<br />
| Asa Dotzler<br />
| Firefox Roadmap<br />
| Weekly Firefox Update<br />
| MTV<br />
| no<br />
| n/a<br />
| [https://wiki.mozilla.org/Firefox/Roadmap/Updates#2018-06-25 2018-06-25]<br />
|-<br />
| Michael Van Kleeck<br />
| Enterprise Solutions Architect<br />
| The Weekly MinIT! <br />
| MozPDX<br />
| No<br />
| https://wiki.mozilla.org/IT/WeeklyMinIT<br />
| https://wiki.mozilla.org/IT/WeeklyMinIT<br />
|-<br />
|}<br />
<br />
= Welcome! =<br />
<br />
Let's say hello to some new Mozillians! If you are not able to join the meeting live, you can add a link to a short video introducing yourself.<br />
<br />
{| class="fullwidth-table wikitable"<br />
|-<br />
! ''Who is being introduced?''<br />
! ''Who are you? (the introducer)''<br />
! ''Where are you doing the introduction?''<br />
! ''Where are they from?''<br />
! ''How will they be part of Mozilla?''<br />
|-<br />
<!-- Insert new rows here --><br />
|-<br />
| Their Name<br />
| Your Name<br />
| Intro location<br />
| Their Location<br />
| Their Role<br />
|-<br />
| Vicky Chin<br />
| Andrew Overholt<br />
| Toronto office<br />
| Toronto office<br />
| Senior Engineering Manager, Firefox Performance<br />
|-<br />
| Adam Hillier<br />
| Dan Mosedale<br />
| San Francisco office<br />
| San Francisco office<br />
| Engineering Intern, Activity Stream<br />
|-<br />
|}<br />
<br />
<br />
[[Category:Weekly Updates]]<br />
[[Category:Meeting Notes]]</div>Dmosehttps://wiki.mozilla.org/index.php?title=ReleaseEngineering/DisposableProjectRepositories&diff=1162009ReleaseEngineering/DisposableProjectRepositories2017-02-06T20:48:03Z<p>Dmose: Updated Pine in booking schedule</p>
<hr />
<div>== What is a disposable project branch? ==<br />
These are project branches that can be cloned fresh from any mozilla-central based repo with the full gamut of tests enabled. No l10n or<br />
nightlies for now. Similar to [[ReleaseEngineering/TryServer|TryServer]] but for longer, and just for '''you'''. Unlike Try, the commit level on these branches is '''level_2 (and above) contributors only''' so please bear that in mind.<br />
<br />
===Do you need a disposable branch?===<br />
Ask yourself the following:<br />
<br />
'''Does your project have an end date?'''<br />
<br />
If your answer is '''No''' then you should follow the process at [https://wiki.mozilla.org/ReleaseEngineering:ProjectBranchPlanning Project Branch Planning]<br />
<br />
<br />
If your project is a temporary feature sprint that needs its own rapid test coverage but will eventually be merged into mozilla-central and no longer be on its own by all means, please go ahead and <br />
<br />
===Book one of our fabulous "disposable" project branches===<br />
'''''NOTE:''''' The number of disposable branches is limited by CI capacity. If there are no available branches, contact the owners of existing branches to see if you can "sub let".<br />
<br />
* Sign up below in the [[#BOOKING_SCHEDULE|BOOKING SCHEDULE]]<br />
* Make a [https://bugzilla.mozilla.org/enter_bug.cgi?product=Developer%20Services&component=Mercurial:%20hg.mozilla.org&short_desc=Requesting%20twig%20repo%20{booked_repo}%20be%20reset&comment=Please%20run%20the%20{script_name}%20and%20reset%20{booked_repo}%20to%20{url}&cc=buildduty@releng.bugs request] (example: {{bug|951811}}) to IT to reset the repo for you as a clone from your own project repo (or default mozilla-central:tip). '''Copy the script below into bug request, replacing the REPO_PATH and TWIG with your repo and booked branch'''.<br />
<pre><br />
export REPO_PATH=[path to repo to clone from] # eg: users/lsblakk_mozilla.com/staging or comm-central<br />
export TWIG=[alder|birch|cedar|holly|larch|maple] # whichever twig you booked<br />
<br />
cd /repo/hg/scripts/<br />
./reset_pp_repo.sh -s /repo/hg/mozilla/$REPO_PATH -r tip -d $TWIG<br />
</pre><br />
* '''NOTE''': Coordinate with IT when this repo gets reset to push immediately without hitting the webheads. Otherwise, the permissions won't be set correctly.<br />
* '''NOTE''': Your repository will have no hooks enabled after a reset. You'll need to specify in the request if you need any configured.<br />
* Sit back and watch your builds and test results roll in (eg [http://tbpl.mozilla.org/?tree=Alder Alder], [http://tbpl.mozilla.org/?tree=Birch Birch], [http://tbpl.mozilla.org/?tree=Cedar Cedar],[http://tbpl.mozilla.org/?tree=Holly Holly], [http://tbpl.mozilla.org/?tree=Larch Larch], [http://tbpl.mozilla.org/?tree=Maple Maple]). <br />
* '''Special note:''' the first push to your newly cloned repo may not trigger builds if the repo had been pushed to previously, which is {{bug|774862}}. If it does not, please re-open the bug and move it to Release Engineering :: General Automation with a comment 'Please reconfigure the build scheduler'.<br />
<br />
<div id="unbook"></div><br />
<br />
===When you're done with one of our fabulous "disposable" project branches===<br />
<br />
Simply clear your data (bug, contact, dates) from the [[#BOOKING_SCHEDULE|BOOKING SCHEDULE]] below. If someone is listed in the "Next in Line" column, please let them know you are done.<br />
<br />
That's all there is to it!<br />
<br />
== Using a custom mozconfig ==<br />
<br />
The mozconfigs used for builds live in the same source tree as the main code, eg<br />
* Firefox: <tt>browser/config/mozconfigs/<platform></tt><br />
* Mobile Native: <tt>mobile/android/config/mozconfigs/android</tt><br />
* Mobile XUL: <tt>mobile/xul/config/mozconfigs/android-xul</tt><br />
<br />
The 'nightly' file is used for optimised builds, 'debug' for debug. If you are unsure which file you need consult a build log to see which is used. You can adjust these as needed on your branch, and they will be carried over to mozilla-central when you merge back. Please take care with any mozconfig changes you merge back (eg exclude local conveniences).<br />
<br />
==Enabling/Disabling of platforms, tests, nightly updates ==<br />
If the specific builds/tests you want are not enabled, or if there are builds/tests which you do not need on your branch, ask RelEng to enable/disable them by filing a bug [https://bugzilla.mozilla.org/enter_bug.cgi?product=Release%20Engineering here].<br />
<br />
Nightly builds and updates are disabled by default but can be enabled on request.<br />
<br />
== BOOKING SCHEDULE ==<br />
<br />
{| class="data wikitable"<br />
|-<br />
! Project Branch<br />
! Regist. bug<br />
! email address of borrower<br />
! User/Dev Team contact <br />
! Booking Dates <br />
! Next in Line<br />
|-<br />
|<br />
|<br />
|<br />
|<br />
|<br />
| <br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=ash Ash]<br />
| {{bug|1252292}}<br />
| jgriffin@mozilla.com<br />
| e10s tests<br />
| 2016-03-01 - TBD<br />
| <br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=cypress Cypress]<br />
| {{bug|1222301}}<br />
| Pidgeot18@gmail.com<br />
| <br />
| <br />
|<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=elm Elm]<br />
| {{bug|1324900}}<br />
| markh@mozilla.com<br />
| :markh / :kitcambridge / :tcsc on #sync<br />
| 2016-12-21 - 2017-03-31<br />
|<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=cedar Cedar]<br />
| {{bug|1306260}}<br />
| mdeboer@mozilla.com<br />
| :mdeboer / :jaws, new Firefox Theme add-ons<br />
| 2016-09-29 - 2017-03-31<br />
|<br />
|-<br />
| <strike>[https://treeherder.mozilla.org/#/jobs?repo=fig Fig]</strike><br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
|-<br />
| <strike>[https://treeherder.mozilla.org/#/jobs?repo=gum Gum]</strike><br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
|-<br />
| <strike>[https://treeherder.mozilla.org/#/jobs?repo=holly Holly]</strike><br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=larch Larch]<br />
| {{bug|1288182}}<br />
| l10n@mozilla.com<br />
| :Pike, for l20n work<br />
| 2016-07-20 - 2016-11-15<br />
| <br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=oak Oak]<br />
| {{bug|790467}} and other risky updater work<br />
| mhowell@mozilla.com, rstrong@mozilla.com<br />
| mhowell, rstrong<br />
| 2012-09-11 - 2015-12-31 '''''<span color="yellow">PENDING</span>'''''<br />
| -<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=pine Pine]<br />
| {{bug|137122}}<br />
| dmose@mozilla.org<br />
| :dmose,:k88hudson,:Mardak,:ursula green up activity-stream in prep for landing<br />
| 2017-02-05 - 2017-06-10<br />
| -<br />
|}<br />
<br />
Be sure to keep a copy of anything you need from the repo prior to [[#unbook|unbooking]] it.<br />
<br />
== Indefinite booking ==<br />
See also [[ReleaseEngineering/SpecialBranches]] for more info on these branches.<br />
{| class="data"<br />
|-<br />
! Project Branch<br />
! Regist. bug<br />
! email address of borrower<br />
! User/Dev Team contact <br />
! Booking Dates<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=date Date]<br />
| {{bug|1258866}}<br />
| rail@mozilla.com, jlund@mozilla.com<br />
| Release promotion<br />
| 2015-01-11 - indefinite <br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=jamun Jamun]<br />
| {{bug|1259143}}<br />
| rail@mozilla.com, jlund@mozilla.com<br />
| Release promotion<br />
| 2016-03-23 - indefinite<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=birch Birch]<br />
| {{bug|1010674}}<br />
| catlee@mozilla.com<br />
| disabled<br />
| 2014-05-15 - indefinite '''''<span color="yellow">PENDING</span>'''''<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=maple Maple]<br />
| -<br />
| catlee@mozilla.com<br />
| disabled<br />
| -<br />
| -<br />
|}</div>Dmosehttps://wiki.mozilla.org/index.php?title=ReleaseEngineering/DisposableProjectRepositories&diff=1162008ReleaseEngineering/DisposableProjectRepositories2017-02-06T20:43:46Z<p>Dmose: /* BOOKING SCHEDULE */</p>
<hr />
<div>== What is a disposable project branch? ==<br />
These are project branches that can be cloned fresh from any mozilla-central based repo with the full gamut of tests enabled. No l10n or<br />
nightlies for now. Similar to [[ReleaseEngineering/TryServer|TryServer]] but for longer, and just for '''you'''. Unlike Try, the commit level on these branches is '''level_2 (and above) contributors only''' so please bear that in mind.<br />
<br />
===Do you need a disposable branch?===<br />
Ask yourself the following:<br />
<br />
'''Does your project have an end date?'''<br />
<br />
If your answer is '''No''' then you should follow the process at [https://wiki.mozilla.org/ReleaseEngineering:ProjectBranchPlanning Project Branch Planning]<br />
<br />
<br />
If your project is a temporary feature sprint that needs its own rapid test coverage but will eventually be merged into mozilla-central and no longer be on its own by all means, please go ahead and <br />
<br />
===Book one of our fabulous "disposable" project branches===<br />
'''''NOTE:''''' The number of disposable branches is limited by CI capacity. If there are no available branches, contact the owners of existing branches to see if you can "sub let".<br />
<br />
* Sign up below in the [[#BOOKING_SCHEDULE|BOOKING SCHEDULE]]<br />
* Make a [https://bugzilla.mozilla.org/enter_bug.cgi?product=Developer%20Services&component=Mercurial:%20hg.mozilla.org&short_desc=Requesting%20twig%20repo%20{booked_repo}%20be%20reset&comment=Please%20run%20the%20{script_name}%20and%20reset%20{booked_repo}%20to%20{url}&cc=buildduty@releng.bugs request] (example: {{bug|951811}}) to IT to reset the repo for you as a clone from your own project repo (or default mozilla-central:tip). '''Copy the script below into bug request, replacing the REPO_PATH and TWIG with your repo and booked branch'''.<br />
<pre><br />
export REPO_PATH=[path to repo to clone from] # eg: users/lsblakk_mozilla.com/staging or comm-central<br />
export TWIG=[alder|birch|cedar|holly|larch|maple] # whichever twig you booked<br />
<br />
cd /repo/hg/scripts/<br />
./reset_pp_repo.sh -s /repo/hg/mozilla/$REPO_PATH -r tip -d $TWIG<br />
</pre><br />
* '''NOTE''': Coordinate with IT when this repo gets reset to push immediately without hitting the webheads. Otherwise, the permissions won't be set correctly.<br />
* '''NOTE''': Your repository will have no hooks enabled after a reset. You'll need to specify in the request if you need any configured.<br />
* Sit back and watch your builds and test results roll in (eg [http://tbpl.mozilla.org/?tree=Alder Alder], [http://tbpl.mozilla.org/?tree=Birch Birch], [http://tbpl.mozilla.org/?tree=Cedar Cedar],[http://tbpl.mozilla.org/?tree=Holly Holly], [http://tbpl.mozilla.org/?tree=Larch Larch], [http://tbpl.mozilla.org/?tree=Maple Maple]). <br />
* '''Special note:''' the first push to your newly cloned repo may not trigger builds if the repo had been pushed to previously, which is {{bug|774862}}. If it does not, please re-open the bug and move it to Release Engineering :: General Automation with a comment 'Please reconfigure the build scheduler'.<br />
<br />
<div id="unbook"></div><br />
<br />
===When you're done with one of our fabulous "disposable" project branches===<br />
<br />
Simply clear your data (bug, contact, dates) from the [[#BOOKING_SCHEDULE|BOOKING SCHEDULE]] below. If someone is listed in the "Next in Line" column, please let them know you are done.<br />
<br />
That's all there is to it!<br />
<br />
== Using a custom mozconfig ==<br />
<br />
The mozconfigs used for builds live in the same source tree as the main code, eg<br />
* Firefox: <tt>browser/config/mozconfigs/<platform></tt><br />
* Mobile Native: <tt>mobile/android/config/mozconfigs/android</tt><br />
* Mobile XUL: <tt>mobile/xul/config/mozconfigs/android-xul</tt><br />
<br />
The 'nightly' file is used for optimised builds, 'debug' for debug. If you are unsure which file you need consult a build log to see which is used. You can adjust these as needed on your branch, and they will be carried over to mozilla-central when you merge back. Please take care with any mozconfig changes you merge back (eg exclude local conveniences).<br />
<br />
==Enabling/Disabling of platforms, tests, nightly updates ==<br />
If the specific builds/tests you want are not enabled, or if there are builds/tests which you do not need on your branch, ask RelEng to enable/disable them by filing a bug [https://bugzilla.mozilla.org/enter_bug.cgi?product=Release%20Engineering here].<br />
<br />
Nightly builds and updates are disabled by default but can be enabled on request.<br />
<br />
== BOOKING SCHEDULE ==<br />
<br />
{| class="data wikitable"<br />
|-<br />
! Project Branch<br />
! Regist. bug<br />
! email address of borrower<br />
! User/Dev Team contact <br />
! Booking Dates <br />
! Next in Line<br />
|-<br />
|<br />
|<br />
|<br />
|<br />
|<br />
| <br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=ash Ash]<br />
| {{bug|1252292}}<br />
| jgriffin@mozilla.com<br />
| e10s tests<br />
| 2016-03-01 - TBD<br />
| <br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=cypress Cypress]<br />
| {{bug|1222301}}<br />
| Pidgeot18@gmail.com<br />
| <br />
| <br />
|<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=elm Elm]<br />
| {{bug|1324900}}<br />
| markh@mozilla.com<br />
| :markh / :kitcambridge / :tcsc on #sync<br />
| 2016-12-21 - 2017-03-31<br />
|<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=cedar Cedar]<br />
| {{bug|1306260}}<br />
| mdeboer@mozilla.com<br />
| :mdeboer / :jaws, new Firefox Theme add-ons<br />
| 2016-09-29 - 2017-03-31<br />
|<br />
|-<br />
| <strike>[https://treeherder.mozilla.org/#/jobs?repo=fig Fig]</strike><br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
|-<br />
| <strike>[https://treeherder.mozilla.org/#/jobs?repo=gum Gum]</strike><br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
|-<br />
| <strike>[https://treeherder.mozilla.org/#/jobs?repo=holly Holly]</strike><br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
| retired<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=larch Larch]<br />
| {{bug|1288182}}<br />
| l10n@mozilla.com<br />
| :Pike, for l20n work<br />
| 2016-07-20 - 2016-11-15<br />
| <br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=oak Oak]<br />
| {{bug|790467}} and other risky updater work<br />
| mhowell@mozilla.com, rstrong@mozilla.com<br />
| mhowell, rstrong<br />
| 2012-09-11 - 2015-12-31 '''''<span color="yellow">PENDING</span>'''''<br />
| -<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=pine Pine]<br />
| {{bug|929203}}<br />
| dmose@mozilla.org<br />
| :dmose,:k88hudson,:Mardak,:ursula green up activity-stream in prep for landing<br />
| 2017-02-05 - 2017-06-10 '''''<span color="yellow">PENDING</span>'''''<br />
| -<br />
|}<br />
<br />
Be sure to keep a copy of anything you need from the repo prior to [[#unbook|unbooking]] it.<br />
<br />
== Indefinite booking ==<br />
See also [[ReleaseEngineering/SpecialBranches]] for more info on these branches.<br />
{| class="data"<br />
|-<br />
! Project Branch<br />
! Regist. bug<br />
! email address of borrower<br />
! User/Dev Team contact <br />
! Booking Dates<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=date Date]<br />
| {{bug|1258866}}<br />
| rail@mozilla.com, jlund@mozilla.com<br />
| Release promotion<br />
| 2015-01-11 - indefinite <br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=jamun Jamun]<br />
| {{bug|1259143}}<br />
| rail@mozilla.com, jlund@mozilla.com<br />
| Release promotion<br />
| 2016-03-23 - indefinite<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=birch Birch]<br />
| {{bug|1010674}}<br />
| catlee@mozilla.com<br />
| disabled<br />
| 2014-05-15 - indefinite '''''<span color="yellow">PENDING</span>'''''<br />
|-<br />
| [https://treeherder.mozilla.org/#/jobs?repo=maple Maple]<br />
| -<br />
| catlee@mozilla.com<br />
| disabled<br />
| -<br />
| -<br />
|}</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Development&diff=1088563Loop/Development2015-08-05T19:18:23Z<p>Dmose: /* Additional Requirements */</p>
<hr />
<div>== Bug Tracking and Repositories ==<br />
<br />
=== Need Help, want to discuss with Loop developers? ===<br />
<br />
If you need help or want to discuss something with the Loop developers, then visit us on [irc://irc.mozilla.org/loop #loop on irc.mozilla.org] - if you need more information about IRC, see our [[IRC]] page.<br />
<br />
=== Tracking ===<br />
Bugs are stored in [https://github.com/mozilla/gecko-dev bugzilla]:<br />
<br />
* Desktop & Standalone (aka 'link generator' and 'link clicker', respectively): 'Loop' product, 'Client' component<br />
* Server: 'Loop' product, 'Server' component<br />
<br />
==== Looking for bugs? ====<br />
<br />
Try one of the [https://bugzilla.mozilla.org/buglist.cgi?f1=status_whiteboard&o1=substring&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=good%20first%20bug&component=Client&component=General&product=Hello%20(Loop)&list_id=12141660 good first bugs] (simple bugs that are easy to fix) or a [https://bugzilla.mozilla.org/buglist.cgi?f1=status_whiteboard&o1=substring&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=good%20next%20bug&component=Client&component=General&product=Hello%20(Loop)&list_id=12141660 good next bug].<br />
<br />
There's also [https://bugzilla.mozilla.org/buglist.cgi?f1=bug_mentor&list_id=12141679&o1=isnotempty&resolution=---&emailtype1=exact&query_format=advanced&emailassigned_to1=1&email1=nobody%40mozilla.org&product=Hello%20(Loop) mentored bugs] where are developers have signed up to help you fix the bugs. Most of these will be in the good first and next bug groups above.<br />
<br />
Or if not, take a look at our [[Firefox/Iterative_Hello_Development#Product_Backlog|ranked priority list]] and choose one from there.<br />
<br />
=== Repositories ===<br />
Loop is contained across several repositories:<br />
<br />
* Master repository for Desktop and Standalone UI: [http://hg.mozilla.org/mozilla-central/ mozilla-central] (there's a [https://github.com/mozilla/gecko-dev git mirror] of it as well)<br />
* [https://github.com/mozilla-services/loop-server Loop server]<br />
<br />
=== Directories ===<br />
<br />
All files, apart from desktop locales are in [http://hg.mozilla.org/mozilla-central/ mozilla-central], under <code>browser/components/loop/</code>. Within that directory there is:<br />
<br />
* *.jsm - Various modules used within Firefox desktop<br />
* build-jsx used to build the required jsx files<br />
* content/ - These files are all used on the desktop for the Loop panel and conversation window. They are loaded into content space rather than chrome<br />
* content/shared - Used for Firefox desktop, but also used for the standalone UI<br />
* standalone/ - Files used by the standalone application, including commands to make and run a standalone server (see below)<br />
* standalone/content - The content files for the standalone application<br />
* ui/ - A UI showcase, used to aid development and layout of styles for the various parts of the UI<br />
<br />
A small bit of integration code with Firefox can be found in [https://dxr.mozilla.org/mozilla-central/source/browser/base/content/browser-loop.js browser-loop.js].<br />
<br />
=== Loop Software Architecture ===<br />
<br />
More details on the structure coming soon. We have parts of Loop that run in a web-content space (those typically below a <code>content</code> directory), and other parts that work in a gecko privileged space (these are typically in the root directory of <code>browser/components/loop</code>).<br />
<br />
A lot of the content files use a Flux based architecture, [https://blog.mozilla.org/standard8/2015/02/09/firefox-hello-desktop-behind-the-scenes-flux-and-react/ read more about that here].<br />
<br />
== Getting started with Firefox Desktop and Standalone development ==<br />
<br />
=== Additional Requirements ===<br />
<br />
For Loop development, there's currently a couple of extra requirements on top of the [https://developer.mozilla.org/en-US/docs/Simple_Firefox_build#Build_prerequisites Firefox desktop build requirements]. <br />
<br />
These are [https://nodejs.org/ NodeJS] (note, though, that you MUST currently use an old version, 0.10), react-tools and eslint.<br />
<br />
Note that when building Firefox itself, be sure to set <pre>ac_add_options --enable-optimize</pre> in your mozconfig to avoid problems with automated tests timing out.<br />
<br />
Install NodeJS 0.10 first, then follow the instructions below<br />
<br />
==== Mac installation of node 0.10 ====<br />
<br />
brew install homebrew/versions/node010<br />
<br />
==== Windows Specific ====<br />
<br />
There's a little bit more set-up required specific to Windows.<br />
<br />
* Start up the mozilla-build shell via one of the start-shell-msvc*.bat files<br />
* Work out your APPDATA path:<br />
<br />
echo $APPDATA<br />
<br />
* In your APPDATA, you'll need to replace various parts, so:<br />
<br />
c:\Users\moztest\AppData\Roaming<br />
<br />
becomes:<br />
<br />
/c/Users/moztest/AppData/Roaming<br />
<br />
* Now setup your profile file, replace the <code><path to APPDATA></code> with the path you just worked out.<br />
<br />
echo $PATH:/c/Program\ Files/nodejs:<path to APPDATA>/npm >> ~/.profile<br />
<br />
* Now exit your shell/console and re-enter it.<br />
* Complete the steps in the "All Platforms" section<br />
<br />
If you need to change the path later, you can edit the ~/.profile file.<br />
<br />
==== All Platforms ====<br />
<br />
Once you have Node installed, use npm (which comes with it) to globally install the extra required items:<br />
<br />
npm install -g react-tools@0.12.2<br />
npm install -g eslint<br />
npm install -g eslint-plugin-react<br />
<br />
=== Standalone server - Link-clicker UI and unit test development ===<br />
<br />
We have a server that helps running the unit tests manually, there's also the ui-showcase which helps with previewing layouts before starting Firefox.<br />
<br />
cd browser/components/loop/standalone<br />
make install<br />
make runserver<br />
<br />
You only need to do <code>make runserver</code> on subsequent runs. Although <code>make install</code> may be required occasionally if dependencies get updated.<br />
<br />
==== Visiting test pages ====<br />
<br />
To view the unit tests visit:<br />
<br />
http://localhost:3000/test/<br />
<br />
To view the UI-showcase, visit:<br />
<br />
http://localhost:3000/ui/<br />
<br />
==== Testing out changes to the standalone UI ====<br />
<br />
The standalone part of Loop (also known as the link-clicker UI) can be viewed in any web browser, and is hosted on a server. You can hook the development server up to talk to one of the servers to be able to test changes to the standalone UI.<br />
<br />
To do this, setup the standalone server as described above, then rather than a simple <code>make runserver</code>, do:<br />
<br />
LOOP_SERVER=https://path/to/server make runserver<br />
<br />
Replace the server path with one of:<br />
<br />
* Development server: https://loop-dev.stage.mozaws.net<br />
* Production server: https://loop.services.mozilla.com<br />
<br />
(Generally its better to use the development server than the production one to avoid affecting the stats of production usage).<br />
<br />
For the desktop side (also known as the link-generator):<br />
<br />
* You may wish to create a new profile for testing purposes (since changing the pref below will loose your previously created conversations), e.g:<br />
<br />
/path/to/firefox -createProfile myTestProfile<br />
./mach run -P myTestProfile -purgecaches<br />
<br />
* Visit about:config, change the <code>loop.server</code> preference to be <code>https://loop-dev.stage.mozaws.net/v0</code><br />
* Restart Firefox after changing the pref<br />
* From the Hello panel, select "Start a conversation"<br />
* Copy the url, and paste it into a browser window, but change the url<br />
** <code>https://hello.firefox.com/1234567890a#dfkjekrltykyleoefirek</code> would become <code>http://localhost:3000/content/1234567890ab#dfkjekrltykyleoefirek</code><br />
<br />
You should now be able to join the room with that instance.<br />
<br />
=== Developing ===<br />
If you're altering any of the javascript files, you need to make sure you alter the jsx versions if they exist.<br />
<br />
You can start up the jsx compiler so that it watches the files and continuously updates them whilst the jsx is left running:<br />
<br />
cd browser/components/loop<br />
./build-jsx -w<br />
<br />
To stop watching files and quit jsx, just use <code>ctrl-c</code><br />
<br />
{{note|Note: On windows, build-jsx doesn't currently do the version check for the react version, so please keep an eye on the suggested version in case it is updated.}}<br />
<br />
=== Linting ===<br />
We use [http://eslint.org/ eslint] to parse the Loop files and check them for correctness before landing.<br />
<br />
See the [http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/README.txt README.txt] for how to run it.<br />
<br />
=== UI-showcase ===<br />
<br />
If you've got the standalone server running, you can view this by visiting http://localhost:3000/ui/ . This lets you layout the content pages (the parts displayed in the panel and conversation view) in a web context before loading and testing them in Firefox itself.<br />
<br />
This can save you a considerable amount of time, because you don't have to (re-)build each time you made a change to see what effect it had.<br />
<br />
=== Running Tests ===<br />
<br />
There's a file located at <code>[http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/run-all-loop-tests.sh browser/components/loop/run-all-loop-tests.sh]</code> which allows all loop related tests to be run at the same time.<br />
<br />
For information on running the tests individually, see the <code>[http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/README.txt README.txt]</code> file.<br />
<br />
== Creating Patches ==<br />
<br />
Creating patches happens in exactly the same manner as for the rest of Firefox. See our documentation on the Mozilla Developer Network for [https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/How_to_Submit_a_Patch how to create and submit a patch.]<br />
<br />
[[Category:Firefox Hello]]<br />
[[Category:Loop]]</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Development&diff=1088562Loop/Development2015-08-05T19:17:44Z<p>Dmose: Added --enable-optimize advice.</p>
<hr />
<div>== Bug Tracking and Repositories ==<br />
<br />
=== Need Help, want to discuss with Loop developers? ===<br />
<br />
If you need help or want to discuss something with the Loop developers, then visit us on [irc://irc.mozilla.org/loop #loop on irc.mozilla.org] - if you need more information about IRC, see our [[IRC]] page.<br />
<br />
=== Tracking ===<br />
Bugs are stored in [https://github.com/mozilla/gecko-dev bugzilla]:<br />
<br />
* Desktop & Standalone (aka 'link generator' and 'link clicker', respectively): 'Loop' product, 'Client' component<br />
* Server: 'Loop' product, 'Server' component<br />
<br />
==== Looking for bugs? ====<br />
<br />
Try one of the [https://bugzilla.mozilla.org/buglist.cgi?f1=status_whiteboard&o1=substring&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=good%20first%20bug&component=Client&component=General&product=Hello%20(Loop)&list_id=12141660 good first bugs] (simple bugs that are easy to fix) or a [https://bugzilla.mozilla.org/buglist.cgi?f1=status_whiteboard&o1=substring&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=good%20next%20bug&component=Client&component=General&product=Hello%20(Loop)&list_id=12141660 good next bug].<br />
<br />
There's also [https://bugzilla.mozilla.org/buglist.cgi?f1=bug_mentor&list_id=12141679&o1=isnotempty&resolution=---&emailtype1=exact&query_format=advanced&emailassigned_to1=1&email1=nobody%40mozilla.org&product=Hello%20(Loop) mentored bugs] where are developers have signed up to help you fix the bugs. Most of these will be in the good first and next bug groups above.<br />
<br />
Or if not, take a look at our [[Firefox/Iterative_Hello_Development#Product_Backlog|ranked priority list]] and choose one from there.<br />
<br />
=== Repositories ===<br />
Loop is contained across several repositories:<br />
<br />
* Master repository for Desktop and Standalone UI: [http://hg.mozilla.org/mozilla-central/ mozilla-central] (there's a [https://github.com/mozilla/gecko-dev git mirror] of it as well)<br />
* [https://github.com/mozilla-services/loop-server Loop server]<br />
<br />
=== Directories ===<br />
<br />
All files, apart from desktop locales are in [http://hg.mozilla.org/mozilla-central/ mozilla-central], under <code>browser/components/loop/</code>. Within that directory there is:<br />
<br />
* *.jsm - Various modules used within Firefox desktop<br />
* build-jsx used to build the required jsx files<br />
* content/ - These files are all used on the desktop for the Loop panel and conversation window. They are loaded into content space rather than chrome<br />
* content/shared - Used for Firefox desktop, but also used for the standalone UI<br />
* standalone/ - Files used by the standalone application, including commands to make and run a standalone server (see below)<br />
* standalone/content - The content files for the standalone application<br />
* ui/ - A UI showcase, used to aid development and layout of styles for the various parts of the UI<br />
<br />
A small bit of integration code with Firefox can be found in [https://dxr.mozilla.org/mozilla-central/source/browser/base/content/browser-loop.js browser-loop.js].<br />
<br />
=== Loop Software Architecture ===<br />
<br />
More details on the structure coming soon. We have parts of Loop that run in a web-content space (those typically below a <code>content</code> directory), and other parts that work in a gecko privileged space (these are typically in the root directory of <code>browser/components/loop</code>).<br />
<br />
A lot of the content files use a Flux based architecture, [https://blog.mozilla.org/standard8/2015/02/09/firefox-hello-desktop-behind-the-scenes-flux-and-react/ read more about that here].<br />
<br />
== Getting started with Firefox Desktop and Standalone development ==<br />
<br />
=== Additional Requirements ===<br />
<br />
For Loop development, there's currently a couple of extra requirements on top of the [https://developer.mozilla.org/en-US/docs/Simple_Firefox_build#Build_prerequisites Firefox desktop build requirements]. <br />
<br />
These are [https://nodejs.org/ NodeJS] (note, though, that you MUST currently use an old version, 0.10), react-tools and eslint.<br />
<br />
Note that when building Firefox itself, be sure to set ```ac_add_options --enable-optimize``` in your mozconfig to avoid problems with automated tests timing out.<br />
<br />
Install NodeJS 0.10 first, then follow the instructions below<br />
<br />
==== Mac installation of node 0.10 ====<br />
<br />
brew install homebrew/versions/node010<br />
<br />
==== Windows Specific ====<br />
<br />
There's a little bit more set-up required specific to Windows.<br />
<br />
* Start up the mozilla-build shell via one of the start-shell-msvc*.bat files<br />
* Work out your APPDATA path:<br />
<br />
echo $APPDATA<br />
<br />
* In your APPDATA, you'll need to replace various parts, so:<br />
<br />
c:\Users\moztest\AppData\Roaming<br />
<br />
becomes:<br />
<br />
/c/Users/moztest/AppData/Roaming<br />
<br />
* Now setup your profile file, replace the <code><path to APPDATA></code> with the path you just worked out.<br />
<br />
echo $PATH:/c/Program\ Files/nodejs:<path to APPDATA>/npm >> ~/.profile<br />
<br />
* Now exit your shell/console and re-enter it.<br />
* Complete the steps in the "All Platforms" section<br />
<br />
If you need to change the path later, you can edit the ~/.profile file.<br />
<br />
==== All Platforms ====<br />
<br />
Once you have Node installed, use npm (which comes with it) to globally install the extra required items:<br />
<br />
npm install -g react-tools@0.12.2<br />
npm install -g eslint<br />
npm install -g eslint-plugin-react<br />
<br />
=== Standalone server - Link-clicker UI and unit test development ===<br />
<br />
We have a server that helps running the unit tests manually, there's also the ui-showcase which helps with previewing layouts before starting Firefox.<br />
<br />
cd browser/components/loop/standalone<br />
make install<br />
make runserver<br />
<br />
You only need to do <code>make runserver</code> on subsequent runs. Although <code>make install</code> may be required occasionally if dependencies get updated.<br />
<br />
==== Visiting test pages ====<br />
<br />
To view the unit tests visit:<br />
<br />
http://localhost:3000/test/<br />
<br />
To view the UI-showcase, visit:<br />
<br />
http://localhost:3000/ui/<br />
<br />
==== Testing out changes to the standalone UI ====<br />
<br />
The standalone part of Loop (also known as the link-clicker UI) can be viewed in any web browser, and is hosted on a server. You can hook the development server up to talk to one of the servers to be able to test changes to the standalone UI.<br />
<br />
To do this, setup the standalone server as described above, then rather than a simple <code>make runserver</code>, do:<br />
<br />
LOOP_SERVER=https://path/to/server make runserver<br />
<br />
Replace the server path with one of:<br />
<br />
* Development server: https://loop-dev.stage.mozaws.net<br />
* Production server: https://loop.services.mozilla.com<br />
<br />
(Generally its better to use the development server than the production one to avoid affecting the stats of production usage).<br />
<br />
For the desktop side (also known as the link-generator):<br />
<br />
* You may wish to create a new profile for testing purposes (since changing the pref below will loose your previously created conversations), e.g:<br />
<br />
/path/to/firefox -createProfile myTestProfile<br />
./mach run -P myTestProfile -purgecaches<br />
<br />
* Visit about:config, change the <code>loop.server</code> preference to be <code>https://loop-dev.stage.mozaws.net/v0</code><br />
* Restart Firefox after changing the pref<br />
* From the Hello panel, select "Start a conversation"<br />
* Copy the url, and paste it into a browser window, but change the url<br />
** <code>https://hello.firefox.com/1234567890a#dfkjekrltykyleoefirek</code> would become <code>http://localhost:3000/content/1234567890ab#dfkjekrltykyleoefirek</code><br />
<br />
You should now be able to join the room with that instance.<br />
<br />
=== Developing ===<br />
If you're altering any of the javascript files, you need to make sure you alter the jsx versions if they exist.<br />
<br />
You can start up the jsx compiler so that it watches the files and continuously updates them whilst the jsx is left running:<br />
<br />
cd browser/components/loop<br />
./build-jsx -w<br />
<br />
To stop watching files and quit jsx, just use <code>ctrl-c</code><br />
<br />
{{note|Note: On windows, build-jsx doesn't currently do the version check for the react version, so please keep an eye on the suggested version in case it is updated.}}<br />
<br />
=== Linting ===<br />
We use [http://eslint.org/ eslint] to parse the Loop files and check them for correctness before landing.<br />
<br />
See the [http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/README.txt README.txt] for how to run it.<br />
<br />
=== UI-showcase ===<br />
<br />
If you've got the standalone server running, you can view this by visiting http://localhost:3000/ui/ . This lets you layout the content pages (the parts displayed in the panel and conversation view) in a web context before loading and testing them in Firefox itself.<br />
<br />
This can save you a considerable amount of time, because you don't have to (re-)build each time you made a change to see what effect it had.<br />
<br />
=== Running Tests ===<br />
<br />
There's a file located at <code>[http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/run-all-loop-tests.sh browser/components/loop/run-all-loop-tests.sh]</code> which allows all loop related tests to be run at the same time.<br />
<br />
For information on running the tests individually, see the <code>[http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/README.txt README.txt]</code> file.<br />
<br />
== Creating Patches ==<br />
<br />
Creating patches happens in exactly the same manner as for the rest of Firefox. See our documentation on the Mozilla Developer Network for [https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/How_to_Submit_a_Patch how to create and submit a patch.]<br />
<br />
[[Category:Firefox Hello]]<br />
[[Category:Loop]]</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Development/RegExpDebugging&diff=1087213Loop/Development/RegExpDebugging2015-07-29T23:38:48Z<p>Dmose: Created page with "== Regular Expression debugging tools == [https://dxr.mozilla.org/mozilla-central/source/browser/components/loop/content/shared/js/urlRegExp.js browser/components/loop/conten..."</p>
<hr />
<div>== Regular Expression debugging tools ==<br />
<br />
[https://dxr.mozilla.org/mozilla-central/source/browser/components/loop/content/shared/js/urlRegExp.js browser/components/loop/content/shared/js/urlRegExp.js] contains a big regexp currently used to match URLs in plain text. Because it's so giant, changing certain parts of it can be very fragile and can create a nasty game of whack-a-mole of failing tests.<br />
<br />
Several regular expression debugging tools & resources have come in handy when debugging changes to it: (they have differing strengths and weaknesses when dealing with a regexp this nasty):<br />
<br />
* https://www.debuggex.com/<br />
* http://regviz.org/<br />
* https://regex101.com/#javascript<br />
* http://scraping.pro/10-best-online-regex-testers/</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Development&diff=1087188Loop/Development2015-07-29T19:06:47Z<p>Dmose: /* Clarified that we need node 0.10, added Mac info */</p>
<hr />
<div>== Bug Tracking and Repositories ==<br />
<br />
=== Need Help, want to discuss with Loop developers? ===<br />
<br />
If you need help or want to discuss something with the Loop developers, then visit us on [irc://irc.mozilla.org/loop #loop on irc.mozilla.org] - if you need more information about IRC, see our [[IRC]] page.<br />
<br />
=== Tracking ===<br />
Bugs are stored in [https://github.com/mozilla/gecko-dev bugzilla]:<br />
<br />
* Desktop & Standalone (aka 'link generator' and 'link clicker', respectively): 'Loop' product, 'Client' component<br />
* Server: 'Loop' product, 'Server' component<br />
<br />
==== Looking for bugs? ====<br />
<br />
Try one of the [https://bugzilla.mozilla.org/buglist.cgi?f1=status_whiteboard&o1=substring&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=good%20first%20bug&component=Client&component=General&product=Hello%20(Loop)&list_id=12141660 good first bugs] (simple bugs that are easy to fix) or a [https://bugzilla.mozilla.org/buglist.cgi?f1=status_whiteboard&o1=substring&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=good%20next%20bug&component=Client&component=General&product=Hello%20(Loop)&list_id=12141660 good next bug].<br />
<br />
There's also [https://bugzilla.mozilla.org/buglist.cgi?f1=bug_mentor&list_id=12141679&o1=isnotempty&resolution=---&emailtype1=exact&query_format=advanced&emailassigned_to1=1&email1=nobody%40mozilla.org&product=Hello%20(Loop) mentored bugs] where are developers have signed up to help you fix the bugs. Most of these will be in the good first and next bug groups above.<br />
<br />
Or if not, take a look at our [[Firefox/Iterative_Hello_Development#Product_Backlog|ranked priority list]] and choose one from there.<br />
<br />
=== Repositories ===<br />
Loop is contained across several repositories:<br />
<br />
* Master repository for Desktop and Standalone UI: [http://hg.mozilla.org/mozilla-central/ mozilla-central] (there's a [https://github.com/mozilla/gecko-dev git mirror] of it as well)<br />
* [https://github.com/mozilla-services/loop-server Loop server]<br />
<br />
=== Directories ===<br />
<br />
All files, apart from desktop locales are in [http://hg.mozilla.org/mozilla-central/ mozilla-central], under <code>browser/components/loop/</code>. Within that directory there is:<br />
<br />
* *.jsm - Various modules used within Firefox desktop<br />
* build-jsx used to build the required jsx files<br />
* content/ - These files are all used on the desktop for the Loop panel and conversation window. They are loaded into content space rather than chrome<br />
* content/shared - Used for Firefox desktop, but also used for the standalone UI<br />
* standalone/ - Files used by the standalone application, including commands to make and run a standalone server (see below)<br />
* standalone/content - The content files for the standalone application<br />
* ui/ - A UI showcase, used to aid development and layout of styles for the various parts of the UI<br />
<br />
A small bit of integration code with Firefox can be found in [https://dxr.mozilla.org/mozilla-central/source/browser/base/content/browser-loop.js browser-loop.js].<br />
<br />
=== Loop Software Architecture ===<br />
<br />
More details on the structure coming soon. We have parts of Loop that run in a web-content space (those typically below a <code>content</code> directory), and other parts that work in a gecko privileged space (these are typically in the root directory of <code>browser/components/loop</code>).<br />
<br />
A lot of the content files use a Flux based architecture, [https://blog.mozilla.org/standard8/2015/02/09/firefox-hello-desktop-behind-the-scenes-flux-and-react/ read more about that here].<br />
<br />
== Getting started with Firefox Desktop and Standalone development ==<br />
<br />
=== Additional Requirements ===<br />
<br />
For Loop development, there's currently a couple of extra requirements on top of the [https://developer.mozilla.org/en-US/docs/Simple_Firefox_build#Build_prerequisites Firefox desktop build requirements].<br />
<br />
These are [https://nodejs.org/ NodeJS] (note, though, that you MUST currently use an old version, 0.10), react-tools and eslint.<br />
<br />
Install NodeJS 0.10 first, then follow the instructions below<br />
<br />
==== Mac installation of node 0.10 ====<br />
<br />
brew install homebrew/versions/node010<br />
<br />
==== Windows Specific ====<br />
<br />
There's a little bit more set-up required specific to Windows.<br />
<br />
* Start up the mozilla-build shell via one of the start-shell-msvc*.bat files<br />
* Work out your APPDATA path:<br />
<br />
echo $APPDATA<br />
<br />
* In your APPDATA, you'll need to replace various parts, so:<br />
<br />
c:\Users\moztest\AppData\Roaming<br />
<br />
becomes:<br />
<br />
/c/Users/moztest/AppData/Roaming<br />
<br />
* Now setup your profile file, replace the <code><path to APPDATA></code> with the path you just worked out.<br />
<br />
echo $PATH:/c/Program\ Files/nodejs:<path to APPDATA>/npm >> ~/.profile<br />
<br />
* Now exit your shell/console and re-enter it.<br />
* Complete the steps in the "All Platforms" section<br />
<br />
If you need to change the path later, you can edit the ~/.profile file.<br />
<br />
==== All Platforms ====<br />
<br />
Once you have Node installed, use npm (which comes with it) to globally install the extra required items:<br />
<br />
npm install -g react-tools@0.12.2<br />
npm install -g eslint<br />
npm install -g eslint-plugin-react<br />
<br />
=== Standalone server - Link-clicker UI and unit test development ===<br />
<br />
We have a server that helps running the unit tests manually, there's also the ui-showcase which helps with previewing layouts before starting Firefox.<br />
<br />
cd browser/components/loop/standalone<br />
make install<br />
make runserver<br />
<br />
You only need to do <code>make runserver</code> on subsequent runs. Although <code>make install</code> may be required occasionally if dependencies get updated.<br />
<br />
==== Visiting test pages ====<br />
<br />
To view the unit tests visit:<br />
<br />
http://localhost:3000/test/<br />
<br />
To view the UI-showcase, visit:<br />
<br />
http://localhost:3000/ui/<br />
<br />
==== Testing out changes to the standalone UI ====<br />
<br />
The standalone part of Loop (also known as the link-clicker UI) can be viewed in any web browser, and is hosted on a server. You can hook the development server up to talk to one of the servers to be able to test changes to the standalone UI.<br />
<br />
To do this, setup the standalone server as described above, then rather than a simple <code>make runserver</code>, do:<br />
<br />
LOOP_SERVER=https://path/to/server make runserver<br />
<br />
Replace the server path with one of:<br />
<br />
* Development server: https://loop-dev.stage.mozaws.net<br />
* Production server: https://loop.services.mozilla.com<br />
<br />
(Generally its better to use the development server than the production one to avoid affecting the stats of production usage).<br />
<br />
For the desktop side (also known as the link-generator):<br />
<br />
* You may wish to create a new profile for testing purposes (since changing the pref below will loose your previously created conversations), e.g:<br />
<br />
/path/to/firefox -createProfile myTestProfile<br />
./mach run -P myTestProfile -purgecaches<br />
<br />
* Visit about:config, change the <code>loop.server</code> preference to be <code>https://loop-dev.stage.mozaws.net/v0</code><br />
* Restart Firefox after changing the pref<br />
* From the Hello panel, select "Start a conversation"<br />
* Copy the url, and paste it into a browser window, but change the url<br />
** <code>https://hello.firefox.com/1234567890a#dfkjekrltykyleoefirek</code> would become <code>http://localhost:3000/content/1234567890ab#dfkjekrltykyleoefirek</code><br />
<br />
You should now be able to join the room with that instance.<br />
<br />
=== Developing ===<br />
If you're altering any of the javascript files, you need to make sure you alter the jsx versions if they exist.<br />
<br />
You can start up the jsx compiler so that it watches the files and continuously updates them whilst the jsx is left running:<br />
<br />
cd browser/components/loop<br />
./build-jsx -w<br />
<br />
To stop watching files and quit jsx, just use <code>ctrl-c</code><br />
<br />
{{note|Note: On windows, build-jsx doesn't currently do the version check for the react version, so please keep an eye on the suggested version in case it is updated.}}<br />
<br />
=== Linting ===<br />
We use [http://eslint.org/ eslint] to parse the Loop files and check them for correctness before landing.<br />
<br />
See the [http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/README.txt README.txt] for how to run it.<br />
<br />
=== UI-showcase ===<br />
<br />
If you've got the standalone server running, you can view this by visiting http://localhost:3000/ui/ . This lets you layout the content pages (the parts displayed in the panel and conversation view) in a web context before loading and testing them in Firefox itself.<br />
<br />
This can save you a considerable amount of time, because you don't have to (re-)build each time you made a change to see what effect it had.<br />
<br />
=== Running Tests ===<br />
<br />
There's a file located at <code>[http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/run-all-loop-tests.sh browser/components/loop/run-all-loop-tests.sh]</code> which allows all loop related tests to be run at the same time.<br />
<br />
For information on running the tests individually, see the <code>[http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/README.txt README.txt]</code> file.<br />
<br />
== Creating Patches ==<br />
<br />
Creating patches happens in exactly the same manner as for the rest of Firefox. See our documentation on the Mozilla Developer Network for [https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/How_to_Submit_a_Patch how to create and submit a patch.]<br />
<br />
[[Category:Firefox Hello]]<br />
[[Category:Loop]]</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Development&diff=1083869Loop/Development2015-07-08T23:11:52Z<p>Dmose: Fix "Looking for bugs" links broken by the Bugzilla component rename.</p>
<hr />
<div>== Bug Tracking and Repositories ==<br />
<br />
=== Need Help, want to discuss with Loop developers? ===<br />
<br />
If you need help or want to discuss something with the Loop developers, then visit us on [irc://irc.mozilla.org/loop #loop on irc.mozilla.org] - if you need more information about IRC, see our [[IRC]] page.<br />
<br />
=== Tracking ===<br />
Bugs are stored in [https://github.com/mozilla/gecko-dev bugzilla]:<br />
<br />
* Desktop & Standalone (aka 'link generator' and 'link clicker', respectively): 'Loop' product, 'Client' component<br />
* Server: 'Loop' product, 'Server' component<br />
<br />
==== Looking for bugs? ====<br />
<br />
Try one of the [https://bugzilla.mozilla.org/buglist.cgi?f1=status_whiteboard&o1=substring&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=good%20first%20bug&component=Client&component=General&product=Hello%20(Loop)&list_id=12141660 good first bugs] (simple bugs that are easy to fix) or a [https://bugzilla.mozilla.org/buglist.cgi?f1=status_whiteboard&o1=substring&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=good%20next%20bug&component=Client&component=General&product=Hello%20(Loop)&list_id=12141660 good next bug].<br />
<br />
There's also [https://bugzilla.mozilla.org/buglist.cgi?f1=bug_mentor&list_id=12141679&o1=isnotempty&resolution=---&emailtype1=exact&query_format=advanced&emailassigned_to1=1&email1=nobody%40mozilla.org&product=Hello%20(Loop) mentored bugs] where are developers have signed up to help you fix the bugs. Most of these will be in the good first and next bug groups above.<br />
<br />
Or if not, take a look at our [[Firefox/Iterative_Hello_Development#Product_Backlog|ranked priority list]] and choose one from there.<br />
<br />
=== Repositories ===<br />
Loop is contained across several repositories:<br />
<br />
* Master repository for Desktop and Standalone UI: [http://hg.mozilla.org/mozilla-central/ mozilla-central] (there's a [https://github.com/mozilla/gecko-dev git mirror] of it as well)<br />
* [https://github.com/mozilla-services/loop-server Loop server]<br />
<br />
=== Directories ===<br />
<br />
All files, apart from desktop locales are in [http://hg.mozilla.org/mozilla-central/ mozilla-central], under <code>browser/components/loop/</code>. Within that directory there is:<br />
<br />
* *.jsm - Various modules used within Firefox desktop<br />
* build-jsx used to build the required jsx files<br />
* content/ - These files are all used on the desktop for the Loop panel and conversation window. They are loaded into content space rather than chrome<br />
* content/shared - Used for Firefox desktop, but also used for the standalone UI<br />
* standalone/ - Files used by the standalone application, including commands to make and run a standalone server (see below)<br />
* standalone/content - The content files for the standalone application<br />
* ui/ - A UI showcase, used to aid development and layout of styles for the various parts of the UI<br />
<br />
A small bit of integration code with Firefox can be found in [https://dxr.mozilla.org/mozilla-central/source/browser/base/content/browser-loop.js browser-loop.js].<br />
<br />
=== Loop Software Architecture ===<br />
<br />
More details on the structure coming soon. We have parts of Loop that run in a web-content space (those typically below a <code>content</code> directory), and other parts that work in a gecko privileged space (these are typically in the root directory of <code>browser/components/loop</code>).<br />
<br />
A lot of the content files use a Flux based architecture, [https://blog.mozilla.org/standard8/2015/02/09/firefox-hello-desktop-behind-the-scenes-flux-and-react/ read more about that here].<br />
<br />
== Getting started with Firefox Desktop and Standalone development ==<br />
<br />
=== Additional Requirements ===<br />
<br />
For Loop development, there's currently a couple of extra requirements on top of the [https://developer.mozilla.org/en-US/docs/Simple_Firefox_build#Build_prerequisites Firefox desktop build requirements].<br />
<br />
These are [https://nodejs.org/ NodeJS], react-tools and eslint.<br />
<br />
Install NodeJS first, then follow the instructions below.<br />
<br />
==== Windows Specific ====<br />
<br />
There's a little bit more set-up required specific to Windows.<br />
<br />
* Start up the mozilla-build shell via one of the start-shell-msvc*.bat files<br />
* Work out your APPDATA path:<br />
<br />
echo $APPDATA<br />
<br />
* In your APPDATA, you'll need to replace various parts, so:<br />
<br />
c:\Users\moztest\AppData\Roaming<br />
<br />
becomes:<br />
<br />
/c/Users/moztest/AppData/Roaming<br />
<br />
* Now setup your profile file, replace the <code><path to APPDATA></code> with the path you just worked out.<br />
<br />
echo $PATH:/c/Program\ Files/nodejs:<path to APPDATA>/npm >> ~/.profile<br />
<br />
* Now exit your shell/console and re-enter it.<br />
* Complete the steps in the "All Platforms" section<br />
<br />
If you need to change the path later, you can edit the ~/.profile file.<br />
<br />
==== All Platforms ====<br />
<br />
Once you have Node installed, use npm (which comes with it) to globally install the extra required items:<br />
<br />
npm install -g react-tools@0.12.2<br />
npm install -g eslint<br />
npm install -g eslint-plugin-react<br />
<br />
=== Standalone server - Link-clicker UI and unit test development ===<br />
<br />
We have a server that helps running the unit tests manually, there's also the ui-showcase which helps with previewing layouts before starting Firefox.<br />
<br />
cd browser/components/loop/standalone<br />
make install<br />
make runserver<br />
<br />
You only need to do <code>make runserver</code> on subsequent runs. Although <code>make install</code> may be required occasionally if dependencies get updated.<br />
<br />
==== Visiting test pages ====<br />
<br />
To view the unit tests visit:<br />
<br />
http://localhost:3000/test/<br />
<br />
To view the UI-showcase, visit:<br />
<br />
http://localhost:3000/ui/<br />
<br />
==== Testing out changes to the standalone UI ====<br />
<br />
The standalone part of Loop (also known as the link-clicker UI) can be viewed in any web browser, and is hosted on a server. You can hook the development server up to talk to one of the servers to be able to test changes to the standalone UI.<br />
<br />
To do this, setup the standalone server as described above, then rather than a simple <code>make runserver</code>, do:<br />
<br />
LOOP_SERVER=https://path/to/server make runserver<br />
<br />
Replace the server path with one of:<br />
<br />
* Development server: https://loop-dev.stage.mozaws.net<br />
* Production server: https://loop.services.mozilla.com<br />
<br />
(Generally its better to use the development server than the production one to avoid affecting the stats of production usage).<br />
<br />
For the desktop side (also known as the link-generator):<br />
<br />
* You may wish to create a new profile for testing purposes (since changing the pref below will loose your previously created conversations), e.g:<br />
<br />
/path/to/firefox -createProfile myTestProfile<br />
./mach run -P myTestProfile -purgecaches<br />
<br />
* Visit about:config, change the <code>loop.server</code> preference to be <code>https://loop-dev.stage.mozaws.net/v0</code><br />
* Restart Firefox after changing the pref<br />
* From the Hello panel, select "Start a conversation"<br />
* Copy the url, and paste it into a browser window, but change the url<br />
** <code>https://hello.firefox.com/1234567890a#dfkjekrltykyleoefirek</code> would become <code>http://localhost:3000/content/1234567890ab#dfkjekrltykyleoefirek</code><br />
<br />
You should now be able to join the room with that instance.<br />
<br />
=== Developing ===<br />
If you're altering any of the javascript files, you need to make sure you alter the jsx versions if they exist.<br />
<br />
You can start up the jsx compiler so that it watches the files and continuously updates them whilst the jsx is left running:<br />
<br />
cd browser/components/loop<br />
./build-jsx -w<br />
<br />
To stop watching files and quit jsx, just use <code>ctrl-c</code><br />
<br />
{{note|Note: On windows, build-jsx doesn't currently do the version check for the react version, so please keep an eye on the suggested version in case it is updated.}}<br />
<br />
=== Linting ===<br />
We use [http://eslint.org/ eslint] to parse the Loop files and check them for correctness before landing.<br />
<br />
See the [http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/README.txt README.txt] for how to run it.<br />
<br />
=== UI-showcase ===<br />
<br />
If you've got the standalone server running, you can view this by visiting http://localhost:3000/ui/ . This lets you layout the content pages (the parts displayed in the panel and conversation view) in a web context before loading and testing them in Firefox itself.<br />
<br />
This can save you a considerable amount of time, because you don't have to (re-)build each time you made a change to see what effect it had.<br />
<br />
=== Running Tests ===<br />
<br />
There's a file located at <code>[http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/run-all-loop-tests.sh browser/components/loop/run-all-loop-tests.sh]</code> which allows all loop related tests to be run at the same time.<br />
<br />
For information on running the tests individually, see the <code>[http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/README.txt README.txt]</code> file.<br />
<br />
== Creating Patches ==<br />
<br />
Creating patches happens in exactly the same manner as for the rest of Firefox. See our documentation on the Mozilla Developer Network for [https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/How_to_Submit_a_Patch how to create and submit a patch.]<br />
<br />
[[Category:Firefox Hello]]<br />
[[Category:Loop]]</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Development&diff=1065975Loop/Development2015-04-01T18:26:41Z<p>Dmose: /* Additional Requirements */</p>
<hr />
<div>== Bug Tracking and Repositories ==<br />
<br />
=== Tracking ===<br />
Bugs are stored in [https://github.com/mozilla/gecko-dev bugzilla]:<br />
<br />
* Desktop & Standalone (aka 'link generator' and 'link clicker', respectively): 'Loop' product, 'Client' component<br />
* Server: 'Loop' product, 'Server' component<br />
<br />
==== Looking for bugs? ====<br />
<br />
Try one of the [https://bugzilla.mozilla.org/buglist.cgi?f1=status_whiteboard&o1=substring&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=good%20first%20bug&component=Client&component=General&product=Loop&list_id=12141660 good first bugs] (simple bugs that are easy to fix) or a [https://bugzilla.mozilla.org/buglist.cgi?f1=status_whiteboard&o1=substring&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=good%20next%20bug&component=Client&component=General&product=Loop&list_id=12141660 good next bug].<br />
<br />
There's also [https://bugzilla.mozilla.org/buglist.cgi?f1=bug_mentor&list_id=12141679&o1=isnotempty&resolution=---&emailtype1=exact&query_format=advanced&emailassigned_to1=1&email1=nobody%40mozilla.org&product=Loop mentored bugs] where are developers have signed up to help you fix the bugs. Most of these will be in the good first and next bug groups above.<br />
<br />
Or if not, take a look at our [[Firefox/Iterative_Hello_Development#Product_Backlog|ranked priority list]] and choose one from there.<br />
<br />
=== Repositories ===<br />
Loop is contained across several repositories:<br />
<br />
* Master repository for Desktop and Standalone UI: [http://hg.mozilla.org/mozilla-central/ mozilla-central] (there's a [https://github.com/mozilla/gecko-dev git mirror] of it as well)<br />
* [https://github.com/mozilla-services/loop-server Loop server]<br />
<br />
=== Directories ===<br />
<br />
All files, apart from desktop locales are in [http://hg.mozilla.org/mozilla-central/ mozilla-central], under <code>browser/components/loop/</code>. Within that directory there is:<br />
<br />
* *.jsm - Various modules used within Firefox desktop<br />
* build-jsx used to build the required jsx files<br />
* content/ - These files are all used on the desktop for the Loop panel and conversation window. They are loaded into content space rather than chrome<br />
* content/shared - Used for Firefox desktop, but also used for the standalone UI<br />
* standalone/ - Files used by the standalone application, including commands to make and run a standalone server (see below)<br />
* standalone/content - The content files for the standalone application<br />
* ui/ - A UI showcase, used to aid development and layout of styles for the various parts of the UI<br />
<br />
A small bit of integration code with Firefox can be found in [https://dxr.mozilla.org/mozilla-central/source/browser/base/content/browser-loop.js browser-loop.js].<br />
<br />
=== Loop Software Architecture ===<br />
<br />
More details on the structure coming soon. We have parts of Loop that run in a web-content space (those typically below a <code>content</code> directory), and other parts that work in a gecko privileged space (these are typically in the root directory of <code>browser/components/loop</code>).<br />
<br />
A lot of the content files use a Flux based architecture, [https://blog.mozilla.org/standard8/2015/02/09/firefox-hello-desktop-behind-the-scenes-flux-and-react/ read more about that here].<br />
<br />
== Getting started with Firefox Desktop and Standalone development ==<br />
<br />
=== Additional Requirements ===<br />
<br />
For Loop development, there's currently a couple of extra requirements on top of the [https://developer.mozilla.org/en-US/docs/Simple_Firefox_build#Build_prerequisites Firefox desktop build requirements].<br />
<br />
These are [https://nodejs.org/ NodeJS] and react-tools, a package for Node.<br />
<br />
Once you have Node installed, use npm (which comes with it) to globally install react-tools:<br />
<br />
npm install -g react-tools@0.12.2<br />
<br />
=== Unit test and ui-showcase tools ===<br />
<br />
We have a server that helps running the unit tests manually, there's also the ui-showcase which helps with previewing layouts before starting Firefox.<br />
<br />
cd browser/components/loop/standalone<br />
make install<br />
make runserver<br />
<br />
You only need to do <code>make runserver</code> on subsequent runs. Although <code>make install</code> may be required occasionally if dependencies get updated.<br />
<br />
=== Developing ===<br />
If you're altering any of the javascript files, you need to make sure you alter the jsx versions if they exist. Running:<br />
<br />
cd browser/components/loop<br />
./build-jsx<br />
<br />
will generate the js versions of the file. Even better you can use:<br />
<br />
./build-jsx -w<br />
<br />
to keep watching the jsx files and updating them as the change.<br />
<br />
=== UI-showcase ===<br />
<br />
If you've got the standalone server running, you can view this by visiting http://localhost:3000/ui/ . This lets you layout the content pages (the parts displayed in the panel and conversation view) in a web context before loading and testing them in Firefox itself.<br />
<br />
This can save you a considerable amount of time, because you don't have to (re-)build each time you made a change to see what effect it had.<br />
<br />
=== Running Tests ===<br />
<br />
There's a file located at <code>[http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/run-all-loop-tests.sh browser/components/loop/run-all-loop-tests.sh]</code> which allows all loop related tests to be run at the same time.<br />
<br />
For information on running the tests individually, see the <code>[http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/README.txt README.txt]</code> file.<br />
<br />
== Creating Patches ==<br />
<br />
Creating patches happens in exactly the same manner as for the rest of Firefox. See our documentation on the Mozilla Developer Network for [https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/How_to_Submit_a_Patch how to create and submit a patch.]</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Development&diff=1065974Loop/Development2015-04-01T18:25:55Z<p>Dmose: npm comes with node these days, and we currently can't use the latest react-tools, so we have to specifiy a version.</p>
<hr />
<div>== Bug Tracking and Repositories ==<br />
<br />
=== Tracking ===<br />
Bugs are stored in [https://github.com/mozilla/gecko-dev bugzilla]:<br />
<br />
* Desktop & Standalone (aka 'link generator' and 'link clicker', respectively): 'Loop' product, 'Client' component<br />
* Server: 'Loop' product, 'Server' component<br />
<br />
==== Looking for bugs? ====<br />
<br />
Try one of the [https://bugzilla.mozilla.org/buglist.cgi?f1=status_whiteboard&o1=substring&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=good%20first%20bug&component=Client&component=General&product=Loop&list_id=12141660 good first bugs] (simple bugs that are easy to fix) or a [https://bugzilla.mozilla.org/buglist.cgi?f1=status_whiteboard&o1=substring&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&v1=good%20next%20bug&component=Client&component=General&product=Loop&list_id=12141660 good next bug].<br />
<br />
There's also [https://bugzilla.mozilla.org/buglist.cgi?f1=bug_mentor&list_id=12141679&o1=isnotempty&resolution=---&emailtype1=exact&query_format=advanced&emailassigned_to1=1&email1=nobody%40mozilla.org&product=Loop mentored bugs] where are developers have signed up to help you fix the bugs. Most of these will be in the good first and next bug groups above.<br />
<br />
Or if not, take a look at our [[Firefox/Iterative_Hello_Development#Product_Backlog|ranked priority list]] and choose one from there.<br />
<br />
=== Repositories ===<br />
Loop is contained across several repositories:<br />
<br />
* Master repository for Desktop and Standalone UI: [http://hg.mozilla.org/mozilla-central/ mozilla-central] (there's a [https://github.com/mozilla/gecko-dev git mirror] of it as well)<br />
* [https://github.com/mozilla-services/loop-server Loop server]<br />
<br />
=== Directories ===<br />
<br />
All files, apart from desktop locales are in [http://hg.mozilla.org/mozilla-central/ mozilla-central], under <code>browser/components/loop/</code>. Within that directory there is:<br />
<br />
* *.jsm - Various modules used within Firefox desktop<br />
* build-jsx used to build the required jsx files<br />
* content/ - These files are all used on the desktop for the Loop panel and conversation window. They are loaded into content space rather than chrome<br />
* content/shared - Used for Firefox desktop, but also used for the standalone UI<br />
* standalone/ - Files used by the standalone application, including commands to make and run a standalone server (see below)<br />
* standalone/content - The content files for the standalone application<br />
* ui/ - A UI showcase, used to aid development and layout of styles for the various parts of the UI<br />
<br />
A small bit of integration code with Firefox can be found in [https://dxr.mozilla.org/mozilla-central/source/browser/base/content/browser-loop.js browser-loop.js].<br />
<br />
=== Loop Software Architecture ===<br />
<br />
More details on the structure coming soon. We have parts of Loop that run in a web-content space (those typically below a <code>content</code> directory), and other parts that work in a gecko privileged space (these are typically in the root directory of <code>browser/components/loop</code>).<br />
<br />
A lot of the content files use a Flux based architecture, [https://blog.mozilla.org/standard8/2015/02/09/firefox-hello-desktop-behind-the-scenes-flux-and-react/ read more about that here].<br />
<br />
== Getting started with Firefox Desktop and Standalone development ==<br />
<br />
=== Additional Requirements ===<br />
<br />
For Loop development, there's currently a couple of extra requirements on top of the [https://developer.mozilla.org/en-US/docs/Simple_Firefox_build#Build_prerequisites Firefox desktop build requirements].<br />
<br />
These are [https://nodejs.org/ NodeJS] and react-tools, a package for Node.<br />
<br />
Once you have Node installed, use npm (which comes with it) to react:<br />
<br />
npm install -g react-tools@0.12.2<br />
<br />
=== Unit test and ui-showcase tools ===<br />
<br />
We have a server that helps running the unit tests manually, there's also the ui-showcase which helps with previewing layouts before starting Firefox.<br />
<br />
cd browser/components/loop/standalone<br />
make install<br />
make runserver<br />
<br />
You only need to do <code>make runserver</code> on subsequent runs. Although <code>make install</code> may be required occasionally if dependencies get updated.<br />
<br />
=== Developing ===<br />
If you're altering any of the javascript files, you need to make sure you alter the jsx versions if they exist. Running:<br />
<br />
cd browser/components/loop<br />
./build-jsx<br />
<br />
will generate the js versions of the file. Even better you can use:<br />
<br />
./build-jsx -w<br />
<br />
to keep watching the jsx files and updating them as the change.<br />
<br />
=== UI-showcase ===<br />
<br />
If you've got the standalone server running, you can view this by visiting http://localhost:3000/ui/ . This lets you layout the content pages (the parts displayed in the panel and conversation view) in a web context before loading and testing them in Firefox itself.<br />
<br />
This can save you a considerable amount of time, because you don't have to (re-)build each time you made a change to see what effect it had.<br />
<br />
=== Running Tests ===<br />
<br />
There's a file located at <code>[http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/run-all-loop-tests.sh browser/components/loop/run-all-loop-tests.sh]</code> which allows all loop related tests to be run at the same time.<br />
<br />
For information on running the tests individually, see the <code>[http://mxr.mozilla.org/mozilla-central/source/browser/components/loop/README.txt README.txt]</code> file.<br />
<br />
== Creating Patches ==<br />
<br />
Creating patches happens in exactly the same manner as for the rest of Firefox. See our documentation on the Mozilla Developer Network for [https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/How_to_Submit_a_Patch how to create and submit a patch.]</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Desktop_%26_Standalon/Code_Style_%26_Structure&diff=1030049Loop/Desktop & Standalon/Code Style & Structure2014-11-03T17:40:39Z<p>Dmose: Redirected page to Loop/Desktop & Standalone/Code Style & Structure</p>
<hr />
<div>#REDIRECT [[Loop/Desktop_%26_Standalone/Code_Style_%26_Structure]]</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Desktop_%26_Standalone/Code_Style_%26_Structure&diff=1030048Loop/Desktop & Standalone/Code Style & Structure2014-11-03T17:40:03Z<p>Dmose: Created page with "== SVG == Structure: * all square assets of a given size go in a single file. Rationale: ** intra-SVG CSS rule sharing (eg fills, strokes, viewports, etc). ** organization..."</p>
<hr />
<div>== SVG ==<br />
<br />
Structure:<br />
<br />
* all square assets of a given size go in a single file. Rationale:<br />
** intra-SVG CSS rule sharing (eg fills, strokes, viewports, etc).<br />
** organization <br />
* each irregular icon gets its own file<br />
<br />
Eventually, the graphic design team is expected to start giving us icon assets that are scalable across multiple sizes, at which point we'll want to modify this policy a bit.</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Desktop_%26_Standalon/Code_Style_%26_Structure&diff=1030038Loop/Desktop & Standalon/Code Style & Structure2014-11-03T17:16:37Z<p>Dmose: Created page with "== SVG == Structure: * all square assets of a given size go in a single file. Rationale: ** intra-SVG CSS rule sharing (eg fills, strokes, viewports, etc). ** organization..."</p>
<hr />
<div>== SVG ==<br />
<br />
Structure:<br />
<br />
* all square assets of a given size go in a single file. Rationale:<br />
** intra-SVG CSS rule sharing (eg fills, strokes, viewports, etc).<br />
** organization <br />
* each irregular icon gets its own file<br />
<br />
Eventually, the graphic design team is expected to start giving us icon assets that are scalable across multiple sizes, at which point we'll want to modify this policy a bit.</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop&diff=1030036Loop2014-11-03T17:12:07Z<p>Dmose: /* Documentation */</p>
<hr />
<div>= Overview =<br />
<br />
At a high-level, the Loop project aims to create a user-visible real-time communications service for existing Mozilla products. This initially includes two major user-facing components: a Desktop portion, integrated with Firefox Desktop; and a Firefox OS Application intended to be used with Firefox OS 2.0 and later.<br />
<br />
A good starting point for roughly understanding the user-facing behavior of these components is that the Desktop behavior will be roughly like "Skype, but integrated into the browser;", while the Mobile behavior will be roughly like "Facetime for Firefox OS Devices."<br />
<br />
On Desktop, users will have an address book that can be used to initiate calls to other Firefox users, as well as to receive calls based on email identifiers. Video windows can be docked in front of the current tab, or "popped out" into their own window. In both cases, the call can continue while users change tabs and navigate around the web. <br />
<br />
On Firefox OS, the client will use the built-in address book for contact information, and will allow initiating calls to other users as well as to receive calls based on mobile phone numbers.<br />
<br />
In terms of project deliveries, the Loop project is using an incremental approach of delivering a minimal initial product consisting of simple voice and video communications. Additional features will be prioritized and added after the initial version is headed towards release, and as we gain more experience with what is most likely to provide the greatest value to our users.<br />
<br />
A more complete list of the features planned for the "Minimum Viable Product" (MVP) release can be found in the [https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0 MVP feature list / User Stories] document.<br />
<br />
== [https://wiki.mozilla.org/Loop/Try_Loop#Clients Try Loop] ==<br />
<br />
== Bug List ==<br />
<br />
* Bugs are filed in the "Loop" product in Bugzilla.<br />
* [http://charts.paas.allizom.org/webrtc/burndown-milestone.html#team=WebRTC_Loop&milestone=Milestone.Firefox33 Bug list and burndown chart for FF 33] <br />
<br />
<!-- Unfortunately, the Bugzilla queries need to be updated to manually incorporate any meta bugs --><br />
<br />
* [https://bugzilla.mozilla.org/showdependencytree.cgi?id=971986&hide_resolved=1 MVP] ("Minimum Viable Product")<br />
<bugzilla><br />
{<br />
"blocks":"971986,972000,972014,972024,972025,972031,976116,976134,994274",<br />
"bug_status":"RESOLVED",<br />
"bug_status_type":"not_equals",<br />
"include_fields": "id, summary, status, product, component, assigned_to"<br />
}<br />
</bugzilla><br />
<br />
= Core Team =<br />
<br />
* Maire Reavy - Engineering Manager<br />
* Romain Testard - Product Manager<br />
* Jorge Munuera - FxOS Product Manager<br />
* Rafael Rebolleda - FxOS UX Lead<br />
* Adam Roach - Technical Architecture Lead<br />
* Shell Escalante - Engineering Program Manager<br />
* Mark Banner - Engineering / Implementation<br />
* Dan Mosedale - Engineering / Implementation<br />
* Nicolas Perriault - Engineering / Implementation<br />
* Alexis Metaireau - Engineering / Implementation<br />
* Romain Gauthier - Engineering / Implementation<br />
* Remy Hubscher - Engineering / Implementation<br />
* Darrin Henein - UX Lead<br />
* María Ángeles Oteo - FxOS Engineering Manager<br />
* Fernando Jiménez - FxOS Engineering<br />
* Borja Salguero - FxOS Engineering<br />
* Jose A. Olivera - FxOS Engineering<br />
* Anthony Hughes - QA Lead<br />
<br />
= Documentation =<br />
<br />
* [[Loop/Architecture]] - Technical documentation of overall system<br />
* [[Loop/Architecture/MVP]]<br />
* [[Loop/Desktop & Standalon/Code Style & Structure]]<br />
* [[Loop/Data Collection]] - Information to collect about the functioning of the system<br />
* [[Loop/UX]] - Documentation of targeted User Experience<br />
* [[Loop/QA]] - Documentation of the testing strategy<br />
* [[Loop/Logging]] - What we need to know in case of failure to make calls. <br />
* [[Loop/Load Handling]] - Our plan for managing initial server load<br />
* [https://docs.services.mozilla.com/loop/apis.html Loop server API] - Documentation of the REST API used by the Loop server<br />
* [[Loop/OAuth Setup]] - Information about adding OAuth client credentials to Firefox<br />
<br />
[tbd -- other artifacts as they become available]<br />
<br />
= Standing Meetings =<br />
* Watch [https://lists.mozilla.org/listinfo/dev-media dev-media] for information.<br />
<br />
= Project Checklist =<br />
[[Services/Loop|Loop Project Checklist]]<br />
<br />
= Communication Channels =<br />
<br />
* [https://wiki.mozilla.org/IRC IRC]: [irc://irc.mozilla.org/loop #loop on irc.mozilla.org] (Use [irc://irc.mozilla.org/media #media on irc.mozilla.org] for WebRTC discussion)<br />
* [https://lists.mozilla.org/listinfo/dev-media dev-media Discussion List]</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop&diff=1016582Loop2014-09-19T17:19:14Z<p>Dmose: Added link to Try Loop page so that it's more discoverable.</p>
<hr />
<div>= Overview =<br />
<br />
At a high-level, the Loop project aims to create a user-visible real-time communications service for existing Mozilla products. This initially includes two major user-facing components: a Desktop portion, integrated with Firefox Desktop; and a Firefox OS Application intended to be used with Firefox OS 2.0 and later.<br />
<br />
A good starting point for roughly understanding the user-facing behavior of these components is that the Desktop behavior will be roughly like "Skype, but integrated into the browser;", while the Mobile behavior will be roughly like "Facetime for Firefox OS Devices."<br />
<br />
On Desktop, users will have an address book that can be used to initiate calls to other Firefox users, as well as to receive calls based on email identifiers. Video windows can be docked in front of the current tab, or "popped out" into their own window. In both cases, the call can continue while users change tabs and navigate around the web. <br />
<br />
On Firefox OS, the client will use the built-in address book for contact information, and will allow initiating calls to other users as well as to receive calls based on mobile phone numbers.<br />
<br />
In terms of project deliveries, the Loop project is using an incremental approach of delivering a minimal initial product consisting of simple voice and video communications. Additional features will be prioritized and added after the initial version is headed towards release, and as we gain more experience with what is most likely to provide the greatest value to our users.<br />
<br />
A more complete list of the features planned for the "Minimum Viable Product" (MVP) release can be found in the [https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0 MVP feature list / User Stories] document.<br />
<br />
== [https://wiki.mozilla.org/Loop/Try_Loop#Clients Try Loop] ==<br />
<br />
== Bug List ==<br />
<br />
* Bugs are filed in the "Loop" product in Bugzilla.<br />
* [http://charts.paas.allizom.org/webrtc/burndown-milestone.html#team=WebRTC_Loop&milestone=Milestone.Firefox33 Bug list and burndown chart for FF 33] <br />
<br />
<!-- Unfortunately, the Bugzilla queries need to be updated to manually incorporate any meta bugs --><br />
<br />
* [https://bugzilla.mozilla.org/showdependencytree.cgi?id=971986&hide_resolved=1 MVP] ("Minimum Viable Product")<br />
<bugzilla><br />
{<br />
"blocks":"971986,972000,972014,972024,972025,972031,976116,976134,994274",<br />
"bug_status":"RESOLVED",<br />
"bug_status_type":"not_equals",<br />
"include_fields": "id, summary, status, product, component, assigned_to"<br />
}<br />
</bugzilla><br />
<br />
= Core Team =<br />
<br />
* Maire Reavy - Engineering Manager<br />
* Romain Testard - Product Manager<br />
* Jorge Munuera - FxOS Product Manager<br />
* Rafael Rebolleda - FxOS UX Lead<br />
* Adam Roach - Technical Architecture Lead<br />
* Shell Escalante - Engineering Program Manager<br />
* Mark Banner - Engineering / Implementation<br />
* Dan Mosedale - Engineering / Implementation<br />
* Nicolas Perriault - Engineering / Implementation<br />
* Alexis Metaireau - Engineering / Implementation<br />
* Romain Gauthier - Engineering / Implementation<br />
* Remy Hubscher - Engineering / Implementation<br />
* Darrin Henein - UX Lead<br />
* María Ángeles Oteo - FxOS Engineering Manager<br />
* Fernando Jiménez - FxOS Engineering<br />
* Borja Salguero - FxOS Engineering<br />
* Jose A. Olivera - FxOS Engineering<br />
* Anthony Hughes - QA Lead<br />
<br />
= Documentation =<br />
<br />
* [[Loop/Architecture]] - Technical documentation of overall system<br />
* [[Loop/Data Collection]] - Information to collect about the functioning of the system<br />
* [[Loop/UX]] - Documentation of targeted User Experience<br />
* [[Loop/QA]] - Documentation of the testing strategy<br />
* [[Loop/Logging]] - What we need to know in case of failure to make calls. <br />
* [[Loop/Load Handling]] - Our plan for managing initial server load<br />
* [https://docs.services.mozilla.com/loop/apis.html Loop server API] - Documentation of the REST API used by the Loop server<br />
<br />
[tbd -- other artifacts as they become available]<br />
<br />
= Standing Meetings =<br />
* Watch [https://lists.mozilla.org/listinfo/dev-media dev-media] for information.<br />
<br />
= Project Checklist =<br />
[[Services/Loop|Loop Project Checklist]]<br />
<br />
= Communication Channels =<br />
<br />
* [https://wiki.mozilla.org/IRC IRC]: [irc://irc.mozilla.org/loop #loop on irc.mozilla.org] (Use [irc://irc.mozilla.org/media #media on irc.mozilla.org] for WebRTC discussion)<br />
* [https://lists.mozilla.org/listinfo/dev-media dev-media Discussion List]</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Architecture/MVP&diff=1006141Loop/Architecture/MVP2014-08-15T18:31:36Z<p>Dmose: /* Initial Connection (hello) */</p>
<hr />
<div>'''''Note that the changes proposed here are preliminary, and will be updated as the result of conversations with interested parties.'''''<br />
<br />
{| class="wikitable"<br />
|-<br />
! Date !! Author !! Changes<br />
|-<br />
| Tue Jun 17 11:38:10 EDT 2014 || Adam Roach || Added call ids to WSS URLs; added <tt>GET /call/{token}</tt>; added callType to call initiation call<br />
|-<br />
| Fri Jun 20 16:34:31 CDT 2014 || Adam Roach || Added urlDate to <tt>GET /calls?version=<version></tt><br />
|-<br />
| Tue Jun 24 12:08:55 CDT 2014 || Adam Roach || Added 'state' to <tt>GET /calls?version=<version></tt>; Added 'calleeId' to <tt>GET /call/{token}</tt><br />
|-<br />
| Thu Jun 26 15:57:55 UTC+1 2014 || Alexis Métaireau || Changed WSS URLs so they are just domains + ports.<br />
|-<br />
| Mon Jun 30 18:32:31 UTC+1 2014 || Rémy Hubscher || Add missing calleeId information.<br />
|-<br />
| Thu Aug 01 14:52:00 UTC+1 2014 || Alexis Métaireau || replace POST by PUT for /call-url/{token} <br />
|-<br />
| Wed Jul 2 15:20:40 CDT 2014 || Adam Roach || Added "channel" parameter to <tt>POST /calls</tt> (see {{bug|1033573}})<br />
|-<br />
| Mon Jul 14 11:58:01 CDT 2014 || Adam Roach || Increased connecting timer from 5 seconds to 10 seconds (see {{bug|1037979}})<br />
|-<br />
| Wed Jul 16 14:57:15 CDT 2014 || Adam Roach || Added two new channel types for mobile and standalone clients<br />
|-<br />
| Fri Jul 18 12:01:12 CDT 2014 || Rémy Hubscher || Change the Transition paragraph with last decisions.<br />
|}<br />
<br />
== Loop Server API Changes ==<br />
<br />
=== Modified API Calls ===<br />
The following existing API calls need to be enhanced to accommodate the new functionality required for MVP. Note that these changes are intended to be strictly backwards compatible with the existing 1.0 API: all changes to existing request formats are in the form of new optional fields, and all changes to existing response formats are new fields in existing structures. These new fields are indicated in bold below.<br />
<br />
These changes assume that the [http://docs.services.mozilla.com/loop/apis.html current API documentation] is an accurate as-built description. In particular, we assume that the following statement is true: "You can currently authenticate by sending a valid Firefox Accounts assertion or a valid Hawk session," where "valid Firefox Accounts assertion" includes the MSISDN-based assertions generated by the MSISDN verification server.<br />
<br />
==== POST /call-url ====<br />
To facilitate the display of a "friendly name" to the calling user, the link generator needs to be able to include this information to be associated with the link. See {{bug|1025779}}<br />
<br />
POST /call-url HTTP/1.1<br />
Accept: application/json<br />
Content-Type: application/json; charset=utf-8<br />
Authorization: ''<authentication information>''<br />
{<br />
"callerId": "alexis@example.com",<br />
"expiresIn": 5,<br />
'''"issuer": "Adam Roach"'''<br />
}<br />
<br />
New Parameters:<br />
* '''issuer''': Friendly name, if any, configured by person who generated the URL. If no name is configured, this field will be omitted.<br />
<br />
==== POST /calls/{token} ====<br />
Both call initiator and call recipient need to receive call setup progress information. See "WebSockets Connection for Call Progress", below for associated bugs.<br />
<br />
POST /calls/FfzMMm2hSlP HTTP/1.1<br />
'''Content-Type: application/json; charset=utf-8'''<br />
Accept: application/json<br />
<br />
'''{'''<br />
'''"callType": "audio-video"'''<br />
'''}'''<br />
<br />
New Parameters:<br />
* '''callType''': Specifies the type of media the remote party intends to send. Valid values are "audio" or "audio-video".<br />
<br />
HTTP/1.1 200 OK<br />
Access-Control-Allow-Methods: GET,POST<br />
Access-Control-Allow-Origin: https://localhost:3000<br />
Content-Type: application/json; charset=utf-8<br />
<br />
{<br />
"apiKey": "44700952",<br />
"sessionId": "2_MX40NDcwMDk1Mn5-V2VkIE1hciA",<br />
"sessionToken": "T1==cGFydG5lcl9pZD00NDcwMD",<br />
"callId": "1afeb4340d995938248ce7b3e953fe80",<br />
'''"progressURL": "wss://loop214.services.mozilla.com:443",'''<br />
'''"calleeId": "Adam Roach"'''<br />
}<br />
<br />
New parameters:<br />
* '''progressURL''': WebSockets URL the client needs to connect to in order to receive call setup progress information and control call setup.<br />
* '''calleeId''': The name of the URL issuer that the caller is calling.<br />
<br />
==== GET /calls?version=<version> ====<br />
<br />
Changes are required to support three features:<br />
# Incoming calls need to display the name of the calling user (See [https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/#call-incoming UX design] and {{bug|1025881}})<br />
# Incoming calls need to display whether the calling user is going to send audio and video, or audio only. (See [https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/#call-incoming UX design] and {{bug|1025883}})<br />
# Both call initiator and call recipient need to receive call setup progress information. See "WebSockets Connection for Call Progress", below for associated bugs.<br />
# The called party needs to be able to reject an incoming call and revoke the associated URL; see [https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/#call-incoming UX design] and {{bug|1026494}}.<br />
<br />
GET /calls?version=1234 HTTP/1.1<br />
Accept: application/json<br />
Authorization: ''<authentication information>''<br />
<br />
HTTP/1.1 200 OK<br />
Content-Type: application/json; charset=utf-8<br />
<br />
{<br />
"calls": [<br />
{<br />
"apiKey": "13245678",<br />
"sessionId": "2_MX40NDcwMDk1Mn5",<br />
"sessionToken": "T1==cGFydG5lcl",<br />
"callId": "1afeb4340d995938248ce7b3e953fe80",<br />
'''"callType": "audio-video",'''<br />
'''"callerId": "alexis@example.com",'''<br />
'''"progressURL": "wss://loop214.services.mozilla.com:443",'''<br />
'''"state": "init"'''<br />
'''"callUrl": "http://localhost:5000/calls/FfzMMm2hSP"''' ''// optional''<br />
'''"urlCreationDate": "1403300282"''' ''//optional''<br />
}<br />
]<br />
}<br />
<br />
New Parameters:<br />
* '''callType''': Specifies the type of media the remote party intends to send. Valid values are "audio" or "audio-video".<br />
* '''callerId''': Identity of calling party. Can be email address, E.164-format phone number (must start with a "+" character), or memento indicated by user at link generation time.<br />
* '''progressURL''': WebSockets URL the client needs to connect to in order to receive call setup progress information and control call setup.<br />
* '''state''': Call setup state for the incoming call (see [[#WebSockets Connection for Call Progress]], below).<br />
* '''callUrl''': For link-clicker calls, the URL that was used to initiate this call. This is used to revoke the URL at call alerting time, if necessary.<br />
* '''urlCreationDate''': For link-clicker calls, the date on which the link was generated.<br />
<br />
=== New API Calls ===<br />
In addition to the changes detailed above, we need the following API methods to be added so as to facilitate the functionality required for MVP.<br />
<br />
==== GET /call/{token} ====<br />
This is used for ''outgoing'' calls initiated by the ''standalone client'' only.<br />
<br />
To facilitate the display of a "friendly name" to the calling user, the link clicker needs to receive this information before committing to the call. See {{bug|1025779}}. This is done by retrieving the called-party name from the Loop server using a GET request.<br />
<br />
GET /call/FfzMMm2hSlP<br />
Accept: application/json<br />
<br />
HTTP/1.1 200 OK<br />
Access-Control-Allow-Methods: GET,POST<br />
Access-Control-Allow-Origin: http://localhost:3000<br />
Content-Type: application/json; charset=utf-8<br />
<br />
{<br />
calleeName: "Adam Roach"<br />
calleeId: "adam@nostrum.com" ''// optional, only present if link generator is logged in''<br />
}<br />
<br />
For security purposes, it is important that these GET requests honor URL revocation -- if a URL has been revoked, attempts to get the called party name must fail.<br />
<br />
==== POST /calls ====<br />
''New Operation'' -- see {{bug|1015085}} and {{bug|1033573}}<br />
<br />
POST /calls HTTP/1.1<br />
Accept: application/json<br />
Authorization: ''<authentication information>''<br />
<br />
{<br />
"calleeId": [<br />
"adam@example.com",<br />
"+12145551234"<br />
],<br />
"callType": "audio-video",<br />
"channel": "nightly"<br />
}<br />
<br />
* '''calleeId''': Array of identities the calling party has for the user they are trying to reach. This is a list of one or more identities of the following types:<br />
** ''Phone numbers'': fully-qualified (i.e., starting with "+") [http://en.wikipedia.org/wiki/E.164 E.164]-format phone number.<br />
** ''Email addresses''<br />
* '''callType''': Specifies the type of media the remote party intends to send. Valid values are "audio" or "audio-video".<br />
* '''channel''': The release channel of the calling client; this is the value from the <tt>app.update.channel</tt> pref, and can be any one of:<br />
** ''release''<br />
** ''esr''<br />
** ''beta''<br />
** ''aurora''<br />
** ''nightly''<br />
** ''default'' -- I believe this value indicates that the browser is not configured for automatic updates.<br />
** ''mobile'' -- used for the Firefox OS Mobile client<br />
** ''standalone'' -- used for the standalone / "link-clicker" client<br />
<br />
HTTP/1.1 200 OK<br />
Access-Control-Allow-Methods: GET,POST<br />
Access-Control-Allow-Origin: https://localhost:3000<br />
Content-Type: application/json; charset=utf-8<br />
<br />
{<br />
"apiKey": "44700952",<br />
"sessionId": "2_MX40NDcwMDk1Mn5-V2VkIE1hciA",<br />
"sessionToken": "T1==cGFydG5lcl9pZD00NDcwMD",<br />
"callId": "1afeb4340d995938248ce7b3e953fe80",<br />
"progressURL": "wss://loop214.services.mozilla.com:443",<br />
"calleeId": "adam@example.com"<br />
}<br />
<br />
The response body is interepreted in the same way as for POST /call/{token}<br />
<br />
==== PUT /call-url/{token} ====<br />
''New Operation'' -- In discussions with Darrin, it has been assumed that the link generator can update the information associated with the link at a later time.<br />
<br />
This operation allows the properties associated with the given token to be modified.<br />
<br />
PUT /call-url/FfzMMm2hSlP HTTP/1.1<br />
Accept: application/json<br />
Content-Type: application/json; charset=utf-8<br />
Authorization: <authentication information><br />
{<br />
"callerId": "remy@example.com",<br />
"expiresIn": 250,<br />
"issuer": "Mark Banner"<br />
}<br />
<br />
HTTP/1.1 200 OK<br />
Content-Type: application/json; charset=utf-8<br />
<br />
{<br />
"expiresAt": 390388<br />
}<br />
<br />
=== Deprecated API Calls ===<br />
The following existing operations are deprecated in favor of the WebSockets interface described below. They may be removed in a future version of the API:<br />
* GET /calls/id/{callId}<br />
* DELETE /calls/id/{callId}<br />
<br />
== WebSockets Connection for Call Progress ==<br />
Several MVP use cases necessitate the ability to communicate information about the state of a call during its setup phase from the server to the clients, as well as a means to convey call setup control information from the clients to the server. These use cases include:<br />
* Caller informed when remote party is alerting ({{bug|1015074}}, {{bug|1015087}})<br />
* Caller informed when call setup fails ({{bug|1000240}}, {{bug|1000186}})<br />
* Caller informed when remote party answers call (ahead of opentok signaling)<br />
* Caller needs to be able to cancel a call ({{bug|1000178}}, {{bug|1019465}})<br />
* Called user informed when call is canceled ({{bug|1000178}}, {{bug|1019465}})<br />
* Called user informed when call is answered/rejected on another device ({{bug|1013382}})<br />
<br />
To facilitate these operations in a timely fashion, the client will establish a WebSockets connection to the resource indicated in the "progressURL" when it receives it. The client never closes this connection; that is the responsibility of the server. The times at which the server closes the connection are detailed below. If the server sees the client close the connection, it assumes that the client has failed, and informs the other party of such call failure.<br />
<br />
For forward compatibility purposes:<br />
* Unknown fields in messages are ignored<br />
* Unknown message types received by the client (indicating an earlier release) result in the client sending an "error" message ({"messageType": "error", "reason": "unknown message"}). The call setup should continue.<br />
* Unknown message types received by the server result in the server sending an "error" message (as above); however, since this situation can only arise due to a misimplemented client or an out-of-date server, it results in call setup failure. The server closes the connection.<br />
<br />
<br />
=== Call Setup States ===<br />
Call setup goes through the following states:<br />
[[File:call-setup-state.png|center|Call Setup State Diagram]]<br />
<br />
=== Call Progress Protocol === <br />
<br />
==== Initial Connection (hello) ====<br />
<br />
Upon connecting to the server, the client sends an immediate "hello" message, which serves two purposes: it identifies the call that the progress channel corresponds to (using the "callId"), as well as authenticating the connecting user, so that they can be verified to be authorized to view/impact the call setup state.<br />
<br />
Note that the callId with which this connection is to be associated is encoded as a component of the WSS URL.<br />
<br />
'''UA -> Server'''<br />
{<br />
"messageType": "hello",<br />
"callId: "''<call identifier>''",<br />
"auth": "''<authentication information>''"<br />
}<br />
<br />
<br />
* '''auth''': Information to authenticate the user, so that they can be verified to be authorized to access call setup information.<br />
** For authenticated users, the value that would ordinarily be included in the "Authorization" header field.<br />
** For "link clicker" users, this is the token from the "callback" URL. '''''Open Issue:''' Alternately, we could add a Hawk token to the "POST /call/..." response, if that would be easier to implement''<br />
<br />
If the hello is valid (the callId is known, the auth information is valid, and the authenticated user is a party to the call), then the server responds with a "hello." This "hello" includes the current call setup state.<br />
<br />
'''Server -> UA'''<br />
{<br />
"messageType": "hello",<br />
"state": "alerting"<br />
// may contain "reason" field for certain states.<br />
}<br />
<br />
* '''state''': See states in "progress", below.<br />
<br />
If the hello is invalid for any reason, then the server sends an "error" message, as follows. It then closes the connection.<br />
<br />
'''Server -> UA'''<br />
{<br />
"messageType": "error",<br />
"reason": "unknown callId"<br />
}<br />
<br />
* '''reason''': The reason the hello was rejected:<br />
** ''unknown callId''<br />
** ''invalid authentication'' - The auth information was not valid<br />
** ''unauthorized'' - The auth information was valid, but did not match the indicated callId<br />
<br />
==== Call Progress State Change (progress) ====<br />
<br />
The server informs users of the current state of call setup. The state sent to both parties ''is always the same state''. So, for example, when a user rejects a call, he will receive a "progress" message with a state of "terminated" and a reason of "rejected."<br />
<br />
'''Server -> UA'''<br />
{<br />
"messageType": "progress",<br />
"state": "alerting"<br />
// may contain optional "reason" field for certain events.<br />
}<br />
<br />
Defined states are:<br />
* '''init''': The call is starting, and the remote party is not yet being alerted.<br />
* '''alerting''': The called party is being alerted (triggered by remote party sending a "hello" message).<br />
* '''terminated''': The call is no longer being set up. After sending a "terminated" message, the server closes the WebSockets connection. This message will include a "reason" field with one of the reason values described below.<br />
* '''connecting''': The called party has indicated that he has answered the call, but the media is not yet confirmed<br />
* '''half-connected''': One of the two parties has indicated successful media set up, but the other has not yet.<br />
* '''connected''': Both endpoints have reported successfully establishing media. After sending a "connected" message, the server closes the WebSockets connection.<br />
<br />
==== Client Action (action) ====<br />
<br />
During call setup, clients send progress information about their own state so that it can be reflected in the call state.<br />
<br />
'''UA -> Server'''<br />
{<br />
"messageType": "action",<br />
"event": "accept"<br />
// May contain "reason" field for certain events<br />
}<br />
<br />
Defined event types are:<br />
* '''accept''': Only sent by called party. The user has answered this call. This is sent before the called party attempts to set up the media.<br />
* '''media-up''': Sent by both parties. Communications have been successfully established.<br />
* '''terminate''': Sent by both parties. Ends attempt to set up call. Includes a "reason" field with one of values detailed below.<br />
<br />
=== Termination Reasons ===<br />
The following reasons appear in "action"/"terminate" and "progress"/"terminated" messages. The "√" columns indicate whether the indicated element is permitted to generate the reason. When generated a "terminated" message as the result of receiving a "terminate" action from either client, the server will copy the reason code from the "terminate" action message into all resulting "terminated" progress messages, ''even if it does not recognize the reason code''.<br />
<br />
To provide for forwards compatibility, clients must be prepared to process "terminated" progress messages with unknown reason codes. The reaction to this situation should be the display of a generic "call setup failed" message.<br />
<br />
If the server receives an action of "terminate" with a reason it does not recognize, it copies that reason into the resulting "terminated" message.<br />
<br />
{| class="wikitable"<br />
! Reason !! Caller !! Callee !! Server !! Note<br />
|-<br />
| reject || || √ || || The called user has declined the call.<br />
|-<br />
| busy || || √ || || The user is logged in, but cannot answer the call due to some current state (e.g., DND, in another call)<br />
|-<br />
| timeout || || √ || √ || The call setup has timed out (The called party's client has exceeded the amount of time it is willing to alert the user, or one of the server's timers expired)<br />
|-<br />
| cancel || √ || || || The calling party has cancelled a pending call.<br />
|-<br />
| media-fail || || √ || || The called user has declined the call<br />
|-<br />
| unregistered || || || √ || The called user does not have any registered push server endpoints.<br />
|-<br />
| user-unknown || || || √ || The indicated user id does not exist.<br />
|-<br />
| connection-failure || || || √ || The other user's WSS connection closed unexpectedly<br />
|-<br />
| answered-elsewhere || || || √ || When the called user has more than one device alerting at the same time and accepts on one device, a "terminated" with this reason code is sent to all other devices that had been alerting.<br />
|}<br />
<br />
=== Timer Supervision ===<br />
==== Server Timers ====<br />
<br />
The server uses three timers to ensure that the call created by a setup attempt is cleaned up in a timely fashion.<br />
<br />
===== Supervisory Timer =====<br />
After responding to a <tt>POST /call/{token}</tt> or <tt>POST /call/user</tt> message, the server starts a supervisory timer of 10 seconds.<br />
* If the calling user does not connect and send a "hello" in this time period, the server considers the call to be failed. The called user, if connected, will receive a "progress"/"terminated" message with a reason of "timeout".<br />
* If the called user does not connect and send a "hello" in this time period, the server considers the call to be failed. The calling user, if connected, will receive a "progress"/"terminated" message with a reason of "timeout".<br />
<br />
===== Ringing Timer =====<br />
Upon receiving a "hello" from the called user, the server starts a ringing timer of 30 seconds. If the called user does not send an "accept" message in this time period, then both parties will receive a "progress"/"terminated" message with a reason of "timeout".<br />
<br />
===== Connection Timer =====<br />
Upon receiving an "accept" from the called user, the server starts a connection timer of 10 seconds. If the call setup state does not reach "connected" in this time period, then both parties will receive a "progress"/"terminated" message with a reason of "timeout".<br />
<br />
==== Client Timers ====<br />
===== Response Timer =====<br />
Every client message triggers a response from the server: "hello" results in "hello" or "error"; and "action" will always cause a corresponding "progress" message to be sent. When the client sends a message, it sets a timer for 5 seconds. If the server does not respond in that time period, it disconnects from the server and considers the call failed.<br />
<br />
===== Media Setup Timer =====<br />
After sending a "media-up" action, the client sets a timer for 5 seconds. If the server does not indicate that the call setup has entered the "connected" state before the timer expires, the client disconnects from the server and considers the call failed.<br />
<br />
===== Alerting Timer =====<br />
We may wish to let users configure the maximum amount of time the call is allowed to ring (up to 30 seconds) before it considers it unanswered. This timer would start as soon as user alerting begins. If it expires before the call is set up, then the called party sends a "action"/"disconnect" message with a reason of "timeout."<br />
<br />
=== Network Resource Usage ===<br />
Although there may be some marginal benefits to keeping the WebSockets connection during the course of an ongoing call, the current design does not do so (however, it leaves open the possibility of doing so in the future, if necessary). This trade-off is made out of concern for scalability: at present, the servers on which the Loop Server are being deployed have hard connection limits that are not conducive to connections lasting as long as ordinary conversations do. Note, however, that the decision to distribute the WSS URLs as part of call setup is being done, in part, to facilitate scaling the number of servers up to arbitrarily large cluster sizes.<br />
<br />
The server timers, described below, make it impossible for any of these connections to stay open for longer than 45 seconds. In practice, unanswered calls may result in connections for as long as 30 seconds; although these will typically be abandoned by the calling user well before this time. Answered calls will be anywhere in the range from 0 to 30 seconds.<br />
<br />
{| class="wikitable"<br />
! Percentage of Calls Answered or Rejected by Callee<br />
| 45% <!-- http://www.fhwa.dot.gov/ohim/hang_ups.htm --><br />
|-<br />
! Average Ring Time of Answered or Rejected Calls<br />
| 8.5 seconds <!-- http://tawkon.com/blog/en/ring_time --><br />
|-<br />
! Percentage of Calls Abandoned by Caller or Timed Out<br />
| 55% <!-- http://www.fhwa.dot.gov/ohim/hang_ups.htm --><br />
|-<br />
! Average ring time of abandoned calls<br />
| 10 seconds <!-- from memory: citation needed --><br />
|-<br />
! Overall average ring time<br />
| 9.325 seconds <!-- 8.5 * 45% + 10 * 55% --><br />
|-<br />
! Offered traffic<br />
| 0.1 Erlang per subscriber<br />
|-<br />
! Average call hold time<br />
| 90 seconds<br />
|-<br />
! Average Websockets Connections per Call Setup<br />
| 2.25 (1 caller + 1 callee + 0.25 "other callee device")<br />
|}<br />
<br />
Although the application of circuit-switched techniques to a monolithic VoIP setup is not completely appropriate, it's a good first-order approximation until we have better information about actual calling patterns. To that end, we will be calculating Busy Hour Call Attempts as ''BHCA = offered traffic * 3600 / avg hold time''. This is likely to be far more conservative than actual calling patterns for Loop.<br />
<br />
The following projections conservatively assume that short term-usage will approach 100% saturation of Nightly users, while long-term usage will significantly exceed 100% of total Firefox users.<br />
<br />
==== Short-Term Projection ====<br />
<br />
{| class="wikitable"<br />
! Systemwide Users<br />
| 100,000<br />
|-<br />
! Busy Hour Call Attempts<br />
| 400,000 <!-- 100,000 * 0.1 * 3600 / 90 --><br />
|-<br />
! Peak call attempts per second<br />
| 111 <!-- 400,000 / 3600 --><br />
|-<br />
! Maximum Simultaneous Connections<br />
| 2,329 <!-- 111 * 9.325 * 2.25 --><br />
|}<br />
<br />
==== Long-Term Projection ====<br />
{| class="wikitable"<br />
! Systemwide Users<br />
| 500,000,000<br />
|-<br />
! Busy Hour Call Attempts<br />
| 2,000,000,000 <!-- 500,000,000 * 0.1 * 3600 / 90 --><br />
|-<br />
! Peak call attempts per second<br />
| 555,555 <!-- 2,000,000,000 / 3600 --><br />
|-<br />
! Maximum Simultaneous Connections<br />
| 11,656,238 <!-- 555,555 * 9.325 * 2.25 --><br />
|}<br />
<br />
== URL Generation, Tracking, and Revocation ==<br />
During the UX discussions for MVP, several issues were raised that necessitate moving away from the model in which all state is encoded in the URLs themselves. In particular:<br />
* The length of the issued URLs were deemed too cumbersome for users to easily deal with (see {{bug|1026426}}).<br />
* A need to issue a URL with incomplete or incorrect "caller id" information, with the option to complete or correct the information at a later point in time.<br />
<br />
Further, there are several use cases which, while not formally requirements yet, are likely to be required in future product releases:<br />
* "Vanity" URLs, where users are allowed to select the "token" portion of their URL (e.g., "https://call.mozilla.com/adam-roach/")<br />
* Single-use URLs, implemented by adjusting the expiration time on a URL to be some very short period of time after its first use.<br />
* Extending or shortening the lifetime of an already-issued URL.<br />
<br />
These requirements have the following implications:<br />
# The URL creation call will now create state in the server -- equivalent to the state currently being encoded in the URLs -- and issue a short token that is used as a key to look up that information.<br />
# We need a new operation that allows updating the information associated with a URL.<br />
# We no longer need a revocation table, as URL revocation can be effected by removing the token from the table of issued tokens.<br />
# Except for the new operation that allows modification of an existing token, this has no impact the client behavior.<br />
<br />
=== Token Length and Generation ===<br />
The token portion of "call me" URLs serve as bearer tokens that represent both addressing information for the user as well as authorization to call that user. While making them cryptographically strong against guessing is likely overkill, we do want to make guessing valid tokens to be sufficiently difficult that they cannot be trivially used for the purpose of generating large volumes of [http://en.wikipedia.org/wiki/VoIP_spam unsolicited calls].<br />
<br />
Assuming a user base of ~500M users (29 bits), generating one URL a day, each with an expiration of one month (5 bits), we're using 34 bits of information for uniqueness. Pulling a "reasonably large" value out of thin air, it seems that requiring an adversary to attempt over a billion (30 bits) call attempts before successfully guessing a valid token would be a reasonable deterrent.<br />
<br />
Given these assumptions, then, 64 bits of information in the token should be sufficient for both addressing and for deterring unwanted calls. If Base64 encoding is used, this yields tokens that are 11 characters long.<br />
<br />
Note, however, that the "vanity URLs" mentioned above may well be significantly longer than these tokens -- the underlying data structures should accommodate significantly longer strings.<br />
<br />
=== Transition ===<br />
<br />
MLP and MVP version are not compatible.<br />
<br />
Since there is only nightly users on MLP (Loop 0.5.0) and that it only handle call-url, all old call-url will stop working and defined as expired.<br />
<br />
During the transition from MLP to MVP all old user will have to recreate call-url in order to get the new format.<br />
<br />
The initial plan was to have both URLs working during a month to smooth the transition but it doesn't worth it with regards to the number of existing call-urls.<br />
<br />
== Advanced Call Handling ==<br />
''This section is not yet completed''<br />
* Multiple incoming calls<br />
* Call forking<br />
<br />
== Accounted calling ==<br />
''This section is not yet completed''<br />
<br />
== Identity ==<br />
''This section is not yet completed''<br />
See http://dev.w3.org/2011/webrtc/editor/webrtc.html#identity</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Architecture/MVP&diff=1006139Loop/Architecture/MVP2014-08-15T18:30:46Z<p>Dmose: /* Initial Connection (hello) */</p>
<hr />
<div>'''''Note that the changes proposed here are preliminary, and will be updated as the result of conversations with interested parties.'''''<br />
<br />
{| class="wikitable"<br />
|-<br />
! Date !! Author !! Changes<br />
|-<br />
| Tue Jun 17 11:38:10 EDT 2014 || Adam Roach || Added call ids to WSS URLs; added <tt>GET /call/{token}</tt>; added callType to call initiation call<br />
|-<br />
| Fri Jun 20 16:34:31 CDT 2014 || Adam Roach || Added urlDate to <tt>GET /calls?version=<version></tt><br />
|-<br />
| Tue Jun 24 12:08:55 CDT 2014 || Adam Roach || Added 'state' to <tt>GET /calls?version=<version></tt>; Added 'calleeId' to <tt>GET /call/{token}</tt><br />
|-<br />
| Thu Jun 26 15:57:55 UTC+1 2014 || Alexis Métaireau || Changed WSS URLs so they are just domains + ports.<br />
|-<br />
| Mon Jun 30 18:32:31 UTC+1 2014 || Rémy Hubscher || Add missing calleeId information.<br />
|-<br />
| Thu Aug 01 14:52:00 UTC+1 2014 || Alexis Métaireau || replace POST by PUT for /call-url/{token} <br />
|-<br />
| Wed Jul 2 15:20:40 CDT 2014 || Adam Roach || Added "channel" parameter to <tt>POST /calls</tt> (see {{bug|1033573}})<br />
|-<br />
| Mon Jul 14 11:58:01 CDT 2014 || Adam Roach || Increased connecting timer from 5 seconds to 10 seconds (see {{bug|1037979}})<br />
|-<br />
| Wed Jul 16 14:57:15 CDT 2014 || Adam Roach || Added two new channel types for mobile and standalone clients<br />
|-<br />
| Fri Jul 18 12:01:12 CDT 2014 || Rémy Hubscher || Change the Transition paragraph with last decisions.<br />
|}<br />
<br />
== Loop Server API Changes ==<br />
<br />
=== Modified API Calls ===<br />
The following existing API calls need to be enhanced to accommodate the new functionality required for MVP. Note that these changes are intended to be strictly backwards compatible with the existing 1.0 API: all changes to existing request formats are in the form of new optional fields, and all changes to existing response formats are new fields in existing structures. These new fields are indicated in bold below.<br />
<br />
These changes assume that the [http://docs.services.mozilla.com/loop/apis.html current API documentation] is an accurate as-built description. In particular, we assume that the following statement is true: "You can currently authenticate by sending a valid Firefox Accounts assertion or a valid Hawk session," where "valid Firefox Accounts assertion" includes the MSISDN-based assertions generated by the MSISDN verification server.<br />
<br />
==== POST /call-url ====<br />
To facilitate the display of a "friendly name" to the calling user, the link generator needs to be able to include this information to be associated with the link. See {{bug|1025779}}<br />
<br />
POST /call-url HTTP/1.1<br />
Accept: application/json<br />
Content-Type: application/json; charset=utf-8<br />
Authorization: ''<authentication information>''<br />
{<br />
"callerId": "alexis@example.com",<br />
"expiresIn": 5,<br />
'''"issuer": "Adam Roach"'''<br />
}<br />
<br />
New Parameters:<br />
* '''issuer''': Friendly name, if any, configured by person who generated the URL. If no name is configured, this field will be omitted.<br />
<br />
==== POST /calls/{token} ====<br />
Both call initiator and call recipient need to receive call setup progress information. See "WebSockets Connection for Call Progress", below for associated bugs.<br />
<br />
POST /calls/FfzMMm2hSlP HTTP/1.1<br />
'''Content-Type: application/json; charset=utf-8'''<br />
Accept: application/json<br />
<br />
'''{'''<br />
'''"callType": "audio-video"'''<br />
'''}'''<br />
<br />
New Parameters:<br />
* '''callType''': Specifies the type of media the remote party intends to send. Valid values are "audio" or "audio-video".<br />
<br />
HTTP/1.1 200 OK<br />
Access-Control-Allow-Methods: GET,POST<br />
Access-Control-Allow-Origin: https://localhost:3000<br />
Content-Type: application/json; charset=utf-8<br />
<br />
{<br />
"apiKey": "44700952",<br />
"sessionId": "2_MX40NDcwMDk1Mn5-V2VkIE1hciA",<br />
"sessionToken": "T1==cGFydG5lcl9pZD00NDcwMD",<br />
"callId": "1afeb4340d995938248ce7b3e953fe80",<br />
'''"progressURL": "wss://loop214.services.mozilla.com:443",'''<br />
'''"calleeId": "Adam Roach"'''<br />
}<br />
<br />
New parameters:<br />
* '''progressURL''': WebSockets URL the client needs to connect to in order to receive call setup progress information and control call setup.<br />
* '''calleeId''': The name of the URL issuer that the caller is calling.<br />
<br />
==== GET /calls?version=<version> ====<br />
<br />
Changes are required to support three features:<br />
# Incoming calls need to display the name of the calling user (See [https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/#call-incoming UX design] and {{bug|1025881}})<br />
# Incoming calls need to display whether the calling user is going to send audio and video, or audio only. (See [https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/#call-incoming UX design] and {{bug|1025883}})<br />
# Both call initiator and call recipient need to receive call setup progress information. See "WebSockets Connection for Call Progress", below for associated bugs.<br />
# The called party needs to be able to reject an incoming call and revoke the associated URL; see [https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/#call-incoming UX design] and {{bug|1026494}}.<br />
<br />
GET /calls?version=1234 HTTP/1.1<br />
Accept: application/json<br />
Authorization: ''<authentication information>''<br />
<br />
HTTP/1.1 200 OK<br />
Content-Type: application/json; charset=utf-8<br />
<br />
{<br />
"calls": [<br />
{<br />
"apiKey": "13245678",<br />
"sessionId": "2_MX40NDcwMDk1Mn5",<br />
"sessionToken": "T1==cGFydG5lcl",<br />
"callId": "1afeb4340d995938248ce7b3e953fe80",<br />
'''"callType": "audio-video",'''<br />
'''"callerId": "alexis@example.com",'''<br />
'''"progressURL": "wss://loop214.services.mozilla.com:443",'''<br />
'''"state": "init"'''<br />
'''"callUrl": "http://localhost:5000/calls/FfzMMm2hSP"''' ''// optional''<br />
'''"urlCreationDate": "1403300282"''' ''//optional''<br />
}<br />
]<br />
}<br />
<br />
New Parameters:<br />
* '''callType''': Specifies the type of media the remote party intends to send. Valid values are "audio" or "audio-video".<br />
* '''callerId''': Identity of calling party. Can be email address, E.164-format phone number (must start with a "+" character), or memento indicated by user at link generation time.<br />
* '''progressURL''': WebSockets URL the client needs to connect to in order to receive call setup progress information and control call setup.<br />
* '''state''': Call setup state for the incoming call (see [[#WebSockets Connection for Call Progress]], below).<br />
* '''callUrl''': For link-clicker calls, the URL that was used to initiate this call. This is used to revoke the URL at call alerting time, if necessary.<br />
* '''urlCreationDate''': For link-clicker calls, the date on which the link was generated.<br />
<br />
=== New API Calls ===<br />
In addition to the changes detailed above, we need the following API methods to be added so as to facilitate the functionality required for MVP.<br />
<br />
==== GET /call/{token} ====<br />
This is used for ''outgoing'' calls initiated by the ''standalone client'' only.<br />
<br />
To facilitate the display of a "friendly name" to the calling user, the link clicker needs to receive this information before committing to the call. See {{bug|1025779}}. This is done by retrieving the called-party name from the Loop server using a GET request.<br />
<br />
GET /call/FfzMMm2hSlP<br />
Accept: application/json<br />
<br />
HTTP/1.1 200 OK<br />
Access-Control-Allow-Methods: GET,POST<br />
Access-Control-Allow-Origin: http://localhost:3000<br />
Content-Type: application/json; charset=utf-8<br />
<br />
{<br />
calleeName: "Adam Roach"<br />
calleeId: "adam@nostrum.com" ''// optional, only present if link generator is logged in''<br />
}<br />
<br />
For security purposes, it is important that these GET requests honor URL revocation -- if a URL has been revoked, attempts to get the called party name must fail.<br />
<br />
==== POST /calls ====<br />
''New Operation'' -- see {{bug|1015085}} and {{bug|1033573}}<br />
<br />
POST /calls HTTP/1.1<br />
Accept: application/json<br />
Authorization: ''<authentication information>''<br />
<br />
{<br />
"calleeId": [<br />
"adam@example.com",<br />
"+12145551234"<br />
],<br />
"callType": "audio-video",<br />
"channel": "nightly"<br />
}<br />
<br />
* '''calleeId''': Array of identities the calling party has for the user they are trying to reach. This is a list of one or more identities of the following types:<br />
** ''Phone numbers'': fully-qualified (i.e., starting with "+") [http://en.wikipedia.org/wiki/E.164 E.164]-format phone number.<br />
** ''Email addresses''<br />
* '''callType''': Specifies the type of media the remote party intends to send. Valid values are "audio" or "audio-video".<br />
* '''channel''': The release channel of the calling client; this is the value from the <tt>app.update.channel</tt> pref, and can be any one of:<br />
** ''release''<br />
** ''esr''<br />
** ''beta''<br />
** ''aurora''<br />
** ''nightly''<br />
** ''default'' -- I believe this value indicates that the browser is not configured for automatic updates.<br />
** ''mobile'' -- used for the Firefox OS Mobile client<br />
** ''standalone'' -- used for the standalone / "link-clicker" client<br />
<br />
HTTP/1.1 200 OK<br />
Access-Control-Allow-Methods: GET,POST<br />
Access-Control-Allow-Origin: https://localhost:3000<br />
Content-Type: application/json; charset=utf-8<br />
<br />
{<br />
"apiKey": "44700952",<br />
"sessionId": "2_MX40NDcwMDk1Mn5-V2VkIE1hciA",<br />
"sessionToken": "T1==cGFydG5lcl9pZD00NDcwMD",<br />
"callId": "1afeb4340d995938248ce7b3e953fe80",<br />
"progressURL": "wss://loop214.services.mozilla.com:443",<br />
"calleeId": "adam@example.com"<br />
}<br />
<br />
The response body is interepreted in the same way as for POST /call/{token}<br />
<br />
==== PUT /call-url/{token} ====<br />
''New Operation'' -- In discussions with Darrin, it has been assumed that the link generator can update the information associated with the link at a later time.<br />
<br />
This operation allows the properties associated with the given token to be modified.<br />
<br />
PUT /call-url/FfzMMm2hSlP HTTP/1.1<br />
Accept: application/json<br />
Content-Type: application/json; charset=utf-8<br />
Authorization: <authentication information><br />
{<br />
"callerId": "remy@example.com",<br />
"expiresIn": 250,<br />
"issuer": "Mark Banner"<br />
}<br />
<br />
HTTP/1.1 200 OK<br />
Content-Type: application/json; charset=utf-8<br />
<br />
{<br />
"expiresAt": 390388<br />
}<br />
<br />
=== Deprecated API Calls ===<br />
The following existing operations are deprecated in favor of the WebSockets interface described below. They may be removed in a future version of the API:<br />
* GET /calls/id/{callId}<br />
* DELETE /calls/id/{callId}<br />
<br />
== WebSockets Connection for Call Progress ==<br />
Several MVP use cases necessitate the ability to communicate information about the state of a call during its setup phase from the server to the clients, as well as a means to convey call setup control information from the clients to the server. These use cases include:<br />
* Caller informed when remote party is alerting ({{bug|1015074}}, {{bug|1015087}})<br />
* Caller informed when call setup fails ({{bug|1000240}}, {{bug|1000186}})<br />
* Caller informed when remote party answers call (ahead of opentok signaling)<br />
* Caller needs to be able to cancel a call ({{bug|1000178}}, {{bug|1019465}})<br />
* Called user informed when call is canceled ({{bug|1000178}}, {{bug|1019465}})<br />
* Called user informed when call is answered/rejected on another device ({{bug|1013382}})<br />
<br />
To facilitate these operations in a timely fashion, the client will establish a WebSockets connection to the resource indicated in the "progressURL" when it receives it. The client never closes this connection; that is the responsibility of the server. The times at which the server closes the connection are detailed below. If the server sees the client close the connection, it assumes that the client has failed, and informs the other party of such call failure.<br />
<br />
For forward compatibility purposes:<br />
* Unknown fields in messages are ignored<br />
* Unknown message types received by the client (indicating an earlier release) result in the client sending an "error" message ({"messageType": "error", "reason": "unknown message"}). The call setup should continue.<br />
* Unknown message types received by the server result in the server sending an "error" message (as above); however, since this situation can only arise due to a misimplemented client or an out-of-date server, it results in call setup failure. The server closes the connection.<br />
<br />
<br />
=== Call Setup States ===<br />
Call setup goes through the following states:<br />
[[File:call-setup-state.png|center|Call Setup State Diagram]]<br />
<br />
=== Call Progress Protocol === <br />
<br />
==== Initial Connection (hello) ====<br />
<br />
Upon connecting to the server, the client sends an immediate "hello" message, which serves two purposes: it identifies the call that the progress channel corresponds to (using the "callId"), as well as authenticating the connecting user, so that they can be verified to be authorized to view/impact the call setup state.<br />
<br />
Note that the callId with which this connection is to be associated is encoded as a component of the WSS URL.<br />
<br />
'''UA -> Server'''<br />
{<br />
"messageType": "hello",<br />
"auth": "''<authentication information>''"<br />
"callId: "''<call identifier>''"<br />
}<br />
<br />
<br />
* '''auth''': Information to authenticate the user, so that they can be verified to be authorized to access call setup information.<br />
** For authenticated users, the value that would ordinarily be included in the "Authorization" header field.<br />
** For "link clicker" users, this is the token from the "callback" URL. '''''Open Issue:''' Alternately, we could add a Hawk token to the "POST /call/..." response, if that would be easier to implement''<br />
<br />
If the hello is valid (the callId is known, the auth information is valid, and the authenticated user is a party to the call), then the server responds with a "hello." This "hello" includes the current call setup state.<br />
<br />
'''Server -> UA'''<br />
{<br />
"messageType": "hello",<br />
"state": "alerting"<br />
// may contain "reason" field for certain states.<br />
}<br />
<br />
* '''state''': See states in "progress", below.<br />
<br />
If the hello is invalid for any reason, then the server sends an "error" message, as follows. It then closes the connection.<br />
<br />
'''Server -> UA'''<br />
{<br />
"messageType": "error",<br />
"reason": "unknown callId"<br />
}<br />
<br />
* '''reason''': The reason the hello was rejected:<br />
** ''unknown callId''<br />
** ''invalid authentication'' - The auth information was not valid<br />
** ''unauthorized'' - The auth information was valid, but did not match the indicated callId<br />
<br />
==== Call Progress State Change (progress) ====<br />
<br />
The server informs users of the current state of call setup. The state sent to both parties ''is always the same state''. So, for example, when a user rejects a call, he will receive a "progress" message with a state of "terminated" and a reason of "rejected."<br />
<br />
'''Server -> UA'''<br />
{<br />
"messageType": "progress",<br />
"state": "alerting"<br />
// may contain optional "reason" field for certain events.<br />
}<br />
<br />
Defined states are:<br />
* '''init''': The call is starting, and the remote party is not yet being alerted.<br />
* '''alerting''': The called party is being alerted (triggered by remote party sending a "hello" message).<br />
* '''terminated''': The call is no longer being set up. After sending a "terminated" message, the server closes the WebSockets connection. This message will include a "reason" field with one of the reason values described below.<br />
* '''connecting''': The called party has indicated that he has answered the call, but the media is not yet confirmed<br />
* '''half-connected''': One of the two parties has indicated successful media set up, but the other has not yet.<br />
* '''connected''': Both endpoints have reported successfully establishing media. After sending a "connected" message, the server closes the WebSockets connection.<br />
<br />
==== Client Action (action) ====<br />
<br />
During call setup, clients send progress information about their own state so that it can be reflected in the call state.<br />
<br />
'''UA -> Server'''<br />
{<br />
"messageType": "action",<br />
"event": "accept"<br />
// May contain "reason" field for certain events<br />
}<br />
<br />
Defined event types are:<br />
* '''accept''': Only sent by called party. The user has answered this call. This is sent before the called party attempts to set up the media.<br />
* '''media-up''': Sent by both parties. Communications have been successfully established.<br />
* '''terminate''': Sent by both parties. Ends attempt to set up call. Includes a "reason" field with one of values detailed below.<br />
<br />
=== Termination Reasons ===<br />
The following reasons appear in "action"/"terminate" and "progress"/"terminated" messages. The "√" columns indicate whether the indicated element is permitted to generate the reason. When generated a "terminated" message as the result of receiving a "terminate" action from either client, the server will copy the reason code from the "terminate" action message into all resulting "terminated" progress messages, ''even if it does not recognize the reason code''.<br />
<br />
To provide for forwards compatibility, clients must be prepared to process "terminated" progress messages with unknown reason codes. The reaction to this situation should be the display of a generic "call setup failed" message.<br />
<br />
If the server receives an action of "terminate" with a reason it does not recognize, it copies that reason into the resulting "terminated" message.<br />
<br />
{| class="wikitable"<br />
! Reason !! Caller !! Callee !! Server !! Note<br />
|-<br />
| reject || || √ || || The called user has declined the call.<br />
|-<br />
| busy || || √ || || The user is logged in, but cannot answer the call due to some current state (e.g., DND, in another call)<br />
|-<br />
| timeout || || √ || √ || The call setup has timed out (The called party's client has exceeded the amount of time it is willing to alert the user, or one of the server's timers expired)<br />
|-<br />
| cancel || √ || || || The calling party has cancelled a pending call.<br />
|-<br />
| media-fail || || √ || || The called user has declined the call<br />
|-<br />
| unregistered || || || √ || The called user does not have any registered push server endpoints.<br />
|-<br />
| user-unknown || || || √ || The indicated user id does not exist.<br />
|-<br />
| connection-failure || || || √ || The other user's WSS connection closed unexpectedly<br />
|-<br />
| answered-elsewhere || || || √ || When the called user has more than one device alerting at the same time and accepts on one device, a "terminated" with this reason code is sent to all other devices that had been alerting.<br />
|}<br />
<br />
=== Timer Supervision ===<br />
==== Server Timers ====<br />
<br />
The server uses three timers to ensure that the call created by a setup attempt is cleaned up in a timely fashion.<br />
<br />
===== Supervisory Timer =====<br />
After responding to a <tt>POST /call/{token}</tt> or <tt>POST /call/user</tt> message, the server starts a supervisory timer of 10 seconds.<br />
* If the calling user does not connect and send a "hello" in this time period, the server considers the call to be failed. The called user, if connected, will receive a "progress"/"terminated" message with a reason of "timeout".<br />
* If the called user does not connect and send a "hello" in this time period, the server considers the call to be failed. The calling user, if connected, will receive a "progress"/"terminated" message with a reason of "timeout".<br />
<br />
===== Ringing Timer =====<br />
Upon receiving a "hello" from the called user, the server starts a ringing timer of 30 seconds. If the called user does not send an "accept" message in this time period, then both parties will receive a "progress"/"terminated" message with a reason of "timeout".<br />
<br />
===== Connection Timer =====<br />
Upon receiving an "accept" from the called user, the server starts a connection timer of 10 seconds. If the call setup state does not reach "connected" in this time period, then both parties will receive a "progress"/"terminated" message with a reason of "timeout".<br />
<br />
==== Client Timers ====<br />
===== Response Timer =====<br />
Every client message triggers a response from the server: "hello" results in "hello" or "error"; and "action" will always cause a corresponding "progress" message to be sent. When the client sends a message, it sets a timer for 5 seconds. If the server does not respond in that time period, it disconnects from the server and considers the call failed.<br />
<br />
===== Media Setup Timer =====<br />
After sending a "media-up" action, the client sets a timer for 5 seconds. If the server does not indicate that the call setup has entered the "connected" state before the timer expires, the client disconnects from the server and considers the call failed.<br />
<br />
===== Alerting Timer =====<br />
We may wish to let users configure the maximum amount of time the call is allowed to ring (up to 30 seconds) before it considers it unanswered. This timer would start as soon as user alerting begins. If it expires before the call is set up, then the called party sends a "action"/"disconnect" message with a reason of "timeout."<br />
<br />
=== Network Resource Usage ===<br />
Although there may be some marginal benefits to keeping the WebSockets connection during the course of an ongoing call, the current design does not do so (however, it leaves open the possibility of doing so in the future, if necessary). This trade-off is made out of concern for scalability: at present, the servers on which the Loop Server are being deployed have hard connection limits that are not conducive to connections lasting as long as ordinary conversations do. Note, however, that the decision to distribute the WSS URLs as part of call setup is being done, in part, to facilitate scaling the number of servers up to arbitrarily large cluster sizes.<br />
<br />
The server timers, described below, make it impossible for any of these connections to stay open for longer than 45 seconds. In practice, unanswered calls may result in connections for as long as 30 seconds; although these will typically be abandoned by the calling user well before this time. Answered calls will be anywhere in the range from 0 to 30 seconds.<br />
<br />
{| class="wikitable"<br />
! Percentage of Calls Answered or Rejected by Callee<br />
| 45% <!-- http://www.fhwa.dot.gov/ohim/hang_ups.htm --><br />
|-<br />
! Average Ring Time of Answered or Rejected Calls<br />
| 8.5 seconds <!-- http://tawkon.com/blog/en/ring_time --><br />
|-<br />
! Percentage of Calls Abandoned by Caller or Timed Out<br />
| 55% <!-- http://www.fhwa.dot.gov/ohim/hang_ups.htm --><br />
|-<br />
! Average ring time of abandoned calls<br />
| 10 seconds <!-- from memory: citation needed --><br />
|-<br />
! Overall average ring time<br />
| 9.325 seconds <!-- 8.5 * 45% + 10 * 55% --><br />
|-<br />
! Offered traffic<br />
| 0.1 Erlang per subscriber<br />
|-<br />
! Average call hold time<br />
| 90 seconds<br />
|-<br />
! Average Websockets Connections per Call Setup<br />
| 2.25 (1 caller + 1 callee + 0.25 "other callee device")<br />
|}<br />
<br />
Although the application of circuit-switched techniques to a monolithic VoIP setup is not completely appropriate, it's a good first-order approximation until we have better information about actual calling patterns. To that end, we will be calculating Busy Hour Call Attempts as ''BHCA = offered traffic * 3600 / avg hold time''. This is likely to be far more conservative than actual calling patterns for Loop.<br />
<br />
The following projections conservatively assume that short term-usage will approach 100% saturation of Nightly users, while long-term usage will significantly exceed 100% of total Firefox users.<br />
<br />
==== Short-Term Projection ====<br />
<br />
{| class="wikitable"<br />
! Systemwide Users<br />
| 100,000<br />
|-<br />
! Busy Hour Call Attempts<br />
| 400,000 <!-- 100,000 * 0.1 * 3600 / 90 --><br />
|-<br />
! Peak call attempts per second<br />
| 111 <!-- 400,000 / 3600 --><br />
|-<br />
! Maximum Simultaneous Connections<br />
| 2,329 <!-- 111 * 9.325 * 2.25 --><br />
|}<br />
<br />
==== Long-Term Projection ====<br />
{| class="wikitable"<br />
! Systemwide Users<br />
| 500,000,000<br />
|-<br />
! Busy Hour Call Attempts<br />
| 2,000,000,000 <!-- 500,000,000 * 0.1 * 3600 / 90 --><br />
|-<br />
! Peak call attempts per second<br />
| 555,555 <!-- 2,000,000,000 / 3600 --><br />
|-<br />
! Maximum Simultaneous Connections<br />
| 11,656,238 <!-- 555,555 * 9.325 * 2.25 --><br />
|}<br />
<br />
== URL Generation, Tracking, and Revocation ==<br />
During the UX discussions for MVP, several issues were raised that necessitate moving away from the model in which all state is encoded in the URLs themselves. In particular:<br />
* The length of the issued URLs were deemed too cumbersome for users to easily deal with (see {{bug|1026426}}).<br />
* A need to issue a URL with incomplete or incorrect "caller id" information, with the option to complete or correct the information at a later point in time.<br />
<br />
Further, there are several use cases which, while not formally requirements yet, are likely to be required in future product releases:<br />
* "Vanity" URLs, where users are allowed to select the "token" portion of their URL (e.g., "https://call.mozilla.com/adam-roach/")<br />
* Single-use URLs, implemented by adjusting the expiration time on a URL to be some very short period of time after its first use.<br />
* Extending or shortening the lifetime of an already-issued URL.<br />
<br />
These requirements have the following implications:<br />
# The URL creation call will now create state in the server -- equivalent to the state currently being encoded in the URLs -- and issue a short token that is used as a key to look up that information.<br />
# We need a new operation that allows updating the information associated with a URL.<br />
# We no longer need a revocation table, as URL revocation can be effected by removing the token from the table of issued tokens.<br />
# Except for the new operation that allows modification of an existing token, this has no impact the client behavior.<br />
<br />
=== Token Length and Generation ===<br />
The token portion of "call me" URLs serve as bearer tokens that represent both addressing information for the user as well as authorization to call that user. While making them cryptographically strong against guessing is likely overkill, we do want to make guessing valid tokens to be sufficiently difficult that they cannot be trivially used for the purpose of generating large volumes of [http://en.wikipedia.org/wiki/VoIP_spam unsolicited calls].<br />
<br />
Assuming a user base of ~500M users (29 bits), generating one URL a day, each with an expiration of one month (5 bits), we're using 34 bits of information for uniqueness. Pulling a "reasonably large" value out of thin air, it seems that requiring an adversary to attempt over a billion (30 bits) call attempts before successfully guessing a valid token would be a reasonable deterrent.<br />
<br />
Given these assumptions, then, 64 bits of information in the token should be sufficient for both addressing and for deterring unwanted calls. If Base64 encoding is used, this yields tokens that are 11 characters long.<br />
<br />
Note, however, that the "vanity URLs" mentioned above may well be significantly longer than these tokens -- the underlying data structures should accommodate significantly longer strings.<br />
<br />
=== Transition ===<br />
<br />
MLP and MVP version are not compatible.<br />
<br />
Since there is only nightly users on MLP (Loop 0.5.0) and that it only handle call-url, all old call-url will stop working and defined as expired.<br />
<br />
During the transition from MLP to MVP all old user will have to recreate call-url in order to get the new format.<br />
<br />
The initial plan was to have both URLs working during a month to smooth the transition but it doesn't worth it with regards to the number of existing call-urls.<br />
<br />
== Advanced Call Handling ==<br />
''This section is not yet completed''<br />
* Multiple incoming calls<br />
* Call forking<br />
<br />
== Accounted calling ==<br />
''This section is not yet completed''<br />
<br />
== Identity ==<br />
''This section is not yet completed''<br />
See http://dev.w3.org/2011/webrtc/editor/webrtc.html#identity</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Architecture&diff=967078Loop/Architecture2014-04-21T18:05:34Z<p>Dmose: /* Mozilla Technologies */</p>
<hr />
<div>= Design Goals =<br />
<br />
= Underlying Technologies =<br />
<br />
<br />
== Mozilla Technologies ==<br />
The Loop project relies on a number of other technologies under development within Mozilla. These include the following:<br />
<br />
* [[Media/WebRTC|WebRTC]]<br />
* [[Identity/Firefox Accounts|Firefox Accounts]]<br />
* [[WebAPI/SimplePush|Simple Push]] ({{bug|976789}})<br />
* [[Labs/SocialAPI|Social API]] ({{bug|971987}})<br />
* Marionette for automating client-side unit tests for build-system & tbpl ({{bug|976127}})<br />
<br />
== Third-Party Technologies ==<br />
* Node.js for Loop server, at least through production<br />
* webl10n for Localization ({{bug|972884}})<br />
* Mocha and Chai for client-side and standalone-page unit-testing framework ({{bug|976133}})<br />
* Not using client CSS toolkit at the moment (this may be revisited) ({{bug|976854}}, {{bug|976857}})<br />
<br />
== Open Issues ==<br />
These technology choices will be moved into one of the preceding sections as decisions are made:<br />
* Client MVC Library + associated libs ({{bug|975548}}) -- Probably Backbone<br />
* Client-driven end-to-end framework ({{bug|976114}})<br />
* Standalone-page end-to-end system testing framework ({{bug|976134}})<br />
<br />
= Network Architecture =<br />
[[File:loop-network.png|center|Network Diagram]]<br />
<br />
== Data Flows ==<br />
''Note that these are currently described in terms of a REST (or, at least, REST-like) interface on the Loop server. There is a significant possibility that this interface will evolve to be JSON objects exchanged on a WebSockets connection, similar to the network API exposed by the Simple Push Server.''<br />
<br />
=== User Connects ===<br />
[[File:loop-registration.png|center|Endpoint Registration]]<br />
<br />
=== User Generates "Call-Me" URL ===<br />
[[File:loop-create-call-me.png|center|"Call-Me" URL Generation]]<br />
<br />
=== Non-User Clicks "Call-Me" URL ===<br />
[[File:loop-use-call-me.png|center|"Call-Me" URL Activation]]<br />
<br />
=== User Rejects Call ===<br />
[[File:loop-reject-call.png|center|Call Rejected]]<br />
'''Note that the exact means by which Bob receives pending call status is still an open issue -- periodic polling is easy, but might not scale as well as we'd like. Long polling is a potential improvement, but also has scaling implications. Ultimately, websockets may be the preferred approach here.'''<br />
<br />
=== User Blocks "Call-Me" URL ===<br />
[[File:loop-block-url.png|center|"Call-Me" URL Blocked]]<br />
<br />
=== User Abandons Ringing Call ===<br />
[[File:loop-abandon-call.png|center|Calling User Abandons Ringing Call]]<br />
<br />
=== User Calls Other User ===<br />
[[File:loop-call-user.png|center|Loop user calls other Loop user]]<br />
<br />
= Client Architecture =<br />
<br />
== Address Book ==<br />
<br />
= Server Architecture =<br />
<br />
== Database Schema ==</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Architecture&diff=967077Loop/Architecture2014-04-21T18:04:35Z<p>Dmose: /* Third-Party Technologies */</p>
<hr />
<div>= Design Goals =<br />
<br />
= Underlying Technologies =<br />
<br />
<br />
== Mozilla Technologies ==<br />
The Loop project relies on a number of other technologies under development within Mozilla. These include the following:<br />
<br />
* [[Media/WebRTC|WebRTC]]<br />
* [[Identity/Firefox Accounts|Firefox Accounts]]<br />
* [[WebAPI/SimplePush|Simple Push]] ({{bug|976789}})<br />
* [[Labs/SocialAPI|Social API]] ({{bug|971987}})<br />
* Marionette for client side unit-testing framework ({{bug|976127}})<br />
<br />
== Third-Party Technologies ==<br />
* Node.js for Loop server, at least through production<br />
* webl10n for Localization ({{bug|972884}})<br />
* Mocha and Chai for client-side and standalone-page unit-testing framework ({{bug|976133}})<br />
* Not using client CSS toolkit at the moment (this may be revisited) ({{bug|976854}}, {{bug|976857}})<br />
<br />
== Open Issues ==<br />
These technology choices will be moved into one of the preceding sections as decisions are made:<br />
* Client MVC Library + associated libs ({{bug|975548}}) -- Probably Backbone<br />
* Client-driven end-to-end framework ({{bug|976114}})<br />
* Standalone-page end-to-end system testing framework ({{bug|976134}})<br />
<br />
= Network Architecture =<br />
[[File:loop-network.png|center|Network Diagram]]<br />
<br />
== Data Flows ==<br />
''Note that these are currently described in terms of a REST (or, at least, REST-like) interface on the Loop server. There is a significant possibility that this interface will evolve to be JSON objects exchanged on a WebSockets connection, similar to the network API exposed by the Simple Push Server.''<br />
<br />
=== User Connects ===<br />
[[File:loop-registration.png|center|Endpoint Registration]]<br />
<br />
=== User Generates "Call-Me" URL ===<br />
[[File:loop-create-call-me.png|center|"Call-Me" URL Generation]]<br />
<br />
=== Non-User Clicks "Call-Me" URL ===<br />
[[File:loop-use-call-me.png|center|"Call-Me" URL Activation]]<br />
<br />
=== User Rejects Call ===<br />
[[File:loop-reject-call.png|center|Call Rejected]]<br />
'''Note that the exact means by which Bob receives pending call status is still an open issue -- periodic polling is easy, but might not scale as well as we'd like. Long polling is a potential improvement, but also has scaling implications. Ultimately, websockets may be the preferred approach here.'''<br />
<br />
=== User Blocks "Call-Me" URL ===<br />
[[File:loop-block-url.png|center|"Call-Me" URL Blocked]]<br />
<br />
=== User Abandons Ringing Call ===<br />
[[File:loop-abandon-call.png|center|Calling User Abandons Ringing Call]]<br />
<br />
=== User Calls Other User ===<br />
[[File:loop-call-user.png|center|Loop user calls other Loop user]]<br />
<br />
= Client Architecture =<br />
<br />
== Address Book ==<br />
<br />
= Server Architecture =<br />
<br />
== Database Schema ==</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Architecture&diff=939823Loop/Architecture2014-02-26T00:17:23Z<p>Dmose: /* Open Issues */</p>
<hr />
<div>= Design Goals =<br />
<br />
= Underlying Technologies =<br />
<br />
<br />
== Mozilla Technologies ==<br />
The Loop project relies on a number of other technologies under development within Mozilla. These include the following:<br />
<br />
* [[Media/WebRTC|WebRTC]]<br />
* [[Identity/Firefox Accounts|Firefox Accounts]]<br />
* [[WebAPI/SimplePush|Simple Push]] ({{bug|976789}})<br />
* [[Labs/SocialAPI|Social API]] ({{bug|971987}})<br />
<br />
== Third-Party Technologies ==<br />
* Node.js for Loop server, at least through production<br />
<br />
== Open Issues ==<br />
These technology choices will be moved into one of the preceding sections as decisions are made:<br />
* Localization ({{bug|972884}})<br />
* Client MVC Library + associated libs ({{bug|975548}})<br />
* Client side unit-testing framework ({{bug|976127}})<br />
* Standalone-page unit-testing framework ({{bug|976133}})<br />
* Client-driven end-to-end framework ({{bug|976114}})<br />
* Standalone-page end-to-end system testing framework ({{bug|976134}})<br />
<br />
* Client CSS toolkit (if any) ({{bug|976854}})<br />
* Standalone-page CSS toolkit (if any) ({{bug|976857}})<br />
<br />
= Network Architecture =<br />
<br />
== Data Flows ==<br />
<br />
=== User Connects ===<br />
<br />
=== User Generates "Call-Me" URL ===<br />
<br />
=== Non-User Clicks "Call-Me" URL ===<br />
<br />
=== User Accepts Call ===<br />
<br />
=== User Rejects Call ===<br />
<br />
=== User Blocks "Call-Me" URL ===<br />
<br />
=== User Calls Other User ===<br />
<br />
= Client Architecture =<br />
<br />
== Address Book ==<br />
<br />
= Server Architecture =<br />
<br />
== Database Schema ==</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Architecture&diff=939804Loop/Architecture2014-02-25T23:46:40Z<p>Dmose: /* Open Issues */</p>
<hr />
<div>= Design Goals =<br />
<br />
= Underlying Technologies =<br />
<br />
<br />
== Mozilla Technologies ==<br />
The Loop project relies on a number of other technologies under development within Mozilla. These include the following:<br />
<br />
* [[Media/WebRTC|WebRTC]]<br />
* [[Identity/Firefox Accounts|Firefox Accounts]]<br />
* [[WebAPI/SimplePush|Simple Push]] ({{bug|976789}})<br />
* [[Labs/SocialAPI|Social API]] ({{bug|971987}})<br />
<br />
== Third-Party Technologies ==<br />
* Node.js for Loop server, at least through production<br />
<br />
== Open Issues ==<br />
These technology choices will be moved into one of the preceding sections as decisions are made:<br />
* Localization ({{bug|972884}})<br />
* Client MVC Library + associated libs ({{bug|975548}})<br />
* Client CSS toolkit (if any) ({{bug|975548}})<br />
* Standalone-page CSS toolkit (if any)<br />
* Client side unit-testing framework ({{bug|976127}})<br />
* Standalone-page unit-testing framework ({{bug|976133}})<br />
* Client-driven end-to-end framework ({{bug|976114}})<br />
* Standalone-page end-to-end system testing framework ({{bug|976134}})<br />
<br />
= Network Architecture =<br />
<br />
== Data Flows ==<br />
<br />
=== User Connects ===<br />
<br />
=== User Generates "Call-Me" URL ===<br />
<br />
=== Non-User Clicks "Call-Me" URL ===<br />
<br />
=== User Accepts Call ===<br />
<br />
=== User Rejects Call ===<br />
<br />
=== User Blocks "Call-Me" URL ===<br />
<br />
=== User Calls Other User ===<br />
<br />
= Client Architecture =<br />
<br />
== Address Book ==<br />
<br />
= Server Architecture =<br />
<br />
== Database Schema ==</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Architecture&diff=939803Loop/Architecture2014-02-25T23:45:43Z<p>Dmose: /* Underlying Technologies */</p>
<hr />
<div>= Design Goals =<br />
<br />
= Underlying Technologies =<br />
<br />
<br />
== Mozilla Technologies ==<br />
The Loop project relies on a number of other technologies under development within Mozilla. These include the following:<br />
<br />
* [[Media/WebRTC|WebRTC]]<br />
* [[Identity/Firefox Accounts|Firefox Accounts]]<br />
* [[WebAPI/SimplePush|Simple Push]] ({{bug|976789}})<br />
* [[Labs/SocialAPI|Social API]] ({{bug|971987}})<br />
<br />
== Third-Party Technologies ==<br />
* Node.js for Loop server, at least through production<br />
<br />
== Open Issues ==<br />
These technology choices will be moved into one of the preceding sections as decisions are made:<br />
* Localization ({{bug|972884}})<br />
* Client MVC Library + associated libs ({{bug|975548}})<br />
* Client CSS toolkit (if any) ({{bug|975548}})<br />
* Client side unit-testing framework ({{bug|976127}})<br />
* Client-driven end-to-end framework ({{bug|976134}})<br />
* Standalone-page CSS toolkit (if any)<br />
* Standalone-page unit-testing framework ({{bug|976133}})<br />
* Standalone-page end-to-end system testing framework ({{bug|976134}})<br />
<br />
= Network Architecture =<br />
<br />
== Data Flows ==<br />
<br />
=== User Connects ===<br />
<br />
=== User Generates "Call-Me" URL ===<br />
<br />
=== Non-User Clicks "Call-Me" URL ===<br />
<br />
=== User Accepts Call ===<br />
<br />
=== User Rejects Call ===<br />
<br />
=== User Blocks "Call-Me" URL ===<br />
<br />
=== User Calls Other User ===<br />
<br />
= Client Architecture =<br />
<br />
== Address Book ==<br />
<br />
= Server Architecture =<br />
<br />
== Database Schema ==</div>Dmosehttps://wiki.mozilla.org/index.php?title=Loop/Architecture&diff=939691Loop/Architecture2014-02-25T22:27:24Z<p>Dmose: /* Mozilla Technologies */</p>
<hr />
<div>= Design Goals =<br />
<br />
= Underlying Technologies =<br />
<br />
== Mozilla Technologies ==<br />
The Loop project relies on a number of other technologies under development within Mozilla. These include the following:<br />
<br />
* [[Media/WebRTC|WebRTC]]<br />
* [[Identity/Firefox Accounts|Firefox Accounts]]<br />
* [[WebAPI/SimplePush|Simple Push]] ({{bug|976789}})<br />
* [[Labs/SocialAPI|Social API]] (See [https://bugzilla.mozilla.org/show_bug.cgi?id=971987 Bug 971987])<br />
<br />
== Third-Party Technologies ==<br />
<br />
= Network Architecture =<br />
<br />
== Data Flows ==<br />
<br />
=== User Connects ===<br />
<br />
=== User Generates "Call-Me" URL ===<br />
<br />
=== Non-User Clicks "Call-Me" URL ===<br />
<br />
=== User Accepts Call ===<br />
<br />
=== User Rejects Call ===<br />
<br />
=== User Blocks "Call-Me" URL ===<br />
<br />
=== User Calls Other User ===<br />
<br />
= Client Architecture =<br />
<br />
== Address Book ==<br />
<br />
= Server Architecture =<br />
<br />
== Database Schema ==</div>Dmosehttps://wiki.mozilla.org/index.php?title=Talkilla/Agile_Process&diff=760259Talkilla/Agile Process2013-11-12T22:09:48Z<p>Dmose: /* Introduction */</p>
<hr />
<div>__TOC__<br />
<br />
== Introduction ==<br />
<br />
Talkilla uses an [http://en.wikipedia.org/wiki/Agile_software_development agile development process].<br />
<br />
The process is based around user stories. User stories are typically discrete user focused use cases. Each user story is aimed at building one small feature on top of the existing product.<br />
<br />
Sometimes user stories can also be entirely technical. This occurs when sometimes we need to break down a larger story into a smaller part, or we need to do some refactoring because the technical debt has gotten too high. Generally we try to avoid this latter case by cleaning the code as we go.<br />
<br />
The advantages of handling the project as small chunks of work, is that each bit of work moves the project forward. Additionally, we can sometimes change direction and focus on different areas without a big time switching cost.<br />
<br />
We use [https://trello.com/ Trello] to track the user stories, as it gives us enough fields to be flexible, and easy ways of visually tracking the cards<br />
<br />
== Creating the Backlog ==<br />
<br />
The Backlog is the feeder for the main development development process. It is primarily managed by the Product Manager with the help of the User Experience lead.<br />
<br />
=== Creating user stories ===<br />
<br />
The Product Manager and User Experience lead work together to produce the user stories for a particular area or areas. Additional input is sought from the Engineering lead and the engineering team as necessary.<br />
<br />
The cards are pieced together on the [https://trello.com/b/Dt2DJbRU backlog]:<br />
<br />
[[File:TalkillaBacklog.png|200px]]<br />
<br />
=== Estimation and Prioritisation ===<br />
<br />
Once the user stories have been created, they are estimated and then prioritised. These actions happen in the three left-most columns of the [https://trello.com/b/Dt2DJbRU backlog]:<br />
<br />
[[File:TalkillaEstimation.png|200px]]<br />
<br />
==== Estimation ====<br />
<br />
There is an estimation meeting every week to estimate cards in the estimation column. The cards are discussed, and then given an estimated rating of the amount of work they will take.<br />
<br />
The ratings are 0, 1, 2, 4 or "too complex to estimate".<br />
<br />
Typical examples of a 1 are these:<br />
<br />
* https://trello.com/c/DTDDkSTr<br />
* https://trello.com/c/GCK5WdGX<br />
<br />
The other scores are relative to the 1s.<br />
<br />
==== Prioritisation ====<br />
<br />
The Product Manager regularly moves the cards from needs prioritisation to the prioritised column, setting them in priority order from highest first to lowest. There are various factors which determine the order of the cards, such as:<br />
<br />
* Features may be wanted earlier so that they can be validated earlier<br />
* It makes sense to get some features working before others<br />
<br />
The Engineering lead works with the Product Manager to implement the user stories in the appropriate priority order as far as possible, taking into account engineering considerations, e.g. it makes sense to implement one user story in advance of another, and avoiding large conflicts from working on two large items in the same area of the code base.<br />
<br />
== Development ==<br />
<br />
Managing development happens on the main [https://trello.com/b/s8DRjWZe Talkilla Trello board].<br />
<br />
[[File:TalkillaDevelopment.png|200px]]<br />
<br />
=== Good First Bug ===<br />
<br />
This is a column where smaller, easy bugs are put, so that contributors can get involved in the general development process with something easy. These are typically lower priority cards that aren't time sensitive.<br />
<br />
=== To Do ===<br />
<br />
This list is added to each week with new items from the prioritised backlog. When an Engineer becomes free, they either look to help on an existing card in the "Doing" column, or take the next card from the top of the "To Do" column.<br />
<br />
Occasionally, Engineers may take from lower down the "To Do" column, if it makes sense due to time considerations (e.g. just about to go on holiday) or if something has been missed, or is urgently needed (i.e. bug fixes).<br />
<br />
=== Doing ===<br />
<br />
[[File:TalkillaDoing.png]]<br />
<br />
As a card moves into doing, it has a technical checklist added to it. It is also tagged with who is working on it.<br />
<br />
As the card progresses, the checklists and state are updated.<br />
<br />
=== Blocked ===<br />
<br />
A card in the Blocked column, has been blocked from being implemented by a significant issue, e.g. needing external fixes or some other issue resolution. These are actively watched to obtain a resolution and to get them moving again as soon as possible.<br />
<br />
=== To Be Reviewed ===<br />
<br />
The card has been completed, but is waiting code reviews for the pull request.<br />
<br />
=== Done ===<br />
<br />
This is a dated column, with the old Done columns being moved to the [https://trello.com/b/tYONGK6L Talkilla Done board].<br />
<br />
For a card to make it into this column, the following must apply:<br />
<br />
* the feature has been implemented<br />
* includes additional unit or functional tests as required<br />
* passes all tests<br />
* code reviewed, paired, or rubber-stamped<br />
* Any [[Talkilla/SPA-documentation|SPA API]] changes are documented</div>Dmosehttps://wiki.mozilla.org/index.php?title=Summit2013/Experiences/signups&diff=719990Summit2013/Experiences/signups2013-10-02T21:38:58Z<p>Dmose: /* Mozillians Pilates */</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.<br />
<br />
<b> Note: Please ONLY add/remove your name. Please do not move lists around or change times as it is causing lots of confusion. If you have questions or need help please use #mozsummit. Thank you.</b><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 />
* <b>Time:</b> <br />
* <b>Meeting Location:</b><br />
* <b>Need to Knows:</b><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 />
<tr><td>Kao, Wei-Ko (:othree)</td><td>Kevin, Liu</td></tr><br />
<tr><td>Sudheesh Singanamalla (:ShellHacker)</td><td>Prof. D.V.L.N.Somayajulu</td></tr><br />
<tr><td>[[user:ivikash|Vikash Agrawal]]</td><td>[[user:espressive|Schalk Neethling]]</td></tr><br />
<tr><td>Evil Machines (:m1)</td><td>Martian Ho</td></tr><br />
<tr><td>Wichai Termwuttipreecha</td><td>[https://mozillians.org/en-US/u/kaustav.dasmodak/ Kaustav Das Modak]</td></tr><br />
<tr><td>Chao, Po-chiang (:bobchao)</td><td>Priyanka Nag</td></tr><br />
<tr><td>Henrik Gemal</td><td>Saurabh Shah </td></tr><br />
<tr><td>Pittaya Sroilong</td><td>Vincent Chang</td></tr><br />
<tr><td>Patrick Wang</td><td>Benjamin Chen</td></tr><br />
<tr><td>Ken Chang</td><td>Galaxy Kadiyala</td></tr><br />
<tr><td>Jignesh Kakadiya</td><td>Mike Hommey (:glandium)</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><td>Oarabile Mudongo</td></tr><br />
<tr><td>Pascal Finette</td><td>Jon Hylands</td></tr><br />
<tr><td>Rob Hudson</td><td>Viking KARWUR</td></tr><br />
<tr><td>Shahmir Khan</td><td>Muhammad Mehmood Ali</td></tr><br />
<tr><td>Asad Sajjad</td><td>Shazia Rizwan</td></tr><br />
<tr><td>Alex Vincent</td><td>Gautam A</td></tr><br />
<tr><td>Nagasahas DS</td><td>Jemmy RORONG</td></tr><br />
<tr><td>Finan AKBAR</td><td>Dimas ANDHANA</td></tr><br />
<tr><td>Artanto ISHAAM</td><td>Fauzan ALFI</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>Priyanka Nag</td><td>Soumya Deb</td></tr><br />
<tr><td>Sankha Narayan Guria</td><td>Swarnava Sengupta</td></tr><br />
<tr><td>Ankit Gadgil</td><td>Jaydev Ajit Kumar</td></tr><br />
<tr><td>Diwanshi Pandey</td><td>Avik Pal</td></tr><br />
<tr><td>Gaurab Patra</td><td>Subhashish Kundu</td></tr><br />
<tr><td>Hilary Ho Jia Hao</td><td>Gauthamraj Elango</td></tr><br />
<tr><td>[[user:maktrix|Mahay Alam Khan]]</td><td>[[user:Rifaz|Rifaz Nahiyan]]</td></tr><br />
<tr><td>Zobayer Ahmed Khan</td><td>Benny Chandra</td></tr><br />
<tr><td>Yoe One Ariestya Niovitta</td><td>Rizqinofa Putra M</td></tr><br />
<tr><td>Jayakumar Sadhasivam</td><td>Atul Jangra</td></tr><br />
<tr><td>Akshay Aurora</td><td>Aji Kisworo Mukti</td></tr><br />
<tr><td>Matjaž Horvat</td><td>[[user:mythrobin|Robin Mehdee]]</td></tr><br />
<tr><td>Rohan Dasanayaka</td><td>Ajay Kumar</td></tr><br />
<tr><td>Ankit Mishra</td><td>Parmpreet Singh</td></tr><br />
<tr><td>Anup Kumar Mishra</td><td>Goran Kohek</td></tr><br />
<tr><td>Soumya Kanti Chakraborty</td><td>Jon Buckley</td></tr><br />
<tr><td>Tim Taubert</td><td>Rizky Ariestiyansyah</td></tr><br />
<tr><td>Ani Peter</td><td>Sammy Fung</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>Nick Fitzgerald</td><td>Anton Kovalyov</td></tr><br />
<tr><td>Arun Balachandran Ganesan</td><td>Kevin Ngo</td></tr><br />
<tr><td>Brendan Dahl</td><td>Johnny Stenback</td></tr><br />
<tr><td>Christopher De Cairos</td><td>Sean Bolton</td></tr><br />
<tr><td>Joanna Mazgaj</td><td>[[user:Netoarmando|Armando Neto]]</td></tr><br />
<tr><td>[[user:RodrigoPadula|Rodrigo Padula]]</td><td>Aditya Fitri Hananta Putra</td></tr><br />
<tr><td>John Daggett</td><td>Dwi Hardyanto</td></tr><br />
<tr><td>PATIL Kailas Ravsaheb</td><td>Blair McBride</td></tr><br />
<tr><td>Ajay Jogawath</td><td>[[user:Komal gandhi|Komal Gandhi]]</td></tr><br />
<tr><td>Vaibhav Bajaj</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>Alexis M</td><td>Sandraghassen Subbaraya Pillai</td></tr><br />
<tr><td>byron jones</td><td>André Reinald</td></tr><br />
<tr><td>Aaron Druck</td><td>Ville Pohjanheimo</td></tr><br />
<tr><td>Jay Sullivan</td><td>Meraj Imran</td></tr><br />
<tr><td>Hema Bhanu</td><td>Maniraj</td></tr><br />
<tr><td>Philipp Wagner</td><td>Saurabh Anand</td></tr><br />
<tr><td>Abhishek Potnis</td><td>Amod Narvekar</td></tr><br />
<tr><td>Behnam Esfahbod</td><td>Felipe Gomes</td></tr><br />
<tr><td>Amy Hu</td><td>[[User:kinshuksunil|Kinshuk Sunil]]</td><br />
<tr><td>David Chen</td><td>Midhun Manojkumar </td></tr><br />
<tr><td>Michael Maslaney</td><td>[[user:Tim.babych|Tim Babych]]</td></tr><br />
<tr><td>[[user:ivikash|Vikash Agrawal]]</td><td>Nicholas Hurley</td></tr><br />
<tr><td>Sudheesh Singanamalla</td><td>Prof. D.V.L.N.Somayajulu</td></tr><br />
<tr><td>Evil Machines (:m1)</td><td>Marco Bonardo (:mak)</td></tr><br />
<tr><td>Nigel Babu (:nigelb)</td><td>[https://mozillians.org/en-US/u/kaustav.dasmodak/ Kaustav Das Modak]</td></tr><br />
<tr><td>Md Aminul Islam Sajib</td><td>Md Golam Mostafa</td></tr><br />
<tr><td>Saurabh Shah</td><td>[https://mozillians.org/en-US/u/tiziana/ Tiziana Sellitto] </td></tr><br />
<tr><td>Galaxy Kadiyala</td> <td>Jignesh Kakadiya</td></tr><br />
<tr><td>Mike Hommey (:glandium)</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 about 20 people on Saturday and Sunday morning at 7:30am (session is about 30 min). The exact space will be announced at the Summit (sorting it out!) and here.<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>Rebecca Billings</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 />
<tr><td>Alina Mierlus</td></tr><br />
<tr><td>Saurabh Shah</td></tr><br />
<tr><td>Dan Mosedale</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>204 Kevin, Liu</td></tr><br />
<tr><td>205 Ernest Chiang</td><td>206 James Teh</td></tr><br />
<tr><td>207 Kao Wei-Ko(:othree)</td><td>208 [[user:ivikash|Vikash Agrawal]]</td></tr><br />
<tr><td>209 Pierros Papadeas (:pierros)</td><td>210 Athanasia Thalia Papoutsaki</td></tr><br />
<tr><td>211 Christos Bacharakis</td><td>212 Schalk Neethling</td></tr><br />
<tr><td>213 Heather Arthur</td><td>214 Nicholas Hurley</td></tr><br />
<tr><td>215 Katherine Nelson</td><td>216 Michael Maslaney</td></tr><br />
<tr><td>217 Alina Mierlus</td><td>218 [[user:Tim.babych|Tim Babych]]</td></tr><br />
<tr><td>219 Sudheesh Singamalla</td><td>220 Prof. D.V.L.N. Somayajulu</td></tr><br />
<tr><td>221 John Karahalis</td><td>222 Stefan Mirea</td></tr><br />
<tr><td>223 Kyle Lahnakoski</td><td>224 [https://mozillians.org/en-US/u/Fiag/ Qing Lei]</td></tr><br />
<tr><td>225 Martian Ho</td><td>226 Jill Alvarez</td></tr><br />
<tr><td>227 Andrea Zingerman</td><td>228 [https://mozillians.org/en-US/u/kaustav.dasmodak/ Kaustav Das Modak]</td></tr><br />
<tr><td>229 Chao, Po-chiang (:bobchao)</td><td>230 Priyanka Nag</td></tr><br />
<tr><td>231 Rajesh Ranjan</td><td>232 Angela King</td></tr><br />
<tr><td>233 Henrik Gemal</td><td>234 Stephen Horlander</td></tr><br />
<tr><td>235 Saurabh Shah</td><td>236 Veeraya Pupatwibul</td></tr><br />
<tr><td>237 Vincent Chang</td><td>238 Patric Wang</td></tr><br />
<tr><td>239 Benjamin Chen</td><td>240 Ken Chang</td></tr><br />
<tr><td>241 Galaxy Kadiyala</td><td>242 Jignesh Kakadiya</td></tr><br />
<tr><td>243 Ed Morley</td><td>244 Dan Mosedale</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 />
<tr><td>Rifaz Nahiyan</td></tr><br />
<tr><td>Sankha Narayan Guria</td></tr><br />
<tr><td>Atul Jangra</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 about 20 people on Saturday and Sunday morning at 7:30am (session is about 30 min). The exact space will be announced at the Summit (sorting it out!) and here.<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</td></tr><br />
<tr><td>Erika Aurea Gatmaitan</td></tr><br />
<tr><td>[[user:Tim.babych|Tim Babych]]</td></tr><br />
<tr><td>Fang, Chiung-Hui (GDH)</td></tr><br />
<tr><td>Saurabh Shah</td></tr><br />
<tr><td>Nagasahas DS</td></tr><br />
<tr><td>Dan Mosedale</td></tr><br />
</table><br />
<br />
===MozSpace Tour Mountain View===<br />
<br />
Want to view the Mozilla Mountain View Space? We have set up a small tour for those people that want to take visit the Mountain View space before the closing dinner and party. <br />
<br />
We will be taking a shuttle over to the office (15 minute drive), will stay for enough time to capture some pictures and then walk back. (We will be at the Space for about 25-30 minutes) Then we will board the shuttle and head back to the venue for some dinner. <br />
<br />
The tour will be hosted by Sylvie Brossard and a few other Mozillians. <br />
<br />
'''Time:''' 5:15-6:15 <br><br />
''*we will begin boarding the shuttle right after closing session. Departing at 5:15 <br><br />
'''Meeting Location:''' Main Lobby by the "Ask Me" desk <br><br />
'''Need to know:''' We will be back to the venue by 6:30, so we can join the closing dinner and dance party festivities. ''There is limited space available as we have a 55 person shuttle.''<br />
<br />
<br />
Sign Up Here: (MAX 55 people)<br />
# Iacopo Benesperi (will leave the place to someone else if we're more than 55, since I'll stay in the area the next week)<br />
# Benny Chandra<br />
# Saurabh Shah<br />
# Yoe One Ariestya Niovitta<br />
# Ashickur Rahman<br />
# Behnam Esfahbod<br />
# Chao, Po-chiang (:bobchao)<br />
# Rahid Hasan<br />
# Shafiul Azam Chowdhury<br />
# Komal Gandhi<br />
# Jafar Muhammed<br />
# Ajay Jogawath<br />
# Priyanka Nag<br />
# Sayak Sarkar<br />
# Saurabh Anand<br />
# Sankha Narayan Guria<br />
# Mashkawat Ahsan<br />
# Rajesh Ranjan<br />
# Sudheesh Singanamalla<br />
# Prof. D.V.L.N. Somayajulu<br />
# Irayani Queencyputri<br />
# Eriska Triana Primayasari<br />
# Deryan Everestha Maured<br />
# Nuri Abidin<br />
# Rahmat Dwi Jatmiko<br />
# Andi Darmawan<br />
# I Gede Bagus Kosha<br />
# Soumya Deb<br />
# Ashkary Rahman<br />
# Wichai Termwuttipreecha<br />
# Alex Lakatos<br />
# Marcela Oniga<br />
# Trevor Hobson<br />
# Sandraghassen Subbaraya Pillai<br />
# Philipp Wagner<br />
# Srikar Ananthula<br />
# Namu Srikanth<br />
# Raghuram Korukonda<br />
# Saikiran Alagandula<br />
# Ville Pohjanheimo<br />
# Pittaya Sroilong<br />
# Soumya Kanti Chakraborty<br />
# Abdul Rauf<br />
# Md Aminul Islam Sajib<br />
# Mahay Alam Khan<br />
# Kengatharaiyer Sarveswaran<br />
# Sandeep Shedmakell<br />
# Sammy Fung<br />
# Akshay Aurora<br />
# Atul Jangra<br />
# Kinshuk Sunil<br />
# Ramesh Kumar Sahu<br />
# Truong Anh Tuan<br />
# Nagasahas DS<br />
# [https://mozillians.org/en-US/u/tiziana/ Tiziana Sellitto]<br />
# Midhun Manojkumar<br />
# Irvin<br />
# Qing Lei<br />
# Aditya Fitri Hananta Putra<br />
# Dwi Hardyanto<br />
# PATIL Kailas Ravsaheb<br />
# Rohan Dasanayaka<br />
# Jemmy Rorong<br />
# Viking Karwur<br />
# Fauzan Alfi<br />
# Finan Akbar<br />
# Dimas Andhana<br />
# Artanto Ishaam<br />
# Muhammad Syafiq Mazli<br />
# Haryati Salehin<br />
# Mohamed Aidid Jaafar<br />
# Lai Chen Haw<br />
# An-jie Yang<br />
# Zobayer Ahmed Khan<br />
# Galaxy Kadiyala<br />
# Jignesh Kakadiya<br />
# Hilary Ho Jia Hao<br />
<br />
=Toronto=<br />
==Friday ==<br />
=== Real Canadian Superhero Pub Crawl (MOVED TO SATURDAY)===<br />
<br> <br />
WE HAVE HAD TO MOVE THE PUB CRAWL TO SATURDAY. PLEASE SIGN UP AGAIN IF YOU ARE STILL INTERESTED.<br />
<br>[[File:WeWantYou2.jpg|200px]]<br><br><br><br />
<br />
=== People in town Friday but not into drinking ===<br />
* [https://mozillians.org/en-US/u/terrameijar/ Vuyisile Ndlovu]<br />
* Jose Junior Villagomez Melgar<br />
* [https://mozillians.org/en-US/u/gueroJeff/ Jeff Beatty]<br />
* [https://mozillians.org/pt-BR/u/jaymeayres/ Jayme Ayres]<br />
* [https://mozillians.org/en-US/u/pmac/ Paul McLanahan]<br />
* [https://mozillians.org/es-Mx/u/leonshion/ Miriam León]<br />
* [https://mozillians.org/es-Mx/u/Ednah/ Ednah Kiome]<br />
* [https://mozillians.org/es-Mx/u/alexfuser/ Alex Fuser]<br />
* [https://mozillians.org/es/u/Nex/ Hugo Acosta]<br />
* [https://mozillians.org/es/u/lourcastillo/ Lourdes Castillo]<br />
* [https://mozillians.org/es/u/psep/ Pablo Sepúlveda]<br />
* [https://mozillians.org/en-US/u/ZiggyMaes/ Ziggy Maes]<br />
* Lianne Lee<br />
* [https://mozillians.org/en-US/u/andreags/ Andrea Guzmán Siu]<br />
* Huda Sarfraz<br />
* [https://mozillians.org/en-US/u/ajones/ Anthony Jones]<br />
* [https://mozillians.org/es/u/aldopy/ Aldo Medina]<br />
* [https://mozillians.org/es/u/Rocio/ Rocio Meza]<br />
* [https://mozillians.org/en-US/u/orin/ Orin Chen]<br />
* [https://mozillians.org/en-US/u/gaby2300/ Gabriela Montagu]<br />
* [https://mozillians.org/en-US/u/mkaply/ Mike Kaply]<br />
* [https://mozillians.org/en-US/u/iamtheashkary/ Ashkary Rahman]<br />
* [https://mozillians.org/en-US/u/jesup/ Randell Jesup]<br />
* [https://mozillians.org/en-US/u/mreavy/ Maire Reavy]<br />
* [https://mozillians.org/en-US/u/ravmn/ Richard von Moltke]<br />
* [https://mozillians.org/u/gphemsley/ Gordon P. Hemsley]<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>[https://mozillians.org/en-US/u/terrameijar/ 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>[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 />
<tr><td>Ben Francis</td></tr><br />
<tr><td>J. Ryan Stinnett</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/mkaply/ Mike Kaply]</td></tr><br />
<tr><td>Odin Mojica</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 />
=== 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 />
# Ben Francis<br />
# Aldo Medina<br />
# Rocio Meza<br />
# J. Ryan Stinnett<br />
# Ricardo Pontes<br />
# Bhavana Bajaj<br />
# Ricardo Sato<br />
# Carlos Valim "Coragem"<br />
# Joanne Nguyen<br />
# Winnie Aoieong<br />
# Michael Coates<br />
# Jesebel Kim<br />
# Jim Cook<br />
# Sam Foster<br />
# Karen Jeffrey<br />
# Ednah Kiome<br />
# Paola da Silva<br />
# Santiago Ferreira<br />
# Elsa Rodriguez<br />
# Eduardo Trapani<br />
<br />
=== Real Canadian Superhero Pub Crawl (NEW DATE) ===<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 around the downtown area and back to the hotel, 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 />
<table class="wikitable" border=0 valign="top"><br />
<tr><td><br />
; ''' Super Sign up sheet ''': Current maximum is 35, but if there is strong interest, we can look to extend.<br />
<table class="wikitable" border=1><tr><th>#</th><th>Name</th><th>Alter Ego</th></tr><br />
<tr><td>1</td><td>[https://mozillians.org/en-US/u/phundal/ Patrick Hundal]</td><td>Ale-inhaler</td></tr><br />
<tr><td>2</td><td>Maya Barrow</td><td>Margareeta</td></tr><br />
<tr><td>3</td><td>[https://mozillians.org/en-US/u/rseiji/ Ricardo Sato]</td><td>Satozilla</td></tr><br />
<tr><td>4</td><td>[https://mozillians.org/en-US/u/jaydson/ Jaydson Gomes]</td><td>Quail Man</td></tr><br />
<tr><td>5</td><td>Patrick Cloke</td><td></td></tr><br />
<tr><td>6</td><td>[https://mozillians.org/en-US/u/Urcu/ Eduardo Urcullú Madrid]</td><td>Urcumeitor</td></tr><br />
<tr><td>7</td><td>[https://mozillians.org/en-US/u/felipenmoura/ Felipe N. Moura]</td><td>Mulder</td></tr><br />
<tr><td>8</td><td>Ricardo Panasggio</td><td>Super Sober</td></tr><br />
<tr><td>9</td><td>Evelyn Urcullú</td><td></td></tr><br />
<tr><td>10</td><td>Carlos Valim "Coragem"</td><td>Fox from tha ghetto</td></tr><br />
<tr><td>11</td><td>[https://mozillians.org/en-US/u/lasr21/ LASR21 a.k.a Luis Sanchez]</td><td>Mexican Panda</td></tr><br />
<tr><td>12</td><td>[https://mozillians.org/en-US/u/rdaub/ Ralph Daub]</td><td>Snow-Dance</td></tr><br />
<tr><td>13</td><td>[https://mozillians.org/en-US/u/prixon/ Matej Priteržnik]</td><td>Black Ma-jek</td></tr><br />
<tr><td>14</td><td>[https://mozillians.org/en-US/u/ricardopontes/ Ricardo Pontes]</td><td>Chuckzilla</td></tr><br />
<tr><td>15</td><td>Julien Wajsberg</td><td>Flashberg</td></tr><br />
<tr><td>16</td><td>Arzhel Younsi</td><td>Super Celtic</td></tr><br />
<tr><td>17</td><td>Paul Adenot</td><td>Bierman</td></tr><br />
<tr><td>18</td><td>Manuel Camacho</td><td>GREEN</td></tr><br />
<tr><td>19</td><td>Romina Guerra</td><td>Super PINK</td></tr><br />
<tr><td>20</td><td>[https://mozillians.org/en-US/u/keppelen/ Giovanni Keppelen dos Santos]</td><td></td></tr><br />
<tr><td>21</td><td>[https://mozillians.org/en-US/u/deluna/ Bernard de Luna]</td><td></td></tr><br />
<tr><td>22</td><td>[https://mozillians.org/en-US/u/andregarzia/ Andre Alves Garzia]</td><td>Drunken Fennec</td></tr><br />
<tr><td>23</td><td>[https://mozillians.org/en-US/u/leobalter/ Leo Balter]</td><td>The Mozillator</td></tr><br />
<tr><td>24</td><td>[https://mozillians.org/en-US/u/gabriela.oliv/ Gabriela Oliveira]</td><td>Chuchu Girl</td></tr><br />
<tr><td>25</td><td>[https://mozillians.org/en-US/u/dricupello/ Adriano Cupello]</td><td></td></tr><br />
<tr><td>26</td><td>Andrea Balle</td><td></td></tr><br />
<tr><td>27</td><td>[https://mozillians.org/en-US/u/enzomatrix/ Marcelo Poli]</td><td></td></tr><br />
<tr><td>28</td><td>[https://mozillians.org/en-US/u/alex_mayorga/ alex_mayorga]</td><td>The orange Zorro</td></tr><br />
<tr><td>29</td><td>[https://mozillians.org/en-US/u/orin/ Orin Chen]</td><td>dash</td></tr><br />
<tr><td>30</td><td>Maicon Ferreira</td><td></td></tr><br />
<tr><td>31</td><td>Jay Sullivan</td><td></td></tr><br />
<tr><td>32</td><td>[https://mozillians.org/en-US/u/winniea/ Winnie Aoieong]</td><td></td></tr><br />
<tr><td>33</td><td>Michael Coates</td><td></td></tr><br />
<tr><td>34</td><td>[https://mozillians.org/en-US/u/jnguyen/ Joanne Nguyen]</td><td></td></tr><br />
<tr><td>35</td><td>Jim Cook</td><td></td></tr><br />
<tr><td>36</td><td>Jesebel Kim</td><td></td></tr><br />
<tr><td></td><td>Below is waiting list</td><td></td></tr><br />
<tr><td>37</td><td>[https://mozillians.org/u/rik Anthony Ricaud]</td><td></td></tr><br />
<tr><td>38</td><td>[https://mozillians.org/u/pir Peter Radcliffe]</td><td></td></tr><br />
<tr><td>39</td><td>Bhavana Bajaj</td><td></td></tr><br />
<tr><td>40</td><td>Leonard Camacho</td><td></td></tr><br />
<tr><td>40</td><td>Ednah Kiome</td><td></td></tr><br />
<tr><td>41</td><td>Erik Vold</td><td>The Rocketbeer</td></tr><br />
<tr><td>42</td><td>Jill Van De Ven</td><td></td></tr><br />
<tr><td>43</td><td>Kendall Libby</td><td>Purple Terror</td></tr><br />
<tr><td>44</td><td>Andre Natal</td><td></td></tr><br />
<tr><td>45</td><td>Marty Rosenberg</td><td></td></tr><br />
<tr><td>46</td><td>Odin Mojica</td><td></td></tr><br />
<tr><td>46</td><td>Elsa Rodriguez</td><td></td></tr><br />
<tr><td>47</td><td>[https://mozillians.org/u/ThePhoenixBird Arturo Martinez]</td><td>Flaming Phoenix</td></tr><br />
<tr><td>48</td><td>[https://mozillians.org/u/eviljeff Andrew Williamson]</td><td></td></tr><br />
</table><br />
</td> <br />
<td valign="top"><br />
;Latest information (Oct 2, 2013): Please continue to check here for latest updates and details. We are currently still verifying the pubs that will be visited as well as the total participants we can handle. More super soon!<br />
;Start time: We will begin at 7:30pm in the Sheraton lobby, and we will spend about 30min at each pub. If you are playing catch-up from the CN Tower, estimate about 45min (total) for each pub. <br />
<br><br />
;'''List of pubs on tour (not finalized...)''':[http://goo.gl/maps/Nd1R2 Google map of pubs]<br />
<br><br />
;Fionn MacCool's: 181 University Avenue, Toronto, ON +1 416-363-1944, http://primepubs.com<br />
;Earls Kitchen & Bar: 150 King St W #100, Toronto, ON, +1 416-916-0227, http://earls.ca <br />
;Irish Embassy Pub and Grill: 49 Yonge Street, Toronto, ON +1 416-866-8282, http://irishembassypub.com<br />
;P.J. O'Brien Irish Pub & Restaurant: 39 Colborne Street, Toronto, ON +1 416-815-7562, http://pjobrien.com<br />
;C'est What : 67 Front Street East, Toronto, ON +1 416-867-9499, http://cestwhat.com<br />
; The Jason George : 104 Front Street East, Toronto, ON +1 416-363-7100, http://thejasongeorge.ca<br />
;The Richmond Rogue: 284 Richmond Street East, Toronto, ON +1 416-868-9595, http://therichmondrogue.com<br />
;New Windsor Tavern: 124 Church Street, Toronto, ON +1 416-364-9698, http://mcveighspub.com<br />
</td></table><br />
<br />
==Sunday==<br />
<br />
===MozSpace Tour===<br />
<br />
Want to view the Mozilla Toronto Space? We have set up a small tour for those people that want to take visit the Toronto space before the closing dinner and party. <br />
<br />
We will be walking over to the office (15 minute walk), will stay for enough time to capture some pictures and then walk back. (We will be at the Space for about 25-30 minutes) <br />
<br />
The tour will be hosted by a few Mozillians from the Space. <br />
<br />
'''Time:''' 5:15-6:15 (we start walking back at 6:00) <br><br />
'''Meeting Location:''' Main Lobby by the "Ask Me" desk <br><br />
'''Need to know:''' We will be back to the venue by 6:30, so we can join the closing dinner and dance party festivities. <br />
<br />
<br />
Sign Up Here: <br />
* [https://mozillians.org/es/u/Urcu/ Eduardo Urcullú Madrid]<br />
* Sabrina Ng<br />
* Karen Jeffrey<br />
* [https://mozillians.org/en-US/u/diane/ Diane (Tate) Bisgeier]<br />
* [https://mozillians.org/en-US/u/firetoad/ Mike Collins]<br />
* [https://mozillians.org/en-US/u/gaby2300/ Gabriela Montagu Buenos Aires]<br />
* [https://mozillians.org/en-US/u/mkaply/ Mike Kaply]<br />
* Andrea Guzmán Siu<br />
* Leonard Camacho<br />
* Faten Ben Thabet<br />
* Erik Vold<br />
* Ednah Kiome<br />
* [https://mozillians.org/u/sh.yaron/ Yaron Sharabani]<br />
* [https://mozillians.org/u/elad/ Elad Alfassa]<br />
* [https://mozillians.org/u/tomer/ Tomer Cohen]<br />
* [https://mozillians.org/u/psep/ Pablo Sepúlveda]<br />
* [https://mozillians.org/u/lourcastillo/ Lourdes Castillo]<br />
* Mario Garcia<br />
* Johan Gonzalez<br />
* Havi Hoffman<br />
* [https://mozillians.org/u/lasr21/ LASR21 a.k.a Luis Sanchez]<br />
* [https://mozillians.org/u/rseiji/ Ricardo Sato]<br />
* [https://mozillians.org/es/u/ravmn/ Richard von Moltke]<br />
* Joaquín Haeussler<br />
* Gustavo Munro<br />
* [https://mozillians.org/u/terrameijar/ Vuyisile Ndlovu]<br />
* [https://mozillians.org/es/u/ThePhoenixBird/ Arturo Martinez]<br />
* [https://mozillians.org/es/u/paodsf83/ Paola da Silva]<br />
* [https://mozillians.org/es/u/sanux/ Santiago Ferreira]<br />
* [https://mozillians.org/en-US/u/schien/ Shih-Chiang Chien]<br />
* [https://mozillians.org/en-US/u/timdream/ Tim Guan-tin Chien]<br />
* Kevin Hu<br />
* [https://mozillians.org/u/gasolin/ Fred Lin (gasolin)]<br />
* [https://mozillians.org/zh-TW/u/gduan/ George Duan]<br />
* [https://mozillians.org/u/rudylu/ Rudy Lu]<br />
* [https://mozillians.org/en-US/u/hhuang/ Helen Huang]<br />
* Lianne Lee<br />
* [https://mozillians.org/zh-TW/u/chucklee/ Chuck Lee]<br />
* [https://mozillians.org/zh-TW/u/fshih/ Fang Shih]<br />
* Steven Lee<br />
* Ben Francis<br />
* Elsa Rodriguez<br />
* [https://mozillians.org/en-US/u/Alam/ Aman Alam]<br />
* [https://mozillians.org/en-US/u/eviljeff Andrew Williamson]<br />
* [https://mozillians.org/u/gphemsley/ Gordon P. Hemsley]<br />
* Francis Djabri<br />
* [https://mozillians.org/u/mstange/ Markus Stange]<br />
* Eduardo Trapani<br />
<br />
=Brussels=<br />
==Friday ==<br />
=== Jellyfishing ===<br />
OMG Jellys! Yes, you read that right! Our very own [https://mozillians.org/en-US/u/rlord/ Rob Lord] is going to instruct and lead a group of Mozillians to bloom through the cobble streets of Brussels. <br />
:Blooming Treasure Island Music Festival in San Francisco '''[https://vimeo.com/35285151 video]''' <br />
:Blooming White Ocean camp at Burning Man '''[http://www.youtube.com/watch?v=MlJjWS9EajU video]'''<br />
:Billion Jelly Bloom on Kickstarter '''[http://www.kickstarter.com/projects/pattilord/omg-jellyfish video]'''<br />
:Billion Jelly Bloom on Facebook '''[http://fb.com/BillionJellyBloom Facebook]'''<br />
<br />
We'll have 10 jellies undulate, articulate and share in teams of two or three to delight our host city. Photographers encouraged too. <br />
<br />
Sign up here with a link to your mozillians.org account and email address so that I, Rob, can email you all with the event location and time details. <br />
<br />
# [https://mozillians.org/en-US/u/sharno/ Mohamed El Sharnoby], [mailto:sharnoby3@gmail.com sharnoby3@gmail.com]<br />
# [https://mozillians.org/en-US/u/jms/ Janet Swisher], [mailto:jswisher@mozilla.com jswisher@mozilla.com] <br />
# [https://mozillians.org/en-US/u/canuckistani/ Jeff Griffiths], [mailto:jgriffiths@mozilla.com jgriffiths@mozilla.com] <br />
# [https://mozillians.org/en-US/u/919adbc95b/ Aashish Jagini], [mailto:aashish.stalin@gmail.com aashish.stalin@gmail.com] <br />
# [https://mozillians.org/en-US/u/avsaro/ Onur Avsar], [mailto:avsaro42@gmail.com avsaro42@gmail.com]<br />
# [https://mozillians.org/en-US/u/pinielhasibuan/, Piniel Romulia Hasibuan], [mailto:pinielhasibuan@gmail.com pinielhasibuan@gmail.com]<br />
# [https://mozillians.org/en-US/u/mubirujonato/ Mubiru Jonathan], [mailto:mubirujonato@yahoo.com mubirujonato@yahoo.com]<br />
# [https://mozillians.org/en-US/u/SunboX/ André Fiedler], [mailto:andre.fiedler@me.com andre.fiedler@me.com]<br />
# [https://mozillians.org/en-US/u/ilana/ Ilana Segall], [mailto:isegall@mozilla.com isegall@mozilla.com]<br />
# William Reynolds<br />
# Laura Forrest<br />
# Fabio Magnoni<br />
# Wei Li<br />
# Yanfang Liu<br />
# Sharon Xiaoyun Yang<br />
# Curtis Koenig<br />
# Gervase Markham<br />
# Antoine Turmel<br />
# Avinash Kundaliya<br />
# Justin O'Kelly<br />
<br />
=== Dancing! Fun! ===<br />
Hi, [https://mozillians.org/en-US/u/kumar/ Kumar McMillan] here. While I'm not working on Firefox OS payments I'm most likely DJing in my living room, at some dance party or bar, etc. My good friend and Bruxelles local [http://lowdjo.com/ Lowdjo] invited me to play records with him at [https://www.facebook.com/pages/Caf%C3%A9-Central/143434702389318 Le Cafe Central] while I'm out there. No need to sign-up, just stop by if you're interested in dancing to disco, boogie, 80s funk, or whatever else we feel like playing.<br />
<br />
* Time: 11pm to 4am (we'll be DJing the entire time)<br />
* Location: [https://www.facebook.com/pages/Caf%C3%A9-Central/143434702389318 Le Cafe Central] (includes full bar)<br />
* Address: [http://www.bing.com/maps/default.aspx?v=2&pc=FACEBK&mid=8100&rtp=adr.~pos.50.847777198698_4.3477700156474_Caf%C3%A9+Central_14+rue+borgwal%2C+1000+Brussels%2C+Belgium&cp=50.847777198698~4.3477700156474&lvl=16&sty=r&rtop=0~0~0~&mode=D&FORM=FBKPL2&mkt=en-US 14 rue borgwal, 1000 Brussels, Belgium]<br />
<br />
Sign-ups: N/A<br />
<br />
==Saturday==<br />
=== Bikram yoga ===<br />
<br />
We'll attend a [http://en.wikipedia.org/wiki/Bikram_Yoga Bikram yoga] (hot yoga) class at [http://www.fbyci.com/brussels/index.htm the Brussels school]. Please sign up if you'd like to attend.<br />
<br />
It looks like we have enough people to make this happen. Woot! <br />
<br />
'''Time:''' 8:00pm Local Time <br><br />
'''Meeting Location:''' Meet by "Ask Me" desk at 19:15 and we will travel to the school from there. <br><br />
'''Need To Know:''' Try not to eat too much just before going to class (eat lightly for 2h before the class starts). Bring light clothing (men can do just shorts or add a T-shirt, women can wear shorts and a top), it gets very sweaty.<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 />
#Rodrigo Waters<br />
#Denish Okidi<br />
<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 />
*Fabian Rodriguez<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 />
*Jovan Ssebaggala<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 />
*William Duyck<br />
*RJ Hsiao<br />
*Achraf Fouwad<br />
*Denish Okidi<br />
*Abaho Micheal<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 />
* Kris Maglione<br />
* Andreas Wagner<br />
* Zach Beauvais<br />
* Jorge Villalobos<br />
* Daniel Holbert<br />
* Rodrigo Waters<br />
* Achraf Fouwad<br />
* Johannes Vogel<br />
* Jordan Lund<br />
*Jovan Ssebaggala<br />
<br />
=== Bar Delirium ===<br />
<br />
We have secured 2 drink vouchers for beer and soft drinks for all those who have signed up below. Get ready to enjoy a real pub experience! <br />
<br />
'''Time:''' 7:45-10:00pm <br><br />
'''Meeting Location''': Please pick up your drink tickets from the "Ask Me" desk anytime between 7:30-7:45pm. We will walk to Delirium at 7:45pm. <br><br />
'''Need To Know:''' Drink vouchers can be used for beer and soft drinks only. You must pick up your drink vouchers before you head to Delirium. <br><br />
<br />
''(List sorted to remove duplicates)''<br />
*Aashish Jagini<br />
*Adam Newman<br />
*Adrian Fernandez<br />
*Alba González<br />
*Aleksandra Uzelac<br />
*aleth<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 />
*Destuynder Guillaume<br />
*Dietrich Ayala<br />
*Dustin J. Mitchell<br />
*Ed Lim<br />
*Elio Qoshi <br />
*Estela Liu<br />
*Fabian Rodriguez<br />
*Fabio Magnoni<br />
*Fabricio Zuardi<br />
*Frank Wein<br />
*Frederik Braun<br />
*Gemma Petrie<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 />
*Jean-Yves Perrier<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 />
*Jordan Lund<br />
* Abaho Micheal<br />
*Jorge Villalobos<br />
*Jovan Ssebaggala<br />
*Julen Ruiz Aizpuru<br />
*Julien Vehent<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 />
*Leslie Orchard<br />
*Lizz Noonan<br />
*Luca Greco<br />
*Lucas Rocha<br />
*Malini Das<br />
*Marc Schifer<br />
*Mark C&ocirc;t&eacute;<br />
*Martin Creutziger<br />
*Mathieu Laurent<br />
*Michelle Marovich<br />
*Michael Bebenita<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 />
*Philipp Madersbacher<br />
*Pierre-Louis Augey<br />
*Raivis Dejus<br />
*Redon Skikuli <br />
*Reed Loden<br />
*Robert Wood<br />
*Robyn Chau<br />
*Rodrigo Waters<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 Bennetts<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 />
*Tobias Markus<br />
*Tom Schuster<br />
*Toni Hermoso<br />
*Ty Flanagan<br />
*Van Le<br />
*Vien Doan<br />
*Vit lai<br />
*William Duyck<br />
*William Reynolds<br />
*Wilson Guaraca <br />
*Zac Campbell<br />
*Zach Carter<br />
*Dejan Strbad<br />
*Ana-Maria Antolovic<br />
*RJ Hsiao<br />
*Achraf Fouwad<br />
*Denish Okidi<br />
*Yousef Alam<br />
*Jan Bambach<br />
*Leo McArdle<br />
*Jonjo McArdle<br />
*Ricardo Maçãs<br />
<br />
=== Chocolate Making (7:30pm) ===<br />
Mozillians in Brussels, you are in for a real treat! If you like making chocolate, or just like chocolate tasting we've got two options for you! <br />
On Saturday, one of Brussels top chocolatiers, Laurent Gerbaud will be conducting a chocolate making class (tasting also included) for the first 25 Mozillians to sign up. <br />
If you'd like to read more about them, check out them out [http://www.chocolatsgerbaud.be here]<br />
For those that are interested in tasting the many types of chocolate Brussels has to offer, please sign up for the Sunday session. <br />
<br />
Space is limited, '''25''' spots available and is now '''FULL'''<br />
<br />
# Marcia Knous<br />
# Doris Coleman<br />
# Mary Trombley <br />
# Tanner Young <br />
# Krupa Raj <br />
# Larissa Co <br />
# Gemma Petrie <br />
# Fernando García Gómez <br />
# Elio Qoshi <br />
# Redon Skikuli <br />
# Sokol Dollani<br />
# Altin Ukshini <br />
# Gent Thaci <br />
# Ardian Haxha <br />
# Berni Melero <br />
# Mavis Ou <br />
# Vien Doan <br />
# Jennifer Hayashi <br />
# Fabricio Zuardi<br />
# Benjamin Sternthal <br />
# Mohamed El Sharnoby <br />
# Maureen Hanratty <br />
# Sébastien Desvignes <br />
# Wilson Guaraca <br />
# James Graham<br />
# Abaho Micheal<br />
<br />
=== Chocolate Tasting ONLY (8:30pm) ===<br />
Space is limited, '''25''' spots available:<br />
# Marco Zehe<br />
# Sébastien Barbieri<br />
# Mathieu Laurent<br />
# Ioana Chiorean<br />
# Kris Maglione<br />
# Jorge Villalobos<br />
# Florin Bogdan Strugariu<br />
# Bartosz Piec<br />
# Leo McArdle<br />
# Yousef Alam<br />
# Jan Bambach<br />
# William Reynolds<br />
# Laura Forrest<br />
# Peipei Cheng<br />
# Yanfang Liu<br />
# Wei Li<br />
# Phoebe Chang<br />
# Jessica Jong<br />
# Sharon Xiaoyun Yang<br />
# Aleksandra Uzelac<br />
# Oskar Ivanic<br />
# Dejan Binder<br />
# Saša Jakovljevic<br />
# Nino Vranešic<br />
# Aashish Jagini<br />
<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 />
#Abaho Micheal<br />
#Majda Nafissa Rahal<br />
#Rubén Martín<br />
#Konstantina Papadea<br />
#Daniel Holbert<br />
#Denish Okidi<br />
<br />
==Sunday==<br />
=== Chocolate Tasting (5pm) ===<br />
''details above''. Space is limited, '''25''' spots available and is now '''FULL'''.<br />
<br />
# Krupa Raj<br />
# Marcia Knous<br />
# Gene Wood<br />
# Fabricio Zuardi<br />
# Wilson Guaraca<br />
# Mavis Ou<br />
# Mohamed El Sharnoby<br />
# Jean Collings<br />
# Jessilyn Davis<br />
# Richard Marti<br />
# Doris Coleman<br />
# Janet Swisher<br />
# Kim Ludvigsen<br />
# Ana-Maria Antolovic<br />
# aleth<br />
# John Bevan<br />
# Mihnea Dobrescu-Balaur<br />
# Alexandros Mioglou<br />
# Aashish Jagini <br />
# Tauni Oxborrow <br />
# Netha Hussain<br />
# Ziga Milek<br />
# Dustin J. Mitchell<br />
# Fabio Magnoni<br />
# Alison Wheeler<br />
<br />
=== Chocolate Tasting (6:15pm) ===<br />
Also full.<br />
# Tom Schuster<br />
# Onur Avsar<br />
# Piniel Romulia Hasibuan<br />
# Zhenshuo Fang<br />
# Mubiru Jonathan<br />
# Gina Yeh<br />
# Bella Su<br />
# Shelly Lin<br />
# Vit lai<br />
# Balazs Koren<br />
# Marco Zehe<br />
# Ty Flanagan<br />
# Emily Goligoski<br />
# Chloe Varelidi<br />
# Bree Tipper<br />
# Irina Parievsky<br />
# Karen Rudnitski<br />
# Hernán Rodríguez Colmeiro<br />
# Kristin Baird<br />
# Tobias Markus<br />
# Brian Birtles<br />
# Kevin Brosnan<br />
# Allison Naaktgboren<br />
# Simon Sapin<br />
# Curtis Koenig</div>Dmosehttps://wiki.mozilla.org/index.php?title=Summit2013/Experiences/signups&diff=719989Summit2013/Experiences/signups2013-10-02T21:37:55Z<p>Dmose: /* 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.<br />
<br />
<b> Note: Please ONLY add/remove your name. Please do not move lists around or change times as it is causing lots of confusion. If you have questions or need help please use #mozsummit. Thank you.</b><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 />
* <b>Time:</b> <br />
* <b>Meeting Location:</b><br />
* <b>Need to Knows:</b><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 />
<tr><td>Kao, Wei-Ko (:othree)</td><td>Kevin, Liu</td></tr><br />
<tr><td>Sudheesh Singanamalla (:ShellHacker)</td><td>Prof. D.V.L.N.Somayajulu</td></tr><br />
<tr><td>[[user:ivikash|Vikash Agrawal]]</td><td>[[user:espressive|Schalk Neethling]]</td></tr><br />
<tr><td>Evil Machines (:m1)</td><td>Martian Ho</td></tr><br />
<tr><td>Wichai Termwuttipreecha</td><td>[https://mozillians.org/en-US/u/kaustav.dasmodak/ Kaustav Das Modak]</td></tr><br />
<tr><td>Chao, Po-chiang (:bobchao)</td><td>Priyanka Nag</td></tr><br />
<tr><td>Henrik Gemal</td><td>Saurabh Shah </td></tr><br />
<tr><td>Pittaya Sroilong</td><td>Vincent Chang</td></tr><br />
<tr><td>Patrick Wang</td><td>Benjamin Chen</td></tr><br />
<tr><td>Ken Chang</td><td>Galaxy Kadiyala</td></tr><br />
<tr><td>Jignesh Kakadiya</td><td>Mike Hommey (:glandium)</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><td>Oarabile Mudongo</td></tr><br />
<tr><td>Pascal Finette</td><td>Jon Hylands</td></tr><br />
<tr><td>Rob Hudson</td><td>Viking KARWUR</td></tr><br />
<tr><td>Shahmir Khan</td><td>Muhammad Mehmood Ali</td></tr><br />
<tr><td>Asad Sajjad</td><td>Shazia Rizwan</td></tr><br />
<tr><td>Alex Vincent</td><td>Gautam A</td></tr><br />
<tr><td>Nagasahas DS</td><td>Jemmy RORONG</td></tr><br />
<tr><td>Finan AKBAR</td><td>Dimas ANDHANA</td></tr><br />
<tr><td>Artanto ISHAAM</td><td>Fauzan ALFI</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>Priyanka Nag</td><td>Soumya Deb</td></tr><br />
<tr><td>Sankha Narayan Guria</td><td>Swarnava Sengupta</td></tr><br />
<tr><td>Ankit Gadgil</td><td>Jaydev Ajit Kumar</td></tr><br />
<tr><td>Diwanshi Pandey</td><td>Avik Pal</td></tr><br />
<tr><td>Gaurab Patra</td><td>Subhashish Kundu</td></tr><br />
<tr><td>Hilary Ho Jia Hao</td><td>Gauthamraj Elango</td></tr><br />
<tr><td>[[user:maktrix|Mahay Alam Khan]]</td><td>[[user:Rifaz|Rifaz Nahiyan]]</td></tr><br />
<tr><td>Zobayer Ahmed Khan</td><td>Benny Chandra</td></tr><br />
<tr><td>Yoe One Ariestya Niovitta</td><td>Rizqinofa Putra M</td></tr><br />
<tr><td>Jayakumar Sadhasivam</td><td>Atul Jangra</td></tr><br />
<tr><td>Akshay Aurora</td><td>Aji Kisworo Mukti</td></tr><br />
<tr><td>Matjaž Horvat</td><td>[[user:mythrobin|Robin Mehdee]]</td></tr><br />
<tr><td>Rohan Dasanayaka</td><td>Ajay Kumar</td></tr><br />
<tr><td>Ankit Mishra</td><td>Parmpreet Singh</td></tr><br />
<tr><td>Anup Kumar Mishra</td><td>Goran Kohek</td></tr><br />
<tr><td>Soumya Kanti Chakraborty</td><td>Jon Buckley</td></tr><br />
<tr><td>Tim Taubert</td><td>Rizky Ariestiyansyah</td></tr><br />
<tr><td>Ani Peter</td><td>Sammy Fung</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>Nick Fitzgerald</td><td>Anton Kovalyov</td></tr><br />
<tr><td>Arun Balachandran Ganesan</td><td>Kevin Ngo</td></tr><br />
<tr><td>Brendan Dahl</td><td>Johnny Stenback</td></tr><br />
<tr><td>Christopher De Cairos</td><td>Sean Bolton</td></tr><br />
<tr><td>Joanna Mazgaj</td><td>[[user:Netoarmando|Armando Neto]]</td></tr><br />
<tr><td>[[user:RodrigoPadula|Rodrigo Padula]]</td><td>Aditya Fitri Hananta Putra</td></tr><br />
<tr><td>John Daggett</td><td>Dwi Hardyanto</td></tr><br />
<tr><td>PATIL Kailas Ravsaheb</td><td>Blair McBride</td></tr><br />
<tr><td>Ajay Jogawath</td><td>[[user:Komal gandhi|Komal Gandhi]]</td></tr><br />
<tr><td>Vaibhav Bajaj</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>Alexis M</td><td>Sandraghassen Subbaraya Pillai</td></tr><br />
<tr><td>byron jones</td><td>André Reinald</td></tr><br />
<tr><td>Aaron Druck</td><td>Ville Pohjanheimo</td></tr><br />
<tr><td>Jay Sullivan</td><td>Meraj Imran</td></tr><br />
<tr><td>Hema Bhanu</td><td>Maniraj</td></tr><br />
<tr><td>Philipp Wagner</td><td>Saurabh Anand</td></tr><br />
<tr><td>Abhishek Potnis</td><td>Amod Narvekar</td></tr><br />
<tr><td>Behnam Esfahbod</td><td>Felipe Gomes</td></tr><br />
<tr><td>Amy Hu</td><td>[[User:kinshuksunil|Kinshuk Sunil]]</td><br />
<tr><td>David Chen</td><td>Midhun Manojkumar </td></tr><br />
<tr><td>Michael Maslaney</td><td>[[user:Tim.babych|Tim Babych]]</td></tr><br />
<tr><td>[[user:ivikash|Vikash Agrawal]]</td><td>Nicholas Hurley</td></tr><br />
<tr><td>Sudheesh Singanamalla</td><td>Prof. D.V.L.N.Somayajulu</td></tr><br />
<tr><td>Evil Machines (:m1)</td><td>Marco Bonardo (:mak)</td></tr><br />
<tr><td>Nigel Babu (:nigelb)</td><td>[https://mozillians.org/en-US/u/kaustav.dasmodak/ Kaustav Das Modak]</td></tr><br />
<tr><td>Md Aminul Islam Sajib</td><td>Md Golam Mostafa</td></tr><br />
<tr><td>Saurabh Shah</td><td>[https://mozillians.org/en-US/u/tiziana/ Tiziana Sellitto] </td></tr><br />
<tr><td>Galaxy Kadiyala</td> <td>Jignesh Kakadiya</td></tr><br />
<tr><td>Mike Hommey (:glandium)</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 about 20 people on Saturday and Sunday morning at 7:30am (session is about 30 min). The exact space will be announced at the Summit (sorting it out!) and here.<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>Rebecca Billings</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 />
<tr><td>Alina Mierlus</td></tr><br />
<tr><td>Saurabh Shah</td></tr><br />
<tr><td>Dan Mosedale</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>204 Kevin, Liu</td></tr><br />
<tr><td>205 Ernest Chiang</td><td>206 James Teh</td></tr><br />
<tr><td>207 Kao Wei-Ko(:othree)</td><td>208 [[user:ivikash|Vikash Agrawal]]</td></tr><br />
<tr><td>209 Pierros Papadeas (:pierros)</td><td>210 Athanasia Thalia Papoutsaki</td></tr><br />
<tr><td>211 Christos Bacharakis</td><td>212 Schalk Neethling</td></tr><br />
<tr><td>213 Heather Arthur</td><td>214 Nicholas Hurley</td></tr><br />
<tr><td>215 Katherine Nelson</td><td>216 Michael Maslaney</td></tr><br />
<tr><td>217 Alina Mierlus</td><td>218 [[user:Tim.babych|Tim Babych]]</td></tr><br />
<tr><td>219 Sudheesh Singamalla</td><td>220 Prof. D.V.L.N. Somayajulu</td></tr><br />
<tr><td>221 John Karahalis</td><td>222 Stefan Mirea</td></tr><br />
<tr><td>223 Kyle Lahnakoski</td><td>224 [https://mozillians.org/en-US/u/Fiag/ Qing Lei]</td></tr><br />
<tr><td>225 Martian Ho</td><td>226 Jill Alvarez</td></tr><br />
<tr><td>227 Andrea Zingerman</td><td>228 [https://mozillians.org/en-US/u/kaustav.dasmodak/ Kaustav Das Modak]</td></tr><br />
<tr><td>229 Chao, Po-chiang (:bobchao)</td><td>230 Priyanka Nag</td></tr><br />
<tr><td>231 Rajesh Ranjan</td><td>232 Angela King</td></tr><br />
<tr><td>233 Henrik Gemal</td><td>234 Stephen Horlander</td></tr><br />
<tr><td>235 Saurabh Shah</td><td>236 Veeraya Pupatwibul</td></tr><br />
<tr><td>237 Vincent Chang</td><td>238 Patric Wang</td></tr><br />
<tr><td>239 Benjamin Chen</td><td>240 Ken Chang</td></tr><br />
<tr><td>241 Galaxy Kadiyala</td><td>242 Jignesh Kakadiya</td></tr><br />
<tr><td>243 Ed Morley</td><td>244 Dan Mosedale</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 />
<tr><td>Rifaz Nahiyan</td></tr><br />
<tr><td>Sankha Narayan Guria</td></tr><br />
<tr><td>Atul Jangra</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 about 20 people on Saturday and Sunday morning at 7:30am (session is about 30 min). The exact space will be announced at the Summit (sorting it out!) and here.<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</td></tr><br />
<tr><td>Erika Aurea Gatmaitan</td></tr><br />
<tr><td>[[user:Tim.babych|Tim Babych]]</td></tr><br />
<tr><td>Fang, Chiung-Hui (GDH)</td></tr><br />
<tr><td>Saurabh Shah</td></tr><br />
<tr><td>Nagasahas DS</td></tr><br />
</table><br />
<br />
===MozSpace Tour Mountain View===<br />
<br />
Want to view the Mozilla Mountain View Space? We have set up a small tour for those people that want to take visit the Mountain View space before the closing dinner and party. <br />
<br />
We will be taking a shuttle over to the office (15 minute drive), will stay for enough time to capture some pictures and then walk back. (We will be at the Space for about 25-30 minutes) Then we will board the shuttle and head back to the venue for some dinner. <br />
<br />
The tour will be hosted by Sylvie Brossard and a few other Mozillians. <br />
<br />
'''Time:''' 5:15-6:15 <br><br />
''*we will begin boarding the shuttle right after closing session. Departing at 5:15 <br><br />
'''Meeting Location:''' Main Lobby by the "Ask Me" desk <br><br />
'''Need to know:''' We will be back to the venue by 6:30, so we can join the closing dinner and dance party festivities. ''There is limited space available as we have a 55 person shuttle.''<br />
<br />
<br />
Sign Up Here: (MAX 55 people)<br />
# Iacopo Benesperi (will leave the place to someone else if we're more than 55, since I'll stay in the area the next week)<br />
# Benny Chandra<br />
# Saurabh Shah<br />
# Yoe One Ariestya Niovitta<br />
# Ashickur Rahman<br />
# Behnam Esfahbod<br />
# Chao, Po-chiang (:bobchao)<br />
# Rahid Hasan<br />
# Shafiul Azam Chowdhury<br />
# Komal Gandhi<br />
# Jafar Muhammed<br />
# Ajay Jogawath<br />
# Priyanka Nag<br />
# Sayak Sarkar<br />
# Saurabh Anand<br />
# Sankha Narayan Guria<br />
# Mashkawat Ahsan<br />
# Rajesh Ranjan<br />
# Sudheesh Singanamalla<br />
# Prof. D.V.L.N. Somayajulu<br />
# Irayani Queencyputri<br />
# Eriska Triana Primayasari<br />
# Deryan Everestha Maured<br />
# Nuri Abidin<br />
# Rahmat Dwi Jatmiko<br />
# Andi Darmawan<br />
# I Gede Bagus Kosha<br />
# Soumya Deb<br />
# Ashkary Rahman<br />
# Wichai Termwuttipreecha<br />
# Alex Lakatos<br />
# Marcela Oniga<br />
# Trevor Hobson<br />
# Sandraghassen Subbaraya Pillai<br />
# Philipp Wagner<br />
# Srikar Ananthula<br />
# Namu Srikanth<br />
# Raghuram Korukonda<br />
# Saikiran Alagandula<br />
# Ville Pohjanheimo<br />
# Pittaya Sroilong<br />
# Soumya Kanti Chakraborty<br />
# Abdul Rauf<br />
# Md Aminul Islam Sajib<br />
# Mahay Alam Khan<br />
# Kengatharaiyer Sarveswaran<br />
# Sandeep Shedmakell<br />
# Sammy Fung<br />
# Akshay Aurora<br />
# Atul Jangra<br />
# Kinshuk Sunil<br />
# Ramesh Kumar Sahu<br />
# Truong Anh Tuan<br />
# Nagasahas DS<br />
# [https://mozillians.org/en-US/u/tiziana/ Tiziana Sellitto]<br />
# Midhun Manojkumar<br />
# Irvin<br />
# Qing Lei<br />
# Aditya Fitri Hananta Putra<br />
# Dwi Hardyanto<br />
# PATIL Kailas Ravsaheb<br />
# Rohan Dasanayaka<br />
# Jemmy Rorong<br />
# Viking Karwur<br />
# Fauzan Alfi<br />
# Finan Akbar<br />
# Dimas Andhana<br />
# Artanto Ishaam<br />
# Muhammad Syafiq Mazli<br />
# Haryati Salehin<br />
# Mohamed Aidid Jaafar<br />
# Lai Chen Haw<br />
# An-jie Yang<br />
# Zobayer Ahmed Khan<br />
# Galaxy Kadiyala<br />
# Jignesh Kakadiya<br />
# Hilary Ho Jia Hao<br />
<br />
=Toronto=<br />
==Friday ==<br />
=== Real Canadian Superhero Pub Crawl (MOVED TO SATURDAY)===<br />
<br> <br />
WE HAVE HAD TO MOVE THE PUB CRAWL TO SATURDAY. PLEASE SIGN UP AGAIN IF YOU ARE STILL INTERESTED.<br />
<br>[[File:WeWantYou2.jpg|200px]]<br><br><br><br />
<br />
=== People in town Friday but not into drinking ===<br />
* [https://mozillians.org/en-US/u/terrameijar/ Vuyisile Ndlovu]<br />
* Jose Junior Villagomez Melgar<br />
* [https://mozillians.org/en-US/u/gueroJeff/ Jeff Beatty]<br />
* [https://mozillians.org/pt-BR/u/jaymeayres/ Jayme Ayres]<br />
* [https://mozillians.org/en-US/u/pmac/ Paul McLanahan]<br />
* [https://mozillians.org/es-Mx/u/leonshion/ Miriam León]<br />
* [https://mozillians.org/es-Mx/u/Ednah/ Ednah Kiome]<br />
* [https://mozillians.org/es-Mx/u/alexfuser/ Alex Fuser]<br />
* [https://mozillians.org/es/u/Nex/ Hugo Acosta]<br />
* [https://mozillians.org/es/u/lourcastillo/ Lourdes Castillo]<br />
* [https://mozillians.org/es/u/psep/ Pablo Sepúlveda]<br />
* [https://mozillians.org/en-US/u/ZiggyMaes/ Ziggy Maes]<br />
* Lianne Lee<br />
* [https://mozillians.org/en-US/u/andreags/ Andrea Guzmán Siu]<br />
* Huda Sarfraz<br />
* [https://mozillians.org/en-US/u/ajones/ Anthony Jones]<br />
* [https://mozillians.org/es/u/aldopy/ Aldo Medina]<br />
* [https://mozillians.org/es/u/Rocio/ Rocio Meza]<br />
* [https://mozillians.org/en-US/u/orin/ Orin Chen]<br />
* [https://mozillians.org/en-US/u/gaby2300/ Gabriela Montagu]<br />
* [https://mozillians.org/en-US/u/mkaply/ Mike Kaply]<br />
* [https://mozillians.org/en-US/u/iamtheashkary/ Ashkary Rahman]<br />
* [https://mozillians.org/en-US/u/jesup/ Randell Jesup]<br />
* [https://mozillians.org/en-US/u/mreavy/ Maire Reavy]<br />
* [https://mozillians.org/en-US/u/ravmn/ Richard von Moltke]<br />
* [https://mozillians.org/u/gphemsley/ Gordon P. Hemsley]<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>[https://mozillians.org/en-US/u/terrameijar/ 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>[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 />
<tr><td>Ben Francis</td></tr><br />
<tr><td>J. Ryan Stinnett</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/mkaply/ Mike Kaply]</td></tr><br />
<tr><td>Odin Mojica</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 />
=== 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 />
# Ben Francis<br />
# Aldo Medina<br />
# Rocio Meza<br />
# J. Ryan Stinnett<br />
# Ricardo Pontes<br />
# Bhavana Bajaj<br />
# Ricardo Sato<br />
# Carlos Valim "Coragem"<br />
# Joanne Nguyen<br />
# Winnie Aoieong<br />
# Michael Coates<br />
# Jesebel Kim<br />
# Jim Cook<br />
# Sam Foster<br />
# Karen Jeffrey<br />
# Ednah Kiome<br />
# Paola da Silva<br />
# Santiago Ferreira<br />
# Elsa Rodriguez<br />
# Eduardo Trapani<br />
<br />
=== Real Canadian Superhero Pub Crawl (NEW DATE) ===<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 around the downtown area and back to the hotel, 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 />
<table class="wikitable" border=0 valign="top"><br />
<tr><td><br />
; ''' Super Sign up sheet ''': Current maximum is 35, but if there is strong interest, we can look to extend.<br />
<table class="wikitable" border=1><tr><th>#</th><th>Name</th><th>Alter Ego</th></tr><br />
<tr><td>1</td><td>[https://mozillians.org/en-US/u/phundal/ Patrick Hundal]</td><td>Ale-inhaler</td></tr><br />
<tr><td>2</td><td>Maya Barrow</td><td>Margareeta</td></tr><br />
<tr><td>3</td><td>[https://mozillians.org/en-US/u/rseiji/ Ricardo Sato]</td><td>Satozilla</td></tr><br />
<tr><td>4</td><td>[https://mozillians.org/en-US/u/jaydson/ Jaydson Gomes]</td><td>Quail Man</td></tr><br />
<tr><td>5</td><td>Patrick Cloke</td><td></td></tr><br />
<tr><td>6</td><td>[https://mozillians.org/en-US/u/Urcu/ Eduardo Urcullú Madrid]</td><td>Urcumeitor</td></tr><br />
<tr><td>7</td><td>[https://mozillians.org/en-US/u/felipenmoura/ Felipe N. Moura]</td><td>Mulder</td></tr><br />
<tr><td>8</td><td>Ricardo Panasggio</td><td>Super Sober</td></tr><br />
<tr><td>9</td><td>Evelyn Urcullú</td><td></td></tr><br />
<tr><td>10</td><td>Carlos Valim "Coragem"</td><td>Fox from tha ghetto</td></tr><br />
<tr><td>11</td><td>[https://mozillians.org/en-US/u/lasr21/ LASR21 a.k.a Luis Sanchez]</td><td>Mexican Panda</td></tr><br />
<tr><td>12</td><td>[https://mozillians.org/en-US/u/rdaub/ Ralph Daub]</td><td>Snow-Dance</td></tr><br />
<tr><td>13</td><td>[https://mozillians.org/en-US/u/prixon/ Matej Priteržnik]</td><td>Black Ma-jek</td></tr><br />
<tr><td>14</td><td>[https://mozillians.org/en-US/u/ricardopontes/ Ricardo Pontes]</td><td>Chuckzilla</td></tr><br />
<tr><td>15</td><td>Julien Wajsberg</td><td>Flashberg</td></tr><br />
<tr><td>16</td><td>Arzhel Younsi</td><td>Super Celtic</td></tr><br />
<tr><td>17</td><td>Paul Adenot</td><td>Bierman</td></tr><br />
<tr><td>18</td><td>Manuel Camacho</td><td>GREEN</td></tr><br />
<tr><td>19</td><td>Romina Guerra</td><td>Super PINK</td></tr><br />
<tr><td>20</td><td>[https://mozillians.org/en-US/u/keppelen/ Giovanni Keppelen dos Santos]</td><td></td></tr><br />
<tr><td>21</td><td>[https://mozillians.org/en-US/u/deluna/ Bernard de Luna]</td><td></td></tr><br />
<tr><td>22</td><td>[https://mozillians.org/en-US/u/andregarzia/ Andre Alves Garzia]</td><td>Drunken Fennec</td></tr><br />
<tr><td>23</td><td>[https://mozillians.org/en-US/u/leobalter/ Leo Balter]</td><td>The Mozillator</td></tr><br />
<tr><td>24</td><td>[https://mozillians.org/en-US/u/gabriela.oliv/ Gabriela Oliveira]</td><td>Chuchu Girl</td></tr><br />
<tr><td>25</td><td>[https://mozillians.org/en-US/u/dricupello/ Adriano Cupello]</td><td></td></tr><br />
<tr><td>26</td><td>Andrea Balle</td><td></td></tr><br />
<tr><td>27</td><td>[https://mozillians.org/en-US/u/enzomatrix/ Marcelo Poli]</td><td></td></tr><br />
<tr><td>28</td><td>[https://mozillians.org/en-US/u/alex_mayorga/ alex_mayorga]</td><td>The orange Zorro</td></tr><br />
<tr><td>29</td><td>[https://mozillians.org/en-US/u/orin/ Orin Chen]</td><td>dash</td></tr><br />
<tr><td>30</td><td>Maicon Ferreira</td><td></td></tr><br />
<tr><td>31</td><td>Jay Sullivan</td><td></td></tr><br />
<tr><td>32</td><td>[https://mozillians.org/en-US/u/winniea/ Winnie Aoieong]</td><td></td></tr><br />
<tr><td>33</td><td>Michael Coates</td><td></td></tr><br />
<tr><td>34</td><td>[https://mozillians.org/en-US/u/jnguyen/ Joanne Nguyen]</td><td></td></tr><br />
<tr><td>35</td><td>Jim Cook</td><td></td></tr><br />
<tr><td>36</td><td>Jesebel Kim</td><td></td></tr><br />
<tr><td></td><td>Below is waiting list</td><td></td></tr><br />
<tr><td>37</td><td>[https://mozillians.org/u/rik Anthony Ricaud]</td><td></td></tr><br />
<tr><td>38</td><td>[https://mozillians.org/u/pir Peter Radcliffe]</td><td></td></tr><br />
<tr><td>39</td><td>Bhavana Bajaj</td><td></td></tr><br />
<tr><td>40</td><td>Leonard Camacho</td><td></td></tr><br />
<tr><td>40</td><td>Ednah Kiome</td><td></td></tr><br />
<tr><td>41</td><td>Erik Vold</td><td>The Rocketbeer</td></tr><br />
<tr><td>42</td><td>Jill Van De Ven</td><td></td></tr><br />
<tr><td>43</td><td>Kendall Libby</td><td>Purple Terror</td></tr><br />
<tr><td>44</td><td>Andre Natal</td><td></td></tr><br />
<tr><td>45</td><td>Marty Rosenberg</td><td></td></tr><br />
<tr><td>46</td><td>Odin Mojica</td><td></td></tr><br />
<tr><td>46</td><td>Elsa Rodriguez</td><td></td></tr><br />
<tr><td>47</td><td>[https://mozillians.org/u/ThePhoenixBird Arturo Martinez]</td><td>Flaming Phoenix</td></tr><br />
<tr><td>48</td><td>[https://mozillians.org/u/eviljeff Andrew Williamson]</td><td></td></tr><br />
</table><br />
</td> <br />
<td valign="top"><br />
;Latest information (Oct 2, 2013): Please continue to check here for latest updates and details. We are currently still verifying the pubs that will be visited as well as the total participants we can handle. More super soon!<br />
;Start time: We will begin at 7:30pm in the Sheraton lobby, and we will spend about 30min at each pub. If you are playing catch-up from the CN Tower, estimate about 45min (total) for each pub. <br />
<br><br />
;'''List of pubs on tour (not finalized...)''':[http://goo.gl/maps/Nd1R2 Google map of pubs]<br />
<br><br />
;Fionn MacCool's: 181 University Avenue, Toronto, ON +1 416-363-1944, http://primepubs.com<br />
;Earls Kitchen & Bar: 150 King St W #100, Toronto, ON, +1 416-916-0227, http://earls.ca <br />
;Irish Embassy Pub and Grill: 49 Yonge Street, Toronto, ON +1 416-866-8282, http://irishembassypub.com<br />
;P.J. O'Brien Irish Pub & Restaurant: 39 Colborne Street, Toronto, ON +1 416-815-7562, http://pjobrien.com<br />
;C'est What : 67 Front Street East, Toronto, ON +1 416-867-9499, http://cestwhat.com<br />
; The Jason George : 104 Front Street East, Toronto, ON +1 416-363-7100, http://thejasongeorge.ca<br />
;The Richmond Rogue: 284 Richmond Street East, Toronto, ON +1 416-868-9595, http://therichmondrogue.com<br />
;New Windsor Tavern: 124 Church Street, Toronto, ON +1 416-364-9698, http://mcveighspub.com<br />
</td></table><br />
<br />
==Sunday==<br />
<br />
===MozSpace Tour===<br />
<br />
Want to view the Mozilla Toronto Space? We have set up a small tour for those people that want to take visit the Toronto space before the closing dinner and party. <br />
<br />
We will be walking over to the office (15 minute walk), will stay for enough time to capture some pictures and then walk back. (We will be at the Space for about 25-30 minutes) <br />
<br />
The tour will be hosted by a few Mozillians from the Space. <br />
<br />
'''Time:''' 5:15-6:15 (we start walking back at 6:00) <br><br />
'''Meeting Location:''' Main Lobby by the "Ask Me" desk <br><br />
'''Need to know:''' We will be back to the venue by 6:30, so we can join the closing dinner and dance party festivities. <br />
<br />
<br />
Sign Up Here: <br />
* [https://mozillians.org/es/u/Urcu/ Eduardo Urcullú Madrid]<br />
* Sabrina Ng<br />
* Karen Jeffrey<br />
* [https://mozillians.org/en-US/u/diane/ Diane (Tate) Bisgeier]<br />
* [https://mozillians.org/en-US/u/firetoad/ Mike Collins]<br />
* [https://mozillians.org/en-US/u/gaby2300/ Gabriela Montagu Buenos Aires]<br />
* [https://mozillians.org/en-US/u/mkaply/ Mike Kaply]<br />
* Andrea Guzmán Siu<br />
* Leonard Camacho<br />
* Faten Ben Thabet<br />
* Erik Vold<br />
* Ednah Kiome<br />
* [https://mozillians.org/u/sh.yaron/ Yaron Sharabani]<br />
* [https://mozillians.org/u/elad/ Elad Alfassa]<br />
* [https://mozillians.org/u/tomer/ Tomer Cohen]<br />
* [https://mozillians.org/u/psep/ Pablo Sepúlveda]<br />
* [https://mozillians.org/u/lourcastillo/ Lourdes Castillo]<br />
* Mario Garcia<br />
* Johan Gonzalez<br />
* Havi Hoffman<br />
* [https://mozillians.org/u/lasr21/ LASR21 a.k.a Luis Sanchez]<br />
* [https://mozillians.org/u/rseiji/ Ricardo Sato]<br />
* [https://mozillians.org/es/u/ravmn/ Richard von Moltke]<br />
* Joaquín Haeussler<br />
* Gustavo Munro<br />
* [https://mozillians.org/u/terrameijar/ Vuyisile Ndlovu]<br />
* [https://mozillians.org/es/u/ThePhoenixBird/ Arturo Martinez]<br />
* [https://mozillians.org/es/u/paodsf83/ Paola da Silva]<br />
* [https://mozillians.org/es/u/sanux/ Santiago Ferreira]<br />
* [https://mozillians.org/en-US/u/schien/ Shih-Chiang Chien]<br />
* [https://mozillians.org/en-US/u/timdream/ Tim Guan-tin Chien]<br />
* Kevin Hu<br />
* [https://mozillians.org/u/gasolin/ Fred Lin (gasolin)]<br />
* [https://mozillians.org/zh-TW/u/gduan/ George Duan]<br />
* [https://mozillians.org/u/rudylu/ Rudy Lu]<br />
* [https://mozillians.org/en-US/u/hhuang/ Helen Huang]<br />
* Lianne Lee<br />
* [https://mozillians.org/zh-TW/u/chucklee/ Chuck Lee]<br />
* [https://mozillians.org/zh-TW/u/fshih/ Fang Shih]<br />
* Steven Lee<br />
* Ben Francis<br />
* Elsa Rodriguez<br />
* [https://mozillians.org/en-US/u/Alam/ Aman Alam]<br />
* [https://mozillians.org/en-US/u/eviljeff Andrew Williamson]<br />
* [https://mozillians.org/u/gphemsley/ Gordon P. Hemsley]<br />
* Francis Djabri<br />
* [https://mozillians.org/u/mstange/ Markus Stange]<br />
* Eduardo Trapani<br />
<br />
=Brussels=<br />
==Friday ==<br />
=== Jellyfishing ===<br />
OMG Jellys! Yes, you read that right! Our very own [https://mozillians.org/en-US/u/rlord/ Rob Lord] is going to instruct and lead a group of Mozillians to bloom through the cobble streets of Brussels. <br />
:Blooming Treasure Island Music Festival in San Francisco '''[https://vimeo.com/35285151 video]''' <br />
:Blooming White Ocean camp at Burning Man '''[http://www.youtube.com/watch?v=MlJjWS9EajU video]'''<br />
:Billion Jelly Bloom on Kickstarter '''[http://www.kickstarter.com/projects/pattilord/omg-jellyfish video]'''<br />
:Billion Jelly Bloom on Facebook '''[http://fb.com/BillionJellyBloom Facebook]'''<br />
<br />
We'll have 10 jellies undulate, articulate and share in teams of two or three to delight our host city. Photographers encouraged too. <br />
<br />
Sign up here with a link to your mozillians.org account and email address so that I, Rob, can email you all with the event location and time details. <br />
<br />
# [https://mozillians.org/en-US/u/sharno/ Mohamed El Sharnoby], [mailto:sharnoby3@gmail.com sharnoby3@gmail.com]<br />
# [https://mozillians.org/en-US/u/jms/ Janet Swisher], [mailto:jswisher@mozilla.com jswisher@mozilla.com] <br />
# [https://mozillians.org/en-US/u/canuckistani/ Jeff Griffiths], [mailto:jgriffiths@mozilla.com jgriffiths@mozilla.com] <br />
# [https://mozillians.org/en-US/u/919adbc95b/ Aashish Jagini], [mailto:aashish.stalin@gmail.com aashish.stalin@gmail.com] <br />
# [https://mozillians.org/en-US/u/avsaro/ Onur Avsar], [mailto:avsaro42@gmail.com avsaro42@gmail.com]<br />
# [https://mozillians.org/en-US/u/pinielhasibuan/, Piniel Romulia Hasibuan], [mailto:pinielhasibuan@gmail.com pinielhasibuan@gmail.com]<br />
# [https://mozillians.org/en-US/u/mubirujonato/ Mubiru Jonathan], [mailto:mubirujonato@yahoo.com mubirujonato@yahoo.com]<br />
# [https://mozillians.org/en-US/u/SunboX/ André Fiedler], [mailto:andre.fiedler@me.com andre.fiedler@me.com]<br />
# [https://mozillians.org/en-US/u/ilana/ Ilana Segall], [mailto:isegall@mozilla.com isegall@mozilla.com]<br />
# William Reynolds<br />
# Laura Forrest<br />
# Fabio Magnoni<br />
# Wei Li<br />
# Yanfang Liu<br />
# Sharon Xiaoyun Yang<br />
# Curtis Koenig<br />
# Gervase Markham<br />
# Antoine Turmel<br />
# Avinash Kundaliya<br />
# Justin O'Kelly<br />
<br />
=== Dancing! Fun! ===<br />
Hi, [https://mozillians.org/en-US/u/kumar/ Kumar McMillan] here. While I'm not working on Firefox OS payments I'm most likely DJing in my living room, at some dance party or bar, etc. My good friend and Bruxelles local [http://lowdjo.com/ Lowdjo] invited me to play records with him at [https://www.facebook.com/pages/Caf%C3%A9-Central/143434702389318 Le Cafe Central] while I'm out there. No need to sign-up, just stop by if you're interested in dancing to disco, boogie, 80s funk, or whatever else we feel like playing.<br />
<br />
* Time: 11pm to 4am (we'll be DJing the entire time)<br />
* Location: [https://www.facebook.com/pages/Caf%C3%A9-Central/143434702389318 Le Cafe Central] (includes full bar)<br />
* Address: [http://www.bing.com/maps/default.aspx?v=2&pc=FACEBK&mid=8100&rtp=adr.~pos.50.847777198698_4.3477700156474_Caf%C3%A9+Central_14+rue+borgwal%2C+1000+Brussels%2C+Belgium&cp=50.847777198698~4.3477700156474&lvl=16&sty=r&rtop=0~0~0~&mode=D&FORM=FBKPL2&mkt=en-US 14 rue borgwal, 1000 Brussels, Belgium]<br />
<br />
Sign-ups: N/A<br />
<br />
==Saturday==<br />
=== Bikram yoga ===<br />
<br />
We'll attend a [http://en.wikipedia.org/wiki/Bikram_Yoga Bikram yoga] (hot yoga) class at [http://www.fbyci.com/brussels/index.htm the Brussels school]. Please sign up if you'd like to attend.<br />
<br />
It looks like we have enough people to make this happen. Woot! <br />
<br />
'''Time:''' 8:00pm Local Time <br><br />
'''Meeting Location:''' Meet by "Ask Me" desk at 19:15 and we will travel to the school from there. <br><br />
'''Need To Know:''' Try not to eat too much just before going to class (eat lightly for 2h before the class starts). Bring light clothing (men can do just shorts or add a T-shirt, women can wear shorts and a top), it gets very sweaty.<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 />
#Rodrigo Waters<br />
#Denish Okidi<br />
<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 />
*Fabian Rodriguez<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 />
*Jovan Ssebaggala<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 />
*William Duyck<br />
*RJ Hsiao<br />
*Achraf Fouwad<br />
*Denish Okidi<br />
*Abaho Micheal<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 />
* Kris Maglione<br />
* Andreas Wagner<br />
* Zach Beauvais<br />
* Jorge Villalobos<br />
* Daniel Holbert<br />
* Rodrigo Waters<br />
* Achraf Fouwad<br />
* Johannes Vogel<br />
* Jordan Lund<br />
*Jovan Ssebaggala<br />
<br />
=== Bar Delirium ===<br />
<br />
We have secured 2 drink vouchers for beer and soft drinks for all those who have signed up below. Get ready to enjoy a real pub experience! <br />
<br />
'''Time:''' 7:45-10:00pm <br><br />
'''Meeting Location''': Please pick up your drink tickets from the "Ask Me" desk anytime between 7:30-7:45pm. We will walk to Delirium at 7:45pm. <br><br />
'''Need To Know:''' Drink vouchers can be used for beer and soft drinks only. You must pick up your drink vouchers before you head to Delirium. <br><br />
<br />
''(List sorted to remove duplicates)''<br />
*Aashish Jagini<br />
*Adam Newman<br />
*Adrian Fernandez<br />
*Alba González<br />
*Aleksandra Uzelac<br />
*aleth<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 />
*Destuynder Guillaume<br />
*Dietrich Ayala<br />
*Dustin J. Mitchell<br />
*Ed Lim<br />
*Elio Qoshi <br />
*Estela Liu<br />
*Fabian Rodriguez<br />
*Fabio Magnoni<br />
*Fabricio Zuardi<br />
*Frank Wein<br />
*Frederik Braun<br />
*Gemma Petrie<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 />
*Jean-Yves Perrier<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 />
*Jordan Lund<br />
* Abaho Micheal<br />
*Jorge Villalobos<br />
*Jovan Ssebaggala<br />
*Julen Ruiz Aizpuru<br />
*Julien Vehent<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 />
*Leslie Orchard<br />
*Lizz Noonan<br />
*Luca Greco<br />
*Lucas Rocha<br />
*Malini Das<br />
*Marc Schifer<br />
*Mark C&ocirc;t&eacute;<br />
*Martin Creutziger<br />
*Mathieu Laurent<br />
*Michelle Marovich<br />
*Michael Bebenita<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 />
*Philipp Madersbacher<br />
*Pierre-Louis Augey<br />
*Raivis Dejus<br />
*Redon Skikuli <br />
*Reed Loden<br />
*Robert Wood<br />
*Robyn Chau<br />
*Rodrigo Waters<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 Bennetts<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 />
*Tobias Markus<br />
*Tom Schuster<br />
*Toni Hermoso<br />
*Ty Flanagan<br />
*Van Le<br />
*Vien Doan<br />
*Vit lai<br />
*William Duyck<br />
*William Reynolds<br />
*Wilson Guaraca <br />
*Zac Campbell<br />
*Zach Carter<br />
*Dejan Strbad<br />
*Ana-Maria Antolovic<br />
*RJ Hsiao<br />
*Achraf Fouwad<br />
*Denish Okidi<br />
*Yousef Alam<br />
*Jan Bambach<br />
*Leo McArdle<br />
*Jonjo McArdle<br />
*Ricardo Maçãs<br />
<br />
=== Chocolate Making (7:30pm) ===<br />
Mozillians in Brussels, you are in for a real treat! If you like making chocolate, or just like chocolate tasting we've got two options for you! <br />
On Saturday, one of Brussels top chocolatiers, Laurent Gerbaud will be conducting a chocolate making class (tasting also included) for the first 25 Mozillians to sign up. <br />
If you'd like to read more about them, check out them out [http://www.chocolatsgerbaud.be here]<br />
For those that are interested in tasting the many types of chocolate Brussels has to offer, please sign up for the Sunday session. <br />
<br />
Space is limited, '''25''' spots available and is now '''FULL'''<br />
<br />
# Marcia Knous<br />
# Doris Coleman<br />
# Mary Trombley <br />
# Tanner Young <br />
# Krupa Raj <br />
# Larissa Co <br />
# Gemma Petrie <br />
# Fernando García Gómez <br />
# Elio Qoshi <br />
# Redon Skikuli <br />
# Sokol Dollani<br />
# Altin Ukshini <br />
# Gent Thaci <br />
# Ardian Haxha <br />
# Berni Melero <br />
# Mavis Ou <br />
# Vien Doan <br />
# Jennifer Hayashi <br />
# Fabricio Zuardi<br />
# Benjamin Sternthal <br />
# Mohamed El Sharnoby <br />
# Maureen Hanratty <br />
# Sébastien Desvignes <br />
# Wilson Guaraca <br />
# James Graham<br />
# Abaho Micheal<br />
<br />
=== Chocolate Tasting ONLY (8:30pm) ===<br />
Space is limited, '''25''' spots available:<br />
# Marco Zehe<br />
# Sébastien Barbieri<br />
# Mathieu Laurent<br />
# Ioana Chiorean<br />
# Kris Maglione<br />
# Jorge Villalobos<br />
# Florin Bogdan Strugariu<br />
# Bartosz Piec<br />
# Leo McArdle<br />
# Yousef Alam<br />
# Jan Bambach<br />
# William Reynolds<br />
# Laura Forrest<br />
# Peipei Cheng<br />
# Yanfang Liu<br />
# Wei Li<br />
# Phoebe Chang<br />
# Jessica Jong<br />
# Sharon Xiaoyun Yang<br />
# Aleksandra Uzelac<br />
# Oskar Ivanic<br />
# Dejan Binder<br />
# Saša Jakovljevic<br />
# Nino Vranešic<br />
# Aashish Jagini<br />
<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 />
#Abaho Micheal<br />
#Majda Nafissa Rahal<br />
#Rubén Martín<br />
#Konstantina Papadea<br />
#Daniel Holbert<br />
#Denish Okidi<br />
<br />
==Sunday==<br />
=== Chocolate Tasting (5pm) ===<br />
''details above''. Space is limited, '''25''' spots available and is now '''FULL'''.<br />
<br />
# Krupa Raj<br />
# Marcia Knous<br />
# Gene Wood<br />
# Fabricio Zuardi<br />
# Wilson Guaraca<br />
# Mavis Ou<br />
# Mohamed El Sharnoby<br />
# Jean Collings<br />
# Jessilyn Davis<br />
# Richard Marti<br />
# Doris Coleman<br />
# Janet Swisher<br />
# Kim Ludvigsen<br />
# Ana-Maria Antolovic<br />
# aleth<br />
# John Bevan<br />
# Mihnea Dobrescu-Balaur<br />
# Alexandros Mioglou<br />
# Aashish Jagini <br />
# Tauni Oxborrow <br />
# Netha Hussain<br />
# Ziga Milek<br />
# Dustin J. Mitchell<br />
# Fabio Magnoni<br />
# Alison Wheeler<br />
<br />
=== Chocolate Tasting (6:15pm) ===<br />
Also full.<br />
# Tom Schuster<br />
# Onur Avsar<br />
# Piniel Romulia Hasibuan<br />
# Zhenshuo Fang<br />
# Mubiru Jonathan<br />
# Gina Yeh<br />
# Bella Su<br />
# Shelly Lin<br />
# Vit lai<br />
# Balazs Koren<br />
# Marco Zehe<br />
# Ty Flanagan<br />
# Emily Goligoski<br />
# Chloe Varelidi<br />
# Bree Tipper<br />
# Irina Parievsky<br />
# Karen Rudnitski<br />
# Hernán Rodríguez Colmeiro<br />
# Kristin Baird<br />
# Tobias Markus<br />
# Brian Birtles<br />
# Kevin Brosnan<br />
# Allison Naaktgboren<br />
# Simon Sapin<br />
# Curtis Koenig</div>Dmosehttps://wiki.mozilla.org/index.php?title=Summit2013/Experiences/signups&diff=719988Summit2013/Experiences/signups2013-10-02T21:37:11Z<p>Dmose: /* Mozillians Pilates */</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.<br />
<br />
<b> Note: Please ONLY add/remove your name. Please do not move lists around or change times as it is causing lots of confusion. If you have questions or need help please use #mozsummit. Thank you.</b><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 />
* <b>Time:</b> <br />
* <b>Meeting Location:</b><br />
* <b>Need to Knows:</b><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 />
<tr><td>Kao, Wei-Ko (:othree)</td><td>Kevin, Liu</td></tr><br />
<tr><td>Sudheesh Singanamalla (:ShellHacker)</td><td>Prof. D.V.L.N.Somayajulu</td></tr><br />
<tr><td>[[user:ivikash|Vikash Agrawal]]</td><td>[[user:espressive|Schalk Neethling]]</td></tr><br />
<tr><td>Evil Machines (:m1)</td><td>Martian Ho</td></tr><br />
<tr><td>Wichai Termwuttipreecha</td><td>[https://mozillians.org/en-US/u/kaustav.dasmodak/ Kaustav Das Modak]</td></tr><br />
<tr><td>Chao, Po-chiang (:bobchao)</td><td>Priyanka Nag</td></tr><br />
<tr><td>Henrik Gemal</td><td>Saurabh Shah </td></tr><br />
<tr><td>Pittaya Sroilong</td><td>Vincent Chang</td></tr><br />
<tr><td>Patrick Wang</td><td>Benjamin Chen</td></tr><br />
<tr><td>Ken Chang</td><td>Galaxy Kadiyala</td></tr><br />
<tr><td>Jignesh Kakadiya</td><td>Mike Hommey (:glandium)</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><td>Oarabile Mudongo</td></tr><br />
<tr><td>Pascal Finette</td><td>Jon Hylands</td></tr><br />
<tr><td>Rob Hudson</td><td>Viking KARWUR</td></tr><br />
<tr><td>Shahmir Khan</td><td>Muhammad Mehmood Ali</td></tr><br />
<tr><td>Asad Sajjad</td><td>Shazia Rizwan</td></tr><br />
<tr><td>Alex Vincent</td><td>Gautam A</td></tr><br />
<tr><td>Nagasahas DS</td><td>Jemmy RORONG</td></tr><br />
<tr><td>Finan AKBAR</td><td>Dimas ANDHANA</td></tr><br />
<tr><td>Artanto ISHAAM</td><td>Fauzan ALFI</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>Priyanka Nag</td><td>Soumya Deb</td></tr><br />
<tr><td>Sankha Narayan Guria</td><td>Swarnava Sengupta</td></tr><br />
<tr><td>Ankit Gadgil</td><td>Jaydev Ajit Kumar</td></tr><br />
<tr><td>Diwanshi Pandey</td><td>Avik Pal</td></tr><br />
<tr><td>Gaurab Patra</td><td>Subhashish Kundu</td></tr><br />
<tr><td>Hilary Ho Jia Hao</td><td>Gauthamraj Elango</td></tr><br />
<tr><td>[[user:maktrix|Mahay Alam Khan]]</td><td>[[user:Rifaz|Rifaz Nahiyan]]</td></tr><br />
<tr><td>Zobayer Ahmed Khan</td><td>Benny Chandra</td></tr><br />
<tr><td>Yoe One Ariestya Niovitta</td><td>Rizqinofa Putra M</td></tr><br />
<tr><td>Jayakumar Sadhasivam</td><td>Atul Jangra</td></tr><br />
<tr><td>Akshay Aurora</td><td>Aji Kisworo Mukti</td></tr><br />
<tr><td>Matjaž Horvat</td><td>[[user:mythrobin|Robin Mehdee]]</td></tr><br />
<tr><td>Rohan Dasanayaka</td><td>Ajay Kumar</td></tr><br />
<tr><td>Ankit Mishra</td><td>Parmpreet Singh</td></tr><br />
<tr><td>Anup Kumar Mishra</td><td>Goran Kohek</td></tr><br />
<tr><td>Soumya Kanti Chakraborty</td><td>Jon Buckley</td></tr><br />
<tr><td>Tim Taubert</td><td>Rizky Ariestiyansyah</td></tr><br />
<tr><td>Ani Peter</td><td>Sammy Fung</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>Nick Fitzgerald</td><td>Anton Kovalyov</td></tr><br />
<tr><td>Arun Balachandran Ganesan</td><td>Kevin Ngo</td></tr><br />
<tr><td>Brendan Dahl</td><td>Johnny Stenback</td></tr><br />
<tr><td>Christopher De Cairos</td><td>Sean Bolton</td></tr><br />
<tr><td>Joanna Mazgaj</td><td>[[user:Netoarmando|Armando Neto]]</td></tr><br />
<tr><td>[[user:RodrigoPadula|Rodrigo Padula]]</td><td>Aditya Fitri Hananta Putra</td></tr><br />
<tr><td>John Daggett</td><td>Dwi Hardyanto</td></tr><br />
<tr><td>PATIL Kailas Ravsaheb</td><td>Blair McBride</td></tr><br />
<tr><td>Ajay Jogawath</td><td>[[user:Komal gandhi|Komal Gandhi]]</td></tr><br />
<tr><td>Vaibhav Bajaj</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>Alexis M</td><td>Sandraghassen Subbaraya Pillai</td></tr><br />
<tr><td>byron jones</td><td>André Reinald</td></tr><br />
<tr><td>Aaron Druck</td><td>Ville Pohjanheimo</td></tr><br />
<tr><td>Jay Sullivan</td><td>Meraj Imran</td></tr><br />
<tr><td>Hema Bhanu</td><td>Maniraj</td></tr><br />
<tr><td>Philipp Wagner</td><td>Saurabh Anand</td></tr><br />
<tr><td>Abhishek Potnis</td><td>Amod Narvekar</td></tr><br />
<tr><td>Behnam Esfahbod</td><td>Felipe Gomes</td></tr><br />
<tr><td>Amy Hu</td><td>[[User:kinshuksunil|Kinshuk Sunil]]</td><br />
<tr><td>David Chen</td><td>Midhun Manojkumar </td></tr><br />
<tr><td>Michael Maslaney</td><td>[[user:Tim.babych|Tim Babych]]</td></tr><br />
<tr><td>[[user:ivikash|Vikash Agrawal]]</td><td>Nicholas Hurley</td></tr><br />
<tr><td>Sudheesh Singanamalla</td><td>Prof. D.V.L.N.Somayajulu</td></tr><br />
<tr><td>Evil Machines (:m1)</td><td>Marco Bonardo (:mak)</td></tr><br />
<tr><td>Nigel Babu (:nigelb)</td><td>[https://mozillians.org/en-US/u/kaustav.dasmodak/ Kaustav Das Modak]</td></tr><br />
<tr><td>Md Aminul Islam Sajib</td><td>Md Golam Mostafa</td></tr><br />
<tr><td>Saurabh Shah</td><td>[https://mozillians.org/en-US/u/tiziana/ Tiziana Sellitto] </td></tr><br />
<tr><td>Galaxy Kadiyala</td> <td>Jignesh Kakadiya</td></tr><br />
<tr><td>Mike Hommey (:glandium)</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 about 20 people on Saturday and Sunday morning at 7:30am (session is about 30 min). The exact space will be announced at the Summit (sorting it out!) and here.<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>Rebecca Billings</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 />
<tr><td>Alina Mierlus</td></tr><br />
<tr><td>Saurabh Shah</td></tr><br />
<tr><td>Dan Mosedale</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>204 Kevin, Liu</td></tr><br />
<tr><td>205 Ernest Chiang</td><td>206 James Teh</td></tr><br />
<tr><td>207 Kao Wei-Ko(:othree)</td><td>208 [[user:ivikash|Vikash Agrawal]]</td></tr><br />
<tr><td>209 Pierros Papadeas (:pierros)</td><td>210 Athanasia Thalia Papoutsaki</td></tr><br />
<tr><td>211 Christos Bacharakis</td><td>212 Schalk Neethling</td></tr><br />
<tr><td>213 Heather Arthur</td><td>214 Nicholas Hurley</td></tr><br />
<tr><td>215 Katherine Nelson</td><td>216 Michael Maslaney</td></tr><br />
<tr><td>217 Alina Mierlus</td><td>218 [[user:Tim.babych|Tim Babych]]</td></tr><br />
<tr><td>219 Sudheesh Singamalla</td><td>220 Prof. D.V.L.N. Somayajulu</td></tr><br />
<tr><td>221 John Karahalis</td><td>222 Stefan Mirea</td></tr><br />
<tr><td>223 Kyle Lahnakoski</td><td>224 [https://mozillians.org/en-US/u/Fiag/ Qing Lei]</td></tr><br />
<tr><td>225 Martian Ho</td><td>226 Jill Alvarez</td></tr><br />
<tr><td>227 Andrea Zingerman</td><td>228 [https://mozillians.org/en-US/u/kaustav.dasmodak/ Kaustav Das Modak]</td></tr><br />
<tr><td>229 Chao, Po-chiang (:bobchao)</td><td>230 Priyanka Nag</td></tr><br />
<tr><td>231 Rajesh Ranjan</td><td>232 Angela King</td></tr><br />
<tr><td>233 Henrik Gemal</td><td>234 Stephen Horlander</td></tr><br />
<tr><td>235 Saurabh Shah</td><td>236 Veeraya Pupatwibul</td></tr><br />
<tr><td>237 Vincent Chang</td><td>238 Patric Wang</td></tr><br />
<tr><td>239 Benjamin Chen</td><td>240 Ken Chang</td></tr><br />
<tr><td>241 Galaxy Kadiyala</td><td>242 Jignesh Kakadiya</td></tr><br />
<tr><td>243 Ed Morley</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 />
<tr><td>Rifaz Nahiyan</td></tr><br />
<tr><td>Sankha Narayan Guria</td></tr><br />
<tr><td>Atul Jangra</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 about 20 people on Saturday and Sunday morning at 7:30am (session is about 30 min). The exact space will be announced at the Summit (sorting it out!) and here.<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</td></tr><br />
<tr><td>Erika Aurea Gatmaitan</td></tr><br />
<tr><td>[[user:Tim.babych|Tim Babych]]</td></tr><br />
<tr><td>Fang, Chiung-Hui (GDH)</td></tr><br />
<tr><td>Saurabh Shah</td></tr><br />
<tr><td>Nagasahas DS</td></tr><br />
</table><br />
<br />
===MozSpace Tour Mountain View===<br />
<br />
Want to view the Mozilla Mountain View Space? We have set up a small tour for those people that want to take visit the Mountain View space before the closing dinner and party. <br />
<br />
We will be taking a shuttle over to the office (15 minute drive), will stay for enough time to capture some pictures and then walk back. (We will be at the Space for about 25-30 minutes) Then we will board the shuttle and head back to the venue for some dinner. <br />
<br />
The tour will be hosted by Sylvie Brossard and a few other Mozillians. <br />
<br />
'''Time:''' 5:15-6:15 <br><br />
''*we will begin boarding the shuttle right after closing session. Departing at 5:15 <br><br />
'''Meeting Location:''' Main Lobby by the "Ask Me" desk <br><br />
'''Need to know:''' We will be back to the venue by 6:30, so we can join the closing dinner and dance party festivities. ''There is limited space available as we have a 55 person shuttle.''<br />
<br />
<br />
Sign Up Here: (MAX 55 people)<br />
# Iacopo Benesperi (will leave the place to someone else if we're more than 55, since I'll stay in the area the next week)<br />
# Benny Chandra<br />
# Saurabh Shah<br />
# Yoe One Ariestya Niovitta<br />
# Ashickur Rahman<br />
# Behnam Esfahbod<br />
# Chao, Po-chiang (:bobchao)<br />
# Rahid Hasan<br />
# Shafiul Azam Chowdhury<br />
# Komal Gandhi<br />
# Jafar Muhammed<br />
# Ajay Jogawath<br />
# Priyanka Nag<br />
# Sayak Sarkar<br />
# Saurabh Anand<br />
# Sankha Narayan Guria<br />
# Mashkawat Ahsan<br />
# Rajesh Ranjan<br />
# Sudheesh Singanamalla<br />
# Prof. D.V.L.N. Somayajulu<br />
# Irayani Queencyputri<br />
# Eriska Triana Primayasari<br />
# Deryan Everestha Maured<br />
# Nuri Abidin<br />
# Rahmat Dwi Jatmiko<br />
# Andi Darmawan<br />
# I Gede Bagus Kosha<br />
# Soumya Deb<br />
# Ashkary Rahman<br />
# Wichai Termwuttipreecha<br />
# Alex Lakatos<br />
# Marcela Oniga<br />
# Trevor Hobson<br />
# Sandraghassen Subbaraya Pillai<br />
# Philipp Wagner<br />
# Srikar Ananthula<br />
# Namu Srikanth<br />
# Raghuram Korukonda<br />
# Saikiran Alagandula<br />
# Ville Pohjanheimo<br />
# Pittaya Sroilong<br />
# Soumya Kanti Chakraborty<br />
# Abdul Rauf<br />
# Md Aminul Islam Sajib<br />
# Mahay Alam Khan<br />
# Kengatharaiyer Sarveswaran<br />
# Sandeep Shedmakell<br />
# Sammy Fung<br />
# Akshay Aurora<br />
# Atul Jangra<br />
# Kinshuk Sunil<br />
# Ramesh Kumar Sahu<br />
# Truong Anh Tuan<br />
# Nagasahas DS<br />
# [https://mozillians.org/en-US/u/tiziana/ Tiziana Sellitto]<br />
# Midhun Manojkumar<br />
# Irvin<br />
# Qing Lei<br />
# Aditya Fitri Hananta Putra<br />
# Dwi Hardyanto<br />
# PATIL Kailas Ravsaheb<br />
# Rohan Dasanayaka<br />
# Jemmy Rorong<br />
# Viking Karwur<br />
# Fauzan Alfi<br />
# Finan Akbar<br />
# Dimas Andhana<br />
# Artanto Ishaam<br />
# Muhammad Syafiq Mazli<br />
# Haryati Salehin<br />
# Mohamed Aidid Jaafar<br />
# Lai Chen Haw<br />
# An-jie Yang<br />
# Zobayer Ahmed Khan<br />
# Galaxy Kadiyala<br />
# Jignesh Kakadiya<br />
# Hilary Ho Jia Hao<br />
<br />
=Toronto=<br />
==Friday ==<br />
=== Real Canadian Superhero Pub Crawl (MOVED TO SATURDAY)===<br />
<br> <br />
WE HAVE HAD TO MOVE THE PUB CRAWL TO SATURDAY. PLEASE SIGN UP AGAIN IF YOU ARE STILL INTERESTED.<br />
<br>[[File:WeWantYou2.jpg|200px]]<br><br><br><br />
<br />
=== People in town Friday but not into drinking ===<br />
* [https://mozillians.org/en-US/u/terrameijar/ Vuyisile Ndlovu]<br />
* Jose Junior Villagomez Melgar<br />
* [https://mozillians.org/en-US/u/gueroJeff/ Jeff Beatty]<br />
* [https://mozillians.org/pt-BR/u/jaymeayres/ Jayme Ayres]<br />
* [https://mozillians.org/en-US/u/pmac/ Paul McLanahan]<br />
* [https://mozillians.org/es-Mx/u/leonshion/ Miriam León]<br />
* [https://mozillians.org/es-Mx/u/Ednah/ Ednah Kiome]<br />
* [https://mozillians.org/es-Mx/u/alexfuser/ Alex Fuser]<br />
* [https://mozillians.org/es/u/Nex/ Hugo Acosta]<br />
* [https://mozillians.org/es/u/lourcastillo/ Lourdes Castillo]<br />
* [https://mozillians.org/es/u/psep/ Pablo Sepúlveda]<br />
* [https://mozillians.org/en-US/u/ZiggyMaes/ Ziggy Maes]<br />
* Lianne Lee<br />
* [https://mozillians.org/en-US/u/andreags/ Andrea Guzmán Siu]<br />
* Huda Sarfraz<br />
* [https://mozillians.org/en-US/u/ajones/ Anthony Jones]<br />
* [https://mozillians.org/es/u/aldopy/ Aldo Medina]<br />
* [https://mozillians.org/es/u/Rocio/ Rocio Meza]<br />
* [https://mozillians.org/en-US/u/orin/ Orin Chen]<br />
* [https://mozillians.org/en-US/u/gaby2300/ Gabriela Montagu]<br />
* [https://mozillians.org/en-US/u/mkaply/ Mike Kaply]<br />
* [https://mozillians.org/en-US/u/iamtheashkary/ Ashkary Rahman]<br />
* [https://mozillians.org/en-US/u/jesup/ Randell Jesup]<br />
* [https://mozillians.org/en-US/u/mreavy/ Maire Reavy]<br />
* [https://mozillians.org/en-US/u/ravmn/ Richard von Moltke]<br />
* [https://mozillians.org/u/gphemsley/ Gordon P. Hemsley]<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>[https://mozillians.org/en-US/u/terrameijar/ 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>[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 />
<tr><td>Ben Francis</td></tr><br />
<tr><td>J. Ryan Stinnett</td></tr><br />
<tr><td>[https://mozillians.org/en-US/u/mkaply/ Mike Kaply]</td></tr><br />
<tr><td>Odin Mojica</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 />
=== 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 />
# Ben Francis<br />
# Aldo Medina<br />
# Rocio Meza<br />
# J. Ryan Stinnett<br />
# Ricardo Pontes<br />
# Bhavana Bajaj<br />
# Ricardo Sato<br />
# Carlos Valim "Coragem"<br />
# Joanne Nguyen<br />
# Winnie Aoieong<br />
# Michael Coates<br />
# Jesebel Kim<br />
# Jim Cook<br />
# Sam Foster<br />
# Karen Jeffrey<br />
# Ednah Kiome<br />
# Paola da Silva<br />
# Santiago Ferreira<br />
# Elsa Rodriguez<br />
# Eduardo Trapani<br />
<br />
=== Real Canadian Superhero Pub Crawl (NEW DATE) ===<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 around the downtown area and back to the hotel, 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 />
<table class="wikitable" border=0 valign="top"><br />
<tr><td><br />
; ''' Super Sign up sheet ''': Current maximum is 35, but if there is strong interest, we can look to extend.<br />
<table class="wikitable" border=1><tr><th>#</th><th>Name</th><th>Alter Ego</th></tr><br />
<tr><td>1</td><td>[https://mozillians.org/en-US/u/phundal/ Patrick Hundal]</td><td>Ale-inhaler</td></tr><br />
<tr><td>2</td><td>Maya Barrow</td><td>Margareeta</td></tr><br />
<tr><td>3</td><td>[https://mozillians.org/en-US/u/rseiji/ Ricardo Sato]</td><td>Satozilla</td></tr><br />
<tr><td>4</td><td>[https://mozillians.org/en-US/u/jaydson/ Jaydson Gomes]</td><td>Quail Man</td></tr><br />
<tr><td>5</td><td>Patrick Cloke</td><td></td></tr><br />
<tr><td>6</td><td>[https://mozillians.org/en-US/u/Urcu/ Eduardo Urcullú Madrid]</td><td>Urcumeitor</td></tr><br />
<tr><td>7</td><td>[https://mozillians.org/en-US/u/felipenmoura/ Felipe N. Moura]</td><td>Mulder</td></tr><br />
<tr><td>8</td><td>Ricardo Panasggio</td><td>Super Sober</td></tr><br />
<tr><td>9</td><td>Evelyn Urcullú</td><td></td></tr><br />
<tr><td>10</td><td>Carlos Valim "Coragem"</td><td>Fox from tha ghetto</td></tr><br />
<tr><td>11</td><td>[https://mozillians.org/en-US/u/lasr21/ LASR21 a.k.a Luis Sanchez]</td><td>Mexican Panda</td></tr><br />
<tr><td>12</td><td>[https://mozillians.org/en-US/u/rdaub/ Ralph Daub]</td><td>Snow-Dance</td></tr><br />
<tr><td>13</td><td>[https://mozillians.org/en-US/u/prixon/ Matej Priteržnik]</td><td>Black Ma-jek</td></tr><br />
<tr><td>14</td><td>[https://mozillians.org/en-US/u/ricardopontes/ Ricardo Pontes]</td><td>Chuckzilla</td></tr><br />
<tr><td>15</td><td>Julien Wajsberg</td><td>Flashberg</td></tr><br />
<tr><td>16</td><td>Arzhel Younsi</td><td>Super Celtic</td></tr><br />
<tr><td>17</td><td>Paul Adenot</td><td>Bierman</td></tr><br />
<tr><td>18</td><td>Manuel Camacho</td><td>GREEN</td></tr><br />
<tr><td>19</td><td>Romina Guerra</td><td>Super PINK</td></tr><br />
<tr><td>20</td><td>[https://mozillians.org/en-US/u/keppelen/ Giovanni Keppelen dos Santos]</td><td></td></tr><br />
<tr><td>21</td><td>[https://mozillians.org/en-US/u/deluna/ Bernard de Luna]</td><td></td></tr><br />
<tr><td>22</td><td>[https://mozillians.org/en-US/u/andregarzia/ Andre Alves Garzia]</td><td>Drunken Fennec</td></tr><br />
<tr><td>23</td><td>[https://mozillians.org/en-US/u/leobalter/ Leo Balter]</td><td>The Mozillator</td></tr><br />
<tr><td>24</td><td>[https://mozillians.org/en-US/u/gabriela.oliv/ Gabriela Oliveira]</td><td>Chuchu Girl</td></tr><br />
<tr><td>25</td><td>[https://mozillians.org/en-US/u/dricupello/ Adriano Cupello]</td><td></td></tr><br />
<tr><td>26</td><td>Andrea Balle</td><td></td></tr><br />
<tr><td>27</td><td>[https://mozillians.org/en-US/u/enzomatrix/ Marcelo Poli]</td><td></td></tr><br />
<tr><td>28</td><td>[https://mozillians.org/en-US/u/alex_mayorga/ alex_mayorga]</td><td>The orange Zorro</td></tr><br />
<tr><td>29</td><td>[https://mozillians.org/en-US/u/orin/ Orin Chen]</td><td>dash</td></tr><br />
<tr><td>30</td><td>Maicon Ferreira</td><td></td></tr><br />
<tr><td>31</td><td>Jay Sullivan</td><td></td></tr><br />
<tr><td>32</td><td>[https://mozillians.org/en-US/u/winniea/ Winnie Aoieong]</td><td></td></tr><br />
<tr><td>33</td><td>Michael Coates</td><td></td></tr><br />
<tr><td>34</td><td>[https://mozillians.org/en-US/u/jnguyen/ Joanne Nguyen]</td><td></td></tr><br />
<tr><td>35</td><td>Jim Cook</td><td></td></tr><br />
<tr><td>36</td><td>Jesebel Kim</td><td></td></tr><br />
<tr><td></td><td>Below is waiting list</td><td></td></tr><br />
<tr><td>37</td><td>[https://mozillians.org/u/rik Anthony Ricaud]</td><td></td></tr><br />
<tr><td>38</td><td>[https://mozillians.org/u/pir Peter Radcliffe]</td><td></td></tr><br />
<tr><td>39</td><td>Bhavana Bajaj</td><td></td></tr><br />
<tr><td>40</td><td>Leonard Camacho</td><td></td></tr><br />
<tr><td>40</td><td>Ednah Kiome</td><td></td></tr><br />
<tr><td>41</td><td>Erik Vold</td><td>The Rocketbeer</td></tr><br />
<tr><td>42</td><td>Jill Van De Ven</td><td></td></tr><br />
<tr><td>43</td><td>Kendall Libby</td><td>Purple Terror</td></tr><br />
<tr><td>44</td><td>Andre Natal</td><td></td></tr><br />
<tr><td>45</td><td>Marty Rosenberg</td><td></td></tr><br />
<tr><td>46</td><td>Odin Mojica</td><td></td></tr><br />
<tr><td>46</td><td>Elsa Rodriguez</td><td></td></tr><br />
<tr><td>47</td><td>[https://mozillians.org/u/ThePhoenixBird Arturo Martinez]</td><td>Flaming Phoenix</td></tr><br />
<tr><td>48</td><td>[https://mozillians.org/u/eviljeff Andrew Williamson]</td><td></td></tr><br />
</table><br />
</td> <br />
<td valign="top"><br />
;Latest information (Oct 2, 2013): Please continue to check here for latest updates and details. We are currently still verifying the pubs that will be visited as well as the total participants we can handle. More super soon!<br />
;Start time: We will begin at 7:30pm in the Sheraton lobby, and we will spend about 30min at each pub. If you are playing catch-up from the CN Tower, estimate about 45min (total) for each pub. <br />
<br><br />
;'''List of pubs on tour (not finalized...)''':[http://goo.gl/maps/Nd1R2 Google map of pubs]<br />
<br><br />
;Fionn MacCool's: 181 University Avenue, Toronto, ON +1 416-363-1944, http://primepubs.com<br />
;Earls Kitchen & Bar: 150 King St W #100, Toronto, ON, +1 416-916-0227, http://earls.ca <br />
;Irish Embassy Pub and Grill: 49 Yonge Street, Toronto, ON +1 416-866-8282, http://irishembassypub.com<br />
;P.J. O'Brien Irish Pub & Restaurant: 39 Colborne Street, Toronto, ON +1 416-815-7562, http://pjobrien.com<br />
;C'est What : 67 Front Street East, Toronto, ON +1 416-867-9499, http://cestwhat.com<br />
; The Jason George : 104 Front Street East, Toronto, ON +1 416-363-7100, http://thejasongeorge.ca<br />
;The Richmond Rogue: 284 Richmond Street East, Toronto, ON +1 416-868-9595, http://therichmondrogue.com<br />
;New Windsor Tavern: 124 Church Street, Toronto, ON +1 416-364-9698, http://mcveighspub.com<br />
</td></table><br />
<br />
==Sunday==<br />
<br />
===MozSpace Tour===<br />
<br />
Want to view the Mozilla Toronto Space? We have set up a small tour for those people that want to take visit the Toronto space before the closing dinner and party. <br />
<br />
We will be walking over to the office (15 minute walk), will stay for enough time to capture some pictures and then walk back. (We will be at the Space for about 25-30 minutes) <br />
<br />
The tour will be hosted by a few Mozillians from the Space. <br />
<br />
'''Time:''' 5:15-6:15 (we start walking back at 6:00) <br><br />
'''Meeting Location:''' Main Lobby by the "Ask Me" desk <br><br />
'''Need to know:''' We will be back to the venue by 6:30, so we can join the closing dinner and dance party festivities. <br />
<br />
<br />
Sign Up Here: <br />
* [https://mozillians.org/es/u/Urcu/ Eduardo Urcullú Madrid]<br />
* Sabrina Ng<br />
* Karen Jeffrey<br />
* [https://mozillians.org/en-US/u/diane/ Diane (Tate) Bisgeier]<br />
* [https://mozillians.org/en-US/u/firetoad/ Mike Collins]<br />
* [https://mozillians.org/en-US/u/gaby2300/ Gabriela Montagu Buenos Aires]<br />
* [https://mozillians.org/en-US/u/mkaply/ Mike Kaply]<br />
* Andrea Guzmán Siu<br />
* Leonard Camacho<br />
* Faten Ben Thabet<br />
* Erik Vold<br />
* Ednah Kiome<br />
* [https://mozillians.org/u/sh.yaron/ Yaron Sharabani]<br />
* [https://mozillians.org/u/elad/ Elad Alfassa]<br />
* [https://mozillians.org/u/tomer/ Tomer Cohen]<br />
* [https://mozillians.org/u/psep/ Pablo Sepúlveda]<br />
* [https://mozillians.org/u/lourcastillo/ Lourdes Castillo]<br />
* Mario Garcia<br />
* Johan Gonzalez<br />
* Havi Hoffman<br />
* [https://mozillians.org/u/lasr21/ LASR21 a.k.a Luis Sanchez]<br />
* [https://mozillians.org/u/rseiji/ Ricardo Sato]<br />
* [https://mozillians.org/es/u/ravmn/ Richard von Moltke]<br />
* Joaquín Haeussler<br />
* Gustavo Munro<br />
* [https://mozillians.org/u/terrameijar/ Vuyisile Ndlovu]<br />
* [https://mozillians.org/es/u/ThePhoenixBird/ Arturo Martinez]<br />
* [https://mozillians.org/es/u/paodsf83/ Paola da Silva]<br />
* [https://mozillians.org/es/u/sanux/ Santiago Ferreira]<br />
* [https://mozillians.org/en-US/u/schien/ Shih-Chiang Chien]<br />
* [https://mozillians.org/en-US/u/timdream/ Tim Guan-tin Chien]<br />
* Kevin Hu<br />
* [https://mozillians.org/u/gasolin/ Fred Lin (gasolin)]<br />
* [https://mozillians.org/zh-TW/u/gduan/ George Duan]<br />
* [https://mozillians.org/u/rudylu/ Rudy Lu]<br />
* [https://mozillians.org/en-US/u/hhuang/ Helen Huang]<br />
* Lianne Lee<br />
* [https://mozillians.org/zh-TW/u/chucklee/ Chuck Lee]<br />
* [https://mozillians.org/zh-TW/u/fshih/ Fang Shih]<br />
* Steven Lee<br />
* Ben Francis<br />
* Elsa Rodriguez<br />
* [https://mozillians.org/en-US/u/Alam/ Aman Alam]<br />
* [https://mozillians.org/en-US/u/eviljeff Andrew Williamson]<br />
* [https://mozillians.org/u/gphemsley/ Gordon P. Hemsley]<br />
* Francis Djabri<br />
* [https://mozillians.org/u/mstange/ Markus Stange]<br />
* Eduardo Trapani<br />
<br />
=Brussels=<br />
==Friday ==<br />
=== Jellyfishing ===<br />
OMG Jellys! Yes, you read that right! Our very own [https://mozillians.org/en-US/u/rlord/ Rob Lord] is going to instruct and lead a group of Mozillians to bloom through the cobble streets of Brussels. <br />
:Blooming Treasure Island Music Festival in San Francisco '''[https://vimeo.com/35285151 video]''' <br />
:Blooming White Ocean camp at Burning Man '''[http://www.youtube.com/watch?v=MlJjWS9EajU video]'''<br />
:Billion Jelly Bloom on Kickstarter '''[http://www.kickstarter.com/projects/pattilord/omg-jellyfish video]'''<br />
:Billion Jelly Bloom on Facebook '''[http://fb.com/BillionJellyBloom Facebook]'''<br />
<br />
We'll have 10 jellies undulate, articulate and share in teams of two or three to delight our host city. Photographers encouraged too. <br />
<br />
Sign up here with a link to your mozillians.org account and email address so that I, Rob, can email you all with the event location and time details. <br />
<br />
# [https://mozillians.org/en-US/u/sharno/ Mohamed El Sharnoby], [mailto:sharnoby3@gmail.com sharnoby3@gmail.com]<br />
# [https://mozillians.org/en-US/u/jms/ Janet Swisher], [mailto:jswisher@mozilla.com jswisher@mozilla.com] <br />
# [https://mozillians.org/en-US/u/canuckistani/ Jeff Griffiths], [mailto:jgriffiths@mozilla.com jgriffiths@mozilla.com] <br />
# [https://mozillians.org/en-US/u/919adbc95b/ Aashish Jagini], [mailto:aashish.stalin@gmail.com aashish.stalin@gmail.com] <br />
# [https://mozillians.org/en-US/u/avsaro/ Onur Avsar], [mailto:avsaro42@gmail.com avsaro42@gmail.com]<br />
# [https://mozillians.org/en-US/u/pinielhasibuan/, Piniel Romulia Hasibuan], [mailto:pinielhasibuan@gmail.com pinielhasibuan@gmail.com]<br />
# [https://mozillians.org/en-US/u/mubirujonato/ Mubiru Jonathan], [mailto:mubirujonato@yahoo.com mubirujonato@yahoo.com]<br />
# [https://mozillians.org/en-US/u/SunboX/ André Fiedler], [mailto:andre.fiedler@me.com andre.fiedler@me.com]<br />
# [https://mozillians.org/en-US/u/ilana/ Ilana Segall], [mailto:isegall@mozilla.com isegall@mozilla.com]<br />
# William Reynolds<br />
# Laura Forrest<br />
# Fabio Magnoni<br />
# Wei Li<br />
# Yanfang Liu<br />
# Sharon Xiaoyun Yang<br />
# Curtis Koenig<br />
# Gervase Markham<br />
# Antoine Turmel<br />
# Avinash Kundaliya<br />
# Justin O'Kelly<br />
<br />
=== Dancing! Fun! ===<br />
Hi, [https://mozillians.org/en-US/u/kumar/ Kumar McMillan] here. While I'm not working on Firefox OS payments I'm most likely DJing in my living room, at some dance party or bar, etc. My good friend and Bruxelles local [http://lowdjo.com/ Lowdjo] invited me to play records with him at [https://www.facebook.com/pages/Caf%C3%A9-Central/143434702389318 Le Cafe Central] while I'm out there. No need to sign-up, just stop by if you're interested in dancing to disco, boogie, 80s funk, or whatever else we feel like playing.<br />
<br />
* Time: 11pm to 4am (we'll be DJing the entire time)<br />
* Location: [https://www.facebook.com/pages/Caf%C3%A9-Central/143434702389318 Le Cafe Central] (includes full bar)<br />
* Address: [http://www.bing.com/maps/default.aspx?v=2&pc=FACEBK&mid=8100&rtp=adr.~pos.50.847777198698_4.3477700156474_Caf%C3%A9+Central_14+rue+borgwal%2C+1000+Brussels%2C+Belgium&cp=50.847777198698~4.3477700156474&lvl=16&sty=r&rtop=0~0~0~&mode=D&FORM=FBKPL2&mkt=en-US 14 rue borgwal, 1000 Brussels, Belgium]<br />
<br />
Sign-ups: N/A<br />
<br />
==Saturday==<br />
=== Bikram yoga ===<br />
<br />
We'll attend a [http://en.wikipedia.org/wiki/Bikram_Yoga Bikram yoga] (hot yoga) class at [http://www.fbyci.com/brussels/index.htm the Brussels school]. Please sign up if you'd like to attend.<br />
<br />
It looks like we have enough people to make this happen. Woot! <br />
<br />
'''Time:''' 8:00pm Local Time <br><br />
'''Meeting Location:''' Meet by "Ask Me" desk at 19:15 and we will travel to the school from there. <br><br />
'''Need To Know:''' Try not to eat too much just before going to class (eat lightly for 2h before the class starts). Bring light clothing (men can do just shorts or add a T-shirt, women can wear shorts and a top), it gets very sweaty.<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 />
#Rodrigo Waters<br />
#Denish Okidi<br />
<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 />
*Fabian Rodriguez<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 />
*Jovan Ssebaggala<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 />
*William Duyck<br />
*RJ Hsiao<br />
*Achraf Fouwad<br />
*Denish Okidi<br />
*Abaho Micheal<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 />
* Kris Maglione<br />
* Andreas Wagner<br />
* Zach Beauvais<br />
* Jorge Villalobos<br />
* Daniel Holbert<br />
* Rodrigo Waters<br />
* Achraf Fouwad<br />
* Johannes Vogel<br />
* Jordan Lund<br />
*Jovan Ssebaggala<br />
<br />
=== Bar Delirium ===<br />
<br />
We have secured 2 drink vouchers for beer and soft drinks for all those who have signed up below. Get ready to enjoy a real pub experience! <br />
<br />
'''Time:''' 7:45-10:00pm <br><br />
'''Meeting Location''': Please pick up your drink tickets from the "Ask Me" desk anytime between 7:30-7:45pm. We will walk to Delirium at 7:45pm. <br><br />
'''Need To Know:''' Drink vouchers can be used for beer and soft drinks only. You must pick up your drink vouchers before you head to Delirium. <br><br />
<br />
''(List sorted to remove duplicates)''<br />
*Aashish Jagini<br />
*Adam Newman<br />
*Adrian Fernandez<br />
*Alba González<br />
*Aleksandra Uzelac<br />
*aleth<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 />
*Destuynder Guillaume<br />
*Dietrich Ayala<br />
*Dustin J. Mitchell<br />
*Ed Lim<br />
*Elio Qoshi <br />
*Estela Liu<br />
*Fabian Rodriguez<br />
*Fabio Magnoni<br />
*Fabricio Zuardi<br />
*Frank Wein<br />
*Frederik Braun<br />
*Gemma Petrie<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 />
*Jean-Yves Perrier<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 />
*Jordan Lund<br />
* Abaho Micheal<br />
*Jorge Villalobos<br />
*Jovan Ssebaggala<br />
*Julen Ruiz Aizpuru<br />
*Julien Vehent<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 />
*Leslie Orchard<br />
*Lizz Noonan<br />
*Luca Greco<br />
*Lucas Rocha<br />
*Malini Das<br />
*Marc Schifer<br />
*Mark C&ocirc;t&eacute;<br />
*Martin Creutziger<br />
*Mathieu Laurent<br />
*Michelle Marovich<br />
*Michael Bebenita<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 />
*Philipp Madersbacher<br />
*Pierre-Louis Augey<br />
*Raivis Dejus<br />
*Redon Skikuli <br />
*Reed Loden<br />
*Robert Wood<br />
*Robyn Chau<br />
*Rodrigo Waters<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 Bennetts<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 />
*Tobias Markus<br />
*Tom Schuster<br />
*Toni Hermoso<br />
*Ty Flanagan<br />
*Van Le<br />
*Vien Doan<br />
*Vit lai<br />
*William Duyck<br />
*William Reynolds<br />
*Wilson Guaraca <br />
*Zac Campbell<br />
*Zach Carter<br />
*Dejan Strbad<br />
*Ana-Maria Antolovic<br />
*RJ Hsiao<br />
*Achraf Fouwad<br />
*Denish Okidi<br />
*Yousef Alam<br />
*Jan Bambach<br />
*Leo McArdle<br />
*Jonjo McArdle<br />
*Ricardo Maçãs<br />
<br />
=== Chocolate Making (7:30pm) ===<br />
Mozillians in Brussels, you are in for a real treat! If you like making chocolate, or just like chocolate tasting we've got two options for you! <br />
On Saturday, one of Brussels top chocolatiers, Laurent Gerbaud will be conducting a chocolate making class (tasting also included) for the first 25 Mozillians to sign up. <br />
If you'd like to read more about them, check out them out [http://www.chocolatsgerbaud.be here]<br />
For those that are interested in tasting the many types of chocolate Brussels has to offer, please sign up for the Sunday session. <br />
<br />
Space is limited, '''25''' spots available and is now '''FULL'''<br />
<br />
# Marcia Knous<br />
# Doris Coleman<br />
# Mary Trombley <br />
# Tanner Young <br />
# Krupa Raj <br />
# Larissa Co <br />
# Gemma Petrie <br />
# Fernando García Gómez <br />
# Elio Qoshi <br />
# Redon Skikuli <br />
# Sokol Dollani<br />
# Altin Ukshini <br />
# Gent Thaci <br />
# Ardian Haxha <br />
# Berni Melero <br />
# Mavis Ou <br />
# Vien Doan <br />
# Jennifer Hayashi <br />
# Fabricio Zuardi<br />
# Benjamin Sternthal <br />
# Mohamed El Sharnoby <br />
# Maureen Hanratty <br />
# Sébastien Desvignes <br />
# Wilson Guaraca <br />
# James Graham<br />
# Abaho Micheal<br />
<br />
=== Chocolate Tasting ONLY (8:30pm) ===<br />
Space is limited, '''25''' spots available:<br />
# Marco Zehe<br />
# Sébastien Barbieri<br />
# Mathieu Laurent<br />
# Ioana Chiorean<br />
# Kris Maglione<br />
# Jorge Villalobos<br />
# Florin Bogdan Strugariu<br />
# Bartosz Piec<br />
# Leo McArdle<br />
# Yousef Alam<br />
# Jan Bambach<br />
# William Reynolds<br />
# Laura Forrest<br />
# Peipei Cheng<br />
# Yanfang Liu<br />
# Wei Li<br />
# Phoebe Chang<br />
# Jessica Jong<br />
# Sharon Xiaoyun Yang<br />
# Aleksandra Uzelac<br />
# Oskar Ivanic<br />
# Dejan Binder<br />
# Saša Jakovljevic<br />
# Nino Vranešic<br />
# Aashish Jagini<br />
<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 />
#Abaho Micheal<br />
#Majda Nafissa Rahal<br />
#Rubén Martín<br />
#Konstantina Papadea<br />
#Daniel Holbert<br />
#Denish Okidi<br />
<br />
==Sunday==<br />
=== Chocolate Tasting (5pm) ===<br />
''details above''. Space is limited, '''25''' spots available and is now '''FULL'''.<br />
<br />
# Krupa Raj<br />
# Marcia Knous<br />
# Gene Wood<br />
# Fabricio Zuardi<br />
# Wilson Guaraca<br />
# Mavis Ou<br />
# Mohamed El Sharnoby<br />
# Jean Collings<br />
# Jessilyn Davis<br />
# Richard Marti<br />
# Doris Coleman<br />
# Janet Swisher<br />
# Kim Ludvigsen<br />
# Ana-Maria Antolovic<br />
# aleth<br />
# John Bevan<br />
# Mihnea Dobrescu-Balaur<br />
# Alexandros Mioglou<br />
# Aashish Jagini <br />
# Tauni Oxborrow <br />
# Netha Hussain<br />
# Ziga Milek<br />
# Dustin J. Mitchell<br />
# Fabio Magnoni<br />
# Alison Wheeler<br />
<br />
=== Chocolate Tasting (6:15pm) ===<br />
Also full.<br />
# Tom Schuster<br />
# Onur Avsar<br />
# Piniel Romulia Hasibuan<br />
# Zhenshuo Fang<br />
# Mubiru Jonathan<br />
# Gina Yeh<br />
# Bella Su<br />
# Shelly Lin<br />
# Vit lai<br />
# Balazs Koren<br />
# Marco Zehe<br />
# Ty Flanagan<br />
# Emily Goligoski<br />
# Chloe Varelidi<br />
# Bree Tipper<br />
# Irina Parievsky<br />
# Karen Rudnitski<br />
# Hernán Rodríguez Colmeiro<br />
# Kristin Baird<br />
# Tobias Markus<br />
# Brian Birtles<br />
# Kevin Brosnan<br />
# Allison Naaktgboren<br />
# Simon Sapin<br />
# Curtis Koenig</div>Dmosehttps://wiki.mozilla.org/index.php?title=Webrtc/checkin_policy&diff=495407Webrtc/checkin policy2012-12-21T19:49:20Z<p>Dmose: /* 2. Push your patch on Alder to Try */</p>
<hr />
<div>Ok, it's not really a "policy", but if you're new to the project and looking to checkin WebRTC code, here are some steps we've captured to make checkin as smooth as possible.<br />
<br />
Either before or after you have the patch reviewed, please verify that your patch doesn't break our automated WebRTC tests. This explains how you can do that.<br />
<br />
''If you're in a hurry, but want to make sure the mochitests/crashtests are happy, you can just run mochitests and crashtests on your machine (Step 1). Otherwise, you can skip to step 2 and push your patch to Try on the Alder branch. If you do both, you can have maximum confidence that your patch won't cause problems with mochitests/crashtests.''<br />
<br />
<br />
== 1. Run mochitests/crashtests on your machine ==<br />
<br />
You'll want to (clobber) rebuild Firefox with the following environment variable exported, e.g. in your mozconfig file:<br />
<br />
export MOZ_WEBRTC_LEAKING_TESTS=1 (to run leaking mochitests)<br />
export MOZ_WEBRTC_TESTS=1 (to run signaling unit tests)<br />
<br />
This is necessary because most of our tests are disabled by default currently due to different leaks. (We'll be fixing them soon.) When the build is ready, please run the following tests:<br />
<br />
${OBJ_DIR}/media/webrtc/signaling/test/* (run each individual test)<br />
${OBJ_DIR}/media/mtransport/test/* (run each individual test)<br />
<br />
./mach mochitest-plain dom/media/tests/mochitest (runs all mochitests)<br />
./mach crashtest dom/media/tests/crashtests (runs all crashtests)<br />
<br />
If you need to run mochtests or crashtests in the debugger, use the <tt>--debugger</tt> flag, like so:<br />
<br />
./mach mochitest-plain dom/media/tests/mochitest --debugger=gdb<br />
./mach crashtest dom/media/tests/crashtests --debugger=gdb<br />
<br />
If you get errors trying to run the standalone tests, you might need to set your dynamic library path:<br />
<br />
export LD_LIBRARY_PATH=${OBJ_DIR}/dist/lib (Linux)<br />
export DYLD_LIBRARY_PATH=${OBJ_DIR}/dist/lib (OS X)<br />
<br />
'''NOTE''': If you find test failures or crashes, please investigate and fix the problems if you can or reach out for help in #media. Typically jesup or mreavy in #media can help or find someone to help. If neither of them is there (pretty rare!), just ask your question in the channel. Someone will help. Please don't commit if mochitests or crashtests fail; it is likely you'll just be asked to back out the patch.<br />
<br />
If you have no failures on your machine, then your code is probably fine to check in and you can skip to Step 3. If you want to have maximum confidence, then send it to Try as explained in Step 2. Try is your friend. :-) However, Step 2 (pushing to Try) could take a while (perhaps a couple of hours). <br />
<br />
== 2. Push your patch on Alder to Try ==<br />
<br />
If you're not in a hurry and pretty sure it will "just work", you can skip Step 1 and apply your patch to a pull of the Alder tree and push to Try from there. Alder builds will always run the tests, and they have leak checks disabled for now. (Our tests are disabled on mozilla-central until all the leaks are plugged.) <br />
<br />
Push to try with a commit message like: "try: -b do -p all -u all -t none" <br />
<br />
NOTE (same as note in Step 1): If your Try push fails, please investigate and fix the problems if you can or reach out for help in #media. Typically jesup or mreavy in #media can help or find someone to help. If neither of them is there (pretty rare!), just ask your question in the channel. Someone will help. Please don't commit if mochitests or crashtests fail; it is likely you'll just be asked to back out the patch.<br />
<br />
== 3. Land the Patch ==<br />
<br />
If you have successfully completed Step 1 and/or Step 2 and your patch has gotten an r+ (successful review), you can land it on mozilla-inbound or directly on mozilla-central with confidence that it ''should'' work. ;-)<br />
<br />
'''Most importantly: Thanks so much for contributing to WebRTC! It is much appreciated!!'''</div>Dmosehttps://wiki.mozilla.org/index.php?title=Webrtc/checkin_policy&diff=495406Webrtc/checkin policy2012-12-21T19:48:45Z<p>Dmose: /* 2. Push to Try on Alder */</p>
<hr />
<div>Ok, it's not really a "policy", but if you're new to the project and looking to checkin WebRTC code, here are some steps we've captured to make checkin as smooth as possible.<br />
<br />
Either before or after you have the patch reviewed, please verify that your patch doesn't break our automated WebRTC tests. This explains how you can do that.<br />
<br />
''If you're in a hurry, but want to make sure the mochitests/crashtests are happy, you can just run mochitests and crashtests on your machine (Step 1). Otherwise, you can skip to step 2 and push your patch to Try on the Alder branch. If you do both, you can have maximum confidence that your patch won't cause problems with mochitests/crashtests.''<br />
<br />
<br />
== 1. Run mochitests/crashtests on your machine ==<br />
<br />
You'll want to (clobber) rebuild Firefox with the following environment variable exported, e.g. in your mozconfig file:<br />
<br />
export MOZ_WEBRTC_LEAKING_TESTS=1 (to run leaking mochitests)<br />
export MOZ_WEBRTC_TESTS=1 (to run signaling unit tests)<br />
<br />
This is necessary because most of our tests are disabled by default currently due to different leaks. (We'll be fixing them soon.) When the build is ready, please run the following tests:<br />
<br />
${OBJ_DIR}/media/webrtc/signaling/test/* (run each individual test)<br />
${OBJ_DIR}/media/mtransport/test/* (run each individual test)<br />
<br />
./mach mochitest-plain dom/media/tests/mochitest (runs all mochitests)<br />
./mach crashtest dom/media/tests/crashtests (runs all crashtests)<br />
<br />
If you need to run mochtests or crashtests in the debugger, use the <tt>--debugger</tt> flag, like so:<br />
<br />
./mach mochitest-plain dom/media/tests/mochitest --debugger=gdb<br />
./mach crashtest dom/media/tests/crashtests --debugger=gdb<br />
<br />
If you get errors trying to run the standalone tests, you might need to set your dynamic library path:<br />
<br />
export LD_LIBRARY_PATH=${OBJ_DIR}/dist/lib (Linux)<br />
export DYLD_LIBRARY_PATH=${OBJ_DIR}/dist/lib (OS X)<br />
<br />
'''NOTE''': If you find test failures or crashes, please investigate and fix the problems if you can or reach out for help in #media. Typically jesup or mreavy in #media can help or find someone to help. If neither of them is there (pretty rare!), just ask your question in the channel. Someone will help. Please don't commit if mochitests or crashtests fail; it is likely you'll just be asked to back out the patch.<br />
<br />
If you have no failures on your machine, then your code is probably fine to check in and you can skip to Step 3. If you want to have maximum confidence, then send it to Try as explained in Step 2. Try is your friend. :-) However, Step 2 (pushing to Try) could take a while (perhaps a couple of hours). <br />
<br />
== 2. Push your patch on Alder to Try ==<br />
<br />
If you're not in a hurry and pretty sure it will "just work", you can skip Step 1 and apply your patch to a pull of the Alder tree and push to try from there. Alder builds will always run the tests, and they have leak checks disabled for now. (Our tests are disabled on mozilla-central until all the leaks are plugged.) <br />
<br />
Push to try with a commit message like: "try: -b do -p all -u all -t none" <br />
<br />
NOTE (same as note in Step 1): If your Try push fails, please investigate and fix the problems if you can or reach out for help in #media. Typically jesup or mreavy in #media can help or find someone to help. If neither of them is there (pretty rare!), just ask your question in the channel. Someone will help. Please don't commit if mochitests or crashtests fail; it is likely you'll just be asked to back out the patch.<br />
<br />
== 3. Land the Patch ==<br />
<br />
If you have successfully completed Step 1 and/or Step 2 and your patch has gotten an r+ (successful review), you can land it on mozilla-inbound or directly on mozilla-central with confidence that it ''should'' work. ;-)<br />
<br />
'''Most importantly: Thanks so much for contributing to WebRTC! It is much appreciated!!'''</div>Dmosehttps://wiki.mozilla.org/index.php?title=Webrtc/checkin_policy&diff=495405Webrtc/checkin policy2012-12-21T19:47:56Z<p>Dmose: /* 2. Push to Try on Alder */</p>
<hr />
<div>Ok, it's not really a "policy", but if you're new to the project and looking to checkin WebRTC code, here are some steps we've captured to make checkin as smooth as possible.<br />
<br />
Either before or after you have the patch reviewed, please verify that your patch doesn't break our automated WebRTC tests. This explains how you can do that.<br />
<br />
''If you're in a hurry, but want to make sure the mochitests/crashtests are happy, you can just run mochitests and crashtests on your machine (Step 1). Otherwise, you can skip to step 2 and push your patch to Try on the Alder branch. If you do both, you can have maximum confidence that your patch won't cause problems with mochitests/crashtests.''<br />
<br />
<br />
== 1. Run mochitests/crashtests on your machine ==<br />
<br />
You'll want to (clobber) rebuild Firefox with the following environment variable exported, e.g. in your mozconfig file:<br />
<br />
export MOZ_WEBRTC_LEAKING_TESTS=1 (to run leaking mochitests)<br />
export MOZ_WEBRTC_TESTS=1 (to run signaling unit tests)<br />
<br />
This is necessary because most of our tests are disabled by default currently due to different leaks. (We'll be fixing them soon.) When the build is ready, please run the following tests:<br />
<br />
${OBJ_DIR}/media/webrtc/signaling/test/* (run each individual test)<br />
${OBJ_DIR}/media/mtransport/test/* (run each individual test)<br />
<br />
./mach mochitest-plain dom/media/tests/mochitest (runs all mochitests)<br />
./mach crashtest dom/media/tests/crashtests (runs all crashtests)<br />
<br />
If you need to run mochtests or crashtests in the debugger, use the <tt>--debugger</tt> flag, like so:<br />
<br />
./mach mochitest-plain dom/media/tests/mochitest --debugger=gdb<br />
./mach crashtest dom/media/tests/crashtests --debugger=gdb<br />
<br />
If you get errors trying to run the standalone tests, you might need to set your dynamic library path:<br />
<br />
export LD_LIBRARY_PATH=${OBJ_DIR}/dist/lib (Linux)<br />
export DYLD_LIBRARY_PATH=${OBJ_DIR}/dist/lib (OS X)<br />
<br />
'''NOTE''': If you find test failures or crashes, please investigate and fix the problems if you can or reach out for help in #media. Typically jesup or mreavy in #media can help or find someone to help. If neither of them is there (pretty rare!), just ask your question in the channel. Someone will help. Please don't commit if mochitests or crashtests fail; it is likely you'll just be asked to back out the patch.<br />
<br />
If you have no failures on your machine, then your code is probably fine to check in and you can skip to Step 3. If you want to have maximum confidence, then send it to Try as explained in Step 2. Try is your friend. :-) However, Step 2 (pushing to Try) could take a while (perhaps a couple of hours). <br />
<br />
== 2. Push to Try on Alder ==<br />
<br />
If you're not in a hurry and pretty sure it will "just work", you can skip Step 1 and apply your patch to a pull of the Alder tree and push to try from there. Alder builds will always run the tests, and they have leak checks disabled for now. (Our tests are disabled on mozilla-central until all the leaks are plugged.) <br />
<br />
Push to try with a commit message like: "try: -b do -p all -u all -t none" <br />
<br />
NOTE (same as note in Step 1): If your Try push fails, please investigate and fix the problems if you can or reach out for help in #media. Typically jesup or mreavy in #media can help or find someone to help. If neither of them is there (pretty rare!), just ask your question in the channel. Someone will help. Please don't commit if mochitests or crashtests fail; it is likely you'll just be asked to back out the patch.<br />
<br />
== 3. Land the Patch ==<br />
<br />
If you have successfully completed Step 1 and/or Step 2 and your patch has gotten an r+ (successful review), you can land it on mozilla-inbound or directly on mozilla-central with confidence that it ''should'' work. ;-)<br />
<br />
'''Most importantly: Thanks so much for contributing to WebRTC! It is much appreciated!!'''</div>Dmosehttps://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android&diff=494673Mobile/Fennec/Android2012-12-18T19:59:12Z<p>Dmose: /* Mochitests */</p>
<hr />
<div>== Building Fennec ==<br />
<br />
Below are instructions for setting up a build environment and building Fennec on Linux (Ubuntu) and Mac OS X. It is not currently possible to compile Fennec on Windows. If you have a Windows PC, see these posts for a Linux virtual machine to compile Fennec:<br />
<br />
* http://blog.lassey.us/2010/07/09/android-development-vm/<br />
* http://blog.lassey.us/2011/07/22/updated-android-development-vm/<br />
<br />
Also, the [https://wiki.mozilla.org/Mobile/Fennec/Android_OtherBuildEnvs OtherBuildEnvs page] has some notes on a few other environment variations, so take a look at that as well if you have an environment or configuration that deviates from "normal".<br />
<br />
First follow the platform-specific instructions below to set up a build environment on your machine. You can optionally also upgrade to the latest Android NDK (currently version r8c). Once you have done that, follow the steps to get the source code, set up your mozconfig, and build Fennec.<br />
<br />
=== Linux ===<br />
<br />
==== Quick Script ====<br />
<br />
Here is a quick script to get set up. It is explained in more detail below.<br />
<br />
# ensure that the "partner" repositories are enabled in /etc/apt/sources.list, or sun-java6-jdk won't be found<br />
# In Ubuntu 11.10 Java has been removed from partner, but<br />
# can be downloaded from Oracle at <br />
# http://www.oracle.com/technetwork/java/javase/downloads/index.html<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk mercurial ccache<br />
sudo apt-get build-dep firefox<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-linux-x86.tar.bz2<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz<br />
tar -xzf android-sdk_r20.0.3-linux.tgz<br />
./android-sdk-linux/tools/android update sdk -u<br />
./android-sdk-linux/tools/android update adb<br />
<br />
If you're using a 64-bit Ubuntu install, you'll need ia32-libs to allow the toolchain binaries to run.<br />
<br />
sudo apt-get install ia32-libs<br />
<br />
If you're using 64-bit Fedora install<br />
<br />
yum install glibc.i686 ncurses-libs.i686 libstdc++.i686 zlib.i686<br />
<br />
==== Explained ====<br />
<br />
This section describes in greater detail all the dependencies and requirements of getting a working build environment on Linux.<br />
<br />
===== Install Java =====<br />
<br />
First install the Sun Java jdk6, which the Android SDK depends on. If you're on Ubuntu (pre-11.10), you'll need to [https://help.ubuntu.com/community/Repositories/Ubuntu#Adding_Canonical_Partner_Repositories enable the partners repo] to get it. Java 7 should work, although occasionally breaks (java 6 is what the buildbots use, so that's the "officially supported" one).<br />
<br />
# Ubuntu pre-11.10<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk<br />
sudo update-java-alternatives -s java-6-sun<br />
<br />
# Ubuntu 11.10 and after<br />
# Download Java from Oracle - go to http://www.oracle.com/technetwork/java/javase/downloads/index.html and<br />
# download the latest version of the JDK.<br />
# These instructions assume the file is called jdk-6u35-linux-x64.bin<br />
sudo mkdir /opt/java<br />
sudo mv ~/Downloads/jdk-6u35-linux-x64.bin<br />
sudo chmod +x ./jdk-6u35-linux-x64.bin<br />
sudo ./jdk-6u35-linux-x64.bin<br />
ln -f -s /opt/java/jdk1.6.0_35/bin/* /usr/local/bin/<br />
# something like sudo update-alternatives --install /usr/local/bin/java java /opt/java/jdk1.6.0_35/bin/ 1 is<br />
# close to the distro way of registering java<br />
<br />
If you're on Ubuntu 64-bit, you'll also want to install ia32-libs at this point (things like adb won't work until you do):<br />
<br />
apt-get install -y ia32-libs<br />
<br />
===== Install Gecko Requirements =====<br />
<br />
Then install the usual stuff needed for a firefox build.<br />
<br />
sudo apt-get install mercurial ccache<br />
sudo apt-get build-dep firefox<br />
<br />
===== Install Android NDK =====<br />
<br />
Download and extract the [http://developer.android.com/sdk/ndk/ Android NDK]. NDK revs 4-8 have been tested and are known to work. The automated builders currently use version r5c.<br />
<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-linux-x86.tar.bz2<br />
<br />
===== Install Android SDK =====<br />
<br />
You should just install the latest [http://developer.android.com/sdk/ Android SDK], we set the API level in our manifest files. The sdk download will take a while, make sure you have a decent internet connection and go get coffee, or maybe lunch.<br />
<br />
You will need SDK version at least 16.<br />
<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz<br />
tar -xzf android-sdk_r20.0.3-linux.tgz<br />
./android-sdk-linux/tools/android update sdk --no-ui<br />
./android-sdk-linux/tools/android update adb<br />
<br />
You will probably want to add the SDK's "tools" and "platform-tools" directory to the PATH environment variable in your shell, so that you can run [http://developer.android.com/guide/developing/tools/adb.html adb] and other tools easily. For example, if you installed the SDK in $HOME/opt, you could add the following line to the end of your .bashrc:<br />
<br />
export PATH=$PATH:$HOME/opt/android-sdk-linux/platform-tools:$HOME/opt/android-sdk-linux/tools<br />
<br />
=== Mac OS X ===<br />
<br />
To set up a build environment on Mac OS X, you first need to install XCode and a few supplementary build tools via a package manager. To do this, follow steps 1 and 2 of the [https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions/Mac_OS_X_Prerequisites Mac OS X Build Prerequisites page]. Once you have completed steps 1 and 2, come back here and continue with the instructions below.<br />
<br />
After installing XCode make sure you also have wget installed. If wget is not a recognized command in terminal follow these steps to install it:<br />
<br />
curl -O http://ftp.gnu.org/gnu/wget/wget-1.14.tar.gz<br />
tar -xzvf wget-1.14.tar.gz<br />
cd wget-1.14<br />
./configure --with-ssl=openssl<br />
make<br />
sudo make install<br />
which wget #Should output: /usr/local/bin/wget<br />
<br />
===== Install Gecko Requirements =====<br />
<br />
Then install the usual stuff needed for a firefox build.<br />
<br />
sudo apt-get install mercurial ccache<br />
sudo apt-get build-dep firefox<br />
<br />
===== Install Android NDK =====<br />
<br />
Download and extract the [http://developer.android.com/sdk/ndk/ Android NDK]. NDK revs 4-8 have been tested and are known to work. The automated builders currently use version r5c.<br />
<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-darwin-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-darwin-x86.tar.bz2<br />
<br />
===== Install Android SDK =====<br />
<br />
You should just install the latest [http://developer.android.com/sdk/ Android SDK], we set the API level in our manifest files. The sdk download will take a while, make sure you have a decent internet connection and go get coffee, or maybe lunch.<br />
<br />
You will need SDK version at least 16.<br />
<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-macosx.zip<br />
unzip android-sdk_r20.0.3-macosx.zip<br />
./android-sdk-macosx/tools/android update sdk --no-ui<br />
./android-sdk-macosx/tools/android update adb<br />
<br />
You will probably want to add the SDK's "tools" and "platform-tools" directory to the PATH environment variable in your shell, so that you can run [http://developer.android.com/guide/developing/tools/adb.html adb] and other tools easily. For example, if you installed the SDK in $HOME, you could add the following line to the end of your .bashrc:<br />
<br />
export PATH=$PATH:$HOME/android-sdk-macosx/platform-tools:$HOME/android-sdk-macosx/tools<br />
<br />
=== Optional: Using NDK r8c ===<br />
<br />
On some systems, linking libxul can takes several minutes. Using <i>gold</i> instead of <i>ld</i> can reduce this time (from around 7 minutes to a bit more than 1 minute on my machine&#160;; YMMV, on another machine, it gets from 25 seconds to 10, or from 2 minutes to 1 minute with all system caches dropped).<br />
<br />
To use gold, the best way is to just use the r8c Android NDK. You can also build gold yourself from binutils source and replace your existing ld binaries in the NDK folder to use gold. However it's simpler to just upgrade the NDK. There are currently no known issues with using the r8c NDK, except that you also need to remove the --enable-warnings-as-errors option in your mozconfig because the gcc-4.6 that comes with r8c is stricter with respect to warnings. There is some discussion in {{bug|769099}} about how r8c is awesome stuff and should be used by default on the buildbots, but that hasn't happened yet.<br />
<br />
To upgrade your NDK, download the NDK for [http://dl.google.com/android/ndk/android-ndk-r8c-darwin-x86.tar.bz2 Mac OS X] or [http://dl.google.com/android/ndk/android-ndk-r8c-linux-x86.tar.bz2 Linux] and unpack it. Then, update your mozconfig to point to the new NDK by setting the <code>--with-android-ndk</code> and <code>--with-android-toolchain</code> options in your mozconfig.<br />
<br />
For example, assuming that on a Mac OS X platform the NDK is unpacked into $HOME/android-ndk-r8c, you would need the following two lines in your mozconfig:<br />
<br />
ac_add_options --with-android-ndk="$HOME/android-ndk-r8c"<br />
ac_add_options --with-android-toolchain="$HOME/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86"<br />
<br />
=== Getting the source ===<br />
<br />
Once you have build tools set up, you should configure Mercurial as described [https://developer.mozilla.org/en-US/docs/Installing_Mercurial#Configuration here]. (It is not required, but highly recommended if you plan on touching the code in any way). Once you have done that, grab a clone of the repository:<br />
<br />
hg clone http://hg.mozilla.org/mozilla-central/ src<br />
<br />
=== Setup Fennec mozconfig ===<br />
<br />
The mozconfig file is what tells the mozilla build scripts how your build environment is set up, and sets various build options. To build scripts will read the mozconfig file from the $MOZCONFIG environment variable, if one is set, or the .mozconfig file in your src directory, if there is one. So you could do either this:<br />
<br />
cd src<br />
vim .mozconfig # put mozconfig here<br />
<br />
or this:<br />
<br />
cd some/random/folder<br />
vim my-fennec-mozconfig # put mozconfig here<br />
export MOZCONFIG=$PWD/my-fennec-mozconfig<br />
<br />
Here is an example mozconfig file for building Fennec, assuming you have followed the instructions above and are using version r5c of the NDK.<br />
<br />
<pre><br />
# Add the correct paths here:<br />
ac_add_options --with-android-ndk="$HOME/android-ndk-r5c"<br />
ac_add_options --with-android-sdk="$HOME/android-sdk-linux/platforms/android-16"<br />
ac_add_options --with-android-version=5<br />
<br />
# android options<br />
ac_add_options --enable-application=mobile/android<br />
ac_add_options --target=arm-linux-androideabi<br />
ac_add_options --with-ccache<br />
<br />
mk_add_options MOZ_OBJDIR=./objdir-droid<br />
mk_add_options MOZ_MAKE_FLAGS="-j9 -s"<br />
</pre><br />
<br />
Remember to use $HOME instead of ~ in the mozconfig, because ~ will not get expanded to the right path! If you are building on Mac OS X you will also need to add this:<br />
<br />
ac_add_options --disable-crashreporter<br />
<br />
because the crash reporter does not build properly on Mac OS X.<br />
<br />
If you want to build for armv6 add this:<br />
<br />
ac_add_options --with-arch=armv6<br />
<br />
You can also look at [http://mxr.mozilla.org/mozilla-central/source/mobile/android/config/mozconfigs/android/nightly the mozconfig used for official nightly builds].<br />
<br />
=== Building the code ===<br />
<br />
This will build (compile+link), package into apk, and deploy to the Android device. Therefore, before you start building [http://developer.android.com/guide/developing/device.html connect your Android device and enable USB debugging]<br />
<br />
cd src<br />
make -f client.mk build_and_deploy<br />
<br />
You can also just do:<br />
<br />
make -f client.mk<br />
make -C objdir-droid package<br />
<br />
to build and package the code into an APK. The APK file can be found in your objdir-droid/dist/ folder, and will be called something like fennec-18.0a1.en-US.android-arm.apk. You can install this APK to your device manually using "adb install". The name of the app that shows up on your phone will be "Fennec $USER" (where $USER is the username under which you built the code).<br />
<br />
== Hacking ==<br />
<br />
There is a bunch of useful information hanging off the page at [[Fennec/NativeUI]]. Below is some more useful information. Please add more stuff you think is useful to these sections!<br />
<br />
=== Finding relevant code ===<br />
<br />
The Fennec-specific code can be found in the following locations in the mozilla-central source tree:<br />
<br />
mobile/android/...<br />
widget/android/...<br />
<br />
Of particular interest to most new contributors will be:<br />
<br />
mobile/android/base/GeckoApp.java # the main android activity that starts up when you open Fennec<br />
mobile/android/chrome/content/browser.js # the main JS file that controls Gecko to make it do what we want<br />
<br />
You can also use the code-search tools at https://mxr.mozilla.org/mozilla-central/ and http://dxr.mozilla.org/ to search for relevant pieces of code.<br />
<br />
=== Partial Builds: Beware the startup cache! ===<br />
<br />
Developers who frequently update .js files sometimes like to manually only re-build the module they have updated. Partial builds for updated Javascript files may not work correctly if installed with adb install -r. This section describes the issue. For instance:<br />
<br />
make -C mobile/android && make package<br />
<br />
This should result in the APK being properly updated with the updated Javascript, BUT the change may not be reflected on the device because of complications arising from the startup cache. If the startup cache from a previous run of Fennec exists on the device and contains an old version of the recently updated Javascript, Fennec will likely use the old version.<br />
<br />
The startup cache is located in the profile, so deleting the profile ensures a new startup cache:<br />
<br />
adb uninstall org.mozilla.fennec<br />
adb install dist/fennec*.apk<br />
<br />
Note that:<br />
<br />
adb install -r dist/fennec*.apk<br />
<br />
retains the profile (and startup cache) -- so that's still a problem.<br />
<br />
None of this is a problem with full builds:<br />
<br />
make -f client.mk &amp;&amp; make package <br />
adb install -r dist/fennec*.apk<br />
<br />
works just fine, because the startup cache respects the buildid: If the buildid found in an APK is different from the buildid used when the startup cache was last updated, the startup cache is automatically deleted. A full build correctly updates the buildid -- a partial build may not.<br />
<br />
A possible way (***I have not conclusively tested this***) to do a partial build, retain an old profile, and ensure the buildid is updated and the startup cache is subsequently deleted is:<br />
<br />
make export && make -C mobile/android && make -C toolkit/xre && make package<br />
adb install -r dist/fennec*.apk<br />
<br />
Note that make export is necessary to update the buildid and make -C toolkit/xre is required to generate application.ini.h, trigger a rebuild of nsAndroidStartup.cpp, and update libxul.so.<br />
<br />
=== Multilocale builds ===<br />
<br />
* Create a directory, clone mozharness, copy the config file for easy editing/usage:<br />
<br />
mkdir multilocale<br />
cd multilocale<br />
hg clone http://hg.mozilla.org/build/mozharness<br />
cp mozharness/configs/multi_locale/standalone_mozilla-central.py myconfig.py<br />
<br />
* Edit myconfig.py<br />
** currently will check out m-c into a directory named 'mozilla-central' in this directory<br />
** currently assumes your mozconfig is in this directory and named 'mozconfig'<br />
** currently assumes your mozconfig sets your objdir name to 'objdir-droid'<br />
<br />
* pull mozilla-central<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py --pull-build-source<br />
# Alternately, you can hg clone http://hg.mozilla.org/mozilla-central<br />
<br />
* Run the script, which will create a multilocale apk<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py<br />
<br />
And you're done.<br />
<br />
* If you want to recompile or re-run the script, restore your objdir to en-US first!<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py --restore-objdir<br />
<br />
Also see [http://escapewindow.dreamwidth.org/234671.html this blog post] for more information.<br />
<br />
== Testing ==<br />
==== Device Managers ====<br />
Most test suites - mochitests, reftests, xpcshell tests, and others - use a "device manager" module to communicate with the remote device. There are two device manager implementations: ADB and SUT. <br />
<br />
The ADB device manager uses the adb command from the Android SDK to communicate with the remote device. To use the ADB device manager:<br />
* ensure the adb command is in your shell's PATH<br />
* set environment variable DM_TRANS=adb<br />
* do not set environment variable TEST_DEVICE, or set TEST_DEVICE= (unless you really need it)<br />
<br />
The SUT device manager uses TCP to communicate with a remote agent, which must be installed on the device. To use the SUT device manager:<br />
* ensure TCP connectivity between the local host and the remote device: check that they are on the same network and you can ping each from the other<br />
* ensure the SUT agent is installed and started on the remote device<br />
** the SUT agent APK is built alongside Fennec; just install <objdir-droid>/build/mobile/sutagent/android/sutAgentAndroid.apk<br />
** The agent should be configured to start automatically with your phone when it boots. To start it immediately from an adb shell do: `am start -n com.mozilla.SUTAgentAndroid/.SUTAgentAndroid -a android.intent.action.MAIN` <br />
* set environment variable DM_TRANS=sut<br />
* set environment variable TEST_DEVICE=<ip address of remote device -- displayed by SUT agent><br />
<br />
==== Host Builds (MOZ_HOST_BIN) ====<br />
Android mochitests and reftests require a parallel host build -- a build for the local host (desktop) environment. An environment variable, MOZ_HOST_BIN, must be set to point to that host build. MOZ_HOST_BIN is used to run xpcshell (for instance, to run a simple web server on the desktop), so the MOZ_HOST_BIN directory must contain xpcshell and all the shared libraries required by xpcshell. You can patch together these files from other sources, but the easiest way to get these is to download a xulrunner SDK build from here: http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk/<br />
<br />
You can also build desktop Firefox with a mozconfig which might be as simple as:<br />
<br />
ac_add_options --enable-application=browser<br />
mk_add_options MOZ_OBJDIR=./objdir-desktop<br />
<br />
Then execute:<br />
<br />
export MOZCONFIG=mozconfig.desktop <br />
make -f client.mk<br />
MOZ_HOST_BIN=objdir-desktop/dist/bin<br />
ls -l $MOZ_HOST_BIN/xpcshell<br />
<br />
On Linux, the path to that build may also need to be in your LD_LIBRARY_PATH, unless your LD_LIBRARY_PATH contains ".":<br />
<br />
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.<br />
<br />
==== Test Directory ====<br />
We currently make the assumption that the device has a mounted sdcard when running tests (see {{bug|683895}}). It is usually best to use the sdcard.<br />
<br />
IF you cannot mount an sdcard, or if you are trying to run xpcshell tests, run:<br />
<br />
mkdir /data/local/tests<br />
<br />
(If you are using a Nexus S, the trick to making your device mountable is to not allow USB Storage between your computer and your device. When you plug in your device to your computer, simply don't click the button to allow this on your device and you should be able to run your tests.)<br />
<br />
=== Reftests ===<br />
<br />
MOZ_HOST_BIN="<abspath-to-objdir-desktop>/dist/bin/" TEST_PATH=<path> make -C <objdir-droid> reftest-remote<br />
<br />
For devices with screens too small you will see the error |can't drawWindow remote content|. You can ignore that resolution requirement by using the |ignore-window-size| options. NOTE: This may lead to false negative/positives.<br />
<br />
EXTRA_TEST_ARGS="--ignore-window-size"<br />
<br />
Example TEST_PATH:<br />
<br />
TEST_PATH=layout/reftests/reftest-sanity/reftest.list<br />
<br />
Notes:<br />
<br />
* If TEST_PATH is not specified, *all* reftests will be attempted: This usually fails/hangs and is not recommended. Specify a TEST_PATH or use the --total-chunks and --this-chunk arguments to reduce the number of tests executed.<br />
* sut recommended. Test results displayed and saved to reftest.log and reftest-remote.log.<br />
* adb works, but reports errors. Test results are not displayed but saved to reftest.log (additional diagnostics in reftest-remote.log).<br />
<br />
=== Mochitests ===<br />
<br />
MOZ_HOST_BIN="<abspath-to-objdir-desktop>/dist/bin/" TEST_PATH=<path> \ <br />
make -C <objdir-droid> mochitest-remote<br />
<br />
Note that as of this writing (September 2011) many mochitests will not complete successfully. Try setting your TEST_PATH to "dom/tests/mochitest/dom-level1-core" or "content/smil/test" if you want to restrict yourself to a subset of tests that are known to pass.<br />
<br />
TEST_PATH can be:<br />
content/smil/test<br />
content/xml/document/test<br />
content/xslt/tests/mochitest<br />
dom/src/json/test<br />
dom/src/jsurl/test<br />
dom/tests/mochitest/dom-level0<br />
dom/tests/mochitest/dom-level1-core<br />
dom/tests/mochitest/dom-level2-core<br />
dom/tests/mochitest/ajax/mochikit<br />
dom/tests/mochitest/ajax/scriptaculous<br />
dom/tests/mochitest/ajax/jquery<br />
dom/tests/mochitest/dom-level2-html<br />
Harness_sanity<br />
editor/composer/test<br />
intl/uconv/tests<br />
dom/tests/mochitest/orientation<br />
dom/tests/mochitest/storageevent<br />
layout/xul/test<br />
modules/libjar/test/mochitest<br />
layout/inspector/tests <br />
toolkit/xre/test<br />
toolkit/components/microformats/tests<br />
MochiKit-1.4.2/tests<br />
parser/htmlparser/tests/mochitest<br />
js<br />
<br />
Notes:<br />
* A rooted device is required to run the unit tests using the SUT Agent. Use ADB for unrooted devices.<br />
* Currently using ADB and using /data/local/tests on a non-rooted phone causes setting TEST_PATH to a directory rather than an individual HTML file to fail, and SpecialPowers tests to fail too - filed as {{bug|822652}}<br />
<br />
=== Robotium ===<br />
<br />
The Robotium / Robocop test suite verifies UI behavior in native Fennec. <br />
<br />
Build and install native Fennec, then execute the mochitest-robotium make target.<br />
<br />
make -f client.mk build_and_deploy<br />
cd <objdir-android><br />
adb install -r dist/robocop.apk<br />
MOZ_HOST_BIN="<abspath-to-objdir-desktop>/dist/bin/" make mochitest-robotium<br />
<br />
More info at https://wiki.mozilla.org/Auto-tools/Projects/Robocop.<br />
<br />
Notes:<br />
* A rooted device is NOT required.<br />
* SUT and ADB device managers are both supported.<br />
* MOZ_HOST_BIN is used to launch xpcshell on the desktop to provide a web server.<br />
* Use TEST_PATH=<test-name> to run just one test at a time. eg. TEST_PATH=testAwesomebar<br />
<br />
=== xpcshell ===<br />
<br />
This is still slightly broken, work is ongoing in {{Bug|799863}} to repair things.<br />
<br />
To prepare your device for xpcshell tests:<br />
<br />
adb shell mkdir /data/local/tests<br />
<br />
Also be sure you have successfully built Fennec and generated an APK, as described above.<br />
<br />
To run all tests referenced by the master xpcshell manifest:<br />
<br />
cd <objdir-droid><br />
make xpcshell-tests-remote<br />
<br />
To run a subset of tests in the specified directory:<br />
<br />
make -C <test-directory> xpcshell-tests-remote<br />
<br />
Once either of the xpcshell-tests-remote commands has completed successfully, all test files have been copied to device, and it is then possible to run a single test quickly, without setup:<br />
<br />
make SOLO_FILE=<test-file> -C <test-directory> check-one-remote<br />
<br />
You can also skip setup for a larger test run (be careful / be sure you know that's what you want!):<br />
<br />
export EXTRA_TEST_ARGS="--noSetup"<br />
make -C <test-directory> xpcshell-tests-remote<br />
<br />
Notes:<br />
* A rooted device IS required.<br />
* ADB device manager is used by default. SUT is NOT supported at this time -- it does not allow for a /data/local test root. See {{bug|810347}}.<br />
* The test root directory cannot be on /sdcard -- it must be /data/local so that +x permissions can be set on xpcshell.<br />
* Setup can take a long time! It goes much faster if unzip is available on the remote device; if your device does not have unzip, try installing busybox.<br />
<br />
=== cppunittests ===<br />
<br />
* Coming soon: see bug 811411<br />
<br />
To run a single compiled code test:<br />
<br />
cd <objdir-droid><br />
export TEST_PATH=<test><br />
make cppunittests-remote<br />
<br />
For example, TEST_PATH=TestTimers.<br />
<br />
Advanced features:<br />
<br />
As with xpcshell tests, you can skip setup if needed:<br />
<br />
export EXTRA_TEST_ARGS="--noSetup"<br />
<br />
This will avoid copying any files to the device -- be sure that all necessary files are on the device before using this!<br />
<br />
You can change the environment variables seen by the unit test:<br />
<br />
export EXTRA_TEST_ARGS="--addEnv MYVAR=value"<br />
export EXTRA_TEST_ARGS="--addEnv MYVAR1=value1 --addEnv MYVAR2=value2"<br />
export EXTRA_TEST_ARGS="--addEnv HOME="<br />
<br />
Notes:<br />
* Either adb or sut device manager may be used<br />
<br />
=== browser-chrome ===<br />
<br />
Before you run tests, you will need to make sure you have packaged the tests in your object dir:<br />
<br />
make -C <objdir-droid> package-tests<br />
<br />
There is currently no special make command to build and run browser-chrome tests, but it should be possible to make them run by calling:<br />
<br />
cd <objdir-droid>/_tests/testing/mochitest<br />
python runtestsremote.py --dm_trans=adb --test-path=mobile --browser-chrome --deviceIP=1.2.3.4 <br />
--app=org.mozilla.fennec_$USER --xre-path=<objdir_x86>/dist/bin/<br />
<br />
=== talos ===<br />
<br />
*NOTE: this requires python 2.5 or greater (tested up to 2.7)<br />
<br />
See https://wiki.mozilla.org/Buildbot/Talos<br />
<br />
This is 100% out of band from mozilla-central (same for desktop also).<br />
<br />
hg clone http://hg.mozilla.org/build/talos talos<br />
cd talos<br />
python INSTALL.py<br />
. bin/activate<br />
cd talos<br />
<br />
Run these commands to check out the talos dependencies (assuming you are already in the "talos/talos" directory):<br />
<br />
cd page_load_test<br />
wget http://people.mozilla.org/~jmaher/mobile_tp4.zip<br />
unzip mobile_tp4.zip<br />
<br />
Configure a talos profile. You can do this via adb or [http://people.mozilla.com/~bmoss/SUTAgent/ SUTAgent] - if you want to use adb make sure you have rooted your device such that "adb shell" goes directly into a root shell. If you want to use adb to communicate with the device remotely, do something like this:<br />
<br />
talos -v -e org.mozilla.fennec \<br />
--develop \<br />
--activeTests tprovider \<br />
--output trobo.yml \<br />
--remotePort -1 \<br />
--remoteDevice 1.2.3.4 \<br />
[--fennecIDs <abs-path-to-objdir>/dist/fennec_ids.txt]<br />
<br />
If you want to use [http://people.mozilla.com/~bmoss/SUTAgent/ SUTAgent] to communicate with the device, do something like this:<br />
<br />
talos -v -e org.mozilla.fennec \<br />
--develop \<br />
--activeTests tsvg \<br />
--results_url file://${PWD}/tsvg.txt \<br />
--noChrome \<br />
--remoteDevice <ip of your sutagent> \<br />
[--fennecIDs <abs-path-to-objdir>/dist/fennec_ids.txt]<br />
<br />
SUTAgent will not be able to read the application.ini on the device, so you will need to copy it. We highly recommend pulling the application.ini from the .apk and copying it to the talos/talos/remoteapp.ini file.<br />
<br />
For Robocop based tests (tcheck, tcheck2, tcheck3, tprovider, etc...), we need to use the --fennecIDs flag to pass in the generated fennec_ids.txt file from the build you are testing. This file is generated during build time and has to match the fennec.apk and robocop.apk file. When this flag is used, we copy fennec_ids.txt and robotium.config (generated during configuration time) to the device and use those to run Robocop. If you are running ts, tp4, tsvg, or other traditional talos tests, there is no need for the --fennecIDs flag.<br />
<br />
Unless two applications are signed with the same key they cannot read each others' /data/data directories, so SUTAgent cannot read org.mozilla.fennec's data directory.<br />
You can extract it from the fennec .apk or get it from adb from e.g. /data/data/org.mozilla.fennec/application.ini<br />
<br />
shell@android:/ $ su<br />
shell@android:/ # cat /data/data/org.mozilla.fennec/application.ini<br />
[App]<br />
Vendor=Mozilla<br />
Name=Fennec<br />
Version=10.0a1<br />
BuildID=20111031031100<br />
SourceRepository=http://hg.mozilla.org/mozilla-central<br />
SourceStamp=04b4ea333800<br />
ID={a23983c0-fd0e-11dc-95ff-0800200c9a66}<br />
<br />
[Gecko]<br />
MinVersion=1.9.2b5pre<br />
MaxVersion=10.0a1<br />
<br />
[XRE]<br />
EnableExtensionManager=1<br />
<br />
[Crash Reporter]<br />
Enabled=1<br />
ServerURL=https://crash-reports.mozilla.com/submit<br />
<br />
'''Note''': As of this writing (Sept 27, 2011), the tgfx pageset does not currently work (it isn't run on the desktop either). Don't try it. :)<br />
<br />
'''Note''': When running robocop-based talos tests (tcheck, etc), be aware that some robocop-required files are not updated by Talos. For example, robocop.apk is not installed. Your best bet is to run mochitest-robotium first to make sure everything is up to date, or manually install robocop.apk from the dist folder.<br />
<br />
Aside: For a quick-and-dirty hacky way to run robocop-talos tests locally, see [[Mobile/Fennec/Android/LocalRoboTalos]]<br />
<br />
=== S1/S2 Automation ===<br />
These tests start Fennec with a URL and measure the time to throbber start, time to throbber stop, and drawing end times. <br />
<br />
S1/S2 graphs can be viewed at: http://mrcote.info/phonedash/#/<br />
<br />
Manual run instructions can be found at: https://etherpad.mozilla.org/fennec-perf-ts-take2<br />
<br />
See also: https://wiki.mozilla.org/Mobile/Performance/S1S2-Tests<br />
<br />
=== Eideticker ===<br />
Eideticker measures perceived Firefox performance by video capturing automated browser interactions.<br />
<br />
Eideticker graphs can be viewed at: http://wrla.ch/eideticker/dashboard/<br />
<br />
See also: http://wrla.ch/blog/2011/11/measuring-what-the-user-sees/ and http://wrla.ch/blog/2012/03/announcing-the-eideticker-mobile-performance-dashboard/.<br />
<br />
=== Trouble-shooting testing problems ===<br />
<br />
* Does your mozconfig contain "ac_add_options --disable-tests"?<br />
** If so, you will see something like:<br />
<pre><br />
make: *** No rule to make target <your-test-target>. Stop.<br />
</pre><br />
* Is adb in your $PATH?<br />
* Is your device connected? Does it appear in the output from "adb devices"?<br />
* Can you run adb shell?<br />
* If running xpcshell, did you create /data/local/tests?<br />
* If running "make check-one-remote", did you first setup the device with "make xpcshell-tests-remote"?<br />
<br />
== Debugging ==<br />
<br />
=== Using logcat ===<br />
<br />
[http://developer.android.com/guide/developing/tools/logcat.html logcat] is a tool that is going to show you some logs prompted by the device. It might be a good help if you don't want to or can't run gdb. You can use it by running this command: <br />
<br />
adb logcat -v time<br />
<br />
You can make things appear in logcat using printf_stderr. With debug builds, NS_WARNING, NS_ERROR and NS_ASSERTIONS will show up in logcat. If you're trying to debug something, you may wish to pipe the logcat output through grep to filter out irrelevant things (most Fennec-related output will be viewable by "adb logcat | grep Gecko"), but remember that when attaching log output to a bug you should include unfiltered output as there may be relevant log entries under other tags.<br />
<br />
==== Using aLogCat ====<br />
<br />
<b>Note:</b> aLogCat (and other logcat apps) do not support Jelly Bean (4.1) and above. It seems like the only way to get these apps to work on those versions is to root the device, which, although fulfilling, is probably more work than just using <code>adb logcat</code>.<br />
<br />
If you don't have the Android SDK installed, you can still extract logs using an application called aLogCat. Install it from the Android Market. Use it to capture logs and attach the logs to bugs.<br />
<br />
https://market.android.com/details?id=org.jtb.alogcat&hl=en<br />
<br />
Once you have alogcat installed, just use Fennec as you would normally. Upon encountering a bug or issue, start the aLogcat app (as soon as possible after seeing the Fennec issue) and select "Share" or "Save" from the menu to send it via email or save it to the SD card. The log can then be attached to a bug or sent to a developer. As with adb logcat, it is better to have a log with timestamps than without timestamps. To enable timestamps in the log, select "Preferences" from the aLogcat menu, and change the "Format?" option to "Time".<br />
<br />
If you need to, you can search for some kinds of Fennec-related output by using the "Filter" menu item and entering "Gecko". However, when submitting logs for bug reports, please make sure you clear the filter and include all of the available log data.<br />
<br />
==== JavaScript dump() ====<br />
<br />
To use the dump() function in JavaScript to write to the log:<br />
<br />
# Go to about:config and set browser.dom.window.dump.enabled to "true"<br />
# Run the following ADB commands:<br />
<br />
adb shell stop<br />
adb shell setprop log.redirect-stdio true<br />
adb shell start<br />
<br />
=== Using nVidia GDB ===<br />
<br />
Nvidia's gdb is better than most other gdbs: http://developer.download.nvidia.com/tegra/files/tegra-gdb-20100902.zip .<br />
Even so, you probably want to use JimDB instead of Nvidia's gdb ...<br />
<br />
=== Using JimDB ===<br />
* jchen has been working on a better Android gdb ('jimdb'). [https://github.com/darchons/android-gdb source], and [[Mobile/Fennec/Android/GDB|build instructions]]. For best results, rebuild everything.<br />
* [http://www.jnchen.com/_media/projects/mozilla/moz-gdb.tar.bz2 Prebuilt binaries] are available but problems with them have been reported.<br />
* [http://people.mozilla.com/~bgirard/moz-gdb-darwin-prebuilt-2012-10.tar.gz October 2012 Darwin prebuilt]<br />
** The link to the prebuilt binaries seems broken, as of March 30 2012 (bjacob).<br />
* JimDB:<br />
** has most fixes from NDK gdb<br />
** integrates Android libthread_db (fixed dougt's problem debugging threads)<br />
** has Python scripting support<br />
** [https://github.com/darchons/android-gdbutils couple of existing Python scripts] (or if using prebuilt binaries above, just run 'git pull' under the 'utils' directory)<br />
*** feninit is a tool to initialize the GDB environment (support for multiple devices, multiple object directories; launches Fennec, pulls libraries, sets paths, and attaches gdbserver automatically)<br />
*** tracebt is a WIP stack unwinder that traces instructions to find stack frames<br />
*** idea for another tool to parse and integrate logcat into gdb<br />
*** other ideas welcome!<br />
* see [[Mobile/Fennec/Android/GDB]] for installation instructions<br />
<br />
Once JimDB is installed, just run its gdb executable. This is will take care of everything (it will start gdbserver on the device, start Fennec, and start gdb on your computer):<br />
<br />
./moz-gdb/bin/gdb<br />
<br />
=== Using Debug Intent ===<br />
<br />
'''Note: this is not useful with JimDB. If you want to use JimDB, just start it.'''<br />
<br />
In order to attach before things get running, launch with: <br />
<br />
adb shell am start -a org.mozilla.gecko.DEBUG -n org.mozilla.fennec_foobar/.App<br />
<br />
(Replace foobar by your username)<br />
<br />
and just click launch once gdb is attached. If you need to debug a crash that happens before XRE_Main is called, the patch on {{bug|572247}} may be useful. <br />
<br />
this script [http://dump.lassey.us/debug.sh] will attach gdbserver for you<br />
<br />
=== Getting dalvik java stack dumps using gdb ===<br />
<br />
(gdb) call handleSigQuit()<br />
<br />
this will dump a stack trace to gDvm.stackTraceFile which defaults to "/data/anr/traces.txt"<br />
<br />
Note: this will only work if you have symbols for dalvik. (It may be possible to get the address for handleSigQuit by reading<br />
the symbol table using sigaction.)<br />
<br />
Note: deleting /data/anr/traces.txt will cause this method to stop working. You can fix it by recreating the file with $ echo "" > traces.txt<br />
<br />
=== Debugging with jdb ===<br />
<br />
Inspired by<br />
http://asantoso.wordpress.com/2009/09/26/using-jdb-with-adb-to-debugging-of-android-app-on-a-real-device/<br />
<br />
After staring fennec with jimdb the following seems to work at least a little.<br />
<br />
$ adb jdwp # lists the pids of processes hosting jdwp<br />
5543<br />
$ adb -d forward tcp:8686 jdwp:5543<br />
$ jdb -J-Duser.home=. -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8686 -sourcepath ~/mozilla/maple/mobile/android/base/<br />
<br />
You can also use eclipse for debugging in a similar way by setting up for debugging "Remote Java application".<br />
<br />
This doesn't seem to work for me in Ubuntu 12.04 anymore.<br />
<br />
=== Debugging with eclipse ===<br />
<br />
You need to find the PID of your fennec process. Forward it to a local TCP socket as in "Debugging with jdb."<br />
<br />
In Eclipse switch to the debug perspective. Go to Run > Debug configurations... Remote Java Application. Change the port to the TCP port you specified in your adb command. Under Source, navigate to your checkout, then into mobile/android.<br />
<br />
Eclipse looks for source code in a specific location. You need to create the directory hierarchy:<br />
<code><br />
mobile<br />
/android<br />
/org<br />
mozilla/<br />
gecko -> ../../base</code><br />
<br />
That is, in mozilla-central/mobile/android, create org/mozilla, and put the symlink gecko pointing to mozilla-central/mobile/android/base.<br />
<br />
You may also want to add more debugging information and can do that like this:<br />
diff --git a/config/android-common.mk b/config/android-common.mk<br />
index 4591239..a47726a 100644<br />
--- a/config/android-common.mk<br />
+++ b/config/android-common.mk<br />
@@ -70,6 +70,6 @@ JAVAC_FLAGS = \<br />
-classpath $(JAVA_CLASSPATH) \<br />
-bootclasspath $(JAVA_BOOTCLASSPATH) \<br />
-encoding UTF8 \<br />
- -g:source,lines \<br />
+ -g:source,lines,vars \<br />
-Werror \<br />
$(NULL)<br />
<br />
=== Arguments and Environment Variables ===<br />
<br />
If you need to set an environment variable at run time, append '''--es env# VAR=VAL''' to your activity manager command where # is the ordered number of variables for example: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 VAR=val --es env1 FOO=bar<br />
<br />
If you need to pass arguments at run time, append '''--es args "<your-args>"''' to your activity manager command. For example, to launch with a specific profile: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es args "--profile /mnt/sdcard/myprofile"<br />
<br />
To launch with a specific URL, use the am -d option to set the intent's data URI:<br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App -d 'http://www.mozilla.org'<br />
<br />
=== PR Logging ===<br />
<br />
You can use the env vars as described above to enable NSPR logging:<br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 NSPR_LOG_MODULES=all:5 --es env1 NSPR_LOG_FILE=/mnt/sdcard/log.txt<br />
<br />
If no file is specified, logging is directed to the android logs: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 NSPR_LOG_MODULES=all:5<br />
<br />
Look for lines marked "PRLog" in the adb logcat output.<br />
<br />
=== debugging without rooting ===<br />
<br />
with Froyo you can debug without rooting your phone. Instructions are below. See also [[Mobile/Fennec/Android/GDBNoRoot|Fennec/Android/GDBNoRoot]] for another guide on how to do this.<br> <br />
<br />
First thing, to make this work with the nvidia gdb (which I found more reliable than the android r3 gdb) you need to modify install.sh and debug.sh. <br />
<br />
first, change the location where install.sh copies gdbserver to somewhere writable by a non-root process. I used /data/local. Be sure to update that both in the push command and the chmod command. <br />
<br />
second, update debug.sh with the new location of gdbserver. <br />
<br />
finally, you'll need to add run-as $2 to the adb shell command that launches gdbserver. In the end you should have: install.sh: <br />
<br />
#!/bin/sh<br />
mkdir lib<br />
adb push prebuilt/gdbserver /data/local<br />
adb shell chmod 755 /data/local/gdbserver<br />
for file in $(adb shell ls /system/lib | tr "\n" " " | tr "\r" " "); do<br />
adb pull /system/lib/$file lib<br />
done<br />
adb pull /system/bin/app_process lib <br />
<br />
The above will miss some vendor drivers, you can use busybox to find all shared libraries<br />
<br />
for file in $(adb shell /data/local/busybox find / -name "*.so" | tr "\n" " " | tr "\r" " "); do adb pull /$file lib_unlock_nexus/; done<br />
<br />
debug.sh: <br />
<br />
#!/bin/sh<br />
if [ $# -ne 2 ]<br />
then<br />
echo "usage: $0 /path/to/your/library.so packagename.of.your.activity"<br />
echo "for example:"<br />
echo " $0 /code/mydemo/libs/armeabi/libmydemo.so com.nvidia.devtech.mydemo"<br />
exit<br />
fi<br />
<br />
if [&nbsp;! -f $1 ]<br />
then<br />
echo "ERROR: That library file doesn't exist"<br />
exit<br />
fi<br />
<br />
cp $1 lib<br />
<br />
p=`adb shell ps | grep $2 | awk '{print $2}'`<br />
if [ "$p" = "" ];<br />
then<br />
echo "ERROR: That doesn't seem to be a running process. Please make sure your"<br />
echo "application has been started and that you are using the correct"<br />
echo "namespace argument."<br />
exit<br />
fi<br />
<br />
adb forward tcp:12345 tcp:12345<br />
adb shell run-as $2 /data/local/gdbserver --attach&nbsp;:12345 $p<br />
<br />
=== Attaching GDB ===<br />
Assuming you have the nvidia gdb at the top of your home directory and the app_process binary in the current working directory.<br />
~/nvidia-gdb/prebuilt/linux-x86/arm-eabi-gdb ./app_process<br />
<br />
=== Reading back the framebuffer ===<br />
If you need to verify what is in the back buffer at a particular time, you can cleverly call functions from gdb to allocate memory, read back, and write that to disk.<br />
<br />
You need to know the size of your framebuffer a priori; in this case, it's 480x699.<br />
<br />
You also need to know what the GL enum values are, because unless you compile with -ggdb, you don't have #defines available to you in the debugger. Very helpful information: GL_RGBA = 0x1908, GL_UNSIGNED_BYTE = 0x1401. The rest you can find in gfx/gl/GLDefs.h.<br />
<br />
You '''should''' be able to call glReadPixels directly, but in my experience that causes Fennec to crash. However, if you have a GLContext* lying around, as you often do, you can work around that problem.<br />
<br />
<pre>(gdb) set $m = (int*)malloc(480*699*4)<br />
(gdb) call aManager->mGLContext.mRawPtr->fReadPixels(0, 0, 480, 699, 0x1908, 0x1401, (void*)$m)<br />
(gdb) set $f = fopen("/sdcard/outputfile", "wb+")<br />
(gdb) call fwrite($m, 1, 480*699*4, $f)<br />
$7 = 1342080<br />
(gdb) call fclose($f)<br />
$8 = 0</pre><br />
<br />
Now there is a file called /sdcard/outputfile that you can adb pull. But since it's just raw RGBA values, you need to be able to wrap that in PNG headers to display it. [https://github.com/jrmuizel/minpng/blob/master/minpng.h Jeff Muizelaar wrote a header called minpng.h that you can use to do so.]<br />
<br />
Get Jeff's minpng.h, and put it in a directory along with a driver c program:<br />
<br />
<pre>#include "minpng.h"<br />
<br />
int main(int argc, char* argv[])<br />
{<br />
FILE* f = fopen(argv[1], "rb");<br />
int w = atoi(argv[2]);<br />
int h = atoi(argv[3]);<br />
char* d = (char*) malloc(w * h * 4);<br />
fread(d, w * h * 4, 1, f);<br />
fclose(f);<br />
write_png(argv[4], d, w, h);<br />
}</pre><br />
<br />
Compile and run:<br />
<pre>$ gcc -o minpng minpng.c<br />
$ ./minpng outputfile 480 699 output.png<br />
</pre><br />
=== Using Rendertrace (Maple) ===<br />
<br />
Rendertrace is a utility that will dump layer position and timing information (such as drawing, upload) to the console. This information can pasted into the rendertrace web front end to visualize the layer position and event timeline. This will let you understand where you're gecko is spending its time and why were checkerboarding.<br />
<br />
To enable go in 'gfx/layers/RenderTrace.h' and uncomment '#define MOZ_RENDERTRACE'. Rebuild and run 'adb logcat | grep RENDERTRACE', paste the result in http://people.mozilla.org/~bgirard/rendertrace.html and hit 'reload'. For details talk to BenWa.<br />
<br />
=== Using apitrace ===<br />
<br />
Apitrace is a tool for tracing GL/EGL calls for debugging purposes. It basically uses an interim shared library called libapitrace that contains shadow gl* and egl* functions, which then get logged and then passed through to the real driver.<br />
<br />
<br />
Use apitrace from https://github.com/apitrace/apitrace to build for desktop and android.<br />
<br />
<pre><br />
apt-get install libegl1-mesa-dev libgles1-mesa-dev libgles2-mesa-dev libqt4-dev cmake<br />
git clone https://github.com/gw280/apitrace.git<br />
cd apitrace<br />
<br />
# Build for Android<br />
export ANDROID_NDK=/path/to/your/ndk<br />
cmake -DCMAKE_TOOLCHAIN_FILE=android/android.toolchain.cmake -DANDROID_API_LEVEL=9 -Bbuild-android -H.<br />
make -C build-android -j8<br />
<br />
# Build for desktop<br />
cmake -H. -Bbuild<br />
make -C build -j8<br />
<br />
export EGL_SOFTWARE=true<br />
./build/eglretrace -v /path/to/your/apitrace_log.trace<br />
</pre><br />
<br />
The Android build will create egltrace.so in build-android/wrappers, which you can then push to your device to /data/local:<br />
<br />
<pre><br />
adb push build-android/wrappers/egltrace.so /data/local<br />
</pre><br />
<br />
Restarting Fennec will cause it to load the apitrace library and the apitrace log will be saved to /data/data/org.mozilla.fennec_username/firefox.trace<br />
<br />
You can then adb pull /data/data/org.mozilla.fennec_username/firefox.trace and analyse it on your desktop.<br />
<br />
You can also use qapitrace as a GUI to inspect your trace files. (be sure to switch qapitrace to the EGL api using the options dialog)<br />
<br />
These instructions provide a trace that does not include the Java GL code. To get traces including java code is more complicated. You need to use<br />
the patch from this bug https://bugzilla.mozilla.org/show_bug.cgi?id=749859 and this version of https://github.com/ideak/apitrace/tree/dev. Further, you'll need to build your own image/modify the current one to replace /init.rc. You also need to disable hardware acceleration of the UI (https://bug746703.bugzilla.mozilla.org/attachment.cgi?id=619009) Ask jrmuizel for more information if you want to do this.<br />
<br />
=== Profiling ===<br />
<br />
See https://wiki.mozilla.org/Mobile/Fennec/Android/Profiling.<br />
<br />
=== Debugging Java code with DDMS ===<br />
<br />
See http://developer.android.com/tools/debugging/ddms.html<br />
<br />
== Other useful tips and tricks ==<br />
<br />
=== Tweaking UI prefs ===<br />
By default, all of these prefs are set to "-1" in Fennec, meaning they take the values listed below, which are maintained in Axis.java.<br />
<br />
Fractional values are specified in 1/1000th of a value; to specify a value of 0.3, write 300.<br />
<br />
Note: You need to restart Fennec after changing these values.<br />
<br />
{|<br />
! Pref !! Default value !! Description !!<br />
|-<br />
| ui.scrolling.friction_slow || 850 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is low.||<br />
|-<br />
| ui.scrolling.friction_fast || 970 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is high.||<br />
|-<br />
| ui.scrolling.velocity_threshold || 10 || Below this velocity (in pixels per frame), the friction changes from friction_fast to friction_slow.||<br />
|-<br />
| ui.scrolling.max_event_acceleration || 12 || The maximum velocity change factor between events, per ms, in 1000ths. ||<br />
|-<br />
| ui.scrolling.overscroll_decel_rate || 40 || The rate of deceleration when the surface has overscrolled, in 1000ths. ||<br />
|-<br />
| ui.scrolling.overscroll_snap_limit || 300 || The fraction of the surface which can be overscrolled before it must snap back, in 1000ths. ||<br />
|-<br />
| ui.scrolling.min_scrollable_distance || 500 || The minimum amount of space that must be present for an axis to be considered scrollable, in 1/1000ths of pixels. ||<br />
|-<br />
| gfx.displayport.strategy || 1 || The strategy we use to determine how display ports are calculated. 0 = fixed margin, 1 = velocity bias, 2 = dynamic resolution, 3 = no margins ||<br />
|-<br />
| gfx.displayport.strategy_fm.multiplier || 1500 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of each dimension of the viewport the displayport is sized to. ||<br />
|-<br />
| gfx.displayport.strategy_fm.danger_x || 100 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the width of the viewport the horizontal danger zone is set to.<br />
<br />
<br />
Danger zone is defined as the space at the edge of the viewport at which the viewport (and hence displayport) starts being changed.<br />
|-<br />
| gfx.displayport.strategy_fm.danger_y || 200 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the height of the viewport the vertical danger zone is set to. ||<br />
|-<br />
| gfx.displayport.strategy_vb.multiplier || 1500 || When gfx.displayport.strategy = 1 (velocity bias), the 1000th of each dimension of the viewport the displayport is sized to. ||<br />
|-<br />
| gfx.displayport.strategy_vb.threshold || 32 || When gfx.displayport.strategy = 1 (velocity bias), the threshold for velocity, in pixels/frame, when multiplied by the screen DPI. ||<br />
|-<br />
| gfx.displayport.strategy_vb.reverse_buffer || 200 || When gfx.displayport.strategy = 1 (velocity bias), the fraction of the buffer (in 1000ths) to be kept in the direction opposite the direction of the scroll. ||<br />
|-<br />
|}<br />
<br />
=== Refresh the JS cache ===<br />
<br />
XUL and JavaScript files (like browser.js) are cached for fast startup. If you change one of these files in your development build, the new file might not be picked up unless you also touch <code>toolkit/xre/nsAndroidStartup.cpp</code> and rebuild libxul. (See {{bug|695145}} for details.)<br />
<br />
=== killer script ===<br />
<br />
#!/bin/sh<br />
if [ $# -ne 1 ]<br />
then<br />
echo "usage: $0 packagename.of.your.activity"<br />
echo "for example:"<br />
echo " $0 org.mozilla.fennec"<br />
exit<br />
fi<br />
<br />
p=`adb shell ps | grep $1 | awk '{print $2}'`<br />
if [ "$p" = "" ];<br />
then<br />
echo "ERROR: That doesn't seem to be a running process. Please make sure your"<br />
echo "application has been started and that you are using the correct"<br />
echo "namespace argument."<br />
exit<br />
fi<br />
<br />
adb shell run-as $1 kill $p<br />
<br />
=== .gdbinit ===<br />
<br />
This is an example .gdbinit that uses the symbols from a locally built rom and automatically attaches to gdbserver. Note that putting a ''.gdbinit'' file inside a directory will make gdb load it thus you will not pollute your regular gdb init with those configurations. <br />
<br />
set solib-search-path /home/blassey/android/system/out/target/product/passion/symbols/system/bin:/home/blassey/android/system/out/target/product/passion/symbols/system/lib/:/home/blassey/src/ndk5-m-c/objdir-droid-dbg/dist/bin<br />
set solib-absolute-prefix /home/blassey/android/system/out/target/product/passion/symbols/system/lib/<br />
target remote localhost:12345<br />
<br />
=== Connecting Eclipse to Android Build tree ===<br />
<br />
Clone scripts and templates:<br />
hg clone http://hg.mozilla.org/users/romaxa_gmail.com/eclipse_mobile<br />
cd eclipse_mobile<br />
<br />
Modify mozconfig_values file, according to your build environment<br />
add absolute path to obj-build-dir and source dir, Ex:<br />
MOZOBJDIR=/home/romaxa/mozdev/mozillahg/mozilla-birch/objdir-droid<br />
MOZSRCDIR=/home/romaxa/mozdev/mozillahg/mozilla-birch<br />
<br />
Generate project content (build tree must be fully compiled and make -C objdir package commands performed):<br />
./create_projects.pl<br />
eclipse project will be created in current folder<br />
<br />
Create new project in Eclipse<br />
* File->New->Project<br />
* Android Project<br />
* Next, Create project from existing source<br />
* Select current folder as Location, Next<br />
* Select Build Target "Android 4.1 / API 16"<br />
* Next and Finish<br />
<br />
Press Run App button in order to perform first build,<br />
On first run, some ADT plugin fnctionality removing bin/App.apk and resource.ap_)<br />
Don't know how to teach eclipse don't do that, but it breaks installable package.<br />
So in order to fix that problem<br />
after first Run App, execute in project folder<br />
./fixup_links.pl<br />
It will update *.apk and *.ap_ symlinks<br />
<br />
Press Run App button again<br />
<br />
Try to setup breakpoint in onCreate() and press Debug App button.<br />
<br />
=== Rooting Android devices ===<br />
<br />
See [[Mobile/Fennec/Android/Rooting|Rooting Android Devices]].<br />
<br />
=== Bootstrapper.xpi: Testing JS chrome code changes without rebuilding ===<br />
<br />
Avoid those nasty compile times! Use the [https://groups.google.com/forum/?fromgroups=#!topic/mozilla.dev.platforms.mobile/jmxkOBREcO0 Bootstrapper extension]!</div>Dmosehttps://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android&diff=494672Mobile/Fennec/Android2012-12-18T19:58:38Z<p>Dmose: /* Mochitests */</p>
<hr />
<div>== Building Fennec ==<br />
<br />
Below are instructions for setting up a build environment and building Fennec on Linux (Ubuntu) and Mac OS X. It is not currently possible to compile Fennec on Windows. If you have a Windows PC, see these posts for a Linux virtual machine to compile Fennec:<br />
<br />
* http://blog.lassey.us/2010/07/09/android-development-vm/<br />
* http://blog.lassey.us/2011/07/22/updated-android-development-vm/<br />
<br />
Also, the [https://wiki.mozilla.org/Mobile/Fennec/Android_OtherBuildEnvs OtherBuildEnvs page] has some notes on a few other environment variations, so take a look at that as well if you have an environment or configuration that deviates from "normal".<br />
<br />
First follow the platform-specific instructions below to set up a build environment on your machine. You can optionally also upgrade to the latest Android NDK (currently version r8c). Once you have done that, follow the steps to get the source code, set up your mozconfig, and build Fennec.<br />
<br />
=== Linux ===<br />
<br />
==== Quick Script ====<br />
<br />
Here is a quick script to get set up. It is explained in more detail below.<br />
<br />
# ensure that the "partner" repositories are enabled in /etc/apt/sources.list, or sun-java6-jdk won't be found<br />
# In Ubuntu 11.10 Java has been removed from partner, but<br />
# can be downloaded from Oracle at <br />
# http://www.oracle.com/technetwork/java/javase/downloads/index.html<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk mercurial ccache<br />
sudo apt-get build-dep firefox<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-linux-x86.tar.bz2<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz<br />
tar -xzf android-sdk_r20.0.3-linux.tgz<br />
./android-sdk-linux/tools/android update sdk -u<br />
./android-sdk-linux/tools/android update adb<br />
<br />
If you're using a 64-bit Ubuntu install, you'll need ia32-libs to allow the toolchain binaries to run.<br />
<br />
sudo apt-get install ia32-libs<br />
<br />
If you're using 64-bit Fedora install<br />
<br />
yum install glibc.i686 ncurses-libs.i686 libstdc++.i686 zlib.i686<br />
<br />
==== Explained ====<br />
<br />
This section describes in greater detail all the dependencies and requirements of getting a working build environment on Linux.<br />
<br />
===== Install Java =====<br />
<br />
First install the Sun Java jdk6, which the Android SDK depends on. If you're on Ubuntu (pre-11.10), you'll need to [https://help.ubuntu.com/community/Repositories/Ubuntu#Adding_Canonical_Partner_Repositories enable the partners repo] to get it. Java 7 should work, although occasionally breaks (java 6 is what the buildbots use, so that's the "officially supported" one).<br />
<br />
# Ubuntu pre-11.10<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk<br />
sudo update-java-alternatives -s java-6-sun<br />
<br />
# Ubuntu 11.10 and after<br />
# Download Java from Oracle - go to http://www.oracle.com/technetwork/java/javase/downloads/index.html and<br />
# download the latest version of the JDK.<br />
# These instructions assume the file is called jdk-6u35-linux-x64.bin<br />
sudo mkdir /opt/java<br />
sudo mv ~/Downloads/jdk-6u35-linux-x64.bin<br />
sudo chmod +x ./jdk-6u35-linux-x64.bin<br />
sudo ./jdk-6u35-linux-x64.bin<br />
ln -f -s /opt/java/jdk1.6.0_35/bin/* /usr/local/bin/<br />
# something like sudo update-alternatives --install /usr/local/bin/java java /opt/java/jdk1.6.0_35/bin/ 1 is<br />
# close to the distro way of registering java<br />
<br />
If you're on Ubuntu 64-bit, you'll also want to install ia32-libs at this point (things like adb won't work until you do):<br />
<br />
apt-get install -y ia32-libs<br />
<br />
===== Install Gecko Requirements =====<br />
<br />
Then install the usual stuff needed for a firefox build.<br />
<br />
sudo apt-get install mercurial ccache<br />
sudo apt-get build-dep firefox<br />
<br />
===== Install Android NDK =====<br />
<br />
Download and extract the [http://developer.android.com/sdk/ndk/ Android NDK]. NDK revs 4-8 have been tested and are known to work. The automated builders currently use version r5c.<br />
<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-linux-x86.tar.bz2<br />
<br />
===== Install Android SDK =====<br />
<br />
You should just install the latest [http://developer.android.com/sdk/ Android SDK], we set the API level in our manifest files. The sdk download will take a while, make sure you have a decent internet connection and go get coffee, or maybe lunch.<br />
<br />
You will need SDK version at least 16.<br />
<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz<br />
tar -xzf android-sdk_r20.0.3-linux.tgz<br />
./android-sdk-linux/tools/android update sdk --no-ui<br />
./android-sdk-linux/tools/android update adb<br />
<br />
You will probably want to add the SDK's "tools" and "platform-tools" directory to the PATH environment variable in your shell, so that you can run [http://developer.android.com/guide/developing/tools/adb.html adb] and other tools easily. For example, if you installed the SDK in $HOME/opt, you could add the following line to the end of your .bashrc:<br />
<br />
export PATH=$PATH:$HOME/opt/android-sdk-linux/platform-tools:$HOME/opt/android-sdk-linux/tools<br />
<br />
=== Mac OS X ===<br />
<br />
To set up a build environment on Mac OS X, you first need to install XCode and a few supplementary build tools via a package manager. To do this, follow steps 1 and 2 of the [https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions/Mac_OS_X_Prerequisites Mac OS X Build Prerequisites page]. Once you have completed steps 1 and 2, come back here and continue with the instructions below.<br />
<br />
After installing XCode make sure you also have wget installed. If wget is not a recognized command in terminal follow these steps to install it:<br />
<br />
curl -O http://ftp.gnu.org/gnu/wget/wget-1.14.tar.gz<br />
tar -xzvf wget-1.14.tar.gz<br />
cd wget-1.14<br />
./configure --with-ssl=openssl<br />
make<br />
sudo make install<br />
which wget #Should output: /usr/local/bin/wget<br />
<br />
===== Install Gecko Requirements =====<br />
<br />
Then install the usual stuff needed for a firefox build.<br />
<br />
sudo apt-get install mercurial ccache<br />
sudo apt-get build-dep firefox<br />
<br />
===== Install Android NDK =====<br />
<br />
Download and extract the [http://developer.android.com/sdk/ndk/ Android NDK]. NDK revs 4-8 have been tested and are known to work. The automated builders currently use version r5c.<br />
<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-darwin-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-darwin-x86.tar.bz2<br />
<br />
===== Install Android SDK =====<br />
<br />
You should just install the latest [http://developer.android.com/sdk/ Android SDK], we set the API level in our manifest files. The sdk download will take a while, make sure you have a decent internet connection and go get coffee, or maybe lunch.<br />
<br />
You will need SDK version at least 16.<br />
<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-macosx.zip<br />
unzip android-sdk_r20.0.3-macosx.zip<br />
./android-sdk-macosx/tools/android update sdk --no-ui<br />
./android-sdk-macosx/tools/android update adb<br />
<br />
You will probably want to add the SDK's "tools" and "platform-tools" directory to the PATH environment variable in your shell, so that you can run [http://developer.android.com/guide/developing/tools/adb.html adb] and other tools easily. For example, if you installed the SDK in $HOME, you could add the following line to the end of your .bashrc:<br />
<br />
export PATH=$PATH:$HOME/android-sdk-macosx/platform-tools:$HOME/android-sdk-macosx/tools<br />
<br />
=== Optional: Using NDK r8c ===<br />
<br />
On some systems, linking libxul can takes several minutes. Using <i>gold</i> instead of <i>ld</i> can reduce this time (from around 7 minutes to a bit more than 1 minute on my machine&#160;; YMMV, on another machine, it gets from 25 seconds to 10, or from 2 minutes to 1 minute with all system caches dropped).<br />
<br />
To use gold, the best way is to just use the r8c Android NDK. You can also build gold yourself from binutils source and replace your existing ld binaries in the NDK folder to use gold. However it's simpler to just upgrade the NDK. There are currently no known issues with using the r8c NDK, except that you also need to remove the --enable-warnings-as-errors option in your mozconfig because the gcc-4.6 that comes with r8c is stricter with respect to warnings. There is some discussion in {{bug|769099}} about how r8c is awesome stuff and should be used by default on the buildbots, but that hasn't happened yet.<br />
<br />
To upgrade your NDK, download the NDK for [http://dl.google.com/android/ndk/android-ndk-r8c-darwin-x86.tar.bz2 Mac OS X] or [http://dl.google.com/android/ndk/android-ndk-r8c-linux-x86.tar.bz2 Linux] and unpack it. Then, update your mozconfig to point to the new NDK by setting the <code>--with-android-ndk</code> and <code>--with-android-toolchain</code> options in your mozconfig.<br />
<br />
For example, assuming that on a Mac OS X platform the NDK is unpacked into $HOME/android-ndk-r8c, you would need the following two lines in your mozconfig:<br />
<br />
ac_add_options --with-android-ndk="$HOME/android-ndk-r8c"<br />
ac_add_options --with-android-toolchain="$HOME/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86"<br />
<br />
=== Getting the source ===<br />
<br />
Once you have build tools set up, you should configure Mercurial as described [https://developer.mozilla.org/en-US/docs/Installing_Mercurial#Configuration here]. (It is not required, but highly recommended if you plan on touching the code in any way). Once you have done that, grab a clone of the repository:<br />
<br />
hg clone http://hg.mozilla.org/mozilla-central/ src<br />
<br />
=== Setup Fennec mozconfig ===<br />
<br />
The mozconfig file is what tells the mozilla build scripts how your build environment is set up, and sets various build options. To build scripts will read the mozconfig file from the $MOZCONFIG environment variable, if one is set, or the .mozconfig file in your src directory, if there is one. So you could do either this:<br />
<br />
cd src<br />
vim .mozconfig # put mozconfig here<br />
<br />
or this:<br />
<br />
cd some/random/folder<br />
vim my-fennec-mozconfig # put mozconfig here<br />
export MOZCONFIG=$PWD/my-fennec-mozconfig<br />
<br />
Here is an example mozconfig file for building Fennec, assuming you have followed the instructions above and are using version r5c of the NDK.<br />
<br />
<pre><br />
# Add the correct paths here:<br />
ac_add_options --with-android-ndk="$HOME/android-ndk-r5c"<br />
ac_add_options --with-android-sdk="$HOME/android-sdk-linux/platforms/android-16"<br />
ac_add_options --with-android-version=5<br />
<br />
# android options<br />
ac_add_options --enable-application=mobile/android<br />
ac_add_options --target=arm-linux-androideabi<br />
ac_add_options --with-ccache<br />
<br />
mk_add_options MOZ_OBJDIR=./objdir-droid<br />
mk_add_options MOZ_MAKE_FLAGS="-j9 -s"<br />
</pre><br />
<br />
Remember to use $HOME instead of ~ in the mozconfig, because ~ will not get expanded to the right path! If you are building on Mac OS X you will also need to add this:<br />
<br />
ac_add_options --disable-crashreporter<br />
<br />
because the crash reporter does not build properly on Mac OS X.<br />
<br />
If you want to build for armv6 add this:<br />
<br />
ac_add_options --with-arch=armv6<br />
<br />
You can also look at [http://mxr.mozilla.org/mozilla-central/source/mobile/android/config/mozconfigs/android/nightly the mozconfig used for official nightly builds].<br />
<br />
=== Building the code ===<br />
<br />
This will build (compile+link), package into apk, and deploy to the Android device. Therefore, before you start building [http://developer.android.com/guide/developing/device.html connect your Android device and enable USB debugging]<br />
<br />
cd src<br />
make -f client.mk build_and_deploy<br />
<br />
You can also just do:<br />
<br />
make -f client.mk<br />
make -C objdir-droid package<br />
<br />
to build and package the code into an APK. The APK file can be found in your objdir-droid/dist/ folder, and will be called something like fennec-18.0a1.en-US.android-arm.apk. You can install this APK to your device manually using "adb install". The name of the app that shows up on your phone will be "Fennec $USER" (where $USER is the username under which you built the code).<br />
<br />
== Hacking ==<br />
<br />
There is a bunch of useful information hanging off the page at [[Fennec/NativeUI]]. Below is some more useful information. Please add more stuff you think is useful to these sections!<br />
<br />
=== Finding relevant code ===<br />
<br />
The Fennec-specific code can be found in the following locations in the mozilla-central source tree:<br />
<br />
mobile/android/...<br />
widget/android/...<br />
<br />
Of particular interest to most new contributors will be:<br />
<br />
mobile/android/base/GeckoApp.java # the main android activity that starts up when you open Fennec<br />
mobile/android/chrome/content/browser.js # the main JS file that controls Gecko to make it do what we want<br />
<br />
You can also use the code-search tools at https://mxr.mozilla.org/mozilla-central/ and http://dxr.mozilla.org/ to search for relevant pieces of code.<br />
<br />
=== Partial Builds: Beware the startup cache! ===<br />
<br />
Developers who frequently update .js files sometimes like to manually only re-build the module they have updated. Partial builds for updated Javascript files may not work correctly if installed with adb install -r. This section describes the issue. For instance:<br />
<br />
make -C mobile/android && make package<br />
<br />
This should result in the APK being properly updated with the updated Javascript, BUT the change may not be reflected on the device because of complications arising from the startup cache. If the startup cache from a previous run of Fennec exists on the device and contains an old version of the recently updated Javascript, Fennec will likely use the old version.<br />
<br />
The startup cache is located in the profile, so deleting the profile ensures a new startup cache:<br />
<br />
adb uninstall org.mozilla.fennec<br />
adb install dist/fennec*.apk<br />
<br />
Note that:<br />
<br />
adb install -r dist/fennec*.apk<br />
<br />
retains the profile (and startup cache) -- so that's still a problem.<br />
<br />
None of this is a problem with full builds:<br />
<br />
make -f client.mk &amp;&amp; make package <br />
adb install -r dist/fennec*.apk<br />
<br />
works just fine, because the startup cache respects the buildid: If the buildid found in an APK is different from the buildid used when the startup cache was last updated, the startup cache is automatically deleted. A full build correctly updates the buildid -- a partial build may not.<br />
<br />
A possible way (***I have not conclusively tested this***) to do a partial build, retain an old profile, and ensure the buildid is updated and the startup cache is subsequently deleted is:<br />
<br />
make export && make -C mobile/android && make -C toolkit/xre && make package<br />
adb install -r dist/fennec*.apk<br />
<br />
Note that make export is necessary to update the buildid and make -C toolkit/xre is required to generate application.ini.h, trigger a rebuild of nsAndroidStartup.cpp, and update libxul.so.<br />
<br />
=== Multilocale builds ===<br />
<br />
* Create a directory, clone mozharness, copy the config file for easy editing/usage:<br />
<br />
mkdir multilocale<br />
cd multilocale<br />
hg clone http://hg.mozilla.org/build/mozharness<br />
cp mozharness/configs/multi_locale/standalone_mozilla-central.py myconfig.py<br />
<br />
* Edit myconfig.py<br />
** currently will check out m-c into a directory named 'mozilla-central' in this directory<br />
** currently assumes your mozconfig is in this directory and named 'mozconfig'<br />
** currently assumes your mozconfig sets your objdir name to 'objdir-droid'<br />
<br />
* pull mozilla-central<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py --pull-build-source<br />
# Alternately, you can hg clone http://hg.mozilla.org/mozilla-central<br />
<br />
* Run the script, which will create a multilocale apk<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py<br />
<br />
And you're done.<br />
<br />
* If you want to recompile or re-run the script, restore your objdir to en-US first!<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py --restore-objdir<br />
<br />
Also see [http://escapewindow.dreamwidth.org/234671.html this blog post] for more information.<br />
<br />
== Testing ==<br />
==== Device Managers ====<br />
Most test suites - mochitests, reftests, xpcshell tests, and others - use a "device manager" module to communicate with the remote device. There are two device manager implementations: ADB and SUT. <br />
<br />
The ADB device manager uses the adb command from the Android SDK to communicate with the remote device. To use the ADB device manager:<br />
* ensure the adb command is in your shell's PATH<br />
* set environment variable DM_TRANS=adb<br />
* do not set environment variable TEST_DEVICE, or set TEST_DEVICE= (unless you really need it)<br />
<br />
The SUT device manager uses TCP to communicate with a remote agent, which must be installed on the device. To use the SUT device manager:<br />
* ensure TCP connectivity between the local host and the remote device: check that they are on the same network and you can ping each from the other<br />
* ensure the SUT agent is installed and started on the remote device<br />
** the SUT agent APK is built alongside Fennec; just install <objdir-droid>/build/mobile/sutagent/android/sutAgentAndroid.apk<br />
** The agent should be configured to start automatically with your phone when it boots. To start it immediately from an adb shell do: `am start -n com.mozilla.SUTAgentAndroid/.SUTAgentAndroid -a android.intent.action.MAIN` <br />
* set environment variable DM_TRANS=sut<br />
* set environment variable TEST_DEVICE=<ip address of remote device -- displayed by SUT agent><br />
<br />
==== Host Builds (MOZ_HOST_BIN) ====<br />
Android mochitests and reftests require a parallel host build -- a build for the local host (desktop) environment. An environment variable, MOZ_HOST_BIN, must be set to point to that host build. MOZ_HOST_BIN is used to run xpcshell (for instance, to run a simple web server on the desktop), so the MOZ_HOST_BIN directory must contain xpcshell and all the shared libraries required by xpcshell. You can patch together these files from other sources, but the easiest way to get these is to download a xulrunner SDK build from here: http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk/<br />
<br />
You can also build desktop Firefox with a mozconfig which might be as simple as:<br />
<br />
ac_add_options --enable-application=browser<br />
mk_add_options MOZ_OBJDIR=./objdir-desktop<br />
<br />
Then execute:<br />
<br />
export MOZCONFIG=mozconfig.desktop <br />
make -f client.mk<br />
MOZ_HOST_BIN=objdir-desktop/dist/bin<br />
ls -l $MOZ_HOST_BIN/xpcshell<br />
<br />
On Linux, the path to that build may also need to be in your LD_LIBRARY_PATH, unless your LD_LIBRARY_PATH contains ".":<br />
<br />
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.<br />
<br />
==== Test Directory ====<br />
We currently make the assumption that the device has a mounted sdcard when running tests (see {{bug|683895}}). It is usually best to use the sdcard.<br />
<br />
IF you cannot mount an sdcard, or if you are trying to run xpcshell tests, run:<br />
<br />
mkdir /data/local/tests<br />
<br />
(If you are using a Nexus S, the trick to making your device mountable is to not allow USB Storage between your computer and your device. When you plug in your device to your computer, simply don't click the button to allow this on your device and you should be able to run your tests.)<br />
<br />
=== Reftests ===<br />
<br />
MOZ_HOST_BIN="<abspath-to-objdir-desktop>/dist/bin/" TEST_PATH=<path> make -C <objdir-droid> reftest-remote<br />
<br />
For devices with screens too small you will see the error |can't drawWindow remote content|. You can ignore that resolution requirement by using the |ignore-window-size| options. NOTE: This may lead to false negative/positives.<br />
<br />
EXTRA_TEST_ARGS="--ignore-window-size"<br />
<br />
Example TEST_PATH:<br />
<br />
TEST_PATH=layout/reftests/reftest-sanity/reftest.list<br />
<br />
Notes:<br />
<br />
* If TEST_PATH is not specified, *all* reftests will be attempted: This usually fails/hangs and is not recommended. Specify a TEST_PATH or use the --total-chunks and --this-chunk arguments to reduce the number of tests executed.<br />
* sut recommended. Test results displayed and saved to reftest.log and reftest-remote.log.<br />
* adb works, but reports errors. Test results are not displayed but saved to reftest.log (additional diagnostics in reftest-remote.log).<br />
<br />
=== Mochitests ===<br />
<br />
MOZ_HOST_BIN="<abspath-to-objdir-desktop>/dist/bin/" TEST_PATH=<path> \ <br />
make -C <objdir-droid> mochitest-remote<br />
<br />
Note that as of this writing (September 2011) many mochitests will not complete successfully. Try setting your TEST_PATH to "dom/tests/mochitest/dom-level1-core" or "content/smil/test" if you want to restrict yourself to a subset of tests that are known to pass<br />
<br />
TEST_PATH can be:<br />
content/smil/test<br />
content/xml/document/test<br />
content/xslt/tests/mochitest<br />
dom/src/json/test<br />
dom/src/jsurl/test<br />
dom/tests/mochitest/dom-level0<br />
dom/tests/mochitest/dom-level1-core<br />
dom/tests/mochitest/dom-level2-core<br />
dom/tests/mochitest/ajax/mochikit<br />
dom/tests/mochitest/ajax/scriptaculous<br />
dom/tests/mochitest/ajax/jquery<br />
dom/tests/mochitest/dom-level2-html<br />
Harness_sanity<br />
editor/composer/test<br />
intl/uconv/tests<br />
dom/tests/mochitest/orientation<br />
dom/tests/mochitest/storageevent<br />
layout/xul/test<br />
modules/libjar/test/mochitest<br />
layout/inspector/tests <br />
toolkit/xre/test<br />
toolkit/components/microformats/tests<br />
MochiKit-1.4.2/tests<br />
parser/htmlparser/tests/mochitest<br />
js<br />
<br />
Notes:<br />
* A rooted device is required to run the unit tests using the SUT Agent. Use ADB for unrooted devices.<br />
* Currently using ADB and using /data/local/tests on a non-rooted phone causes setting TEST_PATH to a directory rather than an individual HTML file to fail, and SpecialPowers tests to fail too - filed as {{bug|822652}}<br />
<br />
=== Robotium ===<br />
<br />
The Robotium / Robocop test suite verifies UI behavior in native Fennec. <br />
<br />
Build and install native Fennec, then execute the mochitest-robotium make target.<br />
<br />
make -f client.mk build_and_deploy<br />
cd <objdir-android><br />
adb install -r dist/robocop.apk<br />
MOZ_HOST_BIN="<abspath-to-objdir-desktop>/dist/bin/" make mochitest-robotium<br />
<br />
More info at https://wiki.mozilla.org/Auto-tools/Projects/Robocop.<br />
<br />
Notes:<br />
* A rooted device is NOT required.<br />
* SUT and ADB device managers are both supported.<br />
* MOZ_HOST_BIN is used to launch xpcshell on the desktop to provide a web server.<br />
* Use TEST_PATH=<test-name> to run just one test at a time. eg. TEST_PATH=testAwesomebar<br />
<br />
=== xpcshell ===<br />
<br />
This is still slightly broken, work is ongoing in {{Bug|799863}} to repair things.<br />
<br />
To prepare your device for xpcshell tests:<br />
<br />
adb shell mkdir /data/local/tests<br />
<br />
Also be sure you have successfully built Fennec and generated an APK, as described above.<br />
<br />
To run all tests referenced by the master xpcshell manifest:<br />
<br />
cd <objdir-droid><br />
make xpcshell-tests-remote<br />
<br />
To run a subset of tests in the specified directory:<br />
<br />
make -C <test-directory> xpcshell-tests-remote<br />
<br />
Once either of the xpcshell-tests-remote commands has completed successfully, all test files have been copied to device, and it is then possible to run a single test quickly, without setup:<br />
<br />
make SOLO_FILE=<test-file> -C <test-directory> check-one-remote<br />
<br />
You can also skip setup for a larger test run (be careful / be sure you know that's what you want!):<br />
<br />
export EXTRA_TEST_ARGS="--noSetup"<br />
make -C <test-directory> xpcshell-tests-remote<br />
<br />
Notes:<br />
* A rooted device IS required.<br />
* ADB device manager is used by default. SUT is NOT supported at this time -- it does not allow for a /data/local test root. See {{bug|810347}}.<br />
* The test root directory cannot be on /sdcard -- it must be /data/local so that +x permissions can be set on xpcshell.<br />
* Setup can take a long time! It goes much faster if unzip is available on the remote device; if your device does not have unzip, try installing busybox.<br />
<br />
=== cppunittests ===<br />
<br />
* Coming soon: see bug 811411<br />
<br />
To run a single compiled code test:<br />
<br />
cd <objdir-droid><br />
export TEST_PATH=<test><br />
make cppunittests-remote<br />
<br />
For example, TEST_PATH=TestTimers.<br />
<br />
Advanced features:<br />
<br />
As with xpcshell tests, you can skip setup if needed:<br />
<br />
export EXTRA_TEST_ARGS="--noSetup"<br />
<br />
This will avoid copying any files to the device -- be sure that all necessary files are on the device before using this!<br />
<br />
You can change the environment variables seen by the unit test:<br />
<br />
export EXTRA_TEST_ARGS="--addEnv MYVAR=value"<br />
export EXTRA_TEST_ARGS="--addEnv MYVAR1=value1 --addEnv MYVAR2=value2"<br />
export EXTRA_TEST_ARGS="--addEnv HOME="<br />
<br />
Notes:<br />
* Either adb or sut device manager may be used<br />
<br />
=== browser-chrome ===<br />
<br />
Before you run tests, you will need to make sure you have packaged the tests in your object dir:<br />
<br />
make -C <objdir-droid> package-tests<br />
<br />
There is currently no special make command to build and run browser-chrome tests, but it should be possible to make them run by calling:<br />
<br />
cd <objdir-droid>/_tests/testing/mochitest<br />
python runtestsremote.py --dm_trans=adb --test-path=mobile --browser-chrome --deviceIP=1.2.3.4 <br />
--app=org.mozilla.fennec_$USER --xre-path=<objdir_x86>/dist/bin/<br />
<br />
=== talos ===<br />
<br />
*NOTE: this requires python 2.5 or greater (tested up to 2.7)<br />
<br />
See https://wiki.mozilla.org/Buildbot/Talos<br />
<br />
This is 100% out of band from mozilla-central (same for desktop also).<br />
<br />
hg clone http://hg.mozilla.org/build/talos talos<br />
cd talos<br />
python INSTALL.py<br />
. bin/activate<br />
cd talos<br />
<br />
Run these commands to check out the talos dependencies (assuming you are already in the "talos/talos" directory):<br />
<br />
cd page_load_test<br />
wget http://people.mozilla.org/~jmaher/mobile_tp4.zip<br />
unzip mobile_tp4.zip<br />
<br />
Configure a talos profile. You can do this via adb or [http://people.mozilla.com/~bmoss/SUTAgent/ SUTAgent] - if you want to use adb make sure you have rooted your device such that "adb shell" goes directly into a root shell. If you want to use adb to communicate with the device remotely, do something like this:<br />
<br />
talos -v -e org.mozilla.fennec \<br />
--develop \<br />
--activeTests tprovider \<br />
--output trobo.yml \<br />
--remotePort -1 \<br />
--remoteDevice 1.2.3.4 \<br />
[--fennecIDs <abs-path-to-objdir>/dist/fennec_ids.txt]<br />
<br />
If you want to use [http://people.mozilla.com/~bmoss/SUTAgent/ SUTAgent] to communicate with the device, do something like this:<br />
<br />
talos -v -e org.mozilla.fennec \<br />
--develop \<br />
--activeTests tsvg \<br />
--results_url file://${PWD}/tsvg.txt \<br />
--noChrome \<br />
--remoteDevice <ip of your sutagent> \<br />
[--fennecIDs <abs-path-to-objdir>/dist/fennec_ids.txt]<br />
<br />
SUTAgent will not be able to read the application.ini on the device, so you will need to copy it. We highly recommend pulling the application.ini from the .apk and copying it to the talos/talos/remoteapp.ini file.<br />
<br />
For Robocop based tests (tcheck, tcheck2, tcheck3, tprovider, etc...), we need to use the --fennecIDs flag to pass in the generated fennec_ids.txt file from the build you are testing. This file is generated during build time and has to match the fennec.apk and robocop.apk file. When this flag is used, we copy fennec_ids.txt and robotium.config (generated during configuration time) to the device and use those to run Robocop. If you are running ts, tp4, tsvg, or other traditional talos tests, there is no need for the --fennecIDs flag.<br />
<br />
Unless two applications are signed with the same key they cannot read each others' /data/data directories, so SUTAgent cannot read org.mozilla.fennec's data directory.<br />
You can extract it from the fennec .apk or get it from adb from e.g. /data/data/org.mozilla.fennec/application.ini<br />
<br />
shell@android:/ $ su<br />
shell@android:/ # cat /data/data/org.mozilla.fennec/application.ini<br />
[App]<br />
Vendor=Mozilla<br />
Name=Fennec<br />
Version=10.0a1<br />
BuildID=20111031031100<br />
SourceRepository=http://hg.mozilla.org/mozilla-central<br />
SourceStamp=04b4ea333800<br />
ID={a23983c0-fd0e-11dc-95ff-0800200c9a66}<br />
<br />
[Gecko]<br />
MinVersion=1.9.2b5pre<br />
MaxVersion=10.0a1<br />
<br />
[XRE]<br />
EnableExtensionManager=1<br />
<br />
[Crash Reporter]<br />
Enabled=1<br />
ServerURL=https://crash-reports.mozilla.com/submit<br />
<br />
'''Note''': As of this writing (Sept 27, 2011), the tgfx pageset does not currently work (it isn't run on the desktop either). Don't try it. :)<br />
<br />
'''Note''': When running robocop-based talos tests (tcheck, etc), be aware that some robocop-required files are not updated by Talos. For example, robocop.apk is not installed. Your best bet is to run mochitest-robotium first to make sure everything is up to date, or manually install robocop.apk from the dist folder.<br />
<br />
Aside: For a quick-and-dirty hacky way to run robocop-talos tests locally, see [[Mobile/Fennec/Android/LocalRoboTalos]]<br />
<br />
=== S1/S2 Automation ===<br />
These tests start Fennec with a URL and measure the time to throbber start, time to throbber stop, and drawing end times. <br />
<br />
S1/S2 graphs can be viewed at: http://mrcote.info/phonedash/#/<br />
<br />
Manual run instructions can be found at: https://etherpad.mozilla.org/fennec-perf-ts-take2<br />
<br />
See also: https://wiki.mozilla.org/Mobile/Performance/S1S2-Tests<br />
<br />
=== Eideticker ===<br />
Eideticker measures perceived Firefox performance by video capturing automated browser interactions.<br />
<br />
Eideticker graphs can be viewed at: http://wrla.ch/eideticker/dashboard/<br />
<br />
See also: http://wrla.ch/blog/2011/11/measuring-what-the-user-sees/ and http://wrla.ch/blog/2012/03/announcing-the-eideticker-mobile-performance-dashboard/.<br />
<br />
=== Trouble-shooting testing problems ===<br />
<br />
* Does your mozconfig contain "ac_add_options --disable-tests"?<br />
** If so, you will see something like:<br />
<pre><br />
make: *** No rule to make target <your-test-target>. Stop.<br />
</pre><br />
* Is adb in your $PATH?<br />
* Is your device connected? Does it appear in the output from "adb devices"?<br />
* Can you run adb shell?<br />
* If running xpcshell, did you create /data/local/tests?<br />
* If running "make check-one-remote", did you first setup the device with "make xpcshell-tests-remote"?<br />
<br />
== Debugging ==<br />
<br />
=== Using logcat ===<br />
<br />
[http://developer.android.com/guide/developing/tools/logcat.html logcat] is a tool that is going to show you some logs prompted by the device. It might be a good help if you don't want to or can't run gdb. You can use it by running this command: <br />
<br />
adb logcat -v time<br />
<br />
You can make things appear in logcat using printf_stderr. With debug builds, NS_WARNING, NS_ERROR and NS_ASSERTIONS will show up in logcat. If you're trying to debug something, you may wish to pipe the logcat output through grep to filter out irrelevant things (most Fennec-related output will be viewable by "adb logcat | grep Gecko"), but remember that when attaching log output to a bug you should include unfiltered output as there may be relevant log entries under other tags.<br />
<br />
==== Using aLogCat ====<br />
<br />
<b>Note:</b> aLogCat (and other logcat apps) do not support Jelly Bean (4.1) and above. It seems like the only way to get these apps to work on those versions is to root the device, which, although fulfilling, is probably more work than just using <code>adb logcat</code>.<br />
<br />
If you don't have the Android SDK installed, you can still extract logs using an application called aLogCat. Install it from the Android Market. Use it to capture logs and attach the logs to bugs.<br />
<br />
https://market.android.com/details?id=org.jtb.alogcat&hl=en<br />
<br />
Once you have alogcat installed, just use Fennec as you would normally. Upon encountering a bug or issue, start the aLogcat app (as soon as possible after seeing the Fennec issue) and select "Share" or "Save" from the menu to send it via email or save it to the SD card. The log can then be attached to a bug or sent to a developer. As with adb logcat, it is better to have a log with timestamps than without timestamps. To enable timestamps in the log, select "Preferences" from the aLogcat menu, and change the "Format?" option to "Time".<br />
<br />
If you need to, you can search for some kinds of Fennec-related output by using the "Filter" menu item and entering "Gecko". However, when submitting logs for bug reports, please make sure you clear the filter and include all of the available log data.<br />
<br />
==== JavaScript dump() ====<br />
<br />
To use the dump() function in JavaScript to write to the log:<br />
<br />
# Go to about:config and set browser.dom.window.dump.enabled to "true"<br />
# Run the following ADB commands:<br />
<br />
adb shell stop<br />
adb shell setprop log.redirect-stdio true<br />
adb shell start<br />
<br />
=== Using nVidia GDB ===<br />
<br />
Nvidia's gdb is better than most other gdbs: http://developer.download.nvidia.com/tegra/files/tegra-gdb-20100902.zip .<br />
Even so, you probably want to use JimDB instead of Nvidia's gdb ...<br />
<br />
=== Using JimDB ===<br />
* jchen has been working on a better Android gdb ('jimdb'). [https://github.com/darchons/android-gdb source], and [[Mobile/Fennec/Android/GDB|build instructions]]. For best results, rebuild everything.<br />
* [http://www.jnchen.com/_media/projects/mozilla/moz-gdb.tar.bz2 Prebuilt binaries] are available but problems with them have been reported.<br />
* [http://people.mozilla.com/~bgirard/moz-gdb-darwin-prebuilt-2012-10.tar.gz October 2012 Darwin prebuilt]<br />
** The link to the prebuilt binaries seems broken, as of March 30 2012 (bjacob).<br />
* JimDB:<br />
** has most fixes from NDK gdb<br />
** integrates Android libthread_db (fixed dougt's problem debugging threads)<br />
** has Python scripting support<br />
** [https://github.com/darchons/android-gdbutils couple of existing Python scripts] (or if using prebuilt binaries above, just run 'git pull' under the 'utils' directory)<br />
*** feninit is a tool to initialize the GDB environment (support for multiple devices, multiple object directories; launches Fennec, pulls libraries, sets paths, and attaches gdbserver automatically)<br />
*** tracebt is a WIP stack unwinder that traces instructions to find stack frames<br />
*** idea for another tool to parse and integrate logcat into gdb<br />
*** other ideas welcome!<br />
* see [[Mobile/Fennec/Android/GDB]] for installation instructions<br />
<br />
Once JimDB is installed, just run its gdb executable. This is will take care of everything (it will start gdbserver on the device, start Fennec, and start gdb on your computer):<br />
<br />
./moz-gdb/bin/gdb<br />
<br />
=== Using Debug Intent ===<br />
<br />
'''Note: this is not useful with JimDB. If you want to use JimDB, just start it.'''<br />
<br />
In order to attach before things get running, launch with: <br />
<br />
adb shell am start -a org.mozilla.gecko.DEBUG -n org.mozilla.fennec_foobar/.App<br />
<br />
(Replace foobar by your username)<br />
<br />
and just click launch once gdb is attached. If you need to debug a crash that happens before XRE_Main is called, the patch on {{bug|572247}} may be useful. <br />
<br />
this script [http://dump.lassey.us/debug.sh] will attach gdbserver for you<br />
<br />
=== Getting dalvik java stack dumps using gdb ===<br />
<br />
(gdb) call handleSigQuit()<br />
<br />
this will dump a stack trace to gDvm.stackTraceFile which defaults to "/data/anr/traces.txt"<br />
<br />
Note: this will only work if you have symbols for dalvik. (It may be possible to get the address for handleSigQuit by reading<br />
the symbol table using sigaction.)<br />
<br />
Note: deleting /data/anr/traces.txt will cause this method to stop working. You can fix it by recreating the file with $ echo "" > traces.txt<br />
<br />
=== Debugging with jdb ===<br />
<br />
Inspired by<br />
http://asantoso.wordpress.com/2009/09/26/using-jdb-with-adb-to-debugging-of-android-app-on-a-real-device/<br />
<br />
After staring fennec with jimdb the following seems to work at least a little.<br />
<br />
$ adb jdwp # lists the pids of processes hosting jdwp<br />
5543<br />
$ adb -d forward tcp:8686 jdwp:5543<br />
$ jdb -J-Duser.home=. -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8686 -sourcepath ~/mozilla/maple/mobile/android/base/<br />
<br />
You can also use eclipse for debugging in a similar way by setting up for debugging "Remote Java application".<br />
<br />
This doesn't seem to work for me in Ubuntu 12.04 anymore.<br />
<br />
=== Debugging with eclipse ===<br />
<br />
You need to find the PID of your fennec process. Forward it to a local TCP socket as in "Debugging with jdb."<br />
<br />
In Eclipse switch to the debug perspective. Go to Run > Debug configurations... Remote Java Application. Change the port to the TCP port you specified in your adb command. Under Source, navigate to your checkout, then into mobile/android.<br />
<br />
Eclipse looks for source code in a specific location. You need to create the directory hierarchy:<br />
<code><br />
mobile<br />
/android<br />
/org<br />
mozilla/<br />
gecko -> ../../base</code><br />
<br />
That is, in mozilla-central/mobile/android, create org/mozilla, and put the symlink gecko pointing to mozilla-central/mobile/android/base.<br />
<br />
You may also want to add more debugging information and can do that like this:<br />
diff --git a/config/android-common.mk b/config/android-common.mk<br />
index 4591239..a47726a 100644<br />
--- a/config/android-common.mk<br />
+++ b/config/android-common.mk<br />
@@ -70,6 +70,6 @@ JAVAC_FLAGS = \<br />
-classpath $(JAVA_CLASSPATH) \<br />
-bootclasspath $(JAVA_BOOTCLASSPATH) \<br />
-encoding UTF8 \<br />
- -g:source,lines \<br />
+ -g:source,lines,vars \<br />
-Werror \<br />
$(NULL)<br />
<br />
=== Arguments and Environment Variables ===<br />
<br />
If you need to set an environment variable at run time, append '''--es env# VAR=VAL''' to your activity manager command where # is the ordered number of variables for example: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 VAR=val --es env1 FOO=bar<br />
<br />
If you need to pass arguments at run time, append '''--es args "<your-args>"''' to your activity manager command. For example, to launch with a specific profile: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es args "--profile /mnt/sdcard/myprofile"<br />
<br />
To launch with a specific URL, use the am -d option to set the intent's data URI:<br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App -d 'http://www.mozilla.org'<br />
<br />
=== PR Logging ===<br />
<br />
You can use the env vars as described above to enable NSPR logging:<br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 NSPR_LOG_MODULES=all:5 --es env1 NSPR_LOG_FILE=/mnt/sdcard/log.txt<br />
<br />
If no file is specified, logging is directed to the android logs: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 NSPR_LOG_MODULES=all:5<br />
<br />
Look for lines marked "PRLog" in the adb logcat output.<br />
<br />
=== debugging without rooting ===<br />
<br />
with Froyo you can debug without rooting your phone. Instructions are below. See also [[Mobile/Fennec/Android/GDBNoRoot|Fennec/Android/GDBNoRoot]] for another guide on how to do this.<br> <br />
<br />
First thing, to make this work with the nvidia gdb (which I found more reliable than the android r3 gdb) you need to modify install.sh and debug.sh. <br />
<br />
first, change the location where install.sh copies gdbserver to somewhere writable by a non-root process. I used /data/local. Be sure to update that both in the push command and the chmod command. <br />
<br />
second, update debug.sh with the new location of gdbserver. <br />
<br />
finally, you'll need to add run-as $2 to the adb shell command that launches gdbserver. In the end you should have: install.sh: <br />
<br />
#!/bin/sh<br />
mkdir lib<br />
adb push prebuilt/gdbserver /data/local<br />
adb shell chmod 755 /data/local/gdbserver<br />
for file in $(adb shell ls /system/lib | tr "\n" " " | tr "\r" " "); do<br />
adb pull /system/lib/$file lib<br />
done<br />
adb pull /system/bin/app_process lib <br />
<br />
The above will miss some vendor drivers, you can use busybox to find all shared libraries<br />
<br />
for file in $(adb shell /data/local/busybox find / -name "*.so" | tr "\n" " " | tr "\r" " "); do adb pull /$file lib_unlock_nexus/; done<br />
<br />
debug.sh: <br />
<br />
#!/bin/sh<br />
if [ $# -ne 2 ]<br />
then<br />
echo "usage: $0 /path/to/your/library.so packagename.of.your.activity"<br />
echo "for example:"<br />
echo " $0 /code/mydemo/libs/armeabi/libmydemo.so com.nvidia.devtech.mydemo"<br />
exit<br />
fi<br />
<br />
if [&nbsp;! -f $1 ]<br />
then<br />
echo "ERROR: That library file doesn't exist"<br />
exit<br />
fi<br />
<br />
cp $1 lib<br />
<br />
p=`adb shell ps | grep $2 | awk '{print $2}'`<br />
if [ "$p" = "" ];<br />
then<br />
echo "ERROR: That doesn't seem to be a running process. Please make sure your"<br />
echo "application has been started and that you are using the correct"<br />
echo "namespace argument."<br />
exit<br />
fi<br />
<br />
adb forward tcp:12345 tcp:12345<br />
adb shell run-as $2 /data/local/gdbserver --attach&nbsp;:12345 $p<br />
<br />
=== Attaching GDB ===<br />
Assuming you have the nvidia gdb at the top of your home directory and the app_process binary in the current working directory.<br />
~/nvidia-gdb/prebuilt/linux-x86/arm-eabi-gdb ./app_process<br />
<br />
=== Reading back the framebuffer ===<br />
If you need to verify what is in the back buffer at a particular time, you can cleverly call functions from gdb to allocate memory, read back, and write that to disk.<br />
<br />
You need to know the size of your framebuffer a priori; in this case, it's 480x699.<br />
<br />
You also need to know what the GL enum values are, because unless you compile with -ggdb, you don't have #defines available to you in the debugger. Very helpful information: GL_RGBA = 0x1908, GL_UNSIGNED_BYTE = 0x1401. The rest you can find in gfx/gl/GLDefs.h.<br />
<br />
You '''should''' be able to call glReadPixels directly, but in my experience that causes Fennec to crash. However, if you have a GLContext* lying around, as you often do, you can work around that problem.<br />
<br />
<pre>(gdb) set $m = (int*)malloc(480*699*4)<br />
(gdb) call aManager->mGLContext.mRawPtr->fReadPixels(0, 0, 480, 699, 0x1908, 0x1401, (void*)$m)<br />
(gdb) set $f = fopen("/sdcard/outputfile", "wb+")<br />
(gdb) call fwrite($m, 1, 480*699*4, $f)<br />
$7 = 1342080<br />
(gdb) call fclose($f)<br />
$8 = 0</pre><br />
<br />
Now there is a file called /sdcard/outputfile that you can adb pull. But since it's just raw RGBA values, you need to be able to wrap that in PNG headers to display it. [https://github.com/jrmuizel/minpng/blob/master/minpng.h Jeff Muizelaar wrote a header called minpng.h that you can use to do so.]<br />
<br />
Get Jeff's minpng.h, and put it in a directory along with a driver c program:<br />
<br />
<pre>#include "minpng.h"<br />
<br />
int main(int argc, char* argv[])<br />
{<br />
FILE* f = fopen(argv[1], "rb");<br />
int w = atoi(argv[2]);<br />
int h = atoi(argv[3]);<br />
char* d = (char*) malloc(w * h * 4);<br />
fread(d, w * h * 4, 1, f);<br />
fclose(f);<br />
write_png(argv[4], d, w, h);<br />
}</pre><br />
<br />
Compile and run:<br />
<pre>$ gcc -o minpng minpng.c<br />
$ ./minpng outputfile 480 699 output.png<br />
</pre><br />
=== Using Rendertrace (Maple) ===<br />
<br />
Rendertrace is a utility that will dump layer position and timing information (such as drawing, upload) to the console. This information can pasted into the rendertrace web front end to visualize the layer position and event timeline. This will let you understand where you're gecko is spending its time and why were checkerboarding.<br />
<br />
To enable go in 'gfx/layers/RenderTrace.h' and uncomment '#define MOZ_RENDERTRACE'. Rebuild and run 'adb logcat | grep RENDERTRACE', paste the result in http://people.mozilla.org/~bgirard/rendertrace.html and hit 'reload'. For details talk to BenWa.<br />
<br />
=== Using apitrace ===<br />
<br />
Apitrace is a tool for tracing GL/EGL calls for debugging purposes. It basically uses an interim shared library called libapitrace that contains shadow gl* and egl* functions, which then get logged and then passed through to the real driver.<br />
<br />
<br />
Use apitrace from https://github.com/apitrace/apitrace to build for desktop and android.<br />
<br />
<pre><br />
apt-get install libegl1-mesa-dev libgles1-mesa-dev libgles2-mesa-dev libqt4-dev cmake<br />
git clone https://github.com/gw280/apitrace.git<br />
cd apitrace<br />
<br />
# Build for Android<br />
export ANDROID_NDK=/path/to/your/ndk<br />
cmake -DCMAKE_TOOLCHAIN_FILE=android/android.toolchain.cmake -DANDROID_API_LEVEL=9 -Bbuild-android -H.<br />
make -C build-android -j8<br />
<br />
# Build for desktop<br />
cmake -H. -Bbuild<br />
make -C build -j8<br />
<br />
export EGL_SOFTWARE=true<br />
./build/eglretrace -v /path/to/your/apitrace_log.trace<br />
</pre><br />
<br />
The Android build will create egltrace.so in build-android/wrappers, which you can then push to your device to /data/local:<br />
<br />
<pre><br />
adb push build-android/wrappers/egltrace.so /data/local<br />
</pre><br />
<br />
Restarting Fennec will cause it to load the apitrace library and the apitrace log will be saved to /data/data/org.mozilla.fennec_username/firefox.trace<br />
<br />
You can then adb pull /data/data/org.mozilla.fennec_username/firefox.trace and analyse it on your desktop.<br />
<br />
You can also use qapitrace as a GUI to inspect your trace files. (be sure to switch qapitrace to the EGL api using the options dialog)<br />
<br />
These instructions provide a trace that does not include the Java GL code. To get traces including java code is more complicated. You need to use<br />
the patch from this bug https://bugzilla.mozilla.org/show_bug.cgi?id=749859 and this version of https://github.com/ideak/apitrace/tree/dev. Further, you'll need to build your own image/modify the current one to replace /init.rc. You also need to disable hardware acceleration of the UI (https://bug746703.bugzilla.mozilla.org/attachment.cgi?id=619009) Ask jrmuizel for more information if you want to do this.<br />
<br />
=== Profiling ===<br />
<br />
See https://wiki.mozilla.org/Mobile/Fennec/Android/Profiling.<br />
<br />
=== Debugging Java code with DDMS ===<br />
<br />
See http://developer.android.com/tools/debugging/ddms.html<br />
<br />
== Other useful tips and tricks ==<br />
<br />
=== Tweaking UI prefs ===<br />
By default, all of these prefs are set to "-1" in Fennec, meaning they take the values listed below, which are maintained in Axis.java.<br />
<br />
Fractional values are specified in 1/1000th of a value; to specify a value of 0.3, write 300.<br />
<br />
Note: You need to restart Fennec after changing these values.<br />
<br />
{|<br />
! Pref !! Default value !! Description !!<br />
|-<br />
| ui.scrolling.friction_slow || 850 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is low.||<br />
|-<br />
| ui.scrolling.friction_fast || 970 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is high.||<br />
|-<br />
| ui.scrolling.velocity_threshold || 10 || Below this velocity (in pixels per frame), the friction changes from friction_fast to friction_slow.||<br />
|-<br />
| ui.scrolling.max_event_acceleration || 12 || The maximum velocity change factor between events, per ms, in 1000ths. ||<br />
|-<br />
| ui.scrolling.overscroll_decel_rate || 40 || The rate of deceleration when the surface has overscrolled, in 1000ths. ||<br />
|-<br />
| ui.scrolling.overscroll_snap_limit || 300 || The fraction of the surface which can be overscrolled before it must snap back, in 1000ths. ||<br />
|-<br />
| ui.scrolling.min_scrollable_distance || 500 || The minimum amount of space that must be present for an axis to be considered scrollable, in 1/1000ths of pixels. ||<br />
|-<br />
| gfx.displayport.strategy || 1 || The strategy we use to determine how display ports are calculated. 0 = fixed margin, 1 = velocity bias, 2 = dynamic resolution, 3 = no margins ||<br />
|-<br />
| gfx.displayport.strategy_fm.multiplier || 1500 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of each dimension of the viewport the displayport is sized to. ||<br />
|-<br />
| gfx.displayport.strategy_fm.danger_x || 100 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the width of the viewport the horizontal danger zone is set to.<br />
<br />
<br />
Danger zone is defined as the space at the edge of the viewport at which the viewport (and hence displayport) starts being changed.<br />
|-<br />
| gfx.displayport.strategy_fm.danger_y || 200 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the height of the viewport the vertical danger zone is set to. ||<br />
|-<br />
| gfx.displayport.strategy_vb.multiplier || 1500 || When gfx.displayport.strategy = 1 (velocity bias), the 1000th of each dimension of the viewport the displayport is sized to. ||<br />
|-<br />
| gfx.displayport.strategy_vb.threshold || 32 || When gfx.displayport.strategy = 1 (velocity bias), the threshold for velocity, in pixels/frame, when multiplied by the screen DPI. ||<br />
|-<br />
| gfx.displayport.strategy_vb.reverse_buffer || 200 || When gfx.displayport.strategy = 1 (velocity bias), the fraction of the buffer (in 1000ths) to be kept in the direction opposite the direction of the scroll. ||<br />
|-<br />
|}<br />
<br />
=== Refresh the JS cache ===<br />
<br />
XUL and JavaScript files (like browser.js) are cached for fast startup. If you change one of these files in your development build, the new file might not be picked up unless you also touch <code>toolkit/xre/nsAndroidStartup.cpp</code> and rebuild libxul. (See {{bug|695145}} for details.)<br />
<br />
=== killer script ===<br />
<br />
#!/bin/sh<br />
if [ $# -ne 1 ]<br />
then<br />
echo "usage: $0 packagename.of.your.activity"<br />
echo "for example:"<br />
echo " $0 org.mozilla.fennec"<br />
exit<br />
fi<br />
<br />
p=`adb shell ps | grep $1 | awk '{print $2}'`<br />
if [ "$p" = "" ];<br />
then<br />
echo "ERROR: That doesn't seem to be a running process. Please make sure your"<br />
echo "application has been started and that you are using the correct"<br />
echo "namespace argument."<br />
exit<br />
fi<br />
<br />
adb shell run-as $1 kill $p<br />
<br />
=== .gdbinit ===<br />
<br />
This is an example .gdbinit that uses the symbols from a locally built rom and automatically attaches to gdbserver. Note that putting a ''.gdbinit'' file inside a directory will make gdb load it thus you will not pollute your regular gdb init with those configurations. <br />
<br />
set solib-search-path /home/blassey/android/system/out/target/product/passion/symbols/system/bin:/home/blassey/android/system/out/target/product/passion/symbols/system/lib/:/home/blassey/src/ndk5-m-c/objdir-droid-dbg/dist/bin<br />
set solib-absolute-prefix /home/blassey/android/system/out/target/product/passion/symbols/system/lib/<br />
target remote localhost:12345<br />
<br />
=== Connecting Eclipse to Android Build tree ===<br />
<br />
Clone scripts and templates:<br />
hg clone http://hg.mozilla.org/users/romaxa_gmail.com/eclipse_mobile<br />
cd eclipse_mobile<br />
<br />
Modify mozconfig_values file, according to your build environment<br />
add absolute path to obj-build-dir and source dir, Ex:<br />
MOZOBJDIR=/home/romaxa/mozdev/mozillahg/mozilla-birch/objdir-droid<br />
MOZSRCDIR=/home/romaxa/mozdev/mozillahg/mozilla-birch<br />
<br />
Generate project content (build tree must be fully compiled and make -C objdir package commands performed):<br />
./create_projects.pl<br />
eclipse project will be created in current folder<br />
<br />
Create new project in Eclipse<br />
* File->New->Project<br />
* Android Project<br />
* Next, Create project from existing source<br />
* Select current folder as Location, Next<br />
* Select Build Target "Android 4.1 / API 16"<br />
* Next and Finish<br />
<br />
Press Run App button in order to perform first build,<br />
On first run, some ADT plugin fnctionality removing bin/App.apk and resource.ap_)<br />
Don't know how to teach eclipse don't do that, but it breaks installable package.<br />
So in order to fix that problem<br />
after first Run App, execute in project folder<br />
./fixup_links.pl<br />
It will update *.apk and *.ap_ symlinks<br />
<br />
Press Run App button again<br />
<br />
Try to setup breakpoint in onCreate() and press Debug App button.<br />
<br />
=== Rooting Android devices ===<br />
<br />
See [[Mobile/Fennec/Android/Rooting|Rooting Android Devices]].<br />
<br />
=== Bootstrapper.xpi: Testing JS chrome code changes without rebuilding ===<br />
<br />
Avoid those nasty compile times! Use the [https://groups.google.com/forum/?fromgroups=#!topic/mozilla.dev.platforms.mobile/jmxkOBREcO0 Bootstrapper extension]!</div>Dmosehttps://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android&diff=494670Mobile/Fennec/Android2012-12-18T19:57:24Z<p>Dmose: /* Mochitests */</p>
<hr />
<div>== Building Fennec ==<br />
<br />
Below are instructions for setting up a build environment and building Fennec on Linux (Ubuntu) and Mac OS X. It is not currently possible to compile Fennec on Windows. If you have a Windows PC, see these posts for a Linux virtual machine to compile Fennec:<br />
<br />
* http://blog.lassey.us/2010/07/09/android-development-vm/<br />
* http://blog.lassey.us/2011/07/22/updated-android-development-vm/<br />
<br />
Also, the [https://wiki.mozilla.org/Mobile/Fennec/Android_OtherBuildEnvs OtherBuildEnvs page] has some notes on a few other environment variations, so take a look at that as well if you have an environment or configuration that deviates from "normal".<br />
<br />
First follow the platform-specific instructions below to set up a build environment on your machine. You can optionally also upgrade to the latest Android NDK (currently version r8c). Once you have done that, follow the steps to get the source code, set up your mozconfig, and build Fennec.<br />
<br />
=== Linux ===<br />
<br />
==== Quick Script ====<br />
<br />
Here is a quick script to get set up. It is explained in more detail below.<br />
<br />
# ensure that the "partner" repositories are enabled in /etc/apt/sources.list, or sun-java6-jdk won't be found<br />
# In Ubuntu 11.10 Java has been removed from partner, but<br />
# can be downloaded from Oracle at <br />
# http://www.oracle.com/technetwork/java/javase/downloads/index.html<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk mercurial ccache<br />
sudo apt-get build-dep firefox<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-linux-x86.tar.bz2<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz<br />
tar -xzf android-sdk_r20.0.3-linux.tgz<br />
./android-sdk-linux/tools/android update sdk -u<br />
./android-sdk-linux/tools/android update adb<br />
<br />
If you're using a 64-bit Ubuntu install, you'll need ia32-libs to allow the toolchain binaries to run.<br />
<br />
sudo apt-get install ia32-libs<br />
<br />
If you're using 64-bit Fedora install<br />
<br />
yum install glibc.i686 ncurses-libs.i686 libstdc++.i686 zlib.i686<br />
<br />
==== Explained ====<br />
<br />
This section describes in greater detail all the dependencies and requirements of getting a working build environment on Linux.<br />
<br />
===== Install Java =====<br />
<br />
First install the Sun Java jdk6, which the Android SDK depends on. If you're on Ubuntu (pre-11.10), you'll need to [https://help.ubuntu.com/community/Repositories/Ubuntu#Adding_Canonical_Partner_Repositories enable the partners repo] to get it. Java 7 should work, although occasionally breaks (java 6 is what the buildbots use, so that's the "officially supported" one).<br />
<br />
# Ubuntu pre-11.10<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk<br />
sudo update-java-alternatives -s java-6-sun<br />
<br />
# Ubuntu 11.10 and after<br />
# Download Java from Oracle - go to http://www.oracle.com/technetwork/java/javase/downloads/index.html and<br />
# download the latest version of the JDK.<br />
# These instructions assume the file is called jdk-6u35-linux-x64.bin<br />
sudo mkdir /opt/java<br />
sudo mv ~/Downloads/jdk-6u35-linux-x64.bin<br />
sudo chmod +x ./jdk-6u35-linux-x64.bin<br />
sudo ./jdk-6u35-linux-x64.bin<br />
ln -f -s /opt/java/jdk1.6.0_35/bin/* /usr/local/bin/<br />
# something like sudo update-alternatives --install /usr/local/bin/java java /opt/java/jdk1.6.0_35/bin/ 1 is<br />
# close to the distro way of registering java<br />
<br />
If you're on Ubuntu 64-bit, you'll also want to install ia32-libs at this point (things like adb won't work until you do):<br />
<br />
apt-get install -y ia32-libs<br />
<br />
===== Install Gecko Requirements =====<br />
<br />
Then install the usual stuff needed for a firefox build.<br />
<br />
sudo apt-get install mercurial ccache<br />
sudo apt-get build-dep firefox<br />
<br />
===== Install Android NDK =====<br />
<br />
Download and extract the [http://developer.android.com/sdk/ndk/ Android NDK]. NDK revs 4-8 have been tested and are known to work. The automated builders currently use version r5c.<br />
<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-linux-x86.tar.bz2<br />
<br />
===== Install Android SDK =====<br />
<br />
You should just install the latest [http://developer.android.com/sdk/ Android SDK], we set the API level in our manifest files. The sdk download will take a while, make sure you have a decent internet connection and go get coffee, or maybe lunch.<br />
<br />
You will need SDK version at least 16.<br />
<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz<br />
tar -xzf android-sdk_r20.0.3-linux.tgz<br />
./android-sdk-linux/tools/android update sdk --no-ui<br />
./android-sdk-linux/tools/android update adb<br />
<br />
You will probably want to add the SDK's "tools" and "platform-tools" directory to the PATH environment variable in your shell, so that you can run [http://developer.android.com/guide/developing/tools/adb.html adb] and other tools easily. For example, if you installed the SDK in $HOME/opt, you could add the following line to the end of your .bashrc:<br />
<br />
export PATH=$PATH:$HOME/opt/android-sdk-linux/platform-tools:$HOME/opt/android-sdk-linux/tools<br />
<br />
=== Mac OS X ===<br />
<br />
To set up a build environment on Mac OS X, you first need to install XCode and a few supplementary build tools via a package manager. To do this, follow steps 1 and 2 of the [https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions/Mac_OS_X_Prerequisites Mac OS X Build Prerequisites page]. Once you have completed steps 1 and 2, come back here and continue with the instructions below.<br />
<br />
After installing XCode make sure you also have wget installed. If wget is not a recognized command in terminal follow these steps to install it:<br />
<br />
curl -O http://ftp.gnu.org/gnu/wget/wget-1.14.tar.gz<br />
tar -xzvf wget-1.14.tar.gz<br />
cd wget-1.14<br />
./configure --with-ssl=openssl<br />
make<br />
sudo make install<br />
which wget #Should output: /usr/local/bin/wget<br />
<br />
===== Install Gecko Requirements =====<br />
<br />
Then install the usual stuff needed for a firefox build.<br />
<br />
sudo apt-get install mercurial ccache<br />
sudo apt-get build-dep firefox<br />
<br />
===== Install Android NDK =====<br />
<br />
Download and extract the [http://developer.android.com/sdk/ndk/ Android NDK]. NDK revs 4-8 have been tested and are known to work. The automated builders currently use version r5c.<br />
<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-darwin-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-darwin-x86.tar.bz2<br />
<br />
===== Install Android SDK =====<br />
<br />
You should just install the latest [http://developer.android.com/sdk/ Android SDK], we set the API level in our manifest files. The sdk download will take a while, make sure you have a decent internet connection and go get coffee, or maybe lunch.<br />
<br />
You will need SDK version at least 16.<br />
<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-macosx.zip<br />
unzip android-sdk_r20.0.3-macosx.zip<br />
./android-sdk-macosx/tools/android update sdk --no-ui<br />
./android-sdk-macosx/tools/android update adb<br />
<br />
You will probably want to add the SDK's "tools" and "platform-tools" directory to the PATH environment variable in your shell, so that you can run [http://developer.android.com/guide/developing/tools/adb.html adb] and other tools easily. For example, if you installed the SDK in $HOME, you could add the following line to the end of your .bashrc:<br />
<br />
export PATH=$PATH:$HOME/android-sdk-macosx/platform-tools:$HOME/android-sdk-macosx/tools<br />
<br />
=== Optional: Using NDK r8c ===<br />
<br />
On some systems, linking libxul can takes several minutes. Using <i>gold</i> instead of <i>ld</i> can reduce this time (from around 7 minutes to a bit more than 1 minute on my machine&#160;; YMMV, on another machine, it gets from 25 seconds to 10, or from 2 minutes to 1 minute with all system caches dropped).<br />
<br />
To use gold, the best way is to just use the r8c Android NDK. You can also build gold yourself from binutils source and replace your existing ld binaries in the NDK folder to use gold. However it's simpler to just upgrade the NDK. There are currently no known issues with using the r8c NDK, except that you also need to remove the --enable-warnings-as-errors option in your mozconfig because the gcc-4.6 that comes with r8c is stricter with respect to warnings. There is some discussion in {{bug|769099}} about how r8c is awesome stuff and should be used by default on the buildbots, but that hasn't happened yet.<br />
<br />
To upgrade your NDK, download the NDK for [http://dl.google.com/android/ndk/android-ndk-r8c-darwin-x86.tar.bz2 Mac OS X] or [http://dl.google.com/android/ndk/android-ndk-r8c-linux-x86.tar.bz2 Linux] and unpack it. Then, update your mozconfig to point to the new NDK by setting the <code>--with-android-ndk</code> and <code>--with-android-toolchain</code> options in your mozconfig.<br />
<br />
For example, assuming that on a Mac OS X platform the NDK is unpacked into $HOME/android-ndk-r8c, you would need the following two lines in your mozconfig:<br />
<br />
ac_add_options --with-android-ndk="$HOME/android-ndk-r8c"<br />
ac_add_options --with-android-toolchain="$HOME/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86"<br />
<br />
=== Getting the source ===<br />
<br />
Once you have build tools set up, you should configure Mercurial as described [https://developer.mozilla.org/en-US/docs/Installing_Mercurial#Configuration here]. (It is not required, but highly recommended if you plan on touching the code in any way). Once you have done that, grab a clone of the repository:<br />
<br />
hg clone http://hg.mozilla.org/mozilla-central/ src<br />
<br />
=== Setup Fennec mozconfig ===<br />
<br />
The mozconfig file is what tells the mozilla build scripts how your build environment is set up, and sets various build options. To build scripts will read the mozconfig file from the $MOZCONFIG environment variable, if one is set, or the .mozconfig file in your src directory, if there is one. So you could do either this:<br />
<br />
cd src<br />
vim .mozconfig # put mozconfig here<br />
<br />
or this:<br />
<br />
cd some/random/folder<br />
vim my-fennec-mozconfig # put mozconfig here<br />
export MOZCONFIG=$PWD/my-fennec-mozconfig<br />
<br />
Here is an example mozconfig file for building Fennec, assuming you have followed the instructions above and are using version r5c of the NDK.<br />
<br />
<pre><br />
# Add the correct paths here:<br />
ac_add_options --with-android-ndk="$HOME/android-ndk-r5c"<br />
ac_add_options --with-android-sdk="$HOME/android-sdk-linux/platforms/android-16"<br />
ac_add_options --with-android-version=5<br />
<br />
# android options<br />
ac_add_options --enable-application=mobile/android<br />
ac_add_options --target=arm-linux-androideabi<br />
ac_add_options --with-ccache<br />
<br />
mk_add_options MOZ_OBJDIR=./objdir-droid<br />
mk_add_options MOZ_MAKE_FLAGS="-j9 -s"<br />
</pre><br />
<br />
Remember to use $HOME instead of ~ in the mozconfig, because ~ will not get expanded to the right path! If you are building on Mac OS X you will also need to add this:<br />
<br />
ac_add_options --disable-crashreporter<br />
<br />
because the crash reporter does not build properly on Mac OS X.<br />
<br />
If you want to build for armv6 add this:<br />
<br />
ac_add_options --with-arch=armv6<br />
<br />
You can also look at [http://mxr.mozilla.org/mozilla-central/source/mobile/android/config/mozconfigs/android/nightly the mozconfig used for official nightly builds].<br />
<br />
=== Building the code ===<br />
<br />
This will build (compile+link), package into apk, and deploy to the Android device. Therefore, before you start building [http://developer.android.com/guide/developing/device.html connect your Android device and enable USB debugging]<br />
<br />
cd src<br />
make -f client.mk build_and_deploy<br />
<br />
You can also just do:<br />
<br />
make -f client.mk<br />
make -C objdir-droid package<br />
<br />
to build and package the code into an APK. The APK file can be found in your objdir-droid/dist/ folder, and will be called something like fennec-18.0a1.en-US.android-arm.apk. You can install this APK to your device manually using "adb install". The name of the app that shows up on your phone will be "Fennec $USER" (where $USER is the username under which you built the code).<br />
<br />
== Hacking ==<br />
<br />
There is a bunch of useful information hanging off the page at [[Fennec/NativeUI]]. Below is some more useful information. Please add more stuff you think is useful to these sections!<br />
<br />
=== Finding relevant code ===<br />
<br />
The Fennec-specific code can be found in the following locations in the mozilla-central source tree:<br />
<br />
mobile/android/...<br />
widget/android/...<br />
<br />
Of particular interest to most new contributors will be:<br />
<br />
mobile/android/base/GeckoApp.java # the main android activity that starts up when you open Fennec<br />
mobile/android/chrome/content/browser.js # the main JS file that controls Gecko to make it do what we want<br />
<br />
You can also use the code-search tools at https://mxr.mozilla.org/mozilla-central/ and http://dxr.mozilla.org/ to search for relevant pieces of code.<br />
<br />
=== Partial Builds: Beware the startup cache! ===<br />
<br />
Developers who frequently update .js files sometimes like to manually only re-build the module they have updated. Partial builds for updated Javascript files may not work correctly if installed with adb install -r. This section describes the issue. For instance:<br />
<br />
make -C mobile/android && make package<br />
<br />
This should result in the APK being properly updated with the updated Javascript, BUT the change may not be reflected on the device because of complications arising from the startup cache. If the startup cache from a previous run of Fennec exists on the device and contains an old version of the recently updated Javascript, Fennec will likely use the old version.<br />
<br />
The startup cache is located in the profile, so deleting the profile ensures a new startup cache:<br />
<br />
adb uninstall org.mozilla.fennec<br />
adb install dist/fennec*.apk<br />
<br />
Note that:<br />
<br />
adb install -r dist/fennec*.apk<br />
<br />
retains the profile (and startup cache) -- so that's still a problem.<br />
<br />
None of this is a problem with full builds:<br />
<br />
make -f client.mk &amp;&amp; make package <br />
adb install -r dist/fennec*.apk<br />
<br />
works just fine, because the startup cache respects the buildid: If the buildid found in an APK is different from the buildid used when the startup cache was last updated, the startup cache is automatically deleted. A full build correctly updates the buildid -- a partial build may not.<br />
<br />
A possible way (***I have not conclusively tested this***) to do a partial build, retain an old profile, and ensure the buildid is updated and the startup cache is subsequently deleted is:<br />
<br />
make export && make -C mobile/android && make -C toolkit/xre && make package<br />
adb install -r dist/fennec*.apk<br />
<br />
Note that make export is necessary to update the buildid and make -C toolkit/xre is required to generate application.ini.h, trigger a rebuild of nsAndroidStartup.cpp, and update libxul.so.<br />
<br />
=== Multilocale builds ===<br />
<br />
* Create a directory, clone mozharness, copy the config file for easy editing/usage:<br />
<br />
mkdir multilocale<br />
cd multilocale<br />
hg clone http://hg.mozilla.org/build/mozharness<br />
cp mozharness/configs/multi_locale/standalone_mozilla-central.py myconfig.py<br />
<br />
* Edit myconfig.py<br />
** currently will check out m-c into a directory named 'mozilla-central' in this directory<br />
** currently assumes your mozconfig is in this directory and named 'mozconfig'<br />
** currently assumes your mozconfig sets your objdir name to 'objdir-droid'<br />
<br />
* pull mozilla-central<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py --pull-build-source<br />
# Alternately, you can hg clone http://hg.mozilla.org/mozilla-central<br />
<br />
* Run the script, which will create a multilocale apk<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py<br />
<br />
And you're done.<br />
<br />
* If you want to recompile or re-run the script, restore your objdir to en-US first!<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py --restore-objdir<br />
<br />
Also see [http://escapewindow.dreamwidth.org/234671.html this blog post] for more information.<br />
<br />
== Testing ==<br />
==== Device Managers ====<br />
Most test suites - mochitests, reftests, xpcshell tests, and others - use a "device manager" module to communicate with the remote device. There are two device manager implementations: ADB and SUT. <br />
<br />
The ADB device manager uses the adb command from the Android SDK to communicate with the remote device. To use the ADB device manager:<br />
* ensure the adb command is in your shell's PATH<br />
* set environment variable DM_TRANS=adb<br />
* do not set environment variable TEST_DEVICE, or set TEST_DEVICE= (unless you really need it)<br />
<br />
The SUT device manager uses TCP to communicate with a remote agent, which must be installed on the device. To use the SUT device manager:<br />
* ensure TCP connectivity between the local host and the remote device: check that they are on the same network and you can ping each from the other<br />
* ensure the SUT agent is installed and started on the remote device<br />
** the SUT agent APK is built alongside Fennec; just install <objdir-droid>/build/mobile/sutagent/android/sutAgentAndroid.apk<br />
** The agent should be configured to start automatically with your phone when it boots. To start it immediately from an adb shell do: `am start -n com.mozilla.SUTAgentAndroid/.SUTAgentAndroid -a android.intent.action.MAIN` <br />
* set environment variable DM_TRANS=sut<br />
* set environment variable TEST_DEVICE=<ip address of remote device -- displayed by SUT agent><br />
<br />
==== Host Builds (MOZ_HOST_BIN) ====<br />
Android mochitests and reftests require a parallel host build -- a build for the local host (desktop) environment. An environment variable, MOZ_HOST_BIN, must be set to point to that host build. MOZ_HOST_BIN is used to run xpcshell (for instance, to run a simple web server on the desktop), so the MOZ_HOST_BIN directory must contain xpcshell and all the shared libraries required by xpcshell. You can patch together these files from other sources, but the easiest way to get these is to download a xulrunner SDK build from here: http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk/<br />
<br />
You can also build desktop Firefox with a mozconfig which might be as simple as:<br />
<br />
ac_add_options --enable-application=browser<br />
mk_add_options MOZ_OBJDIR=./objdir-desktop<br />
<br />
Then execute:<br />
<br />
export MOZCONFIG=mozconfig.desktop <br />
make -f client.mk<br />
MOZ_HOST_BIN=objdir-desktop/dist/bin<br />
ls -l $MOZ_HOST_BIN/xpcshell<br />
<br />
On Linux, the path to that build may also need to be in your LD_LIBRARY_PATH, unless your LD_LIBRARY_PATH contains ".":<br />
<br />
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.<br />
<br />
==== Test Directory ====<br />
We currently make the assumption that the device has a mounted sdcard when running tests (see {{bug|683895}}). It is usually best to use the sdcard.<br />
<br />
IF you cannot mount an sdcard, or if you are trying to run xpcshell tests, run:<br />
<br />
mkdir /data/local/tests<br />
<br />
(If you are using a Nexus S, the trick to making your device mountable is to not allow USB Storage between your computer and your device. When you plug in your device to your computer, simply don't click the button to allow this on your device and you should be able to run your tests.)<br />
<br />
=== Reftests ===<br />
<br />
MOZ_HOST_BIN="<abspath-to-objdir-desktop>/dist/bin/" TEST_PATH=<path> make -C <objdir-droid> reftest-remote<br />
<br />
For devices with screens too small you will see the error |can't drawWindow remote content|. You can ignore that resolution requirement by using the |ignore-window-size| options. NOTE: This may lead to false negative/positives.<br />
<br />
EXTRA_TEST_ARGS="--ignore-window-size"<br />
<br />
Example TEST_PATH:<br />
<br />
TEST_PATH=layout/reftests/reftest-sanity/reftest.list<br />
<br />
Notes:<br />
<br />
* If TEST_PATH is not specified, *all* reftests will be attempted: This usually fails/hangs and is not recommended. Specify a TEST_PATH or use the --total-chunks and --this-chunk arguments to reduce the number of tests executed.<br />
* sut recommended. Test results displayed and saved to reftest.log and reftest-remote.log.<br />
* adb works, but reports errors. Test results are not displayed but saved to reftest.log (additional diagnostics in reftest-remote.log).<br />
<br />
=== Mochitests ===<br />
<br />
MOZ_HOST_BIN="<abspath-to-objdir-desktop>/dist/bin/" TEST_PATH=<path> \ <br />
make -C <objdir-droid> mochitest-remote<br />
<br />
Note that as of this writing (September 2011) many mochitests will not complete successfully. Try setting your TEST_PATH to "dom/tests/mochitest/dom-level1-core" or "content/smil/test" if you want to restrict yourself to a subset of tests that are known to pass (note: currently using ADB and using /data/local/tests on a non-rooted phone causes setting TEST_PATH to a directory rather than an individual HTML file to fail, and SpecialPowers tests to fail too - filed as {{bug|822652}})<br />
<br />
TEST_PATH can be:<br />
content/smil/test<br />
content/xml/document/test<br />
content/xslt/tests/mochitest<br />
dom/src/json/test<br />
dom/src/jsurl/test<br />
dom/tests/mochitest/dom-level0<br />
dom/tests/mochitest/dom-level1-core<br />
dom/tests/mochitest/dom-level2-core<br />
dom/tests/mochitest/ajax/mochikit<br />
dom/tests/mochitest/ajax/scriptaculous<br />
dom/tests/mochitest/ajax/jquery<br />
dom/tests/mochitest/dom-level2-html<br />
Harness_sanity<br />
editor/composer/test<br />
intl/uconv/tests<br />
dom/tests/mochitest/orientation<br />
dom/tests/mochitest/storageevent<br />
layout/xul/test<br />
modules/libjar/test/mochitest<br />
layout/inspector/tests <br />
toolkit/xre/test<br />
toolkit/components/microformats/tests<br />
MochiKit-1.4.2/tests<br />
parser/htmlparser/tests/mochitest<br />
js<br />
<br />
Notes:<br />
* A rooted device is required to run the unit tests using the SUT Agent. Use ADB for unrooted devices.<br />
<br />
=== Robotium ===<br />
<br />
The Robotium / Robocop test suite verifies UI behavior in native Fennec. <br />
<br />
Build and install native Fennec, then execute the mochitest-robotium make target.<br />
<br />
make -f client.mk build_and_deploy<br />
cd <objdir-android><br />
adb install -r dist/robocop.apk<br />
MOZ_HOST_BIN="<abspath-to-objdir-desktop>/dist/bin/" make mochitest-robotium<br />
<br />
More info at https://wiki.mozilla.org/Auto-tools/Projects/Robocop.<br />
<br />
Notes:<br />
* A rooted device is NOT required.<br />
* SUT and ADB device managers are both supported.<br />
* MOZ_HOST_BIN is used to launch xpcshell on the desktop to provide a web server.<br />
* Use TEST_PATH=<test-name> to run just one test at a time. eg. TEST_PATH=testAwesomebar<br />
<br />
=== xpcshell ===<br />
<br />
This is still slightly broken, work is ongoing in {{Bug|799863}} to repair things.<br />
<br />
To prepare your device for xpcshell tests:<br />
<br />
adb shell mkdir /data/local/tests<br />
<br />
Also be sure you have successfully built Fennec and generated an APK, as described above.<br />
<br />
To run all tests referenced by the master xpcshell manifest:<br />
<br />
cd <objdir-droid><br />
make xpcshell-tests-remote<br />
<br />
To run a subset of tests in the specified directory:<br />
<br />
make -C <test-directory> xpcshell-tests-remote<br />
<br />
Once either of the xpcshell-tests-remote commands has completed successfully, all test files have been copied to device, and it is then possible to run a single test quickly, without setup:<br />
<br />
make SOLO_FILE=<test-file> -C <test-directory> check-one-remote<br />
<br />
You can also skip setup for a larger test run (be careful / be sure you know that's what you want!):<br />
<br />
export EXTRA_TEST_ARGS="--noSetup"<br />
make -C <test-directory> xpcshell-tests-remote<br />
<br />
Notes:<br />
* A rooted device IS required.<br />
* ADB device manager is used by default. SUT is NOT supported at this time -- it does not allow for a /data/local test root. See {{bug|810347}}.<br />
* The test root directory cannot be on /sdcard -- it must be /data/local so that +x permissions can be set on xpcshell.<br />
* Setup can take a long time! It goes much faster if unzip is available on the remote device; if your device does not have unzip, try installing busybox.<br />
<br />
=== cppunittests ===<br />
<br />
* Coming soon: see bug 811411<br />
<br />
To run a single compiled code test:<br />
<br />
cd <objdir-droid><br />
export TEST_PATH=<test><br />
make cppunittests-remote<br />
<br />
For example, TEST_PATH=TestTimers.<br />
<br />
Advanced features:<br />
<br />
As with xpcshell tests, you can skip setup if needed:<br />
<br />
export EXTRA_TEST_ARGS="--noSetup"<br />
<br />
This will avoid copying any files to the device -- be sure that all necessary files are on the device before using this!<br />
<br />
You can change the environment variables seen by the unit test:<br />
<br />
export EXTRA_TEST_ARGS="--addEnv MYVAR=value"<br />
export EXTRA_TEST_ARGS="--addEnv MYVAR1=value1 --addEnv MYVAR2=value2"<br />
export EXTRA_TEST_ARGS="--addEnv HOME="<br />
<br />
Notes:<br />
* Either adb or sut device manager may be used<br />
<br />
=== browser-chrome ===<br />
<br />
Before you run tests, you will need to make sure you have packaged the tests in your object dir:<br />
<br />
make -C <objdir-droid> package-tests<br />
<br />
There is currently no special make command to build and run browser-chrome tests, but it should be possible to make them run by calling:<br />
<br />
cd <objdir-droid>/_tests/testing/mochitest<br />
python runtestsremote.py --dm_trans=adb --test-path=mobile --browser-chrome --deviceIP=1.2.3.4 <br />
--app=org.mozilla.fennec_$USER --xre-path=<objdir_x86>/dist/bin/<br />
<br />
=== talos ===<br />
<br />
*NOTE: this requires python 2.5 or greater (tested up to 2.7)<br />
<br />
See https://wiki.mozilla.org/Buildbot/Talos<br />
<br />
This is 100% out of band from mozilla-central (same for desktop also).<br />
<br />
hg clone http://hg.mozilla.org/build/talos talos<br />
cd talos<br />
python INSTALL.py<br />
. bin/activate<br />
cd talos<br />
<br />
Run these commands to check out the talos dependencies (assuming you are already in the "talos/talos" directory):<br />
<br />
cd page_load_test<br />
wget http://people.mozilla.org/~jmaher/mobile_tp4.zip<br />
unzip mobile_tp4.zip<br />
<br />
Configure a talos profile. You can do this via adb or [http://people.mozilla.com/~bmoss/SUTAgent/ SUTAgent] - if you want to use adb make sure you have rooted your device such that "adb shell" goes directly into a root shell. If you want to use adb to communicate with the device remotely, do something like this:<br />
<br />
talos -v -e org.mozilla.fennec \<br />
--develop \<br />
--activeTests tprovider \<br />
--output trobo.yml \<br />
--remotePort -1 \<br />
--remoteDevice 1.2.3.4 \<br />
[--fennecIDs <abs-path-to-objdir>/dist/fennec_ids.txt]<br />
<br />
If you want to use [http://people.mozilla.com/~bmoss/SUTAgent/ SUTAgent] to communicate with the device, do something like this:<br />
<br />
talos -v -e org.mozilla.fennec \<br />
--develop \<br />
--activeTests tsvg \<br />
--results_url file://${PWD}/tsvg.txt \<br />
--noChrome \<br />
--remoteDevice <ip of your sutagent> \<br />
[--fennecIDs <abs-path-to-objdir>/dist/fennec_ids.txt]<br />
<br />
SUTAgent will not be able to read the application.ini on the device, so you will need to copy it. We highly recommend pulling the application.ini from the .apk and copying it to the talos/talos/remoteapp.ini file.<br />
<br />
For Robocop based tests (tcheck, tcheck2, tcheck3, tprovider, etc...), we need to use the --fennecIDs flag to pass in the generated fennec_ids.txt file from the build you are testing. This file is generated during build time and has to match the fennec.apk and robocop.apk file. When this flag is used, we copy fennec_ids.txt and robotium.config (generated during configuration time) to the device and use those to run Robocop. If you are running ts, tp4, tsvg, or other traditional talos tests, there is no need for the --fennecIDs flag.<br />
<br />
Unless two applications are signed with the same key they cannot read each others' /data/data directories, so SUTAgent cannot read org.mozilla.fennec's data directory.<br />
You can extract it from the fennec .apk or get it from adb from e.g. /data/data/org.mozilla.fennec/application.ini<br />
<br />
shell@android:/ $ su<br />
shell@android:/ # cat /data/data/org.mozilla.fennec/application.ini<br />
[App]<br />
Vendor=Mozilla<br />
Name=Fennec<br />
Version=10.0a1<br />
BuildID=20111031031100<br />
SourceRepository=http://hg.mozilla.org/mozilla-central<br />
SourceStamp=04b4ea333800<br />
ID={a23983c0-fd0e-11dc-95ff-0800200c9a66}<br />
<br />
[Gecko]<br />
MinVersion=1.9.2b5pre<br />
MaxVersion=10.0a1<br />
<br />
[XRE]<br />
EnableExtensionManager=1<br />
<br />
[Crash Reporter]<br />
Enabled=1<br />
ServerURL=https://crash-reports.mozilla.com/submit<br />
<br />
'''Note''': As of this writing (Sept 27, 2011), the tgfx pageset does not currently work (it isn't run on the desktop either). Don't try it. :)<br />
<br />
'''Note''': When running robocop-based talos tests (tcheck, etc), be aware that some robocop-required files are not updated by Talos. For example, robocop.apk is not installed. Your best bet is to run mochitest-robotium first to make sure everything is up to date, or manually install robocop.apk from the dist folder.<br />
<br />
Aside: For a quick-and-dirty hacky way to run robocop-talos tests locally, see [[Mobile/Fennec/Android/LocalRoboTalos]]<br />
<br />
=== S1/S2 Automation ===<br />
These tests start Fennec with a URL and measure the time to throbber start, time to throbber stop, and drawing end times. <br />
<br />
S1/S2 graphs can be viewed at: http://mrcote.info/phonedash/#/<br />
<br />
Manual run instructions can be found at: https://etherpad.mozilla.org/fennec-perf-ts-take2<br />
<br />
See also: https://wiki.mozilla.org/Mobile/Performance/S1S2-Tests<br />
<br />
=== Eideticker ===<br />
Eideticker measures perceived Firefox performance by video capturing automated browser interactions.<br />
<br />
Eideticker graphs can be viewed at: http://wrla.ch/eideticker/dashboard/<br />
<br />
See also: http://wrla.ch/blog/2011/11/measuring-what-the-user-sees/ and http://wrla.ch/blog/2012/03/announcing-the-eideticker-mobile-performance-dashboard/.<br />
<br />
=== Trouble-shooting testing problems ===<br />
<br />
* Does your mozconfig contain "ac_add_options --disable-tests"?<br />
** If so, you will see something like:<br />
<pre><br />
make: *** No rule to make target <your-test-target>. Stop.<br />
</pre><br />
* Is adb in your $PATH?<br />
* Is your device connected? Does it appear in the output from "adb devices"?<br />
* Can you run adb shell?<br />
* If running xpcshell, did you create /data/local/tests?<br />
* If running "make check-one-remote", did you first setup the device with "make xpcshell-tests-remote"?<br />
<br />
== Debugging ==<br />
<br />
=== Using logcat ===<br />
<br />
[http://developer.android.com/guide/developing/tools/logcat.html logcat] is a tool that is going to show you some logs prompted by the device. It might be a good help if you don't want to or can't run gdb. You can use it by running this command: <br />
<br />
adb logcat -v time<br />
<br />
You can make things appear in logcat using printf_stderr. With debug builds, NS_WARNING, NS_ERROR and NS_ASSERTIONS will show up in logcat. If you're trying to debug something, you may wish to pipe the logcat output through grep to filter out irrelevant things (most Fennec-related output will be viewable by "adb logcat | grep Gecko"), but remember that when attaching log output to a bug you should include unfiltered output as there may be relevant log entries under other tags.<br />
<br />
==== Using aLogCat ====<br />
<br />
<b>Note:</b> aLogCat (and other logcat apps) do not support Jelly Bean (4.1) and above. It seems like the only way to get these apps to work on those versions is to root the device, which, although fulfilling, is probably more work than just using <code>adb logcat</code>.<br />
<br />
If you don't have the Android SDK installed, you can still extract logs using an application called aLogCat. Install it from the Android Market. Use it to capture logs and attach the logs to bugs.<br />
<br />
https://market.android.com/details?id=org.jtb.alogcat&hl=en<br />
<br />
Once you have alogcat installed, just use Fennec as you would normally. Upon encountering a bug or issue, start the aLogcat app (as soon as possible after seeing the Fennec issue) and select "Share" or "Save" from the menu to send it via email or save it to the SD card. The log can then be attached to a bug or sent to a developer. As with adb logcat, it is better to have a log with timestamps than without timestamps. To enable timestamps in the log, select "Preferences" from the aLogcat menu, and change the "Format?" option to "Time".<br />
<br />
If you need to, you can search for some kinds of Fennec-related output by using the "Filter" menu item and entering "Gecko". However, when submitting logs for bug reports, please make sure you clear the filter and include all of the available log data.<br />
<br />
==== JavaScript dump() ====<br />
<br />
To use the dump() function in JavaScript to write to the log:<br />
<br />
# Go to about:config and set browser.dom.window.dump.enabled to "true"<br />
# Run the following ADB commands:<br />
<br />
adb shell stop<br />
adb shell setprop log.redirect-stdio true<br />
adb shell start<br />
<br />
=== Using nVidia GDB ===<br />
<br />
Nvidia's gdb is better than most other gdbs: http://developer.download.nvidia.com/tegra/files/tegra-gdb-20100902.zip .<br />
Even so, you probably want to use JimDB instead of Nvidia's gdb ...<br />
<br />
=== Using JimDB ===<br />
* jchen has been working on a better Android gdb ('jimdb'). [https://github.com/darchons/android-gdb source], and [[Mobile/Fennec/Android/GDB|build instructions]]. For best results, rebuild everything.<br />
* [http://www.jnchen.com/_media/projects/mozilla/moz-gdb.tar.bz2 Prebuilt binaries] are available but problems with them have been reported.<br />
* [http://people.mozilla.com/~bgirard/moz-gdb-darwin-prebuilt-2012-10.tar.gz October 2012 Darwin prebuilt]<br />
** The link to the prebuilt binaries seems broken, as of March 30 2012 (bjacob).<br />
* JimDB:<br />
** has most fixes from NDK gdb<br />
** integrates Android libthread_db (fixed dougt's problem debugging threads)<br />
** has Python scripting support<br />
** [https://github.com/darchons/android-gdbutils couple of existing Python scripts] (or if using prebuilt binaries above, just run 'git pull' under the 'utils' directory)<br />
*** feninit is a tool to initialize the GDB environment (support for multiple devices, multiple object directories; launches Fennec, pulls libraries, sets paths, and attaches gdbserver automatically)<br />
*** tracebt is a WIP stack unwinder that traces instructions to find stack frames<br />
*** idea for another tool to parse and integrate logcat into gdb<br />
*** other ideas welcome!<br />
* see [[Mobile/Fennec/Android/GDB]] for installation instructions<br />
<br />
Once JimDB is installed, just run its gdb executable. This is will take care of everything (it will start gdbserver on the device, start Fennec, and start gdb on your computer):<br />
<br />
./moz-gdb/bin/gdb<br />
<br />
=== Using Debug Intent ===<br />
<br />
'''Note: this is not useful with JimDB. If you want to use JimDB, just start it.'''<br />
<br />
In order to attach before things get running, launch with: <br />
<br />
adb shell am start -a org.mozilla.gecko.DEBUG -n org.mozilla.fennec_foobar/.App<br />
<br />
(Replace foobar by your username)<br />
<br />
and just click launch once gdb is attached. If you need to debug a crash that happens before XRE_Main is called, the patch on {{bug|572247}} may be useful. <br />
<br />
this script [http://dump.lassey.us/debug.sh] will attach gdbserver for you<br />
<br />
=== Getting dalvik java stack dumps using gdb ===<br />
<br />
(gdb) call handleSigQuit()<br />
<br />
this will dump a stack trace to gDvm.stackTraceFile which defaults to "/data/anr/traces.txt"<br />
<br />
Note: this will only work if you have symbols for dalvik. (It may be possible to get the address for handleSigQuit by reading<br />
the symbol table using sigaction.)<br />
<br />
Note: deleting /data/anr/traces.txt will cause this method to stop working. You can fix it by recreating the file with $ echo "" > traces.txt<br />
<br />
=== Debugging with jdb ===<br />
<br />
Inspired by<br />
http://asantoso.wordpress.com/2009/09/26/using-jdb-with-adb-to-debugging-of-android-app-on-a-real-device/<br />
<br />
After staring fennec with jimdb the following seems to work at least a little.<br />
<br />
$ adb jdwp # lists the pids of processes hosting jdwp<br />
5543<br />
$ adb -d forward tcp:8686 jdwp:5543<br />
$ jdb -J-Duser.home=. -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8686 -sourcepath ~/mozilla/maple/mobile/android/base/<br />
<br />
You can also use eclipse for debugging in a similar way by setting up for debugging "Remote Java application".<br />
<br />
This doesn't seem to work for me in Ubuntu 12.04 anymore.<br />
<br />
=== Debugging with eclipse ===<br />
<br />
You need to find the PID of your fennec process. Forward it to a local TCP socket as in "Debugging with jdb."<br />
<br />
In Eclipse switch to the debug perspective. Go to Run > Debug configurations... Remote Java Application. Change the port to the TCP port you specified in your adb command. Under Source, navigate to your checkout, then into mobile/android.<br />
<br />
Eclipse looks for source code in a specific location. You need to create the directory hierarchy:<br />
<code><br />
mobile<br />
/android<br />
/org<br />
mozilla/<br />
gecko -> ../../base</code><br />
<br />
That is, in mozilla-central/mobile/android, create org/mozilla, and put the symlink gecko pointing to mozilla-central/mobile/android/base.<br />
<br />
You may also want to add more debugging information and can do that like this:<br />
diff --git a/config/android-common.mk b/config/android-common.mk<br />
index 4591239..a47726a 100644<br />
--- a/config/android-common.mk<br />
+++ b/config/android-common.mk<br />
@@ -70,6 +70,6 @@ JAVAC_FLAGS = \<br />
-classpath $(JAVA_CLASSPATH) \<br />
-bootclasspath $(JAVA_BOOTCLASSPATH) \<br />
-encoding UTF8 \<br />
- -g:source,lines \<br />
+ -g:source,lines,vars \<br />
-Werror \<br />
$(NULL)<br />
<br />
=== Arguments and Environment Variables ===<br />
<br />
If you need to set an environment variable at run time, append '''--es env# VAR=VAL''' to your activity manager command where # is the ordered number of variables for example: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 VAR=val --es env1 FOO=bar<br />
<br />
If you need to pass arguments at run time, append '''--es args "<your-args>"''' to your activity manager command. For example, to launch with a specific profile: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es args "--profile /mnt/sdcard/myprofile"<br />
<br />
To launch with a specific URL, use the am -d option to set the intent's data URI:<br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App -d 'http://www.mozilla.org'<br />
<br />
=== PR Logging ===<br />
<br />
You can use the env vars as described above to enable NSPR logging:<br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 NSPR_LOG_MODULES=all:5 --es env1 NSPR_LOG_FILE=/mnt/sdcard/log.txt<br />
<br />
If no file is specified, logging is directed to the android logs: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 NSPR_LOG_MODULES=all:5<br />
<br />
Look for lines marked "PRLog" in the adb logcat output.<br />
<br />
=== debugging without rooting ===<br />
<br />
with Froyo you can debug without rooting your phone. Instructions are below. See also [[Mobile/Fennec/Android/GDBNoRoot|Fennec/Android/GDBNoRoot]] for another guide on how to do this.<br> <br />
<br />
First thing, to make this work with the nvidia gdb (which I found more reliable than the android r3 gdb) you need to modify install.sh and debug.sh. <br />
<br />
first, change the location where install.sh copies gdbserver to somewhere writable by a non-root process. I used /data/local. Be sure to update that both in the push command and the chmod command. <br />
<br />
second, update debug.sh with the new location of gdbserver. <br />
<br />
finally, you'll need to add run-as $2 to the adb shell command that launches gdbserver. In the end you should have: install.sh: <br />
<br />
#!/bin/sh<br />
mkdir lib<br />
adb push prebuilt/gdbserver /data/local<br />
adb shell chmod 755 /data/local/gdbserver<br />
for file in $(adb shell ls /system/lib | tr "\n" " " | tr "\r" " "); do<br />
adb pull /system/lib/$file lib<br />
done<br />
adb pull /system/bin/app_process lib <br />
<br />
The above will miss some vendor drivers, you can use busybox to find all shared libraries<br />
<br />
for file in $(adb shell /data/local/busybox find / -name "*.so" | tr "\n" " " | tr "\r" " "); do adb pull /$file lib_unlock_nexus/; done<br />
<br />
debug.sh: <br />
<br />
#!/bin/sh<br />
if [ $# -ne 2 ]<br />
then<br />
echo "usage: $0 /path/to/your/library.so packagename.of.your.activity"<br />
echo "for example:"<br />
echo " $0 /code/mydemo/libs/armeabi/libmydemo.so com.nvidia.devtech.mydemo"<br />
exit<br />
fi<br />
<br />
if [&nbsp;! -f $1 ]<br />
then<br />
echo "ERROR: That library file doesn't exist"<br />
exit<br />
fi<br />
<br />
cp $1 lib<br />
<br />
p=`adb shell ps | grep $2 | awk '{print $2}'`<br />
if [ "$p" = "" ];<br />
then<br />
echo "ERROR: That doesn't seem to be a running process. Please make sure your"<br />
echo "application has been started and that you are using the correct"<br />
echo "namespace argument."<br />
exit<br />
fi<br />
<br />
adb forward tcp:12345 tcp:12345<br />
adb shell run-as $2 /data/local/gdbserver --attach&nbsp;:12345 $p<br />
<br />
=== Attaching GDB ===<br />
Assuming you have the nvidia gdb at the top of your home directory and the app_process binary in the current working directory.<br />
~/nvidia-gdb/prebuilt/linux-x86/arm-eabi-gdb ./app_process<br />
<br />
=== Reading back the framebuffer ===<br />
If you need to verify what is in the back buffer at a particular time, you can cleverly call functions from gdb to allocate memory, read back, and write that to disk.<br />
<br />
You need to know the size of your framebuffer a priori; in this case, it's 480x699.<br />
<br />
You also need to know what the GL enum values are, because unless you compile with -ggdb, you don't have #defines available to you in the debugger. Very helpful information: GL_RGBA = 0x1908, GL_UNSIGNED_BYTE = 0x1401. The rest you can find in gfx/gl/GLDefs.h.<br />
<br />
You '''should''' be able to call glReadPixels directly, but in my experience that causes Fennec to crash. However, if you have a GLContext* lying around, as you often do, you can work around that problem.<br />
<br />
<pre>(gdb) set $m = (int*)malloc(480*699*4)<br />
(gdb) call aManager->mGLContext.mRawPtr->fReadPixels(0, 0, 480, 699, 0x1908, 0x1401, (void*)$m)<br />
(gdb) set $f = fopen("/sdcard/outputfile", "wb+")<br />
(gdb) call fwrite($m, 1, 480*699*4, $f)<br />
$7 = 1342080<br />
(gdb) call fclose($f)<br />
$8 = 0</pre><br />
<br />
Now there is a file called /sdcard/outputfile that you can adb pull. But since it's just raw RGBA values, you need to be able to wrap that in PNG headers to display it. [https://github.com/jrmuizel/minpng/blob/master/minpng.h Jeff Muizelaar wrote a header called minpng.h that you can use to do so.]<br />
<br />
Get Jeff's minpng.h, and put it in a directory along with a driver c program:<br />
<br />
<pre>#include "minpng.h"<br />
<br />
int main(int argc, char* argv[])<br />
{<br />
FILE* f = fopen(argv[1], "rb");<br />
int w = atoi(argv[2]);<br />
int h = atoi(argv[3]);<br />
char* d = (char*) malloc(w * h * 4);<br />
fread(d, w * h * 4, 1, f);<br />
fclose(f);<br />
write_png(argv[4], d, w, h);<br />
}</pre><br />
<br />
Compile and run:<br />
<pre>$ gcc -o minpng minpng.c<br />
$ ./minpng outputfile 480 699 output.png<br />
</pre><br />
=== Using Rendertrace (Maple) ===<br />
<br />
Rendertrace is a utility that will dump layer position and timing information (such as drawing, upload) to the console. This information can pasted into the rendertrace web front end to visualize the layer position and event timeline. This will let you understand where you're gecko is spending its time and why were checkerboarding.<br />
<br />
To enable go in 'gfx/layers/RenderTrace.h' and uncomment '#define MOZ_RENDERTRACE'. Rebuild and run 'adb logcat | grep RENDERTRACE', paste the result in http://people.mozilla.org/~bgirard/rendertrace.html and hit 'reload'. For details talk to BenWa.<br />
<br />
=== Using apitrace ===<br />
<br />
Apitrace is a tool for tracing GL/EGL calls for debugging purposes. It basically uses an interim shared library called libapitrace that contains shadow gl* and egl* functions, which then get logged and then passed through to the real driver.<br />
<br />
<br />
Use apitrace from https://github.com/apitrace/apitrace to build for desktop and android.<br />
<br />
<pre><br />
apt-get install libegl1-mesa-dev libgles1-mesa-dev libgles2-mesa-dev libqt4-dev cmake<br />
git clone https://github.com/gw280/apitrace.git<br />
cd apitrace<br />
<br />
# Build for Android<br />
export ANDROID_NDK=/path/to/your/ndk<br />
cmake -DCMAKE_TOOLCHAIN_FILE=android/android.toolchain.cmake -DANDROID_API_LEVEL=9 -Bbuild-android -H.<br />
make -C build-android -j8<br />
<br />
# Build for desktop<br />
cmake -H. -Bbuild<br />
make -C build -j8<br />
<br />
export EGL_SOFTWARE=true<br />
./build/eglretrace -v /path/to/your/apitrace_log.trace<br />
</pre><br />
<br />
The Android build will create egltrace.so in build-android/wrappers, which you can then push to your device to /data/local:<br />
<br />
<pre><br />
adb push build-android/wrappers/egltrace.so /data/local<br />
</pre><br />
<br />
Restarting Fennec will cause it to load the apitrace library and the apitrace log will be saved to /data/data/org.mozilla.fennec_username/firefox.trace<br />
<br />
You can then adb pull /data/data/org.mozilla.fennec_username/firefox.trace and analyse it on your desktop.<br />
<br />
You can also use qapitrace as a GUI to inspect your trace files. (be sure to switch qapitrace to the EGL api using the options dialog)<br />
<br />
These instructions provide a trace that does not include the Java GL code. To get traces including java code is more complicated. You need to use<br />
the patch from this bug https://bugzilla.mozilla.org/show_bug.cgi?id=749859 and this version of https://github.com/ideak/apitrace/tree/dev. Further, you'll need to build your own image/modify the current one to replace /init.rc. You also need to disable hardware acceleration of the UI (https://bug746703.bugzilla.mozilla.org/attachment.cgi?id=619009) Ask jrmuizel for more information if you want to do this.<br />
<br />
=== Profiling ===<br />
<br />
See https://wiki.mozilla.org/Mobile/Fennec/Android/Profiling.<br />
<br />
=== Debugging Java code with DDMS ===<br />
<br />
See http://developer.android.com/tools/debugging/ddms.html<br />
<br />
== Other useful tips and tricks ==<br />
<br />
=== Tweaking UI prefs ===<br />
By default, all of these prefs are set to "-1" in Fennec, meaning they take the values listed below, which are maintained in Axis.java.<br />
<br />
Fractional values are specified in 1/1000th of a value; to specify a value of 0.3, write 300.<br />
<br />
Note: You need to restart Fennec after changing these values.<br />
<br />
{|<br />
! Pref !! Default value !! Description !!<br />
|-<br />
| ui.scrolling.friction_slow || 850 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is low.||<br />
|-<br />
| ui.scrolling.friction_fast || 970 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is high.||<br />
|-<br />
| ui.scrolling.velocity_threshold || 10 || Below this velocity (in pixels per frame), the friction changes from friction_fast to friction_slow.||<br />
|-<br />
| ui.scrolling.max_event_acceleration || 12 || The maximum velocity change factor between events, per ms, in 1000ths. ||<br />
|-<br />
| ui.scrolling.overscroll_decel_rate || 40 || The rate of deceleration when the surface has overscrolled, in 1000ths. ||<br />
|-<br />
| ui.scrolling.overscroll_snap_limit || 300 || The fraction of the surface which can be overscrolled before it must snap back, in 1000ths. ||<br />
|-<br />
| ui.scrolling.min_scrollable_distance || 500 || The minimum amount of space that must be present for an axis to be considered scrollable, in 1/1000ths of pixels. ||<br />
|-<br />
| gfx.displayport.strategy || 1 || The strategy we use to determine how display ports are calculated. 0 = fixed margin, 1 = velocity bias, 2 = dynamic resolution, 3 = no margins ||<br />
|-<br />
| gfx.displayport.strategy_fm.multiplier || 1500 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of each dimension of the viewport the displayport is sized to. ||<br />
|-<br />
| gfx.displayport.strategy_fm.danger_x || 100 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the width of the viewport the horizontal danger zone is set to.<br />
<br />
<br />
Danger zone is defined as the space at the edge of the viewport at which the viewport (and hence displayport) starts being changed.<br />
|-<br />
| gfx.displayport.strategy_fm.danger_y || 200 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the height of the viewport the vertical danger zone is set to. ||<br />
|-<br />
| gfx.displayport.strategy_vb.multiplier || 1500 || When gfx.displayport.strategy = 1 (velocity bias), the 1000th of each dimension of the viewport the displayport is sized to. ||<br />
|-<br />
| gfx.displayport.strategy_vb.threshold || 32 || When gfx.displayport.strategy = 1 (velocity bias), the threshold for velocity, in pixels/frame, when multiplied by the screen DPI. ||<br />
|-<br />
| gfx.displayport.strategy_vb.reverse_buffer || 200 || When gfx.displayport.strategy = 1 (velocity bias), the fraction of the buffer (in 1000ths) to be kept in the direction opposite the direction of the scroll. ||<br />
|-<br />
|}<br />
<br />
=== Refresh the JS cache ===<br />
<br />
XUL and JavaScript files (like browser.js) are cached for fast startup. If you change one of these files in your development build, the new file might not be picked up unless you also touch <code>toolkit/xre/nsAndroidStartup.cpp</code> and rebuild libxul. (See {{bug|695145}} for details.)<br />
<br />
=== killer script ===<br />
<br />
#!/bin/sh<br />
if [ $# -ne 1 ]<br />
then<br />
echo "usage: $0 packagename.of.your.activity"<br />
echo "for example:"<br />
echo " $0 org.mozilla.fennec"<br />
exit<br />
fi<br />
<br />
p=`adb shell ps | grep $1 | awk '{print $2}'`<br />
if [ "$p" = "" ];<br />
then<br />
echo "ERROR: That doesn't seem to be a running process. Please make sure your"<br />
echo "application has been started and that you are using the correct"<br />
echo "namespace argument."<br />
exit<br />
fi<br />
<br />
adb shell run-as $1 kill $p<br />
<br />
=== .gdbinit ===<br />
<br />
This is an example .gdbinit that uses the symbols from a locally built rom and automatically attaches to gdbserver. Note that putting a ''.gdbinit'' file inside a directory will make gdb load it thus you will not pollute your regular gdb init with those configurations. <br />
<br />
set solib-search-path /home/blassey/android/system/out/target/product/passion/symbols/system/bin:/home/blassey/android/system/out/target/product/passion/symbols/system/lib/:/home/blassey/src/ndk5-m-c/objdir-droid-dbg/dist/bin<br />
set solib-absolute-prefix /home/blassey/android/system/out/target/product/passion/symbols/system/lib/<br />
target remote localhost:12345<br />
<br />
=== Connecting Eclipse to Android Build tree ===<br />
<br />
Clone scripts and templates:<br />
hg clone http://hg.mozilla.org/users/romaxa_gmail.com/eclipse_mobile<br />
cd eclipse_mobile<br />
<br />
Modify mozconfig_values file, according to your build environment<br />
add absolute path to obj-build-dir and source dir, Ex:<br />
MOZOBJDIR=/home/romaxa/mozdev/mozillahg/mozilla-birch/objdir-droid<br />
MOZSRCDIR=/home/romaxa/mozdev/mozillahg/mozilla-birch<br />
<br />
Generate project content (build tree must be fully compiled and make -C objdir package commands performed):<br />
./create_projects.pl<br />
eclipse project will be created in current folder<br />
<br />
Create new project in Eclipse<br />
* File->New->Project<br />
* Android Project<br />
* Next, Create project from existing source<br />
* Select current folder as Location, Next<br />
* Select Build Target "Android 4.1 / API 16"<br />
* Next and Finish<br />
<br />
Press Run App button in order to perform first build,<br />
On first run, some ADT plugin fnctionality removing bin/App.apk and resource.ap_)<br />
Don't know how to teach eclipse don't do that, but it breaks installable package.<br />
So in order to fix that problem<br />
after first Run App, execute in project folder<br />
./fixup_links.pl<br />
It will update *.apk and *.ap_ symlinks<br />
<br />
Press Run App button again<br />
<br />
Try to setup breakpoint in onCreate() and press Debug App button.<br />
<br />
=== Rooting Android devices ===<br />
<br />
See [[Mobile/Fennec/Android/Rooting|Rooting Android Devices]].<br />
<br />
=== Bootstrapper.xpi: Testing JS chrome code changes without rebuilding ===<br />
<br />
Avoid those nasty compile times! Use the [https://groups.google.com/forum/?fromgroups=#!topic/mozilla.dev.platforms.mobile/jmxkOBREcO0 Bootstrapper extension]!</div>Dmosehttps://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android&diff=494489Mobile/Fennec/Android2012-12-18T14:38:09Z<p>Dmose: /* Mochitests */</p>
<hr />
<div>== Building Fennec ==<br />
<br />
Below are instructions for setting up a build environment and building Fennec on Linux (Ubuntu) and Mac OS X. It is not currently possible to compile Fennec on Windows. If you have a Windows PC, see these posts for a Linux virtual machine to compile Fennec:<br />
<br />
* http://blog.lassey.us/2010/07/09/android-development-vm/<br />
* http://blog.lassey.us/2011/07/22/updated-android-development-vm/<br />
<br />
Also, the [https://wiki.mozilla.org/Mobile/Fennec/Android_OtherBuildEnvs OtherBuildEnvs page] has some notes on a few other environment variations, so take a look at that as well if you have an environment or configuration that deviates from "normal".<br />
<br />
First follow the platform-specific instructions below to set up a build environment on your machine. You can optionally also upgrade to the latest Android NDK (currently version r8c). Once you have done that, follow the steps to get the source code, set up your mozconfig, and build Fennec.<br />
<br />
=== Linux ===<br />
<br />
==== Quick Script ====<br />
<br />
Here is a quick script to get set up. It is explained in more detail below.<br />
<br />
# ensure that the "partner" repositories are enabled in /etc/apt/sources.list, or sun-java6-jdk won't be found<br />
# In Ubuntu 11.10 Java has been removed from partner, but<br />
# can be downloaded from Oracle at <br />
# http://www.oracle.com/technetwork/java/javase/downloads/index.html<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk mercurial ccache<br />
sudo apt-get build-dep firefox<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-linux-x86.tar.bz2<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz<br />
tar -xzf android-sdk_r20.0.3-linux.tgz<br />
./android-sdk-linux/tools/android update sdk -u<br />
./android-sdk-linux/tools/android update adb<br />
<br />
If you're using a 64-bit Ubuntu install, you'll need ia32-libs to allow the toolchain binaries to run.<br />
<br />
sudo apt-get install ia32-libs<br />
<br />
If you're using 64-bit Fedora install<br />
<br />
yum install glibc.i686 ncurses-libs.i686 libstdc++.i686 zlib.i686<br />
<br />
==== Explained ====<br />
<br />
This section describes in greater detail all the dependencies and requirements of getting a working build environment on Linux.<br />
<br />
===== Install Java =====<br />
<br />
First install the Sun Java jdk6, which the Android SDK depends on. If you're on Ubuntu (pre-11.10), you'll need to [https://help.ubuntu.com/community/Repositories/Ubuntu#Adding_Canonical_Partner_Repositories enable the partners repo] to get it. Java 7 should work, although occasionally breaks (java 6 is what the buildbots use, so that's the "officially supported" one).<br />
<br />
# Ubuntu pre-11.10<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk<br />
sudo update-java-alternatives -s java-6-sun<br />
<br />
# Ubuntu 11.10 and after<br />
# Download Java from Oracle - go to http://www.oracle.com/technetwork/java/javase/downloads/index.html and<br />
# download the latest version of the JDK.<br />
# These instructions assume the file is called jdk-6u35-linux-x64.bin<br />
sudo mkdir /opt/java<br />
sudo mv ~/Downloads/jdk-6u35-linux-x64.bin<br />
sudo chmod +x ./jdk-6u35-linux-x64.bin<br />
sudo ./jdk-6u35-linux-x64.bin<br />
ln -f -s /opt/java/jdk1.6.0_35/bin/* /usr/local/bin/<br />
# something like sudo update-alternatives --install /usr/local/bin/java java /opt/java/jdk1.6.0_35/bin/ 1 is<br />
# close to the distro way of registering java<br />
<br />
If you're on Ubuntu 64-bit, you'll also want to install ia32-libs at this point (things like adb won't work until you do):<br />
<br />
apt-get install -y ia32-libs<br />
<br />
===== Install Gecko Requirements =====<br />
<br />
Then install the usual stuff needed for a firefox build.<br />
<br />
sudo apt-get install mercurial ccache<br />
sudo apt-get build-dep firefox<br />
<br />
===== Install Android NDK =====<br />
<br />
Download and extract the [http://developer.android.com/sdk/ndk/ Android NDK]. NDK revs 4-8 have been tested and are known to work. The automated builders currently use version r5c.<br />
<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-linux-x86.tar.bz2<br />
<br />
===== Install Android SDK =====<br />
<br />
You should just install the latest [http://developer.android.com/sdk/ Android SDK], we set the API level in our manifest files. The sdk download will take a while, make sure you have a decent internet connection and go get coffee, or maybe lunch.<br />
<br />
You will need SDK version at least 16.<br />
<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz<br />
tar -xzf android-sdk_r20.0.3-linux.tgz<br />
./android-sdk-linux/tools/android update sdk --no-ui<br />
./android-sdk-linux/tools/android update adb<br />
<br />
You will probably want to add the SDK's "tools" and "platform-tools" directory to the PATH environment variable in your shell, so that you can run [http://developer.android.com/guide/developing/tools/adb.html adb] and other tools easily. For example, if you installed the SDK in $HOME/opt, you could add the following line to the end of your .bashrc:<br />
<br />
export PATH=$PATH:$HOME/opt/android-sdk-linux/platform-tools:$HOME/opt/android-sdk-linux/tools<br />
<br />
=== Mac OS X ===<br />
<br />
To set up a build environment on Mac OS X, you first need to install XCode and a few supplementary build tools via a package manager. To do this, follow steps 1 and 2 of the [https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions/Mac_OS_X_Prerequisites Mac OS X Build Prerequisites page]. Once you have completed steps 1 and 2, come back here and continue with the instructions below.<br />
<br />
After installing XCode make sure you also have wget installed. If wget is not a recognized command in terminal follow these steps to install it:<br />
<br />
curl -O http://ftp.gnu.org/gnu/wget/wget-1.14.tar.gz<br />
tar -xzvf wget-1.14.tar.gz<br />
cd wget-1.14<br />
./configure --with-ssl=openssl<br />
make<br />
sudo make install<br />
which wget #Should output: /usr/local/bin/wget<br />
<br />
===== Install Gecko Requirements =====<br />
<br />
Then install the usual stuff needed for a firefox build.<br />
<br />
sudo apt-get install mercurial ccache<br />
sudo apt-get build-dep firefox<br />
<br />
===== Install Android NDK =====<br />
<br />
Download and extract the [http://developer.android.com/sdk/ndk/ Android NDK]. NDK revs 4-8 have been tested and are known to work. The automated builders currently use version r5c.<br />
<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-darwin-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-darwin-x86.tar.bz2<br />
<br />
===== Install Android SDK =====<br />
<br />
You should just install the latest [http://developer.android.com/sdk/ Android SDK], we set the API level in our manifest files. The sdk download will take a while, make sure you have a decent internet connection and go get coffee, or maybe lunch.<br />
<br />
You will need SDK version at least 16.<br />
<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-macosx.zip<br />
unzip android-sdk_r20.0.3-macosx.zip<br />
./android-sdk-macosx/tools/android update sdk --no-ui<br />
./android-sdk-macosx/tools/android update adb<br />
<br />
You will probably want to add the SDK's "tools" and "platform-tools" directory to the PATH environment variable in your shell, so that you can run [http://developer.android.com/guide/developing/tools/adb.html adb] and other tools easily. For example, if you installed the SDK in $HOME, you could add the following line to the end of your .bashrc:<br />
<br />
export PATH=$PATH:$HOME/android-sdk-macosx/platform-tools:$HOME/android-sdk-macosx/tools<br />
<br />
=== Optional: Using NDK r8c ===<br />
<br />
On some systems, linking libxul can takes several minutes. Using <i>gold</i> instead of <i>ld</i> can reduce this time (from around 7 minutes to a bit more than 1 minute on my machine&#160;; YMMV, on another machine, it gets from 25 seconds to 10, or from 2 minutes to 1 minute with all system caches dropped).<br />
<br />
To use gold, the best way is to just use the r8c Android NDK. You can also build gold yourself from binutils source and replace your existing ld binaries in the NDK folder to use gold. However it's simpler to just upgrade the NDK. There are currently no known issues with using the r8c NDK, except that you also need to remove the --enable-warnings-as-errors option in your mozconfig because the gcc-4.6 that comes with r8c is stricter with respect to warnings. There is some discussion in {{bug|769099}} about how r8c is awesome stuff and should be used by default on the buildbots, but that hasn't happened yet.<br />
<br />
To upgrade your NDK, download the NDK for [http://dl.google.com/android/ndk/android-ndk-r8c-darwin-x86.tar.bz2 Mac OS X] or [http://dl.google.com/android/ndk/android-ndk-r8c-linux-x86.tar.bz2 Linux] and unpack it. Then, update your mozconfig to point to the new NDK by setting the <code>--with-android-ndk</code> and <code>--with-android-toolchain</code> options in your mozconfig.<br />
<br />
For example, assuming that on a Mac OS X platform the NDK is unpacked into $HOME/android-ndk-r8c, you would need the following two lines in your mozconfig:<br />
<br />
ac_add_options --with-android-ndk="$HOME/android-ndk-r8c"<br />
ac_add_options --with-android-toolchain="$HOME/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86"<br />
<br />
=== Getting the source ===<br />
<br />
Once you have build tools set up, you should configure Mercurial as described [https://developer.mozilla.org/en-US/docs/Installing_Mercurial#Configuration here]. (It is not required, but highly recommended if you plan on touching the code in any way). Once you have done that, grab a clone of the repository:<br />
<br />
hg clone http://hg.mozilla.org/mozilla-central/ src<br />
<br />
=== Setup Fennec mozconfig ===<br />
<br />
The mozconfig file is what tells the mozilla build scripts how your build environment is set up, and sets various build options. To build scripts will read the mozconfig file from the $MOZCONFIG environment variable, if one is set, or the .mozconfig file in your src directory, if there is one. So you could do either this:<br />
<br />
cd src<br />
vim .mozconfig # put mozconfig here<br />
<br />
or this:<br />
<br />
cd some/random/folder<br />
vim my-fennec-mozconfig # put mozconfig here<br />
export MOZCONFIG=$PWD/my-fennec-mozconfig<br />
<br />
Here is an example mozconfig file for building Fennec, assuming you have followed the instructions above and are using version r5c of the NDK.<br />
<br />
<pre><br />
# Add the correct paths here:<br />
ac_add_options --with-android-ndk="$HOME/android-ndk-r5c"<br />
ac_add_options --with-android-sdk="$HOME/android-sdk-linux/platforms/android-16"<br />
ac_add_options --with-android-version=5<br />
<br />
# android options<br />
ac_add_options --enable-application=mobile/android<br />
ac_add_options --target=arm-linux-androideabi<br />
ac_add_options --with-ccache<br />
<br />
mk_add_options MOZ_OBJDIR=./objdir-droid<br />
mk_add_options MOZ_MAKE_FLAGS="-j9 -s"<br />
</pre><br />
<br />
Remember to use $HOME instead of ~ in the mozconfig, because ~ will not get expanded to the right path! If you are building on Mac OS X you will also need to add this:<br />
<br />
ac_add_options --disable-crashreporter<br />
<br />
because the crash reporter does not build properly on Mac OS X.<br />
<br />
If you want to build for armv6 add this:<br />
<br />
ac_add_options --with-arch=armv6<br />
<br />
You can also look at [http://mxr.mozilla.org/mozilla-central/source/mobile/android/config/mozconfigs/android/nightly the mozconfig used for official nightly builds].<br />
<br />
=== Building the code ===<br />
<br />
This will build (compile+link), package into apk, and deploy to the Android device. Therefore, before you start building [http://developer.android.com/guide/developing/device.html connect your Android device and enable USB debugging]<br />
<br />
cd src<br />
make -f client.mk build_and_deploy<br />
<br />
You can also just do:<br />
<br />
make -f client.mk<br />
make -C objdir-droid package<br />
<br />
to build and package the code into an APK. The APK file can be found in your objdir-droid/dist/ folder, and will be called something like fennec-18.0a1.en-US.android-arm.apk. You can install this APK to your device manually using "adb install". The name of the app that shows up on your phone will be "Fennec $USER" (where $USER is the username under which you built the code).<br />
<br />
== Hacking ==<br />
<br />
There is a bunch of useful information hanging off the page at [[Fennec/NativeUI]]. Below is some more useful information. Please add more stuff you think is useful to these sections!<br />
<br />
=== Finding relevant code ===<br />
<br />
The Fennec-specific code can be found in the following locations in the mozilla-central source tree:<br />
<br />
mobile/android/...<br />
widget/android/...<br />
<br />
Of particular interest to most new contributors will be:<br />
<br />
mobile/android/base/GeckoApp.java # the main android activity that starts up when you open Fennec<br />
mobile/android/chrome/content/browser.js # the main JS file that controls Gecko to make it do what we want<br />
<br />
You can also use the code-search tools at https://mxr.mozilla.org/mozilla-central/ and http://dxr.mozilla.org/ to search for relevant pieces of code.<br />
<br />
=== Partial Builds: Beware the startup cache! ===<br />
<br />
Developers who frequently update .js files sometimes like to manually only re-build the module they have updated. Partial builds for updated Javascript files may not work correctly if installed with adb install -r. This section describes the issue. For instance:<br />
<br />
make -C mobile/android && make package<br />
<br />
This should result in the APK being properly updated with the updated Javascript, BUT the change may not be reflected on the device because of complications arising from the startup cache. If the startup cache from a previous run of Fennec exists on the device and contains an old version of the recently updated Javascript, Fennec will likely use the old version.<br />
<br />
The startup cache is located in the profile, so deleting the profile ensures a new startup cache:<br />
<br />
adb uninstall org.mozilla.fennec<br />
adb install dist/fennec*.apk<br />
<br />
Note that:<br />
<br />
adb install -r dist/fennec*.apk<br />
<br />
retains the profile (and startup cache) -- so that's still a problem.<br />
<br />
None of this is a problem with full builds:<br />
<br />
make -f client.mk &amp;&amp; make package <br />
adb install -r dist/fennec*.apk<br />
<br />
works just fine, because the startup cache respects the buildid: If the buildid found in an APK is different from the buildid used when the startup cache was last updated, the startup cache is automatically deleted. A full build correctly updates the buildid -- a partial build may not.<br />
<br />
A possible way (***I have not conclusively tested this***) to do a partial build, retain an old profile, and ensure the buildid is updated and the startup cache is subsequently deleted is:<br />
<br />
make export && make -C mobile/android && make -C toolkit/xre && make package<br />
adb install -r dist/fennec*.apk<br />
<br />
Note that make export is necessary to update the buildid and make -C toolkit/xre is required to generate application.ini.h, trigger a rebuild of nsAndroidStartup.cpp, and update libxul.so.<br />
<br />
=== Multilocale builds ===<br />
<br />
* Create a directory, clone mozharness, copy the config file for easy editing/usage:<br />
<br />
mkdir multilocale<br />
cd multilocale<br />
hg clone http://hg.mozilla.org/build/mozharness<br />
cp mozharness/configs/multi_locale/standalone_mozilla-central.py myconfig.py<br />
<br />
* Edit myconfig.py<br />
** currently will check out m-c into a directory named 'mozilla-central' in this directory<br />
** currently assumes your mozconfig is in this directory and named 'mozconfig'<br />
** currently assumes your mozconfig sets your objdir name to 'objdir-droid'<br />
<br />
* pull mozilla-central<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py --pull-build-source<br />
# Alternately, you can hg clone http://hg.mozilla.org/mozilla-central<br />
<br />
* Run the script, which will create a multilocale apk<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py<br />
<br />
And you're done.<br />
<br />
* If you want to recompile or re-run the script, restore your objdir to en-US first!<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py --restore-objdir<br />
<br />
Also see [http://escapewindow.dreamwidth.org/234671.html this blog post] for more information.<br />
<br />
== Testing ==<br />
==== Device Managers ====<br />
Most test suites - mochitests, reftests, xpcshell tests, and others - use a "device manager" module to communicate with the remote device. There are two device manager implementations: ADB and SUT. <br />
<br />
The ADB device manager uses the adb command from the Android SDK to communicate with the remote device. To use the ADB device manager:<br />
* ensure the adb command is in your shell's PATH<br />
* set environment variable DM_TRANS=adb<br />
* do not set environment variable TEST_DEVICE, or set TEST_DEVICE= (unless you really need it)<br />
<br />
The SUT device manager uses TCP to communicate with a remote agent, which must be installed on the device. To use the SUT device manager:<br />
* ensure TCP connectivity between the local host and the remote device: check that they are on the same network and you can ping each from the other<br />
* ensure the SUT agent is installed and started on the remote device<br />
** the SUT agent APK is built alongside Fennec; just install <objdir-droid>/build/mobile/sutagent/android/sutAgentAndroid.apk<br />
** The agent should be configured to start automatically with your phone when it boots. To start it immediately from an adb shell do: `am start -n com.mozilla.SUTAgentAndroid/.SUTAgentAndroid -a android.intent.action.MAIN` <br />
* set environment variable DM_TRANS=sut<br />
* set environment variable TEST_DEVICE=<ip address of remote device -- displayed by SUT agent><br />
<br />
==== Host Builds (MOZ_HOST_BIN) ====<br />
Android mochitests and reftests require a parallel host build -- a build for the local host (desktop) environment. An environment variable, MOZ_HOST_BIN, must be set to point to that host build. MOZ_HOST_BIN is used to run xpcshell (for instance, to provide a simple web server), so the MOZ_HOST_BIN directory must contain xpcshell and all the shared libraries required by xpcshell. You can patch together these files from other sources, but the easiest way to get these is to download a xulrunner SDK build from here: http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk/<br />
<br />
You can also build desktop Firefox with a mozconfig might be as simple as:<br />
<br />
ac_add_options --enable-application=browser<br />
mk_add_options MOZ_OBJDIR=./objdir-x86<br />
<br />
Then execute:<br />
<br />
export MOZCONFIG=mozconfig.x86 <br />
make -f client.mk<br />
MOZ_HOST_BIN=objdir-x86/dist/bin<br />
ls -l $MOZ_HOST_BIN/xpcshell<br />
<br />
On Linux, the path to that build may also need to be in your LD_LIBRARY_PATH, unless your LD_LIBRARY_PATH contains ".":<br />
<br />
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.<br />
<br />
==== Test Directory ====<br />
We currently make the assumption that the device has a mounted sdcard when running tests (see {{bug|683895}}). If you cannot mount an sdcard, or if you are trying to run xpcshell tests, run:<br />
<br />
mkdir /data/local/tests<br />
<br />
(If you are using a Nexus S, the trick to making your device mountable is to not allow USB Storage between your computer and your device. When you plug in your device to your computer, simply don't click the button to allow this on your device and you should be able to run your tests.)<br />
<br />
=== Reftests ===<br />
<br />
MOZ_HOST_BIN="<abspath-to-objdir-x86>/dist/bin/" TEST_PATH=<path> make -C <objdir-droid> reftest-remote<br />
<br />
For devices with screens too small you will see the error |can't drawWindow remote content|. You can ignore that resolution requirement by using the |ignore-window-size| options. NOTE: This may lead to false negative/positives.<br />
<br />
EXTRA_TEST_ARGS="--ignore-window-size"<br />
<br />
Example TEST_PATH:<br />
<br />
TEST_PATH=layout/reftests/reftest-sanity/reftest.list<br />
<br />
Notes:<br />
<br />
* If TEST_PATH is not specified, *all* reftests will be attempted: This usually fails/hangs and is not recommended. Specify a TEST_PATH or use the --total-chunks and --this-chunk arguments to reduce the number of tests executed.<br />
* sut recommended. Test results displayed and saved to reftest.log and reftest-remote.log.<br />
* adb works, but reports errors. Test results are not displayed but saved to reftest.log (additional diagnostics in reftest-remote.log).<br />
<br />
=== Mochitests ===<br />
<br />
MOZ_HOST_BIN="<abspath-to-objdir-x86>/dist/bin/" TEST_PATH=<path> \ <br />
make -C <objdir-droid> mochitest-remote<br />
<br />
Note that as of this writing (September 2011) many mochitests will not complete successfully. Try setting your TEST_PATH to "dom/tests/mochitest/dom-level1-core" or "content/smil/test" if you want to restrict yourself to a subset of tests that are known to pass (note: currently failing when setting TEST_PATH to a directory rather than an individual HTML file, filed as {{bug|822652}})<br />
<br />
TEST_PATH can be:<br />
content/smil/test<br />
content/xml/document/test<br />
content/xslt/tests/mochitest<br />
dom/src/json/test<br />
dom/src/jsurl/test<br />
dom/tests/mochitest/dom-level0<br />
dom/tests/mochitest/dom-level1-core<br />
dom/tests/mochitest/dom-level2-core<br />
dom/tests/mochitest/ajax/mochikit<br />
dom/tests/mochitest/ajax/scriptaculous<br />
dom/tests/mochitest/ajax/jquery<br />
dom/tests/mochitest/dom-level2-html<br />
Harness_sanity<br />
editor/composer/test<br />
intl/uconv/tests<br />
dom/tests/mochitest/orientation<br />
dom/tests/mochitest/storageevent<br />
layout/xul/test<br />
modules/libjar/test/mochitest<br />
layout/inspector/tests <br />
toolkit/xre/test<br />
toolkit/components/microformats/tests<br />
MochiKit-1.4.2/tests<br />
parser/htmlparser/tests/mochitest<br />
js<br />
<br />
Notes:<br />
* A rooted device is required to run the unit tests using the SUT Agent. Use ADB for unrooted devices.<br />
* Whichever transport agent you using, running mochitests unrooted seems to still have some problems. For better reliability, rooting your device before using them is recommended.<br />
<br />
=== Robotium ===<br />
<br />
The Robotium / Robocop test suite verifies UI behavior in native Fennec. <br />
<br />
Build and install native Fennec, then execute the mochitest-robotium make target.<br />
<br />
make -f client.mk<br />
cd <objdir><br />
make package<br />
adb install -r dist/fennec-*.apk<br />
MOZ_HOST_BIN="<abspath-to-objdir-x86>/dist/bin/" make mochitest-robotium<br />
<br />
More info at https://wiki.mozilla.org/Auto-tools/Projects/Robocop.<br />
<br />
Notes:<br />
* A rooted device is NOT required.<br />
* ADB device manager is used by default; SUT is also supported.<br />
* MOZ_HOST_BIN is used to launch xpcshell on the desktop to provide a web server.<br />
* Use TEST_PATH=<test-name> to run just one test at a time.<br />
* /mnt/sdcard must exist and be writable.<br />
<br />
=== xpcshell ===<br />
<br />
This is still slightly broken, work is ongoing in {{Bug|799863}} to repair things.<br />
<br />
To prepare your device for xpcshell tests:<br />
<br />
adb shell mkdir /data/local/tests<br />
<br />
Also be sure you have successfully built Fennec and generated an APK, as described above.<br />
<br />
To run all tests referenced by the master xpcshell manifest:<br />
<br />
cd <objdir-droid><br />
make xpcshell-tests-remote<br />
<br />
To run a subset of tests in the specified directory:<br />
<br />
make -C <test-directory> xpcshell-tests-remote<br />
<br />
Once either of the xpcshell-tests-remote commands has completed successfully, all test files have been copied to device, and it is then possible to run a single test quickly, without setup:<br />
<br />
make SOLO_FILE=<test-file> -C <test-directory> check-one-remote<br />
<br />
You can also skip setup for a larger test run (be careful / be sure you know that's what you want!):<br />
<br />
export EXTRA_TEST_ARGS="--noSetup"<br />
make -C <test-directory> xpcshell-tests-remote<br />
<br />
Notes:<br />
* A rooted device IS required.<br />
* ADB device manager is used by default. SUT is NOT supported at this time -- it does not allow for a /data/local test root. See {{bug|810347}}.<br />
* The test root directory cannot be on /sdcard -- it must be /data/local so that +x permissions can be set on xpcshell.<br />
* Setup can take a long time! It goes much faster if unzip is available on the remote device; if your device does not have unzip, try installing busybox.<br />
<br />
=== browser-chrome ===<br />
<br />
Before you run tests, you will need to make sure you have packaged the tests in your object dir:<br />
<br />
make -C <objdir-droid> package-tests<br />
<br />
There is currently no special make command to build and run browser-chrome tests, but it should be possible to make them run by calling:<br />
<br />
cd <objdir-droid>/_tests/testing/mochitest<br />
python runtestsremote.py --dm_trans=adb --test-path=mobile --browser-chrome --deviceIP=1.2.3.4 <br />
--app=org.mozilla.fennec_$USER --xre-path=<objdir_x86>/dist/bin/<br />
<br />
=== talos ===<br />
<br />
*NOTE: this requires python 2.5 or greater (tested up to 2.7)<br />
<br />
See https://wiki.mozilla.org/Buildbot/Talos<br />
<br />
This is 100% out of band from mozilla-central (same for desktop also).<br />
<br />
hg clone http://hg.mozilla.org/build/talos talos<br />
cd talos<br />
python INSTALL.py<br />
. bin/activate<br />
cd talos<br />
<br />
Run these commands to check out the talos dependencies (assuming you are already in the "talos/talos" directory):<br />
<br />
cd page_load_test<br />
wget http://people.mozilla.org/~jmaher/mobile_tp4.zip<br />
unzip mobile_tp4.zip<br />
<br />
Configure a talos profile. You can do this via adb or [http://people.mozilla.com/~bmoss/SUTAgent/ SUTAgent] - if you want to use adb make sure you have rooted your device such that "adb shell" goes directly into a root shell. If you want to use adb to communicate with the device remotely, do something like this:<br />
<br />
talos -v -e org.mozilla.fennec \<br />
--develop \<br />
--activeTests tprovider \<br />
--output trobo.yml \<br />
--remotePort -1 \<br />
--remoteDevice 1.2.3.4 \<br />
[--fennecIDs <abs-path-to-objdir>/dist/fennec_ids.txt]<br />
<br />
If you want to use [http://people.mozilla.com/~bmoss/SUTAgent/ SUTAgent] to communicate with the device, do something like this:<br />
<br />
talos -v -e org.mozilla.fennec \<br />
--develop \<br />
--activeTests tsvg \<br />
--results_url file://${PWD}/tsvg.txt \<br />
--noChrome \<br />
--remoteDevice <ip of your sutagent> \<br />
[--fennecIDs <abs-path-to-objdir>/dist/fennec_ids.txt]<br />
<br />
SUTAgent will not be able to read the application.ini on the device, so you will need to copy it. We highly recommend pulling the application.ini from the .apk and copying it to the talos/talos/remoteapp.ini file.<br />
<br />
For Robocop based tests (tcheck, tcheck2, tcheck3, tprovider, etc...), we need to use the --fennecIDs flag to pass in the generated fennec_ids.txt file from the build you are testing. This file is generated during build time and has to match the fennec.apk and robocop.apk file. When this flag is used, we copy fennec_ids.txt and robotium.config (generated during configuration time) to the device and use those to run Robocop. If you are running ts, tp4, tsvg, or other traditional talos tests, there is no need for the --fennecIDs flag.<br />
<br />
Unless two applications are signed with the same key they cannot read each others' /data/data directories, so SUTAgent cannot read org.mozilla.fennec's data directory.<br />
You can extract it from the fennec .apk or get it from adb from e.g. /data/data/org.mozilla.fennec/application.ini<br />
<br />
shell@android:/ $ su<br />
shell@android:/ # cat /data/data/org.mozilla.fennec/application.ini<br />
[App]<br />
Vendor=Mozilla<br />
Name=Fennec<br />
Version=10.0a1<br />
BuildID=20111031031100<br />
SourceRepository=http://hg.mozilla.org/mozilla-central<br />
SourceStamp=04b4ea333800<br />
ID={a23983c0-fd0e-11dc-95ff-0800200c9a66}<br />
<br />
[Gecko]<br />
MinVersion=1.9.2b5pre<br />
MaxVersion=10.0a1<br />
<br />
[XRE]<br />
EnableExtensionManager=1<br />
<br />
[Crash Reporter]<br />
Enabled=1<br />
ServerURL=https://crash-reports.mozilla.com/submit<br />
<br />
'''Note''': As of this writing (Sept 27, 2011), the tgfx pageset does not currently work (it isn't run on the desktop either). Don't try it. :)<br />
<br />
'''Note''': When running robocop-based talos tests (tcheck, etc), be aware that some robocop-required files are not updated by Talos. For example, robocop.apk is not installed. Your best bet is to run mochitest-robotium first to make sure everything is up to date, or manually install robocop.apk from the dist folder.<br />
<br />
Aside: For a quick-and-dirty hacky way to run robocop-talos tests locally, see [[Mobile/Fennec/Android/LocalRoboTalos]]<br />
<br />
=== S1/S2 Automation ===<br />
These tests start Fennec with a URL and measure the time to throbber start, time to throbber stop, and drawing end times. <br />
<br />
S1/S2 graphs can be viewed at: http://mrcote.info/phonedash/#/<br />
<br />
Manual run instructions can be found at: https://etherpad.mozilla.org/fennec-perf-ts-take2<br />
<br />
See also: https://wiki.mozilla.org/Mobile/Performance/S1S2-Tests<br />
<br />
=== Eideticker ===<br />
Eideticker measures perceived Firefox performance by video capturing automated browser interactions.<br />
<br />
Eideticker graphs can be viewed at: http://wrla.ch/eideticker/dashboard/<br />
<br />
See also: http://wrla.ch/blog/2011/11/measuring-what-the-user-sees/ and http://wrla.ch/blog/2012/03/announcing-the-eideticker-mobile-performance-dashboard/.<br />
<br />
=== Trouble-shooting testing problems ===<br />
<br />
* Does your mozconfig contain "ac_add_options --disable-tests"?<br />
** If so, you will see something like:<br />
<pre><br />
make: *** No rule to make target <your-test-target>. Stop.<br />
</pre><br />
* Is adb in your $PATH?<br />
* Is your device connected? Does it appear in the output from "adb devices"?<br />
* Can you run adb shell?<br />
* If running xpcshell, did you create /data/local/tests?<br />
* If running "make check-one-remote", did you first setup the device with "make xpcshell-tests-remote"?<br />
<br />
== Debugging ==<br />
<br />
=== Using logcat ===<br />
<br />
[http://developer.android.com/guide/developing/tools/logcat.html logcat] is a tool that is going to show you some logs prompted by the device. It might be a good help if you don't want to or can't run gdb. You can use it by running this command: <br />
<br />
adb logcat -v time<br />
<br />
You can make things appear in logcat using printf_stderr. With debug builds, NS_WARNING, NS_ERROR and NS_ASSERTIONS will show up in logcat. If you're trying to debug something, you may wish to pipe the logcat output through grep to filter out irrelevant things (most Fennec-related output will be viewable by "adb logcat | grep Gecko"), but remember that when attaching log output to a bug you should include unfiltered output as there may be relevant log entries under other tags.<br />
<br />
==== Using aLogCat ====<br />
<br />
<b>Note:</b> aLogCat (and other logcat apps) do not support Jelly Bean (4.1) and above. It seems like the only way to get these apps to work on those versions is to root the device, which, although fulfilling, is probably more work than just using <code>adb logcat</code>.<br />
<br />
If you don't have the Android SDK installed, you can still extract logs using an application called aLogCat. Install it from the Android Market. Use it to capture logs and attach the logs to bugs.<br />
<br />
https://market.android.com/details?id=org.jtb.alogcat&hl=en<br />
<br />
Once you have alogcat installed, just use Fennec as you would normally. Upon encountering a bug or issue, start the aLogcat app (as soon as possible after seeing the Fennec issue) and select "Share" or "Save" from the menu to send it via email or save it to the SD card. The log can then be attached to a bug or sent to a developer. As with adb logcat, it is better to have a log with timestamps than without timestamps. To enable timestamps in the log, select "Preferences" from the aLogcat menu, and change the "Format?" option to "Time".<br />
<br />
If you need to, you can search for some kinds of Fennec-related output by using the "Filter" menu item and entering "Gecko". However, when submitting logs for bug reports, please make sure you clear the filter and include all of the available log data.<br />
<br />
==== JavaScript dump() ====<br />
<br />
To use the dump() function in JavaScript to write to the log:<br />
<br />
# Go to about:config and set browser.dom.window.dump.enabled to "true"<br />
# Run the following ADB commands:<br />
<br />
adb shell stop<br />
adb shell setprop log.redirect-stdio true<br />
adb shell start<br />
<br />
=== Using nVidia GDB ===<br />
<br />
Nvidia's gdb is better than most other gdbs: http://developer.download.nvidia.com/tegra/files/tegra-gdb-20100902.zip .<br />
Even so, you probably want to use JimDB instead of Nvidia's gdb ...<br />
<br />
=== Using JimDB ===<br />
* jchen has been working on a better Android gdb ('jimdb'). [https://github.com/darchons/android-gdb source], and [[Mobile/Fennec/Android/GDB|build instructions]]. For best results, rebuild everything.<br />
* [http://www.jnchen.com/_media/projects/mozilla/moz-gdb.tar.bz2 Prebuilt binaries] are available but problems with them have been reported.<br />
* [http://people.mozilla.com/~bgirard/moz-gdb-darwin-prebuilt-2012-10.tar.gz October 2012 Darwin prebuilt]<br />
** The link to the prebuilt binaries seems broken, as of March 30 2012 (bjacob).<br />
* JimDB:<br />
** has most fixes from NDK gdb<br />
** integrates Android libthread_db (fixed dougt's problem debugging threads)<br />
** has Python scripting support<br />
** [https://github.com/darchons/android-gdbutils couple of existing Python scripts] (or if using prebuilt binaries above, just run 'git pull' under the 'utils' directory)<br />
*** feninit is a tool to initialize the GDB environment (support for multiple devices, multiple object directories; launches Fennec, pulls libraries, sets paths, and attaches gdbserver automatically)<br />
*** tracebt is a WIP stack unwinder that traces instructions to find stack frames<br />
*** idea for another tool to parse and integrate logcat into gdb<br />
*** other ideas welcome!<br />
* see [[Mobile/Fennec/Android/GDB]] for installation instructions<br />
<br />
Once JimDB is installed, just run its gdb executable. This is will take care of everything (it will start gdbserver on the device, start Fennec, and start gdb on your computer):<br />
<br />
./moz-gdb/bin/gdb<br />
<br />
=== Using Debug Intent ===<br />
<br />
'''Note: this is not useful with JimDB. If you want to use JimDB, just start it.'''<br />
<br />
In order to attach before things get running, launch with: <br />
<br />
adb shell am start -a org.mozilla.gecko.DEBUG -n org.mozilla.fennec_foobar/.App<br />
<br />
(Replace foobar by your username)<br />
<br />
and just click launch once gdb is attached. If you need to debug a crash that happens before XRE_Main is called, the patch on {{bug|572247}} may be useful. <br />
<br />
this script [http://dump.lassey.us/debug.sh] will attach gdbserver for you<br />
<br />
=== Getting dalvik java stack dumps using gdb ===<br />
<br />
(gdb) call handleSigQuit()<br />
<br />
this will dump a stack trace to gDvm.stackTraceFile which defaults to "/data/anr/traces.txt"<br />
<br />
Note: this will only work if you have symbols for dalvik. (It may be possible to get the address for handleSigQuit by reading<br />
the symbol table using sigaction.)<br />
<br />
Note: deleting /data/anr/traces.txt will cause this method to stop working. You can fix it by recreating the file with $ echo "" > traces.txt<br />
<br />
=== Debugging with jdb ===<br />
<br />
Inspired by<br />
http://asantoso.wordpress.com/2009/09/26/using-jdb-with-adb-to-debugging-of-android-app-on-a-real-device/<br />
<br />
After staring fennec with jimdb the following seems to work at least a little.<br />
<br />
$ adb jdwp # lists the pids of processes hosting jdwp<br />
5543<br />
$ adb -d forward tcp:8686 jdwp:5543<br />
$ jdb -J-Duser.home=. -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8686 -sourcepath ~/mozilla/maple/mobile/android/base/<br />
<br />
You can also use eclipse for debugging in a similar way by setting up for debugging "Remote Java application".<br />
<br />
This doesn't seem to work for me in Ubuntu 12.04 anymore.<br />
<br />
=== Debugging with eclipse ===<br />
<br />
You need to find the PID of your fennec process. Forward it to a local TCP socket as in "Debugging with jdb."<br />
<br />
In Eclipse switch to the debug perspective. Go to Run > Debug configurations... Remote Java Application. Change the port to the TCP port you specified in your adb command. Under Source, navigate to your checkout, then into mobile/android.<br />
<br />
Eclipse looks for source code in a specific location. You need to create the directory hierarchy:<br />
<code><br />
mobile<br />
/android<br />
/org<br />
mozilla/<br />
gecko -> ../../base</code><br />
<br />
That is, in mozilla-central/mobile/android, create org/mozilla, and put the symlink gecko pointing to mozilla-central/mobile/android/base.<br />
<br />
You may also want to add more debugging information and can do that like this:<br />
diff --git a/config/android-common.mk b/config/android-common.mk<br />
index 4591239..a47726a 100644<br />
--- a/config/android-common.mk<br />
+++ b/config/android-common.mk<br />
@@ -70,6 +70,6 @@ JAVAC_FLAGS = \<br />
-classpath $(JAVA_CLASSPATH) \<br />
-bootclasspath $(JAVA_BOOTCLASSPATH) \<br />
-encoding UTF8 \<br />
- -g:source,lines \<br />
+ -g:source,lines,vars \<br />
-Werror \<br />
$(NULL)<br />
<br />
=== Arguments and Environment Variables ===<br />
<br />
If you need to set an environment variable at run time, append '''--es env# VAR=VAL''' to your activity manager command where # is the ordered number of variables for example: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 VAR=val --es env1 FOO=bar<br />
<br />
If you need to pass arguments at run time, append '''--es args "<your-args>"''' to your activity manager command. For example, to launch with a specific profile: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es args "--profile /mnt/sdcard/myprofile"<br />
<br />
To launch with a specific URL, use the am -d option to set the intent's data URI:<br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App -d 'http://www.mozilla.org'<br />
<br />
=== PR Logging ===<br />
<br />
You can use the env vars as described above to enable NSPR logging:<br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 NSPR_LOG_MODULES=all:5 --es env1 NSPR_LOG_FILE=/mnt/sdcard/log.txt<br />
<br />
If no file is specified, logging is directed to the android logs: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 NSPR_LOG_MODULES=all:5<br />
<br />
Look for lines marked "PRLog" in the adb logcat output.<br />
<br />
=== debugging without rooting ===<br />
<br />
with Froyo you can debug without rooting your phone. Instructions are below. See also [[Mobile/Fennec/Android/GDBNoRoot|Fennec/Android/GDBNoRoot]] for another guide on how to do this.<br> <br />
<br />
First thing, to make this work with the nvidia gdb (which I found more reliable than the android r3 gdb) you need to modify install.sh and debug.sh. <br />
<br />
first, change the location where install.sh copies gdbserver to somewhere writable by a non-root process. I used /data/local. Be sure to update that both in the push command and the chmod command. <br />
<br />
second, update debug.sh with the new location of gdbserver. <br />
<br />
finally, you'll need to add run-as $2 to the adb shell command that launches gdbserver. In the end you should have: install.sh: <br />
<br />
#!/bin/sh<br />
mkdir lib<br />
adb push prebuilt/gdbserver /data/local<br />
adb shell chmod 755 /data/local/gdbserver<br />
for file in $(adb shell ls /system/lib | tr "\n" " " | tr "\r" " "); do<br />
adb pull /system/lib/$file lib<br />
done<br />
adb pull /system/bin/app_process lib <br />
<br />
The above will miss some vendor drivers, you can use busybox to find all shared libraries<br />
<br />
for file in $(adb shell /data/local/busybox find / -name "*.so" | tr "\n" " " | tr "\r" " "); do adb pull /$file lib_unlock_nexus/; done<br />
<br />
debug.sh: <br />
<br />
#!/bin/sh<br />
if [ $# -ne 2 ]<br />
then<br />
echo "usage: $0 /path/to/your/library.so packagename.of.your.activity"<br />
echo "for example:"<br />
echo " $0 /code/mydemo/libs/armeabi/libmydemo.so com.nvidia.devtech.mydemo"<br />
exit<br />
fi<br />
<br />
if [&nbsp;! -f $1 ]<br />
then<br />
echo "ERROR: That library file doesn't exist"<br />
exit<br />
fi<br />
<br />
cp $1 lib<br />
<br />
p=`adb shell ps | grep $2 | awk '{print $2}'`<br />
if [ "$p" = "" ];<br />
then<br />
echo "ERROR: That doesn't seem to be a running process. Please make sure your"<br />
echo "application has been started and that you are using the correct"<br />
echo "namespace argument."<br />
exit<br />
fi<br />
<br />
adb forward tcp:12345 tcp:12345<br />
adb shell run-as $2 /data/local/gdbserver --attach&nbsp;:12345 $p<br />
<br />
=== Attaching GDB ===<br />
Assuming you have the nvidia gdb at the top of your home directory and the app_process binary in the current working directory.<br />
~/nvidia-gdb/prebuilt/linux-x86/arm-eabi-gdb ./app_process<br />
<br />
=== Reading back the framebuffer ===<br />
If you need to verify what is in the back buffer at a particular time, you can cleverly call functions from gdb to allocate memory, read back, and write that to disk.<br />
<br />
You need to know the size of your framebuffer a priori; in this case, it's 480x699.<br />
<br />
You also need to know what the GL enum values are, because unless you compile with -ggdb, you don't have #defines available to you in the debugger. Very helpful information: GL_RGBA = 0x1908, GL_UNSIGNED_BYTE = 0x1401. The rest you can find in gfx/gl/GLDefs.h.<br />
<br />
You '''should''' be able to call glReadPixels directly, but in my experience that causes Fennec to crash. However, if you have a GLContext* lying around, as you often do, you can work around that problem.<br />
<br />
<pre>(gdb) set $m = (int*)malloc(480*699*4)<br />
(gdb) call aManager->mGLContext.mRawPtr->fReadPixels(0, 0, 480, 699, 0x1908, 0x1401, (void*)$m)<br />
(gdb) set $f = fopen("/sdcard/outputfile", "wb+")<br />
(gdb) call fwrite($m, 1, 480*699*4, $f)<br />
$7 = 1342080<br />
(gdb) call fclose($f)<br />
$8 = 0</pre><br />
<br />
Now there is a file called /sdcard/outputfile that you can adb pull. But since it's just raw RGBA values, you need to be able to wrap that in PNG headers to display it. [https://github.com/jrmuizel/minpng/blob/master/minpng.h Jeff Muizelaar wrote a header called minpng.h that you can use to do so.]<br />
<br />
Get Jeff's minpng.h, and put it in a directory along with a driver c program:<br />
<br />
<pre>#include "minpng.h"<br />
<br />
int main(int argc, char* argv[])<br />
{<br />
FILE* f = fopen(argv[1], "rb");<br />
int w = atoi(argv[2]);<br />
int h = atoi(argv[3]);<br />
char* d = (char*) malloc(w * h * 4);<br />
fread(d, w * h * 4, 1, f);<br />
fclose(f);<br />
write_png(argv[4], d, w, h);<br />
}</pre><br />
<br />
Compile and run:<br />
<pre>$ gcc -o minpng minpng.c<br />
$ ./minpng outputfile 480 699 output.png<br />
</pre><br />
=== Using Rendertrace (Maple) ===<br />
<br />
Rendertrace is a utility that will dump layer position and timing information (such as drawing, upload) to the console. This information can pasted into the rendertrace web front end to visualize the layer position and event timeline. This will let you understand where you're gecko is spending its time and why were checkerboarding.<br />
<br />
To enable go in 'gfx/layers/RenderTrace.h' and uncomment '#define MOZ_RENDERTRACE'. Rebuild and run 'adb logcat | grep RENDERTRACE', paste the result in http://people.mozilla.org/~bgirard/rendertrace.html and hit 'reload'. For details talk to BenWa.<br />
<br />
=== Using apitrace ===<br />
<br />
Apitrace is a tool for tracing GL/EGL calls for debugging purposes. It basically uses an interim shared library called libapitrace that contains shadow gl* and egl* functions, which then get logged and then passed through to the real driver.<br />
<br />
<br />
Use apitrace from https://github.com/apitrace/apitrace to build for desktop and android.<br />
<br />
<pre><br />
apt-get install libegl1-mesa-dev libgles1-mesa-dev libgles2-mesa-dev libqt4-dev cmake<br />
git clone https://github.com/gw280/apitrace.git<br />
cd apitrace<br />
<br />
# Build for Android<br />
export ANDROID_NDK=/path/to/your/ndk<br />
cmake -DCMAKE_TOOLCHAIN_FILE=android/android.toolchain.cmake -DANDROID_API_LEVEL=9 -Bbuild-android -H.<br />
make -C build-android -j8<br />
<br />
# Build for desktop<br />
cmake -H. -Bbuild<br />
make -C build -j8<br />
<br />
export EGL_SOFTWARE=true<br />
./build/eglretrace -v /path/to/your/apitrace_log.trace<br />
</pre><br />
<br />
The Android build will create egltrace.so in build-android/wrappers, which you can then push to your device to /data/local:<br />
<br />
<pre><br />
adb push build-android/wrappers/egltrace.so /data/local<br />
</pre><br />
<br />
Restarting Fennec will cause it to load the apitrace library and the apitrace log will be saved to /data/data/org.mozilla.fennec_username/firefox.trace<br />
<br />
You can then adb pull /data/data/org.mozilla.fennec_username/firefox.trace and analyse it on your desktop.<br />
<br />
You can also use qapitrace as a GUI to inspect your trace files. (be sure to switch qapitrace to the EGL api using the options dialog)<br />
<br />
These instructions provide a trace that does not include the Java GL code. To get traces including java code is more complicated. You need to use<br />
the patch from this bug https://bugzilla.mozilla.org/show_bug.cgi?id=749859 and this version of https://github.com/ideak/apitrace/tree/dev. Further, you'll need to build your own image/modify the current one to replace /init.rc. You also need to disable hardware acceleration of the UI (https://bug746703.bugzilla.mozilla.org/attachment.cgi?id=619009) Ask jrmuizel for more information if you want to do this.<br />
<br />
=== Profiling ===<br />
<br />
See https://wiki.mozilla.org/Mobile/Fennec/Android/Profiling.<br />
<br />
=== Debugging Java code with DDMS ===<br />
<br />
See http://developer.android.com/tools/debugging/ddms.html<br />
<br />
== Other useful tips and tricks ==<br />
<br />
=== Tweaking UI prefs ===<br />
By default, all of these prefs are set to "-1" in Fennec, meaning they take the values listed below, which are maintained in Axis.java.<br />
<br />
Fractional values are specified in 1/1000th of a value; to specify a value of 0.3, write 300.<br />
<br />
Note: You need to restart Fennec after changing these values.<br />
<br />
{|<br />
! Pref !! Default value !! Description !!<br />
|-<br />
| ui.scrolling.friction_slow || 850 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is low.||<br />
|-<br />
| ui.scrolling.friction_fast || 970 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is high.||<br />
|-<br />
| ui.scrolling.velocity_threshold || 10 || Below this velocity (in pixels per frame), the friction changes from friction_fast to friction_slow.||<br />
|-<br />
| ui.scrolling.max_event_acceleration || 12 || The maximum velocity change factor between events, per ms, in 1000ths. ||<br />
|-<br />
| ui.scrolling.overscroll_decel_rate || 40 || The rate of deceleration when the surface has overscrolled, in 1000ths. ||<br />
|-<br />
| ui.scrolling.overscroll_snap_limit || 300 || The fraction of the surface which can be overscrolled before it must snap back, in 1000ths. ||<br />
|-<br />
| ui.scrolling.min_scrollable_distance || 500 || The minimum amount of space that must be present for an axis to be considered scrollable, in 1/1000ths of pixels. ||<br />
|-<br />
| gfx.displayport.strategy || 1 || The strategy we use to determine how display ports are calculated. 0 = fixed margin, 1 = velocity bias, 2 = dynamic resolution, 3 = no margins ||<br />
|-<br />
| gfx.displayport.strategy_fm.multiplier || 1500 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of each dimension of the viewport the displayport is sized to. ||<br />
|-<br />
| gfx.displayport.strategy_fm.danger_x || 100 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the width of the viewport the horizontal danger zone is set to.<br />
<br />
<br />
Danger zone is defined as the space at the edge of the viewport at which the viewport (and hence displayport) starts being changed.<br />
|-<br />
| gfx.displayport.strategy_fm.danger_y || 200 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the height of the viewport the vertical danger zone is set to. ||<br />
|-<br />
| gfx.displayport.strategy_vb.multiplier || 1500 || When gfx.displayport.strategy = 1 (velocity bias), the 1000th of each dimension of the viewport the displayport is sized to. ||<br />
|-<br />
| gfx.displayport.strategy_vb.threshold || 32 || When gfx.displayport.strategy = 1 (velocity bias), the threshold for velocity, in pixels/frame, when multiplied by the screen DPI. ||<br />
|-<br />
| gfx.displayport.strategy_vb.reverse_buffer || 200 || When gfx.displayport.strategy = 1 (velocity bias), the fraction of the buffer (in 1000ths) to be kept in the direction opposite the direction of the scroll. ||<br />
|-<br />
|}<br />
<br />
=== Refresh the JS cache ===<br />
<br />
XUL and JavaScript files (like browser.js) are cached for fast startup. If you change one of these files in your development build, the new file might not be picked up unless you also touch <code>toolkit/xre/nsAndroidStartup.cpp</code> and rebuild libxul. (See {{bug|695145}} for details.)<br />
<br />
=== killer script ===<br />
<br />
#!/bin/sh<br />
if [ $# -ne 1 ]<br />
then<br />
echo "usage: $0 packagename.of.your.activity"<br />
echo "for example:"<br />
echo " $0 org.mozilla.fennec"<br />
exit<br />
fi<br />
<br />
p=`adb shell ps | grep $1 | awk '{print $2}'`<br />
if [ "$p" = "" ];<br />
then<br />
echo "ERROR: That doesn't seem to be a running process. Please make sure your"<br />
echo "application has been started and that you are using the correct"<br />
echo "namespace argument."<br />
exit<br />
fi<br />
<br />
adb shell run-as $1 kill $p<br />
<br />
=== .gdbinit ===<br />
<br />
This is an example .gdbinit that uses the symbols from a locally built rom and automatically attaches to gdbserver. Note that putting a ''.gdbinit'' file inside a directory will make gdb load it thus you will not pollute your regular gdb init with those configurations. <br />
<br />
set solib-search-path /home/blassey/android/system/out/target/product/passion/symbols/system/bin:/home/blassey/android/system/out/target/product/passion/symbols/system/lib/:/home/blassey/src/ndk5-m-c/objdir-droid-dbg/dist/bin<br />
set solib-absolute-prefix /home/blassey/android/system/out/target/product/passion/symbols/system/lib/<br />
target remote localhost:12345<br />
<br />
=== Connecting Eclipse to Android Build tree ===<br />
<br />
Clone scripts and templates:<br />
hg clone http://hg.mozilla.org/users/romaxa_gmail.com/eclipse_mobile<br />
cd eclipse_mobile<br />
<br />
Modify mozconfig_values file, according to your build environment<br />
add absolute path to obj-build-dir and source dir, Ex:<br />
MOZOBJDIR=/home/romaxa/mozdev/mozillahg/mozilla-birch/objdir-droid<br />
MOZSRCDIR=/home/romaxa/mozdev/mozillahg/mozilla-birch<br />
<br />
Generate project content (build tree must be fully compiled and make -C objdir package commands performed):<br />
./create_projects.pl<br />
eclipse project will be created in current folder<br />
<br />
Create new project in Eclipse<br />
* File->New->Project<br />
* Android Project<br />
* Next, Create project from existing source<br />
* Select current folder as Location, Next<br />
* Select Build Target "Android 4.1 / API 16"<br />
* Next and Finish<br />
<br />
Press Run App button in order to perform first build,<br />
On first run, some ADT plugin fnctionality removing bin/App.apk and resource.ap_)<br />
Don't know how to teach eclipse don't do that, but it breaks installable package.<br />
So in order to fix that problem<br />
after first Run App, execute in project folder<br />
./fixup_links.pl<br />
It will update *.apk and *.ap_ symlinks<br />
<br />
Press Run App button again<br />
<br />
Try to setup breakpoint in onCreate() and press Debug App button.<br />
<br />
=== Rooting Android devices ===<br />
<br />
See [[Mobile/Fennec/Android/Rooting|Rooting Android Devices]].<br />
<br />
=== Bootstrapper.xpi: Testing JS chrome code changes without rebuilding ===<br />
<br />
Avoid those nasty compile times! Use the [https://groups.google.com/forum/?fromgroups=#!topic/mozilla.dev.platforms.mobile/jmxkOBREcO0 Bootstrapper extension]!</div>Dmosehttps://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android&diff=494458Mobile/Fennec/Android2012-12-18T05:55:49Z<p>Dmose: /* Mochitests */</p>
<hr />
<div>== Building Fennec ==<br />
<br />
Below are instructions for setting up a build environment and building Fennec on Linux (Ubuntu) and Mac OS X. It is not currently possible to compile Fennec on Windows. If you have a Windows PC, see these posts for a Linux virtual machine to compile Fennec:<br />
<br />
* http://blog.lassey.us/2010/07/09/android-development-vm/<br />
* http://blog.lassey.us/2011/07/22/updated-android-development-vm/<br />
<br />
Also, the [https://wiki.mozilla.org/Mobile/Fennec/Android_OtherBuildEnvs OtherBuildEnvs page] has some notes on a few other environment variations, so take a look at that as well if you have an environment or configuration that deviates from "normal".<br />
<br />
First follow the platform-specific instructions below to set up a build environment on your machine. You can optionally also upgrade to the latest Android NDK (currently version r8c). Once you have done that, follow the steps to get the source code, set up your mozconfig, and build Fennec.<br />
<br />
=== Linux ===<br />
<br />
==== Quick Script ====<br />
<br />
Here is a quick script to get set up. It is explained in more detail below.<br />
<br />
# ensure that the "partner" repositories are enabled in /etc/apt/sources.list, or sun-java6-jdk won't be found<br />
# In Ubuntu 11.10 Java has been removed from partner, but<br />
# can be downloaded from Oracle at <br />
# http://www.oracle.com/technetwork/java/javase/downloads/index.html<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk mercurial ccache<br />
sudo apt-get build-dep firefox<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-linux-x86.tar.bz2<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz<br />
tar -xzf android-sdk_r20.0.3-linux.tgz<br />
./android-sdk-linux/tools/android update sdk -u<br />
./android-sdk-linux/tools/android update adb<br />
<br />
If you're using a 64-bit Ubuntu install, you'll need ia32-libs to allow the toolchain binaries to run.<br />
<br />
sudo apt-get install ia32-libs<br />
<br />
If you're using 64-bit Fedora install<br />
<br />
yum install glibc.i686 ncurses-libs.i686 libstdc++.i686 zlib.i686<br />
<br />
==== Explained ====<br />
<br />
This section describes in greater detail all the dependencies and requirements of getting a working build environment on Linux.<br />
<br />
===== Install Java =====<br />
<br />
First install the Sun Java jdk6, which the Android SDK depends on. If you're on Ubuntu (pre-11.10), you'll need to [https://help.ubuntu.com/community/Repositories/Ubuntu#Adding_Canonical_Partner_Repositories enable the partners repo] to get it. Java 7 should work, although occasionally breaks (java 6 is what the buildbots use, so that's the "officially supported" one).<br />
<br />
# Ubuntu pre-11.10<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk<br />
sudo update-java-alternatives -s java-6-sun<br />
<br />
# Ubuntu 11.10 and after<br />
# Download Java from Oracle - go to http://www.oracle.com/technetwork/java/javase/downloads/index.html and<br />
# download the latest version of the JDK.<br />
# These instructions assume the file is called jdk-6u35-linux-x64.bin<br />
sudo mkdir /opt/java<br />
sudo mv ~/Downloads/jdk-6u35-linux-x64.bin<br />
sudo chmod +x ./jdk-6u35-linux-x64.bin<br />
sudo ./jdk-6u35-linux-x64.bin<br />
ln -f -s /opt/java/jdk1.6.0_35/bin/* /usr/local/bin/<br />
# something like sudo update-alternatives --install /usr/local/bin/java java /opt/java/jdk1.6.0_35/bin/ 1 is<br />
# close to the distro way of registering java<br />
<br />
If you're on Ubuntu 64-bit, you'll also want to install ia32-libs at this point (things like adb won't work until you do):<br />
<br />
apt-get install -y ia32-libs<br />
<br />
===== Install Gecko Requirements =====<br />
<br />
Then install the usual stuff needed for a firefox build.<br />
<br />
sudo apt-get install mercurial ccache<br />
sudo apt-get build-dep firefox<br />
<br />
===== Install Android NDK =====<br />
<br />
Download and extract the [http://developer.android.com/sdk/ndk/ Android NDK]. NDK revs 4-8 have been tested and are known to work. The automated builders currently use version r5c.<br />
<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-linux-x86.tar.bz2<br />
<br />
===== Install Android SDK =====<br />
<br />
You should just install the latest [http://developer.android.com/sdk/ Android SDK], we set the API level in our manifest files. The sdk download will take a while, make sure you have a decent internet connection and go get coffee, or maybe lunch.<br />
<br />
You will need SDK version at least 16.<br />
<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz<br />
tar -xzf android-sdk_r20.0.3-linux.tgz<br />
./android-sdk-linux/tools/android update sdk --no-ui<br />
./android-sdk-linux/tools/android update adb<br />
<br />
You will probably want to add the SDK's "tools" and "platform-tools" directory to the PATH environment variable in your shell, so that you can run [http://developer.android.com/guide/developing/tools/adb.html adb] and other tools easily. For example, if you installed the SDK in $HOME/opt, you could add the following line to the end of your .bashrc:<br />
<br />
export PATH=$PATH:$HOME/opt/android-sdk-linux/platform-tools:$HOME/opt/android-sdk-linux/tools<br />
<br />
=== Mac OS X ===<br />
<br />
To set up a build environment on Mac OS X, you first need to install XCode and a few supplementary build tools via a package manager. To do this, follow steps 1 and 2 of the [https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions/Mac_OS_X_Prerequisites Mac OS X Build Prerequisites page]. Once you have completed steps 1 and 2, come back here and continue with the instructions below.<br />
<br />
After installing XCode make sure you also have wget installed. If wget is not a recognized command in terminal follow these steps to install it:<br />
<br />
curl -O http://ftp.gnu.org/gnu/wget/wget-1.14.tar.gz<br />
tar -xzvf wget-1.14.tar.gz<br />
cd wget-1.14<br />
./configure --with-ssl=openssl<br />
make<br />
sudo make install<br />
which wget #Should output: /usr/local/bin/wget<br />
<br />
===== Install Gecko Requirements =====<br />
<br />
Then install the usual stuff needed for a firefox build.<br />
<br />
sudo apt-get install mercurial ccache<br />
sudo apt-get build-dep firefox<br />
<br />
===== Install Android NDK =====<br />
<br />
Download and extract the [http://developer.android.com/sdk/ndk/ Android NDK]. NDK revs 4-8 have been tested and are known to work. The automated builders currently use version r5c.<br />
<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-darwin-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-darwin-x86.tar.bz2<br />
<br />
===== Install Android SDK =====<br />
<br />
You should just install the latest [http://developer.android.com/sdk/ Android SDK], we set the API level in our manifest files. The sdk download will take a while, make sure you have a decent internet connection and go get coffee, or maybe lunch.<br />
<br />
You will need SDK version at least 16.<br />
<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-macosx.zip<br />
unzip android-sdk_r20.0.3-macosx.zip<br />
./android-sdk-macosx/tools/android update sdk --no-ui<br />
./android-sdk-macosx/tools/android update adb<br />
<br />
You will probably want to add the SDK's "tools" and "platform-tools" directory to the PATH environment variable in your shell, so that you can run [http://developer.android.com/guide/developing/tools/adb.html adb] and other tools easily. For example, if you installed the SDK in $HOME, you could add the following line to the end of your .bashrc:<br />
<br />
export PATH=$PATH:$HOME/android-sdk-macosx/platform-tools:$HOME/android-sdk-macosx/tools<br />
<br />
=== Optional: Using NDK r8c ===<br />
<br />
On some systems, linking libxul can takes several minutes. Using <i>gold</i> instead of <i>ld</i> can reduce this time (from around 7 minutes to a bit more than 1 minute on my machine&#160;; YMMV, on another machine, it gets from 25 seconds to 10, or from 2 minutes to 1 minute with all system caches dropped).<br />
<br />
To use gold, the best way is to just use the r8c Android NDK. You can also build gold yourself from binutils source and replace your existing ld binaries in the NDK folder to use gold. However it's simpler to just upgrade the NDK. There are currently no known issues with using the r8c NDK, except that you also need to remove the --enable-warnings-as-errors option in your mozconfig because the gcc-4.6 that comes with r8c is stricter with respect to warnings. There is some discussion in {{bug|769099}} about how r8c is awesome stuff and should be used by default on the buildbots, but that hasn't happened yet.<br />
<br />
To upgrade your NDK, download the NDK for [http://dl.google.com/android/ndk/android-ndk-r8c-darwin-x86.tar.bz2 Mac OS X] or [http://dl.google.com/android/ndk/android-ndk-r8c-linux-x86.tar.bz2 Linux] and unpack it. Then, update your mozconfig to point to the new NDK by setting the <code>--with-android-ndk</code> and <code>--with-android-toolchain</code> options in your mozconfig.<br />
<br />
For example, assuming that on a Mac OS X platform the NDK is unpacked into $HOME/android-ndk-r8c, you would need the following two lines in your mozconfig:<br />
<br />
ac_add_options --with-android-ndk="$HOME/android-ndk-r8c"<br />
ac_add_options --with-android-toolchain="$HOME/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86"<br />
<br />
=== Getting the source ===<br />
<br />
Once you have build tools set up, you should configure Mercurial as described [https://developer.mozilla.org/en-US/docs/Installing_Mercurial#Configuration here]. (It is not required, but highly recommended if you plan on touching the code in any way). Once you have done that, grab a clone of the repository:<br />
<br />
hg clone http://hg.mozilla.org/mozilla-central/ src<br />
<br />
=== Setup Fennec mozconfig ===<br />
<br />
The mozconfig file is what tells the mozilla build scripts how your build environment is set up, and sets various build options. To build scripts will read the mozconfig file from the $MOZCONFIG environment variable, if one is set, or the .mozconfig file in your src directory, if there is one. So you could do either this:<br />
<br />
cd src<br />
vim .mozconfig # put mozconfig here<br />
<br />
or this:<br />
<br />
cd some/random/folder<br />
vim my-fennec-mozconfig # put mozconfig here<br />
export MOZCONFIG=$PWD/my-fennec-mozconfig<br />
<br />
Here is an example mozconfig file for building Fennec, assuming you have followed the instructions above and are using version r5c of the NDK.<br />
<br />
<pre><br />
# Add the correct paths here:<br />
ac_add_options --with-android-ndk="$HOME/android-ndk-r5c"<br />
ac_add_options --with-android-sdk="$HOME/android-sdk-linux/platforms/android-16"<br />
ac_add_options --with-android-version=5<br />
<br />
# android options<br />
ac_add_options --enable-application=mobile/android<br />
ac_add_options --target=arm-linux-androideabi<br />
ac_add_options --with-ccache<br />
<br />
mk_add_options MOZ_OBJDIR=./objdir-droid<br />
mk_add_options MOZ_MAKE_FLAGS="-j9 -s"<br />
</pre><br />
<br />
Remember to use $HOME instead of ~ in the mozconfig, because ~ will not get expanded to the right path! If you are building on Mac OS X you will also need to add this:<br />
<br />
ac_add_options --disable-crashreporter<br />
<br />
because the crash reporter does not build properly on Mac OS X.<br />
<br />
If you want to build for armv6 add this:<br />
<br />
ac_add_options --with-arch=armv6<br />
<br />
You can also look at [http://mxr.mozilla.org/mozilla-central/source/mobile/android/config/mozconfigs/android/nightly the mozconfig used for official nightly builds].<br />
<br />
=== Building the code ===<br />
<br />
This will build (compile+link), package into apk, and deploy to the Android device. Therefore, before you start building [http://developer.android.com/guide/developing/device.html connect your Android device and enable USB debugging]<br />
<br />
cd src<br />
make -f client.mk build_and_deploy<br />
<br />
You can also just do:<br />
<br />
make -f client.mk<br />
make -C objdir-droid package<br />
<br />
to build and package the code into an APK. The APK file can be found in your objdir-droid/dist/ folder, and will be called something like fennec-18.0a1.en-US.android-arm.apk. You can install this APK to your device manually using "adb install". The name of the app that shows up on your phone will be "Fennec $USER" (where $USER is the username under which you built the code).<br />
<br />
== Hacking ==<br />
<br />
There is a bunch of useful information hanging off the page at [[Fennec/NativeUI]]. Below is some more useful information. Please add more stuff you think is useful to these sections!<br />
<br />
=== Finding relevant code ===<br />
<br />
The Fennec-specific code can be found in the following locations in the mozilla-central source tree:<br />
<br />
mobile/android/...<br />
widget/android/...<br />
<br />
Of particular interest to most new contributors will be:<br />
<br />
mobile/android/base/GeckoApp.java # the main android activity that starts up when you open Fennec<br />
mobile/android/chrome/content/browser.js # the main JS file that controls Gecko to make it do what we want<br />
<br />
You can also use the code-search tools at https://mxr.mozilla.org/mozilla-central/ and http://dxr.mozilla.org/ to search for relevant pieces of code.<br />
<br />
=== Partial Builds: Beware the startup cache! ===<br />
<br />
Developers who frequently update .js files sometimes like to manually only re-build the module they have updated. Partial builds for updated Javascript files may not work correctly if installed with adb install -r. This section describes the issue. For instance:<br />
<br />
make -C mobile/android && make package<br />
<br />
This should result in the APK being properly updated with the updated Javascript, BUT the change may not be reflected on the device because of complications arising from the startup cache. If the startup cache from a previous run of Fennec exists on the device and contains an old version of the recently updated Javascript, Fennec will likely use the old version.<br />
<br />
The startup cache is located in the profile, so deleting the profile ensures a new startup cache:<br />
<br />
adb uninstall org.mozilla.fennec<br />
adb install dist/fennec*.apk<br />
<br />
Note that:<br />
<br />
adb install -r dist/fennec*.apk<br />
<br />
retains the profile (and startup cache) -- so that's still a problem.<br />
<br />
None of this is a problem with full builds:<br />
<br />
make -f client.mk &amp;&amp; make package <br />
adb install -r dist/fennec*.apk<br />
<br />
works just fine, because the startup cache respects the buildid: If the buildid found in an APK is different from the buildid used when the startup cache was last updated, the startup cache is automatically deleted. A full build correctly updates the buildid -- a partial build may not.<br />
<br />
A possible way (***I have not conclusively tested this***) to do a partial build, retain an old profile, and ensure the buildid is updated and the startup cache is subsequently deleted is:<br />
<br />
make export && make -C mobile/android && make -C toolkit/xre && make package<br />
adb install -r dist/fennec*.apk<br />
<br />
Note that make export is necessary to update the buildid and make -C toolkit/xre is required to generate application.ini.h, trigger a rebuild of nsAndroidStartup.cpp, and update libxul.so.<br />
<br />
=== Multilocale builds ===<br />
<br />
* Create a directory, clone mozharness, copy the config file for easy editing/usage:<br />
<br />
mkdir multilocale<br />
cd multilocale<br />
hg clone http://hg.mozilla.org/build/mozharness<br />
cp mozharness/configs/multi_locale/standalone_mozilla-central.py myconfig.py<br />
<br />
* Edit myconfig.py<br />
** currently will check out m-c into a directory named 'mozilla-central' in this directory<br />
** currently assumes your mozconfig is in this directory and named 'mozconfig'<br />
** currently assumes your mozconfig sets your objdir name to 'objdir-droid'<br />
<br />
* pull mozilla-central<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py --pull-build-source<br />
# Alternately, you can hg clone http://hg.mozilla.org/mozilla-central<br />
<br />
* Run the script, which will create a multilocale apk<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py<br />
<br />
And you're done.<br />
<br />
* If you want to recompile or re-run the script, restore your objdir to en-US first!<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py --restore-objdir<br />
<br />
Also see [http://escapewindow.dreamwidth.org/234671.html this blog post] for more information.<br />
<br />
== Testing ==<br />
==== Device Managers ====<br />
Most test suites - mochitests, reftests, xpcshell tests, and others - use a "device manager" module to communicate with the remote device. There are two device manager implementations: ADB and SUT. <br />
<br />
The ADB device manager uses the adb command from the Android SDK to communicate with the remote device. To use the ADB device manager:<br />
* ensure the adb command is in your shell's PATH<br />
* set environment variable DM_TRANS=adb<br />
* do not set environment variable TEST_DEVICE, or set TEST_DEVICE= (unless you really need it)<br />
<br />
The SUT device manager uses TCP to communicate with a remote agent, which must be installed on the device. To use the SUT device manager:<br />
* ensure TCP connectivity between the local host and the remote device: check that they are on the same network and you can ping each from the other<br />
* ensure the SUT agent is installed and started on the remote device<br />
** the SUT agent APK is built alongside Fennec; just install <objdir-droid>/build/mobile/sutagent/android/sutAgentAndroid.apk<br />
** The agent should be configured to start automatically with your phone when it boots. To start it immediately from an adb shell do: `am start -n com.mozilla.SUTAgentAndroid/.SUTAgentAndroid -a android.intent.action.MAIN` <br />
* set environment variable DM_TRANS=sut<br />
* set environment variable TEST_DEVICE=<ip address of remote device -- displayed by SUT agent><br />
<br />
==== Host Builds (MOZ_HOST_BIN) ====<br />
Android mochitests and reftests require a parallel host build -- a build for the local host (desktop) environment. An environment variable, MOZ_HOST_BIN, must be set to point to that host build. MOZ_HOST_BIN is used to run xpcshell (for instance, to provide a simple web server), so the MOZ_HOST_BIN directory must contain xpcshell and all the shared libraries required by xpcshell. You can patch together these files from other sources, but the easiest way to get these is to download a xulrunner SDK build from here: http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk/<br />
<br />
You can also build desktop Firefox with a mozconfig might be as simple as:<br />
<br />
ac_add_options --enable-application=browser<br />
mk_add_options MOZ_OBJDIR=./objdir-x86<br />
<br />
Then execute:<br />
<br />
export MOZCONFIG=mozconfig.x86 <br />
make -f client.mk<br />
MOZ_HOST_BIN=objdir-x86/dist/bin<br />
ls -l $MOZ_HOST_BIN/xpcshell<br />
<br />
On Linux, the path to that build may also need to be in your LD_LIBRARY_PATH, unless your LD_LIBRARY_PATH contains ".":<br />
<br />
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.<br />
<br />
==== Test Directory ====<br />
We currently make the assumption that the device has a mounted sdcard when running tests (see {{bug|683895}}). If you cannot mount an sdcard, or if you are trying to run xpcshell tests, run:<br />
<br />
mkdir /data/local/tests<br />
<br />
(If you are using a Nexus S, the trick to making your device mountable is to not allow USB Storage between your computer and your device. When you plug in your device to your computer, simply don't click the button to allow this on your device and you should be able to run your tests.)<br />
<br />
=== Reftests ===<br />
<br />
MOZ_HOST_BIN="<abspath-to-objdir-x86>/dist/bin/" TEST_PATH=<path> make -C <objdir-droid> reftest-remote<br />
<br />
For devices with screens too small you will see the error |can't drawWindow remote content|. You can ignore that resolution requirement by using the |ignore-window-size| options. NOTE: This may lead to false negative/positives.<br />
<br />
EXTRA_TEST_ARGS="--ignore-window-size"<br />
<br />
Example TEST_PATH:<br />
<br />
TEST_PATH=layout/reftests/reftest-sanity/reftest.list<br />
<br />
Notes:<br />
<br />
* If TEST_PATH is not specified, *all* reftests will be attempted: This usually fails/hangs and is not recommended. Specify a TEST_PATH or use the --total-chunks and --this-chunk arguments to reduce the number of tests executed.<br />
* sut recommended. Test results displayed and saved to reftest.log and reftest-remote.log.<br />
* adb works, but reports errors. Test results are not displayed but saved to reftest.log (additional diagnostics in reftest-remote.log).<br />
<br />
=== Mochitests ===<br />
<br />
MOZ_HOST_BIN="<abspath-to-objdir-x86>/dist/bin/" TEST_PATH=<path> \ <br />
make -C <objdir-droid> mochitest-remote<br />
<br />
Note that as of this writing (September 2011) many mochitests will not complete successfully. Try setting your TEST_PATH to "dom/tests/mochitest/dom-level1-core" or "content/smil/test" if you want to restrict yourself to a subset of tests that are known to pass.<br />
<br />
TEST_PATH can be:<br />
content/smil/test<br />
content/xml/document/test<br />
content/xslt/tests/mochitest<br />
dom/src/json/test<br />
dom/src/jsurl/test<br />
dom/tests/mochitest/dom-level0<br />
dom/tests/mochitest/dom-level1-core<br />
dom/tests/mochitest/dom-level2-core<br />
dom/tests/mochitest/ajax/mochikit<br />
dom/tests/mochitest/ajax/scriptaculous<br />
dom/tests/mochitest/ajax/jquery<br />
dom/tests/mochitest/dom-level2-html<br />
Harness_sanity<br />
editor/composer/test<br />
intl/uconv/tests<br />
dom/tests/mochitest/orientation<br />
dom/tests/mochitest/storageevent<br />
layout/xul/test<br />
modules/libjar/test/mochitest<br />
layout/inspector/tests <br />
toolkit/xre/test<br />
toolkit/components/microformats/tests<br />
MochiKit-1.4.2/tests<br />
parser/htmlparser/tests/mochitest<br />
js<br />
<br />
Notes:<br />
* A rooted device is required to run the unit tests using the SUT Agent. Use ADB for unrooted devices.<br />
* Whichever transport agent you using, running mochitests unrooted seems to still have some problems. For better reliability, rooting your device before using them is recommended.<br />
<br />
=== Robotium ===<br />
<br />
The Robotium / Robocop test suite verifies UI behavior in native Fennec. <br />
<br />
Build and install native Fennec, then execute the mochitest-robotium make target.<br />
<br />
make -f client.mk<br />
cd <objdir><br />
make package<br />
adb install -r dist/fennec-*.apk<br />
MOZ_HOST_BIN="<abspath-to-objdir-x86>/dist/bin/" make mochitest-robotium<br />
<br />
More info at https://wiki.mozilla.org/Auto-tools/Projects/Robocop.<br />
<br />
Notes:<br />
* A rooted device is NOT required.<br />
* ADB device manager is used by default; SUT is also supported.<br />
* MOZ_HOST_BIN is used to launch xpcshell on the desktop to provide a web server.<br />
* Use TEST_PATH=<test-name> to run just one test at a time.<br />
* /mnt/sdcard must exist and be writable.<br />
<br />
=== xpcshell ===<br />
<br />
This is still slightly broken, work is ongoing in {{Bug|799863}} to repair things.<br />
<br />
To prepare your device for xpcshell tests:<br />
<br />
adb shell mkdir /data/local/tests<br />
<br />
Also be sure you have successfully built Fennec and generated an APK, as described above.<br />
<br />
To run all tests referenced by the master xpcshell manifest:<br />
<br />
cd <objdir-droid><br />
make xpcshell-tests-remote<br />
<br />
To run a subset of tests in the specified directory:<br />
<br />
make -C <test-directory> xpcshell-tests-remote<br />
<br />
Once either of the xpcshell-tests-remote commands has completed successfully, all test files have been copied to device, and it is then possible to run a single test quickly, without setup:<br />
<br />
make SOLO_FILE=<test-file> -C <test-directory> check-one-remote<br />
<br />
You can also skip setup for a larger test run (be careful / be sure you know that's what you want!):<br />
<br />
export EXTRA_TEST_ARGS="--noSetup"<br />
make -C <test-directory> xpcshell-tests-remote<br />
<br />
Notes:<br />
* A rooted device IS required.<br />
* ADB device manager is used by default. SUT is NOT supported at this time -- it does not allow for a /data/local test root. See {{bug|810347}}.<br />
* The test root directory cannot be on /sdcard -- it must be /data/local so that +x permissions can be set on xpcshell.<br />
* Setup can take a long time! It goes much faster if unzip is available on the remote device; if your device does not have unzip, try installing busybox.<br />
<br />
=== browser-chrome ===<br />
<br />
Before you run tests, you will need to make sure you have packaged the tests in your object dir:<br />
<br />
make -C <objdir-droid> package-tests<br />
<br />
There is currently no special make command to build and run browser-chrome tests, but it should be possible to make them run by calling:<br />
<br />
cd <objdir-droid>/_tests/testing/mochitest<br />
python runtestsremote.py --dm_trans=adb --test-path=mobile --browser-chrome --deviceIP=1.2.3.4 <br />
--app=org.mozilla.fennec_$USER --xre-path=<objdir_x86>/dist/bin/<br />
<br />
=== talos ===<br />
<br />
*NOTE: this requires python 2.5 or greater (tested up to 2.7)<br />
<br />
See https://wiki.mozilla.org/Buildbot/Talos<br />
<br />
This is 100% out of band from mozilla-central (same for desktop also).<br />
<br />
hg clone http://hg.mozilla.org/build/talos talos<br />
cd talos<br />
python INSTALL.py<br />
. bin/activate<br />
cd talos<br />
<br />
Run these commands to check out the talos dependencies (assuming you are already in the "talos/talos" directory):<br />
<br />
cd page_load_test<br />
wget http://people.mozilla.org/~jmaher/mobile_tp4.zip<br />
unzip mobile_tp4.zip<br />
<br />
Configure a talos profile. You can do this via adb or [http://people.mozilla.com/~bmoss/SUTAgent/ SUTAgent] - if you want to use adb make sure you have rooted your device such that "adb shell" goes directly into a root shell. If you want to use adb to communicate with the device remotely, do something like this:<br />
<br />
talos -v -e org.mozilla.fennec \<br />
--develop \<br />
--activeTests tprovider \<br />
--output trobo.yml \<br />
--remotePort -1 \<br />
--remoteDevice 1.2.3.4 \<br />
[--fennecIDs <abs-path-to-objdir>/dist/fennec_ids.txt]<br />
<br />
If you want to use [http://people.mozilla.com/~bmoss/SUTAgent/ SUTAgent] to communicate with the device, do something like this:<br />
<br />
talos -v -e org.mozilla.fennec \<br />
--develop \<br />
--activeTests tsvg \<br />
--results_url file://${PWD}/tsvg.txt \<br />
--noChrome \<br />
--remoteDevice <ip of your sutagent> \<br />
[--fennecIDs <abs-path-to-objdir>/dist/fennec_ids.txt]<br />
<br />
SUTAgent will not be able to read the application.ini on the device, so you will need to copy it. We highly recommend pulling the application.ini from the .apk and copying it to the talos/talos/remoteapp.ini file.<br />
<br />
For Robocop based tests (tcheck, tcheck2, tcheck3, tprovider, etc...), we need to use the --fennecIDs flag to pass in the generated fennec_ids.txt file from the build you are testing. This file is generated during build time and has to match the fennec.apk and robocop.apk file. When this flag is used, we copy fennec_ids.txt and robotium.config (generated during configuration time) to the device and use those to run Robocop. If you are running ts, tp4, tsvg, or other traditional talos tests, there is no need for the --fennecIDs flag.<br />
<br />
Unless two applications are signed with the same key they cannot read each others' /data/data directories, so SUTAgent cannot read org.mozilla.fennec's data directory.<br />
You can extract it from the fennec .apk or get it from adb from e.g. /data/data/org.mozilla.fennec/application.ini<br />
<br />
shell@android:/ $ su<br />
shell@android:/ # cat /data/data/org.mozilla.fennec/application.ini<br />
[App]<br />
Vendor=Mozilla<br />
Name=Fennec<br />
Version=10.0a1<br />
BuildID=20111031031100<br />
SourceRepository=http://hg.mozilla.org/mozilla-central<br />
SourceStamp=04b4ea333800<br />
ID={a23983c0-fd0e-11dc-95ff-0800200c9a66}<br />
<br />
[Gecko]<br />
MinVersion=1.9.2b5pre<br />
MaxVersion=10.0a1<br />
<br />
[XRE]<br />
EnableExtensionManager=1<br />
<br />
[Crash Reporter]<br />
Enabled=1<br />
ServerURL=https://crash-reports.mozilla.com/submit<br />
<br />
'''Note''': As of this writing (Sept 27, 2011), the tgfx pageset does not currently work (it isn't run on the desktop either). Don't try it. :)<br />
<br />
'''Note''': When running robocop-based talos tests (tcheck, etc), be aware that some robocop-required files are not updated by Talos. For example, robocop.apk is not installed. Your best bet is to run mochitest-robotium first to make sure everything is up to date, or manually install robocop.apk from the dist folder.<br />
<br />
Aside: For a quick-and-dirty hacky way to run robocop-talos tests locally, see [[Mobile/Fennec/Android/LocalRoboTalos]]<br />
<br />
=== S1/S2 Automation ===<br />
These tests start Fennec with a URL and measure the time to throbber start, time to throbber stop, and drawing end times. <br />
<br />
S1/S2 graphs can be viewed at: http://mrcote.info/phonedash/#/<br />
<br />
Manual run instructions can be found at: https://etherpad.mozilla.org/fennec-perf-ts-take2<br />
<br />
See also: https://wiki.mozilla.org/Mobile/Performance/S1S2-Tests<br />
<br />
=== Eideticker ===<br />
Eideticker measures perceived Firefox performance by video capturing automated browser interactions.<br />
<br />
Eideticker graphs can be viewed at: http://wrla.ch/eideticker/dashboard/<br />
<br />
See also: http://wrla.ch/blog/2011/11/measuring-what-the-user-sees/ and http://wrla.ch/blog/2012/03/announcing-the-eideticker-mobile-performance-dashboard/.<br />
<br />
=== Trouble-shooting testing problems ===<br />
<br />
* Does your mozconfig contain "ac_add_options --disable-tests"?<br />
** If so, you will see something like:<br />
<pre><br />
make: *** No rule to make target <your-test-target>. Stop.<br />
</pre><br />
* Is adb in your $PATH?<br />
* Is your device connected? Does it appear in the output from "adb devices"?<br />
* Can you run adb shell?<br />
* If running xpcshell, did you create /data/local/tests?<br />
* If running "make check-one-remote", did you first setup the device with "make xpcshell-tests-remote"?<br />
<br />
== Debugging ==<br />
<br />
=== Using logcat ===<br />
<br />
[http://developer.android.com/guide/developing/tools/logcat.html logcat] is a tool that is going to show you some logs prompted by the device. It might be a good help if you don't want to or can't run gdb. You can use it by running this command: <br />
<br />
adb logcat -v time<br />
<br />
You can make things appear in logcat using printf_stderr. With debug builds, NS_WARNING, NS_ERROR and NS_ASSERTIONS will show up in logcat. If you're trying to debug something, you may wish to pipe the logcat output through grep to filter out irrelevant things (most Fennec-related output will be viewable by "adb logcat | grep Gecko"), but remember that when attaching log output to a bug you should include unfiltered output as there may be relevant log entries under other tags.<br />
<br />
==== Using aLogCat ====<br />
<br />
<b>Note:</b> aLogCat (and other logcat apps) do not support Jelly Bean (4.1) and above. It seems like the only way to get these apps to work on those versions is to root the device, which, although fulfilling, is probably more work than just using <code>adb logcat</code>.<br />
<br />
If you don't have the Android SDK installed, you can still extract logs using an application called aLogCat. Install it from the Android Market. Use it to capture logs and attach the logs to bugs.<br />
<br />
https://market.android.com/details?id=org.jtb.alogcat&hl=en<br />
<br />
Once you have alogcat installed, just use Fennec as you would normally. Upon encountering a bug or issue, start the aLogcat app (as soon as possible after seeing the Fennec issue) and select "Share" or "Save" from the menu to send it via email or save it to the SD card. The log can then be attached to a bug or sent to a developer. As with adb logcat, it is better to have a log with timestamps than without timestamps. To enable timestamps in the log, select "Preferences" from the aLogcat menu, and change the "Format?" option to "Time".<br />
<br />
If you need to, you can search for some kinds of Fennec-related output by using the "Filter" menu item and entering "Gecko". However, when submitting logs for bug reports, please make sure you clear the filter and include all of the available log data.<br />
<br />
==== JavaScript dump() ====<br />
<br />
To use the dump() function in JavaScript to write to the log:<br />
<br />
# Go to about:config and set browser.dom.window.dump.enabled to "true"<br />
# Run the following ADB commands:<br />
<br />
adb shell stop<br />
adb shell setprop log.redirect-stdio true<br />
adb shell start<br />
<br />
=== Using nVidia GDB ===<br />
<br />
Nvidia's gdb is better than most other gdbs: http://developer.download.nvidia.com/tegra/files/tegra-gdb-20100902.zip .<br />
Even so, you probably want to use JimDB instead of Nvidia's gdb ...<br />
<br />
=== Using JimDB ===<br />
* jchen has been working on a better Android gdb ('jimdb'). [https://github.com/darchons/android-gdb source], and [[Mobile/Fennec/Android/GDB|build instructions]]. For best results, rebuild everything.<br />
* [http://www.jnchen.com/_media/projects/mozilla/moz-gdb.tar.bz2 Prebuilt binaries] are available but problems with them have been reported.<br />
* [http://people.mozilla.com/~bgirard/moz-gdb-darwin-prebuilt-2012-10.tar.gz October 2012 Darwin prebuilt]<br />
** The link to the prebuilt binaries seems broken, as of March 30 2012 (bjacob).<br />
* JimDB:<br />
** has most fixes from NDK gdb<br />
** integrates Android libthread_db (fixed dougt's problem debugging threads)<br />
** has Python scripting support<br />
** [https://github.com/darchons/android-gdbutils couple of existing Python scripts] (or if using prebuilt binaries above, just run 'git pull' under the 'utils' directory)<br />
*** feninit is a tool to initialize the GDB environment (support for multiple devices, multiple object directories; launches Fennec, pulls libraries, sets paths, and attaches gdbserver automatically)<br />
*** tracebt is a WIP stack unwinder that traces instructions to find stack frames<br />
*** idea for another tool to parse and integrate logcat into gdb<br />
*** other ideas welcome!<br />
* see [[Mobile/Fennec/Android/GDB]] for installation instructions<br />
<br />
Once JimDB is installed, just run its gdb executable. This is will take care of everything (it will start gdbserver on the device, start Fennec, and start gdb on your computer):<br />
<br />
./moz-gdb/bin/gdb<br />
<br />
=== Using Debug Intent ===<br />
<br />
'''Note: this is not useful with JimDB. If you want to use JimDB, just start it.'''<br />
<br />
In order to attach before things get running, launch with: <br />
<br />
adb shell am start -a org.mozilla.gecko.DEBUG -n org.mozilla.fennec_foobar/.App<br />
<br />
(Replace foobar by your username)<br />
<br />
and just click launch once gdb is attached. If you need to debug a crash that happens before XRE_Main is called, the patch on {{bug|572247}} may be useful. <br />
<br />
this script [http://dump.lassey.us/debug.sh] will attach gdbserver for you<br />
<br />
=== Getting dalvik java stack dumps using gdb ===<br />
<br />
(gdb) call handleSigQuit()<br />
<br />
this will dump a stack trace to gDvm.stackTraceFile which defaults to "/data/anr/traces.txt"<br />
<br />
Note: this will only work if you have symbols for dalvik. (It may be possible to get the address for handleSigQuit by reading<br />
the symbol table using sigaction.)<br />
<br />
Note: deleting /data/anr/traces.txt will cause this method to stop working. You can fix it by recreating the file with $ echo "" > traces.txt<br />
<br />
=== Debugging with jdb ===<br />
<br />
Inspired by<br />
http://asantoso.wordpress.com/2009/09/26/using-jdb-with-adb-to-debugging-of-android-app-on-a-real-device/<br />
<br />
After staring fennec with jimdb the following seems to work at least a little.<br />
<br />
$ adb jdwp # lists the pids of processes hosting jdwp<br />
5543<br />
$ adb -d forward tcp:8686 jdwp:5543<br />
$ jdb -J-Duser.home=. -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8686 -sourcepath ~/mozilla/maple/mobile/android/base/<br />
<br />
You can also use eclipse for debugging in a similar way by setting up for debugging "Remote Java application".<br />
<br />
This doesn't seem to work for me in Ubuntu 12.04 anymore.<br />
<br />
=== Debugging with eclipse ===<br />
<br />
You need to find the PID of your fennec process. Forward it to a local TCP socket as in "Debugging with jdb."<br />
<br />
In Eclipse switch to the debug perspective. Go to Run > Debug configurations... Remote Java Application. Change the port to the TCP port you specified in your adb command. Under Source, navigate to your checkout, then into mobile/android.<br />
<br />
Eclipse looks for source code in a specific location. You need to create the directory hierarchy:<br />
<code><br />
mobile<br />
/android<br />
/org<br />
mozilla/<br />
gecko -> ../../base</code><br />
<br />
That is, in mozilla-central/mobile/android, create org/mozilla, and put the symlink gecko pointing to mozilla-central/mobile/android/base.<br />
<br />
You may also want to add more debugging information and can do that like this:<br />
diff --git a/config/android-common.mk b/config/android-common.mk<br />
index 4591239..a47726a 100644<br />
--- a/config/android-common.mk<br />
+++ b/config/android-common.mk<br />
@@ -70,6 +70,6 @@ JAVAC_FLAGS = \<br />
-classpath $(JAVA_CLASSPATH) \<br />
-bootclasspath $(JAVA_BOOTCLASSPATH) \<br />
-encoding UTF8 \<br />
- -g:source,lines \<br />
+ -g:source,lines,vars \<br />
-Werror \<br />
$(NULL)<br />
<br />
=== Arguments and Environment Variables ===<br />
<br />
If you need to set an environment variable at run time, append '''--es env# VAR=VAL''' to your activity manager command where # is the ordered number of variables for example: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 VAR=val --es env1 FOO=bar<br />
<br />
If you need to pass arguments at run time, append '''--es args "<your-args>"''' to your activity manager command. For example, to launch with a specific profile: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es args "--profile /mnt/sdcard/myprofile"<br />
<br />
To launch with a specific URL, use the am -d option to set the intent's data URI:<br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App -d 'http://www.mozilla.org'<br />
<br />
=== PR Logging ===<br />
<br />
You can use the env vars as described above to enable NSPR logging:<br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 NSPR_LOG_MODULES=all:5 --es env1 NSPR_LOG_FILE=/mnt/sdcard/log.txt<br />
<br />
If no file is specified, logging is directed to the android logs: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 NSPR_LOG_MODULES=all:5<br />
<br />
Look for lines marked "PRLog" in the adb logcat output.<br />
<br />
=== debugging without rooting ===<br />
<br />
with Froyo you can debug without rooting your phone. Instructions are below. See also [[Mobile/Fennec/Android/GDBNoRoot|Fennec/Android/GDBNoRoot]] for another guide on how to do this.<br> <br />
<br />
First thing, to make this work with the nvidia gdb (which I found more reliable than the android r3 gdb) you need to modify install.sh and debug.sh. <br />
<br />
first, change the location where install.sh copies gdbserver to somewhere writable by a non-root process. I used /data/local. Be sure to update that both in the push command and the chmod command. <br />
<br />
second, update debug.sh with the new location of gdbserver. <br />
<br />
finally, you'll need to add run-as $2 to the adb shell command that launches gdbserver. In the end you should have: install.sh: <br />
<br />
#!/bin/sh<br />
mkdir lib<br />
adb push prebuilt/gdbserver /data/local<br />
adb shell chmod 755 /data/local/gdbserver<br />
for file in $(adb shell ls /system/lib | tr "\n" " " | tr "\r" " "); do<br />
adb pull /system/lib/$file lib<br />
done<br />
adb pull /system/bin/app_process lib <br />
<br />
The above will miss some vendor drivers, you can use busybox to find all shared libraries<br />
<br />
for file in $(adb shell /data/local/busybox find / -name "*.so" | tr "\n" " " | tr "\r" " "); do adb pull /$file lib_unlock_nexus/; done<br />
<br />
debug.sh: <br />
<br />
#!/bin/sh<br />
if [ $# -ne 2 ]<br />
then<br />
echo "usage: $0 /path/to/your/library.so packagename.of.your.activity"<br />
echo "for example:"<br />
echo " $0 /code/mydemo/libs/armeabi/libmydemo.so com.nvidia.devtech.mydemo"<br />
exit<br />
fi<br />
<br />
if [&nbsp;! -f $1 ]<br />
then<br />
echo "ERROR: That library file doesn't exist"<br />
exit<br />
fi<br />
<br />
cp $1 lib<br />
<br />
p=`adb shell ps | grep $2 | awk '{print $2}'`<br />
if [ "$p" = "" ];<br />
then<br />
echo "ERROR: That doesn't seem to be a running process. Please make sure your"<br />
echo "application has been started and that you are using the correct"<br />
echo "namespace argument."<br />
exit<br />
fi<br />
<br />
adb forward tcp:12345 tcp:12345<br />
adb shell run-as $2 /data/local/gdbserver --attach&nbsp;:12345 $p<br />
<br />
=== Attaching GDB ===<br />
Assuming you have the nvidia gdb at the top of your home directory and the app_process binary in the current working directory.<br />
~/nvidia-gdb/prebuilt/linux-x86/arm-eabi-gdb ./app_process<br />
<br />
=== Reading back the framebuffer ===<br />
If you need to verify what is in the back buffer at a particular time, you can cleverly call functions from gdb to allocate memory, read back, and write that to disk.<br />
<br />
You need to know the size of your framebuffer a priori; in this case, it's 480x699.<br />
<br />
You also need to know what the GL enum values are, because unless you compile with -ggdb, you don't have #defines available to you in the debugger. Very helpful information: GL_RGBA = 0x1908, GL_UNSIGNED_BYTE = 0x1401. The rest you can find in gfx/gl/GLDefs.h.<br />
<br />
You '''should''' be able to call glReadPixels directly, but in my experience that causes Fennec to crash. However, if you have a GLContext* lying around, as you often do, you can work around that problem.<br />
<br />
<pre>(gdb) set $m = (int*)malloc(480*699*4)<br />
(gdb) call aManager->mGLContext.mRawPtr->fReadPixels(0, 0, 480, 699, 0x1908, 0x1401, (void*)$m)<br />
(gdb) set $f = fopen("/sdcard/outputfile", "wb+")<br />
(gdb) call fwrite($m, 1, 480*699*4, $f)<br />
$7 = 1342080<br />
(gdb) call fclose($f)<br />
$8 = 0</pre><br />
<br />
Now there is a file called /sdcard/outputfile that you can adb pull. But since it's just raw RGBA values, you need to be able to wrap that in PNG headers to display it. [https://github.com/jrmuizel/minpng/blob/master/minpng.h Jeff Muizelaar wrote a header called minpng.h that you can use to do so.]<br />
<br />
Get Jeff's minpng.h, and put it in a directory along with a driver c program:<br />
<br />
<pre>#include "minpng.h"<br />
<br />
int main(int argc, char* argv[])<br />
{<br />
FILE* f = fopen(argv[1], "rb");<br />
int w = atoi(argv[2]);<br />
int h = atoi(argv[3]);<br />
char* d = (char*) malloc(w * h * 4);<br />
fread(d, w * h * 4, 1, f);<br />
fclose(f);<br />
write_png(argv[4], d, w, h);<br />
}</pre><br />
<br />
Compile and run:<br />
<pre>$ gcc -o minpng minpng.c<br />
$ ./minpng outputfile 480 699 output.png<br />
</pre><br />
=== Using Rendertrace (Maple) ===<br />
<br />
Rendertrace is a utility that will dump layer position and timing information (such as drawing, upload) to the console. This information can pasted into the rendertrace web front end to visualize the layer position and event timeline. This will let you understand where you're gecko is spending its time and why were checkerboarding.<br />
<br />
To enable go in 'gfx/layers/RenderTrace.h' and uncomment '#define MOZ_RENDERTRACE'. Rebuild and run 'adb logcat | grep RENDERTRACE', paste the result in http://people.mozilla.org/~bgirard/rendertrace.html and hit 'reload'. For details talk to BenWa.<br />
<br />
=== Using apitrace ===<br />
<br />
Apitrace is a tool for tracing GL/EGL calls for debugging purposes. It basically uses an interim shared library called libapitrace that contains shadow gl* and egl* functions, which then get logged and then passed through to the real driver.<br />
<br />
<br />
Use apitrace from https://github.com/apitrace/apitrace to build for desktop and android.<br />
<br />
<pre><br />
apt-get install libegl1-mesa-dev libgles1-mesa-dev libgles2-mesa-dev libqt4-dev cmake<br />
git clone https://github.com/gw280/apitrace.git<br />
cd apitrace<br />
<br />
# Build for Android<br />
export ANDROID_NDK=/path/to/your/ndk<br />
cmake -DCMAKE_TOOLCHAIN_FILE=android/android.toolchain.cmake -DANDROID_API_LEVEL=9 -Bbuild-android -H.<br />
make -C build-android -j8<br />
<br />
# Build for desktop<br />
cmake -H. -Bbuild<br />
make -C build -j8<br />
<br />
export EGL_SOFTWARE=true<br />
./build/eglretrace -v /path/to/your/apitrace_log.trace<br />
</pre><br />
<br />
The Android build will create egltrace.so in build-android/wrappers, which you can then push to your device to /data/local:<br />
<br />
<pre><br />
adb push build-android/wrappers/egltrace.so /data/local<br />
</pre><br />
<br />
Restarting Fennec will cause it to load the apitrace library and the apitrace log will be saved to /data/data/org.mozilla.fennec_username/firefox.trace<br />
<br />
You can then adb pull /data/data/org.mozilla.fennec_username/firefox.trace and analyse it on your desktop.<br />
<br />
You can also use qapitrace as a GUI to inspect your trace files. (be sure to switch qapitrace to the EGL api using the options dialog)<br />
<br />
These instructions provide a trace that does not include the Java GL code. To get traces including java code is more complicated. You need to use<br />
the patch from this bug https://bugzilla.mozilla.org/show_bug.cgi?id=749859 and this version of https://github.com/ideak/apitrace/tree/dev. Further, you'll need to build your own image/modify the current one to replace /init.rc. You also need to disable hardware acceleration of the UI (https://bug746703.bugzilla.mozilla.org/attachment.cgi?id=619009) Ask jrmuizel for more information if you want to do this.<br />
<br />
=== Profiling ===<br />
<br />
See https://wiki.mozilla.org/Mobile/Fennec/Android/Profiling.<br />
<br />
=== Debugging Java code with DDMS ===<br />
<br />
See http://developer.android.com/tools/debugging/ddms.html<br />
<br />
== Other useful tips and tricks ==<br />
<br />
=== Tweaking UI prefs ===<br />
By default, all of these prefs are set to "-1" in Fennec, meaning they take the values listed below, which are maintained in Axis.java.<br />
<br />
Fractional values are specified in 1/1000th of a value; to specify a value of 0.3, write 300.<br />
<br />
Note: You need to restart Fennec after changing these values.<br />
<br />
{|<br />
! Pref !! Default value !! Description !!<br />
|-<br />
| ui.scrolling.friction_slow || 850 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is low.||<br />
|-<br />
| ui.scrolling.friction_fast || 970 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is high.||<br />
|-<br />
| ui.scrolling.velocity_threshold || 10 || Below this velocity (in pixels per frame), the friction changes from friction_fast to friction_slow.||<br />
|-<br />
| ui.scrolling.max_event_acceleration || 12 || The maximum velocity change factor between events, per ms, in 1000ths. ||<br />
|-<br />
| ui.scrolling.overscroll_decel_rate || 40 || The rate of deceleration when the surface has overscrolled, in 1000ths. ||<br />
|-<br />
| ui.scrolling.overscroll_snap_limit || 300 || The fraction of the surface which can be overscrolled before it must snap back, in 1000ths. ||<br />
|-<br />
| ui.scrolling.min_scrollable_distance || 500 || The minimum amount of space that must be present for an axis to be considered scrollable, in 1/1000ths of pixels. ||<br />
|-<br />
| gfx.displayport.strategy || 1 || The strategy we use to determine how display ports are calculated. 0 = fixed margin, 1 = velocity bias, 2 = dynamic resolution, 3 = no margins ||<br />
|-<br />
| gfx.displayport.strategy_fm.multiplier || 1500 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of each dimension of the viewport the displayport is sized to. ||<br />
|-<br />
| gfx.displayport.strategy_fm.danger_x || 100 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the width of the viewport the horizontal danger zone is set to.<br />
<br />
<br />
Danger zone is defined as the space at the edge of the viewport at which the viewport (and hence displayport) starts being changed.<br />
|-<br />
| gfx.displayport.strategy_fm.danger_y || 200 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the height of the viewport the vertical danger zone is set to. ||<br />
|-<br />
| gfx.displayport.strategy_vb.multiplier || 1500 || When gfx.displayport.strategy = 1 (velocity bias), the 1000th of each dimension of the viewport the displayport is sized to. ||<br />
|-<br />
| gfx.displayport.strategy_vb.threshold || 32 || When gfx.displayport.strategy = 1 (velocity bias), the threshold for velocity, in pixels/frame, when multiplied by the screen DPI. ||<br />
|-<br />
| gfx.displayport.strategy_vb.reverse_buffer || 200 || When gfx.displayport.strategy = 1 (velocity bias), the fraction of the buffer (in 1000ths) to be kept in the direction opposite the direction of the scroll. ||<br />
|-<br />
|}<br />
<br />
=== Refresh the JS cache ===<br />
<br />
XUL and JavaScript files (like browser.js) are cached for fast startup. If you change one of these files in your development build, the new file might not be picked up unless you also touch <code>toolkit/xre/nsAndroidStartup.cpp</code> and rebuild libxul. (See {{bug|695145}} for details.)<br />
<br />
=== killer script ===<br />
<br />
#!/bin/sh<br />
if [ $# -ne 1 ]<br />
then<br />
echo "usage: $0 packagename.of.your.activity"<br />
echo "for example:"<br />
echo " $0 org.mozilla.fennec"<br />
exit<br />
fi<br />
<br />
p=`adb shell ps | grep $1 | awk '{print $2}'`<br />
if [ "$p" = "" ];<br />
then<br />
echo "ERROR: That doesn't seem to be a running process. Please make sure your"<br />
echo "application has been started and that you are using the correct"<br />
echo "namespace argument."<br />
exit<br />
fi<br />
<br />
adb shell run-as $1 kill $p<br />
<br />
=== .gdbinit ===<br />
<br />
This is an example .gdbinit that uses the symbols from a locally built rom and automatically attaches to gdbserver. Note that putting a ''.gdbinit'' file inside a directory will make gdb load it thus you will not pollute your regular gdb init with those configurations. <br />
<br />
set solib-search-path /home/blassey/android/system/out/target/product/passion/symbols/system/bin:/home/blassey/android/system/out/target/product/passion/symbols/system/lib/:/home/blassey/src/ndk5-m-c/objdir-droid-dbg/dist/bin<br />
set solib-absolute-prefix /home/blassey/android/system/out/target/product/passion/symbols/system/lib/<br />
target remote localhost:12345<br />
<br />
=== Connecting Eclipse to Android Build tree ===<br />
<br />
Clone scripts and templates:<br />
hg clone http://hg.mozilla.org/users/romaxa_gmail.com/eclipse_mobile<br />
cd eclipse_mobile<br />
<br />
Modify mozconfig_values file, according to your build environment<br />
add absolute path to obj-build-dir and source dir, Ex:<br />
MOZOBJDIR=/home/romaxa/mozdev/mozillahg/mozilla-birch/objdir-droid<br />
MOZSRCDIR=/home/romaxa/mozdev/mozillahg/mozilla-birch<br />
<br />
Generate project content (build tree must be fully compiled and make -C objdir package commands performed):<br />
./create_projects.pl<br />
eclipse project will be created in current folder<br />
<br />
Create new project in Eclipse<br />
* File->New->Project<br />
* Android Project<br />
* Next, Create project from existing source<br />
* Select current folder as Location, Next<br />
* Select Build Target "Android 4.1 / API 16"<br />
* Next and Finish<br />
<br />
Press Run App button in order to perform first build,<br />
On first run, some ADT plugin fnctionality removing bin/App.apk and resource.ap_)<br />
Don't know how to teach eclipse don't do that, but it breaks installable package.<br />
So in order to fix that problem<br />
after first Run App, execute in project folder<br />
./fixup_links.pl<br />
It will update *.apk and *.ap_ symlinks<br />
<br />
Press Run App button again<br />
<br />
Try to setup breakpoint in onCreate() and press Debug App button.<br />
<br />
=== Rooting Android devices ===<br />
<br />
See [[Mobile/Fennec/Android/Rooting|Rooting Android Devices]].<br />
<br />
=== Bootstrapper.xpi: Testing JS chrome code changes without rebuilding ===<br />
<br />
Avoid those nasty compile times! Use the [https://groups.google.com/forum/?fromgroups=#!topic/mozilla.dev.platforms.mobile/jmxkOBREcO0 Bootstrapper extension]!</div>Dmosehttps://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android&diff=494457Mobile/Fennec/Android2012-12-18T05:54:59Z<p>Dmose: Suggest rooting before running mochitests.</p>
<hr />
<div>== Building Fennec ==<br />
<br />
Below are instructions for setting up a build environment and building Fennec on Linux (Ubuntu) and Mac OS X. It is not currently possible to compile Fennec on Windows. If you have a Windows PC, see these posts for a Linux virtual machine to compile Fennec:<br />
<br />
* http://blog.lassey.us/2010/07/09/android-development-vm/<br />
* http://blog.lassey.us/2011/07/22/updated-android-development-vm/<br />
<br />
Also, the [https://wiki.mozilla.org/Mobile/Fennec/Android_OtherBuildEnvs OtherBuildEnvs page] has some notes on a few other environment variations, so take a look at that as well if you have an environment or configuration that deviates from "normal".<br />
<br />
First follow the platform-specific instructions below to set up a build environment on your machine. You can optionally also upgrade to the latest Android NDK (currently version r8c). Once you have done that, follow the steps to get the source code, set up your mozconfig, and build Fennec.<br />
<br />
=== Linux ===<br />
<br />
==== Quick Script ====<br />
<br />
Here is a quick script to get set up. It is explained in more detail below.<br />
<br />
# ensure that the "partner" repositories are enabled in /etc/apt/sources.list, or sun-java6-jdk won't be found<br />
# In Ubuntu 11.10 Java has been removed from partner, but<br />
# can be downloaded from Oracle at <br />
# http://www.oracle.com/technetwork/java/javase/downloads/index.html<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk mercurial ccache<br />
sudo apt-get build-dep firefox<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-linux-x86.tar.bz2<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz<br />
tar -xzf android-sdk_r20.0.3-linux.tgz<br />
./android-sdk-linux/tools/android update sdk -u<br />
./android-sdk-linux/tools/android update adb<br />
<br />
If you're using a 64-bit Ubuntu install, you'll need ia32-libs to allow the toolchain binaries to run.<br />
<br />
sudo apt-get install ia32-libs<br />
<br />
If you're using 64-bit Fedora install<br />
<br />
yum install glibc.i686 ncurses-libs.i686 libstdc++.i686 zlib.i686<br />
<br />
==== Explained ====<br />
<br />
This section describes in greater detail all the dependencies and requirements of getting a working build environment on Linux.<br />
<br />
===== Install Java =====<br />
<br />
First install the Sun Java jdk6, which the Android SDK depends on. If you're on Ubuntu (pre-11.10), you'll need to [https://help.ubuntu.com/community/Repositories/Ubuntu#Adding_Canonical_Partner_Repositories enable the partners repo] to get it. Java 7 should work, although occasionally breaks (java 6 is what the buildbots use, so that's the "officially supported" one).<br />
<br />
# Ubuntu pre-11.10<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk<br />
sudo update-java-alternatives -s java-6-sun<br />
<br />
# Ubuntu 11.10 and after<br />
# Download Java from Oracle - go to http://www.oracle.com/technetwork/java/javase/downloads/index.html and<br />
# download the latest version of the JDK.<br />
# These instructions assume the file is called jdk-6u35-linux-x64.bin<br />
sudo mkdir /opt/java<br />
sudo mv ~/Downloads/jdk-6u35-linux-x64.bin<br />
sudo chmod +x ./jdk-6u35-linux-x64.bin<br />
sudo ./jdk-6u35-linux-x64.bin<br />
ln -f -s /opt/java/jdk1.6.0_35/bin/* /usr/local/bin/<br />
# something like sudo update-alternatives --install /usr/local/bin/java java /opt/java/jdk1.6.0_35/bin/ 1 is<br />
# close to the distro way of registering java<br />
<br />
If you're on Ubuntu 64-bit, you'll also want to install ia32-libs at this point (things like adb won't work until you do):<br />
<br />
apt-get install -y ia32-libs<br />
<br />
===== Install Gecko Requirements =====<br />
<br />
Then install the usual stuff needed for a firefox build.<br />
<br />
sudo apt-get install mercurial ccache<br />
sudo apt-get build-dep firefox<br />
<br />
===== Install Android NDK =====<br />
<br />
Download and extract the [http://developer.android.com/sdk/ndk/ Android NDK]. NDK revs 4-8 have been tested and are known to work. The automated builders currently use version r5c.<br />
<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-linux-x86.tar.bz2<br />
<br />
===== Install Android SDK =====<br />
<br />
You should just install the latest [http://developer.android.com/sdk/ Android SDK], we set the API level in our manifest files. The sdk download will take a while, make sure you have a decent internet connection and go get coffee, or maybe lunch.<br />
<br />
You will need SDK version at least 16.<br />
<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz<br />
tar -xzf android-sdk_r20.0.3-linux.tgz<br />
./android-sdk-linux/tools/android update sdk --no-ui<br />
./android-sdk-linux/tools/android update adb<br />
<br />
You will probably want to add the SDK's "tools" and "platform-tools" directory to the PATH environment variable in your shell, so that you can run [http://developer.android.com/guide/developing/tools/adb.html adb] and other tools easily. For example, if you installed the SDK in $HOME/opt, you could add the following line to the end of your .bashrc:<br />
<br />
export PATH=$PATH:$HOME/opt/android-sdk-linux/platform-tools:$HOME/opt/android-sdk-linux/tools<br />
<br />
=== Mac OS X ===<br />
<br />
To set up a build environment on Mac OS X, you first need to install XCode and a few supplementary build tools via a package manager. To do this, follow steps 1 and 2 of the [https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions/Mac_OS_X_Prerequisites Mac OS X Build Prerequisites page]. Once you have completed steps 1 and 2, come back here and continue with the instructions below.<br />
<br />
After installing XCode make sure you also have wget installed. If wget is not a recognized command in terminal follow these steps to install it:<br />
<br />
curl -O http://ftp.gnu.org/gnu/wget/wget-1.14.tar.gz<br />
tar -xzvf wget-1.14.tar.gz<br />
cd wget-1.14<br />
./configure --with-ssl=openssl<br />
make<br />
sudo make install<br />
which wget #Should output: /usr/local/bin/wget<br />
<br />
===== Install Gecko Requirements =====<br />
<br />
Then install the usual stuff needed for a firefox build.<br />
<br />
sudo apt-get install mercurial ccache<br />
sudo apt-get build-dep firefox<br />
<br />
===== Install Android NDK =====<br />
<br />
Download and extract the [http://developer.android.com/sdk/ndk/ Android NDK]. NDK revs 4-8 have been tested and are known to work. The automated builders currently use version r5c.<br />
<br />
wget http://dl.google.com/android/ndk/android-ndk-r5c-darwin-x86.tar.bz2<br />
tar -xjf android-ndk-r5c-darwin-x86.tar.bz2<br />
<br />
===== Install Android SDK =====<br />
<br />
You should just install the latest [http://developer.android.com/sdk/ Android SDK], we set the API level in our manifest files. The sdk download will take a while, make sure you have a decent internet connection and go get coffee, or maybe lunch.<br />
<br />
You will need SDK version at least 16.<br />
<br />
wget http://dl.google.com/android/android-sdk_r20.0.3-macosx.zip<br />
unzip android-sdk_r20.0.3-macosx.zip<br />
./android-sdk-macosx/tools/android update sdk --no-ui<br />
./android-sdk-macosx/tools/android update adb<br />
<br />
You will probably want to add the SDK's "tools" and "platform-tools" directory to the PATH environment variable in your shell, so that you can run [http://developer.android.com/guide/developing/tools/adb.html adb] and other tools easily. For example, if you installed the SDK in $HOME, you could add the following line to the end of your .bashrc:<br />
<br />
export PATH=$PATH:$HOME/android-sdk-macosx/platform-tools:$HOME/android-sdk-macosx/tools<br />
<br />
=== Optional: Using NDK r8c ===<br />
<br />
On some systems, linking libxul can takes several minutes. Using <i>gold</i> instead of <i>ld</i> can reduce this time (from around 7 minutes to a bit more than 1 minute on my machine&#160;; YMMV, on another machine, it gets from 25 seconds to 10, or from 2 minutes to 1 minute with all system caches dropped).<br />
<br />
To use gold, the best way is to just use the r8c Android NDK. You can also build gold yourself from binutils source and replace your existing ld binaries in the NDK folder to use gold. However it's simpler to just upgrade the NDK. There are currently no known issues with using the r8c NDK, except that you also need to remove the --enable-warnings-as-errors option in your mozconfig because the gcc-4.6 that comes with r8c is stricter with respect to warnings. There is some discussion in {{bug|769099}} about how r8c is awesome stuff and should be used by default on the buildbots, but that hasn't happened yet.<br />
<br />
To upgrade your NDK, download the NDK for [http://dl.google.com/android/ndk/android-ndk-r8c-darwin-x86.tar.bz2 Mac OS X] or [http://dl.google.com/android/ndk/android-ndk-r8c-linux-x86.tar.bz2 Linux] and unpack it. Then, update your mozconfig to point to the new NDK by setting the <code>--with-android-ndk</code> and <code>--with-android-toolchain</code> options in your mozconfig.<br />
<br />
For example, assuming that on a Mac OS X platform the NDK is unpacked into $HOME/android-ndk-r8c, you would need the following two lines in your mozconfig:<br />
<br />
ac_add_options --with-android-ndk="$HOME/android-ndk-r8c"<br />
ac_add_options --with-android-toolchain="$HOME/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86"<br />
<br />
=== Getting the source ===<br />
<br />
Once you have build tools set up, you should configure Mercurial as described [https://developer.mozilla.org/en-US/docs/Installing_Mercurial#Configuration here]. (It is not required, but highly recommended if you plan on touching the code in any way). Once you have done that, grab a clone of the repository:<br />
<br />
hg clone http://hg.mozilla.org/mozilla-central/ src<br />
<br />
=== Setup Fennec mozconfig ===<br />
<br />
The mozconfig file is what tells the mozilla build scripts how your build environment is set up, and sets various build options. To build scripts will read the mozconfig file from the $MOZCONFIG environment variable, if one is set, or the .mozconfig file in your src directory, if there is one. So you could do either this:<br />
<br />
cd src<br />
vim .mozconfig # put mozconfig here<br />
<br />
or this:<br />
<br />
cd some/random/folder<br />
vim my-fennec-mozconfig # put mozconfig here<br />
export MOZCONFIG=$PWD/my-fennec-mozconfig<br />
<br />
Here is an example mozconfig file for building Fennec, assuming you have followed the instructions above and are using version r5c of the NDK.<br />
<br />
<pre><br />
# Add the correct paths here:<br />
ac_add_options --with-android-ndk="$HOME/android-ndk-r5c"<br />
ac_add_options --with-android-sdk="$HOME/android-sdk-linux/platforms/android-16"<br />
ac_add_options --with-android-version=5<br />
<br />
# android options<br />
ac_add_options --enable-application=mobile/android<br />
ac_add_options --target=arm-linux-androideabi<br />
ac_add_options --with-ccache<br />
<br />
mk_add_options MOZ_OBJDIR=./objdir-droid<br />
mk_add_options MOZ_MAKE_FLAGS="-j9 -s"<br />
</pre><br />
<br />
Remember to use $HOME instead of ~ in the mozconfig, because ~ will not get expanded to the right path! If you are building on Mac OS X you will also need to add this:<br />
<br />
ac_add_options --disable-crashreporter<br />
<br />
because the crash reporter does not build properly on Mac OS X.<br />
<br />
If you want to build for armv6 add this:<br />
<br />
ac_add_options --with-arch=armv6<br />
<br />
You can also look at [http://mxr.mozilla.org/mozilla-central/source/mobile/android/config/mozconfigs/android/nightly the mozconfig used for official nightly builds].<br />
<br />
=== Building the code ===<br />
<br />
This will build (compile+link), package into apk, and deploy to the Android device. Therefore, before you start building [http://developer.android.com/guide/developing/device.html connect your Android device and enable USB debugging]<br />
<br />
cd src<br />
make -f client.mk build_and_deploy<br />
<br />
You can also just do:<br />
<br />
make -f client.mk<br />
make -C objdir-droid package<br />
<br />
to build and package the code into an APK. The APK file can be found in your objdir-droid/dist/ folder, and will be called something like fennec-18.0a1.en-US.android-arm.apk. You can install this APK to your device manually using "adb install". The name of the app that shows up on your phone will be "Fennec $USER" (where $USER is the username under which you built the code).<br />
<br />
== Hacking ==<br />
<br />
There is a bunch of useful information hanging off the page at [[Fennec/NativeUI]]. Below is some more useful information. Please add more stuff you think is useful to these sections!<br />
<br />
=== Finding relevant code ===<br />
<br />
The Fennec-specific code can be found in the following locations in the mozilla-central source tree:<br />
<br />
mobile/android/...<br />
widget/android/...<br />
<br />
Of particular interest to most new contributors will be:<br />
<br />
mobile/android/base/GeckoApp.java # the main android activity that starts up when you open Fennec<br />
mobile/android/chrome/content/browser.js # the main JS file that controls Gecko to make it do what we want<br />
<br />
You can also use the code-search tools at https://mxr.mozilla.org/mozilla-central/ and http://dxr.mozilla.org/ to search for relevant pieces of code.<br />
<br />
=== Partial Builds: Beware the startup cache! ===<br />
<br />
Developers who frequently update .js files sometimes like to manually only re-build the module they have updated. Partial builds for updated Javascript files may not work correctly if installed with adb install -r. This section describes the issue. For instance:<br />
<br />
make -C mobile/android && make package<br />
<br />
This should result in the APK being properly updated with the updated Javascript, BUT the change may not be reflected on the device because of complications arising from the startup cache. If the startup cache from a previous run of Fennec exists on the device and contains an old version of the recently updated Javascript, Fennec will likely use the old version.<br />
<br />
The startup cache is located in the profile, so deleting the profile ensures a new startup cache:<br />
<br />
adb uninstall org.mozilla.fennec<br />
adb install dist/fennec*.apk<br />
<br />
Note that:<br />
<br />
adb install -r dist/fennec*.apk<br />
<br />
retains the profile (and startup cache) -- so that's still a problem.<br />
<br />
None of this is a problem with full builds:<br />
<br />
make -f client.mk &amp;&amp; make package <br />
adb install -r dist/fennec*.apk<br />
<br />
works just fine, because the startup cache respects the buildid: If the buildid found in an APK is different from the buildid used when the startup cache was last updated, the startup cache is automatically deleted. A full build correctly updates the buildid -- a partial build may not.<br />
<br />
A possible way (***I have not conclusively tested this***) to do a partial build, retain an old profile, and ensure the buildid is updated and the startup cache is subsequently deleted is:<br />
<br />
make export && make -C mobile/android && make -C toolkit/xre && make package<br />
adb install -r dist/fennec*.apk<br />
<br />
Note that make export is necessary to update the buildid and make -C toolkit/xre is required to generate application.ini.h, trigger a rebuild of nsAndroidStartup.cpp, and update libxul.so.<br />
<br />
=== Multilocale builds ===<br />
<br />
* Create a directory, clone mozharness, copy the config file for easy editing/usage:<br />
<br />
mkdir multilocale<br />
cd multilocale<br />
hg clone http://hg.mozilla.org/build/mozharness<br />
cp mozharness/configs/multi_locale/standalone_mozilla-central.py myconfig.py<br />
<br />
* Edit myconfig.py<br />
** currently will check out m-c into a directory named 'mozilla-central' in this directory<br />
** currently assumes your mozconfig is in this directory and named 'mozconfig'<br />
** currently assumes your mozconfig sets your objdir name to 'objdir-droid'<br />
<br />
* pull mozilla-central<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py --pull-build-source<br />
# Alternately, you can hg clone http://hg.mozilla.org/mozilla-central<br />
<br />
* Run the script, which will create a multilocale apk<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py<br />
<br />
And you're done.<br />
<br />
* If you want to recompile or re-run the script, restore your objdir to en-US first!<br />
<br />
mozharness/scripts/multil10n.py --cfg myconfig.py --restore-objdir<br />
<br />
Also see [http://escapewindow.dreamwidth.org/234671.html this blog post] for more information.<br />
<br />
== Testing ==<br />
==== Device Managers ====<br />
Most test suites - mochitests, reftests, xpcshell tests, and others - use a "device manager" module to communicate with the remote device. There are two device manager implementations: ADB and SUT. <br />
<br />
The ADB device manager uses the adb command from the Android SDK to communicate with the remote device. To use the ADB device manager:<br />
* ensure the adb command is in your shell's PATH<br />
* set environment variable DM_TRANS=adb<br />
* do not set environment variable TEST_DEVICE, or set TEST_DEVICE= (unless you really need it)<br />
<br />
The SUT device manager uses TCP to communicate with a remote agent, which must be installed on the device. To use the SUT device manager:<br />
* ensure TCP connectivity between the local host and the remote device: check that they are on the same network and you can ping each from the other<br />
* ensure the SUT agent is installed and started on the remote device<br />
** the SUT agent APK is built alongside Fennec; just install <objdir-droid>/build/mobile/sutagent/android/sutAgentAndroid.apk<br />
** The agent should be configured to start automatically with your phone when it boots. To start it immediately from an adb shell do: `am start -n com.mozilla.SUTAgentAndroid/.SUTAgentAndroid -a android.intent.action.MAIN` <br />
* set environment variable DM_TRANS=sut<br />
* set environment variable TEST_DEVICE=<ip address of remote device -- displayed by SUT agent><br />
<br />
==== Host Builds (MOZ_HOST_BIN) ====<br />
Android mochitests and reftests require a parallel host build -- a build for the local host (desktop) environment. An environment variable, MOZ_HOST_BIN, must be set to point to that host build. MOZ_HOST_BIN is used to run xpcshell (for instance, to provide a simple web server), so the MOZ_HOST_BIN directory must contain xpcshell and all the shared libraries required by xpcshell. You can patch together these files from other sources, but the easiest way to get these is to download a xulrunner SDK build from here: http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk/<br />
<br />
You can also build desktop Firefox with a mozconfig might be as simple as:<br />
<br />
ac_add_options --enable-application=browser<br />
mk_add_options MOZ_OBJDIR=./objdir-x86<br />
<br />
Then execute:<br />
<br />
export MOZCONFIG=mozconfig.x86 <br />
make -f client.mk<br />
MOZ_HOST_BIN=objdir-x86/dist/bin<br />
ls -l $MOZ_HOST_BIN/xpcshell<br />
<br />
On Linux, the path to that build may also need to be in your LD_LIBRARY_PATH, unless your LD_LIBRARY_PATH contains ".":<br />
<br />
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.<br />
<br />
==== Test Directory ====<br />
We currently make the assumption that the device has a mounted sdcard when running tests (see {{bug|683895}}). If you cannot mount an sdcard, or if you are trying to run xpcshell tests, run:<br />
<br />
mkdir /data/local/tests<br />
<br />
(If you are using a Nexus S, the trick to making your device mountable is to not allow USB Storage between your computer and your device. When you plug in your device to your computer, simply don't click the button to allow this on your device and you should be able to run your tests.)<br />
<br />
=== Reftests ===<br />
<br />
MOZ_HOST_BIN="<abspath-to-objdir-x86>/dist/bin/" TEST_PATH=<path> make -C <objdir-droid> reftest-remote<br />
<br />
For devices with screens too small you will see the error |can't drawWindow remote content|. You can ignore that resolution requirement by using the |ignore-window-size| options. NOTE: This may lead to false negative/positives.<br />
<br />
EXTRA_TEST_ARGS="--ignore-window-size"<br />
<br />
Example TEST_PATH:<br />
<br />
TEST_PATH=layout/reftests/reftest-sanity/reftest.list<br />
<br />
Notes:<br />
<br />
* If TEST_PATH is not specified, *all* reftests will be attempted: This usually fails/hangs and is not recommended. Specify a TEST_PATH or use the --total-chunks and --this-chunk arguments to reduce the number of tests executed.<br />
* sut recommended. Test results displayed and saved to reftest.log and reftest-remote.log.<br />
* adb works, but reports errors. Test results are not displayed but saved to reftest.log (additional diagnostics in reftest-remote.log).<br />
<br />
=== Mochitests ===<br />
<br />
MOZ_HOST_BIN="<abspath-to-objdir-x86>/dist/bin/" TEST_PATH=<path> \ <br />
make -C <objdir-droid> mochitest-remote<br />
<br />
Note that as of this writing (September 2011) many mochitests will not complete successfully. Try setting your TEST_PATH to "dom/tests/mochitest/dom-level1-core" or "content/smil/test" if you want to restrict yourself to a subset of tests that are known to pass.<br />
<br />
TEST_PATH can be:<br />
content/smil/test<br />
content/xml/document/test<br />
content/xslt/tests/mochitest<br />
dom/src/json/test<br />
dom/src/jsurl/test<br />
dom/tests/mochitest/dom-level0<br />
dom/tests/mochitest/dom-level1-core<br />
dom/tests/mochitest/dom-level2-core<br />
dom/tests/mochitest/ajax/mochikit<br />
dom/tests/mochitest/ajax/scriptaculous<br />
dom/tests/mochitest/ajax/jquery<br />
dom/tests/mochitest/dom-level2-html<br />
Harness_sanity<br />
editor/composer/test<br />
intl/uconv/tests<br />
dom/tests/mochitest/orientation<br />
dom/tests/mochitest/storageevent<br />
layout/xul/test<br />
modules/libjar/test/mochitest<br />
layout/inspector/tests <br />
toolkit/xre/test<br />
toolkit/components/microformats/tests<br />
MochiKit-1.4.2/tests<br />
parser/htmlparser/tests/mochitest<br />
js<br />
<br />
Notes:<br />
* A rooted device is required to run the unit tests using the SUT Agent. Use ADB for unrooted devices.<br />
* Running mochitests unrooted seems to still have some problems; for better reliability, rooting your device before using them is recommended.<br />
<br />
=== Robotium ===<br />
<br />
The Robotium / Robocop test suite verifies UI behavior in native Fennec. <br />
<br />
Build and install native Fennec, then execute the mochitest-robotium make target.<br />
<br />
make -f client.mk<br />
cd <objdir><br />
make package<br />
adb install -r dist/fennec-*.apk<br />
MOZ_HOST_BIN="<abspath-to-objdir-x86>/dist/bin/" make mochitest-robotium<br />
<br />
More info at https://wiki.mozilla.org/Auto-tools/Projects/Robocop.<br />
<br />
Notes:<br />
* A rooted device is NOT required.<br />
* ADB device manager is used by default; SUT is also supported.<br />
* MOZ_HOST_BIN is used to launch xpcshell on the desktop to provide a web server.<br />
* Use TEST_PATH=<test-name> to run just one test at a time.<br />
* /mnt/sdcard must exist and be writable.<br />
<br />
=== xpcshell ===<br />
<br />
This is still slightly broken, work is ongoing in {{Bug|799863}} to repair things.<br />
<br />
To prepare your device for xpcshell tests:<br />
<br />
adb shell mkdir /data/local/tests<br />
<br />
Also be sure you have successfully built Fennec and generated an APK, as described above.<br />
<br />
To run all tests referenced by the master xpcshell manifest:<br />
<br />
cd <objdir-droid><br />
make xpcshell-tests-remote<br />
<br />
To run a subset of tests in the specified directory:<br />
<br />
make -C <test-directory> xpcshell-tests-remote<br />
<br />
Once either of the xpcshell-tests-remote commands has completed successfully, all test files have been copied to device, and it is then possible to run a single test quickly, without setup:<br />
<br />
make SOLO_FILE=<test-file> -C <test-directory> check-one-remote<br />
<br />
You can also skip setup for a larger test run (be careful / be sure you know that's what you want!):<br />
<br />
export EXTRA_TEST_ARGS="--noSetup"<br />
make -C <test-directory> xpcshell-tests-remote<br />
<br />
Notes:<br />
* A rooted device IS required.<br />
* ADB device manager is used by default. SUT is NOT supported at this time -- it does not allow for a /data/local test root. See {{bug|810347}}.<br />
* The test root directory cannot be on /sdcard -- it must be /data/local so that +x permissions can be set on xpcshell.<br />
* Setup can take a long time! It goes much faster if unzip is available on the remote device; if your device does not have unzip, try installing busybox.<br />
<br />
=== browser-chrome ===<br />
<br />
Before you run tests, you will need to make sure you have packaged the tests in your object dir:<br />
<br />
make -C <objdir-droid> package-tests<br />
<br />
There is currently no special make command to build and run browser-chrome tests, but it should be possible to make them run by calling:<br />
<br />
cd <objdir-droid>/_tests/testing/mochitest<br />
python runtestsremote.py --dm_trans=adb --test-path=mobile --browser-chrome --deviceIP=1.2.3.4 <br />
--app=org.mozilla.fennec_$USER --xre-path=<objdir_x86>/dist/bin/<br />
<br />
=== talos ===<br />
<br />
*NOTE: this requires python 2.5 or greater (tested up to 2.7)<br />
<br />
See https://wiki.mozilla.org/Buildbot/Talos<br />
<br />
This is 100% out of band from mozilla-central (same for desktop also).<br />
<br />
hg clone http://hg.mozilla.org/build/talos talos<br />
cd talos<br />
python INSTALL.py<br />
. bin/activate<br />
cd talos<br />
<br />
Run these commands to check out the talos dependencies (assuming you are already in the "talos/talos" directory):<br />
<br />
cd page_load_test<br />
wget http://people.mozilla.org/~jmaher/mobile_tp4.zip<br />
unzip mobile_tp4.zip<br />
<br />
Configure a talos profile. You can do this via adb or [http://people.mozilla.com/~bmoss/SUTAgent/ SUTAgent] - if you want to use adb make sure you have rooted your device such that "adb shell" goes directly into a root shell. If you want to use adb to communicate with the device remotely, do something like this:<br />
<br />
talos -v -e org.mozilla.fennec \<br />
--develop \<br />
--activeTests tprovider \<br />
--output trobo.yml \<br />
--remotePort -1 \<br />
--remoteDevice 1.2.3.4 \<br />
[--fennecIDs <abs-path-to-objdir>/dist/fennec_ids.txt]<br />
<br />
If you want to use [http://people.mozilla.com/~bmoss/SUTAgent/ SUTAgent] to communicate with the device, do something like this:<br />
<br />
talos -v -e org.mozilla.fennec \<br />
--develop \<br />
--activeTests tsvg \<br />
--results_url file://${PWD}/tsvg.txt \<br />
--noChrome \<br />
--remoteDevice <ip of your sutagent> \<br />
[--fennecIDs <abs-path-to-objdir>/dist/fennec_ids.txt]<br />
<br />
SUTAgent will not be able to read the application.ini on the device, so you will need to copy it. We highly recommend pulling the application.ini from the .apk and copying it to the talos/talos/remoteapp.ini file.<br />
<br />
For Robocop based tests (tcheck, tcheck2, tcheck3, tprovider, etc...), we need to use the --fennecIDs flag to pass in the generated fennec_ids.txt file from the build you are testing. This file is generated during build time and has to match the fennec.apk and robocop.apk file. When this flag is used, we copy fennec_ids.txt and robotium.config (generated during configuration time) to the device and use those to run Robocop. If you are running ts, tp4, tsvg, or other traditional talos tests, there is no need for the --fennecIDs flag.<br />
<br />
Unless two applications are signed with the same key they cannot read each others' /data/data directories, so SUTAgent cannot read org.mozilla.fennec's data directory.<br />
You can extract it from the fennec .apk or get it from adb from e.g. /data/data/org.mozilla.fennec/application.ini<br />
<br />
shell@android:/ $ su<br />
shell@android:/ # cat /data/data/org.mozilla.fennec/application.ini<br />
[App]<br />
Vendor=Mozilla<br />
Name=Fennec<br />
Version=10.0a1<br />
BuildID=20111031031100<br />
SourceRepository=http://hg.mozilla.org/mozilla-central<br />
SourceStamp=04b4ea333800<br />
ID={a23983c0-fd0e-11dc-95ff-0800200c9a66}<br />
<br />
[Gecko]<br />
MinVersion=1.9.2b5pre<br />
MaxVersion=10.0a1<br />
<br />
[XRE]<br />
EnableExtensionManager=1<br />
<br />
[Crash Reporter]<br />
Enabled=1<br />
ServerURL=https://crash-reports.mozilla.com/submit<br />
<br />
'''Note''': As of this writing (Sept 27, 2011), the tgfx pageset does not currently work (it isn't run on the desktop either). Don't try it. :)<br />
<br />
'''Note''': When running robocop-based talos tests (tcheck, etc), be aware that some robocop-required files are not updated by Talos. For example, robocop.apk is not installed. Your best bet is to run mochitest-robotium first to make sure everything is up to date, or manually install robocop.apk from the dist folder.<br />
<br />
Aside: For a quick-and-dirty hacky way to run robocop-talos tests locally, see [[Mobile/Fennec/Android/LocalRoboTalos]]<br />
<br />
=== S1/S2 Automation ===<br />
These tests start Fennec with a URL and measure the time to throbber start, time to throbber stop, and drawing end times. <br />
<br />
S1/S2 graphs can be viewed at: http://mrcote.info/phonedash/#/<br />
<br />
Manual run instructions can be found at: https://etherpad.mozilla.org/fennec-perf-ts-take2<br />
<br />
See also: https://wiki.mozilla.org/Mobile/Performance/S1S2-Tests<br />
<br />
=== Eideticker ===<br />
Eideticker measures perceived Firefox performance by video capturing automated browser interactions.<br />
<br />
Eideticker graphs can be viewed at: http://wrla.ch/eideticker/dashboard/<br />
<br />
See also: http://wrla.ch/blog/2011/11/measuring-what-the-user-sees/ and http://wrla.ch/blog/2012/03/announcing-the-eideticker-mobile-performance-dashboard/.<br />
<br />
=== Trouble-shooting testing problems ===<br />
<br />
* Does your mozconfig contain "ac_add_options --disable-tests"?<br />
** If so, you will see something like:<br />
<pre><br />
make: *** No rule to make target <your-test-target>. Stop.<br />
</pre><br />
* Is adb in your $PATH?<br />
* Is your device connected? Does it appear in the output from "adb devices"?<br />
* Can you run adb shell?<br />
* If running xpcshell, did you create /data/local/tests?<br />
* If running "make check-one-remote", did you first setup the device with "make xpcshell-tests-remote"?<br />
<br />
== Debugging ==<br />
<br />
=== Using logcat ===<br />
<br />
[http://developer.android.com/guide/developing/tools/logcat.html logcat] is a tool that is going to show you some logs prompted by the device. It might be a good help if you don't want to or can't run gdb. You can use it by running this command: <br />
<br />
adb logcat -v time<br />
<br />
You can make things appear in logcat using printf_stderr. With debug builds, NS_WARNING, NS_ERROR and NS_ASSERTIONS will show up in logcat. If you're trying to debug something, you may wish to pipe the logcat output through grep to filter out irrelevant things (most Fennec-related output will be viewable by "adb logcat | grep Gecko"), but remember that when attaching log output to a bug you should include unfiltered output as there may be relevant log entries under other tags.<br />
<br />
==== Using aLogCat ====<br />
<br />
<b>Note:</b> aLogCat (and other logcat apps) do not support Jelly Bean (4.1) and above. It seems like the only way to get these apps to work on those versions is to root the device, which, although fulfilling, is probably more work than just using <code>adb logcat</code>.<br />
<br />
If you don't have the Android SDK installed, you can still extract logs using an application called aLogCat. Install it from the Android Market. Use it to capture logs and attach the logs to bugs.<br />
<br />
https://market.android.com/details?id=org.jtb.alogcat&hl=en<br />
<br />
Once you have alogcat installed, just use Fennec as you would normally. Upon encountering a bug or issue, start the aLogcat app (as soon as possible after seeing the Fennec issue) and select "Share" or "Save" from the menu to send it via email or save it to the SD card. The log can then be attached to a bug or sent to a developer. As with adb logcat, it is better to have a log with timestamps than without timestamps. To enable timestamps in the log, select "Preferences" from the aLogcat menu, and change the "Format?" option to "Time".<br />
<br />
If you need to, you can search for some kinds of Fennec-related output by using the "Filter" menu item and entering "Gecko". However, when submitting logs for bug reports, please make sure you clear the filter and include all of the available log data.<br />
<br />
==== JavaScript dump() ====<br />
<br />
To use the dump() function in JavaScript to write to the log:<br />
<br />
# Go to about:config and set browser.dom.window.dump.enabled to "true"<br />
# Run the following ADB commands:<br />
<br />
adb shell stop<br />
adb shell setprop log.redirect-stdio true<br />
adb shell start<br />
<br />
=== Using nVidia GDB ===<br />
<br />
Nvidia's gdb is better than most other gdbs: http://developer.download.nvidia.com/tegra/files/tegra-gdb-20100902.zip .<br />
Even so, you probably want to use JimDB instead of Nvidia's gdb ...<br />
<br />
=== Using JimDB ===<br />
* jchen has been working on a better Android gdb ('jimdb'). [https://github.com/darchons/android-gdb source], and [[Mobile/Fennec/Android/GDB|build instructions]]. For best results, rebuild everything.<br />
* [http://www.jnchen.com/_media/projects/mozilla/moz-gdb.tar.bz2 Prebuilt binaries] are available but problems with them have been reported.<br />
* [http://people.mozilla.com/~bgirard/moz-gdb-darwin-prebuilt-2012-10.tar.gz October 2012 Darwin prebuilt]<br />
** The link to the prebuilt binaries seems broken, as of March 30 2012 (bjacob).<br />
* JimDB:<br />
** has most fixes from NDK gdb<br />
** integrates Android libthread_db (fixed dougt's problem debugging threads)<br />
** has Python scripting support<br />
** [https://github.com/darchons/android-gdbutils couple of existing Python scripts] (or if using prebuilt binaries above, just run 'git pull' under the 'utils' directory)<br />
*** feninit is a tool to initialize the GDB environment (support for multiple devices, multiple object directories; launches Fennec, pulls libraries, sets paths, and attaches gdbserver automatically)<br />
*** tracebt is a WIP stack unwinder that traces instructions to find stack frames<br />
*** idea for another tool to parse and integrate logcat into gdb<br />
*** other ideas welcome!<br />
* see [[Mobile/Fennec/Android/GDB]] for installation instructions<br />
<br />
Once JimDB is installed, just run its gdb executable. This is will take care of everything (it will start gdbserver on the device, start Fennec, and start gdb on your computer):<br />
<br />
./moz-gdb/bin/gdb<br />
<br />
=== Using Debug Intent ===<br />
<br />
'''Note: this is not useful with JimDB. If you want to use JimDB, just start it.'''<br />
<br />
In order to attach before things get running, launch with: <br />
<br />
adb shell am start -a org.mozilla.gecko.DEBUG -n org.mozilla.fennec_foobar/.App<br />
<br />
(Replace foobar by your username)<br />
<br />
and just click launch once gdb is attached. If you need to debug a crash that happens before XRE_Main is called, the patch on {{bug|572247}} may be useful. <br />
<br />
this script [http://dump.lassey.us/debug.sh] will attach gdbserver for you<br />
<br />
=== Getting dalvik java stack dumps using gdb ===<br />
<br />
(gdb) call handleSigQuit()<br />
<br />
this will dump a stack trace to gDvm.stackTraceFile which defaults to "/data/anr/traces.txt"<br />
<br />
Note: this will only work if you have symbols for dalvik. (It may be possible to get the address for handleSigQuit by reading<br />
the symbol table using sigaction.)<br />
<br />
Note: deleting /data/anr/traces.txt will cause this method to stop working. You can fix it by recreating the file with $ echo "" > traces.txt<br />
<br />
=== Debugging with jdb ===<br />
<br />
Inspired by<br />
http://asantoso.wordpress.com/2009/09/26/using-jdb-with-adb-to-debugging-of-android-app-on-a-real-device/<br />
<br />
After staring fennec with jimdb the following seems to work at least a little.<br />
<br />
$ adb jdwp # lists the pids of processes hosting jdwp<br />
5543<br />
$ adb -d forward tcp:8686 jdwp:5543<br />
$ jdb -J-Duser.home=. -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8686 -sourcepath ~/mozilla/maple/mobile/android/base/<br />
<br />
You can also use eclipse for debugging in a similar way by setting up for debugging "Remote Java application".<br />
<br />
This doesn't seem to work for me in Ubuntu 12.04 anymore.<br />
<br />
=== Debugging with eclipse ===<br />
<br />
You need to find the PID of your fennec process. Forward it to a local TCP socket as in "Debugging with jdb."<br />
<br />
In Eclipse switch to the debug perspective. Go to Run > Debug configurations... Remote Java Application. Change the port to the TCP port you specified in your adb command. Under Source, navigate to your checkout, then into mobile/android.<br />
<br />
Eclipse looks for source code in a specific location. You need to create the directory hierarchy:<br />
<code><br />
mobile<br />
/android<br />
/org<br />
mozilla/<br />
gecko -> ../../base</code><br />
<br />
That is, in mozilla-central/mobile/android, create org/mozilla, and put the symlink gecko pointing to mozilla-central/mobile/android/base.<br />
<br />
You may also want to add more debugging information and can do that like this:<br />
diff --git a/config/android-common.mk b/config/android-common.mk<br />
index 4591239..a47726a 100644<br />
--- a/config/android-common.mk<br />
+++ b/config/android-common.mk<br />
@@ -70,6 +70,6 @@ JAVAC_FLAGS = \<br />
-classpath $(JAVA_CLASSPATH) \<br />
-bootclasspath $(JAVA_BOOTCLASSPATH) \<br />
-encoding UTF8 \<br />
- -g:source,lines \<br />
+ -g:source,lines,vars \<br />
-Werror \<br />
$(NULL)<br />
<br />
=== Arguments and Environment Variables ===<br />
<br />
If you need to set an environment variable at run time, append '''--es env# VAR=VAL''' to your activity manager command where # is the ordered number of variables for example: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 VAR=val --es env1 FOO=bar<br />
<br />
If you need to pass arguments at run time, append '''--es args "<your-args>"''' to your activity manager command. For example, to launch with a specific profile: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es args "--profile /mnt/sdcard/myprofile"<br />
<br />
To launch with a specific URL, use the am -d option to set the intent's data URI:<br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App -d 'http://www.mozilla.org'<br />
<br />
=== PR Logging ===<br />
<br />
You can use the env vars as described above to enable NSPR logging:<br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 NSPR_LOG_MODULES=all:5 --es env1 NSPR_LOG_FILE=/mnt/sdcard/log.txt<br />
<br />
If no file is specified, logging is directed to the android logs: <br />
<br />
adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 NSPR_LOG_MODULES=all:5<br />
<br />
Look for lines marked "PRLog" in the adb logcat output.<br />
<br />
=== debugging without rooting ===<br />
<br />
with Froyo you can debug without rooting your phone. Instructions are below. See also [[Mobile/Fennec/Android/GDBNoRoot|Fennec/Android/GDBNoRoot]] for another guide on how to do this.<br> <br />
<br />
First thing, to make this work with the nvidia gdb (which I found more reliable than the android r3 gdb) you need to modify install.sh and debug.sh. <br />
<br />
first, change the location where install.sh copies gdbserver to somewhere writable by a non-root process. I used /data/local. Be sure to update that both in the push command and the chmod command. <br />
<br />
second, update debug.sh with the new location of gdbserver. <br />
<br />
finally, you'll need to add run-as $2 to the adb shell command that launches gdbserver. In the end you should have: install.sh: <br />
<br />
#!/bin/sh<br />
mkdir lib<br />
adb push prebuilt/gdbserver /data/local<br />
adb shell chmod 755 /data/local/gdbserver<br />
for file in $(adb shell ls /system/lib | tr "\n" " " | tr "\r" " "); do<br />
adb pull /system/lib/$file lib<br />
done<br />
adb pull /system/bin/app_process lib <br />
<br />
The above will miss some vendor drivers, you can use busybox to find all shared libraries<br />
<br />
for file in $(adb shell /data/local/busybox find / -name "*.so" | tr "\n" " " | tr "\r" " "); do adb pull /$file lib_unlock_nexus/; done<br />
<br />
debug.sh: <br />
<br />
#!/bin/sh<br />
if [ $# -ne 2 ]<br />
then<br />
echo "usage: $0 /path/to/your/library.so packagename.of.your.activity"<br />
echo "for example:"<br />
echo " $0 /code/mydemo/libs/armeabi/libmydemo.so com.nvidia.devtech.mydemo"<br />
exit<br />
fi<br />
<br />
if [&nbsp;! -f $1 ]<br />
then<br />
echo "ERROR: That library file doesn't exist"<br />
exit<br />
fi<br />
<br />
cp $1 lib<br />
<br />
p=`adb shell ps | grep $2 | awk '{print $2}'`<br />
if [ "$p" = "" ];<br />
then<br />
echo "ERROR: That doesn't seem to be a running process. Please make sure your"<br />
echo "application has been started and that you are using the correct"<br />
echo "namespace argument."<br />
exit<br />
fi<br />
<br />
adb forward tcp:12345 tcp:12345<br />
adb shell run-as $2 /data/local/gdbserver --attach&nbsp;:12345 $p<br />
<br />
=== Attaching GDB ===<br />
Assuming you have the nvidia gdb at the top of your home directory and the app_process binary in the current working directory.<br />
~/nvidia-gdb/prebuilt/linux-x86/arm-eabi-gdb ./app_process<br />
<br />
=== Reading back the framebuffer ===<br />
If you need to verify what is in the back buffer at a particular time, you can cleverly call functions from gdb to allocate memory, read back, and write that to disk.<br />
<br />
You need to know the size of your framebuffer a priori; in this case, it's 480x699.<br />
<br />
You also need to know what the GL enum values are, because unless you compile with -ggdb, you don't have #defines available to you in the debugger. Very helpful information: GL_RGBA = 0x1908, GL_UNSIGNED_BYTE = 0x1401. The rest you can find in gfx/gl/GLDefs.h.<br />
<br />
You '''should''' be able to call glReadPixels directly, but in my experience that causes Fennec to crash. However, if you have a GLContext* lying around, as you often do, you can work around that problem.<br />
<br />
<pre>(gdb) set $m = (int*)malloc(480*699*4)<br />
(gdb) call aManager->mGLContext.mRawPtr->fReadPixels(0, 0, 480, 699, 0x1908, 0x1401, (void*)$m)<br />
(gdb) set $f = fopen("/sdcard/outputfile", "wb+")<br />
(gdb) call fwrite($m, 1, 480*699*4, $f)<br />
$7 = 1342080<br />
(gdb) call fclose($f)<br />
$8 = 0</pre><br />
<br />
Now there is a file called /sdcard/outputfile that you can adb pull. But since it's just raw RGBA values, you need to be able to wrap that in PNG headers to display it. [https://github.com/jrmuizel/minpng/blob/master/minpng.h Jeff Muizelaar wrote a header called minpng.h that you can use to do so.]<br />
<br />
Get Jeff's minpng.h, and put it in a directory along with a driver c program:<br />
<br />
<pre>#include "minpng.h"<br />
<br />
int main(int argc, char* argv[])<br />
{<br />
FILE* f = fopen(argv[1], "rb");<br />
int w = atoi(argv[2]);<br />
int h = atoi(argv[3]);<br />
char* d = (char*) malloc(w * h * 4);<br />
fread(d, w * h * 4, 1, f);<br />
fclose(f);<br />
write_png(argv[4], d, w, h);<br />
}</pre><br />
<br />
Compile and run:<br />
<pre>$ gcc -o minpng minpng.c<br />
$ ./minpng outputfile 480 699 output.png<br />
</pre><br />
=== Using Rendertrace (Maple) ===<br />
<br />
Rendertrace is a utility that will dump layer position and timing information (such as drawing, upload) to the console. This information can pasted into the rendertrace web front end to visualize the layer position and event timeline. This will let you understand where you're gecko is spending its time and why were checkerboarding.<br />
<br />
To enable go in 'gfx/layers/RenderTrace.h' and uncomment '#define MOZ_RENDERTRACE'. Rebuild and run 'adb logcat | grep RENDERTRACE', paste the result in http://people.mozilla.org/~bgirard/rendertrace.html and hit 'reload'. For details talk to BenWa.<br />
<br />
=== Using apitrace ===<br />
<br />
Apitrace is a tool for tracing GL/EGL calls for debugging purposes. It basically uses an interim shared library called libapitrace that contains shadow gl* and egl* functions, which then get logged and then passed through to the real driver.<br />
<br />
<br />
Use apitrace from https://github.com/apitrace/apitrace to build for desktop and android.<br />
<br />
<pre><br />
apt-get install libegl1-mesa-dev libgles1-mesa-dev libgles2-mesa-dev libqt4-dev cmake<br />
git clone https://github.com/gw280/apitrace.git<br />
cd apitrace<br />
<br />
# Build for Android<br />
export ANDROID_NDK=/path/to/your/ndk<br />
cmake -DCMAKE_TOOLCHAIN_FILE=android/android.toolchain.cmake -DANDROID_API_LEVEL=9 -Bbuild-android -H.<br />
make -C build-android -j8<br />
<br />
# Build for desktop<br />
cmake -H. -Bbuild<br />
make -C build -j8<br />
<br />
export EGL_SOFTWARE=true<br />
./build/eglretrace -v /path/to/your/apitrace_log.trace<br />
</pre><br />
<br />
The Android build will create egltrace.so in build-android/wrappers, which you can then push to your device to /data/local:<br />
<br />
<pre><br />
adb push build-android/wrappers/egltrace.so /data/local<br />
</pre><br />
<br />
Restarting Fennec will cause it to load the apitrace library and the apitrace log will be saved to /data/data/org.mozilla.fennec_username/firefox.trace<br />
<br />
You can then adb pull /data/data/org.mozilla.fennec_username/firefox.trace and analyse it on your desktop.<br />
<br />
You can also use qapitrace as a GUI to inspect your trace files. (be sure to switch qapitrace to the EGL api using the options dialog)<br />
<br />
These instructions provide a trace that does not include the Java GL code. To get traces including java code is more complicated. You need to use<br />
the patch from this bug https://bugzilla.mozilla.org/show_bug.cgi?id=749859 and this version of https://github.com/ideak/apitrace/tree/dev. Further, you'll need to build your own image/modify the current one to replace /init.rc. You also need to disable hardware acceleration of the UI (https://bug746703.bugzilla.mozilla.org/attachment.cgi?id=619009) Ask jrmuizel for more information if you want to do this.<br />
<br />
=== Profiling ===<br />
<br />
See https://wiki.mozilla.org/Mobile/Fennec/Android/Profiling.<br />
<br />
=== Debugging Java code with DDMS ===<br />
<br />
See http://developer.android.com/tools/debugging/ddms.html<br />
<br />
== Other useful tips and tricks ==<br />
<br />
=== Tweaking UI prefs ===<br />
By default, all of these prefs are set to "-1" in Fennec, meaning they take the values listed below, which are maintained in Axis.java.<br />
<br />
Fractional values are specified in 1/1000th of a value; to specify a value of 0.3, write 300.<br />
<br />
Note: You need to restart Fennec after changing these values.<br />
<br />
{|<br />
! Pref !! Default value !! Description !!<br />
|-<br />
| ui.scrolling.friction_slow || 850 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is low.||<br />
|-<br />
| ui.scrolling.friction_fast || 970 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is high.||<br />
|-<br />
| ui.scrolling.velocity_threshold || 10 || Below this velocity (in pixels per frame), the friction changes from friction_fast to friction_slow.||<br />
|-<br />
| ui.scrolling.max_event_acceleration || 12 || The maximum velocity change factor between events, per ms, in 1000ths. ||<br />
|-<br />
| ui.scrolling.overscroll_decel_rate || 40 || The rate of deceleration when the surface has overscrolled, in 1000ths. ||<br />
|-<br />
| ui.scrolling.overscroll_snap_limit || 300 || The fraction of the surface which can be overscrolled before it must snap back, in 1000ths. ||<br />
|-<br />
| ui.scrolling.min_scrollable_distance || 500 || The minimum amount of space that must be present for an axis to be considered scrollable, in 1/1000ths of pixels. ||<br />
|-<br />
| gfx.displayport.strategy || 1 || The strategy we use to determine how display ports are calculated. 0 = fixed margin, 1 = velocity bias, 2 = dynamic resolution, 3 = no margins ||<br />
|-<br />
| gfx.displayport.strategy_fm.multiplier || 1500 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of each dimension of the viewport the displayport is sized to. ||<br />
|-<br />
| gfx.displayport.strategy_fm.danger_x || 100 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the width of the viewport the horizontal danger zone is set to.<br />
<br />
<br />
Danger zone is defined as the space at the edge of the viewport at which the viewport (and hence displayport) starts being changed.<br />
|-<br />
| gfx.displayport.strategy_fm.danger_y || 200 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the height of the viewport the vertical danger zone is set to. ||<br />
|-<br />
| gfx.displayport.strategy_vb.multiplier || 1500 || When gfx.displayport.strategy = 1 (velocity bias), the 1000th of each dimension of the viewport the displayport is sized to. ||<br />
|-<br />
| gfx.displayport.strategy_vb.threshold || 32 || When gfx.displayport.strategy = 1 (velocity bias), the threshold for velocity, in pixels/frame, when multiplied by the screen DPI. ||<br />
|-<br />
| gfx.displayport.strategy_vb.reverse_buffer || 200 || When gfx.displayport.strategy = 1 (velocity bias), the fraction of the buffer (in 1000ths) to be kept in the direction opposite the direction of the scroll. ||<br />
|-<br />
|}<br />
<br />
=== Refresh the JS cache ===<br />
<br />
XUL and JavaScript files (like browser.js) are cached for fast startup. If you change one of these files in your development build, the new file might not be picked up unless you also touch <code>toolkit/xre/nsAndroidStartup.cpp</code> and rebuild libxul. (See {{bug|695145}} for details.)<br />
<br />
=== killer script ===<br />
<br />
#!/bin/sh<br />
if [ $# -ne 1 ]<br />
then<br />
echo "usage: $0 packagename.of.your.activity"<br />
echo "for example:"<br />
echo " $0 org.mozilla.fennec"<br />
exit<br />
fi<br />
<br />
p=`adb shell ps | grep $1 | awk '{print $2}'`<br />
if [ "$p" = "" ];<br />
then<br />
echo "ERROR: That doesn't seem to be a running process. Please make sure your"<br />
echo "application has been started and that you are using the correct"<br />
echo "namespace argument."<br />
exit<br />
fi<br />
<br />
adb shell run-as $1 kill $p<br />
<br />
=== .gdbinit ===<br />
<br />
This is an example .gdbinit that uses the symbols from a locally built rom and automatically attaches to gdbserver. Note that putting a ''.gdbinit'' file inside a directory will make gdb load it thus you will not pollute your regular gdb init with those configurations. <br />
<br />
set solib-search-path /home/blassey/android/system/out/target/product/passion/symbols/system/bin:/home/blassey/android/system/out/target/product/passion/symbols/system/lib/:/home/blassey/src/ndk5-m-c/objdir-droid-dbg/dist/bin<br />
set solib-absolute-prefix /home/blassey/android/system/out/target/product/passion/symbols/system/lib/<br />
target remote localhost:12345<br />
<br />
=== Connecting Eclipse to Android Build tree ===<br />
<br />
Clone scripts and templates:<br />
hg clone http://hg.mozilla.org/users/romaxa_gmail.com/eclipse_mobile<br />
cd eclipse_mobile<br />
<br />
Modify mozconfig_values file, according to your build environment<br />
add absolute path to obj-build-dir and source dir, Ex:<br />
MOZOBJDIR=/home/romaxa/mozdev/mozillahg/mozilla-birch/objdir-droid<br />
MOZSRCDIR=/home/romaxa/mozdev/mozillahg/mozilla-birch<br />
<br />
Generate project content (build tree must be fully compiled and make -C objdir package commands performed):<br />
./create_projects.pl<br />
eclipse project will be created in current folder<br />
<br />
Create new project in Eclipse<br />
* File->New->Project<br />
* Android Project<br />
* Next, Create project from existing source<br />
* Select current folder as Location, Next<br />
* Select Build Target "Android 4.1 / API 16"<br />
* Next and Finish<br />
<br />
Press Run App button in order to perform first build,<br />
On first run, some ADT plugin fnctionality removing bin/App.apk and resource.ap_)<br />
Don't know how to teach eclipse don't do that, but it breaks installable package.<br />
So in order to fix that problem<br />
after first Run App, execute in project folder<br />
./fixup_links.pl<br />
It will update *.apk and *.ap_ symlinks<br />
<br />
Press Run App button again<br />
<br />
Try to setup breakpoint in onCreate() and press Debug App button.<br />
<br />
=== Rooting Android devices ===<br />
<br />
See [[Mobile/Fennec/Android/Rooting|Rooting Android Devices]].<br />
<br />
=== Bootstrapper.xpi: Testing JS chrome code changes without rebuilding ===<br />
<br />
Avoid those nasty compile times! Use the [https://groups.google.com/forum/?fromgroups=#!topic/mozilla.dev.platforms.mobile/jmxkOBREcO0 Bootstrapper extension]!</div>Dmosehttps://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/GDB&diff=491769Mobile/Fennec/Android/GDB2012-12-03T21:54:24Z<p>Dmose: Clarify that Mountain Lion users don't need to install the extra packages.</p>
<hr />
<div>Note: the names JimDB and moz-gdb seem to be used interchangeably, meaning the same thing.<br />
<br />
= Using JimDB (Or, Android GDB with Niceness) =<br />
== Prebuilt binaries ==<br />
<br />
=== Linux ===<br />
<br />
[https://github.com/darchons/android-gdb/downloads Download page]<br />
<br />
Run 'git pull' inside the utils directory to get the latest GDB utilities.<br />
<br />
=== GDB utilities ===<br />
<br />
A set of tools to make Fennec development on Android easier.<br />
<br />
[http://github.com/darchons/android-gdbutils Source and documentation].<br />
<br />
== Building moz-gdb ==<br />
<br />
There are two things to build here: the gdb you'll run on your computer, and the gdbserver you'll install on the device. JimDB's gdb takes care of automatically running /data/local/gdbserver on the device, once it's correctly installed.<br />
<br />
=== Building gdb ===<br />
<br />
==== Linux ====<br />
<br />
Get required packages:<br />
sudo apt-get install bison flex libncurses5-dev texinfo python2.7-dev<br />
<br />
Get source:<br />
git clone git://github.com/darchons/android-gdb.git<br />
cd android-gdb<br />
git checkout android-gdb_7_4<br />
<br />
Run configure and make:<br />
mkdir android-gdb-objdir<br />
cd android-gdb-objdir<br />
export prefix=/nonexistent<br />
/path/to/android-gdb/configure --target=arm-elf-linux --with-python=yes --prefix=$prefix \<br />
--with-gdb-datadir=$prefix/utils --with-system-gdbinit=$prefix/utils/gdbinit<br />
make -j4<br />
<br />
Reminder: Don't use ~ in the paths you pass here, as Bash wouldn't evaluate it!<br />
<br />
The gdb binary will be located at ''android-gdb-objdir/gdb/gdb''<br />
<br />
==== Mac OS X ====<br />
<br />
NOTES:<br />
*BenWa (2012/01/09): It failed to built with clang<br />
*mcomella (2012/07/31): This worked for me, although I had issues when I ran ./configure from the root diretory before running the written commands (I had to "make distclean" after that). I used Lion dev tools.<br />
*jchen (2012/10/17): I ran into a make error about missing python2.7. The cause is a bad config variable in the MacPorts python2.7 port. If I switch to using the native OSX python (by changing PATH), the problem goes away.<br />
<br />
Get required packages (unnecessary for OS X 10.8.2; they are include with Mountain Lion):<br />
port install bison flex ncurses texinfo python27<br />
<br />
Get source:<br />
git clone git://github.com/darchons/android-gdb.git<br />
cd android-gdb<br />
git checkout android-gdb_7_4<br />
<br />
Run configure and make:<br />
mkdir android-gdb-objdir<br />
cd android-gdb-objdir<br />
export prefix=/nonexistent<br />
/path/to/android-gdb/configure --target=arm-elf-linux --enable-targets=all --with-python=yes --prefix=$prefix \<br />
--with-gdb-datadir=$prefix/utils --with-system-gdbinit=$prefix/utils/gdbinit<br />
make -j4<br />
<br />
Reminder: Don't use ~ in the paths you pass here, as Bash wouldn't evaluate it!<br />
<br />
The gdb binary will be located at ''android-gdb-objdir/gdb/gdb''<br />
<br />
=== Building gdbserver ===<br />
<br />
==== Linux ====<br />
<br />
Create an NDK toolchain:<br />
cd /PATH/TO/NDK<br />
./build/tools/make-standalone-toolchain.sh<br />
<br />
This will tell you that the toolchain was packaged somewhere like /tmp/ndk-username/arm-linux-androideabi-4.4.3.tar.bz2<br />
<br />
Extract that toolchain somewhere:<br />
mkdir ~/android-toolchain<br />
cd ~/android-toolchain<br />
tar -xvf /tmp/ndk-username/arm-linux-androideabi-4.4.3.tar.bz2<br />
<br />
Make sure NDK toolchain is in PATH:<br />
export PATH=~/android-toolchain/arm-linux-androideabi-4.4.3/bin:$PATH<br />
<br />
Run configure and make for gdbserver:<br />
mkdir android-gdbserver-objdir<br />
cd android-gdbserver-objdir<br />
/path/to/android-gdb/gdb/gdbserver/configure --host=arm-linux-androideabi \<br />
--with-sysroot=/PATH/TO/NDK/platforms/android-9/arch-arm<br />
make -j4<br />
<br />
The gdbserver binary will be located at ''android-gdbserver-objdir/gdbserver''.<br />
<br />
Reminder: Don't use ~ in the paths you pass here, as Bash wouldn't evaluate it!<br />
<br />
Install it on your device:<br />
<br />
adb push gdbserver /data/local || adb push gdbserver /data/local/tmp<br />
<br />
On some Android models the /data/local is not writable so gdbserver needs to be pushed into /data/local/tmp/<br />
<br />
==== Mac OS X ====<br />
<br />
Setup a toolchain environment for your build, then run configure and make for gdbserver. The android-gdbserver-objdir directory can be anywhere, but creating it within the android-gdb git clone is convenient. The paths below do not necessarily need to be absolute paths, but it will make life easier.<br />
<br />
mkdir android-gdbserver-objdir<br />
cd android-gdbserver-objdir<br />
/ABSOLUTE/PATH/TO/NDK/android-ndk-r5c/build/tools/make-standalone-toolchain.sh --install-dir=android-9-toolchain --platform=android-9<br />
export PATH=android-9-toolchain/bin:$PATH<br />
/ABSOLUTE/PATH/TO/GIT/CLONE/android-gdb/gdb/gdbserver/configure --host=arm-linux-androideabi<br />
make -j4<br />
<br />
The gdbserver binary will be located at ''android-gdbserver-objdir/gdbserver''.<br />
<br />
Install it on your device:<br />
<br />
adb push gdbserver /data/local | adb push gdbserver /data/local/tmp<br />
<br />
=== Create the moz-gdb directory ===<br />
<br />
Once you've built JimDB, you need to create and populate a moz-gdb directory as explained below.<br />
<br />
Indeed, GDB utilities assume the following moz-gdb directory structure:<br />
<br />
./bin/<br />
gdb<br />
gdbserver<br />
./utils/<br />
gdbinit<br />
python/<br />
<br />
Execute the following commands to create and set up the moz-gdb directory:<br />
<br />
mkdir -p moz-gdb/bin<br />
cp android-gdb-objdir/gdb/gdb moz-gdb/bin<br />
cp android-gdbserver-objdir/gdbserver moz-gdb/bin<br />
git clone git://github.com/darchons/android-gdbutils.git moz-gdb/utils<br />
<br />
== Set up the gdbinit file ==<br />
<br />
Now edit this file:<br />
<br />
moz-gdb/utils/gdbinit<br />
<br />
and uncomment (remove the #'s) and set the following variables:<br />
python feninit.default.objdir # set it to your fennec object directory<br />
python feninit.default.srcroot # set it to your source directory<br />
<br />
=== Linux ===<br />
Make sure your paths are absolute! The gdbinit file, even though it specifies relative paths by default, will not correctly load debug symbols unless you specify absolute paths.<br />
<table style="border: 1px solid black;"><br />
<tr><br />
<th style="background: rgb(250,35,35); color: black; font-weight: bold;">INCORRECT</th><br />
<th style="background: rgb(35,250,35); color: black; font-weight: bold;">CORRECT</th><br />
</tr><br />
<tr><br />
<td><br />
<code><br />
python feninit.default.objdir = '~/Source/mozilla-android/obj-android'<br />
python feninit.default.srcroot = '~/Source/mozilla-central/mozilla'<br />
</code><br />
</td><br />
<td><br />
<code><br />
python feninit.default.objdir = '/home/USERNAME/Source/mozilla-android/obj-android'<br />
python feninit.default.srcroot = '/home/USERNAME/Source/mozilla-central/mozilla'<br />
</code><br />
</td><br />
</tr><br />
</table><br />
<br />
== Running JimDB ==<br />
<br />
Once JimDB is properly set up, with a moz-gdb directory as described above, running Fennec in GDB is very easy:<br />
<br />
./moz-gdb/bin/gdb<br />
<br />
This will automatically start gdbserver and fennec on the device, and start gdb on your computer.<br />
<br />
=== First run of JimDB ===<br />
<br />
Run JimDB, type as usual 'continue' to actually start running Fennec, give it several seconds, and hit Ctrl+C to interrupt Fennec.<br />
<br />
The first time, it will probably complain:<br />
<br />
Program received signal SIGINT, Interrupt.<br />
warning: Could not load shared library symbols for org.mozilla.fennec_bjacob.<br />
Do you need "set solib-search-path" or "set sysroot"?<br />
<br />
Do not worry about this. It will seem frozen for several seconds, but let it run. What's happening is that it's pulling all the libraries from the device into the moz-gdb directory. Ignore the suggestion about setting solib-search-path/sysroot, JimDB will do it all for you. Once it's done, you get a GDB invite as usual.<br />
<br />
Do this sanity check:<br />
<br />
(gdb) info shared<br />
<br />
For each loaded library you'll see whether symbols were found: Yes, No, or "Yes (*)" meaning no debug info. Press Enter until the listing is complete. You want to make two things sure:<br />
<br />
Ensure that libXUL has debug info i.e. you should see a plain Yes for libxul.so. If not, that means that something is wrong with your fennec build (is it a non-debug build?) or with your gdbinit (see above).<br />
<br />
Ensure that no library has a No. Typically, some system libraries and drivers will give you a No. For each such library, you want to manually pull it from the device into moz-gdb/lib/<device hex id>/system/lib. These drivers are typically found in /vendor on your device. Do pull them into system/lib on your computer, as this is where JimDB will find them, even if on the device they are not in /system/lib. Here is an example script to pull all the files in a given directory (here /system/lib) at once:<br />
<br />
for file in $(adb shell ls /system/lib | tr "\n" " " | tr "\r" " "); do<br />
adb pull /system/lib/$file<br />
done<br />
<br />
You may have to repeat this for other directories such as /vendor/lib for drivers.<br />
<br />
<br />
There is one dummy library about which GDB will still report "no":<br />
<br />
No org.mozilla.fennec_foobar<br />
<br />
Do not worry about that one.<br />
<br />
=== Troubleshooting ===<br />
<br />
* If debug info seems broken (e.g. breakpoints or stepping don't work well), make sure you're using a --disable-optimize --enable-debug build of Fennec. Just --enable-debug doesn't seem to always be enough.</div>Dmose