Merge m-c to oak.
authorStephen A Pohl <spohl.mozilla.bugs@gmail.com>
Thu, 14 Apr 2016 14:59:31 -0400
changeset 491500 56c23d4d5468d45829c4e4df9f1029743427996f
parent 491499 06bcb6569cbbd0c62574a144345c67c0e16a3ea1 (current diff)
parent 350969 10f66b3164570b2183333262fa91a16004cbb908 (diff)
child 491501 3eae248283a05f7338454ddad7b019ed3ba3426c
push id47343
push userbmo:dothayer@mozilla.com
push dateWed, 01 Mar 2017 22:58:58 +0000
milestone48.0a1
Merge m-c to oak.
CLOBBER
accessible/base/AccCollector.cpp
accessible/base/AccCollector.h
b2g/installer/package-manifest.in
browser/app/profile/firefox.js
browser/base/content/browser.js
browser/confvars.sh
browser/installer/package-manifest.in
build/build-clang/clang-static-analysis-linux64-centos6.json
devtools/client/memory/actions/dominator-tree-display.js
devtools/client/memory/reducers/dominator-tree-display.js
dom/base/test/test_bug1011748.html
dom/broadcastchannel/tests/chrome.ini
dom/broadcastchannel/tests/test_broadcastchannel_private_browsing.html
dom/imptests/editing.txt
dom/imptests/editing/conformancetest/data.js
dom/imptests/editing/conformancetest/test_event.html
dom/imptests/editing/conformancetest/test_runtest.html
dom/imptests/editing/css/reset.css
dom/imptests/editing/implementation.js
dom/imptests/editing/selecttest/common.js
dom/imptests/editing/selecttest/test-iframe.html
dom/imptests/editing/selecttest/test_Document-open.html
dom/imptests/editing/selecttest/test_addRange.html
dom/imptests/editing/selecttest/test_collapse.html
dom/imptests/editing/selecttest/test_collapseToStartEnd.html
dom/imptests/editing/selecttest/test_deleteFromDocument.html
dom/imptests/editing/selecttest/test_extend.html
dom/imptests/editing/selecttest/test_getRangeAt.html
dom/imptests/editing/selecttest/test_getSelection.html
dom/imptests/editing/selecttest/test_interfaces.html
dom/imptests/editing/selecttest/test_isCollapsed.html
dom/imptests/editing/selecttest/test_removeAllRanges.html
dom/imptests/editing/selecttest/test_selectAllChildren.html
dom/imptests/editing/tests.js
dom/imptests/failures/editing/conformancetest/mochitest.ini
dom/imptests/failures/editing/conformancetest/test_event.html.json
dom/imptests/failures/editing/conformancetest/test_runtest.html.json
dom/imptests/failures/editing/selecttest/mochitest.ini
dom/imptests/failures/editing/selecttest/test_Document-open.html.json
dom/imptests/failures/editing/selecttest/test_addRange.html.json
dom/imptests/failures/editing/selecttest/test_collapse.html.json
dom/imptests/failures/editing/selecttest/test_collapseToStartEnd.html.json
dom/imptests/failures/editing/selecttest/test_extend.html.json
dom/imptests/failures/editing/selecttest/test_getSelection.html.json
dom/imptests/failures/editing/selecttest/test_removeAllRanges.html.json
dom/imptests/failures/editing/selecttest/test_selectAllChildren.html.json
dom/imptests/failures/html/dom/errors/mochitest.ini
dom/imptests/failures/html/dom/errors/test_exceptions.html.json
dom/imptests/failures/html/dom/lists/mochitest.ini
dom/imptests/failures/html/dom/lists/test_DOMTokenList-stringifier.html.json
dom/imptests/failures/html/dom/mochitest.ini
dom/imptests/failures/html/dom/nodes/test_Document-createElement-namespace.html.json
dom/imptests/failures/html/dom/nodes/test_Document-createElementNS.html.json
dom/imptests/failures/html/dom/nodes/test_Document-getElementsByTagName.html.json
dom/imptests/failures/html/dom/nodes/test_Node-properties.html.json
dom/imptests/failures/html/dom/nodes/test_attributes.html.json
dom/imptests/failures/html/dom/nodes/test_case.html.json
dom/imptests/failures/html/dom/nodes/test_getElementsByClassName-10.xml.json
dom/imptests/failures/html/dom/nodes/test_getElementsByClassName-11.xml.json
dom/imptests/failures/html/dom/test_interfaces.html.json
dom/imptests/failures/html/html/browsers/the-window-object/mochitest.ini
dom/imptests/failures/html/html/browsers/the-window-object/named-access-on-the-window-object/mochitest.ini
dom/imptests/failures/html/html/browsers/the-window-object/named-access-on-the-window-object/test_window-null-names.html.json
dom/imptests/failures/html/html/dom/documents/dta/doc.gEBN/mochitest.ini
dom/imptests/failures/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-newelements.html.json
dom/imptests/failures/html/html/dom/documents/dta/test_document.title-06.html.json
dom/imptests/failures/html/html/dom/documents/dta/test_nameditem-02.html.json
dom/imptests/failures/html/html/dom/documents/dta/test_nameditem-03.html.json
dom/imptests/failures/html/html/dom/documents/dta/test_nameditem-04.html.json
dom/imptests/failures/html/html/dom/documents/dta/test_nameditem-05.html.json
dom/imptests/failures/html/html/obsolete/implreq/oeaaa/mochitest.ini
dom/imptests/failures/html/html/obsolete/implreq/oeaaa/test_script-IDL-event-htmlfor.html.json
dom/imptests/failures/html/html/semantics/forms/the-select-element/mochitest.ini
dom/imptests/failures/html/html/semantics/forms/the-select-element/test_select-named-getter.html.json
dom/imptests/failures/html/html/semantics/forms/the-select-element/test_select-remove.html.json
dom/imptests/failures/html/html/semantics/scripting-1/the-script-element/mochitest.ini
dom/imptests/failures/html/html/semantics/scripting-1/the-script-element/test_script-for-event.html.json
dom/imptests/failures/html/html/semantics/scripting-1/the-script-element/test_script-language-type.html.json
dom/imptests/failures/html/html/semantics/scripting-1/the-script-element/test_script-languages-01.html.json
dom/imptests/failures/html/html/semantics/scripting-1/the-script-element/test_script-languages-02.html.json
dom/imptests/failures/html/html/semantics/tabular-data/the-table-element/mochitest.ini
dom/imptests/failures/html/html/semantics/tabular-data/the-table-element/test_table-insertRow.html.json
dom/imptests/failures/html/html/semantics/tabular-data/the-table-element/test_table-rows.html.json
dom/imptests/failures/html/html/webappapis/atob/mochitest.ini
dom/imptests/failures/html/html/webappapis/atob/test_base64.html.json
dom/imptests/failures/html/js/builtins/mochitest.ini
dom/imptests/failures/html/microdata/microdata-dom-api/mochitest.ini
dom/imptests/failures/html/microdata/microdata-dom-api/test_001.html.json
dom/imptests/html/dom/collections/test_HTMLCollection-empty-name.html
dom/imptests/html/dom/constants.js
dom/imptests/html/dom/errors/test_DOMException-constants.html
dom/imptests/html/dom/errors/test_exceptions.html
dom/imptests/html/dom/events/test_Event-constants.html
dom/imptests/html/dom/events/test_Event-constructors.html
dom/imptests/html/dom/events/test_Event-defaultPrevented.html
dom/imptests/html/dom/events/test_Event-initEvent.html
dom/imptests/html/dom/events/test_Event-propagation.html
dom/imptests/html/dom/events/test_Event-type.html
dom/imptests/html/dom/events/test_EventTarget-addEventListener.html
dom/imptests/html/dom/events/test_EventTarget-dispatchEvent.html
dom/imptests/html/dom/events/test_EventTarget-removeEventListener.html
dom/imptests/html/dom/events/test_ProgressEvent.html
dom/imptests/html/dom/lists/test_DOMTokenList-stringifier.html
dom/imptests/html/dom/nodes/ChildNode-remove.js
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/bare_mathml.html
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/bare_mathml.svg
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/bare_mathml.xhtml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/bare_mathml.xml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/bare_svg.html
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/bare_svg.svg
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/bare_svg.xhtml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/bare_svg.xml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/bare_xhtml.html
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/bare_xhtml.svg
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/bare_xhtml.xhtml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/bare_xhtml.xml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/empty.html
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/empty.svg
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/empty.xhtml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/empty.xml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/generate.py
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/mathml.html
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/mathml.svg
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/mathml.xhtml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/mathml.xml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/minimal_html.html
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/minimal_html.svg
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/minimal_html.xhtml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/minimal_html.xml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/svg.html
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/svg.svg
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/svg.xhtml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/svg.xml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/xhtml.html
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/xhtml.svg
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/xhtml.xhtml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/xhtml.xml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_changed.html
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_changed.svg
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_changed.xhtml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_changed.xml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_removed.html
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_removed.svg
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_removed.xhtml
dom/imptests/html/dom/nodes/Document-createElement-namespace-tests/xhtml_ns_removed.xml
dom/imptests/html/dom/nodes/Document-createProcessingInstruction.js
dom/imptests/html/dom/nodes/attributes.js
dom/imptests/html/dom/nodes/case.js
dom/imptests/html/dom/nodes/creators.js
dom/imptests/html/dom/nodes/encoding.php
dom/imptests/html/dom/nodes/productions.js
dom/imptests/html/dom/nodes/test_CharacterData-appendData.html
dom/imptests/html/dom/nodes/test_CharacterData-deleteData.html
dom/imptests/html/dom/nodes/test_CharacterData-insertData.html
dom/imptests/html/dom/nodes/test_CharacterData-remove.html
dom/imptests/html/dom/nodes/test_CharacterData-replaceData.html
dom/imptests/html/dom/nodes/test_Comment-constructor.html
dom/imptests/html/dom/nodes/test_DOMImplementation-createDocument.html
dom/imptests/html/dom/nodes/test_DOMImplementation-createDocumentType.html
dom/imptests/html/dom/nodes/test_DOMImplementation-createHTMLDocument.html
dom/imptests/html/dom/nodes/test_DOMImplementation-hasFeature.html
dom/imptests/html/dom/nodes/test_Document-adoptNode.html
dom/imptests/html/dom/nodes/test_Document-createComment.html
dom/imptests/html/dom/nodes/test_Document-createElement-namespace.html
dom/imptests/html/dom/nodes/test_Document-createElement.html
dom/imptests/html/dom/nodes/test_Document-createElementNS.html
dom/imptests/html/dom/nodes/test_Document-createEvent.html
dom/imptests/html/dom/nodes/test_Document-createProcessingInstruction-literal-1.xhtml
dom/imptests/html/dom/nodes/test_Document-createProcessingInstruction-literal-2.xhtml
dom/imptests/html/dom/nodes/test_Document-createProcessingInstruction.html
dom/imptests/html/dom/nodes/test_Document-createProcessingInstruction.xhtml
dom/imptests/html/dom/nodes/test_Document-createTreeWalker.html
dom/imptests/html/dom/nodes/test_Document-getElementById.html
dom/imptests/html/dom/nodes/test_Document-getElementsByTagName.html
dom/imptests/html/dom/nodes/test_Document-getElementsByTagNameNS.html
dom/imptests/html/dom/nodes/test_Document-importNode.html
dom/imptests/html/dom/nodes/test_DocumentType-remove.html
dom/imptests/html/dom/nodes/test_Element-children.html
dom/imptests/html/dom/nodes/test_Element-getElementsByClassName.html
dom/imptests/html/dom/nodes/test_Element-remove.html
dom/imptests/html/dom/nodes/test_Element-removeAttributeNS.html
dom/imptests/html/dom/nodes/test_Element-tagName.html
dom/imptests/html/dom/nodes/test_Node-appendChild.html
dom/imptests/html/dom/nodes/test_Node-cloneNode.html
dom/imptests/html/dom/nodes/test_Node-compareDocumentPosition.html
dom/imptests/html/dom/nodes/test_Node-constants.html
dom/imptests/html/dom/nodes/test_Node-contains.html
dom/imptests/html/dom/nodes/test_Node-contains.xml
dom/imptests/html/dom/nodes/test_Node-insertBefore.html
dom/imptests/html/dom/nodes/test_Node-isEqualNode.xhtml
dom/imptests/html/dom/nodes/test_Node-lookupPrefix.xhtml
dom/imptests/html/dom/nodes/test_Node-nodeName.html
dom/imptests/html/dom/nodes/test_Node-nodeName.xhtml
dom/imptests/html/dom/nodes/test_Node-normalize.html
dom/imptests/html/dom/nodes/test_Node-parentElement.html
dom/imptests/html/dom/nodes/test_Node-parentNode.html
dom/imptests/html/dom/nodes/test_Node-properties.html
dom/imptests/html/dom/nodes/test_Node-removeChild.html
dom/imptests/html/dom/nodes/test_Node-replaceChild.html
dom/imptests/html/dom/nodes/test_attributes.html
dom/imptests/html/dom/nodes/test_case.html
dom/imptests/html/dom/nodes/test_getElementsByClassName-01.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-02.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-03.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-04.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-05.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-06.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-07.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-08.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-09.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-10.xml
dom/imptests/html/dom/nodes/test_getElementsByClassName-11.xml
dom/imptests/html/dom/nodes/test_getElementsByClassName-12.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-13.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-14.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-15.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-16.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-17.htm
dom/imptests/html/dom/nodes/test_getElementsByClassName-18.htm
dom/imptests/html/dom/ranges/Range-test-iframe.html
dom/imptests/html/dom/ranges/test_Range-attributes.html
dom/imptests/html/dom/ranges/test_Range-cloneContents.html
dom/imptests/html/dom/ranges/test_Range-cloneRange.html
dom/imptests/html/dom/ranges/test_Range-collapse.html
dom/imptests/html/dom/ranges/test_Range-commonAncestorContainer-2.html
dom/imptests/html/dom/ranges/test_Range-commonAncestorContainer.html
dom/imptests/html/dom/ranges/test_Range-compareBoundaryPoints.html
dom/imptests/html/dom/ranges/test_Range-comparePoint-2.html
dom/imptests/html/dom/ranges/test_Range-comparePoint.html
dom/imptests/html/dom/ranges/test_Range-deleteContents.html
dom/imptests/html/dom/ranges/test_Range-detach.html
dom/imptests/html/dom/ranges/test_Range-extractContents.html
dom/imptests/html/dom/ranges/test_Range-insertNode.html
dom/imptests/html/dom/ranges/test_Range-intersectsNode-binding.html
dom/imptests/html/dom/ranges/test_Range-intersectsNode.html
dom/imptests/html/dom/ranges/test_Range-isPointInRange.html
dom/imptests/html/dom/ranges/test_Range-mutations.html
dom/imptests/html/dom/ranges/test_Range-selectNode.html
dom/imptests/html/dom/ranges/test_Range-set.html
dom/imptests/html/dom/ranges/test_Range-surroundContents.html
dom/imptests/html/dom/test_historical.html
dom/imptests/html/dom/traversal/test_NodeFilter-constants.html
dom/imptests/html/dom/traversal/unfinished/TODO
dom/imptests/html/domxpath/test_evaluator-constructor.html
dom/imptests/html/html/browsers/browsing-the-web/read-media/test_pageload-image.html
dom/imptests/html/html/browsers/browsing-the-web/read-media/test_pageload-video.html
dom/imptests/html/html/browsers/the-window-object/named-access-on-the-window-object/test_window-null-names.html
dom/imptests/html/html/browsers/the-window-object/test_window-indexed-properties-strict.html
dom/imptests/html/html/browsers/the-window-object/test_window-indexed-properties.html
dom/imptests/html/html/browsers/the-window-object/test_window-properties.html
dom/imptests/html/html/browsers/the-window-object/test_window-prototype-chain.html
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-case.html
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-case.xhtml
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-id.html
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-id.xhtml
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-namespace.html
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-namespace.xhtml
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-newelements.html
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-newelements.xhtml
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-null-undef.html
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-null-undef.xhtml
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-param.html
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-param.xhtml
dom/imptests/html/html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-same.html
dom/imptests/html/html/dom/documents/dta/test_Document.getElementsByClassName-null-undef.html
dom/imptests/html/html/dom/documents/dta/test_Element.getElementsByClassName-null-undef.html
dom/imptests/html/html/dom/documents/dta/test_document.body-getter.html
dom/imptests/html/html/dom/documents/dta/test_document.body-setter-01.html
dom/imptests/html/html/dom/documents/dta/test_document.embeds-document.plugins-01.html
dom/imptests/html/html/dom/documents/dta/test_document.getElementsByClassName-same.html
dom/imptests/html/html/dom/documents/dta/test_document.head-01.html
dom/imptests/html/html/dom/documents/dta/test_document.head-02.html
dom/imptests/html/html/dom/documents/dta/test_document.images.html
dom/imptests/html/html/dom/documents/dta/test_document.title-01.html
dom/imptests/html/html/dom/documents/dta/test_document.title-02.xhtml
dom/imptests/html/html/dom/documents/dta/test_document.title-03.html
dom/imptests/html/html/dom/documents/dta/test_document.title-04.xhtml
dom/imptests/html/html/dom/documents/dta/test_document.title-05.html
dom/imptests/html/html/dom/documents/dta/test_document.title-06.html
dom/imptests/html/html/dom/documents/dta/test_document.title-07.html
dom/imptests/html/html/dom/documents/dta/test_nameditem-01.html
dom/imptests/html/html/dom/documents/dta/test_nameditem-02.html
dom/imptests/html/html/dom/documents/dta/test_nameditem-03.html
dom/imptests/html/html/dom/documents/dta/test_nameditem-04.html
dom/imptests/html/html/dom/documents/dta/test_nameditem-05.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-EN-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-EN-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-EN-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-EN-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-N-EN-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-N-EN-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-N-EN-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-N-EN-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-N-EN-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-N-EN.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-N-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-N-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-N-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-N-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-bdi-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-bdi-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-bdi-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-bdi-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-dir-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-dir-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-dir-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-dir-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-dir_auto-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-dir_auto-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-dir_auto-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-dir_auto-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-script-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-script-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-script-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-script-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-style-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-style-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-style-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-style-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-textarea-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-textarea-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-textarea-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-contained-textarea-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-EN-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-EN-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-EN-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-EN-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-N-EN-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-N-EN-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-N-EN-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-N-EN-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-N-EN-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-N-EN.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-N-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-N-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-N-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-N-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-EN-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-EN-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-EN-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-EN-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-N-EN-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-N-EN-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-N-EN-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-N-EN-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-N-EN-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-N-EN.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-N-L-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-N-L.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-N-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-N-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-R-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-input-script-R.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-isolate-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-isolate.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-pre-N-EN-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-pre-N-EN.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-pre-N-between-Rs-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-pre-N-between-Rs.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-pre-mixed-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-pre-mixed.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-textarea-N-EN-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-textarea-N-EN.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-textarea-N-between-Rs-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-textarea-N-between-Rs.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-textarea-mixed-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-textarea-mixed.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-textarea-script-N-EN-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-textarea-script-N-EN.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-textarea-script-N-between-Rs-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-textarea-script-N-between-Rs.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-textarea-script-mixed-ref.html
dom/imptests/html/html/dom/elements/global-attributes/dir_auto-textarea-script-mixed.html
dom/imptests/html/html/dom/elements/global-attributes/lang-xmllang-01-ref.html
dom/imptests/html/html/dom/elements/global-attributes/lang-xmllang-01.html
dom/imptests/html/html/dom/elements/global-attributes/lang-xyzzy-ref.html
dom/imptests/html/html/dom/elements/global-attributes/lang-xyzzy.html
dom/imptests/html/html/dom/elements/global-attributes/style-01-ref.html
dom/imptests/html/html/dom/elements/global-attributes/style-01.html
dom/imptests/html/html/dom/elements/global-attributes/test_classlist-nonstring.html
dom/imptests/html/html/dom/elements/global-attributes/test_dataset-delete.html
dom/imptests/html/html/dom/elements/global-attributes/test_dataset-enumeration.html
dom/imptests/html/html/dom/elements/global-attributes/test_dataset-get.html
dom/imptests/html/html/dom/elements/global-attributes/test_dataset-prototype.html
dom/imptests/html/html/dom/elements/global-attributes/test_dataset-set.html
dom/imptests/html/html/dom/elements/global-attributes/test_dataset.html
dom/imptests/html/html/dom/elements/global-attributes/test_document-dir.html
dom/imptests/html/html/dom/elements/global-attributes/test_id-attribute.html
dom/imptests/html/html/dom/elements/global-attributes/test_id-name.html
dom/imptests/html/html/editing/the-hidden-attribute/hidden-1-ref.html
dom/imptests/html/html/editing/the-hidden-attribute/hidden-1a.html
dom/imptests/html/html/editing/the-hidden-attribute/hidden-1b.html
dom/imptests/html/html/editing/the-hidden-attribute/hidden-1c.html
dom/imptests/html/html/editing/the-hidden-attribute/hidden-1d.html
dom/imptests/html/html/editing/the-hidden-attribute/hidden-1e.html
dom/imptests/html/html/editing/the-hidden-attribute/hidden-1f.html
dom/imptests/html/html/editing/the-hidden-attribute/hidden-1g.html
dom/imptests/html/html/editing/the-hidden-attribute/hidden-2-ref.svg
dom/imptests/html/html/editing/the-hidden-attribute/hidden-2.svg
dom/imptests/html/html/editing/the-hidden-attribute/reftest.list
dom/imptests/html/html/obsolete/implreq/oeaaa/test_document-color-01.html
dom/imptests/html/html/obsolete/implreq/oeaaa/test_document-color-02.html
dom/imptests/html/html/obsolete/implreq/oeaaa/test_document-color-03.html
dom/imptests/html/html/obsolete/implreq/oeaaa/test_document-color-04.html
dom/imptests/html/html/obsolete/implreq/oeaaa/test_heading-obsolete-attributes-01.html
dom/imptests/html/html/obsolete/implreq/oeaaa/test_script-IDL-event-htmlfor.html
dom/imptests/html/html/semantics/document-metadata/the-title-element/test_title.text-01.html
dom/imptests/html/html/semantics/document-metadata/the-title-element/test_title.text-02.xhtml
dom/imptests/html/html/semantics/document-metadata/the-title-element/test_title.text-03.html
dom/imptests/html/html/semantics/document-metadata/the-title-element/test_title.text-04.xhtml
dom/imptests/html/html/semantics/forms/the-form-element/test_form-elements-interfaces-01.html
dom/imptests/html/html/semantics/forms/the-form-element/test_form-elements-matches.html
dom/imptests/html/html/semantics/forms/the-form-element/test_form-elements-nameditem-01.html
dom/imptests/html/html/semantics/forms/the-form-element/test_form-elements-nameditem-02.html
dom/imptests/html/html/semantics/forms/the-form-element/test_form-nameditem.html
dom/imptests/html/html/semantics/forms/the-option-element/test_option-text-backslash.html
dom/imptests/html/html/semantics/forms/the-option-element/test_option-text-recurse.html
dom/imptests/html/html/semantics/forms/the-option-element/test_option-text-spaces.html
dom/imptests/html/html/semantics/forms/the-select-element/test_select-named-getter.html
dom/imptests/html/html/semantics/forms/the-select-element/test_select-remove.html
dom/imptests/html/html/semantics/scripting-1/the-script-element/test_script-for-event.html
dom/imptests/html/html/semantics/scripting-1/the-script-element/test_script-for-event.xhtml
dom/imptests/html/html/semantics/scripting-1/the-script-element/test_script-for-onload.html
dom/imptests/html/html/semantics/scripting-1/the-script-element/test_script-language-type.html
dom/imptests/html/html/semantics/scripting-1/the-script-element/test_script-languages-01.html
dom/imptests/html/html/semantics/scripting-1/the-script-element/test_script-languages-02.html
dom/imptests/html/html/semantics/scripting-1/the-script-element/test_script-noembed-noframes-iframe.xhtml
dom/imptests/html/html/semantics/scripting-1/the-script-element/test_script-onload-string.html
dom/imptests/html/html/semantics/scripting-1/the-script-element/test_script-text.html
dom/imptests/html/html/semantics/scripting-1/the-script-element/test_script-text.xhtml
dom/imptests/html/html/semantics/tabular-data/the-table-element/test_createTBody.html
dom/imptests/html/html/semantics/tabular-data/the-table-element/test_insertRow-method-01.html
dom/imptests/html/html/semantics/tabular-data/the-table-element/test_insertRow-method-02.html
dom/imptests/html/html/semantics/tabular-data/the-table-element/test_tBodies.html
dom/imptests/html/html/semantics/tabular-data/the-table-element/test_table-insertRow.html
dom/imptests/html/html/semantics/tabular-data/the-table-element/test_table-rows.html
dom/imptests/html/html/semantics/text-level-semantics/the-time-element/test_001.html
dom/imptests/html/html/webappapis/atob/test_base64.html
dom/imptests/html/html/webappapis/scripting/events/test_body-onload.html
dom/imptests/html/html/webappapis/scripting/events/test_event-handler-javascript.html
dom/imptests/html/html/webappapis/scripting/events/test_event-handler-spec-example.html
dom/imptests/html/html/webappapis/scripting/processing-model-2/test_window-onerror-parse-error.html
dom/imptests/html/html/webappapis/scripting/processing-model-2/test_window-onerror-runtime-error-throw.html
dom/imptests/html/html/webappapis/scripting/processing-model-2/test_window-onerror-runtime-error.html
dom/imptests/html/html/webappapis/timers/test_evil-spec-example.html
dom/imptests/html/js/builtins/Math.maxmin.js
dom/imptests/html/js/builtins/test_Array.DefineOwnProperty.html
dom/imptests/html/js/builtins/test_Array.prototype.join-order.html
dom/imptests/html/js/builtins/test_Math.max.html
dom/imptests/html/js/builtins/test_Math.min.html
dom/imptests/html/js/builtins/test_Object.prototype.hasOwnProperty-order.html
dom/imptests/html/microdata/microdata-dom-api/test_001.html
dom/imptests/reftest.list
dom/presentation/PresentationSessionTransport.cpp
dom/presentation/PresentationSessionTransport.h
dom/presentation/tests/mochitest/test_presentation_receiver.html
dom/presentation/tests/mochitest/test_presentation_receiver_establish_connection_error.html
dom/presentation/tests/mochitest/test_presentation_receiver_establish_connection_timeout.html
dom/presentation/tests/mochitest/test_presentation_receiver_oop.html
dom/presentation/tests/mochitest/test_presentation_sender.html
dom/presentation/tests/mochitest/test_presentation_sender_default_request.html
dom/presentation/tests/mochitest/test_presentation_sender_disconnect.html
dom/presentation/tests/mochitest/test_presentation_sender_establish_connection_error.html
dom/tests/mochitest/dom-level2-core/test_localName03.html
dom/tests/mochitest/dom-level2-core/test_prefix02.html
intl/icu-patches/bug-1228227-libc++-gcc_hidden.diff
ipc/app/app-common.mozbuild
ipc/app/firefox-webcontent.exe.manifest
ipc/app/plugin-container/Makefile.in
ipc/app/plugin-container/module.ver
ipc/app/plugin-container/moz.build
ipc/app/plugin-container/plugin-container.exe.manifest
ipc/chromium/src/base/non_thread_safe.cc
ipc/chromium/src/base/non_thread_safe.h
ipc/contentproc/firefox-webcontent.cpp
ipc/glue/GeckoChildProcessHost.cpp
js/xpconnect/src/XPCShellImpl.cpp
layout/generic/SummaryFrame.cpp
layout/generic/SummaryFrame.h
mobile/android/base/java/org/mozilla/gecko/animation/AnimatorProxy.java
mobile/android/base/java/org/mozilla/gecko/db/LocalReadingListAccessor.java
mobile/android/base/java/org/mozilla/gecko/db/ReadingListAccessor.java
mobile/android/base/java/org/mozilla/gecko/db/ReadingListProvider.java
mobile/android/base/java/org/mozilla/gecko/home/ReadingListRow.java
mobile/android/base/java/org/mozilla/gecko/overlays/service/sharemethods/AddToReadingList.java
mobile/android/base/resources/drawable-hdpi-v11/ic_menu_reader_add.xml
mobile/android/base/resources/drawable-hdpi-v11/ic_menu_reader_add_asset.png
mobile/android/base/resources/drawable-hdpi-v11/ic_menu_reader_remove.xml
mobile/android/base/resources/drawable-hdpi-v11/ic_menu_reader_remove_asset.png
mobile/android/base/resources/drawable-hdpi/icon_reading_list_empty.png
mobile/android/base/resources/drawable-hdpi/overlay_readinglist_already_icon.png
mobile/android/base/resources/drawable-hdpi/overlay_readinglist_icon.png
mobile/android/base/resources/drawable-mdpi-v11/ic_menu_reader_add.xml
mobile/android/base/resources/drawable-mdpi-v11/ic_menu_reader_remove.xml
mobile/android/base/resources/drawable-xhdpi-v11/ic_menu_reader_add.png
mobile/android/base/resources/drawable-xhdpi-v11/ic_menu_reader_remove.png
mobile/android/base/resources/drawable-xhdpi/icon_reading_list_empty.png
mobile/android/base/resources/drawable-xhdpi/overlay_readinglist_already_icon.png
mobile/android/base/resources/drawable-xhdpi/overlay_readinglist_icon.png
mobile/android/base/resources/drawable-xxhdpi-v11/ic_menu_reader_add.png
mobile/android/base/resources/drawable-xxhdpi-v11/ic_menu_reader_remove.png
mobile/android/base/resources/drawable-xxhdpi/overlay_readinglist_already_icon.png
mobile/android/base/resources/drawable-xxhdpi/overlay_readinglist_icon.png
mobile/android/base/resources/drawable/ic_menu_reader_add.xml
mobile/android/base/resources/drawable/ic_menu_reader_remove.xml
mobile/android/base/resources/drawable/overlay_share_reading_list_button.xml
mobile/android/base/resources/drawable/reading_list_indicator_read.xml
mobile/android/base/resources/drawable/reading_list_indicator_unread.xml
mobile/android/base/resources/layout/reading_list_item_row.xml
mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testReadingListProvider.java
netwerk/base/nsIPackagedAppChannelListener.idl
netwerk/test/mochitests/signed_web_packaged_app_random.sjs
netwerk/test/mochitests/test_about_blank_to_signed_web_packaged_app.html
netwerk/test/mochitests/test_origin_attributes_conversion.html
netwerk/test/mochitests/test_signed_to_signed_web_packaged_app.html
netwerk/test/mochitests/test_signed_web_packaged_app.html
netwerk/test/mochitests/test_signed_web_packaged_app_origin.html
old-configure.in
security/nss/lib/ssl/sslgathr.c
security/nss/tests/pkcs11/netscape/suites/Makefile
security/nss/tests/pkcs11/netscape/suites/config.mk
security/nss/tests/pkcs11/netscape/suites/manifest.mn
security/nss/tests/pkcs11/netscape/suites/security/Makefile
security/nss/tests/pkcs11/netscape/suites/security/config.mk
security/nss/tests/pkcs11/netscape/suites/security/manifest.mn
security/nss/tests/pkcs11/netscape/suites/security/pkcs11/Makefile
security/nss/tests/pkcs11/netscape/suites/security/pkcs11/config.mk
security/nss/tests/pkcs11/netscape/suites/security/pkcs11/manifest.mn
security/nss/tests/pkcs11/netscape/suites/security/pkcs11/pk11test.c
security/nss/tests/pkcs11/netscape/suites/security/pkcs11/pk11test.h
security/nss/tests/pkcs11/netscape/suites/security/pkcs11/pk11test.htp
security/nss/tests/pkcs11/netscape/suites/security/pkcs11/pkcs11.h
security/nss/tests/pkcs11/netscape/suites/security/pkcs11/pkcs11.reg
security/nss/tests/pkcs11/netscape/suites/security/pkcs11/pkcs11.rep
security/nss/tests/pkcs11/netscape/suites/security/pkcs11/rules.mk
security/nss/tests/pkcs11/netscape/suites/security/ssl/Makefile
security/nss/tests/pkcs11/netscape/suites/security/ssl/README
security/nss/tests/pkcs11/netscape/suites/security/ssl/config.mk
security/nss/tests/pkcs11/netscape/suites/security/ssl/manifest.mn
security/nss/tests/pkcs11/netscape/suites/security/ssl/ssl.reg
security/nss/tests/pkcs11/netscape/suites/security/ssl/sslc.c
security/nss/tests/pkcs11/netscape/suites/security/ssl/sslc.h
security/nss/tests/pkcs11/netscape/suites/security/ssl/ssls.c
security/nss/tests/pkcs11/netscape/suites/security/ssl/ssls.h
security/nss/tests/pkcs11/netscape/suites/security/ssl/sslt.c
security/nss/tests/pkcs11/netscape/suites/security/ssl/sslt.h
security/nss/tests/pkcs11/netscape/suites/security/ssl/sslt.htp
security/nss/tests/pkcs11/netscape/suites/security/ssl/sslt.rep
security/nss/tests/pkcs11/netscape/trivial/.cvsignore
security/nss/tests/pkcs11/netscape/trivial/Makefile.in
security/nss/tests/pkcs11/netscape/trivial/README.txt
security/nss/tests/pkcs11/netscape/trivial/acconfig.h
security/nss/tests/pkcs11/netscape/trivial/config.h.in
security/nss/tests/pkcs11/netscape/trivial/configure
security/nss/tests/pkcs11/netscape/trivial/configure.in
security/nss/tests/pkcs11/netscape/trivial/install-sh
security/nss/tests/pkcs11/netscape/trivial/trivial.c
testing/mochitest/runtests.py
testing/mozbase/manifestparser/tests/test_default_skipif.py
testing/web-platform/harness/wptrunner/browsers/webdriver.py
testing/web-platform/harness/wptrunner/executors/webdriver.py
testing/web-platform/meta/WebCryptoAPI/getRandomValues.worker.js.ini
testing/web-platform/meta/compat/webkit-text-fill-color-property-001a.html.ini
testing/web-platform/meta/compat/webkit-text-fill-color-property-001b.html.ini
testing/web-platform/meta/compat/webkit-text-fill-color-property-001c.html.ini
testing/web-platform/meta/compat/webkit-text-fill-color-property-001d.html.ini
testing/web-platform/meta/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/api-present.html.ini
testing/web-platform/meta/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/deny.html.ini
testing/web-platform/meta/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/empty-option-param.html.ini
testing/web-platform/meta/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/getusermedia-impossible-constraint.html.ini
testing/web-platform/meta/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/getusermedia-optional-constraint.html.ini
testing/web-platform/meta/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/getusermedia-trivial-constraint.html.ini
testing/web-platform/meta/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/unknownkey-option-param.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/introduction/disabled-audio-silence.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/introduction/disabled-video-black.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/mediastream/audio.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/mediastream/mediastream-addtrack.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/mediastream/mediastream-finished-add.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/mediastream/mediastream-gettrackid.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/mediastream/mediastream-idl.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/mediastream/mediastream-removetrack.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/mediastream/video.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/mediastreamtrack/mediastreamtrack-end.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/mediastreamtrack/mediastreamtrack-id.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/mediastreamtrack/mediastreamtrack-init.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/video-and-audio-tracks/audiostreamtrack.html.ini
testing/web-platform/meta/mediacapture-streams/stream-api/video-and-audio-tracks/videostreamtrack.html.ini
testing/web-platform/meta/resource-timing/test_resource_timing.html.ini
testing/web-platform/meta/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-002.html.ini
testing/web-platform/meta/shadow-dom/untriaged/elements-and-dom-objects/the-content-html-element/test-001.html.ini
testing/web-platform/meta/shadow-dom/untriaged/elements-and-dom-objects/the-content-html-element/test-002.html.ini
testing/web-platform/meta/shadow-dom/untriaged/elements-and-dom-objects/the-content-html-element/test-003.html.ini
testing/web-platform/meta/shadow-dom/untriaged/elements-and-dom-objects/the-content-html-element/test-005.html.ini
testing/web-platform/meta/shadow-dom/untriaged/elements-and-dom-objects/the-shadow-html-element/test-001.html.ini
testing/web-platform/meta/shadow-dom/untriaged/elements-and-dom-objects/the-shadow-html-element/test-002.html.ini
testing/web-platform/meta/shadow-dom/untriaged/elements-and-dom-objects/the-shadow-html-element/test-004.html.ini
testing/web-platform/meta/shadow-dom/untriaged/shadow-trees/content-pseudo-element/test-001.html.ini
testing/web-platform/meta/shadow-dom/untriaged/shadow-trees/content-pseudo-element/test-002.html.ini
testing/web-platform/meta/shadow-dom/untriaged/shadow-trees/custom-pseudo-elements/test-001.html.ini
testing/web-platform/meta/shadow-dom/untriaged/styles/deep-combinator/deep-combinator-001.html.ini
testing/web-platform/meta/shadow-dom/untriaged/styles/shadow-pseudoelement/shadow-pseudoelement-001.html.ini
testing/web-platform/tests/mediacapture-streams/mediastreams-as-media-elements/video-assignment-manual.html
testing/web-platform/tests/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/api-present.html
testing/web-platform/tests/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/deny.html
testing/web-platform/tests/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/empty-option-param.html
testing/web-platform/tests/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/getusermedia-impossible-constraint.html
testing/web-platform/tests/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/getusermedia-optional-constraint.html
testing/web-platform/tests/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/getusermedia-trivial-constraint.html
testing/web-platform/tests/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/unknownkey-option-param.html
testing/web-platform/tests/mediacapture-streams/stream-api/introduction/disabled-audio-silence.html
testing/web-platform/tests/mediacapture-streams/stream-api/introduction/disabled-video-black.html
testing/web-platform/tests/mediacapture-streams/stream-api/mediastream/audio.html
testing/web-platform/tests/mediacapture-streams/stream-api/mediastream/mediastream-addtrack.html
testing/web-platform/tests/mediacapture-streams/stream-api/mediastream/mediastream-finished-add.html
testing/web-platform/tests/mediacapture-streams/stream-api/mediastream/mediastream-gettrackid.html
testing/web-platform/tests/mediacapture-streams/stream-api/mediastream/mediastream-id-manual.html
testing/web-platform/tests/mediacapture-streams/stream-api/mediastream/mediastream-idl.html
testing/web-platform/tests/mediacapture-streams/stream-api/mediastream/mediastream-removetrack.html
testing/web-platform/tests/mediacapture-streams/stream-api/mediastream/video.html
testing/web-platform/tests/mediacapture-streams/stream-api/mediastreamtrack/mediastreamtrack-end.html
testing/web-platform/tests/mediacapture-streams/stream-api/mediastreamtrack/mediastreamtrack-id.html
testing/web-platform/tests/mediacapture-streams/stream-api/mediastreamtrack/mediastreamtrack-init.html
testing/web-platform/tests/mediacapture-streams/stream-api/video-and-audio-tracks/audiostreamtrack.html
testing/web-platform/tests/mediacapture-streams/stream-api/video-and-audio-tracks/videostreamtrack.html
testing/web-platform/tests/service-workers/service-workers/resources/test-helpers.js
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001.html
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/attributes/test-005.html
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/methods/elements-001.html
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/methods/non-element-nodes-001.html
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-002.html
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/the-content-html-element/test-001.html
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/the-content-html-element/test-002.html
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/the-content-html-element/test-003.html
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/the-content-html-element/test-005.html
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/the-content-html-element/test-006.html
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/the-shadow-html-element/test-001.html
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/the-shadow-html-element/test-002.html
testing/web-platform/tests/shadow-dom/untriaged/elements-and-dom-objects/the-shadow-html-element/test-004.html
testing/web-platform/tests/shadow-dom/untriaged/shadow-trees/content-pseudo-element/test-001.html
testing/web-platform/tests/shadow-dom/untriaged/shadow-trees/content-pseudo-element/test-002.html
testing/web-platform/tests/shadow-dom/untriaged/shadow-trees/custom-pseudo-elements/test-001.html
testing/web-platform/tests/shadow-dom/untriaged/shadow-trees/satisfying-matching-criteria/test-001.html
testing/web-platform/tests/shadow-dom/untriaged/shadow-trees/satisfying-matching-criteria/test-002.html
testing/web-platform/tests/shadow-dom/untriaged/shadow-trees/satisfying-matching-criteria/test-003.html
testing/web-platform/tests/shadow-dom/untriaged/shadow-trees/satisfying-matching-criteria/test-004.html
testing/web-platform/tests/shadow-dom/untriaged/shadow-trees/satisfying-matching-criteria/test-005.html
testing/web-platform/tests/shadow-dom/untriaged/styles/deep-combinator/deep-combinator-001.html
testing/web-platform/tests/shadow-dom/untriaged/styles/shadow-pseudoelement/shadow-pseudoelement-001.html
testing/web-platform/tests/shadow-dom/untriaged/testcommon.js
testing/web-platform/tests/tools/webdriver/webdriver/alert.py
testing/web-platform/tests/tools/webdriver/webdriver/capabilities.py
testing/web-platform/tests/tools/webdriver/webdriver/command.py
testing/web-platform/tests/tools/webdriver/webdriver/driver.py
testing/web-platform/tests/tools/webdriver/webdriver/exceptions.py
testing/web-platform/tests/tools/webdriver/webdriver/keys.py
testing/web-platform/tests/tools/webdriver/webdriver/searchcontext.py
testing/web-platform/tests/tools/webdriver/webdriver/wait.py
testing/web-platform/tests/tools/webdriver/webdriver/webelement.py
testing/web-platform/tests/webdriver/base_test.py
testing/web-platform/tests/webdriver/command_contexts/__init__.py
testing/web-platform/tests/webdriver/command_contexts/open_and_close_window_test.py
testing/web-platform/tests/webdriver/command_contexts/res/first-page.html
testing/web-platform/tests/webdriver/command_contexts/res/other-page.html
testing/web-platform/tests/webdriver/command_contexts/window_handle_test.py
testing/web-platform/tests/webdriver/command_contexts/window_size_test.py
testing/web-platform/tests/webdriver/cookie/__init__.py
testing/web-platform/tests/webdriver/cookie/cookie_test.py
testing/web-platform/tests/webdriver/cookie/res/cookie_container.html
testing/web-platform/tests/webdriver/ecmascript/ecmascript_test.py
testing/web-platform/tests/webdriver/ecmascript/res/ecmascript_test.html
testing/web-platform/tests/webdriver/element_location/__init__.py
testing/web-platform/tests/webdriver/element_location/element_location_test.py
testing/web-platform/tests/webdriver/element_location/res/elements.html
testing/web-platform/tests/webdriver/element_state/__init__.py
testing/web-platform/tests/webdriver/element_state/method_test.py
testing/web-platform/tests/webdriver/element_state/properties.py
testing/web-platform/tests/webdriver/element_state/res/0x0-pixels.html
testing/web-platform/tests/webdriver/element_state/res/1x1-pixels.html
testing/web-platform/tests/webdriver/element_state/res/a-with-href-attribute.html
testing/web-platform/tests/webdriver/element_state/res/absolute-children-ancestor-hidden-overflow.html
testing/web-platform/tests/webdriver/element_state/res/body_empty.html
testing/web-platform/tests/webdriver/element_state/res/body_implicit.html
testing/web-platform/tests/webdriver/element_state/res/body_overflow_hidden.html
testing/web-platform/tests/webdriver/element_state/res/body_visibility_hidden.html
testing/web-platform/tests/webdriver/element_state/res/display-block.html
testing/web-platform/tests/webdriver/element_state/res/display-none-child-link.html
testing/web-platform/tests/webdriver/element_state/res/display-none-child-paragraph.html
testing/web-platform/tests/webdriver/element_state/res/display-none-child.html
testing/web-platform/tests/webdriver/element_state/res/display-none-dynamic.html
testing/web-platform/tests/webdriver/element_state/res/display-none-parent-presedence-visibility.html
testing/web-platform/tests/webdriver/element_state/res/display-none-parent-presedence.html
testing/web-platform/tests/webdriver/element_state/res/display-none.html
testing/web-platform/tests/webdriver/element_state/res/element-dynamically-moved-outside-viewport.html
testing/web-platform/tests/webdriver/element_state/res/element-hidden-by-other-element.html
testing/web-platform/tests/webdriver/element_state/res/element-hidden-by-z-index.html
testing/web-platform/tests/webdriver/element_state/res/element-moved-behind-other-element-by-transform.html
testing/web-platform/tests/webdriver/element_state/res/element-moved-outside-viewport-by-transform.html
testing/web-platform/tests/webdriver/element_state/res/element-outside-viewport.html
testing/web-platform/tests/webdriver/element_state/res/element-partially-hidden-by-other-element.html
testing/web-platform/tests/webdriver/element_state/res/element-selected.html
testing/web-platform/tests/webdriver/element_state/res/element-with-color-style-attribute.html
testing/web-platform/tests/webdriver/element_state/res/element-with-custom-attribute.html
testing/web-platform/tests/webdriver/element_state/res/element-with-id-attribute.html
testing/web-platform/tests/webdriver/element_state/res/element-with-same-color-as-background.html
testing/web-platform/tests/webdriver/element_state/res/element-with-same-color-as-parent-background.html
testing/web-platform/tests/webdriver/element_state/res/element-with-style-attribute.html
testing/web-platform/tests/webdriver/element_state/res/element-without-attribute.html
testing/web-platform/tests/webdriver/element_state/res/elements_text.html
testing/web-platform/tests/webdriver/element_state/res/get-element-attribute-extended.html
testing/web-platform/tests/webdriver/element_state/res/hidden-input-type-checkbox-untogglable.html
testing/web-platform/tests/webdriver/element_state/res/hidden-input-type-text-writing.html
testing/web-platform/tests/webdriver/element_state/res/hidden.html
testing/web-platform/tests/webdriver/element_state/res/img-with-src-attribute.html
testing/web-platform/tests/webdriver/element_state/res/input-morphs-into-hidden.html
testing/web-platform/tests/webdriver/element_state/res/input-type-hidden-unclickable.html
testing/web-platform/tests/webdriver/element_state/res/input-type-hidden.html
testing/web-platform/tests/webdriver/element_state/res/input-with-checked-attribute.html
testing/web-platform/tests/webdriver/element_state/res/input-without-checked-attribute.html
testing/web-platform/tests/webdriver/element_state/res/option-with-value-attribute.html
testing/web-platform/tests/webdriver/element_state/res/option-without-value-attribute.html
testing/web-platform/tests/webdriver/element_state/res/text-with-matching-color-and-background.html
testing/web-platform/tests/webdriver/element_state/res/text-with-same-color-as-background.html
testing/web-platform/tests/webdriver/element_state/res/text-with-same-color-as-parent-background.html
testing/web-platform/tests/webdriver/element_state/res/visibility-child-link.html
testing/web-platform/tests/webdriver/element_state/res/visibility-child-paragraph.html
testing/web-platform/tests/webdriver/element_state/res/visibility-child-presedence.html
testing/web-platform/tests/webdriver/element_state/res/visibility-child.html
testing/web-platform/tests/webdriver/element_state/res/visibility-hidden.html
testing/web-platform/tests/webdriver/element_state/res/visibility-visible.html
testing/web-platform/tests/webdriver/element_state/res/x-auto-y-hidden.html
testing/web-platform/tests/webdriver/element_state/res/x-hidden-y-auto.html
testing/web-platform/tests/webdriver/element_state/res/x-hidden-y-hidden.html
testing/web-platform/tests/webdriver/element_state/res/x-hidden-y-scroll.html
testing/web-platform/tests/webdriver/element_state/res/x-scroll-y-hidden.html
testing/web-platform/tests/webdriver/element_state/res/zero-sized-element-with-sizable-decendant.html
testing/web-platform/tests/webdriver/element_state/selected_test.py
testing/web-platform/tests/webdriver/element_state/visibility_test.py
testing/web-platform/tests/webdriver/javascript/__init__.py
testing/web-platform/tests/webdriver/javascript/execute_script_test.py
testing/web-platform/tests/webdriver/javascript/res/execute_script_test.html
testing/web-platform/tests/webdriver/javascript/res/return_array_of_dom_elements.html
testing/web-platform/tests/webdriver/javascript/res/return_document_body.html
testing/web-platform/tests/webdriver/javascript/res/return_node_list.html
testing/web-platform/tests/webdriver/modal/__init__.py
testing/web-platform/tests/webdriver/modal/alerts_quit_test.py
testing/web-platform/tests/webdriver/modal/alerts_test.py
testing/web-platform/tests/webdriver/modal/res/alerts.html
testing/web-platform/tests/webdriver/navigation/__init__.py
testing/web-platform/tests/webdriver/navigation/auth_tests.py
testing/web-platform/tests/webdriver/navigation/forward.py
testing/web-platform/tests/webdriver/navigation/forwardToNothing.py
testing/web-platform/tests/webdriver/navigation/get_from_http_test.py
testing/web-platform/tests/webdriver/navigation/invalid_cert_test.py
testing/web-platform/tests/webdriver/navigation/refresh-page.py
testing/web-platform/tests/webdriver/navigation/refresh_page.py
testing/web-platform/tests/webdriver/navigation/res/1s-meta-redirect.html
testing/web-platform/tests/webdriver/navigation/res/60s-meta-redirect.html
testing/web-platform/tests/webdriver/navigation/res/authenticated.html
testing/web-platform/tests/webdriver/navigation/res/empty.html
testing/web-platform/tests/webdriver/navigation/res/forwardNext.html
testing/web-platform/tests/webdriver/navigation/res/forwardStart.html
testing/web-platform/tests/webdriver/navigation/res/fragment.html
testing/web-platform/tests/webdriver/navigation/res/instant-meta-redirect.html
testing/web-platform/tests/webdriver/navigation/res/refreshPageDynamic.html
testing/web-platform/tests/webdriver/navigation/res/refreshPageStatic.html
testing/web-platform/tests/webdriver/navigation/res/self-signed.key
testing/web-platform/tests/webdriver/network.py
testing/web-platform/tests/webdriver/runtests.py
testing/web-platform/tests/webdriver/runtests_p0.py
testing/web-platform/tests/webdriver/screenshot/__init__.py
testing/web-platform/tests/webdriver/screenshot/res/screenshot.html
testing/web-platform/tests/webdriver/screenshot/take_screenshot.py
testing/web-platform/tests/webdriver/timeouts/__init__.py
testing/web-platform/tests/webdriver/timeouts/implicit_waits_tests.py
testing/web-platform/tests/webdriver/timeouts/page_load_timeouts_tests.py
testing/web-platform/tests/webdriver/timeouts/res/implicit_waits_tests.html
testing/web-platform/tests/webdriver/timeouts/res/page_load_timeouts_tests.html
testing/web-platform/tests/webdriver/user_input/__init__.py
testing/web-platform/tests/webdriver/user_input/clear_test.py
testing/web-platform/tests/webdriver/user_input/click_test.py
testing/web-platform/tests/webdriver/user_input/res/click.html
testing/web-platform/tests/webdriver/user_input/res/element_clear_contenteditable_page.html
testing/web-platform/tests/webdriver/user_input/res/element_clear_disabled_input_page.html
testing/web-platform/tests/webdriver/user_input/res/element_clear_disabled_textarea_page.html
testing/web-platform/tests/webdriver/user_input/res/element_clear_readonly_input_page.html
testing/web-platform/tests/webdriver/user_input/res/element_clear_readonly_textarea_page.html
testing/web-platform/tests/webdriver/user_input/res/element_clear_writable_input_page.html
testing/web-platform/tests/webdriver/user_input/res/element_clear_writable_textarea_page.html
testing/web-platform/tests/webdriver/user_input/res/text-form-landing.html
testing/web-platform/tests/webdriver/user_input/res/text-form.html
testing/web-platform/tests/webdriver/user_input/sendkeys_test.py
testing/web-platform/tests/webdriver/webdriver.cfg
testing/web-platform/tests/webdriver/windows/__init__.py
testing/web-platform/tests/webdriver/windows/res/win1.html
testing/web-platform/tests/webdriver/windows/res/win2.html
testing/web-platform/tests/webdriver/windows/res/win3.html
testing/web-platform/tests/webdriver/windows/res/win4.html
testing/web-platform/tests/webdriver/windows/res/win5.html
testing/web-platform/tests/webdriver/windows/tabbing.py
testing/web-platform/tests/webdriver/windows/window_manipulation.py
toolkit/components/maintenanceservice/workmonitor.cpp
toolkit/components/passwordmgr/test/test_basic_form_2pw_2.html
toolkit/components/passwordmgr/test/test_basic_form_autocomplete.html
toolkit/components/telemetry/Histograms.json
xpcom/threads/nsICancelableRunnable.idl
--- a/.eslintignore
+++ b/.eslintignore
@@ -99,16 +99,17 @@ devtools/client/projecteditor/**
 devtools/client/promisedebugger/**
 devtools/client/responsivedesign/**
 devtools/client/scratchpad/**
 devtools/client/shadereditor/**
 devtools/client/shared/**
 devtools/client/sourceeditor/**
 devtools/client/webaudioeditor/**
 devtools/client/webconsole/**
+!devtools/client/webconsole/panel.js
 devtools/client/webide/**
 devtools/server/**
 devtools/shared/*.js
 devtools/shared/*.jsm
 devtools/shared/apps/**
 devtools/shared/client/**
 devtools/shared/discovery/**
 devtools/shared/gcli/**
@@ -188,16 +189,17 @@ toolkit/components/workerloader/tests/mo
 
 # Tests old non-star function generators
 toolkit/modules/tests/xpcshell/test_task.js
 
 # Not yet updated
 toolkit/components/osfile/**
 
 # External code:
+toolkit/components/microformats/test/**
 toolkit/components/reader/Readability.js
 toolkit/components/reader/JSDOMParser.js
 
 # Uses preprocessing
 toolkit/content/widgets/videocontrols.xml
 toolkit/content/widgets/wizard.xml
 toolkit/components/jsdownloads/src/DownloadIntegration.jsm
 toolkit/components/search/nsSearchService.js
--- a/.gitignore
+++ b/.gitignore
@@ -23,17 +23,18 @@ ID
 # User files that may appear at the root
 /.mozconfig*
 /mozconfig
 /configure
 /old-configure
 /config.cache
 /config.log
 /.clang_complete
-/mach.ini
+/machrc
+/.machrc
 
 # Empty marker file that's generated when we check out NSS
 security/manager/.nss.checkout
 
 # Build directories
 /obj*/
 
 # Build directories for js shell
