WebmakerMaker Party 2014 kick-off events

Last week, Mozilla kicked off Maker Party in style with events around the world that featured hands-on making, learning, collaboration and of course fun!

Mozillians in 13 Mozilla spaces around the world came together to celebrate teaching and learning with special kick-off events. At each office individuals participated in Appmaker sessions where they saw demo’s of the newly launched Appmaker product, as well as a real-time tutorials on how to modify an app to create your own songs. You can watch the live-stream from the Appmaker session in Toronto below!

Each space also received a custom designed 1000-piece Maker Party jigsaw puzzle which was a resounding success, and sparked fierce competition between the offices as each group battled to complete their puzzles in the shortest time possible. It’s great to remind the community that Maker Party events are meant to be hands-on, interactive, collaborative and learning about the web can even happen offline. Working together on a puzzle like below or solving HTML puzzles are the stepping stones to understanding how the web works.


Each office put their own spin on the events and made them their own to successfully show Mozillians around the world how fun and rewarding it is to throw a Maker Party. Special thanks to our hosts and teachers around the world who were able to make it happen.

If you want a closer look at the Maker Party kick-off events in the Mozilla spaces check out below and click on the images to be taken to more photos.


Maker Party Toronto
Maker Party Vancouver

Click this image to hear the song app they made in Mountain View!



InstantbirdLinux nightly builds back!

Back in March, we posted that we had started building nightly builds from mozilla-central/comm-central, but because the version of CentOS we had been using was too old, we were unable to continue providing Linux nightly builds. That has now changed and (as of today) we have both 32-bit and 64-bit Linux nightlies! Since this involved us installing a new operating system (CentOS 6.2) and tweaking some of the build configuration for Linux, please let us know if you see any issues! Additionally, some more up-to-date features that have been available in Mozilla Firefox for a while should now be available in Instantbird (e.g. dbus and pulse audio support) and even some minor bugs were fixed!

Sorry that this took so long, but go grab your updated copy now!

QMOFirefox Hub Add-ons for Firefox for Android

            Firefox for Android focuses on turning the browser’s homepage into a platform called Firefox Hub, a project to make your home page more customizable and extensible. At its core, this feature is a set of new APIs that allows add-ons to add new content to the Firefox for Android home page. As you may know, the home screen of the browser displays by default top sites, history, bookmarks and the reading list. After installing the add-ons, a new panel will be added to home page, near the default ones. To access a panel, swipe to the left or right after opening a new tab. If you ever want to make changes to these or other home page panels, you can do so in Settings, in the Customize / Home section. You can remove the panel added, by using the remove option which is present only for the dynamic panels, while the other default ones have the “Hide” option. Also you can decide which panel to be your default one, or change their order in about:home. It is possible to hide existing panels, for instance the reading list or history if you do not want it to appear on the home screen, or to hide all four default panels to only display custom feeds or a single feed instead.

Pocket Panel

Pocket Panel

            To install the add-on, you have to go to the Pocket Panel AMO Page. From the add-on management screen, after tapping the OPTIONS  check-box “Log in”, the “Log in to Pocket” page appears and the user can log in with his credentials. Also log out can be done through the Firefox add-on management screen. Now, Pocket panel access your Pocket reading list from Firefox for Android. This add-on adds your Pocket reading list feed to your home page and opens them in reader mode.

 Instagram Panel

Instagram Panel

             After installing the add-on from the Instagram Panel AMO Page, the new panel will be added to homepage, containing feeds of popular instagram photos. After you log in, you can see your own feeds. Also log-out can be done through the add-on management screen.

 Vimeo panel

Vimeo Panel

             After installing the add-on, a new panel will be added to homepage and clicking on an item opens the video on Vimeo’s website. You can find it available on the AMO Page.

 Wikipedia Panel

Wikipedia Panel

             To install the add-on, you have to go to Wikipedia AMO Page. After this, you can use the add-on options from the add-on management screen  to choose different feeds: choosing “Picture of the day” option, wikipedia panel will display feeds for different dates, containing the picture of that day,  choosing “Featured” option, the panel will have feeds for different dates, containing the featured article, choosing “On this day” option, the panel from about:home will have feeds for different dates, containing all important things that happened in that day and last choosing the “Nearby” option, the panel will have feeds containing the places near your current location.

 Cat Facts Panel

Cat Facts Panel

              Cat Facts Panel installed from the AMO Page adds a new panel to your homepage, containing facts about cats.

 Goal.com Panel

Goal.com Panel

          After you install the add-on from the Goal.com Panel AMO Page, you can choose your country edition from the pop-up dialog “Welcome to your Goal.com panel!”. Also this can be done through add-on management screen. Now you can get the latest football news from Goal.com on your Firefox for Android homescreen. This add-on provides breaking news directly from Goal.com so you can keep up with the football competitions, teams and players that matter to you.

Home Feeds Panel

Home Feed Panel

            Now you can subscribe to your favorite websites and have their news feeds show up right on your Firefox home page, installing the add-on “Home Feeds” from the AMO Page. To add a feed, simply tap the RSS icon when it appears in the title bar. A click on the icon opens a dialog to add it to one of the supported applications and services. Here you need to select Firefox homepage to add it as a panel to the about:home page of the browser. Once done, you can access feed items directly from there whenever you open it.

                   If you want to see the developer’s perspective, Margaret Leibovic wrote an article about building

Firefox Hub Add-ons for Firefox for Android available on MDN.     

                  Here are the open source add-ons that use these hub APIs:

           As usual, you can join us on our  IRC channel, I’ll be pleased to help you up with testing Firefox Hub and to hear your feedback about the experience you encountered.

QMOTestday Project Meeting – July 24, 2014

We spent the bulk of today’s meeting going over our plans for the QA work week. At a high-level we want to walk away from the work week with a set of tasks that can be accomplished within the next couple of months by members of the community. You’ll find more detailed notes here.

Our next meeting will be Thursday, August 7 at 9:00am PDT as we’ll all be at a work week next week. If you are unable to attend, please contribute discussion items to our etherpad so we can follow them up.

The Bugzilla UpdateRelease of Bugzilla 4.0.14, 4.2.10, 4.4.5, and 4.5.5

Today we have several new releases for you!

All of today’s releases contain a security fix. We recommend that all Bugzilla administrators read the Security Advisory that was published along with these releases.

Bugzilla 4.4.5 is our latest stable release and contains a security fix.

Bugzilla 4.2.10 is a security update for the 4.2 branch:

Bugzilla 4.0.14 is a security update for the 4.0 branch:

Bugzilla 4.5.5 is an unstable development release. This release has not received QA testing from the Bugzilla Project, and should not be used in production environments. Development releases exist as previews of the features that the next major release of Bugzilla will contain. They also exist for testing purposes, to collect bug reports and feedback, so if you find a bug in this development release (or you don’t like how some feature works) please tell us.

about:communityWhy Do People Join and Stay Part Of a Community (and How to Support Them)

[This post is inspired by notes from a talk by Douglas Atkin (currently at AirBnB) about his work with cults, brands and community.]

We all go through life feeling like we are different. When you find people that are different the same way you are, that’s when you decide to join.

As humans, we each have a unique self narrative: “we tell ourselves a story about who we are, what others are like, how the world works, and therefore how one does (or does not) belong in order to maximize self.” We join a community to become more of ourselves – to exist in a place where we feel we don’t have to self-edit as much to fit in.

A community must have a clear ideology – a set of beliefs about what it stands for – a vision of the world as it should be rather than how it is, that aligns with what we believe. Communities form around certain ways of thinking first, not around products. At Mozilla, this is often called “the web we want” or ‘the web as it should be.’

When joining a community people ask two questions: 1) Are they like me? and 2) Will they like me? The answer to these two fundamental human questions determine whether a person will become and stay part of a community. In designing a community it is important to support potential members in answering these questions – be clear about what you stand for and make people feel welcome. The welcoming portion requires extra work in the beginning to ensure that a new member forms relationships with people in the community. These relationships keep people part of a community. For example, I don’t go to a book club purely for the book, I go for my friends Jake and Michelle. Initially, the idea of a book club attracted me but as I became friends with Jake and Michelle, that friendship continually motivated me to show up. This is important because as the daily challenges of life show up, social bonds become our places of belonging where we can recharge.

Source: Douglas Atkin, The Glue Projecy

Source: Douglas Atkin, The Glue Project

These social ties must be mixed with doing significant stuff together. In designing how community members participate, a very helpful tool is the community commitment curve. This curve describes how a new member can invest in low barrier, easy tasks that build commitment momentum so the member can perform more challenging tasks and take on more responsibility. For example, you would not ask a new member to spend 12 hours setting up a development environment just to make their first contribution. This ask is too much for a new person because they are still trying to figure out ‘are the like me?’ and ‘will they like me?’ In addition, their sense of contribution momentum has not been built – 12 hours is a lot when your previous task is 0 but 12 is not so much when your previous was 10.

The community commitment curve is a powerful tool for community builders because it forces you to design the small steps new members can take to get involved and shows structure to how members take on more complex tasks/roles – it takes some of the mystery out! As new members invest small amounts of time, their commitment grows, which encourages them to invest larger amounts of time, continually growing both time and commitment, creating a fulfilling experience for the community and the member. I made a template for you to hack your own community commitment curve.

Social ties combined with a well designed commitment curve, for a clearly defined purpose, is powerful combination in supporting a community.

