Mozilla Nederland LogoDe Nederlandse
Mozilla gemeenschap

Abonneren op feed Mozilla planet
Planet Mozilla -
Bijgewerkt: 22 uur 5 min geleden

Daniel Stenberg: Firefox OS Flatfish Bluedroid fix

vr, 29/08/2014 - 14:11

Hey, when I just built my own Firefox OS (b2g) image for my Firefox OS Tablet (flatfish) I ran into this (known) problem:

Can't find necessary file(s) of Bluedroid in the backup-flatfish folder. Please update the system image for supporting Bluedroid (Bug-986314), so that the needed binary files can be extracted from your flatfish device.

So, as I struggled to figure out the exact instructions on how to proceed from this, I figured I should jot down what I did in the hopes that it perhaps will help a fellow hacker at some point:

  1. Download the 3 *.img files from the dropbox site that is referenced from bug 986314.
  2. Download the script from the same dropbox place
  3. Make sure you have ‘fastboot’ installed (I’m mentioning this here because it turned out I didn’t and yet I have already built and flashed my Flame phone successfully without having it). “apt-get install android-tools-fastboot” solved it for me. Note that if it isn’t installed, the script will claim that the device is not in fastboot mode and stop with an error message saying so.
  4. Finally: run the script “./ [dir with the 3 .img files]“
  5. Once it had succeeded, the tablet reboots
  6. Remove the backup-flatfish directory in the build dir.
  7. Restart the flatfish build again and now it should get passed that Bluedroid nit


Categorieën: Mozilla-nl planet

Wladimir Palant: Using a Firefox extension to work around Selenium WebDriver's limitations

vr, 29/08/2014 - 09:38

My Google search link fix extension had a bunch of regressions lately and I realized that testing its impact on the search pages manually isn’t working — these pages are more complicated than it looks like, and there are lots of configuration options affecting them. So I decided looking into Selenium WebDriver in order to write integration tests that would automate Firefox. All in all, writing the tests is fairly simple once you get used to the rather arcane API. However, the functionality seems to be geared towards very old browsers (think IE6) and some features are nowhere to be found.

One issue: there is no way to focus an element without clicking it. Clicking isn’t always an option, since it might trigger a link for example. That issue turned out to be solved fairly easily:

driver.execute_script("arguments[0].focus()", element)

The ability to pass elements as parameters to WebDriver.execute_script is very useful, so it is surprising that it doesn’t seem to be documented properly anywhere.

But what about working with tabs or middle-clicking links? It seems that tabbed browsing wasn’t invented yet back when that API was designed, so it only has a concept of windows — not very useful. So WebDriver will only let you work with the currently selected tab, inactive tabs are off limits. And WebDriver.execute_script isn’t any help here either, it won’t let you run privileged code.

After briefly considering using send_keys functionality to open Web Console on about:config and typing code into it (yes, it looks like that would actually work), I decided to go with a less crazy solution: install an additional extension to implement the necessary functionality. So if a test wants the element to be middle-clicked it can trigger a custom event:

driver.execute_script(''' var event = document.createEvent("Events"); event.initEvent("testhelper_middleclick", true, false); arguments[0].dispatchEvent(event); ''', element)

And the extension listens to that event:

window.gBrowser.addEventListener("testhelper_middleclick", function(event) { let utils = .QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIDOMWindowUtils); let rect =; utils.sendMouseEvent("mousedown", rect.left + 1, + 1, 1, 1, 0); utils.sendMouseEvent("mouseup", rect.left + 1, + 1, 1, 1, 0); }, false, true);

This works nicely, but what if you want to get data back? For example, I want to know which URLs were requested at the top level — in particular, whether there was a redirect before the final URL. Selenium only allows you to get notified of URL changes that were initiated by Selenium itself (not very helpful) or poll driver.current_url (doesn’t work). The solution is to have the extension register a progress listener and write all URLs seen to the Browser Console:

window.gBrowser.addTabsProgressListener({ onStateChange: function(browser, webProgress, request, flags, status) { if (!(flags & Ci.nsIWebProgressListener.STATE_IS_WINDOW)) return; if (!(flags & Ci.nsIWebProgressListener.STATE_START) && !(flags & Ci.nsIWebProgressListener.STATE_REDIRECTING)) return; if (request instanceof Ci.nsIChannel) Cu.reportError("[testhelper] Loading: " + request.URI.spec); } });

You can use driver.get_log("browser") to retrieve the full list of console messages. Each message also has a timestamp which allows for example only extracting the URLs seen after the previous check.

Side-note: I first considered using MozMill for this. However, it is geared very much towards Firefox development and much of the Selenium functionality would have to be reimplemented (locating installed Firefox instance, default Firefox preferences for a test profile, dismissing alerts on web pages and so on).

Categorieën: Mozilla-nl planet

Priyanka Nag: Maker Party gets grander in Pune this time

do, 28/08/2014 - 20:39
While going through my twitter time-line this evening, I noticed Michelle Thorne's tweet stating that India leads with most Maker Party action this season.
Well, who doubts that! In India, we have a maker parties being organized almost every second day. My facebook wall and twitter timelime is like overloaded with posts, photos and updates from all the Maker Parties happening around me.

Maker Party, Pune

Well, if you are still not aware of this one, we are having the grand daddy of this maker parties in Pune on the 6th of September 2014. The executive director of Mozilla Foundation, Mark Surman, is going to be personally present for this event. Just like all maker parties, this event is an attempt to map and empower a community of educators and creative people who share a passion to innovate, evolve and change the learning landscape.