--- a/.hgignore
+++ b/.hgignore
@@ -19,17 +19,17 @@
 # User files that may appear at the root
 ^\.mozconfig
 ^mozconfig*
 ^configure$
 ^old-configure$
 ^config\.cache$
 ^config\.log$
 ^\.clang_complete
-^mach.ini$
+^\.?machrc$
 
 # Empty marker file that's generated when we check out NSS
 ^security/manager/\.nss\.checkout$
 
 # Build directories
 ^obj
 
 # Build directories for js shell
--- a/CLOBBER
+++ b/CLOBBER
@@ -17,9 +17,9 @@
 #
 # Modifying this file will now automatically clobber the buildbot machines \o/
 #
 
 # Are you updating CLOBBER because you think it's needed for your WebIDL
 # changes to stick? As of bug 928195, this shouldn't be necessary! Please
 # don't change CLOBBER for WebIDL changes any more.
 
-Bug 1114647 - Renamed the content process
+Bug 1186060 - Switch Windows compiler from VS2013 to VS2015
--- a/accessible/atk/AccessibleWrap.cpp
+++ b/accessible/atk/AccessibleWrap.cpp
@@ -281,17 +281,17 @@ AccessibleWrap::Shutdown()
 }
 
 void
 AccessibleWrap::GetNativeInterface(void** aOutAccessible)
 {
   *aOutAccessible = nullptr;
 
   if (!mAtkObject) {
-    if (IsDefunct() || !nsAccUtils::IsEmbeddedObject(this)) {
+    if (IsDefunct() || IsText()) {
       // We don't create ATK objects for node which has been shutdown or
       // plain text leaves
       return;
     }
 
     GType type = GetMaiAtkType(CreateMaiInterfaces());
     if (!type)
       return;
@@ -788,34 +788,23 @@ GetLocaleCB(AtkObject* aAtkObj)
 }
 
 AtkObject *
 getParentCB(AtkObject *aAtkObj)
 {
   if (aAtkObj->accessible_parent)
     return aAtkObj->accessible_parent;
 
-  AtkObject* atkParent = nullptr;
-  if (AccessibleWrap* wrapper = GetAccessibleWrap(aAtkObj)) {
-    Accessible* parent = wrapper->Parent();
-    atkParent = parent ? AccessibleWrap::GetAtkObject(parent) : nullptr;
-  } else if (ProxyAccessible* proxy = GetProxy(aAtkObj)) {
-    ProxyAccessible* parent = proxy->Parent();
-    if (parent) {
-      atkParent = GetWrapperFor(parent);
-    } else {
-      // Otherwise this should be the proxy for the tab's top level document.
-      Accessible* outerDocParent = proxy->OuterDocOfRemoteBrowser();
-      NS_ASSERTION(outerDocParent, "this document should have an outerDoc as a parent");
-      if (outerDocParent) {
-        atkParent = AccessibleWrap::GetAtkObject(outerDocParent);
-      }
-    }
+  AccessibleOrProxy acc = GetInternalObj(aAtkObj);
+  if (acc.IsNull()) {
+    return nullptr;
   }
 
+  AccessibleOrProxy parent = acc.Parent();
+  AtkObject* atkParent = !parent.IsNull() ? GetWrapperFor(parent) : nullptr;
   if (atkParent)
     atk_object_set_parent(aAtkObj, atkParent);
 
   return aAtkObj->accessible_parent;
 }
 
 gint
 getChildCountCB(AtkObject *aAtkObj)
@@ -1096,16 +1085,26 @@ GetInternalObj(AtkObject* aObj)
 }
 
 AtkObject*
 GetWrapperFor(ProxyAccessible* aProxy)
 {
   return reinterpret_cast<AtkObject*>(aProxy->GetWrapper() & ~IS_PROXY);
 }
 
+AtkObject*
+GetWrapperFor(AccessibleOrProxy aObj)
+{
+  if (aObj.IsProxy()) {
+    return GetWrapperFor(aObj.AsProxy());
+  }
+
+  return AccessibleWrap::GetAtkObject(aObj.AsAccessible());
+}
+
 static uint16_t
 GetInterfacesForProxy(ProxyAccessible* aProxy, uint32_t aInterfaces)
 {
   uint16_t interfaces = 1 << MAI_INTERFACE_COMPONENT;
   if (aInterfaces & Interfaces::HYPERTEXT)
     interfaces |= (1 << MAI_INTERFACE_HYPERTEXT) | (1 << MAI_INTERFACE_TEXT)
         | (1 << MAI_INTERFACE_EDITABLE_TEXT);
 
--- a/accessible/atk/nsMai.h
+++ b/accessible/atk/nsMai.h
@@ -64,16 +64,17 @@ typedef struct _MaiAtkSocketClass
 {
   AtkSocketClass parent_class;
 } MaiAtkSocketClass;
 
 mozilla::a11y::AccessibleWrap* GetAccessibleWrap(AtkObject* aAtkObj);
 mozilla::a11y::ProxyAccessible* GetProxy(AtkObject* aAtkObj);
 mozilla::a11y::AccessibleOrProxy GetInternalObj(AtkObject* aObj);
 AtkObject* GetWrapperFor(mozilla::a11y::ProxyAccessible* aProxy);
+AtkObject* GetWrapperFor(mozilla::a11y::AccessibleOrProxy aObj);
 
 extern int atkMajorVersion, atkMinorVersion;
 
 /**
  * Return true if the loaded version of libatk-1.0.so is at least
  * aMajor.aMinor.0.
  */
 static inline bool
deleted file mode 100644
--- a/accessible/base/AccCollector.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "AccCollector.h"
-
-#include "Accessible.h"
-
-using namespace mozilla::a11y;
-
-////////////////////////////////////////////////////////////////////////////////
-// nsAccCollector
-////////////////////////////////////////////////////////////////////////////////
-
-AccCollector::
-  AccCollector(Accessible* aRoot, filters::FilterFuncPtr aFilterFunc) :
-  mFilterFunc(aFilterFunc), mRoot(aRoot), mRootChildIdx(0)
-{
-}
-
-AccCollector::~AccCollector()
-{
-}
-
-uint32_t
-AccCollector::Count()
-{
-  EnsureNGetIndex(nullptr);
-  return mObjects.Length();
-}
-
-Accessible*
-AccCollector::GetAccessibleAt(uint32_t aIndex)
-{
-  Accessible* accessible = mObjects.SafeElementAt(aIndex, nullptr);
-  if (accessible)
-    return accessible;
-
-  return EnsureNGetObject(aIndex);
-}
-
-int32_t
-AccCollector::GetIndexAt(Accessible* aAccessible)
-{
-  int32_t index = mObjects.IndexOf(aAccessible);
-  if (index != -1)
-    return index;
-
-  return EnsureNGetIndex(aAccessible);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// nsAccCollector protected
-
-Accessible*
-AccCollector::EnsureNGetObject(uint32_t aIndex)
-{
-  uint32_t childCount = mRoot->ChildCount();
-  while (mRootChildIdx < childCount) {
-    Accessible* child = mRoot->GetChildAt(mRootChildIdx++);
-    if (!(mFilterFunc(child) & filters::eMatch))
-      continue;
-
-    AppendObject(child);
-    if (mObjects.Length() - 1 == aIndex)
-      return mObjects[aIndex];
-  }
-
-  return nullptr;
-}
-
-int32_t
-AccCollector::EnsureNGetIndex(Accessible* aAccessible)
-{
-  uint32_t childCount = mRoot->ChildCount();
-  while (mRootChildIdx < childCount) {
-    Accessible* child = mRoot->GetChildAt(mRootChildIdx++);
-    if (!(mFilterFunc(child) & filters::eMatch))
-      continue;
-
-    AppendObject(child);
-    if (child == aAccessible)
-      return mObjects.Length() - 1;
-  }
-
-  return -1;
-}
-
-void
-AccCollector::AppendObject(Accessible* aAccessible)
-{
-  mObjects.AppendElement(aAccessible);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// EmbeddedObjCollector
-////////////////////////////////////////////////////////////////////////////////
-
-int32_t
-EmbeddedObjCollector::GetIndexAt(Accessible* aAccessible)
-{
-  if (aAccessible->mParent != mRoot)
-    return -1;
-
-  MOZ_ASSERT(!aAccessible->IsProxy());
-  if (aAccessible->mInt.mIndexOfEmbeddedChild != -1)
-    return aAccessible->mInt.mIndexOfEmbeddedChild;
-
-  return mFilterFunc(aAccessible) & filters::eMatch ?
-    EnsureNGetIndex(aAccessible) : -1;
-}
-
-void
-EmbeddedObjCollector::AppendObject(Accessible* aAccessible)
-{
-  MOZ_ASSERT(!aAccessible->IsProxy());
-  aAccessible->mInt.mIndexOfEmbeddedChild = mObjects.Length();
-  mObjects.AppendElement(aAccessible);
-}
deleted file mode 100644
--- a/accessible/base/AccCollector.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef mozilla_a11y_AccCollector_h__
-#define mozilla_a11y_AccCollector_h__
-
-#include "Filters.h"
-
-#include "nsTArray.h"
-
-namespace mozilla {
-namespace a11y {
-
-class Accessible;
-
-/**
- * Collect accessible children complying with filter function. Provides quick
- * access to accessible by index.
- */
-class AccCollector
-{
-public:
-  AccCollector(Accessible* aRoot, filters::FilterFuncPtr aFilterFunc);
-  virtual ~AccCollector();
-
-  /**
-   * Return accessible count within the collection.
-   */
-  uint32_t Count();
-
-  /**
-   * Return an accessible from the collection at the given index.
-   */
-  Accessible* GetAccessibleAt(uint32_t aIndex);
-
-  /**
-   * Return index of the given accessible within the collection.
-   */
-  virtual int32_t GetIndexAt(Accessible* aAccessible);
-
-protected:
-  /**
-   * Ensure accessible at the given index is stored and return it.
-   */
-  Accessible* EnsureNGetObject(uint32_t aIndex);
-
-  /**
-   * Ensure index for the given accessible is stored and return it.
-   */
-  int32_t EnsureNGetIndex(Accessible* aAccessible);
-
-  /**
-   * Append the object to collection.
-   */
-  virtual void AppendObject(Accessible* aAccessible);
-
-  filters::FilterFuncPtr mFilterFunc;
-  Accessible* mRoot;
-  uint32_t mRootChildIdx;
-
-  nsTArray<Accessible*> mObjects;
-
-private:
-  AccCollector();
-  AccCollector(const AccCollector&);
-  AccCollector& operator =(const AccCollector&);
-};
-
-/**
- * Collect embedded objects. Provide quick access to accessible by index and
- * vice versa.
- */
-class EmbeddedObjCollector final : public AccCollector
-{
-public:
-  virtual ~EmbeddedObjCollector() { }
-
-public:
-  virtual int32_t GetIndexAt(Accessible* aAccessible) override;
-
-protected:
-  // Make sure it's used by Accessible class only.
-  explicit EmbeddedObjCollector(Accessible* aRoot) :
-    AccCollector(aRoot, filters::GetEmbeddedObject) { }
-
-  virtual void AppendObject(Accessible* aAccessible) override;
-
-  friend class Accessible;
-};
-
-} // namespace a11y
-} // namespace mozilla
-
-#endif
--- a/accessible/base/AccIterator.cpp
+++ b/accessible/base/AccIterator.cpp
@@ -252,17 +252,17 @@ XULDescriptionIterator::Next()
 // IDRefsIterator
 ////////////////////////////////////////////////////////////////////////////////
 
 IDRefsIterator::
   IDRefsIterator(DocAccessible* aDoc, nsIContent* aContent,
                  nsIAtom* aIDRefsAttr) :
   mContent(aContent), mDoc(aDoc), mCurrIdx(0)
 {
-  if (mContent->IsInDoc())
+  if (mContent->IsInUncomposedDoc())
     mContent->GetAttr(kNameSpaceID_None, aIDRefsAttr, mIDs);
 }
 
 const nsDependentSubstring
 IDRefsIterator::NextID()
 {
   for (; mCurrIdx < mIDs.Length(); mCurrIdx++) {
     if (!NS_IsAsciiWhitespace(mIDs[mCurrIdx]))
--- a/accessible/base/AccTypes.h
+++ b/accessible/base/AccTypes.h
@@ -78,16 +78,17 @@ enum AccGenericType {
   eLandmark = 1 << 7,
   eList = 1 << 8,
   eListControl = 1 << 9,
   eMenuButton = 1 << 10,
   eSelect = 1 << 11,
   eTable = 1 << 12,
   eTableCell = 1 << 13,
   eTableRow = 1 << 14,
+  eText = 1 << 15,
 
-  eLastAccGenericType = eTableRow
+  eLastAccGenericType = eText
 };
 
 } // namespace a11y
 } // namespace mozilla
 
 #endif // mozilla_a11y_AccTypes_h
new file mode 100644
--- /dev/null
+++ b/accessible/base/AccessibleOrProxy.cpp
@@ -0,0 +1,27 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "AccessibleOrProxy.h"
+
+AccessibleOrProxy
+AccessibleOrProxy::Parent() const
+{
+  if (IsAccessible()) {
+    return AsAccessible()->Parent();
+  }
+
+  ProxyAccessible* proxy = AsProxy();
+  if (!proxy) {
+    return nullptr;
+  }
+
+  if (ProxyAccessible* parent = proxy->Parent()) {
+    return parent;
+  }
+
+  // Otherwise this should be the proxy for the tab's top level document.
+  return proxy->OuterDocOfRemoteBrowser();
+}
--- a/accessible/base/AccessibleOrProxy.h
+++ b/accessible/base/AccessibleOrProxy.h
@@ -101,16 +101,18 @@ public:
   {
     if (IsProxy()) {
       return AsProxy()->Role();
     }
 
     return AsAccessible()->Role();
   }
 
+  AccessibleOrProxy Parent() const;
+
   // XXX these are implementation details that ideally would not be exposed.
   uintptr_t Bits() const { return mBits; }
   void SetBits(uintptr_t aBits) { mBits = aBits; }
 
 private:
   uintptr_t mBits;
   static const uintptr_t IS_PROXY = 0x1;
 };
new file mode 100644
--- /dev/null
+++ b/accessible/base/EmbeddedObjCollector.cpp
@@ -0,0 +1,81 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "EmbeddedObjCollector.h"
+
+#include "Accessible.h"
+
+using namespace mozilla::a11y;
+
+uint32_t
+EmbeddedObjCollector::Count()
+{
+  EnsureNGetIndex(nullptr);
+  return mObjects.Length();
+}
+
+Accessible*
+EmbeddedObjCollector::GetAccessibleAt(uint32_t aIndex)
+{
+  Accessible* accessible = mObjects.SafeElementAt(aIndex, nullptr);
+  if (accessible)
+    return accessible;
+
+  return EnsureNGetObject(aIndex);
+}
+
+Accessible*
+EmbeddedObjCollector::EnsureNGetObject(uint32_t aIndex)
+{
+  uint32_t childCount = mRoot->ChildCount();
+  while (mRootChildIdx < childCount) {
+    Accessible* child = mRoot->GetChildAt(mRootChildIdx++);
+    if (child->IsText())
+      continue;
+
+    AppendObject(child);
+    if (mObjects.Length() - 1 == aIndex)
+      return mObjects[aIndex];
+  }
+
+  return nullptr;
+}
+
+int32_t
+EmbeddedObjCollector::EnsureNGetIndex(Accessible* aAccessible)
+{
+  uint32_t childCount = mRoot->ChildCount();
+  while (mRootChildIdx < childCount) {
+    Accessible* child = mRoot->GetChildAt(mRootChildIdx++);
+    if (child->IsText())
+      continue;
+
+    AppendObject(child);
+    if (child == aAccessible)
+      return mObjects.Length() - 1;
+  }
+
+  return -1;
+}
+
+int32_t
+EmbeddedObjCollector::GetIndexAt(Accessible* aAccessible)
+{
+  if (aAccessible->mParent != mRoot)
+    return -1;
+
+  MOZ_ASSERT(!aAccessible->IsProxy());
+  if (aAccessible->mInt.mIndexOfEmbeddedChild != -1)
+    return aAccessible->mInt.mIndexOfEmbeddedChild;
+
+  return !aAccessible->IsText() ?  EnsureNGetIndex(aAccessible) : -1;
+}
+
+void
+EmbeddedObjCollector::AppendObject(Accessible* aAccessible)
+{
+  MOZ_ASSERT(!aAccessible->IsProxy());
+  aAccessible->mInt.mIndexOfEmbeddedChild = mObjects.Length();
+  mObjects.AppendElement(aAccessible);
+}
new file mode 100644
--- /dev/null
+++ b/accessible/base/EmbeddedObjCollector.h
@@ -0,0 +1,69 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_a11y_EmbeddedObjCollector_h__
+#define mozilla_a11y_EmbeddedObjCollector_h__
+
+#include "nsTArray.h"
+
+namespace mozilla {
+namespace a11y {
+
+class Accessible;
+
+/**
+ * Collect embedded objects. Provide quick access to accessible by index and
+ * vice versa.
+ */
+class EmbeddedObjCollector final
+{
+public:
+  ~EmbeddedObjCollector() { }
+
+  /**
+   * Return index of the given accessible within the collection.
+   */
+  int32_t GetIndexAt(Accessible* aAccessible);
+
+  /**
+   * Return accessible count within the collection.
+   */
+  uint32_t Count();
+
+  /**
+   * Return an accessible from the collection at the given index.
+   */
+  Accessible* GetAccessibleAt(uint32_t aIndex);
+
+protected:
+  /**
+   * Ensure accessible at the given index is stored and return it.
+   */
+  Accessible* EnsureNGetObject(uint32_t aIndex);
+
+  /**
+   * Ensure index for the given accessible is stored and return it.
+   */
+  int32_t EnsureNGetIndex(Accessible* aAccessible);
+
+  // Make sure it's used by Accessible class only.
+  explicit EmbeddedObjCollector(Accessible* aRoot) :
+    mRoot(aRoot), mRootChildIdx(0) {}
+
+  /**
+   * Append the object to collection.
+   */
+  void AppendObject(Accessible* aAccessible);
+
+  friend class Accessible;
+
+  Accessible* mRoot;
+  uint32_t mRootChildIdx;
+  nsTArray<Accessible*> mObjects;
+};
+
+} // namespace a11y
+} // namespace mozilla
+
+#endif
--- a/accessible/base/EventTree.cpp
+++ b/accessible/base/EventTree.cpp
@@ -214,137 +214,84 @@ EventTree::Process()
         // handling.
         if (mtEvent->mAccessible->ARIARole() == roles::MENUPOPUP) {
           nsEventShell::FireEvent(nsIAccessibleEvent::EVENT_MENUPOPUP_END,
                                   mtEvent->mAccessible);
         }
 
         AccHideEvent* hideEvent = downcast_accEvent(mtEvent);
         if (hideEvent->NeedsShutdown()) {
-          mContainer->Document()->ShutdownChildrenInSubtree(hideEvent->mAccessible);
+          mtEvent->GetDocAccessible()->ShutdownChildrenInSubtree(mtEvent->mAccessible);
         }
       }
     }
 
     // Fire reorder event at last.
     if (mFireReorder) {
       nsEventShell::FireEvent(nsIAccessibleEvent::EVENT_REORDER, mContainer);
     }
+
+    mDependentEvents.Clear();
   }
 }
 
 EventTree*
 EventTree::FindOrInsert(Accessible* aContainer)
 {
   if (!mFirst) {
-    return mFirst = new EventTree(aContainer);
+    return mFirst = new EventTree(aContainer, true);
   }
 
   EventTree* prevNode = nullptr;
   EventTree* node = mFirst;
   do {
     MOZ_ASSERT(!node->mContainer->IsApplication(),
                "No event for application accessible is expected here");
     MOZ_ASSERT(!node->mContainer->IsDefunct(), "An event target has to be alive");
 
     // Case of same target.
     if (node->mContainer == aContainer) {
       return node;
     }
 
     // Check if the given container is contained by a current node
-    Accessible* tailRoot = aContainer->Document();
-    Accessible* tailParent = aContainer;
-
-    EventTree* matchNode = nullptr;
-    Accessible* matchParent = nullptr;
-    while (true) {
+    Accessible* top = mContainer ? mContainer : aContainer->Document();
+    Accessible* parent = aContainer;
+    while (parent) {
       // Reached a top, no match for a current event.
-      if (tailParent == tailRoot) {
-        // If we have a match in parents then continue to look in siblings.
-        if (matchNode && node->mNext) {
-          node = node->mNext;
-          if (node->mContainer == aContainer) {
-            return node; // case of same target
-          }
-          tailParent = aContainer;
-          continue;
-        }
+      if (parent == top) {
         break;
       }
 
       // We got a match.
-      if (tailParent->Parent() == node->mContainer) {
-        matchNode = node;
-        matchParent = tailParent;
-
-        // Search the subtree for a better match.
-        if (node->mFirst) {
-          tailRoot = node->mContainer;
-          node = node->mFirst;
-          if (node->mContainer == aContainer) {
-            return node; // case of same target
-          }
-          tailParent = aContainer;
-          continue;
-        }
-        break;
+      if (parent->Parent() == node->mContainer) {
+        return node->FindOrInsert(aContainer);
       }
 
-      tailParent = tailParent->Parent();
-      MOZ_ASSERT(tailParent, "Wrong tree");
-      if (!tailParent) {
-        break;
-      }
+      parent = parent->Parent();
+      MOZ_ASSERT(parent, "Wrong tree");
     }
 
-    // The given node is contained by a current node
-    //   if hide of a current node contains the given node
-    //   then assert
-    //   if show of a current node contains the given node
-    //   then ignore the given node
-    //   otherwise ignore the given node, but not its show and hide events
-    if (matchNode) {
-      uint32_t eventType = 0;
-      uint32_t count = matchNode->mDependentEvents.Length();
-      for (uint32_t idx = count - 1; idx < count; idx--) {
-        if (matchNode->mDependentEvents[idx]->mAccessible == matchParent) {
-          eventType = matchNode->mDependentEvents[idx]->mEventType;
-        }
-      }
-      MOZ_ASSERT(eventType != nsIAccessibleEvent::EVENT_HIDE,
-                 "Accessible tree was modified after it was removed");
-
-      // If contained by show event target then no events are required.
-      if (eventType == nsIAccessibleEvent::EVENT_SHOW) {
-        return nullptr;
-      }
-
-      node->mFirst = new EventTree(aContainer);
-      node->mFirst->mFireReorder = false;
-      return node->mFirst;
-    }
-
-    // If the given node contains a current node
+    // If the given container contains a current node
     // then
     //   if show or hide of the given node contains a grand parent of the current node
     //   then ignore the current node and its show and hide events
     //   otherwise ignore the current node, but not its show and hide events
     Accessible* curParent = node->mContainer;
     while (curParent && !curParent->IsDoc()) {
       if (curParent->Parent() != aContainer) {
         curParent = curParent->Parent();
         continue;
       }
 
       // Insert the tail node into the hierarchy between the current node and
       // its parent.
       node->mFireReorder = false;
       nsAutoPtr<EventTree>& nodeOwnerRef = prevNode ? prevNode->mNext : mFirst;
-      nsAutoPtr<EventTree> newNode(new EventTree(aContainer));
+      nsAutoPtr<EventTree> newNode(new EventTree(aContainer, mDependentEvents.IsEmpty()));
       newNode->mFirst = Move(nodeOwnerRef);
       nodeOwnerRef = Move(newNode);
       nodeOwnerRef->mNext = Move(node->mNext);
 
       // Check if a next node is contained by the given node too, and move them
       // under the given node if so.
       prevNode = nodeOwnerRef;
       node = nodeOwnerRef->mNext;
@@ -376,17 +323,41 @@ EventTree::FindOrInsert(Accessible* aCon
 
       return nodeOwnerRef;
     }
 
     prevNode = node;
   } while ((node = node->mNext));
 
   MOZ_ASSERT(prevNode, "Nowhere to insert");
-  return prevNode->mNext = new EventTree(aContainer);
+  MOZ_ASSERT(!prevNode->mNext, "Taken by another node");
+
+  // If 'this' node contains the given container accessible, then
+  //   do not emit a reorder event for the container
+  //   if a dependent show event target contains the given container then do not
+  //      emit show / hide events (to be done)
+
+  return prevNode->mNext = new EventTree(aContainer, mDependentEvents.IsEmpty());
+}
+
+void
+EventTree::Clear()
+{
+  mFirst = nullptr;
+  mNext = nullptr;
+  mContainer = nullptr;
+
+  uint32_t eventsCount = mDependentEvents.Length();
+  for (uint32_t jdx = 0; jdx < eventsCount; jdx++) {
+    AccHideEvent* ev = downcast_accEvent(mDependentEvents[jdx]);
+    if (ev && ev->NeedsShutdown()) {
+      ev->GetDocAccessible()->ShutdownChildrenInSubtree(ev->mAccessible);
+    }
+  }
+  mDependentEvents.Clear();
 }
 
 const EventTree*
 EventTree::Find(const Accessible* aContainer) const
 {
   const EventTree* et = this;
   while (et) {
     if (et->mContainer == aContainer) {
@@ -453,23 +424,23 @@ EventTree::Log(uint32_t aLevel) const
 }
 #endif
 
 void
 EventTree::Mutated(AccMutationEvent* aEv)
 {
   // If shown or hidden node is a root of previously mutated subtree, then
   // discard those subtree mutations as we are no longer interested in them.
-  EventTree* node = mFirst;
-  while (node) {
-    if (node->mContainer == aEv->mAccessible) {
-      node->Clear();
+  nsAutoPtr<EventTree>* node = &mFirst;
+  while (*node) {
+    if ((*node)->mContainer == aEv->mAccessible) {
+      *node = Move((*node)->mNext);
       break;
     }
-    node = node->mNext;
+    node = &(*node)->mNext;
   }
 
   AccMutationEvent* prevEvent = mDependentEvents.SafeLastElement(nullptr);
   mDependentEvents.AppendElement(aEv);
 
   // Coalesce text change events from this hide/show event and the previous one.
   if (prevEvent && aEv->mEventType == prevEvent->mEventType) {
     if (aEv->IsHide()) {
--- a/accessible/base/EventTree.h
+++ b/accessible/base/EventTree.h
@@ -51,19 +51,20 @@ private:
 
 
 /**
  * A mutation events coalescence structure.
  */
 class EventTree final {
 public:
   EventTree() :
-    mFirst(nullptr), mNext(nullptr), mContainer(nullptr), mFireReorder(true) { }
-  explicit EventTree(Accessible* aContainer) :
-    mFirst(nullptr), mNext(nullptr), mContainer(aContainer), mFireReorder(true) { }
+    mFirst(nullptr), mNext(nullptr), mContainer(nullptr), mFireReorder(false) { }
+  explicit EventTree(Accessible* aContainer, bool aFireReorder) :
+    mFirst(nullptr), mNext(nullptr), mContainer(aContainer),
+    mFireReorder(aFireReorder) { }
   ~EventTree() { Clear(); }
 
   void Shown(Accessible* aChild)
   {
     RefPtr<AccShowEvent> ev = new AccShowEvent(aChild);
     Mutated(ev);
   }
 
@@ -89,17 +90,17 @@ private:
   void Process();
 
   /**
    * Return an event subtree for the given accessible.
    */
   EventTree* FindOrInsert(Accessible* aContainer);
 
   void Mutated(AccMutationEvent* aEv);
-  void Clear() { mFirst = nullptr; mNext = nullptr; mContainer = nullptr; }
+  void Clear();
 
   nsAutoPtr<EventTree> mFirst;
   nsAutoPtr<EventTree> mNext;
 
   Accessible* mContainer;
   nsTArray<RefPtr<AccMutationEvent>> mDependentEvents;
   bool mFireReorder;
 
--- a/accessible/base/Filters.cpp
+++ b/accessible/base/Filters.cpp
@@ -44,15 +44,8 @@ filters::GetRow(Accessible* aAccessible)
   return eSkipSubtree;
 }
 
 uint32_t
 filters::GetCell(Accessible* aAccessible)
 {
   return aAccessible->IsTableCell() ? eMatch : eSkipSubtree;
 }
-
-uint32_t
-filters::GetEmbeddedObject(Accessible* aAccessible)
-{
-  return nsAccUtils::IsEmbeddedObject(aAccessible) ?
-    eMatch | eSkipSubtree : eSkipSubtree;
-}
--- a/accessible/base/Filters.h
+++ b/accessible/base/Filters.h
@@ -38,19 +38,13 @@ uint32_t GetSelectable(Accessible* aAcce
  * Matches row accessibles in subtree.
  */
 uint32_t GetRow(Accessible* aAccessible);
 
 /**
  * Matches cell accessibles in children.
  */
 uint32_t GetCell(Accessible* aAccessible);
-
-/**
- * Matches embedded objects in children.
- */
-uint32_t GetEmbeddedObject(Accessible* aAccessible);
-
 } // namespace filters
 } // namespace a11y
 } // namespace mozilla
 
 #endif
--- a/accessible/base/TextAttrs.cpp
+++ b/accessible/base/TextAttrs.cpp
@@ -44,30 +44,30 @@ TextAttrsMgr::GetAttributes(nsIPersisten
                   ((mOffsetAcc && mOffsetAccIdx != -1 &&
                     aStartOffset && aEndOffset) ||
                   (!mOffsetAcc && mOffsetAccIdx == -1 &&
                     !aStartOffset && !aEndOffset &&
                    mIncludeDefAttrs && aAttributes)),
                   "Wrong usage of TextAttrsMgr!");
 
   // Embedded objects are combined into own range with empty attributes set.
-  if (mOffsetAcc && nsAccUtils::IsEmbeddedObject(mOffsetAcc)) {
+  if (mOffsetAcc && !mOffsetAcc->IsText()) {
     for (int32_t childIdx = mOffsetAccIdx - 1; childIdx >= 0; childIdx--) {
       Accessible* currAcc = mHyperTextAcc->GetChildAt(childIdx);
-      if (!nsAccUtils::IsEmbeddedObject(currAcc))
+      if (currAcc->IsText())
         break;
 
       (*aStartOffset)--;
     }
 
     uint32_t childCount = mHyperTextAcc->ChildCount();
     for (uint32_t childIdx = mOffsetAccIdx + 1; childIdx < childCount;
          childIdx++) {
       Accessible* currAcc = mHyperTextAcc->GetChildAt(childIdx);
-      if (!nsAccUtils::IsEmbeddedObject(currAcc))
+      if (currAcc->IsText())
         break;
 
       (*aEndOffset)++;
     }
 
     return;
   }
 
@@ -157,17 +157,17 @@ TextAttrsMgr::GetRange(TextAttr* aAttrAr
                        uint32_t* aStartOffset, uint32_t* aEndOffset)
 {
   // Navigate backward from anchor accessible to find start offset.
   for (int32_t childIdx = mOffsetAccIdx - 1; childIdx >= 0; childIdx--) {
     Accessible* currAcc = mHyperTextAcc->GetChildAt(childIdx);
 
     // Stop on embedded accessible since embedded accessibles are combined into
     // own range.
-    if (nsAccUtils::IsEmbeddedObject(currAcc))
+    if (!currAcc->IsText())
       break;
 
     bool offsetFound = false;
     for (uint32_t attrIdx = 0; attrIdx < aAttrArrayLen; attrIdx++) {
       TextAttr* textAttr = aAttrArray[attrIdx];
       if (!textAttr->Equal(currAcc)) {
         offsetFound = true;
         break;
@@ -179,17 +179,17 @@ TextAttrsMgr::GetRange(TextAttr* aAttrAr
 
     *(aStartOffset) -= nsAccUtils::TextLength(currAcc);
   }
 
   // Navigate forward from anchor accessible to find end offset.
   uint32_t childLen = mHyperTextAcc->ChildCount();
   for (uint32_t childIdx = mOffsetAccIdx + 1; childIdx < childLen; childIdx++) {
     Accessible* currAcc = mHyperTextAcc->GetChildAt(childIdx);
-    if (nsAccUtils::IsEmbeddedObject(currAcc))
+    if (!currAcc->IsText())
       break;
 
     bool offsetFound = false;
     for (uint32_t attrIdx = 0; attrIdx < aAttrArrayLen; attrIdx++) {
       TextAttr* textAttr = aAttrArray[attrIdx];
 
       // Alter the end offset when text attribute changes its value and stop
       // the search.
@@ -823,17 +823,17 @@ TextAttrsMgr::TextPosTextAttr::
       break;
   }
 }
 
 TextAttrsMgr::TextPosValue
 TextAttrsMgr::TextPosTextAttr::
   GetTextPosValue(nsIFrame* aFrame) const
 {
-  const nsStyleCoord& styleCoord = aFrame->StyleTextReset()->mVerticalAlign;
+  const nsStyleCoord& styleCoord = aFrame->StyleDisplay()->mVerticalAlign;
   switch (styleCoord.GetUnit()) {
     case eStyleUnit_Enumerated:
       switch (styleCoord.GetIntValue()) {
         case NS_STYLE_VERTICAL_ALIGN_BASELINE:
           return eTextPosBaseline;
         case NS_STYLE_VERTICAL_ALIGN_SUB:
           return eTextPosSub;
         case NS_STYLE_VERTICAL_ALIGN_SUPER:
--- a/accessible/base/TextRange.cpp
+++ b/accessible/base/TextRange.cpp
@@ -61,18 +61,19 @@ TextRange::TextRange(HyperTextAccessible
 void
 TextRange::EmbeddedChildren(nsTArray<Accessible*>* aChildren) const
 {
   if (mStartContainer == mEndContainer) {
     int32_t startIdx = mStartContainer->GetChildIndexAtOffset(mStartOffset);
     int32_t endIdx = mStartContainer->GetChildIndexAtOffset(mEndOffset);
     for (int32_t idx = startIdx; idx <= endIdx; idx++) {
       Accessible* child = mStartContainer->GetChildAt(idx);
-      if (nsAccUtils::IsEmbeddedObject(child))
+      if (!child->IsText()) {
         aChildren->AppendElement(child);
+      }
     }
     return;
   }
 
   Accessible* p1 = mStartContainer->GetChildAtOffset(mStartOffset);
   Accessible* p2 = mEndContainer->GetChildAtOffset(mEndOffset);
 
   uint32_t pos1 = 0, pos2 = 0;
@@ -82,39 +83,42 @@ TextRange::EmbeddedChildren(nsTArray<Acc
 
   // Traverse the tree up to the container and collect embedded objects.
   for (uint32_t idx = 0; idx < pos1 - 1; idx++) {
     Accessible* parent = parents1[idx + 1];
     Accessible* child = parents1[idx];
     uint32_t childCount = parent->ChildCount();
     for (uint32_t childIdx = child->IndexInParent(); childIdx < childCount; childIdx++) {
       Accessible* next = parent->GetChildAt(childIdx);
-      if (nsAccUtils::IsEmbeddedObject(next))
+      if (!next->IsText()) {
         aChildren->AppendElement(next);
+      }
     }
   }
 
   // Traverse through direct children in the container.
   int32_t endIdx = parents2[pos2 - 1]->IndexInParent();
   int32_t childIdx = parents1[pos1 - 1]->IndexInParent() + 1;
   for (; childIdx < endIdx; childIdx++) {
     Accessible* next = container->GetChildAt(childIdx);
-    if (nsAccUtils::IsEmbeddedObject(next))
+    if (!next->IsText()) {
       aChildren->AppendElement(next);
+    }
   }
 
   // Traverse down from the container to end point.
   for (int32_t idx = pos2 - 2; idx > 0; idx--) {
     Accessible* parent = parents2[idx];
     Accessible* child = parents2[idx - 1];
     int32_t endIdx = child->IndexInParent();
     for (int32_t childIdx = 0; childIdx < endIdx; childIdx++) {
       Accessible* next = parent->GetChildAt(childIdx);
-      if (nsAccUtils::IsEmbeddedObject(next))
+      if (!next->IsText()) {
         aChildren->AppendElement(next);
+      }
     }
   }
 }
 
 void
 TextRange::Text(nsAString& aText) const
 {
   Accessible* current = mStartContainer->GetChildAtOffset(mStartOffset);
--- a/accessible/base/moz.build
+++ b/accessible/base/moz.build
@@ -21,24 +21,25 @@ EXPORTS.mozilla.a11y += [
 ]
 
 if CONFIG['MOZ_DEBUG']:
     EXPORTS.mozilla.a11y += [
         'Logging.h',
     ]
 
 UNIFIED_SOURCES += [
-    'AccCollector.cpp',
+    'AccessibleOrProxy.cpp',
     'AccEvent.cpp',
     'AccGroupInfo.cpp',
     'AccIterator.cpp',
     'ARIAMap.cpp',
     'ARIAStateMap.cpp',
     'Asserts.cpp',
     'DocManager.cpp',
+    'EmbeddedObjCollector.cpp',
     'EventQueue.cpp',
     'EventTree.cpp',
     'Filters.cpp',
     'FocusManager.cpp',
     'NotificationController.cpp',
     'nsAccessibilityService.cpp',
     'nsAccessiblePivot.cpp',
     'nsAccUtils.cpp',
--- a/accessible/base/nsAccUtils.cpp
+++ b/accessible/base/nsAccUtils.cpp
@@ -387,31 +387,32 @@ nsAccUtils::IsTextInterfaceSupportCorrec
   // early and fire mutation events before we need to
   if (aAccessible->IsDoc())
     return true;
 
   bool foundText = false;
   uint32_t childCount = aAccessible->ChildCount();
   for (uint32_t childIdx = 0; childIdx < childCount; childIdx++) {
     Accessible* child = aAccessible->GetChildAt(childIdx);
-    if (!IsEmbeddedObject(child)) {
+    if (child->IsText()) {
       foundText = true;
       break;
     }
   }
 
   return !foundText || aAccessible->IsHyperText();
 }
 #endif
 
 uint32_t
 nsAccUtils::TextLength(Accessible* aAccessible)
 {
-  if (IsEmbeddedObject(aAccessible))
+  if (!aAccessible->IsText()) {
     return 1;
+  }
 
   TextLeafAccessible* textLeaf = aAccessible->AsTextLeaf();
   if (textLeaf)
     return textLeaf->Text().Length();
 
   // For list bullets (or anything other accessible which would compute its own
   // text. They don't have their own frame.
   // XXX In the future, list bullets may have frame and anon content, so 
--- a/accessible/base/nsAccUtils.h
+++ b/accessible/base/nsAccUtils.h
@@ -199,27 +199,16 @@ public:
 #endif
 
   /**
    * Return text length of the given accessible, return 0 on failure.
    */
   static uint32_t TextLength(Accessible* aAccessible);
 
   /**
-   * Return true if the given accessible is embedded object.
-   */
-  static bool IsEmbeddedObject(Accessible* aAcc)
-  {
-    uint32_t role = aAcc->Role();
-    return role != roles::TEXT_LEAF &&
-           role != roles::WHITESPACE &&
-           role != roles::STATICTEXT;
-  }
-
-  /**
    * Transform nsIAccessibleStates constants to internal state constant.
    */
   static inline uint64_t To64State(uint32_t aState1, uint32_t aState2)
   {
     return static_cast<uint64_t>(aState1) +
         (static_cast<uint64_t>(aState2) << 31);
   }
 
--- a/accessible/base/nsAccessibilityService.cpp
+++ b/accessible/base/nsAccessibilityService.cpp
@@ -355,17 +355,17 @@ nsAccessibilityService::Observe(nsISuppo
 
   return NS_OK;
 }
 
 // nsIAccessibilityService
 void
 nsAccessibilityService::NotifyOfAnchorJumpTo(nsIContent* aTargetNode)
 {
-  nsIDocument* documentNode = aTargetNode->GetCurrentDoc();
+  nsIDocument* documentNode = aTargetNode->GetUncomposedDoc();
   if (documentNode) {
     DocAccessible* document = GetDocAccessible(documentNode);
     if (document)
       document->SetAnchorJump(aTargetNode);
   }
 }
 
 // nsIAccessibilityService
@@ -411,17 +411,17 @@ class PluginTimerCallBack final : public
 
 public:
   PluginTimerCallBack(nsIContent* aContent) : mContent(aContent) {}
 
   NS_DECL_ISUPPORTS
 
   NS_IMETHODIMP Notify(nsITimer* aTimer) final
   {
-    if (!mContent->IsInDoc())
+    if (!mContent->IsInUncomposedDoc())
       return NS_OK;
 
     nsIPresShell* ps = mContent->OwnerDoc()->GetShell();
     if (ps) {
       DocAccessible* doc = ps->GetDocAccessible();
       if (doc) {
         // Make sure that if we created an accessible for the plugin that wasn't
         // a plugin accessible we remove it before creating the right accessible.
@@ -1029,17 +1029,17 @@ nsAccessibilityService::CreateAccessible
   if (aNode->IsNodeOfType(nsINode::eDOCUMENT)) {
     // If it's document node then ask accessible document loader for
     // document accessible, otherwise return null.
     nsCOMPtr<nsIDocument> document(do_QueryInterface(aNode));
     return GetDocAccessible(document);
   }
 
   // We have a content node.
-  if (!aNode->GetCrossShadowCurrentDoc()) {
+  if (!aNode->GetComposedDoc()) {
     NS_WARNING("Creating accessible for node with no document");
     return nullptr;
   }
 
   if (aNode->OwnerDoc() != document->DocumentNode()) {
     NS_ERROR("Creating accessible for wrong document");
     return nullptr;
   }
--- a/accessible/base/nsAccessiblePivot.cpp
+++ b/accessible/base/nsAccessiblePivot.cpp
@@ -388,25 +388,25 @@ nsAccessiblePivot::MoveNextByText(TextBo
     tempStart = potentialStart > tempStart ? potentialStart : currentEnd;
 
     // The offset range we've obtained might have embedded characters in it,
     // limit the range to the start of the first occurrence of an embedded
     // character.
     Accessible* childAtOffset = nullptr;
     for (int32_t i = tempStart; i < tempEnd; i++) {
       childAtOffset = text->GetChildAtOffset(i);
-      if (childAtOffset && nsAccUtils::IsEmbeddedObject(childAtOffset)) {
+      if (childAtOffset && !childAtOffset->IsText()) {
         tempEnd = i;
         break;
       }
     }
     // If there's an embedded character at the very start of the range, we
     // instead want to traverse into it. So restart the movement with
     // the child as the starting point.
-    if (childAtOffset && nsAccUtils::IsEmbeddedObject(childAtOffset) &&
+    if (childAtOffset && !childAtOffset->IsText() &&
         tempStart == static_cast<int32_t>(childAtOffset->StartOffset())) {
       tempPosition = childAtOffset;
       tempStart = tempEnd = -1;
       continue;
     }
 
     *aResult = true;
 
@@ -519,25 +519,25 @@ nsAccessiblePivot::MovePreviousByText(Te
     tempEnd = potentialEnd < tempEnd ? potentialEnd : currentStart;
 
     // The offset range we've obtained might have embedded characters in it,
     // limit the range to the start of the last occurrence of an embedded
     // character.
     Accessible* childAtOffset = nullptr;
     for (int32_t i = tempEnd - 1; i >= tempStart; i--) {
       childAtOffset = text->GetChildAtOffset(i);
-      if (childAtOffset && nsAccUtils::IsEmbeddedObject(childAtOffset)) {
+      if (childAtOffset && !childAtOffset->IsText()) {
         tempStart = childAtOffset->EndOffset();
         break;
       }
     }
     // If there's an embedded character at the very end of the range, we
     // instead want to traverse into it. So restart the movement with
     // the child as the starting point.
-    if (childAtOffset && nsAccUtils::IsEmbeddedObject(childAtOffset) &&
+    if (childAtOffset && !childAtOffset->IsText() &&
         tempEnd == static_cast<int32_t>(childAtOffset->EndOffset())) {
       tempPosition = childAtOffset;
       tempStart = tempEnd = childAtOffset->AsHyperText()->CharacterCount();
       continue;
     }
 
     *aResult = true;
 
@@ -896,17 +896,17 @@ RuleCache::ApplyFilter(Accessible* aAcce
         *aResult |= nsIAccessibleTraversalRule::FILTER_IGNORE_SUBTREE;
         return NS_OK;
       }
     }
 
     if ((nsIAccessibleTraversalRule::PREFILTER_TRANSPARENT & mPreFilter) &&
         !(state & states::OPAQUE1)) {
       nsIFrame* frame = aAccessible->GetFrame();
-      if (frame->StyleDisplay()->mOpacity == 0.0f) {
+      if (frame->StyleEffects()->mOpacity == 0.0f) {
         *aResult |= nsIAccessibleTraversalRule::FILTER_IGNORE_SUBTREE;
         return NS_OK;
       }
     }
   }
 
   if (mAcceptRolesLength > 0) {
     uint32_t accessibleRole = aAccessible->Role();
--- a/accessible/base/nsCoreUtils.cpp
+++ b/accessible/base/nsCoreUtils.cpp
@@ -73,17 +73,17 @@ nsCoreUtils::DispatchClickEvent(nsITreeB
                                 const nsAString& aPseudoElt)
 {
   nsCOMPtr<nsIDOMElement> tcElm;
   aTreeBoxObj->GetTreeBody(getter_AddRefs(tcElm));
   if (!tcElm)
     return;
 
   nsCOMPtr<nsIContent> tcContent(do_QueryInterface(tcElm));
-  nsIDocument *document = tcContent->GetCurrentDoc();
+  nsIDocument *document = tcContent->GetUncomposedDoc();
   if (!document)
     return;
 
   nsCOMPtr<nsIPresShell> presShell = document->GetShell();
   if (!presShell)
     return;
 
   // Ensure row is visible.
--- a/accessible/generic/Accessible.cpp
+++ b/accessible/generic/Accessible.cpp
@@ -2,17 +2,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "Accessible-inl.h"
 
 #include "nsIXBLAccessible.h"
 
-#include "AccCollector.h"
+#include "EmbeddedObjCollector.h"
 #include "AccGroupInfo.h"
 #include "AccIterator.h"
 #include "nsAccUtils.h"
 #include "nsAccessibilityService.h"
 #include "ApplicationAccessible.h"
 #include "NotificationController.h"
 #include "nsEventShell.h"
 #include "nsTextEquivUtils.h"
@@ -89,18 +89,17 @@
 
 using namespace mozilla;
 using namespace mozilla::a11y;
 
 
 ////////////////////////////////////////////////////////////////////////////////
 // Accessible: nsISupports and cycle collection
 
-NS_IMPL_CYCLE_COLLECTION(Accessible,
-                         mContent, mParent, mChildren)
+NS_IMPL_CYCLE_COLLECTION(Accessible, mContent)
 
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Accessible)
   if (aIID.Equals(NS_GET_IID(Accessible)))
     foundInterface = this;
   else
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, Accessible)
 NS_INTERFACE_MAP_END
 
@@ -273,17 +272,17 @@ Accessible::AccessKey() const
     return KeyBinding(key, KeyBinding::kAlt);
   case nsIDOMKeyEvent::DOM_VK_META:
     return KeyBinding(key, KeyBinding::kMeta);
   default:
     return KeyBinding();
   }
 
   // Determine the access modifier used in this context.
-  nsIDocument* document = mContent->GetCurrentDoc();
+  nsIDocument* document = mContent->GetUncomposedDoc();
   if (!document)
     return KeyBinding();
 
   nsCOMPtr<nsIDocShellTreeItem> treeItem(document->GetDocShell());
   if (!treeItem)
     return KeyBinding();
 
   nsresult rv = NS_ERROR_FAILURE;
@@ -1200,18 +1199,17 @@ Accessible::State()
     state |= states::EXPANDABLE;
 
   // For some reasons DOM node may have not a frame. We tract such accessibles
   // as invisible.
   nsIFrame *frame = GetFrame();
   if (!frame)
     return state;
 
-  const nsStyleDisplay* display = frame->StyleDisplay();
-  if (display && display->mOpacity == 1.0f &&
+  if (frame->StyleEffects()->mOpacity == 1.0f &&
       !(state & states::INVISIBLE)) {
     state |= states::OPAQUE1;
   }
 
   return state;
 }
 
 void
@@ -1966,17 +1964,17 @@ void
 Accessible::BindToParent(Accessible* aParent, uint32_t aIndexInParent)
 {
   MOZ_ASSERT(aParent, "This method isn't used to set null parent");
   MOZ_ASSERT(!mParent, "The child was expected to be moved");
 
 #ifdef A11Y_LOG
   if (mParent) {
     logging::TreeInfo("BindToParent: stealing accessible", 0,
-                      "old parent", mParent.get(),
+                      "old parent", mParent,
                       "new parent", aParent,
                       "child", this, nullptr);
   }
 #endif
 
   mParent = aParent;
   mIndexInParent = aIndexInParent;
 
@@ -2071,17 +2069,17 @@ Accessible::InsertChildAt(uint32_t aInde
 
   } else {
     if (!mChildren.InsertElementAt(aIndex, aChild))
       return false;
 
     MOZ_ASSERT(mStateFlags & eKidsMutating, "Illicit children change");
   }
 
-  if (!nsAccUtils::IsEmbeddedObject(aChild)) {
+  if (aChild->IsText()) {
     mStateFlags |= eHasTextKids;
   }
 
   aChild->BindToParent(this, aIndex);
   return true;
 }
 
 bool
@@ -2230,17 +2228,17 @@ Accessible::GetIndexOfEmbeddedChild(Acce
 ////////////////////////////////////////////////////////////////////////////////
 // HyperLinkAccessible methods
 
 bool
 Accessible::IsLink()
 {
   // Every embedded accessible within hypertext accessible implements
   // hyperlink interface.
-  return mParent && mParent->IsHyperText() && nsAccUtils::IsEmbeddedObject(this);
+  return mParent && mParent->IsHyperText() && !IsText();
 }
 
 uint32_t
 Accessible::StartOffset()
 {
   NS_PRECONDITION(IsLink(), "StartOffset is called not on hyper link!");
 
   HyperTextAccessible* hyperText = mParent ? mParent->AsHyperText() : nullptr;
--- a/accessible/generic/Accessible.h
+++ b/accessible/generic/Accessible.h
@@ -636,16 +636,18 @@ public:
   virtual TableCellAccessible* AsTableCell() { return nullptr; }
   const TableCellAccessible* AsTableCell() const
     { return const_cast<Accessible*>(this)->AsTableCell(); }
 
   bool IsTableRow() const { return HasGenericType(eTableRow); }
 
   bool IsTextField() const { return mType == eHTMLTextFieldType; }
 
+  bool IsText() const { return mGenericTypes & eText; }
+
   bool IsTextLeaf() const { return mType == eTextLeafType; }
   TextLeafAccessible* AsTextLeaf();
 
   bool IsXULLabel() const { return mType == eXULLabelType; }
   XULLabelAccessible* AsXULLabel();
 
   bool IsXULListItem() const { return mType == eXULListItemType; }
 
@@ -1087,24 +1089,24 @@ protected:
    * Return group info.
    */
   AccGroupInfo* GetGroupInfo();
 
   // Data Members
   nsCOMPtr<nsIContent> mContent;
   DocAccessible* mDoc;
 
-  RefPtr<Accessible> mParent;
-  nsTArray<RefPtr<Accessible> > mChildren;
+  Accessible* mParent;
+  nsTArray<Accessible*> mChildren;
   int32_t mIndexInParent;
 
   static const uint8_t kStateFlagsBits = 13;
   static const uint8_t kContextFlagsBits = 3;
   static const uint8_t kTypeBits = 6;
-  static const uint8_t kGenericTypesBits = 15;
+  static const uint8_t kGenericTypesBits = 16;
 
   /**
    * Keep in sync with StateFlags, ContextFlags, and AccTypes.
    */
   uint32_t mStateFlags : kStateFlagsBits;
   uint32_t mContextFlags : kContextFlagsBits;
   uint32_t mType : kTypeBits;
   uint32_t mGenericTypes : kGenericTypesBits;
--- a/accessible/generic/DocAccessible.cpp
+++ b/accessible/generic/DocAccessible.cpp
@@ -118,17 +118,17 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
 
     for (int32_t jdx = providers->Length() - 1; jdx >= 0; jdx--) {
       NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(
         cb, "content of dependent ids hash entry of document accessible");
 
       AttrRelProvider* provider = (*providers)[jdx];
       cb.NoteXPCOMChild(provider->mContent);
 
-      NS_ASSERTION(provider->mContent->IsInDoc(),
+      NS_ASSERTION(provider->mContent->IsInUncomposedDoc(),
                    "Referred content is not in document!");
     }
   }
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mAccessibleCache)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mAnchorJumpElm)
   for (auto it = tmp->mARIAOwnsHash.ConstIter(); !it.Done(); it.Next()) {
     nsTArray<RefPtr<Accessible> >* ar = it.UserData();
     for (uint32_t i = 0; i < ar->Length(); i++) {
@@ -1192,17 +1192,17 @@ DocAccessible::GetAccessibleByUniqueIDIn
   }
 
   return nullptr;
 }
 
 Accessible*
 DocAccessible::GetAccessibleOrContainer(nsINode* aNode) const
 {
-  if (!aNode || !aNode->GetCrossShadowCurrentDoc())
+  if (!aNode || !aNode->GetComposedDoc())
     return nullptr;
 
   nsINode* currNode = aNode;
   Accessible* accessible = nullptr;
   while (!(accessible = GetAccessible(currNode))) {
     nsINode* parent = nullptr;
 
     // If this is a content node, try to get a flattened parent content node.
--- a/accessible/generic/OuterDocAccessible.cpp
+++ b/accessible/generic/OuterDocAccessible.cpp
@@ -27,17 +27,17 @@ using namespace mozilla::a11y;
 OuterDocAccessible::
   OuterDocAccessible(nsIContent* aContent, DocAccessible* aDoc) :
   AccessibleWrap(aContent, aDoc)
 {
   mType = eOuterDocType;
 
   // Request document accessible for the content document to make sure it's
   // created. It will appended to outerdoc accessible children asynchronously.
-  nsIDocument* outerDoc = mContent->GetCurrentDoc();
+  nsIDocument* outerDoc = mContent->GetUncomposedDoc();
   if (outerDoc) {
     nsIDocument* innerDoc = outerDoc->GetSubDocumentFor(mContent);
     if (innerDoc)
       GetAccService()->GetDocAccessible(innerDoc);
   }
 }
 
 OuterDocAccessible::~OuterDocAccessible()
--- a/accessible/generic/TextLeafAccessible.cpp
+++ b/accessible/generic/TextLeafAccessible.cpp
@@ -15,16 +15,17 @@ using namespace mozilla::a11y;
 // TextLeafAccessible
 ////////////////////////////////////////////////////////////////////////////////
 
 TextLeafAccessible::
   TextLeafAccessible(nsIContent* aContent, DocAccessible* aDoc) :
   LinkableAccessible(aContent, aDoc)
 {
   mType = eTextLeafType;
+  mGenericTypes |= eText;
   mStateFlags |= eNoKidsFromDOM;
 }
 
 TextLeafAccessible::~TextLeafAccessible()
 {
 }
 
 role
--- a/accessible/html/HTMLElementAccessibles.h
+++ b/accessible/html/HTMLElementAccessibles.h
@@ -31,16 +31,17 @@ public:
  */
 class HTMLBRAccessible : public LeafAccessible
 {
 public:
   HTMLBRAccessible(nsIContent* aContent, DocAccessible* aDoc) :
     LeafAccessible(aContent, aDoc)
   {
     mType = eHTMLBRType;
+    mGenericTypes |= eText;
   }
 
   // Accessible
   virtual a11y::role NativeRole() override;
   virtual uint64_t NativeState() override;
 
 protected:
   // Accessible
--- a/accessible/html/HTMLListAccessible.cpp
+++ b/accessible/html/HTMLListAccessible.cpp
@@ -120,16 +120,17 @@ HTMLLIAccessible::UpdateBullet(bool aHas
 
 ////////////////////////////////////////////////////////////////////////////////
 // HTMLListBulletAccessible
 ////////////////////////////////////////////////////////////////////////////////
 HTMLListBulletAccessible::
   HTMLListBulletAccessible(nsIContent* aContent, DocAccessible* aDoc) :
   LeafAccessible(aContent, aDoc)
 {
+  mGenericTypes |= eText;
   mStateFlags |= eSharedNode;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // HTMLListBulletAccessible: Accessible
 
 nsIFrame*
 HTMLListBulletAccessible::GetFrame() const
--- a/accessible/html/HTMLSelectAccessible.h
+++ b/accessible/html/HTMLSelectAccessible.h
@@ -94,17 +94,17 @@ private:
   Accessible* GetSelect() const
   {
     Accessible* parent = mParent;
     if (parent && parent->IsHTMLOptGroup())
       parent = parent->Parent();
 
     if (parent && parent->IsListControl()) {
       Accessible* combobox = parent->Parent();
-      return combobox && combobox->IsCombobox() ? combobox : mParent.get();
+      return combobox && combobox->IsCombobox() ? combobox : mParent;
     }
 
     return nullptr;
   }
 
   /**
    * Return a combobox accessible the option belongs to if any.
    */
--- a/accessible/tests/mochitest/events/test_coalescence.html
+++ b/accessible/tests/mochitest/events/test_coalescence.html
@@ -9,16 +9,18 @@
   <script type="application/javascript"
           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
   <script type="application/javascript"
           src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
 
   <script type="application/javascript"
           src="../common.js"></script>
   <script type="application/javascript"
+          src="../states.js"></script>
+  <script type="application/javascript"
           src="../events.js"></script>
 
   <script type="application/javascript">
 
     ////////////////////////////////////////////////////////////////////////////
     // Invoker base classes
 
     const kRemoveElm = 1;
@@ -344,21 +346,129 @@
         this.parent.hidden = true;
       }
 
       this.getID = function removeGrandChildrenNHideParent_getID() {
         return "remove grand children of different parents and then hide their grand parent";
       }
     }
 
+    /**
+     * Remove a child, and then its parent.
+     */
+    function test3()
+    {
+      this.o = getAccessible("t3_o");
+      this.ofc = getAccessible("t3_o").firstChild;
+
+      this.eventSeq = [
+        new invokerChecker(EVENT_HIDE, this.o),
+        new invokerChecker(EVENT_REORDER, "t3_lb"),
+        new unexpectedInvokerChecker(EVENT_HIDE, this.ofc),
+        new unexpectedInvokerChecker(EVENT_REORDER, this.o)
+      ];
+
+      this.invoke = function test3_invoke()
+      {
+        getNode("t3_o").textContent = "";
+        getNode("t3_lb").removeChild(getNode("t3_o"));
+      }
+
+      this.finalCheck = function test3_finalCheck()
+      {
+        testIsDefunct(this.o);
+        testIsDefunct(this.ofc);
+      }
+
+      this.getID = function test3_getID() {
+        return "remove a child, and then its parent";
+      }
+    }
+
+    /**
+     * Remove children, and then a parent of 2nd child.
+     */
+    function test4()
+    {
+      this.o1 = getAccessible("t4_o1");
+      this.o1fc = this.o1.firstChild;
+      this.o2 = getAccessible("t4_o2");
+      this.o2fc = this.o2.firstChild;
+
+      this.eventSeq = [
+        new invokerChecker(EVENT_HIDE, this.o1fc),
+        new invokerChecker(EVENT_HIDE, this.o2),
+        new invokerChecker(EVENT_REORDER, "t4_lb"),
+        new unexpectedInvokerChecker(EVENT_HIDE, this.o2fc),
+        new unexpectedInvokerChecker(EVENT_REORDER, this.o1),
+        new unexpectedInvokerChecker(EVENT_REORDER, this.o2)
+      ];
+
+      this.invoke = function test4_invoke()
+      {
+        getNode("t4_o1").textContent = "";
+        getNode("t4_o2").textContent = "";
+        getNode("t4_lb").removeChild(getNode("t4_o2"));
+      }
+
+      this.finalCheck = function test4_finalCheck()
+      {
+        testIsDefunct(this.o1fc);
+        testIsDefunct(this.o2);
+        testIsDefunct(this.o2fc);
+      }
+
+      this.getID = function test4_getID() {
+        return "remove children, and then a parent of 2nd child";
+      }
+    }
+
+    /**
+     * Remove a child, remove a parent sibling, remove the parent
+     */
+    function test5()
+    {
+      this.o = getAccessible("t5_o");
+      this.ofc = this.o.firstChild;
+      this.b = getAccessible("t5_b");
+      this.lb = getAccessible("t5_lb");
+
+      this.eventSeq = [
+        new invokerChecker(EVENT_HIDE, this.o),
+        new invokerChecker(EVENT_HIDE, this.b),
+        new invokerChecker(EVENT_REORDER, "t5"),
+        new unexpectedInvokerChecker(EVENT_HIDE, this.ofc),
+        new unexpectedInvokerChecker(EVENT_REORDER, this.o),
+        new unexpectedInvokerChecker(EVENT_REORDER, this.lb)
+      ];
+
+      this.invoke = function test5_invoke()
+      {
+        getNode("t5_o").textContent = "";
+        getNode("t5").removeChild(getNode("t5_b"));
+        getNode("t5_lb").removeChild(getNode("t5_o"));
+      }
+
+      this.finalCheck = function test5_finalCheck()
+      {
+        testIsDefunct(this.ofc);
+        testIsDefunct(this.o);
+        testIsDefunct(this.b);
+      }
+
+      this.getID = function test5_getID() {
+        return "remove a child, remove a parent sibling, remove the parent";
+      }
+    }
+
     ////////////////////////////////////////////////////////////////////////////
     // Do tests.
 
     //gA11yEventDumpToConsole = true; // debug stuff
-    //enableLogging("events,tree,eventTree,verbose");
+    //enableLogging("tree,eventTree,verbose");
 
     var gQueue = null;
     function doTests()
     {
       gQueue = new eventQueue();
 
       gQueue.push(new removeChildNParent("option1", "select1"));
       gQueue.push(new removeParentNChild("option2", "select2"));
@@ -372,16 +482,19 @@
       gQueue.push(new addParentNChild("testContainer", false));
       gQueue.push(new addParentNChild("testContainer", true));
       gQueue.push(new showParentNChild("select9", "option9", false));
       gQueue.push(new showParentNChild("select10", "option10", true));
       gQueue.push(new showParentNAddChild("select11", false));
       gQueue.push(new showParentNAddChild("select12", true));
 
       gQueue.push(new removeGrandChildrenNHideParent("t1_child1", "t1_child2", "t1_parent"));
+      gQueue.push(new test3());
+      gQueue.push(new test4());
+      gQueue.push(new test5());
 
       gQueue.invoke(); // Will call SimpleTest.finish();
     }
 
     SimpleTest.waitForExplicitFinish();
     addA11yLoadEvent(doTests);
   </script>
 </head>
@@ -442,10 +555,30 @@
   </div>
 
   <div id="testContainer2">
     <div id="t1_parent">
       <div id="t1_mid1"><div id="t1_child1"></div></div>
       <div id="t1_mid2"><div id="t1_child2"></div></div>
     </div>
   </div>
+
+  <div id="t3">
+    <div role="listbox" id="t3_lb">
+      <div role="option" id="t3_o">opt</div>
+    </div>
+  </div>
+
+  <div id="t4">
+    <div role="listbox" id="t4_lb">
+      <div role="option" id="t4_o1">opt1</div>
+      <div role="option" id="t4_o2">opt2</div>
+    </div>
+  </div>
+
+  <div id="t5">
+    <div role="button" id="t5_b">btn</div>
+    <div role="listbox" id="t5_lb">
+      <div role="option" id="t5_o">opt</div>
+    </div>
+  </div>
 </body>
 </html>
--- a/accessible/tests/mochitest/events/test_focus_autocomplete.xul
+++ b/accessible/tests/mochitest/events/test_focus_autocomplete.xul
@@ -30,24 +30,28 @@
   <script type="application/javascript"
           src="../autocomplete.js" />
 
   <script type="application/javascript">
   <![CDATA[
     ////////////////////////////////////////////////////////////////////////////
     // Hacky stuffs
 
-    // This is the hack needed for searchbar work outside of browser.
+    // This is the hacks needed to use a searchbar without browser.js.
     function getBrowser()
     {
       return {
         mCurrentBrowser: { engines: new Array() }
       };
     }
 
+    var BrowserSearch = {
+      updateOpenSearchBadge: function() {}
+    };
+
     ////////////////////////////////////////////////////////////////////////////
     // Invokers
 
     function loadFormAutoComplete(aIFrameID)
     {
       this.iframeNode = getNode(aIFrameID);
       this.iframe = getAccessible(aIFrameID);
 
--- a/accessible/tests/mochitest/states/test_expandable.xul
+++ b/accessible/tests/mochitest/states/test_expandable.xul
@@ -57,23 +57,26 @@
       {
         // unregister 'test-a11y-search' autocomplete search
         shutdownAutoComplete();
       }
 
       gQueue.invoke(); // Will call SimpleTest.finish();
     }
 
-    // This is the hack needed for searchbar work outside of browser.
+    // This is the hacks needed to use a searchbar without browser.js.
     function getBrowser()
     {
       return {
         mCurrentBrowser: { engines: new Array() }
       };
     }
+    var BrowserSearch = {
+      updateOpenSearchBadge: function() {}
+    };
 
     SimpleTest.waitForExplicitFinish();
 
     // Register 'test-a11y-search' autocomplete search.
     // XPFE AutoComplete needs to register early.
     initAutoComplete([ "hello", "hi" ],
                      [ "Beep beep'm beep beep yeah", "Baby you can drive my car" ]);
 
--- a/accessible/windows/msaa/AccessibleWrap.cpp
+++ b/accessible/windows/msaa/AccessibleWrap.cpp
@@ -488,17 +488,17 @@ AccessibleWrap::get_accRole(
   nsIContent *content = xpAccessible->GetContent();
   if (!content)
     return E_FAIL;
 
   if (content->IsElement()) {
     nsAutoString roleString;
     if (msaaRole != ROLE_SYSTEM_CLIENT &&
         !content->GetAttr(kNameSpaceID_None, nsGkAtoms::role, roleString)) {
-      nsIDocument * document = content->GetCurrentDoc();
+      nsIDocument * document = content->GetUncomposedDoc();
       if (!document)
         return E_FAIL;
 
       dom::NodeInfo *nodeInfo = content->NodeInfo();
       nodeInfo->GetName(roleString);
 
       // Only append name space if different from that of current document.
       if (!nodeInfo->NamespaceEquals(document->GetDefaultNamespaceID())) {
--- a/accessible/xpcom/xpcAccessible.cpp
+++ b/accessible/xpcom/xpcAccessible.cpp
@@ -20,53 +20,64 @@
 
 using namespace mozilla::a11y;
 
 NS_IMETHODIMP
 xpcAccessible::GetParent(nsIAccessible** aParent)
 {
   NS_ENSURE_ARG_POINTER(aParent);
   *aParent = nullptr;
-  if (!Intl())
+  if (IntlGeneric().IsNull())
     return NS_ERROR_FAILURE;
 
-  NS_IF_ADDREF(*aParent = ToXPC(Intl()->Parent()));
+  AccessibleOrProxy parent = IntlGeneric().Parent();
+  NS_IF_ADDREF(*aParent = ToXPC(parent));
   return NS_OK;
 }
 
 NS_IMETHODIMP
 xpcAccessible::GetNextSibling(nsIAccessible** aNextSibling)
 {
   NS_ENSURE_ARG_POINTER(aNextSibling);
   *aNextSibling = nullptr;
   if (IntlGeneric().IsNull())
     return NS_ERROR_FAILURE;
 
-  if (!Intl())
-    return NS_ERROR_FAILURE;
+  if (IntlGeneric().IsAccessible()) {
+    nsresult rv = NS_OK;
+    NS_IF_ADDREF(*aNextSibling = ToXPC(Intl()->GetSiblingAtOffset(1, &rv)));
+    return rv;
+  }
 
-  nsresult rv = NS_OK;
-  NS_IF_ADDREF(*aNextSibling = ToXPC(Intl()->GetSiblingAtOffset(1, &rv)));
-  return rv;
+  ProxyAccessible* proxy = IntlGeneric().AsProxy();
+  NS_ENSURE_STATE(proxy);
+
+  NS_IF_ADDREF(*aNextSibling = ToXPC(proxy->NextSibling()));
+  return *aNextSibling ? NS_OK : NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP
 xpcAccessible::GetPreviousSibling(nsIAccessible** aPreviousSibling)
 {
   NS_ENSURE_ARG_POINTER(aPreviousSibling);
   *aPreviousSibling = nullptr;
   if (IntlGeneric().IsNull())
     return NS_ERROR_FAILURE;
 
-  if (!Intl())
-    return NS_ERROR_FAILURE;
+  if (IntlGeneric().IsAccessible()) {
+    nsresult rv = NS_OK;
+    NS_IF_ADDREF(*aPreviousSibling = ToXPC(Intl()->GetSiblingAtOffset(-1, &rv)));
+    return rv;
+  }
 
-  nsresult rv = NS_OK;
-  NS_IF_ADDREF(*aPreviousSibling = ToXPC(Intl()->GetSiblingAtOffset(-1, &rv)));
-  return rv;
+  ProxyAccessible* proxy = IntlGeneric().AsProxy();
+  NS_ENSURE_STATE(proxy);
+
+  NS_IF_ADDREF(*aPreviousSibling = ToXPC(proxy->PrevSibling()));
+  return *aPreviousSibling ? NS_OK : NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP
 xpcAccessible::GetFirstChild(nsIAccessible** aFirstChild)
 {
   NS_ENSURE_ARG_POINTER(aFirstChild);
   *aFirstChild = nullptr;
 
@@ -151,20 +162,22 @@ xpcAccessible::GetChildren(nsIArray** aC
 NS_IMETHODIMP
 xpcAccessible::GetIndexInParent(int32_t* aIndexInParent)
 {
   NS_ENSURE_ARG_POINTER(aIndexInParent);
   *aIndexInParent = -1;
   if (IntlGeneric().IsNull())
     return NS_ERROR_FAILURE;
 
-  if (!Intl())
-    return NS_ERROR_FAILURE;
+  if (IntlGeneric().IsAccessible()) {
+    *aIndexInParent = Intl()->IndexInParent();
+  } else if (IntlGeneric().IsProxy()) {
+    *aIndexInParent = IntlGeneric().AsProxy()->IndexInParent();
+  }
 
-  *aIndexInParent = Intl()->IndexInParent();
   return *aIndexInParent != -1 ? NS_OK : NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP
 xpcAccessible::GetDOMNode(nsIDOMNode** aDOMNode)
 {
   NS_ENSURE_ARG_POINTER(aDOMNode);
   *aDOMNode = nullptr;
--- a/addon-sdk/source/lib/sdk/io/file.js
+++ b/addon-sdk/source/lib/sdk/io/file.js
@@ -137,17 +137,17 @@ exports.open = function open(filename, m
   if (/w/.test(mode)) {
     if (file.exists())
       ensureFile(file);
     var stream = Cc['@mozilla.org/network/file-output-stream;1'].
                  createInstance(Ci.nsIFileOutputStream);
     var openFlags = OPEN_FLAGS.WRONLY |
                     OPEN_FLAGS.CREATE_FILE |
                     OPEN_FLAGS.TRUNCATE;
-    var permFlags = parseInt("0644", 8); // u+rw go+r
+    var permFlags = 0o644; // u+rw go+r
     try {
       stream.init(file, openFlags, permFlags, 0);
     }
     catch (err) {
       throw friendlyError(err, filename);
     }
     return /b/.test(mode) ?
            new byteStreams.ByteWriter(stream) :
@@ -173,17 +173,17 @@ exports.remove = function remove(path) {
   var file = MozFile(path);
   ensureFile(file);
   file.remove(false);
 };
 
 exports.mkpath = function mkpath(path) {
   var file = MozFile(path);
   if (!file.exists())
-    file.create(Ci.nsIFile.DIRECTORY_TYPE, parseInt("0755", 8)); // u+rwx go+rx
+    file.create(Ci.nsIFile.DIRECTORY_TYPE, 0o755); // u+rwx go+rx
   else if (!file.isDirectory())
     throw new Error("The path already exists and is not a directory: " + path);
 };
 
 exports.rmdir = function rmdir(path) {
   var file = MozFile(path);
   ensureDir(file);
   try {
--- a/addon-sdk/source/lib/sdk/io/fs.js
+++ b/addon-sdk/source/lib/sdk/io/fs.js
@@ -36,17 +36,17 @@ const { createOutputTransport, createInp
 
 const { OPEN_UNBUFFERED } = Ci.nsITransport;
 
 
 const { REOPEN_ON_REWIND, DEFER_OPEN } = Ci.nsIFileInputStream;
 const { DIRECTORY_TYPE, NORMAL_FILE_TYPE } = Ci.nsIFile;
 const { NS_SEEK_SET, NS_SEEK_CUR, NS_SEEK_END } = Ci.nsISeekableStream;
 
-const FILE_PERMISSION = parseInt("0666", 8);
+const FILE_PERMISSION = 0o666;
 const PR_UINT32_MAX = 0xfffffff;
 // Values taken from:
 // http://mxr.mozilla.org/mozilla-central/source/nsprpub/pr/include/prio.h#615
 const PR_RDONLY =       0x01;
 const PR_WRONLY =       0x02;
 const PR_RDWR =         0x04;
 const PR_CREATE_FILE =  0x08;
 const PR_APPEND =       0x10;
--- a/addon-sdk/source/lib/sdk/preferences/native-options.js
+++ b/addon-sdk/source/lib/sdk/preferences/native-options.js
@@ -128,19 +128,19 @@ function setDefaults(preferences, prefer
 }
 exports.setDefaults = setDefaults;
 
 // dynamically injects inline options into about:addons page at runtime
 // NOTE: on Firefox Desktop the about:addons page is a xul page document,
 // on Firefox for Android the about:addons page is an xhtml page, to support both
 // the XUL xml namespace have to be enforced.
 function injectOptions({ preferences, preferencesBranch, document, parent, id }) {
-  for (let { name, type, hidden, title, description, label, options, on, off } of preferences) {
+  preferences.forEach(({name, type, hidden, title, description, label, options, on, off}) => {
     if (hidden) {
-      continue;
+      return;
     }
 
     let setting = document.createElementNS(XUL_NS, 'setting');
     setting.setAttribute('pref-name', name);
     setting.setAttribute('data-jetpack-id', id);
     setting.setAttribute('pref', 'extensions.' + preferencesBranch + '.' + name);
     setting.setAttribute('type', type);
     setting.setAttribute('title', title);
@@ -183,11 +183,11 @@ function injectOptions({ preferences, pr
         radio.setAttribute('value', value);
         radio.setAttribute('label', label);
         radiogroup.appendChild(radio);
       }
       setting.appendChild(radiogroup);
     }
 
     parent.appendChild(setting);
-  }
+  });
 }
 exports.injectOptions = injectOptions;
--- a/addon-sdk/source/test/addons/content-permissions/httpd.js
+++ b/addon-sdk/source/test/addons/content-permissions/httpd.js
@@ -2041,17 +2041,17 @@ function maybeAddHeaders(file, metadata,
 
   var headerFile = file.parent;
   headerFile.append(name + HEADERS_SUFFIX);
 
   if (!headerFile.exists())
     return;
 
   const PR_RDONLY = 0x01;
-  var fis = new FileInputStream(headerFile, PR_RDONLY, parseInt("444", 8),
+  var fis = new FileInputStream(headerFile, PR_RDONLY, 0o444,
                                 Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
   try
   {
     var lis = new ConverterInputStream(fis, "UTF-8", 1024, 0x0);
     lis.QueryInterface(Ci.nsIUnicharLineInputStream);
 
     var line = {value: ""};
@@ -2567,17 +2567,17 @@ ServerHandler.prototype =
 */
   _writeFileResponse: function(metadata, file, response, offset, count)
   {
     const PR_RDONLY = 0x01;
 
     var type = this._getTypeFromFile(file);
     if (type === SJS_TYPE)
     {
-      var fis = new FileInputStream(file, PR_RDONLY, parseInt("444", 8),
+      var fis = new FileInputStream(file, PR_RDONLY, 0o444,
                                     Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
       try
       {
         var sis = new ScriptableInputStream(fis);
         var s = Cu.Sandbox(gGlobalObject);
         s.importFunction(dump, "dump");
 
@@ -2661,17 +2661,17 @@ ServerHandler.prototype =
                            false);
       }
       catch (e) { /* lastModifiedTime threw, ignore */ }
 
       response.setHeader("Content-Type", type, false);
       maybeAddHeaders(file, metadata, response);
       response.setHeader("Content-Length", "" + count, false);
 
-      var fis = new FileInputStream(file, PR_RDONLY, parseInt("444", 8),
+      var fis = new FileInputStream(file, PR_RDONLY, 0o444,
                                     Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
       offset = offset || 0;
       count = count || file.fileSize;
       NS_ASSERT(offset === 0 || offset < file.fileSize, "bad offset");
       NS_ASSERT(count >= 0, "bad count");
       NS_ASSERT(offset + count <= file.fileSize, "bad total data size");
 
--- a/addon-sdk/source/test/addons/e10s-content/lib/httpd.js
+++ b/addon-sdk/source/test/addons/e10s-content/lib/httpd.js
@@ -2042,17 +2042,17 @@ function maybeAddHeaders(file, metadata,
 
   var headerFile = file.parent;
   headerFile.append(name + HEADERS_SUFFIX);
 
   if (!headerFile.exists())
     return;
 
   const PR_RDONLY = 0x01;
-  var fis = new FileInputStream(headerFile, PR_RDONLY, parseInt("444", 8),
+  var fis = new FileInputStream(headerFile, PR_RDONLY, 0o444,
                                 Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
   try
   {
     var lis = new ConverterInputStream(fis, "UTF-8", 1024, 0x0);
     lis.QueryInterface(Ci.nsIUnicharLineInputStream);
 
     var line = {value: ""};
@@ -2568,17 +2568,17 @@ ServerHandler.prototype =
 */
   _writeFileResponse: function(metadata, file, response, offset, count)
   {
     const PR_RDONLY = 0x01;
 
     var type = this._getTypeFromFile(file);
     if (type === SJS_TYPE)
     {
-      var fis = new FileInputStream(file, PR_RDONLY, parseInt("444", 8),
+      var fis = new FileInputStream(file, PR_RDONLY, 0o444,
                                     Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
       try
       {
         var sis = new ScriptableInputStream(fis);
         var s = Cu.Sandbox(gGlobalObject);
         s.importFunction(dump, "dump");
 
@@ -2662,17 +2662,17 @@ ServerHandler.prototype =
                            false);
       }
       catch (e) { /* lastModifiedTime threw, ignore */ }
 
       response.setHeader("Content-Type", type, false);
       maybeAddHeaders(file, metadata, response);
       response.setHeader("Content-Length", "" + count, false);
 
-      var fis = new FileInputStream(file, PR_RDONLY, parseInt("444", 8),
+      var fis = new FileInputStream(file, PR_RDONLY, 0o444,
                                     Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
       offset = offset || 0;
       count = count || file.fileSize;
       NS_ASSERT(offset === 0 || offset < file.fileSize, "bad offset");
       NS_ASSERT(count >= 0, "bad count");
       NS_ASSERT(offset + count <= file.fileSize, "bad total data size");
 
--- a/addon-sdk/source/test/addons/places/lib/httpd.js
+++ b/addon-sdk/source/test/addons/places/lib/httpd.js
@@ -2041,17 +2041,17 @@ function maybeAddHeaders(file, metadata,
 
   var headerFile = file.parent;
   headerFile.append(name + HEADERS_SUFFIX);
 
   if (!headerFile.exists())
     return;
 
   const PR_RDONLY = 0x01;
-  var fis = new FileInputStream(headerFile, PR_RDONLY, parseInt("444", 8),
+  var fis = new FileInputStream(headerFile, PR_RDONLY, 0o444,
                                 Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
   try
   {
     var lis = new ConverterInputStream(fis, "UTF-8", 1024, 0x0);
     lis.QueryInterface(Ci.nsIUnicharLineInputStream);
 
     var line = {value: ""};
@@ -2567,17 +2567,17 @@ ServerHandler.prototype =
 */
   _writeFileResponse: function(metadata, file, response, offset, count)
   {
     const PR_RDONLY = 0x01;
 
     var type = this._getTypeFromFile(file);
     if (type === SJS_TYPE)
     {
-      var fis = new FileInputStream(file, PR_RDONLY, parseInt("444", 8),
+      var fis = new FileInputStream(file, PR_RDONLY, 0o444,
                                     Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
       try
       {
         var sis = new ScriptableInputStream(fis);
         var s = Cu.Sandbox(gGlobalObject);
         s.importFunction(dump, "dump");
 
@@ -2661,17 +2661,17 @@ ServerHandler.prototype =
                            false);
       }
       catch (e) { /* lastModifiedTime threw, ignore */ }
 
       response.setHeader("Content-Type", type, false);
       maybeAddHeaders(file, metadata, response);
       response.setHeader("Content-Length", "" + count, false);
 
-      var fis = new FileInputStream(file, PR_RDONLY, parseInt("444", 8),
+      var fis = new FileInputStream(file, PR_RDONLY, 0o444,
                                     Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
       offset = offset || 0;
       count = count || file.fileSize;
       NS_ASSERT(offset === 0 || offset < file.fileSize, "bad offset");
       NS_ASSERT(count >= 0, "bad count");
       NS_ASSERT(offset + count <= file.fileSize, "bad total data size");
 
--- a/addon-sdk/source/test/addons/simple-prefs/package.json
+++ b/addon-sdk/source/test/addons/simple-prefs/package.json
@@ -10,23 +10,23 @@
   {
     "description": "How many of them we have.",
     "name": "myInteger",
     "type": "integer",
     "value": 8,
     "title": "my-int"
   },
   {
+    "name": "sayHello",
+    "type": "control",
+    "label": "Click me!",
+    "title": "hello"
+  },
+  {
     "name": "myHiddenInt",
     "type": "integer",
     "hidden": true,
     "value": 5,
     "title": "hidden-int"
-  },
-  {
-    "name": "sayHello",
-    "type": "control",
-    "label": "Click me!",
-    "title": "hello"
   }],
   "main": "./lib/main.js",
   "version": "0.0.1"
 }
--- a/addon-sdk/source/test/fixtures/child-process-scripts.js
+++ b/addon-sdk/source/test/fixtures/child-process-scripts.js
@@ -61,17 +61,17 @@ function createFile (name, data) {
   return promise;
 }
 
 // TODO Use fs.chmod once implemented, bug 914606
 function makeExecutable (name) {
   let { CC } = require('chrome');
   let nsILocalFile = CC('@mozilla.org/file/local;1', 'nsILocalFile', 'initWithPath');
   let file = nsILocalFile(name);
-  file.permissions = parseInt('0777', 8);
+  file.permissions = 0o777;
 }
 
 function deleteFile (name) {
   let file = join(PROFILE_DIR, name);
   if (existsSync(file))
     unlinkSync(file);
 }
 
--- a/addon-sdk/source/test/lib/httpd.js
+++ b/addon-sdk/source/test/lib/httpd.js
@@ -2042,17 +2042,17 @@ function maybeAddHeaders(file, metadata,
 
   var headerFile = file.parent;
   headerFile.append(name + HEADERS_SUFFIX);
 
   if (!headerFile.exists())
     return;
 
   const PR_RDONLY = 0x01;
-  var fis = new FileInputStream(headerFile, PR_RDONLY, parseInt("444", 8),
+  var fis = new FileInputStream(headerFile, PR_RDONLY, 0o444,
                                 Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
   try
   {
     var lis = new ConverterInputStream(fis, "UTF-8", 1024, 0x0);
     lis.QueryInterface(Ci.nsIUnicharLineInputStream);
 
     var line = {value: ""};
@@ -2568,17 +2568,17 @@ ServerHandler.prototype =
 */
   _writeFileResponse: function(metadata, file, response, offset, count)
   {
     const PR_RDONLY = 0x01;
 
     var type = this._getTypeFromFile(file);
     if (type === SJS_TYPE)
     {
-      var fis = new FileInputStream(file, PR_RDONLY, parseInt("444", 8),
+      var fis = new FileInputStream(file, PR_RDONLY, 0o444,
                                     Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
       try
       {
         var sis = new ScriptableInputStream(fis);
         var s = Cu.Sandbox(gGlobalObject);
         s.importFunction(dump, "dump");
 
@@ -2662,17 +2662,17 @@ ServerHandler.prototype =
                            false);
       }
       catch (e) { /* lastModifiedTime threw, ignore */ }
 
       response.setHeader("Content-Type", type, false);
       maybeAddHeaders(file, metadata, response);
       response.setHeader("Content-Length", "" + count, false);
 
-      var fis = new FileInputStream(file, PR_RDONLY, parseInt("444", 8),
+      var fis = new FileInputStream(file, PR_RDONLY, 0o444,
                                     Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
       offset = offset || 0;
       count = count || file.fileSize;
       NS_ASSERT(offset === 0 || offset < file.fileSize, "bad offset");
       NS_ASSERT(count >= 0, "bad count");
       NS_ASSERT(offset + count <= file.fileSize, "bad total data size");
 
--- a/addon-sdk/source/test/test-fs.js
+++ b/addon-sdk/source/test/test-fs.js
@@ -505,44 +505,44 @@ exports["test fs.writeFile error"] = fun
 
 exports["test fs.chmod"] = function (assert, done) {
   let content = ["hej från sverige"];
 
   fs.writeFile(chmodPath, content, function (err) {
     testPerm("0755")()
       .then(testPerm("0777"))
       .then(testPerm("0666"))
-      .then(testPerm(parseInt("0511", 8)))
-      .then(testPerm(parseInt("0200", 8)))
+      .then(testPerm(0o511))
+      .then(testPerm(0o200))
       .then(testPerm("0040"))
       .then(testPerm("0000"))
-      .then(testPermSync(parseInt("0777", 8)))
-      .then(testPermSync(parseInt("0666", 8)))
+      .then(testPermSync(0o777))
+      .then(testPermSync(0o666))
       .then(testPermSync("0511"))
       .then(testPermSync("0200"))
       .then(testPermSync("0040"))
       .then(testPermSync("0000"))
       .then(() => {
         assert.pass("Successful chmod passes");
       }, assert.fail)
       // Test invalid paths
-      .then(() => chmod("not-a-valid-file", parseInt("0755", 8)))
+      .then(() => chmod("not-a-valid-file", 0o755))
       .then(assert.fail, (err) => {
         checkPermError(err, "not-a-valid-file");
       })
-      .then(() => chmod("not-a-valid-file", parseInt("0755", 8), "sync"))
+      .then(() => chmod("not-a-valid-file", 0o755, "sync"))
       .then(assert.fail, (err) => {
         checkPermError(err, "not-a-valid-file");
       })
       // Test invalid files
-      .then(() => chmod("resource://not-a-real-file", parseInt("0755", 8)))
+      .then(() => chmod("resource://not-a-real-file", 0o755))
       .then(assert.fail, (err) => {
         checkPermError(err, "resource://not-a-real-file");
       })
-      .then(() => chmod("resource://not-a-real-file", parseInt("0755", 8), 'sync'))
+      .then(() => chmod("resource://not-a-real-file", 0o755, 'sync'))
       .then(assert.fail, (err) => {
         checkPermError(err, "resource://not-a-real-file");
       })
       .then(done, assert.fail);
   });
 
   function checkPermError (err, path) {
     assert.equal(err.message, "ENOENT, chmod " + path);
@@ -598,18 +598,18 @@ exports["test fs.chmod"] = function (ass
    */
   function normalizeMode (mode) {
     if (typeof mode === "string")
       mode = parseInt(mode, 8);
 
     if (!isWindows)
       return mode;
 
-    var ANY_READ = parseInt("0444", 8);
-    var ANY_WRITE = parseInt("0222", 8);
+    var ANY_READ = 0o444;
+    var ANY_WRITE = 0o222;
     var winMode = 0;
 
     // On Windows, if WRITE is true, then READ is also true
     if (mode & ANY_WRITE)
       winMode |= ANY_WRITE | ANY_READ;
     // Minimum permissions are READ for Windows
     else
       winMode |= ANY_READ;
--- a/b2g/chrome/content/touchcontrols.css
+++ b/b2g/chrome/content/touchcontrols.css
@@ -3,162 +3,175 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);
 
 /* video controls */
 .controlsOverlay {
   -moz-box-pack: center;
   -moz-box-align: end;
-  padding: 20px;
   -moz-box-flex: 1;
   -moz-box-orient: horizontal;
 }
 
 .controlsOverlay[scaled] {
   /* scaled attribute in videocontrols.css causes conflict
      due to different -moz-box-orient values */
   -moz-box-align: end;
 }
 
 .controlBar {
   -moz-box-flex: 1;
-  font-size: 16pt;
-  padding: 10px;
   background-color: rgba(50,50,50,0.8);
-  border-radius: 8px;
   width: 100%;
 }
 
+.buttonsBar {
+  -moz-box-flex: 1;
+  -moz-box-align: center;
+}
+
 .controlsSpacer {
   display: none;
   -moz-box-flex: 0;
 }
 
 .fullscreenButton,
 .playButton,
 .castingButton,
 .muteButton {
   -moz-appearance: none;
-  min-height: 42px;
-  min-width: 42px;
+  padding: 2px;
   border: none !important;
+  min-height: 24px;
+  min-width: 24px;
 }
 
 .fullscreenButton {
   background: url("chrome://b2g/content/images/fullscreen-hdpi.png") no-repeat center;
+  background-size: contain;
+  background-origin: content-box;
 }
 
 .fullscreenButton[fullscreened="true"] {
   background: url("chrome://b2g/content/images/exitfullscreen-hdpi.png") no-repeat center;
+  background-size: contain;
+  background-origin: content-box;
 }
 
 .controlBar[fullscreen-unavailable] .fullscreenButton {
   display: none;
 }
 
 .playButton {
   background: url("chrome://b2g/content/images/pause-hdpi.png") no-repeat center;
+  background-size: contain;
+  background-origin: content-box;
 }
 
 /*
  * Normally the button bar has fullscreen spacer play spacer mute, but if
  * this is an audio control rather than a video control, the fullscreen button
  * is hidden by videocontrols.xml, and that alters the position of the
  * play button.  This workaround moves it back to center.
  */
 .controlBar[fullscreen-unavailable] .playButton {
   transform: translateX(28px);
 }
 
 .playButton[paused="true"] {
   background: url("chrome://b2g/content/images/play-hdpi.png") no-repeat center;
+  background-size: contain;
+  background-origin: content-box;
 }
 
 .castingButton {
   display: none;
 }
 
 .muteButton {
   background: url("chrome://b2g/content/images/mute-hdpi.png") no-repeat center;
+  background-size: contain;
+  background-origin: content-box;
 }
 
 .muteButton[muted="true"] {
   background: url("chrome://b2g/content/images/unmute-hdpi.png") no-repeat center;
+  background-size: contain;
+  background-origin: content-box;
 }
 
 /* bars */
 .scrubberStack {
-  width: 100%;
-  min-height: 32px;
-  max-height: 32px;
-  padding: 0px 8px;
-  margin: 0px;
+  -moz-box-flex: 1;
+  padding: 0px 18px;
 }
 
+.flexibleBar,
+.flexibleBar .progress-bar,
 .bufferBar,
 .bufferBar .progress-bar,
 .progressBar,
 .progressBar .progress-bar,
 .scrubber,
 .scrubber .scale-slider,
 .scrubber .scale-thumb {
   -moz-appearance: none;
   border: none;
   padding: 0px;
   margin: 0px;
   background-color: transparent;
-  border-radius: 3px;
 }
 
-.bufferBar {
-  border: 1px solid #5e6166;
+.flexibleBar,
+.bufferBar,
+.progressBar {
+  height: 24px;
+  padding: 11px 0px;
 }
 
-.bufferBar,
-.progressBar {
-  margin: 11px 0px 9px 0px;
-  height: 8px
+.flexibleBar {
+  padding: 12px 0px;
+}
+
+.flexibleBar .progress-bar {
+  border: 1px #777777 solid;
+  border-radius: 1px;
 }
 
 .bufferBar .progress-bar {
-  background-color: #5e6166;
+  border: 2px #AFB1B3 solid;
+  border-radius: 2px;
 }
 
 .progressBar .progress-bar {
-  background-color: white;
+  border: 2px #FF9500 solid;
+  border-radius: 2px;
 }
 
+
 .scrubber {
-  margin-left: -16px;
-  margin-right: -16px;
+  margin-left: -8px;
+  margin-right: -8px;
+}
+
+.positionLabel, .durationLabel {
+  font-family: 'Roboto', Helvetica, Arial, sans-serif;
+  font-size: 12px;
+  color: white;
 }
 
 .scrubber .scale-thumb {
   display: -moz-box;
   margin: 0px !important;
   padding: 0px !important;
   background: url("chrome://b2g/content/images/scrubber-hdpi.png") no-repeat;
-  background-size: 32px 32px;
-  height: 32px;
-  width: 32px;
-}
-
-.durationBox {
-  -moz-box-orient: horizontal;
-  -moz-box-pack: start;
-  -moz-box-align: center;
-  color: white;
-  font-weight: bold;
-  padding: 0px 8px;
-  margin-top: -6px;
-}
-
-.positionLabel {
-  -moz-box-flex: 1;
+  background-size: 12px 12px;
+  height: 12px;
+  width: 12px;
 }
 
 .statusOverlay {
   -moz-box-align: center;
   -moz-box-pack: center;
   background-color: rgb(50,50,50);
 }
 
--- a/b2g/config/mozconfigs/common
+++ b/b2g/config/mozconfigs/common
@@ -4,19 +4,19 @@
 
 # This file is included at the top of all b2g mozconfigs
 
 . "$topsrcdir/build/mozconfig.common"
 
 # Normally, we'd set this unconditionally, but this file is also used
 # for local builds and there is no other mozconfig in this tree that
 # is included on device builds.
-if test -d $topsrcdir/../gcc/bin; then
-    HOST_CC="$topsrcdir/../gcc/bin/gcc"
-    HOST_CXX="$topsrcdir/../gcc/bin/g++"
+if test -d $topsrcdir/gcc/bin; then
+    HOST_CC="$topsrcdir/gcc/bin/gcc"
+    HOST_CXX="$topsrcdir/gcc/bin/g++"
     ac_add_options --enable-stdcxx-compat
 fi
 
 # Allow overriding this from the environment, and don't
 # try to set it if it doesn't exist. As per above, this file is also
 # used for local builds, and we may need to override this for builds in
 # other environments.
 if test -z "$SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE" -a -f /builds/crash-stats-api.token; then
--- a/b2g/config/tooltool-manifests/macosx64/releng.manifest
+++ b/b2g/config/tooltool-manifests/macosx64/releng.manifest
@@ -1,13 +1,13 @@
 [
 {
-"version": "clang 3.8.0/r247539",
-"size": 121389802,
-"digest": "2be6b42cfa1e92de4b49a57123f54043fec2d3cf8385276516dc6aaed99c88768ac4aebd7ce2e007ab074163523da29223436a4d1aef82f0f750f08f1b14cd71",
+"version": "clang 3.8.0",
+"size": 133060926,
+"digest": "aff5ad3ac2d41db19d1ba0df5f97b189a7d7e1b6af8c56e22c2b0cced84d75fa98394ded6a4ba5713652e6684a0a46f47aeccf87991f9e849bf8d7d82e564f6f",
 "algorithm": "sha512",
 "filename": "clang.tar.bz2",
 "unpack": true
 },
 {
 "size": 167175,
 "digest": "0b71a936edf5bd70cf274aaa5d7abc8f77fe8e7b5593a208f805cc9436fac646b9c4f0b43c2b10de63ff3da671497d35536077ecbc72dba7f8159a38b580f831",
 "algorithm": "sha512",
--- a/b2g/dev/config/tooltool-manifests/macosx64/releng.manifest
+++ b/b2g/dev/config/tooltool-manifests/macosx64/releng.manifest
@@ -1,13 +1,13 @@
 [
 {
-"version": "clang 3.8.0/r247539",
-"size": 121389802,
-"digest": "2be6b42cfa1e92de4b49a57123f54043fec2d3cf8385276516dc6aaed99c88768ac4aebd7ce2e007ab074163523da29223436a4d1aef82f0f750f08f1b14cd71",
+"version": "clang 3.8.0",
+"size": 133060926,
+"digest": "aff5ad3ac2d41db19d1ba0df5f97b189a7d7e1b6af8c56e22c2b0cced84d75fa98394ded6a4ba5713652e6684a0a46f47aeccf87991f9e849bf8d7d82e564f6f",
 "algorithm": "sha512",
 "filename": "clang.tar.bz2",
 "unpack": true
 },
 {
 "size": 167175,
 "digest": "0b71a936edf5bd70cf274aaa5d7abc8f77fe8e7b5593a208f805cc9436fac646b9c4f0b43c2b10de63ff3da671497d35536077ecbc72dba7f8159a38b580f831",
 "algorithm": "sha512",
--- a/b2g/installer/package-manifest.in
+++ b/b2g/installer/package-manifest.in
@@ -416,16 +416,18 @@
 @RESPATH@/components/nsAsyncShutdown.manifest
 @RESPATH@/components/nsAsyncShutdown.js
 @RESPATH@/components/htmlMenuBuilder.js
 @RESPATH@/components/htmlMenuBuilder.manifest
 @RESPATH@/components/PresentationDeviceInfoManager.manifest
 @RESPATH@/components/PresentationDeviceInfoManager.js
 @RESPATH@/components/BuiltinProviders.manifest
 @RESPATH@/components/TCPPresentationServer.js
+@RESPATH@/components/PresentationDataChannelSessionTransport.js
+@RESPATH@/components/PresentationDataChannelSessionTransport.manifest
 
 #ifdef MOZ_SECUREELEMENT
 @RESPATH@/components/ACEService.js
 @RESPATH@/components/ACEService.manifest
 @RESPATH@/components/GPAccessRulesManager.js
 @RESPATH@/components/GPAccessRulesManager.manifest
 @RESPATH@/components/SecureElement.js
 @RESPATH@/components/SecureElement.manifest
@@ -806,17 +808,21 @@
 @RESPATH@/components/pippki.xpt
 @BINPATH@/@DLL_PREFIX@nss3@DLL_SUFFIX@
 #ifndef MOZ_FOLD_LIBS
 @BINPATH@/@DLL_PREFIX@nssutil3@DLL_SUFFIX@
 @BINPATH@/@DLL_PREFIX@smime3@DLL_SUFFIX@
 @BINPATH@/@DLL_PREFIX@ssl3@DLL_SUFFIX@
 #endif
 @BINPATH@/@DLL_PREFIX@softokn3@DLL_SUFFIX@
+#if defined(XP_LINUX) && !defined(ANDROID)
+@BINPATH@/@DLL_PREFIX@freeblpriv3@DLL_SUFFIX@
+#else
 @BINPATH@/@DLL_PREFIX@freebl3@DLL_SUFFIX@
+#endif
 #ifndef CROSS_COMPILE
 @BINPATH@/@DLL_PREFIX@freebl3.chk
 @BINPATH@/@DLL_PREFIX@softokn3.chk
 #endif
 #ifndef NSS_DISABLE_DBM
 @BINPATH@/@DLL_PREFIX@nssdbm3@DLL_SUFFIX@
 #ifndef CROSS_COMPILE
 @BINPATH@/@DLL_PREFIX@nssdbm3.chk
--- a/browser/app/blocklist.xml
+++ b/browser/app/blocklist.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0"?>
-<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1458315314000">
+<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1459441171000">
   <emItems>
       <emItem  blockID="i58" id="webmaster@buzzzzvideos.info">
                         <versionRange  minVersion="0" maxVersion="*">
                     </versionRange>
                     <prefs>
               </prefs>
     </emItem>
       <emItem  blockID="i71" id="youtube@2youtube.com">
@@ -3436,16 +3436,40 @@
       <pluginItem  blockID="p1139">
                   <match name="filename" exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" />                      <versionRange  minVersion="18.0.0.326" maxVersion="18.0.0.329" severity="0" vulnerabilitystatus="1"></versionRange>
                             <infoURL>https://get.adobe.com/flashplayer/</infoURL>
           </pluginItem>
       <pluginItem  blockID="p1140">
                   <match name="filename" exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" />                      <versionRange  minVersion="20.0.0.286" maxVersion="20.0.0.306" severity="0" vulnerabilitystatus="1"></versionRange>
                             <infoURL>https://get.adobe.com/flashplayer/</infoURL>
           </pluginItem>
+      <pluginItem  blockID="p1141">
+                  <match name="filename" exp="JavaAppletPlugin\.plugin" />                      <versionRange  minVersion="Java 7 Update 91" maxVersion="Java 7 Update 97" severity="0" vulnerabilitystatus="1"></versionRange>
+                            <infoURL>https://java.com/</infoURL>
+          </pluginItem>
+      <pluginItem  blockID="p1142">
+                  <match name="filename" exp="JavaAppletPlugin\.plugin" />                      <versionRange  minVersion="Java 8 Update 64" maxVersion="Java 8 Update 76" severity="0" vulnerabilitystatus="1"></versionRange>
+                            <infoURL>https://java.com/</infoURL>
+          </pluginItem>
+      <pluginItem  blockID="p1143">
+      <match name="name" exp="Java\(TM\) Platform SE 7 U(9[1-7])(\s[^\d\._U]|$)" />            <match name="filename" exp="npjp2\.dll" />                      <versionRange  severity="0" vulnerabilitystatus="1"></versionRange>
+                            <infoURL>https://java.com/</infoURL>
+          </pluginItem>
+      <pluginItem  blockID="p1144">
+      <match name="name" exp="Java\(TM\) Platform SE 8 U(6[4-9]|7[0-6])(\s[^\d\._U]|$)" />            <match name="filename" exp="npjp2\.dll" />                      <versionRange  severity="0" vulnerabilitystatus="1"></versionRange>
+                            <infoURL>https://java.com/</infoURL>
+          </pluginItem>
+      <pluginItem  blockID="p1145">
+      <match name="name" exp="Java(\(TM\))? Plug-in 10\.(9[1-7])(\.[0-9]+)?([^\d\._]|$)" />            <match name="filename" exp="libnpjp2\.so" />                      <versionRange  severity="0" vulnerabilitystatus="1"></versionRange>
+                            <infoURL>https://java.com/</infoURL>
+          </pluginItem>
+      <pluginItem  blockID="p1146">
+      <match name="name" exp="Java(\(TM\))? Plug-in 11\.(6[4-9]|7[0-6])(\.[0-9]+)?([^\d\._]|$)" />            <match name="filename" exp="libnpjp2\.so" />                      <versionRange  severity="0" vulnerabilitystatus="1"></versionRange>
+                            <infoURL>https://java.com/</infoURL>
+          </pluginItem>
     </pluginItems>
 
   <gfxItems>
     <gfxBlacklistEntry  blockID="g35">      <os>WINNT 6.1</os>      <vendor>0x10de</vendor>              <devices>
                       <device>0x0a6c</device>
                   </devices>
             <feature>DIRECT2D</feature>      <featureStatus>BLOCKED_DRIVER_VERSION</featureStatus>      <driverVersion>8.17.12.5896</driverVersion>      <driverVersionComparator>LESS_THAN_OR_EQUAL</driverVersionComparator>    </gfxBlacklistEntry>
     <gfxBlacklistEntry  blockID="g36">      <os>WINNT 6.1</os>      <vendor>0x10de</vendor>              <devices>
@@ -3741,18 +3765,17 @@
       <serialNumber>BAAAAAABHkSl7L4=</serialNumber>
     </certItem>
         <certItem issuerName="MIGBMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTElMCMGA1UECxMcUHJpbWFyeSBPYmplY3QgUHVibGlzaGluZyBDQTEwMC4GA1UEAxMnR2xvYmFsU2lnbiBQcmltYXJ5IE9iamVjdCBQdWJsaXNoaW5nIENB">
       <serialNumber>BAAAAAABI54PryQ=</serialNumber>
     </certItem>
         <certItem issuerName="MGExCzAJBgNVBAYTAlVTMRIwEAYDVQQKEwlJZGVuVHJ1c3QxIDAeBgNVBAsTF0lkZW5UcnVzdCBQdWJsaWMgU2VjdG9yMRwwGgYDVQQDExNJZGVuVHJ1c3QgQUNFUyBDQSAx">
       <serialNumber>fwAAAQAAAUrz/HmrAAAAAg==</serialNumber>
     </certItem>
-        <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM=
-">
+        <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM=">
       <serialNumber>By7fBTreouRwX/qrpgSUsg==</serialNumber>
     </certItem>
         <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM=">
       <serialNumber>Gd/pPu+qLnXUdvP9sW73CQ==</serialNumber>
     </certItem>
         <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM=">
       <serialNumber>LdbnCbsA9sOgI4mkUpWXPw==</serialNumber>
     </certItem>
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -299,17 +299,17 @@ pref("browser.urlbar.unifiedcomplete", t
 // 0: Match anywhere (e.g., middle of words)
 // 1: Match on word boundaries and then try matching anywhere
 // 2: Match only on word boundaries (e.g., after / or .)
 // 3: Match at the beginning of the url or title
 pref("browser.urlbar.matchBehavior", 1);
 pref("browser.urlbar.filter.javascript", true);
 
 // the maximum number of results to show in autocomplete when doing richResults
-pref("browser.urlbar.maxRichResults", 12);
+pref("browser.urlbar.maxRichResults", 10);
 // The amount of time (ms) to wait after the user has stopped typing
 // before starting to perform autocomplete.  50 is the default set in
 // autocomplete.xml.
 pref("browser.urlbar.delay", 50);
 
 // The special characters below can be typed into the urlbar to either restrict
 // the search to visited history, bookmarked, tagged pages; or force a match on
 // just the title text or url.
@@ -662,197 +662,16 @@ pref("plugin.default.state", 1);
 // Plugins bundled in XPIs are enabled by default.
 pref("plugin.defaultXpi.state", 2);
 
 // Flash is enabled by default, and Java is click-to-activate by default on
 // all channels.
 pref("plugin.state.flash", 2);
 pref("plugin.state.java", 1);
 
-// Whitelist Requests
-
-// Unity player, bug 979849
-#ifdef XP_WIN
-pref("plugin.state.npunity3d", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.unity web player", 2);
-#endif
-
-// Cisco Jabber SDK, bug 980133
-#ifdef XP_WIN
-pref("plugin.state.npciscowebcommunicator", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.ciscowebcommunicator", 2);
-#endif
-
-// McAfee Security Scanner detection plugin, bug 980772
-#ifdef XP_WIN
-pref("plugin.state.npmcafeemss", 2);
-#endif
-
-// Cisco VGConnect for directv.com, bug 981403 & bug 1051772
-#ifdef XP_WIN
-pref("plugin.state.npplayerplugin", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.playerplugin", 2);
-pref("plugin.state.playerplugin.dtv", 2);
-pref("plugin.state.playerplugin.ciscodrm", 2);
-pref("plugin.state.playerplugin.charter", 2);
-#endif
-
-// Cisco Jabber Client, bug 981905
-#ifdef XP_WIN
-pref("plugin.state.npchip", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.cisco jabber guest plug-in", 2);
-#endif
-
-// Estonian ID-card plugin, bug 982045
-#ifdef XP_WIN
-pref("plugin.state.npesteid-firefox-plugin", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.esteidfirefoxplugin", 2);
-#endif
-#ifdef UNIX_BUT_NOT_MAC
-pref("plugin.state.npesteid-firefox-plugin", 2);
-#endif
-
-// coupons.com, bug 984441
-#ifdef XP_WIN
-pref("plugin.state.npmozcouponprinter", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.couponprinter-firefox_v", 2);
-#endif
-
-// Nexus Personal BankID, bug 987056
-pref("plugin.state.npbispbrowser", 2);
-
-// Gradecam, bug 988119
-#ifdef XP_WIN
-pref("plugin.state.npgcplugin", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.gcplugin", 2);
-#endif
-
-// Smart Card Plugin, bug 988781
-#ifdef XP_WIN
-pref("plugin.state.npwebcard", 2);
-#endif
-
-// Cisco WebEx, bug 989096
-#ifdef XP_WIN
-pref("plugin.state.npatgpc", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.webex", 2);
-#endif
-#ifdef UNIX_BUT_NOT_MAC
-pref("plugin.state.npatgpc", 2);
-#endif
-
-// Skype, bug 990067
-#ifdef XP_WIN
-pref("plugin.state.npskypewebplugin", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.skypewebplugin", 2);
-#endif
-
-// Facebook video calling, bug 990068
-#ifdef XP_WIN
-pref("plugin.state.npfacebookvideocalling", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.facebookvideocalling", 2);
-#endif
-
-// MS Office Lync plugin, bug 990069
-#ifdef XP_WIN
-pref("plugin.state.npmeetingjoinpluginoc", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.lwaplugin", 2);
-#endif
-
-// VidyoWeb, bug 990286
-#ifdef XP_WIN
-pref("plugin.state.npvidyoweb", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.npvidyoweb", 2);
-pref("plugin.state.vidyoweb", 2);
-#endif
-
-// McAfee Virtual Technician, bug 981503
-#ifdef XP_WIN
-pref("plugin.state.npmvtplugin", 2);
-#endif
-
-// Verimatrix ViewRightWeb, bug 989872
-#ifdef XP_WIN
-pref("plugin.state.npviewright", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.viewrightwebplayer", 2);
-#endif
-
-// McAfee SiteAdvisor Enterprise, bug 987057
-#ifdef XP_WIN
-pref("plugin.state.npmcffplg", 2);
-#endif
-
-// F5 Networks SSLVPN plugin, bug 985640
-#ifdef XP_MACOSX
-pref("plugin.state.f5 ssl vpn plugin", 2);
-pref("plugin.state.f5 sam inspection host plugin", 2);
-#endif
-
-// Roblox Launcher Plugin, bug 1024073
-#ifdef XP_WIN
-pref("plugin.state.nprobloxproxy", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.nproblox", 2);
-#endif
-
-// Box Edit, bug 1029654
-#ifdef XP_WIN
-pref("plugin.state.npboxedit", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.box edit", 2);
-#endif
-
-// Nexus Personal, bug 1024965
-#ifdef XP_WIN
-pref("plugin.state.np_prsnl", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.personalplugin", 2);
-#endif
-#ifdef UNIX_BUT_NOT_MAC
-pref("plugin.state.libplugins", 2);
-#endif
-
-// Novell iPrint Client, bug 1036693
-#ifdef XP_WIN
-pref("plugin.state.npnipp", 2);
-pref("plugin.state.npnisp", 2);
-#endif
-#ifdef XP_MACOSX
-pref("plugin.state.iprint", 2);
-#endif
-
 #ifdef XP_MACOSX
 pref("browser.preferences.animateFadeIn", true);
 #else
 pref("browser.preferences.animateFadeIn", false);
 #endif
 
 #ifdef XP_WIN
 pref("browser.preferences.instantApply", false);
@@ -1544,21 +1363,28 @@ pref("media.gmp.decoder.enabled", true);
 // installed.
 pref("media.gmp.decoder.aac", 2);
 pref("media.gmp.decoder.h264", 2);
 
 // Whether we should run a test-pattern through EME GMPs before assuming they'll
 // decode H.264.
 pref("media.gmp.trial-create.enabled", true);
 
-#ifdef MOZ_ADOBE_EME
+#if defined(MOZ_ADOBE_EME) || defined(MOZ_WIDEVINE_EME)
 pref("browser.eme.ui.enabled", true);
+#endif
+
+#ifdef MOZ_ADOBE_EME
 pref("media.gmp-eme-adobe.enabled", true);
 #endif
 
+#ifdef MOZ_WIDEVINE_EME
+pref("media.gmp-widevinecdm.enabled", true);
+#endif
+
 // Play with different values of the decay time and get telemetry,
 // 0 means to randomize (and persist) the experiment value in users' profiles,
 // -1 means no experiment is run and we use the preferred value for frecency (6h)
 pref("browser.cache.frecency_experiment", 0);
 
 pref("browser.translation.detectLanguage", false);
 pref("browser.translation.neverForLanguages", "");
 // Show the translation UI bits, like the info bar, notification icon and preferences.
--- a/browser/base/content/aboutNetError.xhtml
+++ b/browser/base/content/aboutNetError.xhtml
@@ -236,17 +236,17 @@
           title.parentNode.replaceChild(errTitle, title);
           // change id to the replaced child's id so styling works
           errTitle.id = "errorTitleText";
         }
 
         var sd = document.getElementById("errorShortDescText");
         if (sd) {
           if (gIsCertError) {
-            sd.textContent = document.getElementById("ed_nssBadCert").textContent;
+            sd.innerHTML = document.getElementById("ed_nssBadCert").innerHTML;
           }
           else {
             sd.textContent = getDescription();
           }
         }
         if (gIsCertError) {
           initPageCertError();
           return;
@@ -480,16 +480,17 @@
     <div id="certErrorPageTitle" style="display: none;">&certerror.pagetitle1;</div>
 
     <!-- ERROR ITEM CONTAINER (removed during loading to avoid bug 39098) -->
     <div id="errorContainer">
       <div id="errorTitlesContainer">
         <h1 id="et_generic">&generic.title;</h1>
         <h1 id="et_dnsNotFound">&dnsNotFound.title;</h1>
         <h1 id="et_fileNotFound">&fileNotFound.title;</h1>
+        <h1 id="et_fileAccessDenied">&fileAccessDenied.title;</h1>
         <h1 id="et_malformedURI">&malformedURI.title;</h1>
         <h1 id="et_unknownProtocolFound">&unknownProtocolFound.title;</h1>
         <h1 id="et_connectionFailure">&connectionFailure.title;</h1>
         <h1 id="et_netTimeout">&netTimeout.title;</h1>
         <h1 id="et_redirectLoop">&redirectLoop.title;</h1>
         <h1 id="et_unknownSocketType">&unknownSocketType.title;</h1>
         <h1 id="et_netReset">&netReset.title;</h1>
         <h1 id="et_notCached">&notCached.title;</h1>
@@ -507,16 +508,17 @@
         <h1 id="et_corruptedContentError">&corruptedContentError.title;</h1>
         <h1 id="et_sslv3Used">&sslv3Used.title;</h1>
         <h1 id="et_weakCryptoUsed">&weakCryptoUsed.title;</h1>
       </div>
       <div id="errorDescriptionsContainer">
         <div id="ed_generic">&generic.longDesc;</div>
         <div id="ed_dnsNotFound">&dnsNotFound.longDesc;</div>
         <div id="ed_fileNotFound">&fileNotFound.longDesc;</div>
+        <div id="ed_fileAccessDenied">&fileAccessDenied.longDesc;</div>
         <div id="ed_malformedURI">&malformedURI.longDesc;</div>
         <div id="ed_unknownProtocolFound">&unknownProtocolFound.longDesc;</div>
         <div id="ed_connectionFailure">&connectionFailure.longDesc;</div>
         <div id="ed_netTimeout">&netTimeout.longDesc;</div>
         <div id="ed_redirectLoop">&redirectLoop.longDesc;</div>
         <div id="ed_unknownSocketType">&unknownSocketType.longDesc;</div>
         <div id="ed_netReset">&netReset.longDesc;</div>
         <div id="ed_notCached">&notCached.longDesc;</div>
--- a/browser/base/content/browser-addons.js
+++ b/browser/base/content/browser-addons.js
@@ -655,16 +655,17 @@ var LightweightThemeListener = {
 
   init: function () {
     XPCOMUtils.defineLazyGetter(this, "styleSheet", function() {
       for (let i = document.styleSheets.length - 1; i >= 0; i--) {
         let sheet = document.styleSheets[i];
         if (sheet.href == "chrome://browser/skin/browser-lightweightTheme.css")
           return sheet;
       }
+      return undefined;
     });
 
     Services.obs.addObserver(this, "lightweight-theme-styling-update", false);
     Services.obs.addObserver(this, "lightweight-theme-optimized", false);
     if (document.documentElement.hasAttribute("lwtheme"))
       this.updateStyleSheet(document.documentElement.style.backgroundImage);
   },
 
--- a/browser/base/content/browser-plugins.js
+++ b/browser/base/content/browser-plugins.js
@@ -6,17 +6,16 @@
 var gPluginHandler = {
   PREF_SESSION_PERSIST_MINUTES: "plugin.sessionPermissionNow.intervalInMinutes",
   PREF_PERSISTENT_DAYS: "plugin.persistentPermissionAlways.intervalInDays",
   MESSAGES: [
     "PluginContent:ShowClickToPlayNotification",
     "PluginContent:RemoveNotification",
     "PluginContent:UpdateHiddenPluginUI",
     "PluginContent:HideNotificationBar",
-    "PluginContent:ShowInstallNotification",
     "PluginContent:InstallSinglePlugin",
     "PluginContent:ShowPluginCrashedNotification",
     "PluginContent:SubmitReport",
     "PluginContent:LinkClickCallback",
   ],
 
   init: function () {
     const mm = window.messageManager;
@@ -51,18 +50,16 @@ var gPluginHandler = {
         break;
       case "PluginContent:UpdateHiddenPluginUI":
         this.updateHiddenPluginUI(msg.target, msg.data.haveInsecure, msg.data.actions,
                                   msg.principal, msg.data.location);
         break;
       case "PluginContent:HideNotificationBar":
         this.hideNotificationBar(msg.target, msg.data.name);
         break;
-      case "PluginContent:ShowInstallNotification":
-        return this.showInstallNotification(msg.target, msg.data.pluginInfo);
       case "PluginContent:InstallSinglePlugin":
         this.installSinglePlugin(msg.data.pluginInfo);
         break;
       case "PluginContent:ShowPluginCrashedNotification":
         this.showPluginCrashedNotification(msg.target, msg.data.messageString,
                                            msg.data.pluginID);
         break;
       case "PluginContent:SubmitReport":
--- a/browser/base/content/browser-syncui.js
+++ b/browser/base/content/browser-syncui.js
@@ -23,16 +23,17 @@ var gSyncUI = {
          "weave:service:login:error",
          "weave:service:logout:finish",
          "weave:service:start-over",
          "weave:service:start-over:finish",
          "weave:ui:login:error",
          "weave:ui:sync:error",
          "weave:ui:sync:finish",
          "weave:ui:clear-error",
+         "weave:engine:sync:finish"
   ],
 
   _unloaded: false,
   // The number of "active" syncs - while this is non-zero, our button will spin
   _numActiveSyncTasks: 0,
 
   init: function () {
     Cu.import("resource://services-common/stringbundle.js");
@@ -246,17 +247,17 @@ var gSyncUI = {
   // Handle clicking the toolbar button - which either opens the Sync setup
   // pages or forces a sync now. Does *not* return a promise as it is called
   // via the UI.
   handleToolbarButton() {
     this._needsSetup().then(needsSetup => {
       if (needsSetup || this._loginFailed()) {
         this.openSetup();
       } else {
-        return this.doSync();
+        this.doSync();
       }
     }).catch(err => {
       this.log.error("Failed to handle toolbar button command", err);
     });
   },
 
   /**
    * Invoke the Sync setup wizard.
@@ -412,16 +413,27 @@ var gSyncUI = {
       }
     }
   }),
 
   onSyncFinish: function SUI_onSyncFinish() {
     let title = this._stringBundle.GetStringFromName("error.sync.title");
   },
 
+  onClientsSynced: function() {
+    let broadcaster = document.getElementById("sync-syncnow-state");
+    if (broadcaster) {
+      if (Weave.Service.clientsEngine.stats.numClients > 1) {
+        broadcaster.setAttribute("devices-status", "multi");
+      } else {
+        broadcaster.setAttribute("devices-status", "single");
+      }
+    }
+  },
+
   observe: function SUI_observe(subject, topic, data) {
     this.log.debug("observed", topic);
     if (this._unloaded) {
       Cu.reportError("SyncUI observer called after unload: " + topic);
       return;
     }
 
     // Unwrap, just like Svc.Obs, but without pulling in that dependency.
@@ -465,16 +477,22 @@ var gSyncUI = {
         this.updateUI();
         break;
       case "weave:service:ready":
         this.initUI();
         break;
       case "weave:notification:added":
         this.initNotifications();
         break;
+      case "weave:engine:sync:finish":
+        if (data != "clients") {
+          return;
+        }
+        this.onClientsSynced();
+        break;
     }
   },
 
   QueryInterface: XPCOMUtils.generateQI([
     Ci.nsIObserver,
     Ci.nsISupportsWeakReference
   ])
 };
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -1178,17 +1178,34 @@ var gBrowserInit = {
     Services.telemetry.getHistogramById("E10S_WINDOW").add(gMultiProcessBrowser);
 
     SidebarUI.startDelayedLoad();
 
     UpdateUrlbarSearchSplitterState();
 
     if (!(isBlankPageURL(uriToLoad) || uriToLoad == "about:privatebrowsing") ||
         !focusAndSelectUrlBar()) {
-      gBrowser.selectedBrowser.focus();
+      if (gBrowser.selectedBrowser.isRemoteBrowser) {
+        // If the initial browser is remote, in order to optimize for first paint,
+        // we'll defer switching focus to that browser until it has painted.
+        let focusedElement = document.commandDispatcher.focusedElement;
+        let mm = window.messageManager;
+        mm.addMessageListener("Browser:FirstPaint", function onFirstPaint() {
+          mm.removeMessageListener("Browser:FirstPaint", onFirstPaint);
+          // If focus didn't move while we were waiting for first paint, we're okay
+          // to move to the browser.
+          if (document.commandDispatcher.focusedElement == focusedElement) {
+            gBrowser.selectedBrowser.focus();
+          }
+        });
+      } else {
+        // If the initial browser is not remote, we can focus the browser
+        // immediately with no paint performance impact.
+        gBrowser.selectedBrowser.focus();
+      }
     }
 
     // Enable/Disable auto-hide tabbar
     gBrowser.tabContainer.updateVisibility();
 
     BookmarkingUI.init();
 
     gPrefService.addObserver(gHomeButton.prefDomain, gHomeButton, false);
@@ -1568,16 +1585,20 @@ if (AppConstants.platform == "macosx") {
     gSyncUI.init();
 
     if (AppConstants.E10S_TESTING_ONLY) {
       gRemoteTabsUI.init();
     }
   };
 
   gBrowserInit.nonBrowserWindowShutdown = function() {
+    let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"]
+                      .getService(Ci.nsIMacDockSupport);
+    dockSupport.dockMenu = null;
+
     // If nonBrowserWindowDelayedStartup hasn't run yet, we have no work to do -
     // just cancel the pending timeout and return;
     if (this._delayedStartupTimeoutId) {
       clearTimeout(this._delayedStartupTimeoutId);
       return;
     }
 
     BrowserOffline.uninit();
@@ -1815,16 +1836,30 @@ function loadOneOrMoreURIs(aURIString)
   try {
     gBrowser.loadTabs(aURIString.split("|"), false, true);
   }
   catch (e) {
   }
 }
 
 function focusAndSelectUrlBar() {
+  // In customize mode, the url bar is disabled. If a new tab is opened or the
+  // user switches to a different tab, this function gets called before we've
+  // finished leaving customize mode, and the url bar will still be disabled.
+  // We can't focus it when it's disabled, so we need to re-run ourselves when
+  // we've finished leaving customize mode.
+  if (CustomizationHandler.isExitingCustomizeMode) {
+    gNavToolbox.addEventListener("aftercustomization", function afterCustomize() {
+      gNavToolbox.removeEventListener("aftercustomization", afterCustomize);
+      focusAndSelectUrlBar();
+    });
+
+    return true;
+  }
+
   if (gURLBar) {
     if (window.fullScreen)
       FullScreen.showNavToolbox();
 
     gURLBar.select();
     if (document.activeElement == gURLBar.inputField)
       return true;
   }
@@ -3381,27 +3416,24 @@ const DOMLinkHandler = {
 
     gBrowser.setIcon(tab, aURL, aLoadingPrincipal);
     return true;
   },
 
   addSearch: function(aBrowser, aEngine, aURL) {
     let tab = gBrowser.getTabForBrowser(aBrowser);
     if (!tab)
-      return false;
+      return;
 
     BrowserSearch.addEngine(aBrowser, aEngine, makeURI(aURL));
   },
 }
 
 const BrowserSearch = {
   addEngine: function(browser, engine, uri) {
-    if (!this.searchBar)
-      return;
-
     // Check to see whether we've already added an engine with this title
     if (browser.engines) {
       if (browser.engines.some(e => e.title == engine.title))
         return;
     }
 
     var hidden = false;
     // If this engine (identified by title) is already in the list, add it
@@ -3429,21 +3461,17 @@ const BrowserSearch = {
 
   /**
    * Update the browser UI to show whether or not additional engines are
    * available when a page is loaded or the user switches tabs to a page that
    * has search engines.
    */
   updateOpenSearchBadge: function() {
     var searchBar = this.searchBar;
-
-    // The search bar binding might not be applied even though the element is
-    // in the document (e.g. when the navigation toolbar is hidden), so check
-    // for .textbox specifically.
-    if (!searchBar || !searchBar.textbox)
+    if (!searchBar)
       return;
 
     var engines = gBrowser.selectedBrowser.engines;
     if (engines && engines.length > 0)
       searchBar.setAttribute("addengines", "true");
     else
       searchBar.removeAttribute("addengines");
   },
@@ -3707,19 +3735,22 @@ function FillHistoryMenu(aParent) {
   {
     let count = sessionHistory.entries.length;
 
     if (!initial) {
       if (count <= 1) {
         // if there is only one entry now, close the popup.
         aParent.hidePopup();
         return;
-      } else if (!aParent.parentNode.open) {
+      } else if (aParent.id != "backForwardMenu" && !aParent.parentNode.open) {
         // if the popup wasn't open before, but now needs to be, reopen the menu.
-        // It should trigger FillHistoryMenu again.
+        // It should trigger FillHistoryMenu again. This might happen with the
+        // delay from click-and-hold menus but skip this for the context menu
+        // (backForwardMenu) rather than figuring out how the menu should be
+        // positioned and opened as it is an extreme edgecase.
         aParent.parentNode.open = true;
         return;
       }
     }
 
     let index = sessionHistory.index;
     let half_length = Math.floor(MAX_HISTORY_MENU_ITEMS / 2);
     let start = Math.max(index - half_length, 0);
@@ -6398,21 +6429,29 @@ var gIdentityHandler = {
    */
   _state: 0,
 
   get _isBroken() {
     return this._state & Ci.nsIWebProgressListener.STATE_IS_BROKEN;
   },
 
   get _isSecure() {
-    return this._state & Ci.nsIWebProgressListener.STATE_IS_SECURE;
+    // If a <browser> is included within a chrome document, then this._state
+    // will refer to the security state for the <browser> and not the top level
+    // document. In this case, don't upgrade the security state in the UI
+    // with the secure state of the embedded <browser>.
+    return !this._isURILoadedFromFile && this._state & Ci.nsIWebProgressListener.STATE_IS_SECURE;
   },
 
   get _isEV() {
-    return this._state & Ci.nsIWebProgressListener.STATE_IDENTITY_EV_TOPLEVEL;
+    // If a <browser> is included within a chrome document, then this._state
+    // will refer to the security state for the <browser> and not the top level
+    // document. In this case, don't upgrade the security state in the UI
+    // with the EV state of the embedded <browser>.
+    return !this._isURILoadedFromFile && this._state & Ci.nsIWebProgressListener.STATE_IDENTITY_EV_TOPLEVEL;
   },
 
   get _isMixedActiveContentLoaded() {
     return this._state & Ci.nsIWebProgressListener.STATE_LOADED_MIXED_ACTIVE_CONTENT;
   },
 
   get _isMixedActiveContentBlocked() {
     return this._state & Ci.nsIWebProgressListener.STATE_BLOCKED_MIXED_ACTIVE_CONTENT;
@@ -6594,31 +6633,20 @@ var gIdentityHandler = {
    *        Bitmask provided by nsIWebProgressListener.onSecurityChange.
    * @param uri
    *        nsIURI for which the identity UI should be displayed, already
    *        processed by nsIURIFixup.createExposableURI.
    */
   updateIdentity(state, uri) {
     let shouldHidePopup = this._uri && (this._uri.spec != uri.spec);
     this._state = state;
-    this._uri = uri;
 
     // Firstly, populate the state properties required to display the UI. See
     // the documentation of the individual properties for details.
-
-    try {
-      this._uri.host;
-      this._uriHasHost = true;
-    } catch (ex) {
-      this._uriHasHost = false;
-    }
-
-    let whitelist = /^(?:accounts|addons|cache|config|crashes|customizing|downloads|healthreport|home|license|newaddon|permissions|preferences|privatebrowsing|rights|sessionrestore|support|welcomeback)(?:[?#]|$)/i;
-    this._isSecureInternalUI = uri.schemeIs("about") && whitelist.test(uri.path);
-
+    this.setURI(uri);
     this._sslStatus = gBrowser.securityUI
                               .QueryInterface(Ci.nsISSLStatusProvider)
                               .SSLStatus;
     if (this._sslStatus) {
       this._sslStatus.QueryInterface(Ci.nsISSLStatus);
     }
 
     // Then, update the user interface with the available data.
@@ -6948,35 +6976,46 @@ var gIdentityHandler = {
     this._identityPopupContentOwner.textContent = owner;
     this._identityPopupContentSupp.textContent = supplemental;
     this._identityPopupContentVerif.textContent = verifier;
 
     // Update per-site permissions section.
     this.updateSitePermissions();
   },
 
-  get _isURILoadedFromFile() {
+  setURI(uri) {
+    this._uri = uri;
+
+    try {
+      this._uri.host;
+      this._uriHasHost = true;
+    } catch (ex) {
+      this._uriHasHost = false;
+    }
+
+    let whitelist = /^(?:accounts|addons|cache|config|crashes|customizing|downloads|healthreport|home|license|newaddon|permissions|preferences|privatebrowsing|rights|sessionrestore|support|welcomeback)(?:[?#]|$)/i;
+    this._isSecureInternalUI = uri.schemeIs("about") && whitelist.test(uri.path);
+
     // Create a channel for the sole purpose of getting the resolved URI
     // of the request to determine if it's loaded from the file system.
+    this._isURILoadedFromFile = false;
     let chanOptions = {uri: this._uri, loadUsingSystemPrincipal: true};
     let resolvedURI;
     try {
       resolvedURI = NetUtil.newChannel(chanOptions).URI;
       if (resolvedURI.schemeIs("jar")) {
         // Given a URI "jar:<jar-file-uri>!/<jar-entry>"
         // create a new URI using <jar-file-uri>!/<jar-entry>
         resolvedURI = NetUtil.newURI(resolvedURI.path);
       }
+      // Check the URI again after resolving.
+      this._isURILoadedFromFile = resolvedURI.schemeIs("file");
     } catch (ex) {
       // NetUtil's methods will throw for malformed URIs and the like
-      return false;
-    }
-
-    // Check the URI again after resolving.
-    return resolvedURI.schemeIs("file");
+    }
   },
 
   /**
    * Click handler for the identity-box element in primary chrome.
    */
   handleIdentityButtonEvent : function(event) {
     event.stopPropagation();
 
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -693,17 +693,17 @@
                      autocompletesearchparam="enable-actions"
                      autocompletepopup="PopupAutoCompleteRichResult"
                      completeselectedindex="true"
                      shrinkdelay="250"
                      tabscrolling="true"
                      showcommentcolumn="true"
                      showimagecolumn="true"
                      enablehistory="true"
-                     maxrows="6"
+                     maxrows="10"
                      newlines="stripsurroundingwhitespace"
                      ontextentered="this.handleCommand(param);"
                      ontextreverted="return this.handleRevert();"
                      pageproxystate="invalid"
                      onfocus="document.getElementById('identity-box').style.MozUserFocus= 'normal'"
                      onblur="setTimeout(() => { document.getElementById('identity-box').style.MozUserFocus = ''; }, 0);">
               <box id="notification-popup-box" hidden="true" align="center">
                 <image id="default-notification-icon" class="notification-anchor-icon" role="button"
--- a/browser/base/content/nsContextMenu.js
+++ b/browser/base/content/nsContextMenu.js
@@ -467,17 +467,17 @@ nsContextMenu.prototype = {
     var onMedia = (this.onVideo || this.onAudio);
     // Several mutually exclusive items... play/pause, mute/unmute, show/hide
     this.showItem("context-media-play",  onMedia && (this.target.paused || this.target.ended));
     this.showItem("context-media-pause", onMedia && !this.target.paused && !this.target.ended);
     this.showItem("context-media-mute",   onMedia && !this.target.muted);
     this.showItem("context-media-unmute", onMedia && this.target.muted);
     this.showItem("context-media-playbackrate", onMedia);
     this.showItem("context-media-showcontrols", onMedia && !this.target.controls);
-    this.showItem("context-media-hidecontrols", onMedia && this.target.controls);
+    this.showItem("context-media-hidecontrols", this.target.controls && (this.onVideo || (this.onAudio && !this.inSyntheticDoc)));
     this.showItem("context-video-fullscreen", this.onVideo && this.target.ownerDocument.fullscreenElement == null);
     var statsShowing = this.onVideo && this.target.mozMediaStatisticsShowing;
     this.showItem("context-video-showstats", this.onVideo && this.target.controls && !statsShowing);
     this.showItem("context-video-hidestats", this.onVideo && this.target.controls && statsShowing);
     this.showItem("context-media-eme-learnmore", this.onDRMMedia);
     this.showItem("context-media-eme-separator", this.onDRMMedia);
 
     // Disable them when there isn't a valid media source loaded.
--- a/browser/base/content/pageinfo/pageInfo.js
+++ b/browser/base/content/pageinfo/pageInfo.js
@@ -263,16 +263,17 @@ const nsICertificateDialogs = Components
 const CERTIFICATEDIALOGS_CONTRACTID = "@mozilla.org/nsCertificateDialogs;1"
 
 // clipboard helper
 function getClipboardHelper() {
     try {
         return Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
     } catch(e) {
         // do nothing, later code will handle the error
+        return null;
     }
 }
 const gClipboardHelper = getClipboardHelper();
 
 // Interface for image loading content
 const nsIImageLoadingContent = Components.interfaces.nsIImageLoadingContent;
 
 // namespaces, don't need all of these yet...
--- a/browser/base/content/sanitize.js
+++ b/browser/base/content/sanitize.js
@@ -244,17 +244,17 @@ Sanitizer.prototype = {
             // Iterate through the cookies and delete any created after our cutoff.
             let cookiesEnum = cookieMgr.enumerator;
             while (cookiesEnum.hasMoreElements()) {
               let cookie = cookiesEnum.getNext().QueryInterface(Ci.nsICookie2);
 
               if (cookie.creationTime > range[0]) {
                 // This cookie was created after our cutoff, clear it
                 cookieMgr.remove(cookie.host, cookie.name, cookie.path,
-                                 cookie.originAttributes, false);
+                                 false, cookie.originAttributes);
 
                 if (++yieldCounter % YIELD_PERIOD == 0) {
                   yield new Promise(resolve => setTimeout(resolve, 0)); // Don't block the main thread too long
                 }
               }
             }
           }
           else {
@@ -598,16 +598,17 @@ Sanitizer.prototype = {
       _canCloseWindow: function(aWindow) {
         if (aWindow.CanCloseWindow()) {
           // We already showed PermitUnload for the window, so let's
           // make sure we don't do it again when we actually close the
           // window.
           aWindow.skipNextCanClose = true;
           return true;
         }
+        return false;
       },
       _resetAllWindowClosures: function(aWindowList) {
         for (let win of aWindowList) {
           win.skipNextCanClose = false;
         }
       },
       clear: Task.async(function* () {
         // NB: this closes all *browser* windows, not other windows like the library, about window,
@@ -660,16 +661,17 @@ Sanitizer.prototype = {
             let docEl = newWindow.document.documentElement;
             let sizemode = docEl.getAttribute("sizemode");
             if (!newWindow.fullScreen && sizemode == "fullscreen") {
               docEl.setAttribute("sizemode", "normal");
               e.preventDefault();
               e.stopPropagation();
               return false;
             }
+            return undefined;
           }
           newWindow.addEventListener("fullscreen", onFullScreen);
         }
 
         let promiseReady = new Promise(resolve => {
           // Window creation and destruction is asynchronous. We need to wait
           // until all existing windows are fully closed, and the new window is
           // fully open, before continuing. Otherwise the rest of the sanitizer
--- a/browser/base/content/sync/genericChange.js
+++ b/browser/base/content/sync/genericChange.js
@@ -142,16 +142,17 @@ var Change = {
       case "UpdatePassphrase":
       case "ResetPassphrase":
         return this.doChangePassphrase();
         break;
       case "ChangePassword":
         return this.doChangePassword();
         break;
     }
+    return undefined;
   },
 
   doGeneratePassphrase: function () {
     let passphrase = Weave.Utils.generatePassphrase();
     this._passphraseBox.value = Weave.Utils.hyphenatePassphrase(passphrase);
     this._dialog.getButton("finish").disabled = false;
   },
 
--- a/browser/base/content/sync/setup.js
+++ b/browser/base/content/sync/setup.js
@@ -118,24 +118,24 @@ var gSyncSetup = {
                                            .getAttribute("accesskey");
     this._backButtonLabel = this.wizard.getButton("back").label;
     this._backButtonAccesskey = this.wizard.getButton("back")
                                            .getAttribute("accesskey");
   },
 
   startNewAccountSetup: function () {
     if (!Weave.Utils.ensureMPUnlocked())
-      return false;
+      return;
     this._settingUpNew = true;
     this.wizard.pageIndex = NEW_ACCOUNT_START_PAGE;
   },
 
   useExistingAccount: function () {
     if (!Weave.Utils.ensureMPUnlocked())
-      return false;
+      return;
     this._settingUpNew = false;
     if (this.wizardType == "pair") {
       // We're already pairing, so there's no point in pairing again.
       // Go straight to the manual login page.
       this.wizard.pageIndex = EXISTING_ACCOUNT_LOGIN_PAGE;
     } else {
       this.wizard.pageIndex = EXISTING_ACCOUNT_CONNECT_PAGE;
     }
--- a/browser/base/content/tab-content.js
+++ b/browser/base/content/tab-content.js
@@ -843,13 +843,40 @@ var RefreshBlocker = {
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener2,
                                          Ci.nsIWebProgressListener,
                                          Ci.nsISupportsWeakReference,
                                          Ci.nsISupports]),
 };
 
 RefreshBlocker.init();
 
+var UserContextIdNotifier = {
+  init() {
+    addEventListener("DOMContentLoaded", this);
+  },
+
+  uninit() {
+    removeEventListener("DOMContentLoaded", this);
+  },
+
+  handleEvent(aEvent) {
+    // When the first content is loaded, we want to inform the tabbrowser about
+    // the userContextId in use in order to update the UI correctly.
+    // Just because we cannot change the userContextId from an active docShell,
+    // we don't need to check DOMContentLoaded again.
+    this.uninit();
+    let userContextId = content.document.nodePrincipal.originAttributes.userContextId;
+    sendAsyncMessage("Browser:FirstContentLoaded", { userContextId });
+  }
+};
+
+UserContextIdNotifier.init();
+
 ExtensionContent.init(this);
 addEventListener("unload", () => {
   ExtensionContent.uninit(this);
   RefreshBlocker.uninit();
 });
+
+addEventListener("MozAfterPaint", function onFirstPaint() {
+  removeEventListener("MozAfterPaint", onFirstPaint);
+  sendAsyncMessage("Browser:FirstPaint");
+});
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -1819,25 +1819,120 @@
               b.setAttribute("nodefaultsrc", "true");
             }
 
             return b;
           ]]>
         </body>
       </method>
 
+      <method name="_linkBrowserToTab">
+        <parameter name="aTab"/>
+        <parameter name="aURI"/>
+        <parameter name="aParams"/>
+        <body>
+          <![CDATA[
+            "use strict";
+
+            let aReferrerURI          = aParams.referrerURI;
+            let aReferrerPolicy       = aParams.referrerPolicy;
+            let aCharset              = aParams.charset;
+            let aPostData             = aParams.postData;
+            let aAllowThirdPartyFixup = aParams.allowThirdPartyFixup;
+            let aFromExternal         = aParams.fromExternal;
+            let aAllowMixedContent    = aParams.allowMixedContent;
+            let aForceNotRemote       = aParams.forceNotRemote;
+            let aNoReferrer           = aParams.noReferrer;
+            let aUserContextId        = aParams.userContextId;
+
+            let uriIsAboutBlank = !aURI || aURI == "about:blank";
+
+            // The new browser should be remote if this is an e10s window an