[Post originally appeared on Sean Bolton's blog.]

Air MozillaFIDO Universal 2nd Factor (U2F)

FIDO Universal 2nd Factor (U2F) Strong in-the-browser authentication for the mass market

hacks.mozilla.orgBuilding Firefox Hub Add-ons for Firefox for Android

The Firefox Hub APIs allow add-ons to add new panels to the Firefox for Android home page, where users normally find their top sites, bookmarks and history. These APIs were introduced in Firefox 30, but there are more features and bug fixes in Firefox 31 and 32. You can already find some of these add-ons on addons.mozilla.org, and there is some boilerplate code on github to help you get started.



There are two main parts to building a Firefox Hub add-on: creating a home panel, and storing data to show in that panel. Home panels consist of different views, each of which displays data from a given dataset.

Creating a new home panel

To create a home panel, first use the Home.panels API to register a panel. The register API takes a panel id and an options callback function as parameters. This options callback is called to dynamically generate an options object whenever a panel is installed or updated, which allows for dynamic locale changes.

function optionsCallback() {
  return {
    title: "My Panel",
    views: [{
      type: Home.panels.View.LIST,
      dataset: "my.dataset@mydomain.org"
Home.panels.register("my.panel@mydomain.org", optionsCallback);

You must always register any existing panels on startup, but the first time you want the panel to actually appear on the user’s home page (e.g. when your add-on is installed), you also need to explicitly install the panel.


You can modify the options callback function to customize the way data is displayed in your panel. For example, you can choose to display your data in a grid or a list, customize the view that is displayed when no data is available, or choose to launch an intent when the user taps on one of the items.

Storing data for the panel

To actually show something in your new home panel, use the HomeProvider API to store data. This API allows you to asynchronously save and delete data, as well as register a callback to allow the browser to periodically sync your data for you.

The HomeProvider API gives you access to HomeStorage objects, which you can interact with to save and delete data from a given dataset. These methods are designed to be used with Task.jsm to execute asynchronous transactions within a task.

let storage = HomeProvider.getStorage("my.dataset@mydomain.org");
Task.spawn(function() {
  yield storage.save(items);
}).then(null, Cu.reportError);

In Firefox 31, we expanded the save API to support replacing existing data for you, which is convenient for periodically refreshing your dataset.

function refreshDataset() {
  let items = fetchItems();
  Task.spawn(function() {
        yield storage.save(items, { replace: true });
  }).then(null, Cu.reportError);
HomeProvider.addPeriodicSync("my.dataset@mydomain.org", 3600, 

This code snippet will ensure that our dataset is refreshed once every 3600 seconds (1 hour).

What’s new in Firefox 32 Beta

In addition to bug fixes, Firefox 32 also adds a few more features to the set of Firefox Hub APIs.

Refresh handler

In addition to support for periodically updating data, we also added support for “pull to refresh”, which gives users the power to manually refresh panel data. To take advantage of this feature, you can add an onrefresh property to your view declaration.

function optionsCallback() {
  return {
    title: "My Panel",
    views: [{
      type: Home.panels.View.LIST,
      dataset: "my.dataset@mydomain.org",
      onrefresh: refreshDataset

With this new line added, swiping down on your panel will trigger a refresh indicator and call the refreshDataset function. The refresh indicator will disappear after a save call is made for that dataset.

Authentication view

We added support for an authentication view, to make it easier for your add-on to use data that requires authentication. This view includes space for text and an image, as well as a button that triggers an authentication flow. To use this feature, you can add an auth property to your panel declaration.

function optionsCallback() {
  return {
    title: "My Panel",
    views: [{
      type: Home.panels.View.LIST,
      dataset: "my.dataset@mydomain.org"
    auth: {
     authenticate: function authenticate() {
        // … do some stuff to authenticate the user …
       Home.panels.setAuthenticated("my.panel@mydomain.org", true);
     messageText: "Please log in to see your data",
     buttonText: "Log in"

By default, the authentication view will appear when your panel is first installed, and the authenticate function will be called when the user taps the button in the view. It is up to you to call setAuthenticated(true) when the user successfully completes an authentication flow, and you can also call setAuthenticated(false) when a user becomes unauthenticated. This authentication state will persist between app runs, so it is up to you to reset it if you need to.

Future work

We have ideas about ways to expand these APIs, but please let us know if there is anything you would like to see! We’re also always looking for new contributors to Firefox for Android, and we’d love to help you get started writing patches.

QMOFirefox 32 Beta 2 Testday, July 31st

Greetings mozillians,

We are happy to announce that Thursday,  July 31st, we’re going to hold the Firefox 32.0 Beta 2 Testday. We will be testing the latest Beta build, with focus on Games, Apps and New Features. As always, detailed instructions on how to get involved can be found in this etherpad.

No previous testing experience is required so feel free to join via #testday IRC channel and our moderators will offer you guidance and answer your questions.

Join us next Thursday and let’s make Firefox better!

When: July 31, 2014.

Meeting NotesMobile: 2014-07-23


  • Next merge: 2014-09-01

Topics for This Week

UI Telemetry on Release
We’ll be watching for some new trends

Split APKs
Looking to split our APKs up to reduce size.

Friends of the Mobile Team

Give a shoutout/thanks to people for helping fix and test bugs. Make sure friends also get awarded a badge. New contributors are highlighted in bold.

  • Bryan Kok (transfusion) helped localize a generated string deep in Android Sync land: bug 1019719

Stand ups

Suggested format:

  • What did you do last week?

  • What are working on this week?
  • Anything blocking you?

Please keep your update to under 2 minutes!

James W. (snorp)

<Read Only>

  • Continued work on making Janus work with http2

    • several changes to node-http2 up for review
  • Work on adding profiler labels to GLContext functions
  • Talked to nalexander about the myriad of problems with GeckoView, thought about possible ways forward.

Alan K. (ack)

  • Still doing cleanup work to land proof-of-concept cloudsync patch

  • Initial UI for mesh networking is done (nothing big)


<Read Only>

Working on


Working on
  • bug 1042768 WebRTC code is leaking an OpenSLES handle

  • bug 1042525 Latest Gecko does not build without-X
  • Reviewing rbarker’s stuff

Randall Barker

  • Last Week: Worked to fix issues in tab mirroring to standalone WebRTC caused by rebase. Roku build is currently busted due to changes in WebRTC library. Worked on supporting tab mirroring to Roku. Waiting on casting mirroring to land.

  • This Week: PTO on Thursday. Fix Roku build. Continue to try and get standalone WebRTC landed.

Eugen Sawin

Present & Future
  • Janus Proxy

    • Update metrics dashboard to support latest additions

    • Cache improvements

Sylvain Cleymans

Last week:

  • Updated mozjpeg module

  • Added a module to resolve shortened urls
  • Nearly done with Marionette tests

Next week:

  • More page load tests

Martin (mmcdonough)

Last Week
  • Packaged MediaCodec PDM demo APK and created experimental patch

  • Began making MediaExtractor MediaDecoderReader
This Week
  • Continue working on MediaExtractor MediaDecoderReader

Brian Nicholson

<Read Only>

  • bug 854305 – URL bar treats single-word input as a URL, not as a search keyword

  • bug 967325 – Implement sendRequestToGecko for async Gecko requests
  • WIP tests for bug 967325
  • PTO next week


  • Landed bug 1001309 – Provide a way to clear history when Fennec’s put into the background before the merge.

  • bug 940453 – [meta] Improve the UX for error pages
  • Got the ability to upload to releng servers. Trying to work through some problems bug 1016529 – Updated android builders to include google play services and android support v7 if it isn’t already included)
  • Updated Notifications.jsm documentation
  • bug 815682 – Lock screen widget/shortcut for Guest Sessions on Android 4.2 and above


Last week

  • New tablet UI

    • Exploratory prototype (with some real plumbing) for the new tablet UI

    • New RecyclerView-based API for TwoWayView to enable us to easily implementation animations in tabs tray, the upcoming tab strip, as well as magazine-like layouts for Hub, among other things: https://github.com/lucasr/twoway-view/
  • Toolbar refinements (see screenshot)
    • bug 1010740 – Change entry asset and tweak padding

    • bug 1010741 – Show search icon and change text hint in about:home
    • bug 1010739 – Change curve shape to be consistent with Australis
  • bug 1012462 – Support suggested sites in distribution files
  • bug 1039471 – crash in java.lang.IllegalStateException: Fragment RecentTabsPanel{422715c0} not attached to Activity at android.support.v4.app.Fragment.getLoaderManager(Fragment.java)

Next week

  • Finalize tablet UI prototype, work on the initial core refactorings

  • Land toolbar refinements


<Read Only>


  • Search activity hacking with eedens

  • Wrote a post about Firefox Hub for hacks.mozilla.org (will be published tomorrow – tweet about it when it comes out!)
Working on




<Read Only>



  • Reworking FatFennec bug tree.

  • APK splitting research and work.
  • Reviewing cloudsync.
  • Share overlay UI meeting kickoff.
  • Amazon APK investigation.
  • Meetings and bugs.
Working on


<Read Only>
Away July 23 through August 12.


  • tab mirroring

    • {{bug|1037015} support tab casting to chromecast

    • {bug|1037389} – add support for sourceId in gUM constraints
    • {bug|1037488} – MediaEngineTabVideoSource should set width, height and framerate based on constraints and prefs passed to Allocate()
    • {bug|1037644} – don’t use mozAfterPaint events to drive tab stream
    • {bug|1041493} – add support for “browser” to mediaSource constraint
    • {bug|1041700} – add browserArgs to gUM constraints

Anthony Lam

  • Last week

    • SF for Search
  • Next up
    • Move forward with UI/UX on Search

    • “Contextual hints” bugs follow up
    • Mobile tool bar UI/UX with Lucas
    • Tablet UI/UX work
    • General bugs follow up

Yuan Wang

  • Onboarding workshop in SF, top voted ideas: http://tinyurl.com/omm7g69

  • Continue discussions with ckitching and rnewman on Share/Send to Firefox. Concepts coming on Thursday
  • Launcher and lock screen study report


  • landed support for multiple apps per origin in DOM bug 778277 and Fennec bug 778279

  • uplifted bug 1003962 – Line Runner hangs on launch with white screen
  • looking into bug 918309 – Import and use public domain JNI.jsm implementation
Cogito ergo rococo…
  • bug 1003962 – Line Runner hangs on launch with white screen – uplifted

  • bug 997717 – Errors during package download aren’t handled correctly – fixed
  • bug 778279 – Add support of installing of multiple apps off of the same origin for the android web runtime – fixed
  • bug 1029691 – Manifest not being checked on APK installation – patch has review; needs updating
  • bug 1009954 – implement unit tests for WebappManager – patch needs updating
  • bug 986085 – User-hand-holding to check the Unknown Sources checkbox – patch needs updating
  • bug 878830 – Unable to install any form of web application on the Samsung Galaxy SIV – jhugman to get device
  • bug 1021395 – Web app machinery dumps lots of semi-sensitive data to logcat – blocked on bug 1032936
  • bug 960584 – notify user of download progress indication when fetching APK – blocked on bug 1029691
  • bug 960703 – Manifest icon not used for synthesized APK in Android 2.3 – needs info from jhugman
  • bug 1035999 – Multiple prompts (notifications) about available app updates – under investigation
  • bug 1033430 – “Jump to the Stars” launches to a white screen on Nightly (33.0a1) – under investigation
  • bug 1026263 – Error writing default prefs during packaged web app installation – stalled


  • QA Release Test-Plans

  • crash rate comparison Fx 30 vs Fx 31. First day crash rate is 1.60/100 ADI. This will come down a little bit but is up vs 30 which was 1.15.
  • Should we use the 31b11 ARMv6 and 2.2 ARMv7 users to test an 31 eol build?

Feature Focus

Firefox 31 (SHIPPED!) – Released: Jul 22, 2014

Firefox 32 (Beta) – Release: Sep 2, 2014

Firefox 33 (Aurora) – Release: Oct 14, 2014

Firefox 34 (Nightly) – Release: Nov 25, 2014

  • [PROPOSED] Search activity v1

  • [PROPOSED] Moz Stumbler
  • [PROPOSED] Share handler overlay
  • [PROPOSED] Form auto-fill improvements, native client-side work
  • [PROPOSED] Reflow on zoom (double tap) by default
  • [PROPOSED] Kindle-related fixes
  • [PROPOSED] Hub add-on: speed-dial panel
  • [PROPOSED] First-run tips
  • [PROPOSED] Preferred web content language
  • [PROPOSED] Tablets: tabbed browsing refresh v1
  • [PROPOSED] Suggested sites v3


  • Wednesdays – 9:30am Pacific, 12:30pm Eastern, 16:30 UTC

  • Dial-in: conference# 99998
    • US/California/Mountain View: +1 650 903 0800, x92 Conf# 99998

    • US/California/San Francisco: +1 415 762 5700, x92 Conf# 99998
    • US/Oregon/Portland: +1 971 544 8000, x92 Conf# 99998
    • CA/Vancouver: +1 778 785 1540, x92 Conf# 99998
    • CA/Toronto: +1 416 848 3114, x92 Conf# 99998
    • UK/London: +44 (0)207 855 3000, x92 Conf# 99998
    • FR/Paris: +33 1 44 79 34 80, x92 Conf# 99998
    • US/Toll-free: +1 800 707 2533, (pin 369) Conf# 99998
  • irc.mozilla.org #mobile for backchannel
  • Mobile Vidyo Room

Meeting NotesFirefox/Gecko Delivery Planning: 2014-07-23

Schedule & Progress onUpcoming Releases (Lukas/Sylvestre/Lawrence)

Firefox Desktop & Platform (Javaun/Chad/Martin)

Summary of Work In Progress
  • You can find the most recently completed iteration performance report here

  • You can see the status of the current iteration in progress here
  • None for the past week
  • exception on shutdown: “Exception calling provider shutdown”, NS_ERROR_FAILURE from nsIObserverService.removeObserver from PreviousExperimentProvider.shutdown ( 1012466 Bug 1012466 )

  • Add UTM parameters to plugincheck URL in Firefox ( 1022745 Bug 1022745 )
  • Make the ‘Translations by’ string localizable ( 1032139 Bug 1032139 )
  • Measure number of times infobar is hidden due to “Never translate this language/site” ( 1035337 Bug 1035337 )
  • about:sessionrestore shows instead of about:welcomeback after a reset ( 1035557 Bug 1035557 )
Recent Landings
  • Team landed 45 bugs over the last week (total of 89 for the 2-week iteration just ended)

  • Details of landings from the past week can be seen here

Firefox Mobile (Mark/Brad/Jenn)

Work In Progress

You can find more on upcoming feature plans in the[roadmap]

Uplifts from the past week
Beta (prior to merge)
Aurora (prior to merge)
  • crash in java.lang.NullPointerException: at org.mozilla.gecko.toolbar.ToolbarDisplayLayout.updateFromTab(ToolbarDisplayLayout.java) ( 964861 Bug 964861 )

  • Bump minSdkVersion to 9 ( 1017244 Bug 1017244 )
  • [Android L Preview] – Crash on startup – java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol “issetugid” referenced by “libmozglue.so”… ( 1030899 Bug 1030899 )
  • TwoWayView crashes in Android L ( 1034167 Bug 1034167 )
  • Regression: Contact API usage is being prompt on webpages ( 1037128 Bug 1037128 )
Landings from the past week
Nightly (prior to merge)
  • URL bar treats single-word input as a URL, not as a search keyword ( 854305 Bug 854305 )

  • In about:apps, lost the ability to invoke a context menu on an installed application ( 965176 Bug 965176 )
  • Tapping on a download notification doesn’t do anything (if Firefox is in the background) ( 1004495 Bug 1004495 )
  • Support suggested sites in distribution files ( 1012462 Bug 1012462 )
  • use msapplication-TileImage and msapplication-TileColor to create home page tiles ( 1014712 Bug 1014712 )
  • Bundled locale specific search engines not loaded until next browser restart ( 1018240 Bug 1018240 )
  • Page is displayed blank after choosing the “Show” popup option ( 1024391 Bug 1024391 )
  • Kindle Fire: activity and fragment transitions are obtrusive and uncomfortable ( 1031872 Bug 1031872 )
  • URL home screen shortcut is not working ( 1032217 Bug 1032217 )
  • Opening a tab from Recent Tabs panel doesn’t work in private browsing ( 1035439 Bug 1035439 )
  • Add-ons can not be installed; ‘Installation failed’ toast notification is displayed ( 1038098 Bug 1038098 )
  • Add-ons can not be installed in private and guest browsing ( 1038573 Bug 1038573 )
  • Regression: After closing all tabs, tabs tray dotted menu can not be accessed again ( 1038798 Bug 1038798 )
  • Remote tabs tray distorted on phone ( 1039062 Bug 1039062)
  • crash in java.lang.IllegalStateException: Fragment RecentTabsPanel{422715c0} not attached to Activity at android.support.v4.app.Fragment.getLoaderManager(Fragment.java) (Bug 1039471)
  • Private tabs list is cut off for portait orientation (Bug 1039738)

Developer Tools (Jeff/Rob/Dave)

<Read Only>

Feedback Summary (Cheng/Tyler/Matt)


Firefox 30: Sentiment report was sent out this morning, please contact the User Advocacy team if you have questions

Firefox 31: No issues that we’ve seen so far, still watching feedback.

Firefox Updates Hotfix: Has been live for around a week, initial results have been published at https://mail.mozilla.org/pipermail/firefox-dev/2014-July/001997.html

Quick Summary:
Over 4.5 million users have installed the add-on
Around half of them have updated (Over 2 million users)
We are investigating success of the Notification popup
We will be digging into FHR, ADI, SUMO and Add-on numbers this week to get more detailed answers.
V2 of the add-on is already underway, fix the bugs in v1, add support for Mac, etc. Bug 1040228
We will be investigating other ways to continue this effort in the future.

Market Insights from the Strategy & Insights Team (Kev)

Note: Kev will be on PTO July 28 through Aug 8, so will miss the Jul 29 and Aug 5th calls. No one will be taking his place. He apologizes for this, and his use of the third person.

Something to Think About

Xiaomi released it’s Mi4 flagship phone this week for $320-400. The news isn’t really about the Mi4 – although it’s a nice looking phone – it’s around how Android handset prices are continuing to see downward pressure. $300-400 is the new sweet spot for super phones. It’s eating into the profit margins of organizations like Samsung (draw parallels to Sony as you see fit), and making a whole lot of power even more accessible for Android users. We’re seeing continued interest in Chromebooks (more below), and Microsoft is working with partners to introduce lower-cost hardware into the same space.
Why we should care: We consistently see metrics that more than 2/3 of buyers will spend more than $150 on their phone. The downward push on prices for hardware that continues to grow in capability and performance means even more people will be able to take advantage of a full-featured web on (what is usually) their primary communications and computing platform. This pricing pressure is extending into the

Worth a Read


Planning Meeting Details

  • Wednesdays – 11:00am PT, 18:00 UTC

  • Mountain View Offices: Warp Core Conference Room
  • Toronto Offices: Finch Conference Room
  • irc.mozilla.org #planning for backchannel
  • (the developer meeting takes place on Tuesdays)

Video/Teleconference Details – NEW

Mozilla SecurityImproving Malware Detection in Firefox

We are always looking for ways to help protect people better from the constant threat of malicious software. For years Firefox has utilized Google’s Safe Browsing phishing and malware protection to help keep you from accidentally visiting dangerous sites. This protection feature works by checking the sites that you visit against lists that Firefox downloads of reported phishing and malware sites. (For more details, check out this page.)

Firefox is about to get safer.

Until recently, we only had access to lists of reported malicious web sites, now the Safe Browsing service monitors malicious downloaded files too. The latest version of Firefox (as of July 22) will protect you from more malware by comparing files you download against these lists of malicious files, and blocking them from infecting your system.

The next version of Firefox (released in September) will prevent even more malicious downloads on Windows. When you download an application file, Firefox will verify the signature. If it is signed, Firefox then compares the signature with a list of known safe publishers. For files that are not identified by the lists as “safe” (allowed) or as “malware” (blocked), Firefox asks Google’s Safe Browsing service if the software is safe by sending it some of the download’s metadata. Note this online check will only be performed in Firefox on Windows for those downloaded files that don’t have a known good publisher. Most of the common and safe software for Windows is signed and so this final check won’t always need to happen.

In our preliminary testing, we estimate this new malware protection cuts the amount of malware that slips through Firefox’s protections in half. That’s a lot of malware that will be stopped in its tracks.

And of course if you don’t want to send Google data about the few downloads that don’t match these lists, you can turn off malware protection. But we believe eradicating malware is critical for most people, and expect this new feature to help work behind the scenes to keep you safe as you browse.

For more details, head on over to Monica’s blog post.

QMOAdd-on Compatibility With Multi-Process Firefox – Friday, August 1st, 2014

Hi everyone! On Friday, August 1st we will host a testday where we will focus on checking add-on compatibility while using Firefox Nightly in multi-process mode. Detailed instructions on how to help us test can be found in the testday etherpad.

Mozilla has been working a project called “Electrolysis” or “e10s” that allows users to open tabs each into a separate process. The aim is to help us improve the browser’s responsiveness and security. There is still a bit of work before the project can be tested by a larger audience, but one of the areas where we could use some help is add-on compatibility.

This is the list of add-ons we will be working with: http://arewee10syet.com/

No previous testing experience is required so feel free to join via #testday IRC channel and our moderators will offer you guidance and answer your questions.

Starts: August 1, 2014, 1:00 am
Ends: August 1, 2014, 5:00 pm

QMOTestdays Project Meeting Tomorrow

A reminder to all those who are interested in the future of testdays, please join us tomorrow (Thursday) at 9am PDT. We’ll be discussing our plans for the QA work week and beyond. If you haven’t already, please fill out our meeting survey so we can find a time to meet that works better for the majority.


QMOCome prepared to explore the world of Mozilla at our QA Fair in Mt. View!

Hello – The Mozilla QA team will all be in town, and we are hosting a QA Fair style event. Come and learn more about the team and what we work on. Here is a list of the sessions that will happen at the event. Several of the different functional areas will be presenting on a variety of topics, and you will have a chance to get hands on with some Firefox OS devices.

Event Date: Thursday July 31, 2014

Event Time: 6:30 PM – 8:00 PM

Location: Mt. View Headquarters, 331 E. Evelyn Avenue, Mountain View, CA

Firefox OS

Hands on Firefox OS testing with Flame Reference devices: Get experience testing Firefox OS devices & learning how to file bugs on Firefox OS.

Scaling on Device Firefox OS testing with Jenkins How do you scale automation with mobile device testing?  Using less equipment to do more testing on Firefox OS phones.

B2G/Firefox OS automation QA lab buildout: Overview of the B2G-automation lab buildout (its goals, its progress, its challenges, etc.)  With photos and specs!


Demo of WebRTC  & Loop: Demo a simple WebRTC (audio and video) call between two Firefox browsers without any plugin and show how little JS code is needed to get this going. Demonstrate how the Loop project makes this even better and easier.

Firefox for Android

Profiling fennec: How to profile Firefox for Android for performance issues

Please RSVP to the meetup invite to be included for the Pizza, which will arrive at 6:30 PM.  The Fair should begin around 7 PM. If something changes and you cannot attend, kindly change your RSVP so I can get an accurate food count. Thanks in advance.

Air MozillaProduct Coordination Meeting

Product Coordination Meeting Weekly coordination meeting for Firefox Desktop & Android product planning between Marketing/PR, Engineering, Release Scheduling, and Support.

WebmakerTen Projects Receive $165,400 from Mozilla Gigabit Community Fund

Today, Mozilla announced ten projects in Kansas City and Chattanooga that will receive funding from the Gigabit Community Fund, an initiative supported by the National Science Foundation and part of the broader work of US Ignite. The goal of the Fund is to impact learning and support educators in and out of the classroom by investing in projects that utilize gigabit connectivity. The 10 projects will utilize the awarded funds, ranging from $5,000 to $30,000, to build and pilot gigabit-enabled applications and associated curricula in Kansas City and Chattanooga.


“The Gigabit Fund is transforming how communities learn and the accessibility of learning methods by piloting next-generation innovation as ‘living labs’ in classrooms, cultural institutions and other informal educational environments, putting technology in the service of education,” said Kari Keefe, Community Catalyst for the Gigabit Fund KC.

This is the second round of grants to be awarded by the Fund. The new projects receiving funds are:

Kansas City

  • PlanIT Impact KC | PlanIT Impact LLC:  a visually-rich application that leverages Kansas City’s open GIS data to influence early building design for architecture students
  • TechHawks | Fitnet: top-rated fitness app delivers real-time monitoring and robust metrics to curb obesity and shape how families manage and understand wellness
  • Students Reduce Patient Readmissions with the Gig | Northland CAPS: high school students work with business partners to develop a suite of communications, monitoring and treatment tools for clinicians and high-risk patients to reduce the frequency of readmissions
  • Minecraft+Oculus Rift for Community Development| Kansas City Public Library: virtual reality tech gives kids a voice and a way to design their ideal neighborhood in two of Kansas City’s urban areas, creating a gamed-up way to build community in this fully immersive educational program from KC’s Public Library

PlanIT Impact KC | Grand Blvd. in KC,MO


  • Building an App from the Ground Up | The Creative Discovery Museum:  Constructing an application toolbox and digital record that will serve as a design blueprint for other youth-serving organizations in Chattanooga and beyond.
  • devLearn | Duncan Ingram, Inc: Developing a mobile coding application for elementary school students that will build critical capacity for Chattanooga’s gigabit future.
  • GigBridge | Global Excel Tennessee:  Bolstering English language skills and improving access to health education amongst minority communities by teaching students for whom English is a second language to construct interactive mobile applications focused on obesity education and prevention.
  • The GigLab | Chattanooga Public Library: Providing public access to gigabit connected resources for the purposes of workforce development, application testing and education.
  • Viditor | GeonCode: Expanding and piloting a new, online collaborative video editor.
  • Wireless Earth Watchdogs | Chattanooga School for the Arts and Sciences: Creating a student-driven, real-time water quality monitoring system using micro-controllers in collaboration with Hixson High School and the Chattanooga Public Library.

Viditor team leaders Stuart French and Andrew McPhearson (center) with first round beta testers at the Baylor School.

All of the ten projects feature a 12-week pilot program that will run from late July to October. For additional information about grantees and to follow their progress, please visit https://blog.mozilla.org/gigabit.

Funding Innovation to Develop Learning Communities

The Mozilla Gigabit Fund has accelerated the development of Hive Learning Communities in Chattanooga and Kansas City, which now join New York CityChicagoPittsburgh and Toronto, among others, in Mozilla’s global Hive network. Connecting schools, cultural institutions and youth-serving organizations throughout these cities, Hive Learning Communities are paving the way for a connected approach to education, and grantees of the Gigabit Community Fund become founding members of these developing networks.

Members of the KC and CHA Hive Learning Communities participate in regular meet-ups and online forums share their planning, progress, lessons and best practices throughout and following the initial pilot period.

 How to Get Involved

  • Attend an event in Kansas City or Chattanooga
  • Get in touch with the Gigabit team to learn more about these projects
  • Follow team progress – and keep up to date with Hive KC and CHA – on Twitter

about:communityGrow Mozilla discussion this Thursday

If you’re interested in helping new people get involved with Mozilla, join us Thursday for an open community building forum.

Air MozillaBugzilla Development Meeting

Bugzilla Development Meeting Help define, plan, design, and implement Bugzilla's future!

QMOBug Verification Day

Hello mozillians!

Wednesday, July 30rd, we will be holding our weekly Bug Verification Day. This event is held on the #testday IRC channel and it’s addressed to everyone willing to get involved in improving Firefox.

You don’t need to have any previous experience in working with bugs. Ask for help on the #testday channel and someone there will give you assistance. More details are available in the wiki page we set up for you.

If you’re unable to attend these meetings and still want to get involved, you can verify bugs on your own time. Just add the [bugday-20140730] tag to the whiteboard or a comment for every bug you work on, so we know you participated to this event.

Join us and help make Firefox better!

When: July 30, 2014.

QMOBug Triage Day

Hello mozillians!

Monday, July 28th we will be holding our weekly Bug Triage Day. Join us on the #testday IRC channel and get involved!

You don’t need to have any previous experience in working with bugs. Ask for help on #testday and someone there will offer you assistance. Details are also available in this event’s wiki page.

If you aren’t able to attend this event but still want to get involved, you can triage bugs on your own time.

Remember to add the [bugday-20140728] tag to the whiteboard or a comment for every bug you work on, so we know you participated to this event.

Join us and help make Firefox better!

When: July 28, 2014.

WebmakerAnnouncing 15 new Web Literacy ‘maker’ badges!

Search: Maker  Remixing: Maker  Privacy: Maker

Following up from yesterday’s post about the new Hive Community Member badge, we’re pleased to announce 15 new Web Literacy ‘maker’ badges. After being tested by Webmaker Mentors and Webmaker Super Mentors they are now ready to be issued!

We’re still a couple of weeks away from a landing page for all of the badges at webmaker.org, so this post provides a list of the Web Literacy badges that are available.

Web Literacy Map v1.1

Each badge corresponds to the ‘Make’ part of the resources page for the relevant Web Literacy Map competency. You can see what this means by looking at, for example, the resources page for Privacy.

Below is a list of the Web Literacy badges that can apply for right now. Note that you might want to follow this guidance if and when you do!




Why not set yourself a challenge? Can you:

  1. Collect one from each strand?
  2. Collect all the badges within a given strand?
  3. Collect ALL THE BADGES?

Meeting NotesSeaMonkey: 2014-07-22


  • Who’s taking minutes? -> mcsmurf

  • Nominees for Friends of the Fish Tank:
    • -

Action Items

(who needs to do what that hasn’t been recorded in a bug)
We should assign people to the open items.



  • http://weblogs.mozillazine.org/seamonkey/ has not been updated since November 2012, the last version listed is 2.14 (bug 956561); move blog to blog.mozilla.org if possible Assigned: mcsmurf.

    • Mcsmurf says that it looks like we might be getting a blog on blog.mozilla.com.

    • KaiRo will do some DNS magic to get it mirrored at blog.seamonkey-project.org
    • bug 973886 for creating the blog account
  • bug 998807 Sync account creation or device pairing fails with exception in BrowserIDManager
    • mcsmurf will look into this


Status of the SeaMonkey Buildbot Master and Tree

  • Buildmaster is up and running.

    • Due to the master having some mysql issues, Callek has put a halt on the mysql updates, which affects the tbpl. So nothing is showing in tbpl atm.
  • comm-* will be building out of mozilla-* (bug 648979 etc.). Jcrammer has completed the coding. The decision to merge c-c into m-c has been kicked down the road into the next quarter or two.
  • Migrating our Linux builders to CentOS 6 bug 795354. Puppetmaster has been updated. Ewong is able to login to these hosts and buildbot is installed. We still need to get everything setup for parity and do some slight tweaks to the puppet config, but we’re pretty close to useable.
    • In Progress: 2.28 beta and final will depend on build system working again for Gecko 31.0

    • bug 983536 libpango version >= 1.22.0 required on Linux.(should be fixed when bug 795354 is fixed).
    • bug 977676 SeaMonkey’s puppet broken due to requirement of ffxbld ldap password.
    • bug 943740 is tracking the progress (or lack of one) in building trunk and aurora on Linux & Mac from the downloading user’s POV.
    • bug 840426 tracks the buildbot-config and buildbotcustom code changes to support Mock on our linux* slaves.
    • bug 853720 tracks the builders not recognizing mozcrash. (Not exactly sure if it’s relevant still, since our builders have been so perma-red for some time; but putting this here just in case.)
  • We are perma-orange on comm-central, comm-aurora and comm-beta due to problems with tests
    • Windows en-US builds are being successfully compiled but tests are not working due to a dependency on python 2.7.3.

    • pymake has been discontinued. We need to install the latest Mozilla-build and tooltool on our windows builders (tracked by bug 1023644 )
  • No langpacks since 29th August 2013 on trunk. Needs investigating.
    • Windows and Mac trunk langpacks directories have been removed on the FTP server, maybe for lack of recent XPIs (later than 2.20a1). Latest Linux langpacks are dated 29 August. Callek told Tonymec on IRC he has a hunch about why but more pressing things to do first.

    • In Bug 902876 Comment 12 Mcsmurf is waiting for feedback from the build team on how to proceed.
Fixed Stuff Since Last Meeting

Release Train

  • Callek plans to have at least one 2.28 beta as soon as we get the Linux builders up.

    • SeaMonkey 2.28 beta 1 and final are intended to follow within two weeks after the merge, otherwise another 2.26.x update will follow (Callek’s news post, MZ announcement).
  • Useful Firefox Release Schedule link: Releases Scheduling

Extensions and Plugins Compatibility Tracking

2.x (Last, Current, Next)

  • [From a previous meeting:] There is a problem with the metrics server, so no current data is available

  • See Basics page for the usual reminders.

open tracking (0)
tracking requests (1)
targeted (0)
fixed (30)


open tracking (0)
tracking requests (1)
targeted (0)
fixed (16)

  • Stalled. Needs a kick.

    • bug 937809 Add DuckDuckGo to the default search engines list.

    • bug 815954 Click-to-Play: Port bug 812562 (click-to-play blocklisted plugins: reshow urlbar notification as with normal click-to-play).
    • bug 476108 GetShortPathNameW fails under some NTFS junctions [patchlove].
  • Fixed since the last meeting:
    • notifications/doorhangers not showing: bug 1019583 offline apps, quietly accepting requests
  • Current breakages:
    • bug 998807 Sync account creation or device pairing fails with exception in BrowserIDManager needs an owner

    • bug 995737 adapt seamonkey for the ab remote content policy change; use permission manager instead of address book property.
  • Mozilla-central bugs that affect us:
    • Our front end Sync UI needs to be updated as the old backend is going away in Gecko/Firefox 31. See: New Firefox Sync has landed in Firefox Nightly. Tracked in:

      • bug 998807 Sync account creation or device pairing fails with exception in BrowserIDManager.

      • bug 1003434 Add support for about:sync-progress.
    • A lot of these bugs are due to mozilla-central switching from synchronous APIs to Asynchronous APIs.
    • bug 566746 (asyncFormHistory) Form history should use asynchronous storage API. Tracked in:
      • bug 912031 Use Asynchronous FormHistory.jsm in place of nsIFormHistory2 in Suite.
    • bug 769764 move proxy resolution to separate thread and remove sync api. Tracked in:
      • MailNews bug 791645 Rewrite calls to synchronous nsIProtocolProxyService::DeprecatedBlockingResolve with Async code before DeprecatedBlockingResolve disappears as well.
    • bug 793634 Force builds to be compatible with gtk 2.18/glib 2.22. Tracked in:
    • bug 795144 default –disable-gnomeui icon theme support
      • porting bug needed for the two configure.in changesets? Changes could be folded into bug 794772 above. *** IanN and Ewong are looking into this..
    • bug 846635 Use asynchronous getCharsetForURI in getShortcutOrURI. bug 834543 Add asynchronous version of setCharsetForURI and getCharsetForURI. Tracked in:
      • bug 896947 Use asynchronous version of setCharsetForURI and getCharsetForURI in getShortcutOrURI and other places.
    • bug 825588 Asynchronous JavaScript API for downloads and bug 851471 Decommission nsIDownloadManager. Tracked in:
      • bug 888915 Move SeaMonkey to the new JavaScript API for downloads when nsIDownloadManager is decommissioned.

Feature List, Planning

Bug statistics for the last two (full) weeks: 34 new, 22 fixed, 11 triaged.

  • Low triaging effort.

Open reviews/flags:
29 review
6 super-review
1 ui-review
4 feedback

  • See Feature List page for major wanted/needed features.

  • TODO: We will need to update our Sync UI code due to the new Sync API. Also we need to check if we are allowed to create FX accounts from our UI Since the new Sync accounts are FX accounts.[IanN] I’m sure I saw a question about FX accounts and branding.

Roundtable – Personal Status Updates

Status Updates from developers – what are you working on, what’s the progress, any other comments? (feel free to add yourself to the list if your name is missing and you have interesting status).

  • Fixed:

    • bug 780185 – Turn on frame pointers on Nightly builds (–enable-profiling)

    • bug 837649 – [Tracking Bug] Stop OSX 10.5 support for SeaMonkey project
    • bug 837650 – Stop support for OSX 10.5 in suite/ tree
    • bug 918474 – Default Search dropdown doesn’t get refreshed after adding new search engine
    • bug 1021370 – Bug 1016622 changed the name of seer to Predictor. browser-prefs.js needs to be changed.
    • bug 1029513 – Stop building Venkman because Bug 800200 removes JSD1 which Venkman depends on.
    • bug 1037793 – nsSuiteApp.cpp(7) : fatal error C1083: Cannot open include file: ‘application.ini.h’: No such file or directory
    • bug 1039139 – Update buildbotcustom and buildbot-configs with local modifications to sea-master1
    • bug 1040225 – Error: mismatched tag. Expected: </rdf:Seq>
  • To be Checked-in:
  • Review:

    • bug 110904 – attach signature fails silently on bad paths

    • bug 840427 – Migrate SeaMonkey builders to using mock
    • bug 853720 – After bug 827446, SeaMonkey doesn’t know mozcrash.
    • bug 863747 – Add option to disable Location bar history
    • bug 902876 – No SeaMonkey langpacks (or localized builds) since 26th July 2013.
    • bug 922076 – Switch tests to using moz.build and manifests
    • bug 956007 – Remove front end for removed x-user-def font preferences
    • bug 1038081 – When reading an attached eml file in a message window, the Reply button doesn’t work.
  • Working On:

    • bug 507676 – Port |Bug 435804 – Remaining rdf cleanup for FilterListDialog| to SeaMonkey
  • Usual testing, reviewing and commenting.

  • Fixed:
    • bug 1038005 Update en-GB for Gecko 32

    • bug 1039004 Port |bug 633773 Use Google’s HTTPS search by default|, |bug 958883 Use HTTPS for Yahoo searches| and search plugin parts of |bug 959576 Create a component to get the list of priority domains| to SeaMonkey
    • bug 1039794 Remove unused browser.search.defaulturl entry
  • Pending check in:
  • Checked in pending review:
  • Waiting for feedback/review:
  • Fixing review comments before checkin:
    • bug 757230 When using add button for permissions in Data Manager set a displayHost

    • bug 798147 Switch to correct pref pane if pref window already open
  • Working on:
    • bug 943335 [TB] Update icons used in searchplugins (Yahoo, eBay, Wikipedia, Amazon, Bing, Twitter)

    • bug 1039003 Port |bug 633773 Use Google’s HTTPS search by default|, |bug 958883 Use HTTPS for Yahoo searches| and search plugin parts of |bug 959576 Create a component to get the list of priority domains| to Thunderbird
    • Various SM Council documents.
    • bug 606683 Allow customization of toolbar in Composer and MailNews Composition
    • bug 639690 [META] Re-arrange code between editor and editorOverlay
    • bug 773979 [META] Switch to new drag and drop api in SeaMonkey
    • bug 657234 Move pasteQuote and pasteNoFormatting into contentAreaContextOverlay
    • File/Folder selection in windows.
  • To Do:
    • bug 639395 Get cmd_fontSize to reflect current state of selected content / content at caret.

    • Prefs-in-a-tab.
    • Create FAQ for Friends of the Fish Tank.
    • Help get composer standalone builds working with –enable-tests.

Fixed on mozilla-central:

  • bug 1037981 –enable-xterm-updates stopped working in comm-central.

  • bug 1041140 FakeString is badly designed.

Fixed on comm-central:

  • bug 553757 SMTP Server dialog doesn’t fit after disabling SSL.

Fixed on comm-central, comm-aurora and comm-beta:

  • bug 1009451 TypeError: tabs[i]._preview is undefined.

Fixed on comm-aurora:

  • bug 1018256 Fix Save and Change Character Encoding dialog.

Fixed on comm-aurora and comm-beta:

  • bug 1016132 Stop mutating the prototype of extApplication.prototype.

  • bug 825127 about:memory in Modern includes old CSS version.
  • bug 1021615 Customise dialog doesn’t display toolbar style after changing toolbar style preference back to full.
  • bug 1018263 Selection list properties dialog doesn’t work properly.

Backed out on comm-aurora and comm-beta:

  • bug 970121 URL bar isn’t decoded in some edge cases.

Fixed on comm-beta:

  • bug 1020630 Content permission doorhanger/notification doesn’t work.

Working on:

Needs beta approval:

  • bug 934492 Adjust the preference panes for the removal of the charset data source.

Still waiting for review:



  • bug 817295 chrome directory missing in fresh profiles (again).

  • bug 973530 Add UI to access the remote debugger preferences.
  • bug 1019383 Implement search-engine discovery notification.
  • bug 1034203 In about:certerror send the failed channel from the docshell to the Security Exceptions Dialog.
  • bug 1035237 The labels in the menulist items for the mail view selector don’t line up vertically.
  • bug 1037372 Add speculativeConnect() method to search engines, SeaMonkey part.
  • bug 1038290 Update the favicon when the href attribute of link rel=”icon” is changed.
  • bug 1040939 Fix startup error “Couldn’t load XPCOM” Package sandboxbroker.dll.

Working on:

  • bug 1040771 Allow about: pages to opt in to IndexedDB optionally specifying a desired origin.

  • bug 1040910 Support XHTML in feed titles.
  • bug 1041317 Package form.requestAutocomplete components.
  • bug 1041327 Record submission event for plugin crashes [notifications].

Other stuff:

  • Did some reviews.

  • Bug triage and Bug discussions.
  • Usual end user support and PR in newsgroups and Mozillazine.

Fixed on trunk:

  • bug 1019986 Clarify “Don’t Show” label in Desktop Notification bar and doorhanger.

  • bug 998787 Rename options in Geolocation doorhanger notification to disambiguate “Don’t Share” vs. “Not Now”.
  • bug 1009233 Help on mail account settings for authentication method needs updating.
  • bug 1019583 Part 2: Update Offline Web Applications preference pane.
  • bug 994093 Provide toggle for Geolocation service (geo.enabled) in Privacy & Security preference pane.
  • bug 1025569 Notifications for requests from Offline Web Applications offer beyond-session options in Private Browsing mode.

Interim patch landed on all channels:

  • bug 903439 Need a Google API key for Geolocation to work in SeaMonkey (Disable Geolocation service while we are waiting for an API key).

Draft patch posted:

  • bug 1032302 8BITMIME keyword ignored in EHLO greeting, BODY=8BITMIME absent in MAIL request for 8-bit transfers. (MailNews)


  • Bug triage, testing, and commenting for SeaMonkey and MailNews Core.

  • End-user information and discussion on MozillaZine.

Any other business?


  • [Ratty] KaiRo reminded us that we need to grow our contributor community. Perhaps we can get some Engagement experts from Mozilla to give us some suggestions?

    • [IanN] might have a chat with some people and see if they can point me in the right direction.

SeaMonkey Meeting Details

Meeting NotesMozilla Platform: 2014-07-22

Need To Know

(Release and system issues that may impact engineering this week.)

Notices/Schedule (lsblakk/sylvestre)

Next Merge: September 1, 2014 Next Release: September 2, 2014
Central: 34 Aurora: 33 Beta: 32 Release: 31

Build Changes (gps)

(Build changes of which engineers should be aware.)

RelEng (catlee)

(Repo, test, and other information for engineers from the release engineering team.)

Upcoming Outages/Upgrades

(System outages/upgrades and tree closures that impact engineering.)

Quality Programs

(An opportunity to hear about status with the various quality programs that do not have a formal team structure.)

OrangeFactor (ryanvm)

  • Past week’s OrangeFactor: N/A (data collection issues) (Previous Week: 9.26).

  • Intermittent mochitest-bc docShell leaks (bug 1036031/bug 1036036) remain highest unowned failures on the list.
  • #4: bug 1040724 – Intermittent test_visibility.html | Plugin should have painted once. (expected 1 independent paints, expected 1 logged paints, got 2 actual paints)
    • Started on Friday, fallout from all the plugin activity last week?
  • 15 intermittent failures fixed in the last week – List – Thanks!.
    • Shout-out to Sami Jaktholm for fixing lots of devtools issues recently.

MemShrink (njn)

  • Jan de Mooij enabled optimized Latin1 strings in the JS engine. This saves over 4 MiB when starting Firefox and loading Gmail using a Latin1 locale. (And it’s still a win on non-Latin1 locales and pages because they still use lots of Latin1 strings, identifiers, etc, and Firefox’s own JS code is still written mostly in Latin1.) This also speeds up some string-intensive operations such as some regexp operations.

  • (BTW, this change is also a textbook example of how to break up a large change into lots of small, manageable pieces, which leads to faster reviews, clearer progress, and easier bisection of introduced defects. See the tracking bug for details.)
  • Lots of B2G 2.0 memory usage regressions have been getting fixed recently (e.g. here and here) involving too many people to list individually. Lots of great work between the MemShrink team and the Systems Front End team.

Stability (kairo/bsmedberg)

<Read Only>

  • Nightly had a startup crash in yesterday’s first build, is fixed.

  • Otherwise, overall data looks decent.

Team Stand-ups

(In <2 mins, what did your team accomplish last week, on what is your team working on this week, and on what, if anything, is your team blocked? No questions during the stand-ups. All questions should be asked during the roundtable.)

A-Team (jgriffin)

mochitest-browser-chrome –run-by-dir, bug 992911

  • 14 test bugs need to be fixed before we can land this:

    • bug 525284 – browser_bug400731.js is fragile, not always passing

    • bug 947574 – Intermittent browser_426329.js | This test exceeded the timeout threshold. It should be rewritten or split up
    • bug 963075 – browser_pdfjs_[main|views].js leaks until shutdown when run as a standalone directory
    • bug 1001820 – browser_uitour.js fails on linux 32+64 while running as a standalone directory
    • bug 1002439 – browser_bug248970.js is almost perma fail when run by directory on osx opt
    • bug 1017187 – browser_yahoo_behavior.js leaks until shutdown when running components/search directory by itself
    • bug 1026310 – Intermittent browser_UITour_panel_close_annotation.js | Timeout waiting for invisibility: Tooltip should have disappeared when the subview opened
    • bug 1041527 – (has a patch already) – browser_tabview_*_perwindowpb.js
    • bug 1041537 – browser_Browser.js fails quite frequently on linux and windows debug runs when running the fuel/test/ directory by itself
    • bug 1041544 – browser_certViewer.js leaks until shutdown when run as a directory instead of a full suite
    • bug 1041549 – browser_overflow_anchor.js leaks windows when run as a subdirectory instead of a full suite
    • bug 1041569 – browser_windowRestore_perwindowpb.js leaks until shutdown when run as a directory instead of a full suite
    • bug 1041583 – browser_bug627234_perwindowpb.js leaked 2 windows until shutdown while running as a subdir instead of a full suite
    • bug 1041594 – browser_mozAudioChannel_muted.js crashes when run as a directory instead of a full suite

Developer Tools (robcee)

<Read Only>
bug 1034601 - Enable devtools/markupview tests with e10s 
bug 994732 - Make "Disable Cache" in Devtools persist (only when the toolbox is open)
bug 736078 - Show which elements have listeners attached in the Inspector
28 bugs fixed

Electrolysis (e10s) (blassey)

Some highlights:

Firefox Desktop (gavin)

Summary of Work In Progress

You can find the most recently completed iteration performance report here

You can see the status of the current iteration in progress here

Summary of Recent Landings

Team landed 45 bugs over the last week (total of 89 for the 2-week iteration just ended)

Details of landings from the past week can be seen here

Firefox Mobile (mfinkle/blassey)

Work In Progress

You can find more on upcoming feature plans in the[roadmap]

Landings from the past week
  • URL bar treats single-word input as a URL, not as a search keyword ( 854305 Bug 854305 )

  • In about:apps, lost the ability to invoke a context menu on an installed application ( 965176 Bug 965176 )
  • Tapping on a download notification doesn’t do anything (if Firefox is in the background) ( 1004495 Bug 1004495 )
  • Support suggested sites in distribution files ( 1012462 Bug 1012462 )
  • use msapplication-TileImage and msapplication-TileColor to create home page tiles ( 1014712 Bug 1014712 )
  • Bundled locale specific search engines not loaded until next browser restart ( 1018240 Bug 1018240 )
  • Page is displayed blank after choosing the “Show” popup option ( 1024391 Bug 1024391 )
  • Kindle Fire: activity and fragment transitions are obtrusive and uncomfortable ( 1031872 Bug 1031872 )
  • URL home screen shortcut is not working ( 1032217 Bug 1032217 )
  • Opening a tab from Recent Tabs panel doesn’t work in private browsing ( 1035439 Bug 1035439 )
  • Add-ons can not be installed; ‘Installation failed’ toast notification is displayed ( 1038098 Bug 1038098 )
  • Add-ons can not be installed in private and guest browsing ( 1038573 Bug 1038573 )
  • Regression: After closing all tabs, tabs tray dotted menu can not be accessed again ( 1038798 Bug 1038798 )
  • Remote tabs tray distorted on phone ( 1039062 Bug 1039062)
  • crash in java.lang.IllegalStateException: Fragment RecentTabsPanel{422715c0} not attached to Activity at android.support.v4.app.Fragment.getLoaderManager(Fragment.java) (Bug 1039471)
  • Private tabs list is cut off for portait orientation (Bug 1039738)

Firefox OS Connectivity (vchang)


Firefox OS Devices/Porting (ericchou)

<Read Only>

  • Gonk team (led by Thomas Tsai)

  • Bluetooth (members: Shawn Huang, Ben Tian, Jamin Liu, Jocelyn Liu)

    • Kept working on WebBluetooth API and had a brownbag by Shawn about Bluetooth 4.0(BLE).

    • All FxOS 2.0 Bluetooth certification blockers have been resolved and verified by Taipei QA. Thanks to everyone helped.
  • Media Playback (members: Bruce Sun, Blake Wu, Star Cheng)

    • bug 1038037 – [dolphin][flame] b2g crash when open some streaming audio from browser (1.4+)

      • Analyzed and delegated to RTSP experts since it crashed at RTSP.
    • bug 904177 – Integrate MediaCodec into gecko for media playback (2.1 feat+)
      • Landed. Follow-ups have also been filed and that’s the next part Bruce will work on.

      • Benjamin from Media team will co-work with Bruce on async MediaResource.
  • Device Storage & Stability (members: Alphan Chen)

    • Focused on MTP(2.1 feat+) with Dave Hylands and Eric Chou

      • Issues resolved: bug 1029533, bug 1036861, bug 1036862, bug 1036863

      • Current m-c has MTP support for Ubuntu now. (Pref off by default. See bug 1029533 comment 4 about how to enable it.)
      • Alphan is still trying to figure out why MTP didn’t work on Windows 7.

Firefox OS Media (slee)

<Read Only>

  • bug 916643 – ImageCapture – Implement WebIDL and takePhoto()

    • reviewing
  • bug 1032652 – Have a way for MediaDecoderReader to read MediaResource in an unblocking/asynchronous fashion
    • implementing
  • bug 1041883 – [MediaRecorder] If you switch start and stop quickly, it will cause MediaEncoder not be shut down.
    • Reproduce and analyze the problem
  • bug 1038655 – Intermittent test_playback_rate.html | Current time should not change when playbackRate is null (2.333 2.000045)
    • landed
  • bug 1037370 – TEST-UNEXPECTED-FAIL | /tests/content/media/test/test_fastSeek.html | uncaught exception – TypeError: v.parentNode is null at http://mochi.test:8888/tests/content/media/test/test_fastSeek.html:62
    • landed
  • bug 668973 – Intermittent Android test_playback.html | Test timed out. (test cases seek.webm, *.ogv)
    • landed
  • bug 886188 – Intermittent test_preload_actions.html | Test timed out.
    • landed
  • bug 1039901 – MP3FrameParser sometimes gives wrong duration on B2G
    • Found the root cause. Will work out a patch for that.

Firefox OS RIL (htsai)

<Read Only>

Work In Progress
  • bug 1038176 – SMS app launch latency regressed in v2.0 2.0+

    • Work with Gaia on profiling
  • bug 843452 – B2G RIL: use ipdl as IPC in MozMobileConnection. feature-b2g:2.1
  • bug 935843 – B2G RIL: Parse EF_IMG from SIM feature-b2g:2.1
  • bug 1031193 – [B2G][GAIA] API compatibility to unify both sendMMI() and dial() feature-b2g:2.1
    • API proposed
  • bug 1032858 – Add support for RIL_REQUEST_GET_CELL_INFO_LIST to expose neighboring cell data
  • bug 1036851 – Add ‘ready’ event to telephony to signal the completion of initialization
  • bug 977474 – [B2G] [NetworkCommandOptions] Combine the prefixLength, prefix and maskLength into one
  • bug 1038606 – implement a nsITelephonyService for Simulator
Landings From the Past Week
  • bug 1031640 – B2G RIL: incorrect STK TR for handling SEND_SS/SEND_USSD/SEND_SHORT_MESSAGE/SEND_DTMF in ril_worker.js.

  • bug 1033142 – B2G RIL: add support for mvno type ‘gid’ in matchMvno() function
  • bug 1022490 – [dolphin][perf] improve the performance of exporting Contacts to USIM card (china unicom) 1.4+
  • bug 1029721 – CDMA call waiting call is not logged in call history 2.0+

GFX (milan)

  • Firefox OS plans for 34:

    • bug 989403 transform: scale(X) not being repainted when assigned to

    • bug 967844 support multi-layer APZ controllers
    • bug 1016539 color related (b&w, invert, contrast) accessibility features
  • Other active work not locked to 34:

    • bug 996611 Skia for content everywhere (where everywhere excludes D2D)

    • APZ on desktop
    • tiling on desktop

JS (terrence)

<Read Only>

  • Compiler (JIT)

  • Front End and Other

    • bug 1038038: ShapeTable optimizations — saves >1MiB on gmail

    • bug 975011: nspr is automatically built for SM shell on windows now

Layout (jet/dbaron)

<Read Only>
No update this week.

Media (mreavy)

<Read Only>

  • OpenH264 working in the tree in today’s nightly (perhaps some Mac issues)

  • New UI for screen sharing and for webrtc camera/mic/etc use
    • More redesign in 34

Performance (vladan)

<Read Only>

No updates this week

Seceng (grobinson)

<Read Only>

  • bug 985252 – Sandboxing is now enabled for GMP processes on Windows. Next step is to ratchet down permissions, so that the sandbox is more effective.


(Comments and questions that arise during the course of the meeting or otherwise do not have a section.)

<Read only beyond this point>

Friends of the Tree

There were great changes by volunteers in Core and Toolkit during the past week. Thanks to all of these contributors for their passion and hard work, and say hi to new contributors lewis and Corentin Wallez! Here are some highlights:

Mailing List Threads

(Threads that are likely to be of interest to engineering from various mailing lists.)

Good Reads

(Links to blog posts, books, videos, etc. that you think will be of interest to others.)

irc #planning Log From This Meeting

jesup: http://mozilla.github.io/webrtc-landing/pc_test.html (WebRTC test for OpenH.264)

Engineering Meeting Details

  • Tuesday 2014-07-2211:00 am Pacific Standard Time

  • Dial-in: conference# 98411
    • US/California/Mountain View: +1 650 903 0800, x92 Conf# 98411

    • US/California/San Francisco: +1 415 762 5700, x92 Conf# 98411
    • US/Oregon/Portland: +1 971 544 8000, x92 Conf# 98411
    • CA/Vancouver: +1 778 785 1540, x92 Conf# 98411
    • CA/Toronto: +1 416 848 3114, x92 Conf# 98411
    • UK/London: +44 (0)207 855 3000, x92 Conf# 98411
    • FR/Paris: +33 1 44 79 34 80, x92 Conf# 98411
    • US/Toll-free: +1 800 707 2533, (pin 369) Conf# 98411
  • Engineering Vidyo Room / Air Mozilla / MTV Alien Nation / TOR Finch / SFO Warfield / PDX Hair of the Dog
  • join irc.mozilla.org #planning for back channel

Air MozillaRust Parsing Robustness

Rust Parsing Robustness Mozilla Intern Corey M. Richardson's adventure in creating a formal grammar for the Rust language, featuring sidetracks into parsing, macros, and failure.

Air MozillaPerformance data - signal from noise

Performance data - signal from noise Mozilla intern Paul Nispel presents: "Performance data - signal from noise"

WebmakerAnnouncing the new Hive Community Member badge!

Hive Learning Networks are a growing constellation of communities around the globe that are championing digital skills and web literacy through connected learning. We’re excited to announce that starting today, we’ll be recognizing the individuals who contribute to Hive’s growth and success with the Hive Community Member badge on webmaker.org. It’s the first in a coming series of Hive badges.

Hive Community Member Badge

Any Hive generally consists of organizations: museums, non-profits, government agencies, schools, and others. However, it’s the individual from these organizations who help us achieve our collective goals and really breathe life into the Hive. Their professional engagement and peer-to-peer learning is what translates into amazing opportunities and experiences for young people.

Hundreds of educators, designers, makers, artists, technologies, librarians and teachers in cities from Berlin to Vancouver contribute their time, resources and expertise to help Hive communities–and the youth they serve–thrive. Together, these professionals join forces within an active community of practice to create opportunities for young people to learn within and beyond the confines of traditional classroom experiences.

Through openly-networked collaboration that includes Peer Observation, Resource Sharing, and Process Documentation, educational designers and leaders create and scale innovations in learning. Some of the actions that define these characteristics of open practice include collaborating on Hive projects or programs, facilitating hands-on learning stations at Hive Pop-Ups or Maker Party events, sharing documentation of Hive programs and processes through blog posts, toolkits or teaching kits, etc. You can read more details about the Hive badge requirements here.

Hive is a big driver of the global Webmaker community–individuals that contribute to their local Hive bring expertise in connected learning principles and are also at the foreground of spreading web literacy by developing content, tools, curriculum and practice for others to use and remix. You can see some examples in the Hive NYC and Hive Chicago portfolios, as well as on the Hive Toronto blog.

2014 Open Badges Summit to Reconnect Learning, where initial planning for the Hive badge began. Photo credit: The Sprout Fund

2014 Open Badges Summit to Reconnect Learning, where initial planning for the Hive badge began. Photo credit: The Sprout Fund

The Hive badge is issued, claimed and displayed on Webmaker.org, and soon, recipients of this badge will also have the ability to issue web literacy badges to peers–including colleagues from their organization or other program collaborators–as well as youth. We’ll also be further developing a Hive family of badges, and will look to the growing, global Hive community to help us identify the core skills, competencies and practices we’d like Hive badges to endorse.

In applying for and receiving the Hive Community Member badge, you’ll help us define a global Hive culture, facilitate more equitable access and opportunity, and demonstrate that we’re achieving our mission, to:

  • Mobilize more educators to adopt connected learning practices and teach web literacy within a growing constellation of Hive Learning Networks around the world;
  • Create high-quality connected learning and web literacy tools, content, curriculum and practices for broad use;
  • Catalyze schools, youth programs, and city agencies to provide rich connected learning and web literacy programs, especially in under-served communities; and
  • Grow demand for Hive Learning Events, Communities and Networks in new locations and sectors.

How to get involved:

  • Apply! If you are an active contributor to a Hive in your community, apply for your Hive Community Member badge at webmaker.org. Simply create a Webmaker account with an existing email address, add notes and links to illustrate your qualifications, then once approved and issued, find your badge displayed within your Webmaker profile (see below).
  • Spread the word. Encourage your peers and collaborators to apply for the badge to  recognize their Hive contributions. Be sure to add hashtag #hivebuzz to signal our growing global Hive community.
  • Learn more about Hive Learning Networks.
Hive badge on Webmaker profile page

Hive badge on Webmaker profile page

CalendarLightning 3.3 is Out the Door

I am happy to announce that Lightning 3.3, a new major release, is out of the door. Here are a few release highlights:

  • Various components have been made asynchronous, allowing for better perceived performance. This means less hanging when Lightning is busy.
  • Improved invitation processing, as well as a few new features:
    • Restrict sending invitations to newly added attendees
    • Send one invitation email per attendee, not disclosing other attendees
    • Consider default BCC and CC of configured email identity when sending invitations
    • More actions when viewing invitations, e.g. tentative accept, accepting only occurrences.
  • When accessing Google Calendar via CalDAV, the authentication dialog doesn’t constantly reappear.

There have also been a lot of changes in the backend that are not visible to the user. This includes better testing framework support, which will help avoid regressions in the future. A total of 103 bugs have been fixed since Lightning 2.6.

When installing or updating to Thunderbird 31, you should automatically receive the upgrade to Lightning 3.3. If something goes wrong, you can get the new versions here:

Should you be using Seamonkey, you will have to wait for the 2.28 release, which is postponed as per this thread.

If you encounter any major issues, please comment on this blog post. Support issues are handled on support.mozilla.org. Feature requests and bug reports can be made on bugzilla.mozilla.org in the product Calendar. Be sure to search for existing bugs before you file them.

Mozilla ResearchWebGL in Web Workers, Today – and Faster than Expected!

Web Workers are additional threads that a website can create. Using workers, a website can utilize multiple CPU cores to speed itself up, or move heavy single-core processing to a background thread to keep the main (UI) thread as responsive as possible.

A problem, however, is that many APIs exist only on the main thread, for example WebGL. WebGL is a natural candidate for running in a worker, as it is often used by things like 3D games, simulations, etc., which do heavy amounts of JavaScript that can stall the main thread. Therefore there have been discussions about supporting WebGL in workers (for example, work is ongoing in Firefox), and hopefully this will be widely supported eventually. But that will take some time – perhaps we can polyfill this meanwhile? That is what this blogpost is about: WebGLWorker is a new open source project that makes the WebGL API available in workers. It does so by transparently proxying necessary commands to the main thread, where WebGL is then rendered.

Quick overview of the rest of this post:

  • We’ll describe WebGLWorker’s design, and how it allows running WebGL-using code in workers, without any modifications to that code.
  • While the proxying approach has some inherent limitations which prevent us from implementing 100% of the WebGL API, the part that we can implement turns out to be sufficient for several real-world projects.
  • We’ll see performance numbers on the proxying approach used in WebGLWorker, showing that it is quite efficient, which is perhaps surprising since it sounds like it might be slow.


Before we get into technical details, here are two demos that show the project in action:

  • PlayCanvas: PlayCanvas is an open source 3D game engine written in JavaScript. Here is the normal version of one of their examples, and here is the worker version.
  • BananaBread: BananaBread is a port of the open source Cube 2/Sauerbraten first person shooter using Emscripten. Here is one of the levels running normally, and here it is in a worker. (Note that startup on the worker version may be sluggish; see the notes on “nested workers”, below, for why.)

In both cases the rendered output should look identical whether running on the main thread or in a worker. Note that neither of these two demos were modified to run in a worker: The exact same code, in both cases, runs either on the main thread or in a worker (see the WebGLWorker repo for details and examples).

How it works

WebGLWorker has two parts: The worker and the client (= main thread). On the worker, we construct what looks like a normal WebGL context, so that a project using WebGL can use the WebGL API normally. When you call it, the WebGLWorker worker code queues rendering commands into buffers, then sends them over at the end of a frame using postMessage. The client code on the main thread receives such command buffers, and then executes them, command after command, in order. Here is what this architecture looks like:


Note that the WebGL-using codebase interacts with WebGLWorker’s worker code synchronously – it calls into it, and receives responses back immediately, for example, createShader returns an object representing a shader. To do that, the worker code needs to parse shader source files and so forth. Basically, we end up implementing some of the “frontend” of WebGL ourselves, in JS. And, of course, on the client side the WebGLWorker client code interacts synchronously with the actual browser WebGL context, executing commands and saving the responses where relevant. However, the important thing to note is that the WebGLWorker worker code sends messages to the client code, using postMessage, but it cannot receive responses – the response would be asynchronous, but WebGL application code is written synchronously. So that arrow goes only in one direction.

For that reason, a major limitation of this approach is synchronous operations that we cannot implement ourselves, like readPixels and getError – in both of those,  we don’t know the answer ourselves, we need to get a response from the actual WebGL context on the client. But we can’t access it synchronously from a worker. As a consequence we do not support readPixels, and for getError, we return “no error” optimistically in the worker where getError is called, proxy the call, and if the client gets an error message back, we abort since it’s too late to tell the worker at that point. We are therefore limited in what we can accomplish with this approach. However, as the demos above show, 2 real-world projects work out of the box without issues.


I think most people’s intuition would be that this approach has to slow things down. After all, we are doing more work – queue commands in a buffer, serialize it, transfer it, deserialize it, and then execute the commands. All of that instead of just running each command as it is invoked! Now, on a single-core machine that would be correct, but on a multi-core machine there are reasons to suspect otherwise, because the worker thread often does other heavy JavaScript operations, so freeing it up quickly to do whatever else it needs can be beneficial. There are a few reasons why that might be possible:

  • Some commands are proxied literally by just appending a few numbers to an array. That can be faster than calling into a DOM API which crosses into native C++ code.
  • Some commands are handled locally in JavaScript, without proxying at all. Again, this can be faster than crossing the native code boundary.
  • Calling from the browser’s native code into the graphics driver can cause delays, which proxying avoids.

So on the one hand it seems obvious that this must be slower, but there are also some reasons to think it might not be. Let’s see some measurements!


The chart shows frames per second (higher numbers are better) on the BananaBread demo, on Firefox and Chrome (latest developer versions, Firefox 33 and Chrome 37, on Linux; results on other OSes are overall similar), on a normal version running on the main thread, and a worker version using WebGLWorker. Frame rates are shown for different numbers of bots, with 2 being a “typical” workload for this game engine, 0 being a light workload and 10 being unrealistically large (note that “0 bots” does not mean “no work” – even with no bots, the game engine renders the world, the player’s model and weapon, HUD information, etc.). As expected, as we go from 0 bots to 2 and then 10, frame rates decrease a little, because the game does more work, both on the CPU (AI, physics, etc.) and on the GPU (render more characters, weapon effects, etc.). Hower, on the normal versions (not running in a worker), the decrease is fairly small, just a few frames per second under the optimal 60. On Firefox, we see similar results when running in a worker as well, even with 10 bots the worker version is about as fast as the normal version. On Chrome, we do see a slowdown on the worker version, of just a few frames per second for reasonable workloads, but a larger one for 10 bots.

Overall, then, WebGLWorker and the proxying approach do fairly well: While our intuition might be that this must be slow, in practice on reasonable workloads the results are reasonably fast, comparable to running on the main thread. And it can perform well even on large workloads, as can be seen by 10 bots on the worker version on Firefox (Chrome’s slowdown there appears to be due to the proxying overhead being more expensive for it – it shows up high on profiles).

Note, by the way, that WebGLWorker could probably be optimized a lot more – it doesn’t take advantage of typed array transfer yet (which could avoid much of the copying, but would make the protocol a little more complex), nor does it try to consolidate typed arrays in any way (hundreds of separate ones can be sent per frame), and it uses a normal JS array for the commands themselves.

A final note on performance: All the measurements from before are for throughput, not latency. Running in a worker inherently adds some amount of latency, as we send user input to the worker and receive rendering back, so a frame or so of lag might occur. It’s encouraging that BananaBread, a first person shooter, feels responsive even with the extra latency – that type of game is typically very sensitive to lag.

“Real” WebGL in workers – that is, directly implemented at the browser level – is obviously still very important, even with the proxying polyfill. Aside from reducing latency, as just mentioned, real WebGL in workers also does not rely on the main thread to be free to execute GL commands, which the proxying approach does.

Other APIs

Proxying just WebGL isn’t enough for a typical WebGL-using application. There are some simple things like proxying keyboard and mouse events, but we also run into more serious issues, like the lack of HTML Image elements in workers. Both PlayCanvas and BananaBread use Image elements to load image assets and convert them to WebGL textures. WebGLWorker therefore includes code to proxy Image elements as well, using a similar approach: When you create an Image and set its src URL, we proxy that info and create an Image on the main thread. When we get a response, we fire the onload event, and so forth, after creating JS objects that look like what we have on the main thread.

Another missing API turns out to be Workers themselves! While the spec supports workers created in workers (“nested workers” or “subworkers”), and while an html5rocks article from 2010 mentions subworkers as being supported, they seem to only work in Firefox and Internet Explorer so far (Chrome bug, Safari bug). BananaBread uses workers for 2 things during startup: to decompress a gzipped asset file, and to decompress crunched textures, which greatly improves startup speed. To get the BananaBread demo to work in browsers without nested workers, it includes a partial polyfill for Workers in Workers (which is far from complete – just enough to run the 2 workers actually needed). (This incidentally is the reason why Chrome startup on the BananaBread worker demo is slower than on the non-worker demo – the polyfill uses just one core, instead of 3, and it has no choice but to use eval, which is generally not optimized very well.)

Finally, there are a variety of missing APIs like requestAnimationFrame, that are straightforward to fill in directly without proxying (see proxyClient.js/proxyWorker.js in the WebGLWorker repo). These are typically not hard to implement, but the sheer amount of potential APIs a website might use (and are not in workers) means that hitting one of them is the most likely thing to be a problem when porting an app to run in a worker.


Based on what we’ve seen, it looks surprisingly practical to polyfill APIs via proxying in order to make them available in workers. And WebGL is one of the larger and higher-traffic APIs, so it is reasonable to expect that applying this approach to something like WebSockets or IndexedDB, for example, would be much more straightforward. (In fact, perhaps the web platform community could proxy an API first and use that to prioritize speccing and implementing it in workers?) Overall, it looks like proxying could enable more applications to run code in web workers, thus doing less on the main thread and maximizing responsiveness.

The Mozilla BlogFirst Commercial Web Games Launch Leveraging Mozilla-Pioneered Technology

Mozilla is proving the Web is a powerful gaming platform by creating new technologies and developer tools that enable game creators to port their popular titles to the Web. One of the trailblazers using these technologies is Trendy Entertainment, which … Continue reading

hacks.mozilla.orgResources for HTML5 game developers

Today we released Firefox 31 and it offers a couple of new features that help HTML5 game developers to code and debug sophisticated games. In addition Mozilla blogged about the first commercial games leveraging asm.js, Dungeon Defenders Eternity and Cloud Raiders both of which were cross-compiled in to JavaScript using the Emscripten compiler. Games like these show that HTML5 is ready as a game platform.

If you are interested in working with Emscripten you can get more information at the main Emscripten wiki or grab the code on the github page. Another good resource is the getting started with Emscripten tutorial on MDN. If you are wondering about the performance of asm.js, read asm.js performance improvements in the latest version of Firefox make games fly! for details.

In this post we’ll introduce you to some of the resources built by Mozillians that allow you to code and debug HTML5 based games. This list is not exhaustive and we appreciate feedback on any valuable resources that would help in this arena. Don’t be shy and tell us about them in the comments.

Where To Start

When developing an HTML5 based game, you have a lot of choices to make. These range from what editor to use, if the game will use Canvas 2d, WebGL, SVG, or CSS up to which specific rendering frameworks and game engines to use. Most of these decisions will be based on the developer experience and the platforms the game will be published on. No article will answer all these questions but we wanted to put together a post that would help get you started down the path.

One of the key resources available for game developers on MDN is the Games Zone. This section of MDN contains general game development articles, demos, external resources and examples. It also includes detailed descriptions of some of the APIs that a developer will need to be aware of when implementing an HMTL5 game, including sound management, networking, storage and graphics rendering. We are currently in the process of adding content and upgrading the zone. In the future we hope to have content and examples for most common scenarios, frameworks and tool chains.

In the meantime here are a few posts and MDN articles that help game developers getting started.


As an HTML5 developer you will have no shortage of tools at your disposal. In the Mozilla community we have been hard at work expanding the features that Firefox Developer Tools provide. These include a full-featured JavaScript Debugger, Style Editor, Page Inspector, Scratchpad, Profiler, Network Monitor and Web Console.

In addition to these, some notable tools have been updated or introduced recently and offer some great functionality for the game developer.

Canvas Debugger

With the current release of Firefox, we added a Canvas Debugger to the browser.
The Canvas Debugger allows you to trace through all canvas context calls that are used to generate a frame. Calls are color coded for specific calls for things like drawing elements or using a specific shader program. The Canvas Debugger is not only useful when developing a WebGL based game but can also be used when debugging a Canvas 2D based game. In the game below you can see in the animation strip as each image is drawn to the canvas. You can click any of these lines to get directly to the part of your JavaScript responsible for this action.
Two very common issues that have been reported when using the Canvas Debugger are with animations generated using setInterval instead of requestAnimationFrame and inspecting canvas elements in an iFrame.

To get more information about the Canvas Debugger be sure to read over Introducing the Canvas Debugger in Firefox Developer Tools.

Shader Editor

When developing WebGL based games it is very useful to be able to test and alter shader programs while the application is running. Using the Shader Editor within the developer tools makes this possible. Vertex and Fragment Shader programs can be modified without the need to reload the page, or black boxed to see what effect this has on the resulting output.

For more information on the Shader Editor, be sure to see Live editing WebGL shaders with Firefox Developer Tools post and take a look at this MDN article which contains a couple of videos showing live editing.

Web Audio Editor

The current version of Firefox Aurora (32) – has a Web Audio Editor. The Editor displays a graphical representation of all the Audio Nodes and their connections in the current AudioContext. You can drill down to specific attributes of each node to inspect them.

The Web Audio API provides more robust and complex sound creation, manipulation and processing than what is available in the HTML5 Audio tag. When using the Web Audio API make sure to read over Writing Web Audio API code that works in every browser as it contains pertinent information about support for the various audio nodes.

For more information on the Web Audio Editor be sure to read this Hacks article introducing the Web Editor and this MDN article.

Network Monitor

When developing an HTML5 based game network impact can be not only cumbersome but also costly if the user is on mobile device. Using the Network Monitor you can visually inspect all network request for location, time spent on the operation, and the type and size of the artifact.
In addition you can use the Network Monitor to get a visual performance analysis of your app when cached versus non-cached.

To get more information on the Network Monitor see the MDN page.


When starting your game one of your first choices will be which editor to use. And there are a lot of them (Sublime, Eclipse, Dreamweaver, vi, etc). In most cases a you already have a favorite. If you are interested in doing your development within the Browser you may want to have a look at the Web IDE that was recently released in Firefox Nightly.

The Web IDE project provides not only a fully functional editor but also acts as a publishing agent to various local and remote platforms, debugger, template framework and application manager. In addition the framework supporting this project provides APIs that will allow other editors to use functionality provided in the tool. To get more details on the work that is being done in this area have a look at this post.

In order to keep up-to-date with news on the Firefox Developer Tools, follow their article series on the Hacks blog. For more detailed information on new, stable developer tools features, check out their documentation on MDN.


The MDN Games Zone lists various APIs and articles that are useful for beginning game development.
In addition to these resources you may be interested in looking over some additional posts that can be valuable for development.

If your game is going to support multiplayer interaction using either WebRTC or WebSockets you may also be interested in looking at Together.js which provides collaborative features for web apps. To get an idea what is possible take a look at Introducing TogetherJS.

Many games will require storage and IndexedDB can be used to handle these needs. For information on extending the capabilities of IndexedDB read over Breaking the Borders of IndexedDB. You may also be interested in localForage which provides browser agnostic support for simple storage. To get more details about this library read over this Hacks post.

Game Optimization

HTML5 games today offer a great deal of power to the game developer. That said many of these games are going to be played on a mobile device, which in comparison to your desktop will pale in performance. So if you plan on your game being a success across platforms it is important that you optimize your code. The Optimizing your JavaScript Game for Firefox OS post has a lot of great techniques to help you build a game that performs well on low-end mobile devices.


In order to reach the most users of your game you may want to consider offering it in different languages. As part of this developers should start with localization built into the game. We are doing a great deal of work around recruiting translators to help you translate your game. To get more information about this initiative see this post.

Your Voice

As Mozilla is about the community of developers and users, we want your help and your feedback. If you have recommendations for specific features that you would like to see in the products make sure to either get involved in discussion on irc.mozilla.org or through our mailing lists. You can also log bugs at bugzilla.mozilla.org. In addition we are also provide additional feedback channels for our DevTools and Open Web Apps.

Mozilla L10NFirefox L10n Report (cycles 32 & 33)

Hello localizers!

Thank you all for your great work with Firefox 31 and 32. Here’s an outline of what is currently in Aurora this cycle (33) and what we accomplished together last cycle:

This cycle (Fx33) — 22 July – 1 September

Key dates:
- Beta sign offs must be completed before 25 August.
- Aurora sign offs must be completed before 1 September.
- Firefox 30 releases 2 September.

- Approximately 204 new string changes were made to Aurora desktop, 34 for Aurora mobile exclusively (unshared).
- 11% of the desktop strings changes are strings or files that need to be removed from your repos. 39% of all string changes are in devtools. The rest cover changes in key name warning messages, the Context Menu toolbar, and others. (see https://wiki.mozilla.org/Features/Release_Tracking#Likely_in_Firefox_33 ). 6% are about getusermedia.
- 30% of the mobile string changes are for privacy settings (private browsing, clearing private data, etc.) The rest include Firefox Account and home page preferences (see https://wiki.mozilla.org/Mobile/Roadmap#Firefox_33_.28Aurora.29 ).

Please remember that sign offs are a critical piece to the cycle and mean that you approve and can vouch for the work you’re submitting for shipment.

Because nearly 50% of all 89 locales have not regularly signed off, and thus not shipping up-to-date localizations, I will begin contacting those teams this cycle to evaluate whether they can come up-to-date in a short amount of time, or if they need to be removed from the public Firefox release page ( https://www.mozilla.org/en-US/firefox/all/ ).

Last cycle — 10 June – 21 July

Noteworthy accomplishments:
- 68% of all locales shipped Firefox 31 updates on time. Congratulations to everyone who signed off and shipped this last cycle! This is an 1% decrease in locale coverage between Firefox 30 and Firefox 31!
- 86% of all locales shipped Fennec 31 on time. Congratulations to everyone who signed off and shipped this last cycle! This is an 2% decrease in locale coverage between Firefox 30 and Firefox 31!
- The Assamese, Bengali (India), Gujarati, Hindi, Kannada, Maithili, Malayalam, Marathi, Oriya, Punjabi, Tamil, and Telegu teams launched their first localizations of Fennec! These 12 Indic locales represent the largest number of new locales that have been shipped in a single Fennec release. Please contact the team to congratulate them on this massive accomplishment, and feel free to tweet all about!
- The Upper Sorbian team has launched their first localization of Firefox desktop! Please contact the team to congratulate them on this massive accomplishment, and feel free to tweet all about!

Thank you to everyone for all of your dedication and hard work this last sprint. As always, if you note anything missing in these reports, please let me know.

Mozilla Web DevelopmentBeer and Tell July 2014

Once a month, web developers across the Mozilla community get together to share what side projects or cool stuff we’ve been working on in our spare time. This monthly tribute is known as “Beer and Tell”.

There’s a wiki page listing the presenters and links to what they’re showing off and useful side information. There’s also a recording on Air Mozilla of the meeting.

Pomax: RGBAnalyse and nrAPI

This month Pomax had two projects to show. The first, RGBAnalyse, is a JavaScript library that generates histographical data about the colors in an image. Originally created so he could sort ink colors by hue, the library not only generates the data, but also generates images (available as data-uris) of histograms using that data.

The second project Pomax shared was nrAPI, a Node.js-based REST API for a website for learning Japanese: nihongoresources.com. The API lets you search for basic dictionary info, data on specific Kanji, sound effects, and Japanese names. Search input is accepted in English, Romaji, Hiragana, Katakana, or Kanji.

HTML result from nrAPI search for "tiger".

HTML result from nrAPI search for “tiger”.

Bill Walker: Photo Mosaic via CSS Multi-Column

Next, bwalker shared his personal birding photo site, and talked about a new photo layout he’s been playing with that uses a multi-column layout via CSS. The result is an attractive grid of photos of various sizes without awkward gaps, that can also be made responsive without the use of JavaScript. bwalker also shared the blog post that he learned the technique from.

Dean Johnson: MusicDownloader

deanj shared MusicDownloader, a Python-based program for downloading music from SoundCloud, Youtube, Rdio, Pandora, and HypeScript. The secret sauce is in the submodules, which implement the service-specific download code.

Chris Lonnen: Alonzo

Lastly, lonnen shared alonzo, a Scheme interpreter written in Haskell as part of a mad attempt to learn both languages at the same time. It uses Parsec to implement parsing, and so far implements binary numeric operations, basic conditionals, and even rudimentary error checking. The development roughly follows along “Write Yourself a Scheme in 48 Hours” by Johnathan Tang.

Sample Runs of alonzo

Thanks to all of our presenters for sharing! If you’re interested in attending or presenting at the next Beer and Tell, subscribe to the dev-webdev mailing list! The wiki page and connection info is shared a few days before each meeting.

See you next month!

Meeting NotesMozilla Project: 2014-07-21

All-hands Status Meeting Agenda

Items in this section will be shared during the live all-hand status meeting.

Friends of Mozilla

Upcoming Events

This Week

OSCON July 20-24, in Portland Oregon.

Part of the Developer Events “Big 5″ program.

  • Booth on the trade show floor

  • Meet the Mozilla team, get a demo
  • Attend the PDX party on Wednesday, July 23 from 7p-9p
  • Mozilla Speakers

    • “Getting Started Contributing to Firefox OS” – Benjamin Kerensa and Alex Lakatos

    • “Elasticsearch: The Missing Tutorial” – Laura Thomson and Erik Rose
    • “How to Become a Media [Wiki] Hacker” – Harsh Kothari

Get more information on Mozilla’s presence at OSCON here

Tuesday, 22 July
Intern Presentations!
  • 1:30PM PDT- Paul Nispel, “Performance data – signal from noise”

  • 2:00PM PDT- Corey Richardson, “Rust Parsing Robustness”
  • 2:30PM PDT- Pranav Maddi, “Tracking Firefox health”
Wednesday, 23 July
Thursday, 24 July
  • 09:00 AM ForwardJS, San Francisco: “The Next Challenge of the Web is Us” – Chris Heilmann Keynote

  • 10:00 AM Pacific / 17:00 UTC: Grow Mozilla discussion — a forum for discussing community building at Mozilla
  • 10:00 AM Pacific / 17:00 UTC: Marketplace app review meeting
Friday, 25 July
Intern Presentations in MV/SF Commons and Air Mozilla!
  • 1:00PM PDT- Connor Brem, “Developing for Developers for Developers”

  • 1:30PM PDT- Anhad Jai Singh, “Partial Updates for Firefox”
  • 2:00PM PDT- Hayden Demerson, “But… It’s not ready!”
  • 2:30PM PDT- Vincent St-Amour, “Optimization Coaching for SpiderMonkey”
Next Week

Project Status Updates (voice updates)

Firefox Desktop

Speaker Location: San Francisco (johnath)

  • OMG search

    • single word searches in awesome bar

    • search keywords (e.g. ‘define:’)
    • search suggest in about:home
    • default search not stored in a pref
    • search field in new tab
Firefox OS

Speaker Location: Nonverbal

Maker Party is happening! We had a great first week, with events around the world, including in the MozSpaces. We’ve been generally more prepared this year than last, and we’ve hit the ground running.

  • As of this writing, we have 555 events in 151 cities already in the system. With eight weeks to go, we are well on our way to our goal of 2400 events.

  • Check out the #MakerParty thread on Twitter for photos, inspiration, and general Maker enthusiasm: https://twitter.com/search?q=%23makerparty&src=typd
  • Thanks to everyone who volunteered at or attended the kick-off cantinas in MozSpaces last week. We hope you enjoyed the puzzle and the Appmaker training! If you missed it, you can watch the Toronto office here: https://www.youtube.com/watch?v=_D4cMy0Kah4

If you’d like to learn more about hosting a Maker Party event, check out the Resources page for hosts: http://party.webmaker.org/en-US/resources

You can read more about the first week’s engagement efforts here: http://hannahgrams.com/2014/07/20/maker-party-engagement-week-1/

Mozilla Science Lab

Speaker Location: Kaitlin Thaney (remote)

The Science Lab is running it’s first Global Sprint next July 22-23, and we’d love your help in spreading the word to your communities (as well as invite you to join the fun).

We’ll have Mozilla staff and other community members hosting sites in 17 cities around the world. Some of the events are in Mozilla offices – even more of a reason to join us, say hello, offer a helping hand.

Main etherpad where all this information lives: https://etherpad.mozilla.org/sciencelab-2014summersprint-sites


Presenter Title Topic Location Share? Media More Details
Who Are You? What Do You Do? What are you going to talk about? Where are you presenting from? (Moz Space, your house, space) Will you be sharing your screen? (yes/no, other info) Links to slides or images you want displayed on screen Link to where audience can find out more information
Bryan Clark Work on TILES for Content Services Updating Mozillians on where we are going with Enhanced Tiles YVR Bryan Will be sharing TBD TBD
Janet Swisher Developer Relations Community Manager Ways to get involved with technical evangelism Austin TX (i.e., remote) No (queue these in tabs)
* Get Involved with Technical Evangelism
* Evangelism@lists.mozilla.org
* Mozspeakers group on Mozillians.org
Get Involved with Technical Evangelism
Robyn Chau Events Program Manager Updating Mozillians on First Big 5 Event Presence PDX No https://wiki.mozilla.org/Engagement/Brand_Engagement/Events_Team/Big_5_2014/OSCON2014 https://wiki.mozilla.org/Engagement/Brand_Engagement/Events_Team/Big_5_2014/OSCON2014


Do you have a question about a Mozilla Project or initiative? Let us know by Friday- we’ll do our best to get you an answer.

Please note that we may not always be able to get to every item on this list, but we will try!

Who are you? Area of question Question
What’s your name? What do you work on? Is your question about policy, a product, a Foundation initiative, etc. What would you like to know?
kats No question, but wanted to make sure people are aware of the proposed changes to the privacy policy and that they should weigh in if they have feedback. See the post by Alina on mozilla.governance: https://groups.google.com/forum/#!topic/mozilla.governance/GWlFuAl6Kho


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.

Introducing New Volunteers

New Volunteer(s) Introduced by Speaker location New Volunteer location Will be working on
Who is the new volunteer(s)? Who will be introducing that person? Where is the introducer? Where is the new person based? What will the new person be doing?

Introducing New Hires

New Hire Introduced by Speaker location New Hire location Will be working on
Katie Caldwell Jaime Chen Mountain View Portland Office UX Designer


Notes and non-voice status updates that aren’t part of the live meeting go here.

Status Updates By Team (*non-voice* updates)


Vidyo Desktop

  • Global audio dial in numbers are now accessible though Vidyo client. To access, open the Vidyo Desktop client, login w/ LDAP credentials, then select the “Invite by Email” icon that looks like a piece of mail – this button will open your default email client and provide you with global dial-in numbers as well as your public link to your Vidyo room.

  • Dial-In info also avail here: https://wiki.mozilla.org/Teleconferencing#Dialing_In

SFO Boardroom Display Upgrade

  • To reduce room start-up and shut-down times, bring the conference room up to Mozilla’s latest AV standards, and help improve seamless conferencing – the SFO Boardroom displays have been upgraded. Two 90″ displays (yes, two 90 inch displays) have been added as a replacement to the single projector w/ drop down screen. Next time you are in SFO, book out the Boardroom and let us know what you think of the upgrade!

  • Pic: https://drive.google.com/file/d/0BzyYWLVB7bEcYktCVW9vSFNFLVE
QA Community


  • We held our first project meeting last Thursday

  • Please join us again this Thursday where we’ll be brainstorming ideas for the work week session the following week
  • If you haven’t already, please check out our post on QMO to read about what we’re trying to accomplish with this initiative and ways to contribute
Automation & Tools

Notable changes to bugzilla.mozilla.org during the last week:

All changes.

  • Dial-in: conference# 8600

    • US/California/Mountain View: +1 650 903 0800, x92 Conf# 8600

    • US/California/San Francisco: +1 415 762 5700, x92 Conf# 8600
    • US/Oregon/Portland: +1 971 544 8000, x92 Conf# 8600
    • CA/Vancouver: +1 778 785 1540, x92 Conf# 8600
    • CA/Toronto: +1 416 848 3114, x92 Conf# 8600
    • UK/London: +44 (0)207 855 3000, x92 Conf# 8600
    • FR/Paris: +33 1 44 79 34 80, x92 Conf# 8600
    • US/Toll-free: +1 800 707 2533, (pin 369) Conf# 8600

WebmakerHow do we get depth *and* scale?

Reposted from Mark Surman’s Blog: http://commonspace.wordpress.com

We want millions of people learning about the web everyday with Mozilla. The ‘why’ is simple: web literacy is quickly becoming just as important as reading, writing and math. By 2024, there will be more than 5 billion people on the web. And, by then, the web will shape our everyday lives even more than it does today. Understanding how it works, how to build it and how to make it your own will be essential for nearly everyone.


The tougher question is ‘how’ — how do we teach the web with both the depth *and* scale that’s needed? Most people who tackle a big learning challenge pick one path of the other. For example, the educators in our Hive Learning Networks are focused on depth of learning. Everything the do is high touch, hands-on and focused on innovating so learning happens in a deep way. On the flip side, MOOCs have quickly shown what scale looks like, but they almost universally have high drop out rates and limited learning impact for all but the most motivated learners. We rarely see depth and scale go together. Yet, as the web grows, we need both. Urgently.

I’m actually quite hopeful. I’m hopeful because the Mozilla community is deeply focused on tackling this challenge head on, with people rolling up their sleeves to help people learn by making and organizing themselves in new ways that could massively grow the number of people teaching the web. We’re seeing the seeds of both depth and scale emerge.

This snapped into focus for me at MozFest East Africa in Kampala a few days ago. Borrowing from the MozFest London model, the event showcased a variety of open tech efforts by Mozilla and others: FirefoxOS app development; open data tools from a local org called Mountabatten; Mozilla localization; Firefox Desktop engineering; the work of the Ugandan National Information Technology Agency. It also included a huge Maker Party, with 200 young Ugandans showing up to learn and hack with Webmaker tools.MozFestEA2

The Maker Party itself was impressive — pulled off well despite rain and limited connectivity. But what was more impressive was seeing how the Mozilla community is stepping up to plant the seeds of teaching the web at depth and scale, which I’d call out as:

Mentors: IMHO, a key to depth is humans connecting face to face to learn. We’ve set up a Webmaker Mentors program in the last year to encourage this kind of learning. The question has been: will people step up to do this kind of teaching and mentoring, and do it well? MozFest EA was promising start: 30 motivated mentors showed up prepared, enthusiastic and ready to help the 200 young people at the event learn the web.

Curriculum: one of the hard parts of scaling a volunteer-based mentor program is getting people to focus their teaching on the most important web literacy skills. We released a new collection of open source web literacy curriculum over the past couple of months designed to solve this problem. We weren’t sure how things would work out, I’d say MozFestEA is early evidence that curriculum can do a good job of helping people quickly understand what and how to teach. Here, each of the mentors was confidently and articulately teaching a piece of the web literacy framework using Webmaker tools.

Making as learning: another challenge is getting people to teach / learn deeply based on written curriculum. Mozilla focuses on ‘making by learning’ as a way past this — putting hands-on, project based learning at the heart of most of our Webmaker teaching kits. For example, the basic remix teaching kit gets learners quickly hacking and personalizing their favourite big brand web site, which almost always gets people excited and curious. More importantly: this ‘making as learning’ approach lets mentors adapt the experience to a learner’s interests and local context in real time. It was exciting to see the Ugandan mentors having students work on web pages focused on local school tasks and local music stars, which worked well in making the standard teaching kits come to life.

Clubs: mentors + curriculum + making can likely get us to our 2014 goal of 10,000 people around the world teaching web literacy with Mozilla. But the bigger question is how do we keep the depth while scaling to a much bigger level? One answer is to create more ’nodes’ in the Webmaker network and get them teaching all year round. At MozFest EA, there was a session on Webmaker Clubs — after school web literacy clubs run by students and teachers. This is an idea that floated up from the Mozilla community in Uganda and Canada. In Uganda, the clubs are starting to form. For me, this is exciting. Right now we have 30 contributors working on Webmaker in Uganda. If we opened up clubs in schools, we could imagine 100s or even 1000s. I think clubs like this is a key next step towards scale.

Community leadership: the thing that most impressed me at MozFestEA was the leadership from the community. San Emmanuel James and Lawrence Kisuuki have grown the Mozilla community in Uganda in a major way over the last couple of years. More importantly, they have invested in building more community leaders. As one example, they organized a Webmaker train the trainer event a few weeks before MozFestEA. The result was what I described above: confident mentors showing up ready to teach, including people other than San and Lawrence taking leadership within the Maker Party side of the event. I was impressed.This is key to both depth and scale: building more and better Mozilla community leaders around the world.

Of course, MozFestEA was just one event for one weekend. But, as I said, it gave me hope: it made be feel that the Mozilla community is taking the core building blocks of Webmaker shaping them into something that could have a big impact.


With Maker Party kicking off this week, I suspect we’ll see more of this in coming months. We’ll see more people rolling up their sleeves to help people learn by making. And more people organizing themselves in new ways that could massively grow the number of people teaching the web. If we can make happen this summer, much bigger things lay on the path ahead.

To learn more about MozFestEA:


Mozilla JavaScriptSlimmer and faster JavaScript strings in Firefox

Since Brendan Eich wrote the first SpiderMonkey version in 1995, there have been many, many changes to its internal string representation. New string types like inline strings (more on this below) and ropes were added to save memory and improve performance, but the character representation never changed: string characters were always stored as a sequence of UTF-16 code units. The past two months I’ve been working on changing this. The JS engine can now store Latin1 strings (strings that only use the first 256 Unicode code points) more efficiently: it will use 1 byte per character instead of 2 bytes. This is purely an internal optimization, JS code will behave exactly the same. In this post I will use the term Latin1 for the new 8-bit representation and TwoByte for the 16-bit format.

To measure how much memory this saves, I opened Gmail, waited 15 seconds then opened about:memory and looked at the zones/strings subtree under “Other measurements”:

JS String Memory

For every JS string we allocate a small, fixed-size structure (JSString) on the gc-heap. Short strings can store their characters inline (see the Inline strings section below), longer strings contain a pointer to characters stored on the malloc-heap.

Note that the malloc-heap size was more than halved and the total string memory was reduced by about 4 MB (40%). The difference between 32-bit and 64-bit is pretty small, JSString is 16 bytes on 32-bit and 24 bytes on 64-bit, but on 64-bit it can store more characters inline.

The chart below shows how much of our string memory is used for Latin1 strings vs TwoByte strings on 64-bit:

JS String Encoding

Almost all strings are stored as Latin1. As we will see below, this is also the case for non-Western languages. The graph suggests some longer strings (that use malloc storage) are still stored as TwoByte. Some of these strings are really TwoByte and there’s not much we can do there, but a lot of them could be stored as Latin1. There are follow-up bugs on file to use Latin1 strings in more cases.

Why not use UTF8?

At this point you may ask: wait, it’s 2014, why use Latin1 and not UTF8? It’s a good question and I did consider UTF8, but it has a number of disadvantages for us, most importantly:

  • Gecko is huge and it uses TwoByte strings in most places. Converting all of Gecko to use UTF8 strings is a much bigger project and has its own risks. As described below, we currently inflate Latin1 strings to TwoByte Gecko strings and that was also a potential performance risk, but inflating Latin1 is much faster than inflating UTF8.
  • Linear-time indexing: operations like charAt require character indexing to be fast. We discussed solving this by adding a special flag to indicate all characters in the string are ASCII, so that we can still use O(1) indexing in this case. This scheme will only work for ASCII strings, though, so it’s a potential performance risk. An alternative is to have such operations inflate the string from UTF8 to TwoByte, but that’s also not ideal.
  • Converting SpiderMonkey’s own string algorithms to work on UTF8 would require a lot more work. This includes changing the irregexp regular expression engine we imported from V8 a few months ago (it already had code to handle Latin1 strings).

So although UTF8 has advantages, with Latin1 I was able to get significant wins in a much shorter time, without the potential performance risks. Also, with all the refactoring I did we’re now in a much better place to add UTF8 in the future, if Gecko ever decides to switch.

Non-Western languages

So Latin1 strings save memory, but what about non-Western languages with non-Latin1 characters? It turns out that such websites still use a lot of Latin1 strings for property names, DOM strings and other identifiers. Also, Firefox and Firefox OS have a lot of internal JS code that’s exactly the same for each locale.

To verify this, I opened the top 10 most popular Chinese websites, then looked at about:memory. 28% of all strings were TwoByte, this is definitely more than I saw on English language websites, but the majority of strings were still Latin1.

String changes

Each JSString used to have a single word that stored both the length (28 bits) and the flags (4 bits). We really needed these 4 flag bits to encode all our string types, but we also needed a new Latin1 flag, to indicate the characters are stored as Latin1 instead of TwoByte. I fixed this by eliminating the character pointer for inline strings, so that we could store the string length and flags in two separate 32-bit fields. Having 32 flags available meant I could clean up the type encoding and make some type tests a lot faster. This change also allowed us to shrink JSString from 4 words to 3 words on 64-bit (JSString is still 4 words on 32-bit).

After this, I had to convert all places where SpiderMonkey and Gecko work with string characters. In SpiderMonkey itself, I used C++ templates to make most functions work on both character types without code duplication. The deprecated HTML string extensions were rewritten in self-hosted JS, so that they automatically worked with Latin1 strings.

Some operations like eval currently inflate Latin1 to a temporary TwoByte buffer, because the parser still works on TwoByte strings and making it work on Latin1 would be a pretty big change. Fortunately, as far as I know this did not regress performance on any benchmarks or apps/games. The JSON parser, regex parser and almost all string functions can work on Latin1 strings without inflating.

When I started working on this, Terrence mentioned that if we are going to refactor our string code, it’d be good to make all string code work with unstable string characters as well: once we start allocating strings in the GGC nursery (or have compacting GC for strings), we can no longer hold a pointer to string characters across a GC, because the GC can move the characters in memory, leaving us with a dangling pointer. I added new APIs and functions to safely access string characters and pave the way for more string improvements in the future.

After converting all of SpiderMonkey’s string code, I had to make Gecko work with Latin1 JS strings and unstable string characters. Gecko has its own TwoByte string types and in many cases it used to avoid copying the JS characters by using a nsDependentString. This is not compatible with both Latin1 strings and nursery allocated strings, so I ended up copying (and inflating) JS strings when passing them to Gecko to solve both problems. For short strings we can use inline storage to avoid malloc or nsStringBuffer and overall this turned out to be fast enough: although it was about 10% slower on (pretty worst-case) getAttribute micro-benchmarks, none of our DOM benchmarks noticeably regressed as far as I know. For longer strings, the copy is potentially more expensive, but because I used a (refcounted) nsStringBuffer for those, it often avoids copying later on.

Inline strings

SpiderMonkey has two string types that can store their characters inline, instead of on the malloc heap: inline strings (size of a normal JSString) and fat inline strings (a few words bigger than a JSString). The table below shows the number of characters they can store inline (excluding the null terminator):

32-bit Latin1 32-bit TwoByte 64-bit Latin1 64-bit TwoByte
Inline 7 3 15 7
Fat inline 23 11 23 11

So a Latin1 string of length 15 can be stored in an inline string on 64-bit and a fat inline string on 32-bit. Latin1 strings can store more characters inline so, as expected, there are a lot more inline strings now (measured after opening Gmail):

JS String Types

87% of strings can store their characters inline, this used to be 65%. Inline strings are nice for cache locality, save memory and improve performance (malloc and free are relatively slow). Especially on 64-bit, non-fat inline strings are now more common than fat inline strings, because most strings are very short.

These numbers include atoms, a string subtype the engine uses for property names, identifiers and some other strings. Minimized JS code is likely responsible for many short strings/atoms.

Note that SpiderMonkey has other string types (ropes, dependent strings, external strings, extensible strings), but more than 95% of all strings are inline, fat inline or malloc’ed so I decided to focus on those to avoid making the chart more complicated.


The main goal was saving memory, but Latin1 strings also improved performance on several benchmarks. There was about a 36% win on Sunspider regexp-dna on x86 and x64 on AWFY (the regular expression engine can generate more efficient code for Latin1 strings) and a 48% win on Android.

There were also smaller wins on several other benchmarks, for instance the Kraken JSON tests improved by 11% on x86 and x64. On ARM this was closer to 20%.


Latin1 strings are in Firefox Nightly, will be in Aurora this week and should ship in Firefox 33. This work also paves the way for generational and compacting GC for strings, I’ll hopefully have time to work on that in the coming weeks. Last but not least, I want to thank Luke Wagner, Terrence Cole, Nicholas Nethercote, Boris Zbarsky, Brian Hackett, Jeff Walden and Bobby Holley for many excellent and fast reviews.

WebmakerMaker Party 2014: Resources for Libraries and Learning Spaces


At the heart of the Maker Party campaign, Webmaker tools/resources, and Hive Learning Network is the Web Literacy Map which outlines what we think are the important skills and competencies needed to be literate on the web. Each web literacy competency has a dedicated page that features the best resources on the web to help you “Discover, Make, and Teach” those skills.

Hive Learning Network, a project of Mozilla, is comprised of organizations (libraries, museums, schools and non-profit start-ups) and individuals (educators, designers,  community catalysts and makers). Together, they create opportunities for youth to gain digital and analog skills to learn within and beyond the confines of traditional classroom experiences, design innovative practices and tools that provide opportunities for greater impact, and contribute to their own professional development within an active community of practice.

Hives are communities of practice and have helped drive the idea, practice and growth of the Maker Party campaign over the last three years. These communities have also helped to innovate, build and utilize Webmaker tools, events and teaching guides to help others not only create the content that makes the web great, but perhaps more importantly — understand how the web works.

Maker Party events around the world help catalyze and deepen what Hive and Webmaker tools and resources are all about and serve as a way to understand and build upon connected learning, web literacy and digital skills for event hosts as well as participants.

The Hive Learning Network team at Mozilla has curated this Tip Sheet for hosting Maker Party events in your varied learning spaces–libraries, community centers, after school programs, schools or museum exhibition floors.


Let’s get started!

To start planning your Maker Party, first sign up for your Webmaker account here. This allows you to access tools and resources to make your Maker Party a hit!

Once your account is set-up, head on over to the Maker Party website. Get the latest buzz on events going on around the world and find everything you need to throw a great event. Our resources page provides everything from graphics to publicize your Maker Party to activity guides and tips and tricks to ensure that your Maker Party is encouraging your group to mix and re-mix the web.

Not sure of the size of your Maker Party? We even have event guides geared towards small, medium and large groups.

  • Small Event: Perfect for 2-5 participants, hosting a small event is a fun way to spend an hour on a rainy day, hang out as a family, learn to hack with a friend, and make cool things on the web.
  • Medium Event: Great for 5-50 participants, hosting a medium event is a fantastic way to team up people with different skill-sets to collaboratively build something new or improve something existing on the web, all while learning and teaching new hacking skills.
  • Large Event: For those ready to for the adventure of 50+ participants, hosting a large event is a rewarding way to bring together local organizations in a science fair setting to demonstrate cool web ideas, provide fun hands-on activities, and introduce your community to making and hacking.

Once you have an event confirmed, add it to our Maker Party events page.

Learn more about web literacy–watch this video featuring Chris Lawrence, Senior Director of Hive Learning Networks and the Webmaker Mentor Community.

Also, check out these great Jumpstarts (tip sheets)–created by the Hive Research Lab–as you dive into your Maker Party planning.

Starter Webmaker projects

The following activities are easy to implement with any size group:

Teaching kits and activities

We also want to ensure that educators, community connectors and all makers have educational resources that support their work. These resources are great tools to share with your groups or use during your Maker Party events.

For more support and professional development, join the Webmaker Training MOOC. You can sign up and start at any time, and go at your own pace. It’s modular, and free, and a great way to make connections with others who want to teach the web around the world.


We know that libraries are an integral part of any community and are some of the biggest champions in our Webmaker and Maker Party campaign work. We put together a list of resources that can support a Maker Party in libraries anywhere:


Connect with us

Join the conversation in our online Discourse forums. Our team regularly contributes on topics and issues that you might be interested in.

If you have further questions email us at makerparty@mozilla.org or info@hivelearningnetworks.org

All the best in your making and re-mixing efforts!

Mozilla IndiaThe Fifth Elephant – A big data conference & workshops | 10% discount for community

This is to announce that Mozilla India is the ‘community partner’ at The Fifth Elephant. ​The folks at The Fifth Elephant have extended 2 complimentary passes & 10% discounts to our community.
The Fifth ElephantDiscount code: you may use the discount code 8aiG4ovx to apply.

You may buy the tickets here.

​= ​Highlights =​

* ​India’s largest gathering of big data and analytics practitioners
​* Talks will showcase latest trends in the field and the opportunities that can be leveraged
​* ​Speakers will share practical experiences with data mining, machine learning and building technology for analytics

= ​Featured Talks =​

* ​The Genome Project
Personalized machine & big data
- Anu Acharya, Mapmygenome

​* ​The Art of Data Mining

Practical learnings from real world data mining applications
- Shailesh Kumar, Google

= ​Format =​
* ​Analytics infrastructure
Platforms, tools & in-house solutions.
* ​Data mining & machine learning
Applications in different domains

= ​Who should attend? =​
Data scientists, developers, architects, DBAs, researchers, business – from data enthusiasts to data geeks

For further information visit:​
Website: fifthelephant.in
Schedule: funnel.hasgeek.com
Tickets: fifthel.doattend.com/
Send your queries to info@hasgeek.comor call 080 6768 4422

about:communityFirefox 31 New Contributors

With the upcoming release of Firefox 31, we are pleased to welcome the 62 developers who contributed their first code change to Firefox in this release, 49 of whom were brand new volunteers! Special thanks to Sezen Günes for compiling these statistics for this release. Please join us in thanking each of these diligent and enthusiastic individuals, and take a look at their contributions:

Software CarpentryUsing a Package Manager for Lessons and Papers

I've been musing for a couple of years now about ways in which we could re-purpose off-the-shelf software engineering tools and techniques to serve the needs of teachers. One theme, which I touched on in my SciPy 2014 talk, is to get people to patch shared learning materials in the way they patch Wikipedia articles and open source code. Another is to use package managers like RPM, Homebrew, and Conda to track dependencies between lessons, so that I could say something like conda install suffragette_movement and get a lesson on the struggle for women's voting rights, along with the other lessons and materials it depends on (or updates and links to those other lessons if I already have some of them installed).

Setting aside for the moment the risk that this would be a technical "solution" to a social problem (because we all know how well those work), I've started wondering: should we be using package managers to aid reproducible research? In particular, if I know the DOI that identifies a particular paper, should I be able to type:

  $ conda install doi://10.1109/SECSE.2009.5069155

and get the LaTeX source for the article, the style files it depends on, its data (or links to such), and the code used to generate the results (including updates to third-party libraries that code depends on)? It begs the question of how results are regenerated, of course, and mutter mutter virtual environments to avoid conflicts between papers mutter mutter, but it seems like a way to manage the kinds of things that some of our colleagues are already thinking about.

Several people are taking a run at this idea as part of our two-day sprint this week: see this Etherpad for details, and this GitHub repo for further discussion. We'd be grateful for your thoughts and your help.

Software CarpentryGSoC Projects at Summer Sprint

As you may know, the Mozilla Science Lab's first-ever two-day sprint is in the next few days and all GSoC projects related with Mozilla Science Lab will be part of it. For more information about the plans for the GSoC projects continue reading this post.

Peer Instruction on the Web

This project aims to bring proof-of-concept on-line teaching tool that uses peer instruction technique. More details about the project can be found in Piotr's blog post.

The project needs volunteers to test the basic functionality and hopefully find bugs. We'll set up an Etherpad and coordinate video calls. The only requirement is a new browser, preferably Firefox or Chromium/Chrome, and a working webcam.

If you're willing to help with programming, Pitt mostly uses JavaScript (both front and back-end). There are some documentation issues open that are good to get you started with the project. The project code needs reviews by proficient JavaScript programmers, too.

Piotr, the project leader, will be in Kraków, Poland (UTC+2), during the sprint. All the required links will appear on sprint's etherpad below "A web-based tool for peer instruction" line (currently 102).

Browsercast: a Web-Based Slideshow Replay Tool

The Browsercast project aims to offer a web based slideshow composition tool with support for voice-over synchronization.

Exported presentations should act exactly like a video in terms of playback functionality: play/stop/pause/resume with perfect voice-over synchronization but still maintain the same rich environment a web presentation can offer: text, images, links, interactivity.

Implementation details

Two main parts:

  • The Browsercast Editor
    • it allows you to create, edit, synchronize, import, export a presentation
  • The Browsercast library
    • The JavaScript library that handles the playback functionality and does not depends on the editor

More details can be found on my blog.

There are certainly a lot of ways you can help:

  • by testing the application and offering feedback on user experience and features list
  • for programmers and engineering
    • prototyping some of the needed modules for which can't be found good open-source alternatives
    • analyse the possibilities of integrating the popcorn timeline and the thimble editor
    • and many more...

All required information will be available on the Browsercast sprint pad.

Math Virtual Keyboard

The Math/LaTeX virtual keyboard is going fine (you can read more about it here) and right now Raniere will love if someone can try it for a few minutes. Raniere will be at Paris site for the sprint with one of the devices from Firefox OS Tablet Program so if you want help me trying it please get in touch.

Software Carpentry will try to kick off the lesson manager project and Raniere will help with it.

Software CarpentrySummer Sprint FAQ

Please refer to this Etherpad for up-to-date information about sites and projects, or come and chat with us on #sciencelab on IRC. If you're not able to make it to one of our main sites, please check out this guide to participating remotely.

The Mozilla Science Lab's first-ever two-day sprint is less than three weeks away, so here's a short FAQ to tell you who can take part and how.

When is the sprint taking place?
July 22 and 23, 2014. Each site will be open during normal business hours (roughly 9:00 am to 5:00 pm local time—we'll post exact times a week before the sprint starts). We do not want people to work round the clock: work done at 3:00 am usually needs to be undone at 10:00 am.
Who can take part?
Everyone: you don't have to have any prior involvement with the Mozilla Science Lab, Software Carpentry, or any other particular project.
Do I need to be a programmer?
Nope: we're also looking for people who can review lessons (particularly from a novice's point of view), create illustrations, and many other things.
Do I need to register somewhere?
No, but we'd be grateful if you could add yourself to this Etherpad to give us some idea of what project you'd like to work on ("Project Ideas"), and where you'd like to work ("Sites").
Do I have to be at one of the listed sites?
Not at all—many people will be available to help out and answer questions online. But if you can get to one of the listed sites, it would be a chance to make some new friends.
Where are those sites, exactly?
We will post addresses, maps, and links next week (i.e., a week before the start of the sprint), along with site-specific information about parking, getting into the building, and so on.
Where will work take place online?
Each project will use the version control repository, mailing lists, and so on that it usually uses.
How can I make contact with a project I'm interested in?
The names of the project coordinators are listed below; we will post more information next week (i.e., a week before the sprint).
Can I add a new project to the list?
Sure, so long as it's related to open science in some way, you (or someone else) is willing to coordinate work on it, and there's already something in place for people to extend. (Experience has taught us that if a project starts with a blank page, it will probably end with one as well.) Please add it to the Etherpad and mail us so that we can help advertise it.
What should I do to prepare?
  1. Add yourself to the Etherpad.
  2. Decide which project you'd like to work on. (We recommend that people focus on just one—two days goes by very quickly.)
  3. Have a look at the project's open issues and pull requests to find something to start working on.
What should I do on the day?
  1. Show up around 9:00 am local time (again, the exact times for each site will be posted next week).
  2. Introduce yourself to the site host and/or the person coordinating the project you're working on.
  3. Check your chosen project's issue list and/or chat with the coordinator to see what needs to be reviewed. (Reviewing is often a gentler way to ease into work than writing or coding.)
  4. Once you've done a review or two, pick some writing, drawing, or coding that needs to be done, check to make sure no-one else is already doing it, and dive in.
  5. Repeat until it's time to wrap up for the day, then get a good night's sleep and come back in the next day to do it again.
Do I need to bring my own computer?
Yes please.
What should I do to prepare my project if I'm coordinating work?
  1. Make sure it's on the Etherpad.
  2. Create or tag issues and pull requests for people to start with.
Do I have to be there on both days?
No, but we do ask that people commit to at least one full day (or two half-days) so that projects don't spend all of their time getting newcomers on board.
What about coffee, lunch, and dinner?
We have asked sites to provide coffee (and snacks if they can), but will not provide meals. That said, we strongly encourage the people working at each site to get lunch together, and to go out together at the end of the first day: this sprint is meant to help build community, and sharing a meal with someone is a great way to get to know them.
How will sites be connected?
We will set up a single open-air video conference to connect all of the active sites, primarily to give people a sense of who's awake where. Individual projects can use IRC, HipChat, or whatever else they normally use for communication.
What sites are currently included?
We will post full addresses and other information a week before the sprint.
Auckland (NZ): Tim McNamara Wellington (NZ): Alison Stringer Melbourne (AU): Damien Irving
Kraków (PL): Klemens Noga Ljubljana (SI): Jure Triglav Paris (FR): Tarek Ziadé
London (UK): Sarah Allen Edinburgh (UK): Neil Chue Hong Charlottesville VI (US): Andrew Sallans
Albany NY (US): Brian Northan New York City, NY (US): Kaitlin Thaney Toronto (CA): Greg Wilson
East Lansing MI (US): C. Titus Brown Austin TX (US): April Wright Norman OK (US): Amanda Harlin
Vancouver (CA): Angelina Fabbro San Francisco CA (US): Dino Anderson
What projects are currently included?
We'll post updates as this list grows in the next two weeks, but right now, the projects are:

We'll be talking about the sprint at this week's Mozilla Science Lab community call—we hope to see you there.

Software CarpentrySciPy 2014 Talks and Lessons

Talks from SciPy 2014 are now online, and include several from people associated with Software Carpentry. I particularly enjoyed Lorena Barba's keynote, in which she discussed how she's using the IPython Notebook in a flipped classroom. (I gave a talk too, but if you're a regular reader of this blog, you'll have heard most of it already.)

My biggest take-away wasn't the talks, though. Instead, it was this brave post by April Wright:

Last night, at the Software Carpentry mixer, a grand total of 5 men shook my husband's hand and ignored mine. My total of new people met is a dismal ten. Compare it to the Evolution meetings, which is 'my' meeting, where I met upwards of 40 new people, had a blast, and was treated by all participants like a member of the community.

There's follow-up here and here (and elsewhere), but as someone who was at that mixer I think the message is clear: we need to do better, both as individuals and as a community.

Air MozillaDesigning for participation

Designing for participation Dia Bondi's experience with designing for participation on a video project

QMOBug triage workshop for Desktop Firefox

Hello Mozillians!

The Desktop Firefox QA team is hosting an extra Bug triage workshop Friday July 25th. We’ll teach the basics of triaging and working with bugzilla.mozilla.org.

The event is open to everyone and free. No previous experience is required — sign up, follow the steps below, and come and join us to help make Firefox better!


The workshop will take place on July 25th on the #testday channel on irc.mozilla.org in two different slots to accommodate most timezones: at 10:00 am UTC for Europe and Asia, and at 7 pm UTC to cover the U.S. .

Want to participate? Follow the steps below!

Step 1 – Create a One and Done account
One and Done” is a platform where Mozilla community contributors can pick tasks and work on them – one at a time, one day at a time – and feel good about doing them.
You can join it with your Mozilla Persona account, if you already have one. If not, you can create one through the One and Done page.

Step 2 – Create a Bugzilla account
Bugzilla is Mozilla’s bug tracking system. This is where bugs are reported and where every change for a bug is stored and tracked. To update a bug report in any way, you will need to sign in to Bugzilla. The Create a Bugzilla account task in One and Done has a walkthrough on signing up.

Step 3 – Be ready to connect to IRC
IRC stands for “Internet Relay Chat”. It’s a protocol for real-time chat sessions. Users log in to a particular server to chat with other users.
To join the #testday IRC channel, you can connect using your browser:
Join the #testday channel using Mibbit. Or, you can
take a look at the wiki page to help you pick an IRC client to install on your computer.

Step 4 – Register for the workshop!
Add your contact information to the Bug triage workshop etherpad, which we’ll use during the event.

Our goal for this workshop is to give an overview of bug triage, and to follow up afterwards with the participants to answer questions, award badges, and make sure you have the tools you need to get involved more closely with Mozilla’s development and QA process. See you next week!

- Madamezou and Lizzard

When: July 25, 2014.

Air MozillaWebdev Beer and Tell: July 2014

Webdev Beer and Tell: July 2014 Web developers across the Mozilla community get together (in person and virtually) to share what side projects or cool stuff we've been working on.

QMOTestdays Project Meeting – July 17, 2014

Yesterday we held our first Testdays Project Meeting. The meeting started with a quick review of the Meeting Day/Time Feedback survey. Due to only having a few responses we decided to give it some more time and solicit for further feedback before making any changes to the meeting. We spent the bulk of the remaining time reviewing and discussing the feedback we’d received on the etherpad. We received quite a lot of feedback, some great ideas, and enjoyed some excellent discussion around those ideas. Unfortunately this did not leave much time to discuss our plans for the upcoming work week so we decided it would be prudent to devote the next meeting to that subject. You can consult the wiki if you want more information about our meeting this week.

I would encourage those of you who were not able to attend to try again next week. If you’re unable to come in person then please make sure to add your feedback and concerns to the etherpad. All ideas will be reviewed, discussed, then followed up after the  meeting. In the future we will have these meetings recorded so you can view them on your own time.

A special thank you to AaronMT, IoanaC, and Jan\ for joining me in this first meeting.

Mozilla User ResearchIndia Firefox OS User Research

India Photo

Bangle shop & mobile phone break in Jaipur, India. (Photos by Gemma Petrie)

This research was led by Cori Schauer & Gemma Petrie.

Last month, Mozilla traveled to India to conduct user research on mobile usage. We are grateful to our talented research partners Dear and Tazurba International for their expert local knowledge, to the amazing Delhi and Rajasthani Mozilla communities who provided critical logistics and translation support, and to the many Mozilla staff members that took time out of their busy personal and professional lives to join us in the beautiful (and blazing hot!) Indian summer.

Field Team

The Mozilla User Research team believes it is important to bring a wide variety of colleagues into the field with us for research. We know that first-hand experience does more to build empathy and understanding than a presentation ever will. This trip marked our largest field team to date and included:

  • Jared Cole, Design Strategist
  • Francis Djabri, FxOS UX Designer
  • Peter Dolanjski, FxOS Product Manager
  • Sandip Kamat, FxOS Product Manager
  • Bruce Huang, FxOS Product Manager
  • Juwei Huang, FxOS UX Designer
  • Elizabeth Hunt, Marketplace UX Designer
  • Jane Hsu, FxOS Go-To-Market Strategy/Partnerships
  • Rina Jensen, Content Strategist
  • Amy Lee, FxOS Visual Designer
  • Peiying Mo, L10N Program Manager
  • Arky, L10N & Community Rep
  • Rob Rayborn, User Advocacy
India 2

The mausoleum of Sufi saint Nizamuddin Auliya in Delhi & a colorful truck on a Rajasthani highway. (Photos by Gemma Petrie)

Research Plan

We aimed to answer the following questions with our research:

  •     Who are the people in our target market(s) in India?
  •     What motivates someone to purchase a mobile device?
  •     What can Mozilla enable people to do with a Firefox OS device?
  •     How can Mozilla make a difference?

India is a vast and varied country and it was difficult to design a research approach that would cover multiple regions with adequate depth in the time we had available. We decided early on to focus this initial phase of our India research program in the north, specifically in Delhi, rural Rajasthan, and Jaipur.

This research used a variety of methodologies to gather data. We conducted one-on-one interviews in Delhi and Jaipur and worked with community members and local researchers to meet with local families, shopkeepers, and visit rural villages. In addition, we also conducted informal ethnographic observation during our two weeks in India.

India 3

Pre-loaded content & mobile usage in rural Rajasthan (Photos by Gemma Petrie)

Ethnographic Observation

One of our primary goals was to immerse our field team in Indian daily life and culture. Our large group and broad geographic research area presented some initial challenges during our planning stage. We made the decision to engage dscout to bring some order to our data collection and help field team members that were new to research think about how to capture and analyze their experiences.

We split each day into two modules with different themes like phone stores, mobile content, or family. We then divided our field team into small groups, accompanied by Mozilla community members, to explore different areas. Each group added photos, videos, and answers to a few short questions to dscout, allowing us to quickly gather a large amount of structured information on each theme. This data, combined with our team’s first-hand field experiences, provided a valuable contextual foundation for our research.

Mobile Open Houses

We conducted one-on-one interviews with 55 recruited participants at “Open House” events in Delhi and Jaipur. The interviews were split into four main topic areas: Current phone and technology usage, phone purchasing process, mobile content, and Firefox OS device user testing.

We’ll be sharing our findings from the Open Houses and our other research activities soon. Stay tuned!

WebmakerHOWTO: apply for Webmaker badges

(cross-posted from Web Literacy Lead Doug Belshaw‘s blog)

Super Mentor 02

We’re in full swing with Webmaker contribution and web literacy badges at the moment, so I wanted to take a moment to give some advice to people thinking of applying. We already have a couple of pages on the Webmaker blog for the Mentor and Super Mentor badges:

However, I wanted to give some general advice and fill in the gaps.

First of all, it’s worth sharing the guidance page for the people reviewing your application. In the case of a Webmaker Super Mentor badge, this will be a Mozilla paid contributor (i.e. staff member), but for all other badges it may be community member who has unlocked the necessary privileges.

To be clear:

The best applications we’ve seen for the Webmaker badges so far take the explain how the applicant meets each of the relevant criteria on the badge detail page.

For example, this was Stefan Bohacek‘s successful application for the Sharing ‘maker’ badge:

1) Sharing a resource using an appropriate tool and format for the audience: I wrote tutorials for people learning to make websites and web apps and shared them on my blog: http://blog.fourtonfish.com/tagged/tutorial. These also exist as a teaching kit on Webmaker — see my blogpost with a link here: http://blog.fourtonfish.com/post/89157427285/mozilla-webmaker-featured-teaching-kit. Furthermore I created resources for web developers such as http://simplesharingbuttons.com (also see: http://badges.p2pu.org/en/project/477 and some other (mini-)projects here: https://github.com/fourtonfish.

2) Tracking changes made to co-created Web resources: I use GitHub for some of my personal projects (although I only received a handful of opened issues) and GitLab with clients I worked with/for.

3) Using synchronous and asynchronous tools to communicate with web communities, networks and groups: https://twitter.com/fourtonfish — I follow some of the members of Webmaker. https://plus.google.com/+StefanBohacek/posts — I am a member of the Webmaker community. http://webdevrefinery.com/forums/user/18887-ftfish — I (infrequently) post here, share ideas, comment on ideas of others etc. [REDACTED EMAIL ADDRESS] — I wouldn’t be able to finish my teaching kit without the help of other webmakers and my email account to communicate with them

Note that Stefan earned his badge for numbers 1) and 3) in the above example. This was enough to meet the requirements as the badge is awarded for meeting any two of the criteria listed on the badge detail page. He did not provide any evidence for using GitHub, as mentioned in 2), so this was not used as evidence by the person reviewing his application.

Applying for a badge is just like applying for anything in life:

  • Make the reviewer’s job easy — they’re looking at lots of applications!
  • Tell the reviewer which of the criteria you think you have met.
  • Include a link for each of the criteria — more than one if you can.
  • If you are stuck, ask for help. A good place to start is the Webmaker discussion forum, or if you know someone who’s already got that badge, ask them to help you!

Image credit:

Firebug BlogFirebug 2.0.2

The Firebug team released Firebug 2.0.2. This version represents maintenance release fixing some reported issues.


Firebug 2.0.2b1 has also been released to update users on AMO beta channel. This version is exactly the same as 2.0.2


Firebug 2.0.2 is compatible with Firefox 30 – 32

Firebug 2.0.2 fixes 8 issues.


Please post feedback in the newsgroup, thanks.

Jan ‘Honza’ Odvarko


The Mozilla BlogFirefox OS Ecosystem Shows Strong Momentum and Expands Across New Devices, Markets and Categories

Firefox OS has unlocked the mobile ecosystem and is quickly expanding across a broad range of devices and product categories in Europe, Latin America and Asia Pacific. Just one year after the first devices were launched, Firefox OS is now … Continue reading

The DenThe results are in

Millions of you have voted in the Web We Want campaign (thank you!) and had your say on what you think matters most for the future of the Web. Topping the list was safeguarding privacy — a matter that is extremely important to us as well. In fact, it’s one of our core principles.

We not only believe in your right to privacy online, we fight for it and continue to build innovative features into Firefox that help keep you in control of your online life.

Learn more about how Firefox is designed to protect your privacy.

Meeting NotesMobile: 2014-07-16


  • Next merge: 2014-07-21

Topics for This Week

Search activity
Hack week in SF this week.

Suggested sites in distributions
Landed in m-c today.

Post-merge Review
Next week is merge week. Tuesday’s product meeting will review features that landed in Aurora and backout those that aren’t ready.

Friends of the Mobile Team

Give a shoutout/thanks to people for helping fix and test bugs. Make sure friends also get awarded a badge. New contributors are highlighted in bold.

  • Bryan Kok worked on bug 1034385 – Empty private tabs panel can be saved as pdf

  • amoghbl1 fixed bug 755228 – ‘Add Search Engine’ label on text input fields should be ‘Add as Search Engine’
  • Capella fixed bug 1037527 – Auto-expand synced tabs clients and bug 1030060 – Regression in Find-In-Page logic

Stand ups

Suggested format:

  • What did you do last week?

  • What are working on this week?
  • Anything blocking you?

Please keep your update to under 2 minutes!

James W. (snorp)

<Read Only>

Alan K. (ack)

Last week:

  • PTO

This week:

  • More review changes, getting closer to landing this

  • Allocating some time for partner support


<Read Only> (PTO today)

Past week
Working on


  • Last week:

    • Screen sharing bug 983504 Make GUM able to pull screen into a MediaStream

    • Various build fixes, some interesting bug 1038799 mouse_cursor_monitor_x11.o: requires dynamic R_X86_64_PC32 reloc against ‘XFixesGetCursorImage’
  • Next week:
    • Window / application sharing

    • bug 1036653 Implement application sharing for getUserMedia
    • bug 1037997 Support multiple monitors for getUserMedia
    • bug 1038926 Add support for window sharing for getUserMedia

Randall Barker

  • Last Week: Got WebRTC standalone patches ready for review.

  • This Week: Get WebRTC standalone patches reviewed. Work on OpenGL WebRTC video player.

Eugen Sawin

  • Janus Proxy (https://wiki.mozilla.org/Mobile/Janus)

    • Multi-phase response chain (low latency vs. bandwidth saving modes)

    • Metrics reporting (proper handling of timeouts and error conditions)
    • Metrics dashboard
Present & Future

Sylvain Cleymans

Last week:

  • Nearly done with Marionette integration.

Next week:

  • Integrate mozjpeg 2.0

  • Fix redirections
  • Work on page loads tests

Martin (mmcdonough)

  • Last Week: Tried to get AAC decoding working within the Fragmented MP4 Reader

  • This Week: Get MediaCodec working directly using MediaExtractor

Brian Nicholson


  • bug 1035439 – Opening a tab from Recent Tabs panel doesn’t work in private browsing

  • bug 1035335 – Searches for numbers result in a search conducted on the actual entire Google Search URL no matter the engine
  • bug 987864 – crash in android.content.res.Resources$NotFoundException
  • bug 1027135 – Fix PageActionLayout concurrency issues
  • bug 1027137 – PageActionLayout cleanup


  • rAc Android UI


<Read Only>

Last week

  • bug 1012462 – Support suggested sites in distribution files

  • bug 1034167 – TwoWayView crashes in Android L
  • bug 1037439 – Remove DISPLAY columns from TopSitesCursorWrapper
  • bug 1010986 – Dynamic panel list view drawn only after scrolling
  • bug 1025062 – Verify that a site is not yet pinned before adding a dupe
  • bug 1025812 – Last added pin to Top Sites Grid has the name grayed out
  • bug 1039471 – crash in java.lang.IllegalStateException: Fragment RecentTabsPanel{422715c0} not attached to Activity at android.support.v4.app.Fragment.getLoaderManager(Fragment.java)

Next week

  • Start tablet engineering planning

  • Keep an eye on suggested sites v2 fallouts


<Read Only>


<Read Only>

  • Search activity hacking!
Working on




<Read Only>

  • bug 1021356 – Refine visuals in empty private tabs screen
  • bug 1025546 – Support various image views in Hub panels

  • bug 1020534 – Tablet toolbar icons hard to read on dark lightweight themes
  • bug 1030363 – Create Sound.jsm for Android
  • bug 1037740 – Private Tabs verbiage is truncated on small tablet
  • bug 1039062 – Remote tabs tray distorted in portrait mode on phone
  • Too busy with other things:

    • Herding bug 941155 (fix talos on mobile to have pageloader tests working in regular mode and nochrome mode) along

    • bug 939350 – Create Python linter wrapper
  • bug 983437 – Delay FHR pruning until the screen is off
  • bug 989441 – Centralized documentation for writing tests


<Read Only>

  • Downloadable distributions is done. Thanks to lucasr for getting suggested sites done!

  • Reviewing search history recording.
  • Starting to review stumbler code.
  • Random Kindle and locale switching backlog, digging through crashes. (E.g., bug 1018240, bug 1031872.)
  • Meeeeeeetings and buugggggs.
Working on

Chris Kitching

  • bug 1039164 – Minor bugfix for `mach mercurial-setup` failing to handle corrupt mercurial config fles. (It got in my way).

  • bug 948509 – More work on “bubbles”. See vaguely interesting screencast:

(and most recent comment for some sort of explanation thereof).


<Read Only>


  • Playing with FHR data and scripts

Anthony Lam

<Read Only>

  • Last week

    • Tablets UX/UI design
  • Next up
    • IN SF for Search Activity

Yuan Wang

  • Launcher and lock screen synthesis

  • Onboarding workshop with Firefox UX
  • Getting insights from SUMO and telemetry about onboarding
  • Talk to Chris Kitching about Share/Send to Firefox


  • preparing to land support for multiple apps per origin early next cycle in DOM bug 778277 and Fennec bug 778279

  • puzzling over bug 1026263 – Error writing default prefs during packaged web app installation
  • considering uplift for bug 1003962 – Line Runner hangs on launch with white screen
Ad astra…
  • bug 1003962 Line Runner hangs on launch with white screen – fixed; considering uplift

  • bug 997717 Errors during package download aren’t handled correctly – patch has review; ready to land
  • bug 1029691 Manifest not being checked on APK installation – patch has feedback
  • bug 1009954 implement unit tests for WebappManager – patch needs updating
  • bug 986085 User-hand-holding to check the Unknown Sources checkbox – patch needs updating
  • bug 778279 Add support of installing of multiple apps off of the same origin for the android web runtime – work-in-progress patch
  • bug 878830 Unable to install any form of web application on the Samsung Galaxy SIV – jhugman to get device
  • bug 1021395 Web app machinery dumps lots of semi-sensitive data to logcat – blocked on bug 1032936
  • bug 960584 notify user of download progress indication when fetching APK – blocked on bug 1029691
  • bug 960703 Manifest icon not used for synthesized APK in Android 2.3 – needs info from jhugman
  • bug 1026263 Error writing default prefs during packaged web app installation – stalled



  • Stumbler build integration is landed.

  • Want to get stumbler landed for nightly, todos for that: further code review, upload scheduling code changed.
  • Trying to do QA on the stumbler in Fennec in its current state
  • PTO next week (cottaging)

Feature Focus

Firefox 31 (Beta) – Release: Jul 22, 2014

Firefox 32 (Aurora) – Release: Sep 2, 2014

Firefox 33 (Nightly) – Release: Oct 14, 2014


  • Wednesdays – 9:30am Pacific, 12:30pm Eastern, 16:30 UTC

  • Dial-in: conference# 99998
    • US/California/Mountain View: +1 650 903 0800, x92 Conf# 99998

    • US/California/San Francisco: +1 415 762 5700, x92 Conf# 99998
    • US/Oregon/Portland: +1 971 544 8000, x92 Conf# 99998
    • CA/Vancouver: +1 778 785 1540, x92 Conf# 99998
    • CA/Toronto: +1 416 848 3114, x92 Conf# 99998
    • UK/London: +44 (0)207 855 3000, x92 Conf# 99998
    • FR/Paris: +33 1 44 79 34 80, x92 Conf# 99998
    • US/Toll-free: +1 800 707 2533, (pin 369) Conf# 99998
  • irc.mozilla.org #mobile for backchannel
  • Mobile Vidyo Room

Meeting NotesFirefox/Gecko Delivery Planning: 2014-07-16

Schedule & Progress onUpcoming Releases (Lukas/Sylvestre/Lawrence)

(read only)

Firefox Desktop & Platform (Javaun/Martin)

Summary of Work In Progress

You can find the most recently completed iteration performance report here
You can see the status of the current iteration in progress here

Beta (31)
  • Download manager should respect Security Zone settings (Bug 1008778)
Aurora (32)
  • “Customize Mode” doesn’t work well if strings for customization option buttons are long (due to l10n or font size) (Bug 987586)

  • Not enough padding on OSX translation infobar (Bug 1022405)
  • Make the ‘Translations by’ string localizable (Bug 1032139)
  • Measure number of times infobar is hidden due to “Never translate this language/site”(Bug 1035337)
Nightly (33)
  • javascript change of href attribute of link rel=”icon” doesnt invalidate the icon (Bug 577892)

  • Debugger Protocol needs a generic “observer notified” unsolicited notification (Bug 797621)
  • Remove the “clear clipboard on exit” during Private Browsing (Bug 815952)
  • local (file://) links don’t work even when configured for company’s internal system (Bug 995943)
  • Breakdown: Make all dialogs windows in-content (Bug 996920)
  • “gContextMenu is null” thrown for first textarea context menu in a window (Bug 1005601)
  • add speculativeConnect() method to search engines (Bug 1006103)
  • exception on shutdown: “Exception calling provider shutdown”, NS_ERROR_FAILURE from nsIObserverService.removeObserver from PreviousExperimentProvider.shutdown (Bug 1012466)
  • Enable password sync with FxA and master password (Bug 1013064)
  • Add tab control options, including undo, to toolbar context menu and tab overflow menu (Bug 1014313)
  • [UX] Quick visual fixes for lightweight theme display on Windows and Linux (Bug 1015157)
  • Run an experiment in 32 beta to determine the best value for dom.ipc.plugins.unloadTimeoutSecs (Bug 1018200)
  • History/Bookmarks migration from Safari fails if the corresponding Property List file uses 3-byte integers (Bug 1018679)
  • Translation infobar: missing HiDPI icon (Bug 1018720)
  • [UX] UX for Sync Migration while migration is in progress (Bug 1018808)
  • API to access to the different components of the “autocomplete” IDL attribute value (Bug 1020496)
  • Send serialized input elements from form to requestAutocomplete UI component (Bug 1020602)
  • Populate pending elements with values given by requestAutocomplete UI (Bug 1020607)
  • Implement the dialog displayed upon form.requestAutocomplete() (Bug 1020865)
  • [UX] Pick and/or create five lightweight themes to promote in customization mode (Bug 1021736)
  • Panel animations have wrong anchor in RTL mode (Bug 1027057)
  • [UX] Designs for in-product promotion of Firefox Account creation (Bug 1028968)
  • Decide on initial Enhanced Tiles placement/replacement of history (Bug 1030892)
  • [UX] Design Spike — Screen sharing permissions UI for WebRTC web apps (Bug 1031424)
  • Make the ‘Translations by’ string localizable (Bug 1032139)
  • JS Error: “gEditItemOverlay is null” when using the keyboard to cancel “Bookmark all tabs” dialog (Bug 1033463)
  • Pasting data URIs to the location bar doesn’t work after Bug 1018154 (Bug 1034845)
  • Fix CUI to not call into ShortcutUtils and/or not log errors as badly in cases where there is no shortcut (Bug 1035164)
  • Changing between “Never remember history” and other settings in about:preferences#privacy and clicking “OK” in the resulting dialog is broken (Bug 1035211)
  • Investigate use of acceptDialog/cancelDialog in in-content prefs tests (Bug 1035308)
  • Measure number of times infobar is hidden due to “Never translate this language/site” (Bug 1035337)
  • about:sessionrestore shows instead of about:welcomeback after a reset (Bug 1035557)
  • Breakdown — Screen sharing permissions UI for WebRTC web apps (Bug 1035577)
  • [Breakdown] Instrument search improvements for fx33 (Bug 1035583)
  • [UX] Update Crash Reporting for GMP Plugins (openh264) (Bug 1035854)
  • Newly added links are type=undefined instead of history (Bug 1036280)
  • [Search experiment] Search experiment should only target en-US (Bug 1036719)
  • Log the number of searches being done from the url bar. (Bug 1036917)
  • Log the number of searches being done from the search bar. (Bug 1036919)
  • Log the number of searches being done from about:newtab.(Bug 1036920)
  • Log the number of searches being done from about:home. (Bug 1036922)
  • Tree row is no longer sortable in content preferences sub dialog (Bug 1037081)
  • Invert icons in the menubar in dark themes on Linux (Bug 1037411)

Firefox Mobile (Mark/Brad/Jenn)

Work In Progress

You can find more on upcoming feature plans in the[roadmap]

Uplifts from the past week
Beta (31)
  • NullPointerException when accessing ActionBar (Bug 1030738)

  • Fix Yahoo search codes (Bug 1033000)
  • crash in android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? at android.app.ContextImpl.startActivity(ContextImpl.java) (Bug 1034017)
Aurora (32)
  • Dynamic panel list view drawn only after scrolling (Bug 1010986)

  • Regression: Empty lists view, no data is shown or fetched (Bug 1017554)
  • Regression: Selecting “No video” option from the permission prompt still shows the content of the device camera. (Bug 1018928)
  • Page is displayed blank after choosing the “Show” popup option (Bug 1024391)
  • Last added pin to Top Sites Grid has the name grayed out (Bug 1025812)
  • Regression: Menu breaks on Firefox 29+ on tablets with hardware menu (Bug 1030113)
  • Fix JNI pointers to use longs (Bug 1032460)
  • Searches for numbers result in a search conducted on the actual entire Google Search URL no matter the engine (Bug 1035335)
Landings from the past week
Nightly (33)
  • Delay snippets initialization until delayed startup. (Bug 964511)

  • Cleanup the “combined” bookmarks and history view (Bug 1024289)
  • Closed private tabs appears in recent tabs panel (Bug 1030757)
  • [Android L Preview] – Crash on startup – java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol “issetugid” referenced by “libmozglue.so”… (Bug 1030899)
  • Kindle Fire: activity and fragment transitions are obtrusive and uncomfortable (Bug 1031872)
  • TwoWayView crashes in Android L (Bug 1034167)
  • [regression] Remote tabs panel disappears on device rotation (Bug 1034384)
  • Regression: Sync promo mangled with active tab list in the tab tray (Bug 1034607)
  • Fail to launch webapp with TypeError: navigator.mozApps is undefined (Bug 1035867)

Developer Tools (Jeff/Rob/Dave)

<Read Only>

Feedback Summary (Cheng/Tyler/Matt)


  • Updated hotfix is deployed!

  • Reports due out this week (before next Wed) from us: Accounts signup survey, USR 30 (Desktop + Android)


Something to Think About

IBM and Apple signed an agreement earlier this week where IBM will re-sell and support Apple gear to and for their corporate customers. While many have identified this as a big win for Apple, it’s also a big win for IBM, whose products and services are used to manage the computing environments by and for their customers. The agreement is part of a segment that is heating up, with Microsoft also announcing lower-cost Windows 8 laptops to complement their Surface offerings, and keep pace with the changes Google is making to make Android and ChromeOS (and Google productivity services) a more attractive platform in the Enterprise environment.
Why we should care: Apple, Google, and Microsoft continue to invest in their cross-platform strategy, linking their core products to Enterprise – which include institutional users – with the aim of giving end-users access to what they need, when they need it, regardless of platform. Each org has different reasons for doing it, and are pursuing strategies that don’t (always) take advantage of the web as a platform.

Worth a Read


Marketing, Press & Public Reaction (Arcadio)

== Questions, Comments, FYI ==

Planning Meeting Details

  • Wednesdays – 11:00am PT, 18:00 UTC

  • Mountain View Offices: Warp Core Conference Room
  • Toronto Offices: Finch Conference Room
  • irc.mozilla.org #planning for backchannel
  • (the developer meeting takes place on Tuesdays)

Video/Teleconference Details – NEW

Software CarpentryBootcamps in Cyprus and Jordan

Last month, we held two bootcamps in Cyrpus and Jordan organised by the LinkSCEEM project. Both camps were part of larger workshops, with the final two days of the workshop in Cyprus focussed on the OpenMP and OpenACC APIs for shared-memory multi-processing and accelerators. It was held June 10-13 with 35 participants coming from 6 different countries (Cyprus, Greece, Lebanon, Jordan, Israel, and Egypt) with all the non-local participants being funded by the project.

In Jordan the workshop was specifically organised for the user community of the SESAME synchrotron light facility with topics related to high performance computing (HPC) and its applications to synchrotron radiation data analysis. It had more than 30 participants from 5 countries.

In both cases the audiences had a very broad skill level and some found the introductory content a little shallow when there wasn't sufficient time to work on examples. Additionally, the self-assement of skills by the participants were not always consistent. The problem with organising such events is that the possible number of workshops is strictly limited since they rely heavily on external funding (and external instructors). On top of that, the HPC target audience is so broad that it's difficult to settle on a program that has overlap with the interests of the entire group (some are developers, some are users, some are just curious). This leads to the situation where we knowingly create a program that has too much content inside because we believe that it may be one of very few opportunities to reach the broad base we are targeting. We also hope to prepare the students for further learning on their own once they have had some experience with the methodologies, even if that experience was short.

We've tried to enable this goal by constructing a Supercomputing Training Portal where participants can find much more detailed information on the topics of the workshops. The nicest feature of the portal is that it also allows gives the students access to a pure HTML5 in-browser terminal emulator where they can connect to an HPC resource on the back-end to allow them to actually do hands-on work. While it's still in it's early beta phase, we're already seeing the portal being used by students both during and after workshops have ended.

Cyprus Workshop
Cyprus Workshop

SESAME Workshop
SESAME Workshop in Jordan

Air MozillaMeetup Rust Paris #5 RustLex by Leo Testard.

Meetup Rust Paris #5 RustLex by Leo Testard. Presentation of the RustLex lexical analyser generator syntax extension for Rust.

The DenTwo new features for Firefox for Android

feature3b_sharingWe’re happy to announce two awesome new Firefox for Android features:

1. Home, sweet customizable, Home
Arrange your Home just the way you like. Add favorite sites to your home screen panels, choose your default panel or hide ones you don’t need.

2. Quick share buttons
Now you can share Web pages faster and easier through your favorite social apps using quick share buttons.

To enjoy these new features, make sure you’re running the latest version of Firefox for Android — or get it now for the first time!

Air MozillaProduct Coordination Meeting

Product Coordination Meeting Weekly coordination meeting for Firefox Desktop & Android product planning between Marketing/PR, Engineering, Release Scheduling, and Support.

hacks.mozilla.orgHow can we write better software? – Interview series, part 1

Do you ever look code and murmur a string of “WTFs?” Yeah, me too. As often as not, the code is my own.

I have spent my entire professional career trying to write software that I can be proud of. Writing software that “works” is difficult. Writing software that works while also being bug-free, readable, extensible, maintainable and secure is a Herculean task.

Luckily, I am part of a community that is made up of some of the best development, QA and security folks in the industry. Mozillians have proven themselves time and time again with projects like Webmaker, MDN, Firefox and Firefox OS. These projects are complex, huge in scope, developed over many years, and require the effort of hundreds.

Our community is amazing, flush with skill, and has a lot to teach.

Interviews and feedback

This is the first of a series of interviews where I take on the role of an apprentice and ask some of Mozilla’s finest

“How can we, as developers, write more superb software?”

Since shipping software to millions of people involves more than writing code, I approach the question from many viewpoints: QA, Security and development have all taken part.

The target audience is anybody who writes software, regardless of the preferred language or level of experience. If you are reading this, you are part of the part of the target audience! Most questions are high level and can be applied to any language. A minority are about tooling or language specific features.


Each interview has a distinct set of questions based around finding answers to:

  • How do other developers approach writing high quality, maintainable software?
  • What does “high quality, maintainable software” even mean?
  • What processes/standards/tools are being used?
  • How do others approach code review?
  • How can development/Security/QA work together to support each-other’s efforts?
  • What matters to Security? What do they look for when doing a security review/audit?
  • What matters to QA? What do they look for before signing off on a release?
  • What can I do, as a developer, to write great software and facilitate the entire process?

I present the highlights of one or two interviews per article. Each interview contains a short introduction to the person being interviewed followed by a series of questions and answers.

Where an interview’s audio was recorded, I will provide a link to the full transcript. If the interview was done over email, I will link to the contents of the original email.

Now, on to the first interview!

Introducing Fernando Jimenez Moreno

Fernando Jimenez MorenoThe first interview is with Fernando Jimenez Moreno, a Firefox OS developer from Telefonica. I had the opportunity to work with Fernando last autumn when we integrated Firefox Accounts into Firefox OS. I was impressed not only with Fernando’s technical prowess, but also his ability to bring together the employees of three companies in six countries on two continents to work towards a common goal.

Fernando talks about how Telefonica became involved in Firefox OS, how to bring a disparate group together, common standards, code reviews, and above all, being pragmatic.

What do you and your team at Telefonica do?

I’m part of what we call the platform team. We have different teams at Telefonica, one is focused on front end development in Gaia, and the other one is focused on the platform itself, like Gecko, Gonk and external services. We work in several parts of Firefox OS, from Gecko to Gaia, to services like the SimplePush server. I’ve personally worked on things like the Radio Interface Layer (RIL), payments, applications API and other Web APIs, and almost always jump from Gecko to Gaia and back. Most recently, I started working on a WebRTC service for Firefox OS.

How did Telefonica get involved working with Mozilla?

Well, that’s a longer story. We started working on a similar project to Firefox OS, but instead of being based on Gecko, we were working with WebKit. So we were creating this open web device platform based on WebKit. When we heard about Mozilla doing the same with Gecko, we decided to contact you and started working on the same thing. Our previous implementation was based on a closed source port of WebKit and it was really hard to work that way. Since then, my day to day work is just like any other member of Telefonica’s Firefox OS team, which I believe is pretty much the same as any other Mozilla engineer working on B2G.

You are known as a great architect, developer, and inter-company coordinator. For Firefox Accounts on Firefox OS, you brought together people from Telefonica, Telenor, and Mozilla. What challenges are present when you have to work across three different companies?

It was quite a challenge, especially during the first days of Firefox OS. We started working with Mozilla back in 2011, and it took some time for both companies to find a common work flow that fit well for both parts. I mean, we were coming from a telco culture where many things were closed and confidential by default, as opposed to the openness and transparency of Mozilla. For some of us coming from other open source projects, it wasn’t that hard to start working in the open and to be ready to discuss and defend our work on public forums. But, for other members of the team it took some time to get used to that new way of working, and new way of presenting our work.

Also, because we were following agile methodologies in Telefonica while Mozilla wasn’t still doing it, we had to find this common workflow that suits both parts. It took some time to do it, a lot of management meetings, a lot of discussions about it. Regarding working with other telco companies, the experience has also been quite good so far, especially with Telenor. We still have to be careful about the information that we share with them, because at the end of the day, we are still competitors. But that doesn’t mean we cannot work with them in a common target like what happened with Firefox Accounts.

When Mozilla and Telefonica started out on this process, both sides had to change. How did you decide what common practices to use and how did you establish a common culture?

I think for this agile methodology, we focused more on the front end parts because Gecko already had a very known process and a very known way of developing. It has it’s own train mechanism of 6 weeks. The ones doing the most, the biggest effort of finding that common workflow were the front end team because we started working on Gaia and Gaia was a new project with no fixed methodologies.

I don’t know if we really found the workflow, the perfect workflow, but I think we are doing good. I mean we participate in agile methodologies, but when it turns out that we need to do Gecko development and we need to focus on that, we just do it their way.

In a multi-disciplinary, multi-company project, how important are common standards like style guides, tools, and processes?

Well, I believe when talking about software engineering, standards are very important in general. But, I don’t care if you call it SCRUM or KANBAN or SCRUMBAN or whatever, or if you use Git workflow or Mercurial workflow, or if you use Google or Mozilla’s Javascript style guide. But you totally need some common processes and standards, especially in large engineering groups like open source, or Mozilla development in general. When talking about this, the lines are very thin. It’s quite easy to fail spending too much time defining and defending the usage of these standards and common processes and losing the focus on the real target. So, I think we shouldn’t forget these are only tools, they are important, but they are only tools to help us, and help our managers. We should be smart enough to be flexible about them when needed.

We do a lot of code reviews about code style, but in the end what you want is to land the patch and to fix the issue. If you have code style issues, I want you to fix them, but if you need to land the patch to make a train, land it and file a follow on bug to fix the issues, or maybe the reviewer can do it if they have the chance.

Firefox OS is made up of Gonk, Gecko and Gaia. Each system is large, complex, and intimidating to a newcomer. You regularly submit patches to Gecko and Gaia. Whenever you dive into an existing project, how do you learn about the system?

I’m afraid there is no magic technique. What works for me might not work for others for sure. What I try to do is to read as much documentation as possible inside and outside of the code, if it’s possible. I try to ask the owners of that code when needed, and also if that’s possible, because sometimes they just don’t work in the same code or they are not available. I try to avoid reading the code line by line at first and I always try to understand the big picture before digging into the specifics of the code. I think that along the years, you somehow develop this ability to identify patterns in the code and to identify common architectures that help you understand the software problems that you are facing.

When you start coding in unfamiliar territory, how do you ensure your changes don’t cause unintended side effects? Is testing a large part of this?

Yeah, basically tests, tests and more tests. You need tests, smoke tests, black box tests, tests in general. Also at first, you depend a lot on what the reviewer said, and you trust the reviewer, or you can ask QA or the reviewer to add tests to the patch.

Let’s flip this on its head and you are the reviewer and you are reviewing somebody’s code. Again, do you rely on the tests whenever you say “OK, this code adds this functionality. How do we make sure it doesn’t break something over there?”

I usually test the patches that I have review if I think the patch can cause any regression. I also try and run the tests on the “try” server, or ask the developer to trigger a “try” run.

OK, so tests.. A lot of tests.

Yeah, now that we are starting to have good tests in Firefox OS, we have to make use of them.

What do you look for when you are doing a review?

In general where I look first is correctness. I mean, the patch should actually fix the issue it was written for. And of course it shouldn’t have collateral effects. It shouldn’t introduce any regressions. And as I said, I try to test the patches myself if I have the time or if the patch is critical enough, to see how it works and to see if it introduces a regression. And also I look that the code is performant and is secure, and also if, I always try to ask for tests if I think they are possible to write for the patch. And I finally look for things like quality of the code in general, and documentation, coding style, contribution, process correctness.

You reviewed one of my large patches to integrate Firefox Accounts into Firefox OS. You placed much more of an emphasis on consistency than any review I have had. By far.

Well it certainly helps with overall code quality. When I do reviews, I mark these kinds of comments as “nit:” which is quite common in Mozilla, meaning that “I would like to see that changed, but you still get my positive review if you don’t change it, but I would really like to see them changed.”

Two part question. As a reviewer, how can you ensure that your comments are not taken too personally by the developer? The second part is, as a developer, how can you be sure that you don’t take it too personally?

For the record, I have received quite a few hard revisions myself. I never take them personally. I mean, I always try to take it, the reviews, as a positive learning experience. I know reviewers usually don’t have a lot of time to, in their life, to do reviews. They also have to write code. So, they just quickly write “needs to be fixed” without spending too much time thinking about the nicest ways to say it. Reviewers only say things about negative things in your code, not negative, but things that they consider are not correct. But they don’t usually say that the things that are correct in your code and I know that can be hard at first.

But once you start doing it, you understand why they don’t do that. I mean, you have your work to do. This is actually especially hard for me, being a non-native English speaker, because sometimes I try to express things in the nicest way possible but the lack of words make the review comments sound stronger than it was supposed to be. And, what I try to do is use a lot of smileys if possible. And always, I try to avoid the “r-” flag if I mean, the “r-” is really bad. I just clear it, use use the “feedback +” or whatever.

You already mentioned that you try to take it as a learning experience whenever you are developer. Do you use review as a potential teaching moment if you are the reviewer?

Yeah, for sure. I mean just the simple fact of reviewing a patch is a teaching experience. You are telling the coder what you think is more correct. Sometimes there is a lack of theory and reasons behind the comments, but we should all do that, we should explain the reasons and try to make the process as good as possible.

Do you have a snippet of code, from you or anybody else, that you think is particularly elegant that others could learn from?

I am pretty critical with my own code so I can’t really think about a snippet of code of my own that I am particularly proud enough to show :). But if I have to choose a quick example I was quite happy with the result of the last big refactor of the call log database for the Gaia Dialer app or the recent Mobile Identity API implementation.

What open source projects would you like to encourage people to participate in, and where can they go to get involved?

Firefox OS of course! No, seriously, I believe Firefox OS gives to software engineers the chance to get involved in an amazing open source community with tons of technical challenges from low level to front end code. Having the chance to dig into the guts of a web browser and a mobile operative system in such an open environment is quite a privilege. It may seem hard at first to get involved and jump into the process and the code, but there are already some very nice Firefox OS docs on the MDN and a lot of nice people willing to help on IRC (#b2g and #gaia), the mailing lists (dev-b2g and dev-gaia) or ask.mozilla.org.

How can people keep up to date about what you are working on?

I don’t have a blog, but I have my public GitHub account and my Twitter account.


A huge thanks to Fernando for doing this interview.

The full transcript is available on GitHub.

Next article

In the next article, I interview Brian Warner from the Cloud Services team. Brian is a security expert who shares his thoughts on architecting for security, analyzing threats, “belts and suspenders”, and writing code that can be audited.

As a parting note, I have had a lot of fun doing these interviews and I would like your input on how to make this series useful. I am also looking for Mozillians to interview. If you would like to nominate someone, even yourself, please let me know! Email me at stomlinson@mozilla.com.

QMOThe Future of Testdays

I do not think it’ll surprise anyone who has participated in the QA community in recent months when I say, “Testdays are broken!”. They no longer seem to be the energetic, robust, purposeful events they were in the past. This happened for a variety of reasons, not least of which was that we lost sight of the value these events provided to Mozilla and our volunteers. We need to refocus these events, to build a more vibrant and purposeful program that serves to mentor, to establish relationships, and to enable people to contribute in meaningful ways.

Reversing the Tide

It is not enough for a couple people within Mozilla to try to reform this program; we tried this numerous times and failed. The only way we solve this problem is by working together. We need your help and support to make this program a success. Internally, a couple of us have been brainstorming and we’ve come up with an extensive list describing what we believe to be working and what isn’t, and some ideas of new things to try.

Our goal for this quarter is to get help from you, our community, to determine our vision of what this program can and should be, to define a strategy to realize that vision, and to resolve some of the lowest hanging fruit. To this end, our first priority is to create a platform for conversation, to share experiences, and to start working together to solve our problems.

The community remains, and has always been, one of the biggest contributors to Mozilla’s success. We could not push Firefox and the Web forward at the speed and level of quality the world has come to expect without your support and contributions. Testdays have always been intended as a “gateway” to contribution and this will not change. We are hoping to fix the program without disrupting current activity and opportunity.

Calls to Action

To kick things off, we have a few calls to action we need you to take:

1. Fill out our meeting survey so we can determine a day/time for a new weekly meeting. This meeting will be a place for everyone with a vested interest to voice their concerns and to get their questions answered. We’ll be meeting Thursdays at 9am PDT (UTC -7) until we get enough feedback to set something more official.

2. Review our wiki to get a sense of what we’ve brainstormed so far. We will continually review and update this strategy as feedback is collected and as things evolve.

3. Update our etherpad with your feedback, questions, and suggestions. We will be reviewing this periodically to integrate into the strategy. Here are example some questions to help get you thinking:

  • Why don’t you attend testdays?
  • Why don’t you host your own testdays?
  • What do you like about testdays?
  • What don’t you like about testdays?
  • What would you like to see in testdays?

4. If you plan to participate in the upcoming QA work week we’ll be having a session to review the feedback so far and to kick off some discussions. Think about what you want to contribute to our vision and bring them to this session. We’ll try our best to make this session remotely accessible for those of you unable to attend in person.

5. Continue to participate in and organize testdays, and encourage your friends to participate.

We’ll be meeting on Thursday July 17 at 9am PDT (UTC -7) to kick things off. I hope you’ll join us over the coming days, weeks, and months making this program a great way to contribute to Mozilla and to the QA team.

QMOBug Verification Day

Hello mozillians!

Wednesday, July 23rd, we will be holding our weekly Bug Verification Day. This event is held on the #testday IRC channel and it’s addressed to everyone willing to get involved in improving Firefox.

You don’t need to have any previous experience in working with bugs. Ask for help on the #testday channel and someone there will give you assistance. More details are available in the wiki page we set up for you.

If you’re unable to attend these meetings and still want to get involved, you can verify bugs on your own time. Just add the [bugday-20140723] tag to the whiteboard or a comment for every bug you work on, so we know you participated to this event.

Join us and help make Firefox better!

When: July 23, 2014.

QMOBug Triage Day

Hello mozillians!

Monday, July 21st we will be holding our weekly Bug Triage Day. Join us on the #testday IRC channel and get involved!

You don’t need to have any previous experience in working with bugs. Ask for help on #testday and someone there will offer you assistance. Details are also available in this event’s wiki page.

If you aren’t able to attend this event but still want to get involved, you can triage bugs on your own time.

Remember to add the [bugday-20140721] tag to the whiteboard or a comment for every bug you work on, so we know you participated to this event.

Join us and help make Firefox better!

When: July 21, 2014.

Meeting NotesMozilla Platform: 2014-07-15

Need To Know

(Release and system issues that may impact engineering this week.)

Notices/Schedule (lsblakk/sylvestre)

Next Merge: July 21, 2014 Next Release: July 22, 2014
Central: 33 Aurora: 32 Beta: 31 Release: 30
  • build of beta 10 & RC

  • Tile + newtab page probably disabled
  • Decrease of the top crash thanks to the disabling of ggc

Build Changes (gps)

(Build changes of which engineers should be aware.)

RelEng (catlee)

(Repo, test, and other information for engineers from the release engineering team.)

Upcoming Outages/Upgrades

(System outages/upgrades and tree closures that impact engineering.)

Quality Programs

(An opportunity to hear about status with the various quality programs that do not have a formal team structure.)

OrangeFactor (ryanvm)

<Read Only>

  • Past week’s OrangeFactor: 9.26 (Previous Week: 7.65).

  • #2/#3: bug 1036031/bug 1036036 – Intermittent mochitest-bc docShell leaks.
  • No progress on serviceworker bugs brought up last week (and a couple new ones filed on other platforms since). Will begin the process of disabling the tests.
  • 29 intermittent failures fixed in the last week – List – Thanks!.

MemShrink (njn)

  • No update.

Stability (kairo/bsmedberg)

<Read Only>

  • Overall numbers are late in coming in today (you might still see errors), but significantly improving, esp. for 31 beta (on aurora, bad older builds still overshadow the improved situation of current builds).

  • Thanks for everyone who helped getting 31 into shape (backing out gfx blacklisting changes, disabling GGC, blocklisting crashing adware DLLs, etc.) so we now seem to look decent for release.

Team Stand-ups

(In <2 mins, what did your team accomplish last week, on what is your team working on this week, and on what, if anything, is your team blocked? No questions during the stand-ups. All questions should be asked during the roundtable.)

DOM (jst/overholt)

Electrolysis (e10s) (blassey)

  • bug 1034321 – Printing a remote tab no longer hangs the browser

  • and other fixes

Firefox Platform (bsmedberg)

  • Plan to ship the update hotfix tomorrow – users currently on Firefox 10-28 except for ESR24 will be automatically updated if possible, or shown a SUMO prompt if there are problems.

Firefox Mobile (mfinkle/blassey)

Work In Progress

You can find more on upcoming feature plans in the[roadmap]

Landings from the past week
Nightly (33)
  • Delay snippets initialization until delayed startup. (Bug 964511)

  • Cleanup the “combined” bookmarks and history view (Bug 1024289)
  • Closed private tabs appears in recent tabs panel (Bug 1030757)
  • [Android L Preview] – Crash on startup – java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol “issetugid” referenced by “libmozglue.so”… (Bug 1030899)
  • Kindle Fire: activity and fragment transitions are obtrusive and uncomfortable (Bug 1031872)
  • TwoWayView crashes in Android L (Bug 1034167)
  • [regression] Remote tabs panel disappears on device rotation (Bug 1034384)
  • Regression: Sync promo mangled with active tab list in the tab tray (Bug 1034607)
  • Fail to launch webapp with TypeError: navigator.mozApps is undefined (Bug 1035867)

Firefox OS Devices/Porting (ericchou)

<Read Only>

  • Device porting (Gonk team)

  • Bluetooth (members: Shawn Huang, Ben Tian, Jamin Liu, Jocelyn Liu)

    • Team worked on WebBluetooth API and moving Bluedroid out-of-process. Both are on track.

    • There are still 2 PTS cert blockers opened because of a system message issue. Jamin is cooperating with Henry from RIL team to solve them.
  • Media Playback (members: Bruce Sun, Blake Wu, Star Cheng)

    • bug 941302 – PlatformDecoderModule for FirefoxOS/B2G (2.1 feat+)

      • Still under review. Blake also tested his implementation to see if MSE was working on B2G and filed a few bugs.
    • bug 904177 – Integrate MediaCodec into gecko for media playback (2.1 feat+)
      • All patches are ready to go.
    • bug 1026167 – [Clock] Phone calls can be interrupted by clock alarms
      • Spent some time on discussing with Gaia, QA, UX and partner.

      • Star provided a solution which modifies Android HAL for partner to disable the notification sound when the alarm goes off.
  • Device Storage & Stability (members: Alphan Chen)

    • bug 1029533 – MTP boilerplate

      • The patch was r+’ed and it worked on Flame, but it was backed out because of an emulator toolchain problem. Dave is working on it.

      • Even after applying Dave’s patch, MTP on Flame didn’t seem to work on Windows 7. Alphan is taking a look.
    • bug 1036861 – [MTP] The file size is incorrect (0 bytes)
      • Eric provided a patch which was based on the on for bug 1029533. It got r+ and we’re still waiting bug 1029533 being fixed.

Firefox OS Media Recording (cjku)

<Read Only>

  • bug 1033121 – Race in nsTimerEvent destructor

  • bug 1016184 – [Touch Caret] Enable touch caret on B2G
  • bug 1035045 – [LayerScope] Send packets to the layerscope viewer by using google protocol buffer
  • bug 1023190 – There is a horizontal line when drawing background image on flame 1.4 blocker
  • bug 987529 – Implement Vsync dispatch pipeline

Firefox OS Telephony/WIFI/NFC (kenhkchang)

<Read Only>

  • bug 1034522 – B2G Emulator: Add console command – sim status .

  • bug 1023695 – [B2G][SMS] Introduce sms-deleted event to provide the awareness of change in MobileMessageDB for multiple apps interested in SMS.
  • bug 813893 – B2G RIL: support UMTS CBS Message
  • bug 1012549 – Support import PKCS#12 in wifi
  • bug 979888 – B2G NFC: support UICC-based card-emulation as per Mifare.
  • bug 979891 – B2G NFC: NFC Daemon shall support HCI Event EVT-TRANSACTION handling.
  • bug 1030002 – [B2G][RIL] Use webidl attribute, CheckPermissions, for checking mobileconnection/mobilenetwork permission.
  • bug 1022490 – [dolphin][flame][perf] improve the performance of exporting Contacts to USIM card.
  • bug 843452 – B2G RIL: use ipdl as IPC in MozMobileConnection.
  • bug 1003711 – [RTSP] Build Darwin Streaming Server on B2G emulator
  • bug 1032111 – [RTSP] Basic RTSP test case on ICS emulator
  • bug 1035074 – [system-message-api] SystemMessageManager makes JS Error: “this._dispatchers is null”
  • bug 935843 – B2G RIL: Parse EF_IMG from SIM
  • bug 824145 – B2G STK: Support for STK icon display
  • bug 1029721 – CDMA call waiting call is not logged in call history

GFX (milan)

  • Firefox OS:

    • ~ 5 blocker bugs for 2.0 (Gecko 32), mostly related to the change of homescreen type and increased memory usage; there is also a nasty race/lock/gralloc one that shows up with Flames configured to low memory setup.

    • 2.1 (Gecko 34) features lined up, see feature list for details.
  • Desktop:

    • OMTC Windows aiming to ride the 34 train, tracked in bug 1036457

    • Some E10S related prep work going on
    • Started conversations about helping with media source extensions bug 1038527

JS (naveed)

<Read Only>

  • Compiler (JIT)

    • bug 1037871: Landed patch to enable Latin1 strings (performance and memory gains)
  • Garbage Collection

    • B2G Hazard build landed. Currently hidden. It is running and green.
  • Front End and Other

    • n/a

Layout (jet/dbaron)

<Read Only>

Media (mreavy)

<Read Only>

  • OpenH264 for WebRTC nearing completion

    • Sandboxing should land soon

    • API changes about done
    • download/update work up for review with some more fixes coming
  • Screensharing (bug 983504 nearing completion
    • Initially Desktop Screen and Window sharing only (app sharing later)

    • Access via whitelist in 33, open up more after that along with UI improvements and more sec work
  • Expect to land webrtc audio fixes for Macs (especially MacBookPros that have the speaker right under the microphone – Doh!)
  • Plan to fix Mac driver/OS long-echo-when-changing-output-devices bug
  • Loop may go to Aurora in 33

Necko (dougt/jduell)

<Read Only>

  • HTTP/2 spec continues to be fiddled with: we’d like that to stop and finalize. IETF meeting in Toronto next week, with 3 necko folks attending, hopefully we can focus on getting the spec done for good.

Performance (vladan)

  • Metrics team is doing a Telemetry dashboard visual redesign. Let me know if you’re a frequent user of the dashboard and you’d like to be consulted on use-cases, visual design
  • New Talos tests: tp5-scroll test of scroll performance on real webpages bug 1006551, WebGL test bug 1020663

    • Thanks to Avi’s and others efforts, Talos is now reliable. Please don’t ignore the regression emails! Do let us know if you encounter a false regression, we want to fix noisy tests

WebAPI (overholt)


(Comments and questions that arise during the course of the meeting or otherwise do not have a section.)

  • (clouserw) about:apps targeting Firefox 33. Who should I be working with?

<Read only beyond this point>

Mailing List Threads

(Threads that are likely to be of interest to engineering from various mailing lists.)

Good Reads

(Links to blog posts, books, videos, etc. that you think will be of interest to others.)

irc #planning Log From This Meeting

11:06 overholt: clouserw, maybe it'd be neat to have a marketplace update every once in a while at this meeting
11:10 dveditz: cpeterson: jedp isn't here anymore... maybe take the Identity section out of the template or find a new owner?
11:11 cpeterson: dveditz: thanks. do you have a owner in mind? :)
11:12 dveditz: no, I don't know what's up there these days
11:12 dveditz: maybe replace Identity with FxA?
11:13 cpeterson: ok
11:14 overholt: cpeterson, I wanted to quickly mention some DOM and WebAPI Q3 goals but I added them to the wiki after we started
11:14 cpeterson: overholt: we can come back to you next
11:14 overholt: cpeterson, perfect, thanks
11:18 lmandel: clouserw: Speak with Marco Mucci and Jenn Chaulk.
11:18 clouserw: thanks
11:18 lmandel: clouserw: bsmedberg also suggested that you speak with madhava.
11:18 clouserw: yep, will do. thanks
11:18 bsmedberg: clouserw: FWIW, my impression is that the app support in Firefox is half-baked and isn't ready for release
11:19 clouserw: bsmedberg: we have to ride the trains though
11:19 bsmedberg: but that was from a survey of the status a quarter ago
11:19 clouserw: right
11:19 dveditz: fx33 ends this week
11:19 dveditz: -end
11:19 clouserw: it's much improved

Engineering Meeting Details

  • Tuesday 2014-07-1511:00 am Pacific Standard Time

  • Dial-in: conference# 98411
    • US/California/Mountain View: +1 650 903 0800, x92 Conf# 98411

    • US/California/San Francisco: +1 415 762 5700, x92 Conf# 98411
    • US/Oregon/Portland: +1 971 544 8000, x92 Conf# 98411
    • CA/Vancouver: +1 778 785 1540, x92 Conf# 98411
    • CA/Toronto: +1 416 848 3114, x92 Conf# 98411
    • UK/London: +44 (0)207 855 3000, x92 Conf# 98411
    • FR/Paris: +33 1 44 79 34 80, x92 Conf# 98411
    • US/Toll-free: +1 800 707 2533, (pin 369) Conf# 98411
  • Engineering Vidyo Room / Air Mozilla / MTV Warp Core / TOR Finch / SFO Warfield / PDX Hair of the Dog
  • join irc.mozilla.org #planning for back channel

Air MozillaA new GVN for IonMonkey

A new GVN for IonMonkey We recently landed a new GVN implementation in IonMonkey. The new implementation is faster, simpler, and more powerful than the one it replaces. This talk gives an overview of GVN in general, the new GVN implementation in IonMonkey, and examines some of the major design tradeoffs.

Mozilla JavaScriptIonMonkey: Optimizing Away

Firefox 32

Firefox uses two just-in-time compilers: Baseline and IonMonkey. When a web page contains some JavaScript code, this code is first executed in the interpreter. Then after running the same code multiple times, we compile the code with Baseline. After hundreds of iterations on the same code, we trigger a compilation with IonMonkey.

Baseline is a method compiler which focuses on optimizing each instruction individually. Each instruction checks for optimized cases based on what was previously observed, and it modifies itself every time a new case is detected.

IonMonkey is a method compiler too, but its goal is to optimize instructions across the entire method, and it can remove instructions which are not needed. IonMonkey is also a greedy optimizer, as it takes the currently observed cases as the only possible options and assumes that nothing will change. For example, if a variable has only ever held numbers, IonMonkey assumes that variable will always be a number. If one of the assumptions fails, we cannot continue execution in IonMonkey. Otherwise we might compute incorrect results, or worse, execute random pieces of code. In fact we must discard the IonMonkey code and resume execution in Baseline.


Resuming execution in Baseline implies that we need to stop IonMonkey execution, list all local and temporary variables, reconstruct a stack frame with the layout expected by Baseline, and jump to Baseline code. This process is called a bailout.

To list all variables, IonMonkey emulates the Baseline stack frame when we generate the control flow graph. On the graph, we annotate every block entry and instructions which are doing side effects, such as calls and stores, with resume points. These resume points are used in a similar way as checkpoints in video games — they’re the location where you will start over if something goes wrong. Each resume point captures the layout of the Baseline stack frame, and is used by the generated code to resume execution of the program if IonMonkey’s code is no longer valid.

Representation of a Snapshot

Each resume point contains a list of MIR (Middle-level Intermediate Representation) Instructions which are listed in the same order as the Baseline’s frame is stored on the stack. These MIR Instructions are listed so that we can track the register/stack allocations of the return value for each captured instruction.

Resume points are used by instructions which might fail. For example, when a call returns an object where it used to always return a Number, or when a math operation/function returns a floating point number where it used to only return integers.

When an instruction that might fail is lowered (converted to a lower intermediate representation), we attach a snapshot to the instruction. The snapshot captures the allocation of every MIR Instruction which is listed in the resume point, at the location of the lowered instruction. We do this for each instruction because a value contained in a register might be evicted to the stack if we no longer need it. Thus, for bailing out we need to track all register allocation changes.

An allocation is either a register, a floating point register, a stack offset in IonMonkey’s frame or a constant which is stored next to the code. All these snapshots and allocations are serialized in order to be used during bailouts.

When an instruction fails, the bailout decodes the snapshot and each allocation. The snapshot is used to reconstruct the Baseline frame that we were supposed to have at the last resume point. Allocations are used to read the value out of IonMonkey’s frame and code, to fill the reconstructed frame. And finally, we replace the IonMonkey frame with the Baseline frame and resume Baseline execution.

What Baseline wants, IonMonkey executes

IonMonkey has multiple optimizations, such as Unreachable Code Elimination (UCE) and Dead Code Elimination (DCE). UCE removes then/else blocks which are never taken as the condition can be inferred. DCE removes instructions which are never used. These optimizations help IonMonkey to generate faster code, as there are fewer instructions to execute.

Baseline makes no assumptions about which part of the code needs to run. Its stack frames are always complete and correct. Thus, IonMonkey cannot remove a MIR Instruction if there is a resume point which captures it. This also implies that a MIR Instruction has to be executed before all of the resume points that use it. As a consequence, any unused MIR Instruction, which is captured by a resume point, has to be executed by IonMonkey.

IonMonkey’s optimizations are limited by the expectations of Baseline. Any optimization done by IonMonkey should not be observable within Baseline. The following pieces of code illustrates the limitations added by Baseline:

function getCond() {
  console.log("getCond returns false");
  return false;

function maybeMul2(arg) {
  var x = 2 * arg;
  // Baseline expects "x" to be on the stack.

  var cond = getCond();
  // IonMonkey cannot resume before a call.

  if (cond) {
    return x;
  return arg;

Once the call of “getCond()” has executed in IonMonkey, we cannot resume in Baseline before that call. If we did, Baseline would execute the call to “console.log” a second time. This implies that the resume point has to capture the MIR Instruction which computes “x”. Thus we have to compute the value of “x” before the call, even in IonMonkey.

IonMonkey can inline the function “getCond()”, determine that “cond” is always false, and eliminate the body of the if-statement as dead code. The optimized IonMonkey code therefore looks like this:

function maybeMul2(arg) {
  var x = 2 * arg; // expected by Baseline.

  // inlined code of getCond
  console.log("getCond returns false");

  return arg;

Still, we must compute “x” even though the optimized code clearly doesn’t use it — just in case we are forced to bail out after the call to console.log.

We want IonMonkey to remove that instruction computing “x”.

Recover Instructions

To work around Baseline expectations, we need to remove the instruction from IonMonkey code and move it to the bailout path. The problem is that we need to carry this information to the bailout function.

Currently, allocations are used to carry information about where the values are located. What we need is similar, we need a way to express an allocation which refers to the result of an instruction. The difference being that the instruction is not executed by IonMonkey but that it is executed before reconstructing the Baseline stack frame.

Resume points are listing all the MIR Instructions which are needed to reconstruct a stack frame. Even if we do not execute these instructions, we still want to have them listed in the resume points.

The solution implemented in IonMonkey adds a flag to every MIR instruction. This flag, named RecoveredOnBailout, is used to indicate that for the current instruction, which is still in the control flow graph, we won’t emit any JIT code. Instead, when we attach a snapshot to an instruction, we order and serialize all the instructions which are flagged as RecoveredOnBailout.

Now that instructions are ordered, we can index their results in a similar way as we do for stack offsets. This way, when we bailout, we reserve a vector which is large enough to contain the result of all instructions which are used during the bailout. The allocations are modified so that, in addition to the register, stack offset, and constants, we can refer to an index in this vector of instruction results.

Representation of a Snapshot with Recover Instructions

When an instruction fails, in addition to decoding the snapshot, the bailout process iterates over the list of instructions. Each instruction reads the values of the allocations that it needs, and stores its result in the reserved vector. Then, another allocation will refer to this result to fill the reconstructed frame.

Optimizing Away

The goal of recover instructions is to open a new class of optimizations where resume points are almost nonexistent.

Due to the resume points, we had to restrict our optimizations to optimizations which hoist instructions in the control flow graph, such as Global Value Numbering (GVN) and Loop Invariant Code Motion (LICM), but we could barely remove instructions or even sink them in the control flow graph.

With recover instructions, we should be able to remove instructions or move them closer to their uses. In the previous example, if we are unable to prove that the branch is dead, we can still move the computation of “x” to the only branch which uses it.

function maybeMul2(arg) {
  // no more overhead.

  var cond = getCond();
  // Baseline can recover "x = 2 * arg".

  if (cond) {
    var x = 2 * arg;
    return x;
  return arg;

In the meantime, recover instructions are a good abstraction for improving our Dead Code Elimination (DCE), and implementing optimizations such as Escape Analysis. All of these optimizations allow IonMonkey to generate faster code by transforming the code to be even more different from what Baseline expects. Whenever a bailout occurs, recover instructions stand ready to put the world back in a Baseline-friendly state.

Contributors inside

In addition to improving our scope of optimizations, recover instructions are simple to implement. This project has provided a good trampoline for multiple contributors to join the project. Please thank and welcome the 12 new contributors who contributed their first patches to the JavaScript engine:

The Mozilla BlogImproving JPEG Image Encoding

Editor’s Note: Andreas Gal, Mozilla CTO, posted on his blog about Mozilla and the recent release of mozjpeg 2.0 and Facebook’s support for the JPEG encoder. This is reposted below: Images are a big proportion of the data that browsers … Continue reading

Mozilla ResearchMozilla Advances JPEG Encoding with mozjpeg 2.0

We’re pleased to announce the release of mozjpeg 2.0. Early this year, we explained that we started this project to provide a production-quality JPEG encoder that improves compression while maintaining compatibility with the vast majority of deployed decoders. The end goal is to reduce page load times and ultimately create an enhanced user experience for sites hosting images.

With today’s release, mozjpeg 2.0 can reduce file sizes for both baseline and progressive JPEGs by 5% on average compared to those produced by libjpeg-turbo, the standard JPEG library upon which mozjpeg is based [1]. Many images will see further reductions.

Facebook announced today that they are testing mozjpeg 2.0 to improve the compression of images on facebook.com. It has also donated $60,000 to contribute to the ongoing development of the technology, including the next iteration, mozjpeg 3.0.

“Facebook supports the work Mozilla has done in building a JPEG encoder that can create smaller JPEGs without compromising the visual quality of photos,” said Stacy Kerkela, software engineering manager at Facebook. “We look forward to seeing the potential benefits mozjpeg 2.0 might bring in optimizing images and creating an improved experience for people to share and connect on Facebook.”

The major feature in this release is trellis quantization, which improves compression for both baseline and progressive JPEGs without sacrificing anything in terms of compatibility. Previous versions of mozjpeg only improved compression for progressive JPEGs.

Other improvements include:

  • The cjpeg utility now supports JPEG input in order to simplify re-compression workflows.
  • We’ve added options to specifically tune for PSNR, PSNR-HVS-M, SSIM, and MS-SSIM metrics.
  • We now generate a single DC scan by default in order to be compatible with decoders that can’t handle arbitrary DC scans.

New Lossy Compressed Image Research

Last October, we published research that found HEVC-MSP performed significantly better than JPEG, while WebP and JPEG XR performed better than JPEG according to some quality scoring algorithms, but similarly or worse according to others. We have since updated the study to offer a more complete picture of performance for mozjpeg and potential JPEG alternatives.

The study compared compression performance for four formats: JPEG, WebP, JPEG XR, and HEVC-MSP. The following is a list of significant changes since the last study:

  • We use newer versions of the WebP, JPEG, JPEG XR, and HEVC-MSP encoders.
  • We include data for mozjpeg.
  • We changed our graphing to bits per pixel vs. dB (quality) on a log/log scale. This is a more typical presentation format, and it doesn’t require interpolation.
  • We removed an RGB conversion step from quality comparison. We now compare the Y’CbCr input and output directly. This should increase accuracy of the metrics.
  • We include results for more quality values.
  • We added sections discussing encoders tuning for metrics and measurement with luma-only metrics.

We’ve also made changes to our test suite to make it easier to reproduce our results. All metric code is now written in C, which means it runs faster and MATLAB/octave is no longer required. We’ve also added a script to automatically generate graphs from the test data files.

We consider this study to be inconclusive when it comes to the question of whether WebP and/or JPEG XR outperform JPEG by any significant margin. We are not rejecting the possibility of including support for any format in this study on the basis of the study’s results. We will continue to evaluate the formats by other means and will take any feedback we receive from these results into account.

In addition to compression ratios, we are considering run-time performance (e.g. decoding time), feature set (e.g. alpha, EXIF), time to market, and licensing. However, we’re primarily interested in the impact that smaller file sizes would have on page load times, which means we need to be confident about significant improvement by that metric, first and foremost.

Feedback Welcome

We’d like to hear any constructive feedback you might have. In particular, please let us know if you have questions or comments about our code, our methodology, or further testing we might conduct.

Also, the four image quality scoring algorithms used in this study (Y-SSIM, RGB-SSIM, MS-SSIM, and PSNR-HVS-M) should probably not be given equal weight as each has a number of pros and cons. For example: some have received more thorough peer review than others, while only one takes color into account. If you have input on which to give more weight please let us know.

We’ve set up a thread on Google Groups in order to discuss.

1. We’re fans of libjpeg-turbo – it powers JPEG decoding in Firefox because its focus is on being fast, and that isn’t going to change any time soon. The mozjpeg project focuses solely on encoding, and we trade some CPU cycles for smaller file sizes. We recommend using libjpeg-turbo for a standard JPEG library and any decoding tasks. Use mozjpeg when creating JPEGs for the Web.

Open Policy & AdvocacyMozilla Submits Comments on FCC Net Neutrality Proposal

Today, Mozilla is filing comments in response to the first of two major deadlines set out by the U.S. Federal Communications Commission (FCC) for its latest net neutrality proposal. The FCC describes these rules as a means of “protecting and promoting the open Internet,” and we are encouraging the FCC to stay true to that ideal.

The FCC’s initial proposal offers weak rules, based on fragile “Title I” authority. The proposal represents a significant departure from current law and precedent in this space by expanding on a new area of authority without establishing clear limits. This approach makes it likely that it will be overturned on appeal.

Our comments, like our earlier Petition, urge the FCC to change course from its proposed path, and instead use its “Title II” authority as a basis for real net neutrality protections. We recommended that the FCC modernize the agency’s approach to how Internet Service Providers (ISPs) provide Internet access service. Specifically, we asked the agency to define ISPs’ offerings to edge providers – companies like Dropbox and Netflix that offer valuable services to Internet users – as a separate service. We explained why such a service would need to fall under “Title II” authority, and how in using that basis, the FCC can adopt effective and enforceable rules prohibiting blocking, discrimination, and paid prioritization online, to protect all users, both wired and wireless.

In addition to reiterating support for Title II remote delivery classification, today’s comments address some questions that arose about our initial proposal over the past two months, such as:

• How the Mozilla petition addresses interconnection,
• How forbearance would work,
• How the services we describe can be “services” without direct payment, and
• How the FCC can prohibit paid prioritization under Title II.

Our comments also articulate our views on net neutrality rules:

• A clean rule prohibiting blocking is the most workable and sustainable approach, rather than complex level of service standards;
• Prohibiting unreasonable discrimination is more effective than weaker alternatives such as “commercially unreasonable practices”;
• Paid prioritization inherently degrades the open Internet; and
• Mobile access services should have the same protections as fixed.

Mozilla will continue engaging closely with policymakers and stakeholders on this issue, and we encourage you to make your voice heard as well, before the next deadline for reply comments on September 10th. Here are some easy ways to contact the FCC and members of Congress and tell them to take the necessary steps to protect net neutrality and all Internet users and developers.

WebmakerMaker Party is here!

From now until September 15, the Webmaker community, along with educators, organizations and enthusiastic web users, will be teaching and learning the web in hundreds of classrooms and cafes, libraries and living rooms all around the world. It’s all part of our effort to teach the culture, mechanics and citizenship of the web.

Mozilla believes success in the 21st century depends on digital literacy: the skills people need to read, write and participate on the web. Maker Party focuses on teaching these skills in a fun, hands-on way.  Participants meet up with others at events of all sizes to explore the how and why of building apps and webpages with code, design, media and interactive elements.

Maker Party partners include the MacArthur Foundation, the National Writing Project, the Institute of Museum and Library Services, the Association of Science and Technology Centers, the National 4-H Council, Statewide Afterschool Networks and more.


Attend an event

You can join Maker Party by finding an event in your area. Events are open to everyone regardless of skill level, and almost all are free. Event themes run the gamut from exploring the mechanics of making websites to investigating broader issues like privacy and data protection.

Host an event

No events in your area? Why not host one of your own? Maker Party Resources provides all the information you need to successfully throw an event of any size, from 50+ participants in a library or hackerspace to just you and your little sister sitting on the living room sofa.

Share what you make

The best part of Maker Party is seeing what others around the world create!

Get Involved:

The Mozilla BlogMozilla’s annual Maker Party begins today!

Mozilla is thrilled to announce the official kick-off of Maker Party, our annual campaign to teach the culture, mechanics and citizenship of the Web through thousands of community-run events around the world. Mozilla believes success in the 21st century depends on … Continue reading

Webmaker¡Ya empieza la Maker Party!

Mozilla está emocionado para anunciar el lanzamiento oficial de Maker Party, la campaña anual para enseñar la cultura, la mecánica y la ciudadanía de la web a través de miles de eventos organizados por comunidades por todo el mundo.

Creemos que el éxito en el siglo 21 depende de la alfabetización digital: las habilidades necesarias para leer, escribir y participar en la web. La Maker Party se enfoca en la enseñanza de estas habilidades de una manera divertida y práctica. Los participantes se reúnen con otros en eventos de todos tamaños para explorar el cómo y el por qué de la creación de aplicaciones y páginas web con el código, diseño, medios y elementos interactivos.

En una entrevista reciente dijo Mark Surman, el Director Ejecutivo de la Fundación Mozilla, “la codificación es sólo la punta del iceberg. Esto se trata de la alfabetización digital entera. Cómo construir cosas con el código, diseño y video y la fotografía. Y una seria de habilidades creativas, sociales y cognitivas – la participación, el pensamiento de diseño. Estas son las habilidades que necesitas para encontrar tu camino en el mundo digital.”

La Maker Party es un ejemplo de cómo el aprendizaje se hace participativa por ser centrada en los intereses y la producción, dos principios fundamentales del enfoque del aprendizaje relacionado. Este enfoque aprovecha de los avances de la era digital para personalizar la educación del alumno – y se celebra como parte de Summer to Make, Play, and Connect.

Puedes unirte a la Maker Party al encontrar un evento en tu área. Los eventos son abiertos a todos sin importar el nivel de habilidad, y casi todos son gratuitos. La campaña Maker Party se extiende desde 15 de julio hasta 14 de septiembre, 2014. Sigue el hashtag #MakerParty en las redes sociales para ver lo que está enseñando, aprendiendo y haciendo la gente alrededor del mundo.

Nuestros socios en la Maker Party 2014 incluye MacArthur Foundation, National Writing Project, Institute of Museum and Library Services, Association of Science and Technology Centers, National 4-H Council, Statewide Afterschool Networks, y muchos más.


Organiza un evento
¿No hay eventos en tu área? ¡Organiza uno! Los recursos de Maker Party proveen toda la información que necesitas para hacer un evento exitoso, sea con 50+ participantes en una biblioteca o hackerspace, o solo contigo y tu hermana menor en el sofá de la sala.

Comparte las obras
La mejor parte de Maker Party es ver lo que haya creado la gente de otros sitios.

  • Usa la etiqueta #MakerParty en tus proyectos y compártelos en las redes sociales. Sube fotos y videos de los eventos también.
  • Remezcla este Informe del evento Maker Party.
  • Echa un vistazo en la página Maker Party Live Updates para ver lo que hacen los Webmakers en todo el mundo.


Más recursos: Maker Party en América Latina