A few quick updates about this event:
  •  Event date - 6th and 7th September
  •  Event venue - SICSR, Model Colony, Pune
  • Rough agenda for the event is going to be:
    • 6th September 2014 (Day 1) 
      • 10am - 11am : Mozilla introduction
      • 11am - 12 : About Hive initiative
      •  12 - 1pm: Rohit Lalwani - Entrepreneurship talk
      •  1-2pm : Lunch break
      •  2pm - 3pm: Webmaker begins with Appmaker
      •  3pm - 4pm: Webmaker continues with Thimble
      •  4pm - 4.45pm: Webmaker continues with Popcorn
      •  4.45pm - 5.30pm : Webmaker continues with x-ray goggles
      • 5.30pm - 6pm: Prize distribution (against best makes of the day etc). Science fair also ends
      • 6pm - 7pm : Birds of feature
      • 7pm : Dinner (venue - TBD)
Science fair will be from 12 noon to 6pm.
    •  7th September 2014 (Day 2) 
      • 1st Half: Community Meetup and Discussions on the future roadmap for Hive India,
        Long term partnership prospect meeting with partners.
      •  2nd Half: Community training sessions on Hive and Train the trainer events.
For this event, we are having a variety of different training sessions, workshops and science displays - starting from 3D printing to wood-works, Origami to quad-copter flying and even film making.
If you have still not registered for this event, heres your chance:

Categorieën: Mozilla-nl planet

Mike Ratcliffe: View jQuery and jQuery Live events in Firefox DevTools

do, 28/08/2014 - 14:40

A little while back we landed a feature that made it possible to interact with events from the markup panel of Firefox developer tools.

A lot of people were excited about this but we soon realized that jQuery wraps event handlers in a proxy making all handlers look like this:

function() { return fn.apply( thisObject || this, arguments ); };

Numerous facepalms later and we now have support for jQuery and jQuery Live events. This support will be available in tonight's nightly:

jQuery and jQuery Live events

Because library support is important we have created an API that allows developers and library authors to create "event parsers" that allow our tools to make sense of their event systems.

The API looks like this:

