September 2015


Attended meeting about the future of the London office. Later I provided some feedback on the proposed new office plan.

Submitted PR 235 to WebDriver. It defines screen capture.


Provided needinfo request for bug 1198950.

Reviewed rebased patch for bug 1142212.

Gave feedback on my thoughts on how the Marionette Python client should behave with regards to profiles in bug 1199588.

Surveyed the patch attached to bug 1165231 and requested author to do a try run to confirm nothing broke.

Filed bug 1201044 about reviewer lookup.

Filed and patched bug 1201050 about using the dispatcher technique for assorted action commands. Review available as rb/18061.

Submitted PRs 236, 237, and 238 to WebDriver.

Reviewed r/5780.


Reviewed bug 1165231.

Submitted PR 239 to WebDriver that specifies how user prompts should be handled.


WebDriver work:

Pushed bug 1201050 to inbound, and found that hg rebase -d inbound when the working copy is the bookmark rebased the whole bookmark successfully (as opposed to using -r BOOKMARK, because that only points to a single commit on the bookmark).

Provided feedback on bug 1123506 about sandboxes and script execution in Marionette.


Reviewed bug 1179143 and bug 1166239. Input on bug 1202246. Filed bug 1158219. Pushed bug 1162515 to inbound.

WebDriver work:

Filed bug 1202455 and bug 1202456.


WebDriver work:

Provided input on bug 1141519.

Filed and patched bug 1202707 and bug 1202710.


Filed bug 1203074 and responded to incident.

Reviewed bug 1203022 which fixes some aspect of the Marionette Web API jobs (Mnw).

Submitted PR 255 to WebDriver about renaming Send Alert Text to Set Alert Text and have it expect a string as input instead of a character array. Also send corresponding email to working group exlaining.

Filed and patched bug 1203074 (rb/18679) which fixes appending to textual input fields in Marionette.

Replied to wires PR 17 about inconcistency in alert command naming.

Reviewed bug 1203166 which lets all new browsers know if they run in B2G or if accessibility checks are enabled.


WebDriver work:

Pushed bug 1203074 to inbound.

Filed bug 1203540 as a follow up to bug 1203074 as we should have a blacklist of input elements that should not have the caret moved.

Reviewed bug 1201595 (rb/18805).


WebDriver work:


Reviewed rb/19099.


Worked on defining the steps for clearing elements in WebDriver.

Attended the Engineering Productivity fortnightly meeting.


Submitted PR 268 which defines the actual clearing steps of the Element Clear command in WebDriver.

Reproduced and uploaded a test case to bug 1203649 that I filed last week about the grainy font problem. The issue reproduces under the following set of bizarre circumstances:

Submitted PR 269 to WebDriver to temporarily work around bug 1203649 in Gecko.

Submitted PR 270 to WebDriver which drops the remaining issue in Screen Capture about checking the corners of the element’s bounding box.

Testing that one or more of the corners are inside the viewport is faulty logic, since the bounding box of the element can be greater and also unattainable by scrolling the element into view.

Using hit testing to verify that some part of the element is visible is bordering on element visibility checking and is not the intention of the command.

Submitted PR 271 which imports and references the beforeunload event from HTML.

Filed bug 1204889 about missing username in the remember password doorhanger for

Submitted PR 272 defining the mathematical shorthand function min in WebDriver.

Submitted PR 273 which rectifies some usage of URI Templates in the WebDriver specification.

Submitted PR 274 that fixes a double definition of window.

Submitted PR 275 which sets the current browsing context after navigating. This replaces PR 100.


Addressed some test failures in in bug 1203074 and requested another review from jgriffin.

Spent a lot of time sorting out a corrupt hg repository.


Patched bug 1204504 about wrapping invalid CSS query selector errors as invalid selector error’s.

Researched bug 1204496.

Filed and patched bug 1205638 that removes the findChildElement and findChildElements commands.

Pushed forgotten bug 1202663 to inbound.

Filed bug 1205687 about supporting Marionette tests for ./mach test FILE. Did extensive work on this and almost got it working.

The attempt to land bug 1202663, that converted the screen capture commands to use the new dispatcher technique, on inbound resulted in widespread bustage. I backed it out, but later found out that a patch had been landed that rewrote all instances of let to var, apparently in preparation for some lexical scope changes. Since I wasn’t aware of this when I rebased bug 1202663, changes using let were introduced, which started crashing the binary.

I also learned the correct way to back out a patch:

% hg qbackout -e -r REV
# brings up editor so "CLOSED TREE" can be added
# in case inbound is closed
% hg qfin -a
% hg out inbound
# check what’s on its way out
% hg push inbound


Landed bug 1205638 on inbound.

Triggered new, full try job for bug 1202663 (from bookmark bug_1202663_6), which is the bug that busted inbound yesterday.

Filed bug 1206122 and bug 1206126.


Requested review for bug 1205687 about adding support for ./mach test FILE to Marionette.

Rebased and addressed review issues for PR 268 to WebDriver.

Submitted PR 276 to WebDriver, addressing some typos in the encode as Base64 algorithm.


Worked primarily on debugging bug 1207125, where the marionette-transport package used in the Python Marionette test runner does not clear the socket buffer before sending a new command. If the runner is interrupted and unittest forcefully shuts down the thread the test runs on, this can cause a request’s response not to be read. The next successful request will then read the previous requests’s response and cause a race condition.

Initially I thought this was due to Marionette’s complete lack of synchronisation and blocking behaviour; e.g. it will happy execute any command you give it immediately, even if there’s another command currently executing. This is only partially affecting the reported bug.


Investigated bug 1207125 further and found that when a Python unittest is interrupted, it forcefully shuts down the thread that the test runs on, sometimes causing the socket recv() call from a request to not empty the pending data in the socket buffer.

When the next command is called that actually reads the response from the previous request and thereby causes a race condition where response packets are delayed by a delta of +1. Theoretically this will eventually lead to a buffer overflow if it happens repeatedly.

I filed bug 1207564 specifically about addressing the overall bigger issue that the Marionette server suffers from a complete lack of blocking synchronisation.


Spent some time researching the Firefox Remote Debugger Protocol. Concluded it sucks for many different reasons, but primarily because there’s no way to guarantee sequence ordering of the messages. Started drawing up proposal for a message format that can be retrofitted to work on top of the existing protocol.


Reviewed rb/20357 and rb/20363.


Worked on third revision of the Marionette message format for the remote debugging protocol.


Continued said work on protocol revision.


Lost in a good flow, I continued work on the new Marionette message format that I hope will fix the message synchronisation issues.


Continued work on message synchronisation. Discussed progress with dburns and jgriffin.

Booked last hotel for Japan trip.


Worked on adding backwards compatibility support to the Python client for the message synchronisation and protocol change patch. It shouldn’t be as difficult as the last time since the command’s data structure isn’t changing; the changes will only involve wrapping the current responses slightly differently with some more metadata.

Pushed the patch to a try run and the results are so far looking very good. One thing that worries me slightly is that the Gij jobs should have failed in this case, since the protocol is incompatible with the Marionette Node.js client. Will look into this tomorrow.