var parser = { id: "myLibrary events", // Unique id hasListeners: function(node) { // Hunt for node's listeners and return true as soon as one is // encountered. }, getListeners: function(node) { // Hunt for node's listeners and return an array of objects // representing those listeners. Each object should look like this: { type: "click", handler: function clicked() {...}, // These tags will be displayed as attributes in the events popup. tags: "jQuery,Live", // Hide or show fields hide: { debugger: false, // Debugger icon type: false, // Event type e.g. click filename: false, capturing: false, dom0: false }, override: { // The following can be overridden: type: "click", origin: "", searchString: 'onclick="doSomething()"', DOM0: true, capturing: true } } } }, normalizeHandler: function(fnDO) { // Take a handler debug object and use the debugger to walk the scope // chain to discover the function you would like to be displayed. // See for an example. } gDevTools.registerEventParser(parser);

We have bugs logged to add support for the following libraries:

You still here? What are you waiting for? Go get hacking!

Categorieën: Mozilla-nl planet

Nicholas Nethercote: Update on reviewing our data practices and Bugzilla development database disclosure

do, 28/08/2014 - 02:02

As we indicated in the post titled “MDN Disclosure”, we began several remediation measures, including a review of data practices surrounding user data. We have kicked off a larger project to better our practices around data, including with respect to the various non-Mozilla projects we support. We are implementing immediate fixes for any discovered issues across the organization, and are requiring each business unit to perform a review of their data practices and, if necessary, to implement additional protections based on that review.

As we proceed through our broader remediation program, we discovered an incident that occurred in the Bugzilla community, one of the community projects we support. A member of the Bugzilla community discovered that development database dump files containing email addresses and encrypted passwords were posted on a publicly accessible server. They were alerted to this incident by a security bug filed by a contributor. See the Bugzilla community blog post for more information.

While it is important to note that the disclosure of this development database does not affect, we continue to believe that the broader community would benefit from our increased focus on data practices and therefore will continue with our plan of including the Bugzilla project as well as other community projects in the data practices initiatives we’ve described above.

We are committed to continuing to improve our data practices to minimize the likelihood of these and other types of incidents.


Mozilla Security

Categorieën: Mozilla-nl planet

Jared Wein: New in Firefox Nightly: Recommended and easy theme switching through Customize mode

wo, 27/08/2014 - 22:01

Firefox menuWe shipped the Australis project with Firefox 29, but the Firefox team hasn’t stopped working on making Firefox the easiest browser to personalize. Firefox allows easy customizing through the new Customize mode, and now in Firefox Nightly people will find a quick and easy to way to set the theme of the browser.

After entering Customize mode, a new menu is shown at the footer of the window. Clicking on this menu will show any installed themes as well as a list of five recommended themes.

These recommended themes were picked from the Add-ons for Firefox website by members of the Firefox User Experience team. All of the themes are licensed through Creative Commons. Some are CC-BY and others are CC-BY-SA.

Themes menu

Hovering over a theme in the menu will preview the appearance of the theme. Clicking on one of the themes will change the applied theme.

An applied theme

We haven’t figured out yet what the rotation will be for recommended themes. Any input on how often or how we should go about putting together the next list is greatly appreciated.

Full management of themes and add-ons is still available through the Add-ons Manager. Recommended themes that have not been applied will not show up in the Add-ons Manager. Once a recommended theme is applied, it will appear in the Add-ons Manager and can be uninstalled from there.

Tagged: firefox, planet-mozilla, usability
Categorieën: Mozilla-nl planet

Pete Moore: Weekly review 2014-08-27

wo, 27/08/2014 - 15:43

Highlights from this week

1. Play Store - armv6

The main goal of the last week has been to enable fennec builds on esr31 branch. Last week I updated the build process to use a different mechanism to generate the version code in the play store for armv6 apks generated from the esr31 branch. This week has been about enabling these builds and release builders.

This work is tracked in Bug 1040319 – Ensure that Fennec builds from mozilla-esr31 have a buildID to allow for armv6/Android 2.2 users to update to mozilla-esr31 apks.

2. Working with contributors

I’ve been working with kartikgupta0909 this week on IRC - hoping he is going to fix Bug 1020613 - vcs sync should only push tags/heads that have changed since last successful push for us.

I added metadata to bugs, and created a bugzilla search for them to appear in, which I linked to from our contributions wiki page (and I created a sublink to RelEng contributions page from our main Release Engineering page).

3. Other

Regular type support work, which can be seen in bugs below.

Goals for next week:

  • Return to l10n work
  • Prepare for RelEng arch meeting in September

Bugs I created this week:

Other bugs I updated this week:

Categorieën: Mozilla-nl planet

Julien Vehent: Postgres multicolumn indexes to save the day

wo, 27/08/2014 - 15:16

I love relational databases. Well designed, they are the most elegant and efficient way to store data. Which is why MIG uses Postgresql, hosted by Amazon RDS.

It's the first time I use RDS for anything more than a small website. I discover its capabilities along the way.  Over the past few days, I've been investigating performance issues. The database was close to 100% CPU, and the number of DB connections maintained by the Go database package was varying a lot. Something was off.

I have worked as a junior Oracle & Postgres DBA in the past. In my limited experience, database performances are almost always due to bad queries, or bad schemas. When you wrote the queries, however, this is what you blame last, after spending hours looking for a bug in any other components outside of your control.

Eventually, I re-read my queries, and found one that looked bad enough:

// AgentByQueueAndPID returns a single agent that is located at a given queueloc and has a given PID func (db *DB) AgentByQueueAndPID(queueloc string, pid int) (agent mig.Agent, err error) { err = db.c.QueryRow(`SELECT id, name, queueloc, os, version, pid, starttime, heartbeattime, status FROM agents WHERE queueloc=$1 AND pid=$2`, queueloc, pid).Scan( &agent.ID, &agent.Name, &agent.QueueLoc, &agent.OS, &agent.Version, &agent.PID, &agent.StartTime, &agent.HeartBeatTS, &agent.Status) if err != nil { err = fmt.Errorf("Error while retrieving agent: '%v'", err) return } if err == sql.ErrNoRows { return } return }The query locates an agent using its queueloc and pid values. Which is necessary to properly identify an agent, except that neither queueloc nor pid have indexes, resulting in a sequential scan of the table:
mig=> explain SELECT * FROM agents WHERE queueloc='xyz' AND pid=1234; QUERY PLAN -------------------------------------------------------------- Seq Scan on agents (cost=0.00..3796.20 rows=1 width=161) Filter: (((queueloc)::text = 'xyz'::text) AND (pid = 1234)) (2 rows)
This query is called ~50 times per second, and even with only 45,000 rows in the agents table, that is enough to burn all the CPU cycles on my RDS instance.

Postgres supports multicolumn indexes. The fix is simple enough: create an index on the columns queueloc and pid together.

mig=> create index agents_queueloc_pid_idx on agents(queueloc, pid); CREATE INDEX

Which results in an immediate, drastic, reduction of the cost of the query, and CPU usage of the instance.

mig=> explain SELECT * FROM agents WHERE queueloc='xyz' AND pid=1234; QUERY PLAN --------------------------------------------------------------------------------------- Index Scan using agents_queueloc_pid_idx on agents (cost=0.41..8.43 rows=1 width=161) Index Cond: (((queueloc)::text = 'xyz'::text) AND (pid = 1234)) (2 rows)


Immediate performance gain for a limited effort. Gotta love Postgres !

Categorieën: Mozilla-nl planet

Doug Belshaw: Soliciting feedback on v1.1 of the Web Literacy Map

wo, 27/08/2014 - 14:50

The Web Literacy Map constitutes the skills and competencies that Mozilla and its community of stakeholders believe to be necessary to read, write and participate effectively on the web.


The Web Literacy Map currently stands at v1.1 but as I blogged recently, a lot has happened since we launched the first version at MozFest last year! That’s why we’re planning to update it to v2.0 by early January 2015.

I’ll be connecting with key people over the coming weeks to ask for a half-hour (recorded) conversation which will then be shared with the community. In the meantime we’d appreciate your feedback. Here’s what Atul Varma had to say:

So I feel like the weblit map is cool as it is, but as has been discussed previously, there are a number of areas that are important but cross-cut through existing competencies, rather than necessarily constituting their own competencies by themselves… what if we created a set of lenses through which the competencies could be viewed?

There’s a couple of ways you can give your feedback:

Leaving your name means we can follow up with questions if necessary (for clarification, etc.) I look forward to hearing what you have to say! All opinions are welcome. Pull no punches. :-)

Questions? I’m @dajbelshaw on Twitter or you can email me:

Categorieën: Mozilla-nl planet

Daniel Stenberg: Going to FOSDEM 2015

wo, 27/08/2014 - 11:01


I’m going there and I know several friends are going too, so this is just my way of pointing this out to the ones of you who still haven’t made up your mind! There’s still a lot of time left as this event is taking place late January next year.

I intend to try to get a talk to present this time and I would love to meet up with more curl contributors and fans.


Categorieën: Mozilla-nl planet

Byron Jones: happy bmo push day!

wo, 27/08/2014 - 09:11

the following changes have been pushed to

  • [1058479] move the “mozilla employees” warning on bugzilla::admin next to the submit button
  • [1058481] git commits should link to commitdiff not commit
  • [1056087] contrib/ fails if there are no duplicate bug_user_last_visit rows
  • [1058679] new bug API returning a ref where bzexport expects bug data
  • [1057774] bzAPI landing page gives a 404
  • [1056904] Add “Mentored by me” to MyDashboard
  • [1059085] Unable to update a product’s group controls: Can’t use string (“table”) as an ARRAY ref while “strict refs” in use
  • [1059088] Inline history can be shown out-of-order when two changes occur in the same second

discuss these changes on

Filed under: bmo, mozilla
Categorieën: Mozilla-nl planet

Monica Chew: Firefox 32 supports Public Key Pinning

wo, 27/08/2014 - 03:41
Public Key Pinning helps ensure that people are connecting to the sites they intend. Pinning allows site operators to specify which certificate authorities (CAs) issue valid certificates for them, rather than accepting any one of the hundreds of built-in root certificates that ship with Firefox. If any certificate in the verified certificate chain corresponds to one of the known good certificates, Firefox displays the lock icon as normal.

Pinning helps protect users from man-in-the-middle-attacks and rogue certificate authorities. When the root cert for a pinned site does not match one of the known good CAs, Firefox will reject the connection with a pinning error. This type of error can also occur if a CA mis-issues a certificate.
Pinning errors can be transient. For example, if a person is signing into WiFi, they may see an error like the one below when visiting a pinned site. The error should disappear if the person reloads after the WiFi access is setup.

Firefox 32 and above supports built-in pins, which means that the list of acceptable certificate authorities must be set at time of build for each pinned domain. Pinning is enforced by default. Sites may advertise their support for pinning with the Public Key Pinning Extension for HTTP, which we hope to implement soon. Pinned domains include and Twitter in Firefox 32, and Google domains in Firefox 33, with more domains to come. That means that Firefox users can visit Mozilla, Twitter and Google domains more safely. For the full list of pinned domains and rollout status, please see the Public Key Pinning wiki.

Thanks to Camilo Viecco for the initial implementation and David Keeler for many reviews!
Categorieën: Mozilla-nl planet

Gervase Markham: Email Account Phishers Do Manual Work

di, 26/08/2014 - 21:37

For a while now, criminals have been breaking into email accounts and using them to spam the account’s address book with phishing emails or the like. More evil criminals will change the account password, and/or delete the address book and the email to make it harder for the account owner to warn people about what’s happened.

My mother recently received an email, purportedly from my cousin’s husband, titled “Confidential Doc”. It was a mock-up of a Dropbox “I’ve shared an item with you” email, with the “View Document” URL actually being This (currently) redirects to, although it redirected to another site at the time. That page says “Select your email provider”, explaining “Now, you can sign in to dropbox with your email”. When you click the name of your email provider, it asks you for your email address and password. And boom – they have another account to abuse.

But the really interesting thing was that my mother, not being born yesterday, emailed back saying “I’ve just received an email from you. But it has no text – just an item to share. Is it real, or have you been hacked?” So far, so cautious. But she actually got a reply! It said:

Hi <her shortened first name>,
I sent it, It is safe.
<his first name>

(The random capital was in the original.)

Now, this could have been a very smart templated autoresponder, but I think it’s more likely that the guy stayed logged into the account long enough to “reassure” people and to improve his hit rate. That might tell us interesting things about the value of a captured email account, if it’s worth spending manual effort trying to convince people to hand over their creds.

Categorieën: Mozilla-nl planet

Alex Vincent: An insightful statement from a mathematics course

di, 26/08/2014 - 17:39

I’m taking a Linear Algebra course this fall.  Last night, my instructor said something quite interesting:

“We are building a model of Euclidean geometry in our vector space. Then we can prove our axioms of geometry (as theorems).”

This would sound like technobabble to me even a week ago, but what he’s really saying is this:

“If you can implement one system’s basic rules or axioms in another system, you can build a model of that first system in the second.”

Programmers and website builders build models of systems all the time, and unconsciously, we build on top of other systems. Think about that when you write JavaScript code: the people who implement JavaScript engines are building a model for millions of people to use that they’ll never meet. I suppose the same could be said of any modern programming language, compiler, transpiler or interpreter.

The beauty for those of us who work in the model is that we (theoretically) shouldn’t need to care what platform we run on. (In practice, there are differences, which is why we want platforms to implement standards, so we can concentrate on using the theoretical model we depend on.)

On the flip side, that also means that building and maintaining that fundamental system we build on top of has to be done very, very carefully.  If you’re building something for others to use (and chances are, when you’re writing software, you’re doing exactly that), you really have to think about how you want others to use your system, and how others might try to use your system in ways you don’t expect.

It’s really quite a profound duty that we take on when we craft software for others to use.

Categorieën: Mozilla-nl planet

Chris AtLee: Gotta Cache 'Em All

di, 26/08/2014 - 16:21

Waaaaaaay back in February we identified overall network bandwidth as a cause of job failures on TBPL. We were pushing too much traffic over our VPN link between Mozilla's datacentre and AWS. Since then we've been working on a few approaches to cope with the increased traffic while at the same time reducing our overall network load. Most recently we've deployed HTTP caches inside each AWS region.

Network traffic from January to August 2014 The answer - cache all the things! Obligatory XKCD Caching build artifacts

The primary target for caching was downloads of build/test/symbol packages by test machines from file servers. These packages are generated by the build machines and uploaded to various file servers. The same packages are then downloaded many times by different machines running tests. This was a perfect candidate for caching, since the same files were being requested by many different hosts in a relatively short timespan.

Caching tooltool downloads

Tooltool is a simple system RelEng uses to distribute static assets to build/test machines. While the machines do maintain a local cache of files, the caches are often empty because the machines are newly created in AWS. Having the files in local HTTP caches speeds up transfer times and decreases network load.

Results so far - 50% decrease in bandwidth

Initial deployment was completed on August 8th (end of week 32 of 2014). You can see by the graph above that we've cut our bandwidth by about 50%!

What's next?

There are a few more low hanging fruit for caching. We have internal pypi repositories that could benefit from caches. There's a long tail of other miscellaneous downloads that could be cached as well.

There are other improvements we can make to reduce bandwidth as well, such as moving uploads from build machines to be outside the VPN tunnel, or perhaps to S3 directly. Additionally, a big source of network traffic is doing signing of various packages (gpg signatures, MAR files, etc.). We're looking at ways to do that more efficiently. I'd love to investigate more efficient ways of compressing or transferring build artifacts overall; there is a ton of duplication between the build and test packages between different platforms and even between different pushes.

I want to know MOAR!

Great! As always, all our work has been tracked in a bug, and worked out in the open. The bug for this project is 1017759. The source code lives in, and we have some basic documentation available on our wiki. If this kind of work excites you, we're hiring!

Big thanks to George Miroshnykov for his work on developing proxxy.

Categorieën: Mozilla-nl planet

Byron Jones: happy bmo push day!

di, 26/08/2014 - 09:49

the following changes have been pushed to

  • [1058274] The input field for suggested reviewers when editing a component needs ‘multiple’ to be true for allowing for more than one username
  • [1051655] mentor field updated/reset when a bug is updated as a result of a change on a different bug (eg. see also, duplicate)
  • [1058355] leaks emails to logged out users in “Latest Activity” search URLs

discuss these changes on

Filed under: bmo, mozilla
Categorieën: Mozilla-nl planet

Daniel Stenberg: Credits in the curl project

ma, 25/08/2014 - 22:38


When we receive patches, improvements, suggestions, advice and whatever that lead to a change in curl or libcurl, I make an effort to log the contributor’s name in association with that change. Ideally, I add a line in the commit message. We use “Reported-by: <full name>” quite frequently but also other forms of “…-by: <full name>” too like when there was an original patch by someone or testing and similar. It shouldn’t matter what the nature of the contribution is, if it helped us it is a contribution and we say thanks!


I want all patch providers and all of us who have push rights to use this approach so that we give credit where credit is due. Giving credit is the only payment we can offer in this project and we should do it with generosity.

The green bars on the right show the results from the question how good we are at giving credit in the project from the 2014 curl survey, where 5 is really good and 1 is really bad. Not too shabby, but I’d say we can do even better! (59% checked the top score, 15% checked the 3′)

I have a script called that extracts all contributors since a tag (typically the previous release) and I use that to get a list of names to thank in the RELEASE-NOTES file for the pending curl release. Easy and convenient.

After every release (which means every 8th week) I then copy the list of names from RELEASE-NOTES into docs/THANKS. So all contributors get remembered and honored after having helped us in one way or another.

When there’s no name

When contributors don’t provide a real name but only a nick name like foobar123, user_5678 and so on I tend to consider that as request to not include the person’s name anywhere and hence I tend to not include it in the THANKS or RELEASE-NOTES. This also sometimes the result of me not always wanting to bother by asking people over and over again for their real name in case they want to be given proper and detailed credit for what they’ve provided to us.

Unfortunately, a notable share of all contributions we get to the project are provided by people “hiding” behind a made up handle. I’m fine with that as long as it truly is what the helpers’ actually want.

So please, if you help us out, we will happily credit you, but please tell us your name!


Categorieën: Mozilla-nl planet

Mozilla Release Management Team: Firefox 32 beta8 to beta9

ma, 25/08/2014 - 22:24

  • 42 changesets
  • 78 files changed
  • 1175 insertions
  • 782 deletions

ExtensionOccurrences cpp26 js20 h7 html5 py4 jsm2 ini2 xul1 xml1 json1 in1 cc1 build1

ModuleOccurrences browser12 layout10 content9 toolkit7 js6 dom6 security5 services4 netwerk3 testing2 config2 tools1 modules1 memory1 image1 gfx1 extensions1

List of changesets:

Mike HommeyBug 1050029 - Improve Makefile checks for deprecated or variables. r=mshal a=NPOTB - 2a617532286d Mike ShalBug 1047621 - Move to config for importing expandlibs_exec; r=gps a=NPOTB - a09c51fcbd98 Mike ShalBug 1047621 - Have import and call; r=gps a=NPOTB - bd02db1d22d0 Tim TaubertBug 1054815 - Fix browser_tabview_bug712203.js to not connect to r=smacleod, a=test-only - 2309c50ccc6c Ryan VanderMeulenNo Bug - Change min expected assertions for test_playback_rate.html to 3. a=test-only - 1815786bfc6d Ryan VanderMeulenNo Bug - Widen the allowable number of asserts in test_bug437844.xul to 19-21 so we don't have to keep adjusting it everytime something randomly perturbs it. a=test-only - 3f100f099542 Martijn WargersBug 1024535 - Fix for failing video test on Windows 7. r=jwwang, a=test-only - d2714b6fc28d David Rajchenbach-TellerBug 1024686 - Add missing return in Sqlite.jsm. r=mak, a=test-only - da78e23cbe3d Martijn WargersBug 1051783 - Fix test_pointerlock-api.html. r=Enn, a=test-only - 90b5e0b87666 Terrence ColeBug 1055219. r=terrence, a=abillings - 7c7145e95cb5 Wes KocherBacked out changeset 90b5e0b87666 (Bug 1051783) for an added assert a=backout - ec5427a8e674 Steven MacLeodBug 1035557 - Migrate crash checkpoints with the session so that we don't appear to crash during reset. r=ttaubert, a=lmandel - 8d583074b918 Monica ChewBug 1055670: Disable remote lookups (r=gcp,a=lmandel) - b554afc480aa C.J. KuBug 1055040 - Send mouse events base on canvas position and enable this test case on all B2G builds. r=ehsan, a=test-only - fadc34768c8b Jared WeinBug 947574 - Switch browser_426329.js to use tasks to avoid intermittent failure. r=Gijs, a=test-only - 023ef0541072 Michael WuBug 1045977 - Clear heap allocated volatile buffers. r=njn, r=seth, a=sledru - bff13e7445c5 Michal NovotnyBug 1054425 - cache2: leak in CacheFileMetadata::WriteMetadata. r=jduell, a=sledru - 342c0c26e18d Shane CaraveoBug 1047340 - Fix annotation of marks by using the browser url rather than cannonical url. r=jaws, a=lmandel - 54949d681a14 Aaron KlotzBug 1054813 - Add some missing MutexAutoLocks in nsZipReaderCache. r=mwu, a=lmandel - 50590d1557c4 Jim ChenBug 1013004 - Fix support for sampling intervals > 1 second. r=BenWa, a=lmandel - 61980c2f6177 Gregory SzorcBug 1055102 - Properly handle Unicode in Bagheera payloads. r=bsmedberg, a=lmandel - 4f18903bc230 Steve WorkmanBug 1054418 - Rewrite AppCacheUtils.jsm to use HTTP Cache v2 APIs. r=michal, a=sledru - fa7360fe9779 Michal NovotnyBug 1054819 - Ensure that the dictionary is released on the main thread. r=ehsan, a=sledru - c06efff91ed3 Honza BambasBug 1053517 - Enable the new HTTP cache during automation testing. r=jduell, a=test-only - f5d4b16203aa Douglas CrosherBug 1013996 - irregexp: avoid unaligned accesses in ARM code. r=bhackett, a=lmandel - 093bfa0f1dee Joel MaherBug 1056199 - Update talos on Fx32 to the latest revision. r=RyanVM, a=test-only - ec3e586813b5 Tim TaubertBug 1041527 - Ensure that about:home isn't the initial tab when opening new windows in tabview tests. r=ehsan, a=test-only - c340fefc0fe8 Marco BonardoBug 1002439 - browser_bug248970.js is almost perma fail when run by directory on osx opt. r=mano, a=test-only - 0b44c271f755 Ryan VanderMeulenBug 906752 - Disable test_audioBufferSourceNodeOffset.html on deBug builds. a=test-only - d94be43c729c Seth FowlerBug 1024454 - Part 1: Eagerly propagate dirty bits so absolute children of table parts get reflowed reliably. r=dbaron, a=lmandel - 8e6b808eed02 Bill McCloskeyBug 1053999 - Be more conservative in recursion checks before brain transplants. r=bholley, a=lmandel - ac551f43e2b4 Paul AdenotBug 1056032 - Make sure COM is initialized when trying to decode an mp3 using decodeAudioData. r=cpearce, a=lmandel - f17ade17a846 Paul AdenotBug 1056032 - Test that we can decode an mp3 using decodeAudioData. r=ehsan, a=lmandel - 53d300e03f5b Markus StangeBack out Bug 1000875 in order to fix the regression tracked in Bug 1011166. a=backout - 11a5306111d0 Peter Van der BekenBug 1036186 - Reset Migration wizard no longer skips the first step to choose a browser. r=smaug, a=lmandel - ac8864d8ecc0 Camilo VieccoBug 1047177 - Treat v4 certs as v3 certs (1/2). r=keeler. a=lmandel - 6049537c2510 Camilo VieccoBug 1047177 - Treat v4 certs as v3 certs. Tests (2/2). r=keeler. a=lmandel - 74a58e14d1d3 Bill McCloskeyBug 1008107 - Allow SandboxPrivate to be null in sandbox_finalize. r=bz, a=lmandel - 85318a1536ee Sami JaktholmBug 1055499 - StyleEditor: Properly wait for the toolbox to be destroyed before ending test run and causing windows to leak. r=harth, a=test-only - 8f49d60bf5c9 Honza BambasBug 1040086 - EV identifier missing when restoring session with HTTP cache v2. r=michal, a=lmandel - 33ea2d7e342e Shane CaraveoBug 1056415 - Fix updating the marks buttons during tabchange. r=jaws, a=lmandel - 2f61f6e44a33 Shane CaraveoBug 1047316 - Fix docshell swapping Bug by removing usage in marks (unecessary here). r=jaws, a=lmandel - 58eb677e55f3

Categorieën: Mozilla-nl planet

David Humphrey: Introducing MakeDrive

ma, 25/08/2014 - 18:11

I've been lax in my blogging for the past number of months (apologies). I've had my head down in a project that's required all of my attention. On Friday we reached a major milestone, and I gave a demo of the work on the weekly Webmaker call. Afterward David Ascher asked me to blog about it. I've wanted to do so for a while, so I put together a proper post with screencasts.

I've written previously about our idea of a web filesystem, and the initial work to make it possible. Since then we've greatly expanded the idea and implementation into MakeDrive, which I'll describe and show you now.

MakeDrive is a JavaScript library and server (node.js) that provides an offline-first, always available, syncing filesystem for the web. If you've used services like Dropbox or Google Drive, you already know what it does. MakeDrive allows users to work with files and folders locally, then sync that data to the cloud and other browsers or devices. However, unlike Dropbox or other similar services, MakeDrive is based purely on JavaScript and HTML5, and runs on the web. You don't install it; rather, a web application includes it as a script, and the filesystem gets created or loaded as part of the web page or app.

Because MakeDrive is a lower-level service, the best way to demonstrate it is by integrating it into a web app that relies on a full filesystem. To that end, I've made a series of short videos demonstrating aspects of MakeDrive integrated into a modified version of the Brackets code editor. I actually started this work because I want to make Brackets work in the browser, and one of the biggest pieces it is missing in browser is a full featured filesystem (side-note: Brackets can run in a browser just fine :). This post isn't specifically about Brackets, but I'll return to it in future posts to discuss how we plan to use it in Webmaker. MakeDrive started as a shim for Brackets-in-a-browser, but Simon Wex encouraged me to see that it could and should be a separate service, usable by many applications.

In the first video I demonstrate how MakeDrive provides a full "local," offline-first filesystem in the browser to a web app:

The code to provide a filesystem to the web page is as simple as var fs = MakeDrive.fs();. Applications can then use the same API as node.js' fs module. MakeDrive uses another of our projects, Filer, to provide the low-level filesystem API in the browser. Filer is a full POSIX filesystem (or wants to be, file bugs if you find them!), so you can read and write utf8 or binary data, work with files, directories, links, watches, and other fun things. Want to write a text file? it's done like so:

var data = '<html>...'; fs.writeFile('/path/to/index.html', data, function(err) { if(err) return handleError(); // data is now written to disk });

The docs for Filer are lovingly maintained, and will show you the rest, so I won't repeat it here.

MakeDrive is offline-first, so you can read/write data, close your browser or reload the page, and it will still be there. Obviously having access to your filesystem outside the current web page is also desirable. Our solution was to rework Filer so it could be used in both the browser and node.js, allowing us to mirror filesystems over the network using Web Sockets). We use a rolling-checksum and differential algorithm (i.e., only sending the bits of a file that have changed) inspired by rsync; Dropbox does the same.

In this video I demonstrate syncing the browser filesystem to the server:

Applications and users work with the local browser filesystem (i.e., you read and write data locally, always), and syncing happens in the background. That means you can always work with your data locally, and MakeDrive tries to sync it to/from the server automatically. MakeDrive also makes a user's mirrored filesystem available remotely via a number of authenticated HTTP end points on the server:

  • GET /p/path/into/filesystem - serve the path from the filesystem provided like a regular web server would
  • GET /j/path/into/filesystem - serve the path as JSON (for APIs to consume)
  • GET /z/path/into/filesystem - export the path as (e.g., zip and send user data)

This means that a user can work on files in one app, sync them, and then consume them in another app that requires URLs. For example: edit a web component in one app and include and use it in another. When I started web development in the 1990s, you worked on files locally, FTP'ed them to a server, then loaded them via your web server and browser. Today we use services like gh-pages and Both require manual steps. MakeDrive automates the same sort of process, and targets new developers and those learning web development, making it a seamless experience to work on web content: your files are always "on the web."

MakeDrive supports multiple, simultaneous connections for a user. I might have a laptop, desktop, and tablet all sharing the same filesystem via a web app. This app can be running in any HTML5 compatible browser, app, or device. In this video I demonstrate syncing changes between different HTML5 browsers (Chrome, Firefox, and Opera):

Like Dropbox, each client will have its own "local" version of the filesystem, with one authoritative copy on the server. The server manages syncing to/from this filesystem so that multiple clients don't try to sync different changes to the same data at once. After one client syncs new changes, the server informs other clients that they can sync as well, which eventually propagates the changes across all connected clients. Changes can include updates to a file's data blocks, but also any change to the filesystem nodes themselves: renames, deleting a file, making a new directory, etc.

The code to make this syncing happen is very simple. As long as there is network, a MakeDrive filesystem can be connected to the server and synced. This can be a one-time thing, or the connection can be left open and incremental syncs can take place over the lifetime of the app: offline first, always syncing, always available.

Because MakeDrive allows the same user to connect multiple apps/devices at once, we have to be careful not to corrupt data or accidentally overwrite data when syncing. MakeDrive implements something similar to Dropbox's Conflicted Copy mechanism: if two clients change the same data in different ways, MakeDrive syncs the server's authoritative version, but also creates a new file with the local changes, and lets the user decide how to proceed.

This video demonstrates the circumstances by which a conflicted copy would be created, and how to deal with it:

Internally, MakeDrive uses extended attributes on filesystem nodes to determine automatically what has and hasn't been synced, and what is in a conflicted state. Conflicted copies are not synced back to the server, but remain in the local filesystem. The user decides how to resolve conflicts by deleting or renaming the conflicted file (i.e., renaming clears the conflict attribute).

MakeDrive works today, but isn't ready for production quite yet. On Friday we reached the end of our summer work, where we tried hard to follow initial mockups are very cool. If you have a web-first filesystem, you can do some interesting things that might not make sense in a traditional filesystem (i.e., when the scope of your files is limited to web content).

  • Having a filesystem in a web page naturally got me wanting to host web pages from web pages. I wrote nohost to experiment with this idea, an httpd in browser that uses Blob URLs. It's really easy to load DOM elements from a web filesystem:
  • var img = document.createElement('img'); fs.readFile('/path/into/filesystem/image.png', function(err, data) { if(err) return handleError(); // Create a Blob and wrap in URL Object. var blob = new Blob([data], {type: 'image/png'}) var url = URL.createObjectURL(blob); img.src = url; });
    • Using this technique, we could create a small bootloader and store entire web apps in the filesystem. For example, all of Brackets loading from disk, with a tiny bootloader web page to get to the filesystem in appcache. This idea has been discussed elsewhere, and adding the filesystem makes it much more natural.
    • The current work on the W3C stream spec is really exciting, since we need a way to implement streaming data in and out of a filesystem, and therefore IndexedDB.
    • Having the ability to move IndexedDB to worker threads for background syncs (bug 701634), and into third-party iframes with postMessage to share a single filesystem instance across origins (bug 912202) would be amazing
    • Mobile! Being able to sync filesystems in and out of mobile web apps is really exciting. We're going to help get MakeDrive working in Mobile Appmaker this fall.

    If any of this interests you, please get in touch (@humphd) and help us. The next 6 months should be a lot of fun. I'll try to blog again before that, though ;)

    Categorieën: Mozilla-nl planet

    Daniel Stenberg: My home setup

    ma, 25/08/2014 - 08:57

    I work in my home office which is upstairs in my house, perhaps 20 steps from my kitchen and the coffee refill. I have a largish desk with room for a number of computers. The photo below shows the three meter beauty. My two kids have their two machines on the left side while I use the right side of it for my desktop and laptop.

    Daniel's home office

    Many computers

    The kids use my old desktop computer with a 20″ Dell screen and my old 15.6″ dual-core Asus laptop. My wife has her laptop downstairs and we have a permanent computer installed underneath the TV for media (an Asus VivoPC).

    My desktop computer

    I’m primarily developing C and C++ code and I’m frequently compiling rather large projects – repeatedly. I use a desktop machine for my ordinary development, equipped with a fairly powerful 3.5GHz quad-core Core-I7 CPU, I have my OS, my home dir and all source code put on an SSD. I have a larger HDD for larger and slower content. With ccache and friends, this baby can build Firefox really fast. I put my machine together from parts myself as I couldn’t find a suitable one focused on horse power but yet a “normal” 2D graphics card that works Fractal Designfine with Linux. I use a Radeon HD 5450 based ASUS card, which works fine with fully open source drivers.

    I have two basic 24 inch LCD monitors (Benq and Dell) both using 1920×1200 resolution. I like having lots of windows up, nothing runs full-screen. I use KDE as desktop and I edit everything in Emacs. Firefox is my primary browser. I don’t shut down this machine, it runs a few simple servers for private purposes.

    My machines (and my kids’) all run Debian Linux, typically of the unstable flavor allowing me to get new code reasonably fast.

    Func KB-460 keyboardMy desktop keyboard is a Func KB-460, mechanical keyboard with some funky extra candy such as red backlight and two USB ports. Both my keyboard and my mouse are wired, not wireless, to take away the need for batteries or recharging etc in this environment. My mouse is a basic and old Logitech MX 310.

    I have a crufty old USB headset with a mic, that works fine for hangouts and listening to music when the rest of the family is home. I have Logitech webcam thing sitting on the screen too, but I hardly ever use it for anything.

    When on the move

    I need to sometimes move around and work from other places. Going to conferences or even our regular Mozilla work weeks. Hence I also have a laptop that is powerful enough to build Firefox is a sane amount of time. I have Lenovo Thinkpad w540a Lenovo Thinkpad W540 with a 2.7GHz quad-core Core-I7, 16GB of RAM and 512GB of SSD. It has the most annoying touch pad on it. I don’t’ like that it doesn’t have the explicit buttons so for example both-clicking (to simulate a middle-click) like when pasting text in X11 is virtually impossible.

    On this machine I also run a VM with win7 installed and associated development environment so I can build and debug Firefox for Windows on it.

    I have a second portable. A small and lightweight netbook, an Eeepc S101, 10.1″ that I’ve been using when I go and just do presentations at places but recently I’ve started to simply use my primary laptop even for those occasions – primarily because it is too slow to do anything else on.

    I do video conferences a couple of times a week and we use Vidyo for that. Its Linux client is shaky to say the least, so I tend to use my Nexus 7 tablet for it since the Vidyo app at least works decently on that. It also allows me to quite easily change location when it turns necessary, which it sometimes does since my meetings tend to occur in the evenings and then there’s also varying amounts of “family activities” going on!


    For backup, I have a Synology NAS equipped with 2TB of disk in a RAIDSynology DS211j stashed downstairs, on the wired in-house gigabit ethernet. I run an rsync job every night that syncs the important stuff to the NAS and I run a second rsync that also mirrors relevant data over to a friends house just in case something terribly bad would go down. My NAS backup has already saved me really good at least once.


    HP Officejet 8500ANext to the NAS downstairs is the house printer, also attached to the gigabit even if it has a wifi interface of its own. I just like increasing reliability to have the “fixed services” in the house on wired network.

    The printer also has scanning capability which actually has come handy several times. The thing works nicely from my Linux machines as well as my wife’s windows laptop.


    fiber cableI have fiber going directly into my house. It is still “just” a 100/100 connection in the other end of the fiber since at the time I installed this they didn’t yet have equipment to deliver beyond 100 megabit in my area. I’m sure I’ll upgrade this to something more impressive in the future but this is a pretty snappy connection already. I also have just a few milliseconds latency to my primary servers.

    Having the fast uplink is perfect for doing good remote backups.

    Router  and wifi

    dlink DIR 635I have a lowly D-Link DIR 635 router and wifi access point providing wifi for the 2.4GHz and 5GHz bands and gigabit speed on the wired side. It was dead cheap it just works. It NATs my traffic and port forwards some ports through to my desktop machine.

    The router itself can also update the dyndns info which ultimately allows me to use a fixed name to my home machine even without a fixed ip.

    Frequent Wifi users in the household include my wife’s laptop, the TV computer and all our phones and tablets.


    Ping Communication Voice Catcher 201EWhen I installed the fiber I gave up the copper connection to my home and since then I use IP telephony for the “land line”. Basically a little box that translates IP to old phone tech and I keep using my old DECT phone. We basically only have our parents that still call this number and it has been useful to have the kids use this for outgoing calls up until they’ve gotten their own mobile phones to use.

    It doesn’t cost very much, but the usage is dropping over time so I guess we’ll just give it up one of these days.

    Mobile phones and tablets

    I have a Nexus 5 as my daily phone. I also have a Nexus 7 and Nexus 10 that tend to be used by the kids mostly.

    I have two Firefox OS devices for development/work.

    Categorieën: Mozilla-nl planet