Merge m-i to m-c
authorNigel Babu <nigelbabu@gmail.com>
Thu, 07 Aug 2014 08:47:18 +0530
changeset 198247 afcb3af79d09513b2772c629c23a0d9f7b7437b4
parent 198158 8c27495ddfdb169d7f365b735e5c223e5bad9aba (current diff)
parent 198246 3433804a42b16487c62d73a2e6058bb31f777574 (diff)
child 198266 1854d22e1d066e867b4caeb421374c329747542f
child 198297 797c49aa311c3b3c213fb77845c780cbfc994d0a
child 198375 48c9243ab15a240fe1f67f59a3103a1c7f93e43a
push id27264
push usernigelbabu@gmail.com
push dateThu, 07 Aug 2014 03:31:37 +0000
treeherdermozilla-central@afcb3af79d09 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone34.0a1
first release with
nightly linux32
afcb3af79d09 / 34.0a1 / 20140807030202 / files
nightly linux64
afcb3af79d09 / 34.0a1 / 20140807030202 / files
nightly mac
afcb3af79d09 / 34.0a1 / 20140807030202 / files
nightly win32
afcb3af79d09 / 34.0a1 / 20140807030202 / files
nightly win64
afcb3af79d09 / 34.0a1 / 20140807030202 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge m-i to m-c
b2g/branding/official/locales/Makefile.in
b2g/branding/unofficial/locales/Makefile.in
browser/branding/aurora/locales/Makefile.in
browser/branding/nightly/locales/Makefile.in
browser/branding/official/locales/Makefile.in
browser/branding/unofficial/locales/Makefile.in
config/nspr/Makefile.in
config/nspr/moz.build
configure.in
content/base/test/csp/file_csp_report.sjs
content/svg/content/moz.build
content/svg/content/src/DOMSVGAnimatedLengthList.cpp
content/svg/content/src/DOMSVGAnimatedLengthList.h
content/svg/content/src/DOMSVGAnimatedNumberList.cpp
content/svg/content/src/DOMSVGAnimatedNumberList.h
content/svg/content/src/DOMSVGLength.cpp
content/svg/content/src/DOMSVGLength.h
content/svg/content/src/DOMSVGLengthList.cpp
content/svg/content/src/DOMSVGLengthList.h
content/svg/content/src/DOMSVGNumber.cpp
content/svg/content/src/DOMSVGNumber.h
content/svg/content/src/DOMSVGNumberList.cpp
content/svg/content/src/DOMSVGNumberList.h
content/svg/content/src/DOMSVGPathSeg.cpp
content/svg/content/src/DOMSVGPathSeg.h
content/svg/content/src/DOMSVGPathSegList.cpp
content/svg/content/src/DOMSVGPathSegList.h
content/svg/content/src/DOMSVGPoint.cpp
content/svg/content/src/DOMSVGPoint.h
content/svg/content/src/DOMSVGPointList.cpp
content/svg/content/src/DOMSVGPointList.h
content/svg/content/src/DOMSVGStringList.cpp
content/svg/content/src/DOMSVGStringList.h
content/svg/content/src/DOMSVGTransformList.cpp
content/svg/content/src/DOMSVGTransformList.h
content/svg/content/src/SVGAElement.cpp
content/svg/content/src/SVGAElement.h
content/svg/content/src/SVGAltGlyphElement.cpp
content/svg/content/src/SVGAltGlyphElement.h
content/svg/content/src/SVGAngle.cpp
content/svg/content/src/SVGAngle.h
content/svg/content/src/SVGAnimateElement.cpp
content/svg/content/src/SVGAnimateElement.h
content/svg/content/src/SVGAnimateMotionElement.cpp
content/svg/content/src/SVGAnimateMotionElement.h
content/svg/content/src/SVGAnimateTransformElement.cpp
content/svg/content/src/SVGAnimateTransformElement.h
content/svg/content/src/SVGAnimatedAngle.cpp
content/svg/content/src/SVGAnimatedAngle.h
content/svg/content/src/SVGAnimatedBoolean.cpp
content/svg/content/src/SVGAnimatedBoolean.h
content/svg/content/src/SVGAnimatedEnumeration.cpp
content/svg/content/src/SVGAnimatedEnumeration.h
content/svg/content/src/SVGAnimatedInteger.cpp
content/svg/content/src/SVGAnimatedInteger.h
content/svg/content/src/SVGAnimatedLength.cpp
content/svg/content/src/SVGAnimatedLength.h
content/svg/content/src/SVGAnimatedLengthList.cpp
content/svg/content/src/SVGAnimatedLengthList.h
content/svg/content/src/SVGAnimatedNumber.cpp
content/svg/content/src/SVGAnimatedNumber.h
content/svg/content/src/SVGAnimatedNumberList.cpp
content/svg/content/src/SVGAnimatedNumberList.h
content/svg/content/src/SVGAnimatedPathSegList.cpp
content/svg/content/src/SVGAnimatedPathSegList.h
content/svg/content/src/SVGAnimatedPointList.cpp
content/svg/content/src/SVGAnimatedPointList.h
content/svg/content/src/SVGAnimatedPreserveAspectRatio.cpp
content/svg/content/src/SVGAnimatedPreserveAspectRatio.h
content/svg/content/src/SVGAnimatedRect.cpp
content/svg/content/src/SVGAnimatedRect.h
content/svg/content/src/SVGAnimatedString.cpp
content/svg/content/src/SVGAnimatedString.h
content/svg/content/src/SVGAnimatedTransformList.cpp
content/svg/content/src/SVGAnimatedTransformList.h
content/svg/content/src/SVGAnimationElement.cpp
content/svg/content/src/SVGAnimationElement.h
content/svg/content/src/SVGAttrValueWrapper.cpp
content/svg/content/src/SVGAttrValueWrapper.h
content/svg/content/src/SVGCircleElement.cpp
content/svg/content/src/SVGCircleElement.h
content/svg/content/src/SVGClipPathElement.cpp
content/svg/content/src/SVGClipPathElement.h
content/svg/content/src/SVGComponentTransferFunctionElement.h
content/svg/content/src/SVGContentUtils.cpp
content/svg/content/src/SVGContentUtils.h
content/svg/content/src/SVGDefsElement.cpp
content/svg/content/src/SVGDefsElement.h
content/svg/content/src/SVGDescElement.cpp
content/svg/content/src/SVGDescElement.h
content/svg/content/src/SVGElementFactory.cpp
content/svg/content/src/SVGElementFactory.h
content/svg/content/src/SVGEllipseElement.cpp
content/svg/content/src/SVGEllipseElement.h
content/svg/content/src/SVGFEBlendElement.cpp
content/svg/content/src/SVGFEBlendElement.h
content/svg/content/src/SVGFEColorMatrixElement.cpp
content/svg/content/src/SVGFEColorMatrixElement.h
content/svg/content/src/SVGFEComponentTransferElement.cpp
content/svg/content/src/SVGFEComponentTransferElement.h
content/svg/content/src/SVGFECompositeElement.cpp
content/svg/content/src/SVGFECompositeElement.h
content/svg/content/src/SVGFEConvolveMatrixElement.cpp
content/svg/content/src/SVGFEConvolveMatrixElement.h
content/svg/content/src/SVGFEDiffuseLightingElement.cpp
content/svg/content/src/SVGFEDiffuseLightingElement.h
content/svg/content/src/SVGFEDisplacementMapElement.cpp
content/svg/content/src/SVGFEDisplacementMapElement.h
content/svg/content/src/SVGFEDistantLightElement.cpp
content/svg/content/src/SVGFEDistantLightElement.h
content/svg/content/src/SVGFEDropShadowElement.cpp
content/svg/content/src/SVGFEDropShadowElement.h
content/svg/content/src/SVGFEFloodElement.cpp
content/svg/content/src/SVGFEFloodElement.h
content/svg/content/src/SVGFEGaussianBlurElement.cpp
content/svg/content/src/SVGFEGaussianBlurElement.h
content/svg/content/src/SVGFEImageElement.cpp
content/svg/content/src/SVGFEImageElement.h
content/svg/content/src/SVGFEMergeElement.cpp
content/svg/content/src/SVGFEMergeElement.h
content/svg/content/src/SVGFEMergeNodeElement.cpp
content/svg/content/src/SVGFEMergeNodeElement.h
content/svg/content/src/SVGFEMorphologyElement.cpp
content/svg/content/src/SVGFEMorphologyElement.h
content/svg/content/src/SVGFEOffsetElement.cpp
content/svg/content/src/SVGFEOffsetElement.h
content/svg/content/src/SVGFEPointLightElement.cpp
content/svg/content/src/SVGFEPointLightElement.h
content/svg/content/src/SVGFESpecularLightingElement.cpp
content/svg/content/src/SVGFESpecularLightingElement.h
content/svg/content/src/SVGFESpotLightElement.cpp
content/svg/content/src/SVGFESpotLightElement.h
content/svg/content/src/SVGFETileElement.cpp
content/svg/content/src/SVGFETileElement.h
content/svg/content/src/SVGFETurbulenceElement.cpp
content/svg/content/src/SVGFETurbulenceElement.h
content/svg/content/src/SVGFilterElement.cpp
content/svg/content/src/SVGFilterElement.h
content/svg/content/src/SVGForeignObjectElement.cpp
content/svg/content/src/SVGForeignObjectElement.h
content/svg/content/src/SVGFragmentIdentifier.cpp
content/svg/content/src/SVGFragmentIdentifier.h
content/svg/content/src/SVGGElement.cpp
content/svg/content/src/SVGGElement.h
content/svg/content/src/SVGGradientElement.cpp
content/svg/content/src/SVGGradientElement.h
content/svg/content/src/SVGGraphicsElement.cpp
content/svg/content/src/SVGGraphicsElement.h
content/svg/content/src/SVGIFrameElement.cpp
content/svg/content/src/SVGIFrameElement.h
content/svg/content/src/SVGIRect.h
content/svg/content/src/SVGImageElement.cpp
content/svg/content/src/SVGImageElement.h
content/svg/content/src/SVGIntegerPairSMILType.cpp
content/svg/content/src/SVGIntegerPairSMILType.h
content/svg/content/src/SVGLength.cpp
content/svg/content/src/SVGLength.h
content/svg/content/src/SVGLengthList.cpp
content/svg/content/src/SVGLengthList.h
content/svg/content/src/SVGLengthListSMILType.cpp
content/svg/content/src/SVGLengthListSMILType.h
content/svg/content/src/SVGLineElement.cpp
content/svg/content/src/SVGLineElement.h
content/svg/content/src/SVGMPathElement.cpp
content/svg/content/src/SVGMPathElement.h
content/svg/content/src/SVGMarkerElement.cpp
content/svg/content/src/SVGMarkerElement.h
content/svg/content/src/SVGMaskElement.cpp
content/svg/content/src/SVGMaskElement.h
content/svg/content/src/SVGMatrix.cpp
content/svg/content/src/SVGMatrix.h
content/svg/content/src/SVGMetadataElement.cpp
content/svg/content/src/SVGMetadataElement.h
content/svg/content/src/SVGMotionSMILAnimationFunction.cpp
content/svg/content/src/SVGMotionSMILAnimationFunction.h
content/svg/content/src/SVGMotionSMILAttr.cpp
content/svg/content/src/SVGMotionSMILAttr.h
content/svg/content/src/SVGMotionSMILPathUtils.cpp
content/svg/content/src/SVGMotionSMILPathUtils.h
content/svg/content/src/SVGMotionSMILType.cpp
content/svg/content/src/SVGMotionSMILType.h
content/svg/content/src/SVGNumberList.cpp
content/svg/content/src/SVGNumberList.h
content/svg/content/src/SVGNumberListSMILType.cpp
content/svg/content/src/SVGNumberListSMILType.h
content/svg/content/src/SVGNumberPairSMILType.cpp
content/svg/content/src/SVGNumberPairSMILType.h
content/svg/content/src/SVGOrientSMILType.cpp
content/svg/content/src/SVGOrientSMILType.h
content/svg/content/src/SVGPathData.cpp
content/svg/content/src/SVGPathData.h
content/svg/content/src/SVGPathElement.cpp
content/svg/content/src/SVGPathElement.h
content/svg/content/src/SVGPathSegListSMILType.cpp
content/svg/content/src/SVGPathSegListSMILType.h
content/svg/content/src/SVGPathSegUtils.cpp
content/svg/content/src/SVGPathSegUtils.h
content/svg/content/src/SVGPatternElement.cpp
content/svg/content/src/SVGPatternElement.h
content/svg/content/src/SVGPoint.h
content/svg/content/src/SVGPointList.cpp
content/svg/content/src/SVGPointList.h
content/svg/content/src/SVGPointListSMILType.cpp
content/svg/content/src/SVGPointListSMILType.h
content/svg/content/src/SVGPolygonElement.cpp
content/svg/content/src/SVGPolygonElement.h
content/svg/content/src/SVGPolylineElement.cpp
content/svg/content/src/SVGPolylineElement.h
content/svg/content/src/SVGPreserveAspectRatio.cpp
content/svg/content/src/SVGPreserveAspectRatio.h
content/svg/content/src/SVGRect.cpp
content/svg/content/src/SVGRect.h
content/svg/content/src/SVGRectElement.cpp
content/svg/content/src/SVGRectElement.h
content/svg/content/src/SVGSVGElement.cpp
content/svg/content/src/SVGSVGElement.h
content/svg/content/src/SVGScriptElement.cpp
content/svg/content/src/SVGScriptElement.h
content/svg/content/src/SVGSetElement.cpp
content/svg/content/src/SVGSetElement.h
content/svg/content/src/SVGStopElement.cpp
content/svg/content/src/SVGStopElement.h
content/svg/content/src/SVGStringList.cpp
content/svg/content/src/SVGStringList.h
content/svg/content/src/SVGStyleElement.cpp
content/svg/content/src/SVGStyleElement.h
content/svg/content/src/SVGSwitchElement.cpp
content/svg/content/src/SVGSwitchElement.h
content/svg/content/src/SVGSymbolElement.cpp
content/svg/content/src/SVGSymbolElement.h
content/svg/content/src/SVGTSpanElement.cpp
content/svg/content/src/SVGTSpanElement.h
content/svg/content/src/SVGTagList.h
content/svg/content/src/SVGTests.cpp
content/svg/content/src/SVGTests.h
content/svg/content/src/SVGTextContentElement.cpp
content/svg/content/src/SVGTextContentElement.h
content/svg/content/src/SVGTextElement.cpp
content/svg/content/src/SVGTextElement.h
content/svg/content/src/SVGTextPathElement.cpp
content/svg/content/src/SVGTextPathElement.h
content/svg/content/src/SVGTextPositioningElement.cpp
content/svg/content/src/SVGTextPositioningElement.h
content/svg/content/src/SVGTitleElement.cpp
content/svg/content/src/SVGTitleElement.h
content/svg/content/src/SVGTransform.cpp
content/svg/content/src/SVGTransform.h
content/svg/content/src/SVGTransformList.cpp
content/svg/content/src/SVGTransformList.h
content/svg/content/src/SVGTransformListParser.cpp
content/svg/content/src/SVGTransformListParser.h
content/svg/content/src/SVGTransformListSMILType.cpp
content/svg/content/src/SVGTransformListSMILType.h
content/svg/content/src/SVGTransformableElement.cpp
content/svg/content/src/SVGTransformableElement.h
content/svg/content/src/SVGUseElement.cpp
content/svg/content/src/SVGUseElement.h
content/svg/content/src/SVGViewBoxSMILType.cpp
content/svg/content/src/SVGViewBoxSMILType.h
content/svg/content/src/SVGViewElement.cpp
content/svg/content/src/SVGViewElement.h
content/svg/content/src/SVGZoomEvent.cpp
content/svg/content/src/SVGZoomEvent.h
content/svg/content/src/crashtests/307322-1.svg
content/svg/content/src/crashtests/327705-1.svg
content/svg/content/src/crashtests/336994-1.html
content/svg/content/src/crashtests/344888-1.svg
content/svg/content/src/crashtests/345445-1.svg
content/svg/content/src/crashtests/360836-1.svg
content/svg/content/src/crashtests/367357-1.xhtml
content/svg/content/src/crashtests/369051-1.svg
content/svg/content/src/crashtests/369249-1.svg
content/svg/content/src/crashtests/369291-1.svg
content/svg/content/src/crashtests/369291-2.svg
content/svg/content/src/crashtests/369568-1.svg
content/svg/content/src/crashtests/372046-1.svg
content/svg/content/src/crashtests/372046-2.svg
content/svg/content/src/crashtests/374882-1.svg
content/svg/content/src/crashtests/380101-1.svg
content/svg/content/src/crashtests/381777-1.svg
content/svg/content/src/crashtests/383685-1.svg
content/svg/content/src/crashtests/385096.html
content/svg/content/src/crashtests/385554-1.html
content/svg/content/src/crashtests/385554-2.xul
content/svg/content/src/crashtests/388712-1.svg
content/svg/content/src/crashtests/395616-1.html
content/svg/content/src/crashtests/396618-1.html
content/svg/content/src/crashtests/397017-1.html
content/svg/content/src/crashtests/397551-1.svg
content/svg/content/src/crashtests/397704-1.svg
content/svg/content/src/crashtests/398926-both-different.svg
content/svg/content/src/crashtests/398926-both-same.svg
content/svg/content/src/crashtests/398926-fill.svg
content/svg/content/src/crashtests/398926-stroke.svg
content/svg/content/src/crashtests/405639-1.svg
content/svg/content/src/crashtests/406361-1.html
content/svg/content/src/crashtests/409811-1.html
content/svg/content/src/crashtests/410659-1.svg
content/svg/content/src/crashtests/410659-2.svg
content/svg/content/src/crashtests/410659-3.svg
content/svg/content/src/crashtests/412104-1.svg
content/svg/content/src/crashtests/413174-1.svg
content/svg/content/src/crashtests/414188-1.svg
content/svg/content/src/crashtests/427325-1.svg
content/svg/content/src/crashtests/428228-1.svg
content/svg/content/src/crashtests/428841-1.svg
content/svg/content/src/crashtests/435209-1.svg
content/svg/content/src/crashtests/436418-mpathRoot-1.svg
content/svg/content/src/crashtests/448244-1.svg
content/svg/content/src/crashtests/466576-1.xhtml
content/svg/content/src/crashtests/499879-1.svg
content/svg/content/src/crashtests/535691-1.svg
content/svg/content/src/crashtests/539167-1.svg
content/svg/content/src/crashtests/573316-1.svg
content/svg/content/src/crashtests/579356-1.svg
content/svg/content/src/crashtests/579356-2.svg
content/svg/content/src/crashtests/595608-1.svg
content/svg/content/src/crashtests/601251-1.html
content/svg/content/src/crashtests/601406-1.svg
content/svg/content/src/crashtests/603145-1.svg
content/svg/content/src/crashtests/613899-1.svg
content/svg/content/src/crashtests/613899-2.svg
content/svg/content/src/crashtests/719779-1.svg
content/svg/content/src/crashtests/723441-1.html
content/svg/content/src/crashtests/723441-resource.svg
content/svg/content/src/crashtests/751515-1.svg
content/svg/content/src/crashtests/761507-1.svg
content/svg/content/src/crashtests/831561.html
content/svg/content/src/crashtests/837450-1.svg
content/svg/content/src/crashtests/842463-1.html
content/svg/content/src/crashtests/847138-1.svg
content/svg/content/src/crashtests/864509.svg
content/svg/content/src/crashtests/880544-1.svg
content/svg/content/src/crashtests/880544-2.svg
content/svg/content/src/crashtests/880544-3.svg
content/svg/content/src/crashtests/880544-4.svg
content/svg/content/src/crashtests/880544-5.svg
content/svg/content/src/crashtests/898915-1.svg
content/svg/content/src/crashtests/crashtests.list
content/svg/content/src/crashtests/zero-size-image.svg
content/svg/content/src/moz.build
content/svg/content/src/nsISVGPoint.cpp
content/svg/content/src/nsISVGPoint.h
content/svg/content/src/nsSVGAngle.cpp
content/svg/content/src/nsSVGAngle.h
content/svg/content/src/nsSVGAnimatedTransformList.cpp
content/svg/content/src/nsSVGAnimatedTransformList.h
content/svg/content/src/nsSVGAttrTearoffTable.h
content/svg/content/src/nsSVGBoolean.cpp
content/svg/content/src/nsSVGBoolean.h
content/svg/content/src/nsSVGClass.cpp
content/svg/content/src/nsSVGClass.h
content/svg/content/src/nsSVGDataParser.cpp
content/svg/content/src/nsSVGDataParser.h
content/svg/content/src/nsSVGElement.cpp
content/svg/content/src/nsSVGElement.h
content/svg/content/src/nsSVGEnum.cpp
content/svg/content/src/nsSVGEnum.h
content/svg/content/src/nsSVGFeatures.cpp
content/svg/content/src/nsSVGFeatures.h
content/svg/content/src/nsSVGFeaturesList.h
content/svg/content/src/nsSVGFilters.cpp
content/svg/content/src/nsSVGFilters.h
content/svg/content/src/nsSVGInteger.cpp
content/svg/content/src/nsSVGInteger.h
content/svg/content/src/nsSVGIntegerPair.cpp
content/svg/content/src/nsSVGIntegerPair.h
content/svg/content/src/nsSVGLength2.cpp
content/svg/content/src/nsSVGLength2.h
content/svg/content/src/nsSVGNumber2.cpp
content/svg/content/src/nsSVGNumber2.h
content/svg/content/src/nsSVGNumberPair.cpp
content/svg/content/src/nsSVGNumberPair.h
content/svg/content/src/nsSVGPathDataParser.cpp
content/svg/content/src/nsSVGPathDataParser.h
content/svg/content/src/nsSVGPathGeometryElement.cpp
content/svg/content/src/nsSVGPathGeometryElement.h
content/svg/content/src/nsSVGPolyElement.cpp
content/svg/content/src/nsSVGPolyElement.h
content/svg/content/src/nsSVGString.cpp
content/svg/content/src/nsSVGString.h
content/svg/content/src/nsSVGTransform.cpp
content/svg/content/src/nsSVGTransform.h
content/svg/content/src/nsSVGViewBox.cpp
content/svg/content/src/nsSVGViewBox.h
content/svg/content/test/MutationEventChecker.js
content/svg/content/test/a_href_destination.svg
content/svg/content/test/a_href_helper_01.svg
content/svg/content/test/a_href_helper_02_03.svg
content/svg/content/test/a_href_helper_04.svg
content/svg/content/test/animated-svg-image-helper.html
content/svg/content/test/animated-svg-image-helper.svg
content/svg/content/test/bbox-helper.svg
content/svg/content/test/bounds-helper.svg
content/svg/content/test/dataTypes-helper.svg
content/svg/content/test/fragments-helper.svg
content/svg/content/test/getBBox-method-helper.svg
content/svg/content/test/getCTM-helper.svg
content/svg/content/test/getSubStringLength-helper.svg
content/svg/content/test/matrixUtils.js
content/svg/content/test/mochitest.ini
content/svg/content/test/pointer-events.js
content/svg/content/test/scientific-helper.svg
content/svg/content/test/selectSubString-helper.svg
content/svg/content/test/switch-helper.svg
content/svg/content/test/test_SVGLengthList-2.xhtml
content/svg/content/test/test_SVGLengthList.xhtml
content/svg/content/test/test_SVGMatrix.xhtml
content/svg/content/test/test_SVGNumberList.xhtml
content/svg/content/test/test_SVGPathSegList.xhtml
content/svg/content/test/test_SVGPointList.xhtml
content/svg/content/test/test_SVGStringList.xhtml
content/svg/content/test/test_SVGStyleElement.xhtml
content/svg/content/test/test_SVGTransformList.xhtml
content/svg/content/test/test_SVGTransformListAddition.xhtml
content/svg/content/test/test_SVGUnitTypes.html
content/svg/content/test/test_SVG_namespace_ids.html
content/svg/content/test/test_SVGxxxList.xhtml
content/svg/content/test/test_SVGxxxListIndexing.xhtml
content/svg/content/test/test_a_href_01.xhtml
content/svg/content/test/test_a_href_02.xhtml
content/svg/content/test/test_animLengthObjectIdentity.xhtml
content/svg/content/test/test_animLengthReadonly.xhtml
content/svg/content/test/test_animLengthUnits.xhtml
content/svg/content/test/test_bbox-with-invalid-viewBox.xhtml
content/svg/content/test/test_bbox.xhtml
content/svg/content/test/test_bounds.html
content/svg/content/test/test_bug872812.html
content/svg/content/test/test_dataTypes.html
content/svg/content/test/test_dataTypesModEvents.html
content/svg/content/test/test_fragments.html
content/svg/content/test/test_getBBox-method.html
content/svg/content/test/test_getCTM.html
content/svg/content/test/test_getElementById.xhtml
content/svg/content/test/test_getSubStringLength.xhtml
content/svg/content/test/test_hasFeature.xhtml
content/svg/content/test/test_lang.xhtml
content/svg/content/test/test_length.xhtml
content/svg/content/test/test_lengthParsing.html
content/svg/content/test/test_non-scaling-stroke.html
content/svg/content/test/test_nonAnimStrings.xhtml
content/svg/content/test/test_onerror.xhtml
content/svg/content/test/test_pathAnimInterpolation.xhtml
content/svg/content/test/test_pathLength.html
content/svg/content/test/test_pathSeg.xhtml
content/svg/content/test/test_pointAtLength.xhtml
content/svg/content/test/test_pointer-events-1a.xhtml
content/svg/content/test/test_pointer-events-1b.xhtml
content/svg/content/test/test_pointer-events-2.xhtml
content/svg/content/test/test_pointer-events-3.xhtml
content/svg/content/test/test_pointer-events-4.xhtml
content/svg/content/test/test_pointer-events-5.xhtml
content/svg/content/test/test_pointer-events-6.xhtml
content/svg/content/test/test_scientific.html
content/svg/content/test/test_selectSubString.xhtml
content/svg/content/test/test_stroke-linecap-hit-testing.xhtml
content/svg/content/test/test_switch.xhtml
content/svg/content/test/test_text.html
content/svg/content/test/test_text_2.html
content/svg/content/test/test_text_dirty.html
content/svg/content/test/test_text_lengthAdjust.html
content/svg/content/test/test_text_scaled.html
content/svg/content/test/test_text_selection.html
content/svg/content/test/test_text_update.html
content/svg/content/test/test_transform.xhtml
content/svg/content/test/test_transformParsing.html
content/svg/content/test/test_valueAsString.xhtml
content/svg/content/test/test_valueLeaks.xhtml
content/svg/content/test/test_viewport.html
content/svg/content/test/test_zoom.xhtml
content/svg/content/test/text-helper-scaled.svg
content/svg/content/test/text-helper-selection.svg
content/svg/content/test/text-helper.svg
content/svg/content/test/viewport-helper.svg
content/svg/content/test/zoom-helper.svg
content/svg/document/src/SVGDocument.cpp
content/svg/document/src/SVGDocument.h
content/svg/document/src/moz.build
content/svg/moz.build
content/xul/content/crashtests/107518-1.xml
content/xul/content/crashtests/252448-1.xul
content/xul/content/crashtests/253479-1.xul
content/xul/content/crashtests/253479-2.xul
content/xul/content/crashtests/326644-1-inner.xul
content/xul/content/crashtests/326644-1.html
content/xul/content/crashtests/326644-2-inner.xul
content/xul/content/crashtests/326644-2.html
content/xul/content/crashtests/326864-1.xul
content/xul/content/crashtests/326875-1.xul
content/xul/content/crashtests/326881-1.xul
content/xul/content/crashtests/329982-1.xhtml
content/xul/content/crashtests/336096-1.xhtml
content/xul/content/crashtests/354611-1.html
content/xul/content/crashtests/360078-1.xhtml
content/xul/content/crashtests/360078-1xbl.xml
content/xul/content/crashtests/363791-1.xul
content/xul/content/crashtests/384740-1.xul
content/xul/content/crashtests/384877-1-inner.xul
content/xul/content/crashtests/384877-1.html
content/xul/content/crashtests/386947-1.xul
content/xul/content/crashtests/425821-1.xul
content/xul/content/crashtests/429085-1.xhtml
content/xul/content/crashtests/431906-1-inner.xul
content/xul/content/crashtests/431906-1.html
content/xul/content/crashtests/451311-1.xul
content/xul/content/crashtests/461917-1.xhtml
content/xul/content/crashtests/509719-1-overlay.xul
content/xul/content/crashtests/509719-1.xul
content/xul/content/crashtests/509719-2-overlay.xul
content/xul/content/crashtests/509719-2.xul
content/xul/content/crashtests/crashtests.list
content/xul/content/moz.build
content/xul/content/public/moz.build
content/xul/content/public/nsIXULContextMenuBuilder.idl
content/xul/content/src/moz.build
content/xul/content/src/nsXULContextMenuBuilder.cpp
content/xul/content/src/nsXULContextMenuBuilder.h
content/xul/content/src/nsXULElement.cpp
content/xul/content/src/nsXULElement.h
content/xul/content/src/nsXULPopupListener.cpp
content/xul/content/src/nsXULPopupListener.h
content/xul/content/test/398289-resource.xul
content/xul/content/test/chrome.ini
content/xul/content/test/file_bug236853.rdf
content/xul/content/test/mochitest.ini
content/xul/content/test/test_bug233643.xul
content/xul/content/test/test_bug236853.xul
content/xul/content/test/test_bug398289.html
content/xul/content/test/test_bug486990.xul
content/xul/content/test/test_bug749367.xul
content/xul/content/test/test_bug775972.xul
content/xul/content/test/test_import_xul_to_content.xul
content/xul/document/crashtests/326204-1.xul
content/xul/document/crashtests/344215-1.xul
content/xul/document/crashtests/386914-1-inner.xul
content/xul/document/crashtests/386914-1.html
content/xul/document/crashtests/428951-1.xul
content/xul/document/crashtests/468211-1.xul
content/xul/document/crashtests/468211-2-binding.xml
content/xul/document/crashtests/468211-2.xul
content/xul/document/crashtests/468211-3.xul
content/xul/document/crashtests/495635-1.xul
content/xul/document/crashtests/583230.xul
content/xul/document/crashtests/crashtests.list
content/xul/document/crashtests/extA1.xul
content/xul/document/crashtests/extA2.xul
content/xul/document/crashtests/extB1.xul
content/xul/document/moz.build
content/xul/document/public/moz.build
content/xul/document/public/nsIController.idl
content/xul/document/public/nsIControllers.idl
content/xul/document/public/nsIXULDocument.h
content/xul/document/public/nsIXULOverlayProvider.idl
content/xul/document/src/XULDocument.cpp
content/xul/document/src/XULDocument.h
content/xul/document/src/moz.build
content/xul/document/src/nsForwardReference.h
content/xul/document/src/nsXULCommandDispatcher.cpp
content/xul/document/src/nsXULCommandDispatcher.h
content/xul/document/src/nsXULContentSink.cpp
content/xul/document/src/nsXULContentSink.h
content/xul/document/src/nsXULControllers.cpp
content/xul/document/src/nsXULControllers.h
content/xul/document/src/nsXULPrototypeCache.cpp
content/xul/document/src/nsXULPrototypeCache.h
content/xul/document/src/nsXULPrototypeDocument.cpp
content/xul/document/src/nsXULPrototypeDocument.h
content/xul/document/test/bug497875-iframe.xul
content/xul/document/test/chrome.ini
content/xul/document/test/overlay1_bug335375.xul
content/xul/document/test/overlay2_bug335375.xul
content/xul/document/test/overlay_640158.xul
content/xul/document/test/test_bug199692.xul
content/xul/document/test/test_bug311681.xul
content/xul/document/test/test_bug335375.xul
content/xul/document/test/test_bug391002.xul
content/xul/document/test/test_bug403868.xul
content/xul/document/test/test_bug414907.xul
content/xul/document/test/test_bug418216.xul
content/xul/document/test/test_bug445177.xul
content/xul/document/test/test_bug449457.xul
content/xul/document/test/test_bug468176.xul
content/xul/document/test/test_bug497875.xul
content/xul/document/test/test_bug583948.xul
content/xul/document/test/test_bug640158_overlay_persist.xul
content/xul/document/test/test_bug757137.xul
content/xul/document/test/window_bug583948.xul
content/xul/document/test/window_bug757137.xul
content/xul/moz.build
content/xul/templates/moz.build
content/xul/templates/public/moz.build
content/xul/templates/public/nsIXULBuilderListener.idl
content/xul/templates/public/nsIXULSortService.idl
content/xul/templates/public/nsIXULTemplateBuilder.idl
content/xul/templates/public/nsIXULTemplateQueryProcessor.idl
content/xul/templates/public/nsIXULTemplateResult.idl
content/xul/templates/public/nsIXULTemplateRuleFilter.idl
content/xul/templates/src/crashtests/257752-1-recursion.rdf
content/xul/templates/src/crashtests/257752-1-recursion.xul
content/xul/templates/src/crashtests/329884-1.xul
content/xul/templates/src/crashtests/330012-1.rdf
content/xul/templates/src/crashtests/330012-1.xul
content/xul/templates/src/crashtests/404346-1.xul
content/xul/templates/src/crashtests/415019-1.xul
content/xul/templates/src/crashtests/417840-1.xul
content/xul/templates/src/crashtests/424418-1.xul
content/xul/templates/src/crashtests/crashtests.list
content/xul/templates/src/moz.build
content/xul/templates/src/nsContentSupportMap.cpp
content/xul/templates/src/nsContentSupportMap.h
content/xul/templates/src/nsContentTestNode.cpp
content/xul/templates/src/nsContentTestNode.h
content/xul/templates/src/nsInstantiationNode.cpp
content/xul/templates/src/nsInstantiationNode.h
content/xul/templates/src/nsRDFBinding.cpp
content/xul/templates/src/nsRDFBinding.h
content/xul/templates/src/nsRDFConInstanceTestNode.cpp
content/xul/templates/src/nsRDFConInstanceTestNode.h
content/xul/templates/src/nsRDFConMemberTestNode.cpp
content/xul/templates/src/nsRDFConMemberTestNode.h
content/xul/templates/src/nsRDFPropertyTestNode.cpp
content/xul/templates/src/nsRDFPropertyTestNode.h
content/xul/templates/src/nsRDFQuery.cpp
content/xul/templates/src/nsRDFQuery.h
content/xul/templates/src/nsRDFTestNode.h
content/xul/templates/src/nsResourceSet.cpp
content/xul/templates/src/nsResourceSet.h
content/xul/templates/src/nsRuleNetwork.cpp
content/xul/templates/src/nsRuleNetwork.h
content/xul/templates/src/nsTemplateMap.h
content/xul/templates/src/nsTemplateMatch.cpp
content/xul/templates/src/nsTemplateMatch.h
content/xul/templates/src/nsTemplateRule.cpp
content/xul/templates/src/nsTemplateRule.h
content/xul/templates/src/nsTreeRows.cpp
content/xul/templates/src/nsTreeRows.h
content/xul/templates/src/nsXMLBinding.cpp
content/xul/templates/src/nsXMLBinding.h
content/xul/templates/src/nsXULContentBuilder.cpp
content/xul/templates/src/nsXULContentUtils.cpp
content/xul/templates/src/nsXULContentUtils.h
content/xul/templates/src/nsXULResourceList.h
content/xul/templates/src/nsXULSortService.cpp
content/xul/templates/src/nsXULSortService.h
content/xul/templates/src/nsXULTemplateBuilder.cpp
content/xul/templates/src/nsXULTemplateBuilder.h
content/xul/templates/src/nsXULTemplateQueryProcessorRDF.cpp
content/xul/templates/src/nsXULTemplateQueryProcessorRDF.h
content/xul/templates/src/nsXULTemplateQueryProcessorStorage.cpp
content/xul/templates/src/nsXULTemplateQueryProcessorStorage.h
content/xul/templates/src/nsXULTemplateQueryProcessorXML.cpp
content/xul/templates/src/nsXULTemplateQueryProcessorXML.h
content/xul/templates/src/nsXULTemplateResultRDF.cpp
content/xul/templates/src/nsXULTemplateResultRDF.h
content/xul/templates/src/nsXULTemplateResultSetRDF.cpp
content/xul/templates/src/nsXULTemplateResultSetRDF.h
content/xul/templates/src/nsXULTemplateResultStorage.cpp
content/xul/templates/src/nsXULTemplateResultStorage.h
content/xul/templates/src/nsXULTemplateResultXML.cpp
content/xul/templates/src/nsXULTemplateResultXML.h
content/xul/templates/src/nsXULTreeBuilder.cpp
content/xul/templates/tests/chrome/animals.rdf
content/xul/templates/tests/chrome/animals.sqlite
content/xul/templates/tests/chrome/animals.xml
content/xul/templates/tests/chrome/bug441785-1.rdf
content/xul/templates/tests/chrome/bug441785-2.rdf
content/xul/templates/tests/chrome/chrome.ini
content/xul/templates/tests/chrome/file_bug330010.rdf
content/xul/templates/tests/chrome/templates_shared.js
content/xul/templates/tests/chrome/test_bug329335.xul
content/xul/templates/tests/chrome/test_bug330010.xul
content/xul/templates/tests/chrome/test_bug397148.xul
content/xul/templates/tests/chrome/test_bug441785.xul
content/xul/templates/tests/chrome/test_bug476634.xul
content/xul/templates/tests/chrome/test_sortservice.xul
content/xul/templates/tests/chrome/test_tmpl_bindingsextendedsyntax.xul
content/xul/templates/tests/chrome/test_tmpl_bindingsmultiple.xul
content/xul/templates/tests/chrome/test_tmpl_bindingsquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_bindingsreversed.xul
content/xul/templates/tests/chrome/test_tmpl_bindingssameastriple.xul
content/xul/templates/tests/chrome/test_tmpl_containerandmembervariablechanged.xul
content/xul/templates/tests/chrome/test_tmpl_containervariablechanged.xul
content/xul/templates/tests/chrome/test_tmpl_containmentattribute.xul
content/xul/templates/tests/chrome/test_tmpl_defaultcontainervariableisuri.xul
content/xul/templates/tests/chrome/test_tmpl_errors.xul
content/xul/templates/tests/chrome/test_tmpl_extendedsyntax.xul
content/xul/templates/tests/chrome/test_tmpl_extendedsyntaxemptyconditions.xul
content/xul/templates/tests/chrome/test_tmpl_extendedsyntaxotherrefvariable.xul
content/xul/templates/tests/chrome/test_tmpl_extendedsyntaxremoveunmatched.xul
content/xul/templates/tests/chrome/test_tmpl_extendedsyntaxsimplevariablesubstitution.xul
content/xul/templates/tests/chrome/test_tmpl_extendedsyntaxtworulesrecurse.xul
content/xul/templates/tests/chrome/test_tmpl_extendedsyntaxusinganinterveningcontainer.xul
content/xul/templates/tests/chrome/test_tmpl_extendedvariablesubstitution.xul
content/xul/templates/tests/chrome/test_tmpl_gridelement.xul
content/xul/templates/tests/chrome/test_tmpl_htmlelementextendedsyntaxwithbinding.xul
content/xul/templates/tests/chrome/test_tmpl_htmlelementquerysyntaxrecursive.xul
content/xul/templates/tests/chrome/test_tmpl_htmlelementquerysyntaxwithmultiplerules.xul
content/xul/templates/tests/chrome/test_tmpl_htmlelementsimplesyntax.xul
content/xul/templates/tests/chrome/test_tmpl_htmlelementsimplesyntaxusingatextnode.xul
content/xul/templates/tests/chrome/test_tmpl_invalidqp.xul
content/xul/templates/tests/chrome/test_tmpl_listboxelement.xul
content/xul/templates/tests/chrome/test_tmpl_literalasmember.xul
content/xul/templates/tests/chrome/test_tmpl_membervariablechanged.xul
content/xul/templates/tests/chrome/test_tmpl_membervariablesubstitution.xul
content/xul/templates/tests/chrome/test_tmpl_menuelement.xul
content/xul/templates/tests/chrome/test_tmpl_menuelementrecursive.xul
content/xul/templates/tests/chrome/test_tmpl_menulistelement.xul
content/xul/templates/tests/chrome/test_tmpl_mixedsyntaxiscontainer.xul
content/xul/templates/tests/chrome/test_tmpl_mixedsyntaxiscontainerisempty.xul
content/xul/templates/tests/chrome/test_tmpl_mixedsyntaxisempty.xul
content/xul/templates/tests/chrome/test_tmpl_noaction.xul
content/xul/templates/tests/chrome/test_tmpl_noactionuriattribute.xul
content/xul/templates/tests/chrome/test_tmpl_parentconditions.xul
content/xul/templates/tests/chrome/test_tmpl_parentcontenttag.xul
content/xul/templates/tests/chrome/test_tmpl_parentsimplesyntax.xul
content/xul/templates/tests/chrome/test_tmpl_query3triples.xul
content/xul/templates/tests/chrome/test_tmpl_query3tripleswherecontains.xul
content/xul/templates/tests/chrome/test_tmpl_querymember3tripleswhereequals.xul
content/xul/templates/tests/chrome/test_tmpl_querymemberandtwotriples.xul
content/xul/templates/tests/chrome/test_tmpl_querymembertriplemembertriple.xul
content/xul/templates/tests/chrome/test_tmpl_queryresourcematch.xul
content/xul/templates/tests/chrome/test_tmpl_queryreversetriple.xul
content/xul/templates/tests/chrome/test_tmpl_queryselfwithtriple.xul
content/xul/templates/tests/chrome/test_tmpl_querysetone.xul
content/xul/templates/tests/chrome/test_tmpl_querysettwo.xul
content/xul/templates/tests/chrome/test_tmpl_querysettwowithcondition.xul
content/xul/templates/tests/chrome/test_tmpl_querysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_querysyntaxmultiplerules.xul
content/xul/templates/tests/chrome/test_tmpl_querysyntaxmultiplerulesfirstconditionall.xul
content/xul/templates/tests/chrome/test_tmpl_querysyntaxmultiplerulestwoconditions.xul
content/xul/templates/tests/chrome/test_tmpl_querytripleandmembermerge.xul
content/xul/templates/tests/chrome/test_tmpl_querytripleobjecttosubject.xul
content/xul/templates/tests/chrome/test_tmpl_querytwomembers.xul
content/xul/templates/tests/chrome/test_tmpl_querytwomembersfiltered.xul
content/xul/templates/tests/chrome/test_tmpl_querytwotriples.xul
content/xul/templates/tests/chrome/test_tmpl_queryupwardsmember.xul
content/xul/templates/tests/chrome/test_tmpl_queryupwardsmembertripleandfilteringtriple.xul
content/xul/templates/tests/chrome/test_tmpl_querywithemptyconditions.xul
content/xul/templates/tests/chrome/test_tmpl_referenceasmember.xul
content/xul/templates/tests/chrome/test_tmpl_regenerate.xul
content/xul/templates/tests/chrome/test_tmpl_selfgenerationextendedsyntax.xul
content/xul/templates/tests/chrome/test_tmpl_selfgenerationsimplesyntax.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxenclosedinacontainer.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxenclosedinacontainerwitharule.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxfilter.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxfilterwithmultiplerules.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxfilterwithrule.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxiteratingoverasinglevalue.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxusinganinterveningcontainer.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingatextnode.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingcontainerasthegenerationelement.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingdontrecurse.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingrecursivegeneration.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingrecursivegenerationagain.xul
content/xul/templates/tests/chrome/test_tmpl_simplesyntaxwithtwovariablesused.xul
content/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutioncaretsatbeginningandend.xul
content/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutioncaretsubstitution.xul
content/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionnovariable.xul
content/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionquestionmarkaspartofvariable.xul
content/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionquestionmarksubstitution.xul
content/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutiontextandvariable.xul
content/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionvariableandtextconcatenated.xul
content/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionvariablesconcatenated.xul
content/xul/templates/tests/chrome/test_tmpl_sortascendinginteger.xul
content/xul/templates/tests/chrome/test_tmpl_sortascendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sortascendingtworulesquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sortascendingtworuleswithcontainerquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sortascendingtworuleswithdifferentcontainerquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sortdescendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sortquerymemberandtwotriples.xul
content/xul/templates/tests/chrome/test_tmpl_sortresource2descendingsimplesyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sortresource2settopredicateascendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sortresource2settopredicatedescendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sortresourceascendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sortresourcedescendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sortresourcesettopredicateascendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sortresourcesettopredicatedescendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sorttworesourcesasstringsettopredicatedescendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sorttworesourcessettopredicateascendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sorttwovariablesascendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sorttwovariablesascendingsimplesyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sorttwovariablesdescendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_sortunknownascendingquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_storage_bad_parameters.xul
content/xul/templates/tests/chrome/test_tmpl_storage_bad_parameters_2.xul
content/xul/templates/tests/chrome/test_tmpl_storage_bad_parameters_3.xul
content/xul/templates/tests/chrome/test_tmpl_storage_baddatasource.xul
content/xul/templates/tests/chrome/test_tmpl_storage_badquery.xul
content/xul/templates/tests/chrome/test_tmpl_storage_dynamicparameters.xul
content/xul/templates/tests/chrome/test_tmpl_storage_listbox.xul
content/xul/templates/tests/chrome/test_tmpl_storage_multiqueries.xul
content/xul/templates/tests/chrome/test_tmpl_storage_parameters.xul
content/xul/templates/tests/chrome/test_tmpl_storage_rule.xul
content/xul/templates/tests/chrome/test_tmpl_storage_simple.xul
content/xul/templates/tests/chrome/test_tmpl_storage_sortintegerasc.xul
content/xul/templates/tests/chrome/test_tmpl_storage_sortintegerdesc.xul
content/xul/templates/tests/chrome/test_tmpl_storage_sortstringasc.xul
content/xul/templates/tests/chrome/test_tmpl_storage_sortstringdesc.xul
content/xul/templates/tests/chrome/test_tmpl_storage_tree.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntax.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxnotrecursive.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxnotrecursivetreebuilder.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxrecursive.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxrecursivemultiplerules.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxrecursivemultiplerulestreebuilder.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxrecursivetreebuilder.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxtreebuilder.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementsimplesyntaxnotrecursive.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementsimplesyntaxnotrecursivetreebuilder.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementsimplesyntaxrecursive.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementsimplesyntaxrecursivetreebuilder.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementtreecell.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementtreecellsortascending.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementtreecellsortascendingtreebuilder.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementtreecelltreebuilder.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementtreeitemonly.xul
content/xul/templates/tests/chrome/test_tmpl_treeelementtreeitemsortascending.xul
content/xul/templates/tests/chrome/test_tmpl_twogenerationnodes.xul
content/xul/templates/tests/chrome/test_tmpl_whereafterignorecase.xul
content/xul/templates/tests/chrome/test_tmpl_whereafterlowercase.xul
content/xul/templates/tests/chrome/test_tmpl_whereafternegation.xul
content/xul/templates/tests/chrome/test_tmpl_whereafteruppercase.xul
content/xul/templates/tests/chrome/test_tmpl_wherebeforeignorecase.xul
content/xul/templates/tests/chrome/test_tmpl_wherebeforelowercase.xul
content/xul/templates/tests/chrome/test_tmpl_wherebeforenegation.xul
content/xul/templates/tests/chrome/test_tmpl_wherebeforeuppercase.xul
content/xul/templates/tests/chrome/test_tmpl_wherecontains.xul
content/xul/templates/tests/chrome/test_tmpl_wherecontainsignorecase.xul
content/xul/templates/tests/chrome/test_tmpl_wherecontainsnegation.xul
content/xul/templates/tests/chrome/test_tmpl_wherecontainsnumber.xul
content/xul/templates/tests/chrome/test_tmpl_wherecontainsnumberstring.xul
content/xul/templates/tests/chrome/test_tmpl_wherecontainsresource.xul
content/xul/templates/tests/chrome/test_tmpl_wherecontainstwo.xul
content/xul/templates/tests/chrome/test_tmpl_whereendswith.xul
content/xul/templates/tests/chrome/test_tmpl_whereendswithignorecase.xul
content/xul/templates/tests/chrome/test_tmpl_whereendswithnegation.xul
content/xul/templates/tests/chrome/test_tmpl_whereequals.xul
content/xul/templates/tests/chrome/test_tmpl_whereequalsignorecase.xul
content/xul/templates/tests/chrome/test_tmpl_whereequalsmultiple.xul
content/xul/templates/tests/chrome/test_tmpl_whereequalsmultiplenegation.xul
content/xul/templates/tests/chrome/test_tmpl_whereequalsmultiplenegationignorecase.xul
content/xul/templates/tests/chrome/test_tmpl_whereequalsnegation.xul
content/xul/templates/tests/chrome/test_tmpl_whereequalsnegationignorecase.xul
content/xul/templates/tests/chrome/test_tmpl_whereequalsnegationwrongcase.xul
content/xul/templates/tests/chrome/test_tmpl_whereequalsnumber.xul
content/xul/templates/tests/chrome/test_tmpl_whereequalsothervariable.xul
content/xul/templates/tests/chrome/test_tmpl_whereequalsresource.xul
content/xul/templates/tests/chrome/test_tmpl_whereequalssamevariable.xul
content/xul/templates/tests/chrome/test_tmpl_whereequalswrongcase.xul
content/xul/templates/tests/chrome/test_tmpl_wheregreater.xul
content/xul/templates/tests/chrome/test_tmpl_wheregreaternegation.xul
content/xul/templates/tests/chrome/test_tmpl_wheregreaternegationstring.xul
content/xul/templates/tests/chrome/test_tmpl_wheregreaterstring.xul
content/xul/templates/tests/chrome/test_tmpl_whereless.xul
content/xul/templates/tests/chrome/test_tmpl_wherelessnegation.xul
content/xul/templates/tests/chrome/test_tmpl_wherelessnegationstring.xul
content/xul/templates/tests/chrome/test_tmpl_wherelessstring.xul
content/xul/templates/tests/chrome/test_tmpl_wherenorel.xul
content/xul/templates/tests/chrome/test_tmpl_wherenosubject.xul
content/xul/templates/tests/chrome/test_tmpl_wherenovalue.xul
content/xul/templates/tests/chrome/test_tmpl_wherestartswith.xul
content/xul/templates/tests/chrome/test_tmpl_wherestartswithignorecase.xul
content/xul/templates/tests/chrome/test_tmpl_wherestartswithmultiple.xul
content/xul/templates/tests/chrome/test_tmpl_wherestartswithnegation.xul
content/xul/templates/tests/chrome/test_tmpl_wherestartswithunknownvariable.xul
content/xul/templates/tests/chrome/test_tmpl_wherestartswithvariable.xul
content/xul/templates/tests/chrome/test_tmpl_wheresubjectequalsvariable.xul
content/xul/templates/tests/chrome/test_tmpl_wheresubjectstartswithvariable.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerysimple.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerywithassign.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerywithassignmentandcondition.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerywithassignmentandconditiondontrecurse.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerywithbindinginbindings.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerywithbindinginrule.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerywithdifferentmember.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerywithinlinedata.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerywithinlinedatawithmultiplequeries.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerywithmultiplequeries.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerywithothertypes.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerywithsort.xul
content/xul/templates/tests/chrome/test_tmpl_xmlquerywithsortotherfield.xul
db/sqlite3/src/sqlite-version.py
db/sqlite3/src/sqlite.rc
dom/locales/Makefile.in
intl/icu/Makefile.in
layout/reftests/svg/as-image/canvas-drawImage-alpha-1-ref.html
layout/reftests/svg/as-image/canvas-drawImage-alpha-1.html
layout/reftests/svg/as-image/canvas-drawImage-alpha-2-ref.html
layout/reftests/svg/as-image/canvas-drawImage-alpha-2.html
layout/reftests/svg/as-image/squaredCircle-transparent.svg
mobile/android/branding/aurora/locales/Makefile.in
mobile/android/branding/beta/locales/Makefile.in
mobile/android/branding/nightly/locales/Makefile.in
mobile/android/branding/official/locales/Makefile.in
mobile/android/branding/unofficial/locales/Makefile.in
netwerk/locales/Makefile.in
security/build/Makefile.in
security/build/moz.build
security/build/nspr-dummy.def
security/build/nss.def
security/build/nss.mk
security/manager/locales/Makefile.in
services/sync/locales/Makefile.in
webapprt/locales/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
@@ -327,14 +327,14 @@ endif
 ifeq ($(MOZ_WIDGET_TOOLKIT),gtk3)
 toolkit/library/target: widget/gtk/mozgtk/gtk3/target
 endif
 ifdef MOZ_LDAP_XPCOM
 toolkit/library/target: ../ldap/target
 endif
 ifndef MOZ_FOLD_LIBS
 ifndef MOZ_NATIVE_SQLITE
-security/build/target: db/sqlite3/src/target
+config/external/nss/target: db/sqlite3/src/target
 endif
 endif
 ifeq ($(MOZ_REPLACE_MALLOC_LINKAGE),dummy library)
 mozglue/build/target: memory/replace/dummy/target
 endif
--- a/accessible/jsat/AccessFu.jsm
+++ b/accessible/jsat/AccessFu.jsm
@@ -1,32 +1,32 @@
 /* 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/. */
 
+/* global AccessFu, Components, Utils, PrefCache, Logger, Services,
+          PointerAdapter, dump, Presentation, Rect */
+/* exported AccessFu */
+
 'use strict';
 
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-const Cu = Components.utils;
-const Cr = Components.results;
+const {utils: Cu, interfaces: Ci} = Components;
 
-this.EXPORTED_SYMBOLS = ['AccessFu'];
+this.EXPORTED_SYMBOLS = ['AccessFu']; // jshint ignore:line
 
 Cu.import('resource://gre/modules/Services.jsm');
-
 Cu.import('resource://gre/modules/accessibility/Utils.jsm');
 
-const ACCESSFU_DISABLE = 0;
+const ACCESSFU_DISABLE = 0; // jshint ignore:line
 const ACCESSFU_ENABLE = 1;
 const ACCESSFU_AUTO = 2;
 
 const SCREENREADER_SETTING = 'accessibility.screenreader';
 
-this.AccessFu = {
+this.AccessFu = { // jshint ignore:line
   /**
    * Initialize chrome-layer accessibility functionality.
    * If accessibility is enabled on the platform, then a special accessibility
    * mode is started.
    */
   attach: function attach(aWindow) {
     Utils.init(aWindow);
 
@@ -72,27 +72,28 @@ this.AccessFu = {
     Utils.uninit();
   },
 
   /**
    * Start AccessFu mode, this primarily means controlling the virtual cursor
    * with arrow keys.
    */
   _enable: function _enable() {
-    if (this._enabled)
+    if (this._enabled) {
       return;
+    }
     this._enabled = true;
 
     Cu.import('resource://gre/modules/accessibility/Utils.jsm');
     Cu.import('resource://gre/modules/accessibility/PointerAdapter.jsm');
     Cu.import('resource://gre/modules/accessibility/Presentation.jsm');
 
     Logger.info('Enabled');
 
-    for each (let mm in Utils.AllMessageManagers) {
+    for (let mm of Utils.AllMessageManagers) {
       this._addMessageListeners(mm);
       this._loadFrameScript(mm);
     }
 
     // Add stylesheet
     let stylesheetURL = 'chrome://global/content/accessibility/AccessFu.css';
     let stylesheet = Utils.win.document.createProcessingInstruction(
       'xml-stylesheet', 'href="' + stylesheetURL + '" type="text/css"');
@@ -130,40 +131,39 @@ this.AccessFu = {
     Utils.win.addEventListener('TabSelect', this);
 
     if (this.readyCallback) {
       this.readyCallback();
       delete this.readyCallback;
     }
 
     if (Utils.MozBuildApp !== 'mobile/android') {
-      this.announce(
-        Utils.stringBundle.GetStringFromName('screenReaderStarted'));
+      this.announce('screenReaderStarted');
     }
   },
 
   /**
    * Disable AccessFu and return to default interaction mode.
    */
   _disable: function _disable() {
-    if (!this._enabled)
+    if (!this._enabled) {
       return;
+    }
 
     this._enabled = false;
 
     Logger.info('Disabled');
 
     Utils.win.document.removeChild(this.stylesheet.get());
 
     if (Utils.MozBuildApp !== 'mobile/android') {
-      this.announce(
-        Utils.stringBundle.GetStringFromName('screenReaderStopped'));
+      this.announce('screenReaderStopped');
     }
 
-    for each (let mm in Utils.AllMessageManagers) {
+    for (let mm of Utils.AllMessageManagers) {
       mm.sendAsyncMessage('AccessFu:Stop');
       this._removeMessageListeners(mm);
     }
 
     this.Input.stop();
     Output.stop();
     PointerAdapter.stop();
 
@@ -191,20 +191,21 @@ this.AccessFu = {
 
   _enableOrDisable: function _enableOrDisable() {
     try {
       if (!this._activatePref) {
         return;
       }
       let activatePref = this._activatePref.value;
       if (activatePref == ACCESSFU_ENABLE ||
-          this._systemPref && activatePref == ACCESSFU_AUTO)
+          this._systemPref && activatePref == ACCESSFU_AUTO) {
         this._enable();
-      else
+      } else {
         this._disable();
+      }
     } catch (x) {
       dump('Error ' + x.message + ' ' + x.fileName + ':' + x.lineNumber);
     }
   },
 
   receiveMessage: function receiveMessage(aMessage) {
     Logger.debug(() => {
       return ['Recieved', aMessage.name, JSON.stringify(aMessage.json)];
@@ -229,19 +230,20 @@ this.AccessFu = {
         break;
       case 'AccessFu:DoScroll':
         this.Input.doScroll(aMessage.json);
         break;
     }
   },
 
   _output: function _output(aPresentationData, aBrowser) {
-    for each (let presenter in aPresentationData) {
-      if (!presenter)
+    for (let presenter of aPresentationData) {
+      if (!presenter) {
         continue;
+      }
 
       try {
         Output[presenter.type](presenter.details, aBrowser);
       } catch (x) {
         Logger.logException(x);
       }
     }
 
@@ -387,79 +389,82 @@ this.AccessFu = {
   // Layerview is focused
   _focused: false,
 
   // Keep track of message managers tha already have a 'content-script.js'
   // injected.
   _processedMessageManagers: [],
 
   /**
-   * Adjusts the given bounds relative to the given browser. Converts from screen
-   * or device pixels to either device or CSS pixels.
+   * Adjusts the given bounds relative to the given browser. Converts from
+   * screen or device pixels to either device or CSS pixels.
    * @param {Rect} aJsonBounds the bounds to adjust
    * @param {browser} aBrowser the browser we want the bounds relative to
    * @param {bool} aToCSSPixels whether to convert to CSS pixels (as opposed to
    *               device pixels)
    * @param {bool} aFromDevicePixels whether to convert from device pixels (as
    *               opposed to screen pixels)
    */
-  adjustContentBounds: function(aJsonBounds, aBrowser, aToCSSPixels, aFromDevicePixels) {
-    let bounds = new Rect(aJsonBounds.left, aJsonBounds.top,
-                          aJsonBounds.right - aJsonBounds.left,
-                          aJsonBounds.bottom - aJsonBounds.top);
-    let win = Utils.win;
-    let dpr = win.devicePixelRatio;
-    let vp = Utils.getViewport(win);
-    let offset = { left: -win.mozInnerScreenX, top: -win.mozInnerScreenY };
+  adjustContentBounds:
+    function(aJsonBounds, aBrowser, aToCSSPixels, aFromDevicePixels) {
+      let bounds = new Rect(aJsonBounds.left, aJsonBounds.top,
+                            aJsonBounds.right - aJsonBounds.left,
+                            aJsonBounds.bottom - aJsonBounds.top);
+      let win = Utils.win;
+      let dpr = win.devicePixelRatio;
+      let vp = Utils.getViewport(win);
+      let offset = { left: -win.mozInnerScreenX, top: -win.mozInnerScreenY };
 
-    if (!aBrowser.contentWindow) {
-      // OOP browser, add offset of browser.
-      // The offset of the browser element in relation to its parent window.
-      let clientRect = aBrowser.getBoundingClientRect();
-      let win = aBrowser.ownerDocument.defaultView;
-      offset.left += clientRect.left + win.mozInnerScreenX;
-      offset.top += clientRect.top + win.mozInnerScreenY;
-    }
+      if (!aBrowser.contentWindow) {
+        // OOP browser, add offset of browser.
+        // The offset of the browser element in relation to its parent window.
+        let clientRect = aBrowser.getBoundingClientRect();
+        let win = aBrowser.ownerDocument.defaultView;
+        offset.left += clientRect.left + win.mozInnerScreenX;
+        offset.top += clientRect.top + win.mozInnerScreenY;
+      }
 
-    // Here we scale from screen pixels to layout device pixels by dividing by
-    // the resolution (caused by pinch-zooming). The resolution is the viewport
-    // zoom divided by the devicePixelRatio. If there's no viewport, then we're
-    // on a platform without pinch-zooming and we can just ignore this.
-    if (!aFromDevicePixels && vp) {
-      bounds = bounds.scale(vp.zoom / dpr, vp.zoom / dpr);
-    }
+      // Here we scale from screen pixels to layout device pixels by dividing by
+      // the resolution (caused by pinch-zooming). The resolution is the
+      // viewport zoom divided by the devicePixelRatio. If there's no viewport,
+      // then we're on a platform without pinch-zooming and we can just ignore
+      // this.
+      if (!aFromDevicePixels && vp) {
+        bounds = bounds.scale(vp.zoom / dpr, vp.zoom / dpr);
+      }
 
-    // Add the offset; the offset is in CSS pixels, so multiply the
-    // devicePixelRatio back in before adding to preserve unit consistency.
-    bounds = bounds.translate(offset.left * dpr, offset.top * dpr);
+      // Add the offset; the offset is in CSS pixels, so multiply the
+      // devicePixelRatio back in before adding to preserve unit consistency.
+      bounds = bounds.translate(offset.left * dpr, offset.top * dpr);
 
-    // If we want to get to CSS pixels from device pixels, this needs to be
-    // further divided by the devicePixelRatio due to widget scaling.
-    if (aToCSSPixels) {
-      bounds = bounds.scale(1 / dpr, 1 / dpr);
+      // If we want to get to CSS pixels from device pixels, this needs to be
+      // further divided by the devicePixelRatio due to widget scaling.
+      if (aToCSSPixels) {
+        bounds = bounds.scale(1 / dpr, 1 / dpr);
+      }
+
+      return bounds.expandToIntegers();
     }
-
-    return bounds.expandToIntegers();
-  }
 };
 
 var Output = {
   brailleState: {
     startOffset: 0,
     endOffset: 0,
     text: '',
     selectionStart: 0,
     selectionEnd: 0,
 
     init: function init(aOutput) {
       if (aOutput && 'output' in aOutput) {
         this.startOffset = aOutput.startOffset;
         this.endOffset = aOutput.endOffset;
-        // We need to append a space at the end so that the routing key corresponding
-        // to the end of the output (i.e. the space) can be hit to move the caret there.
+        // We need to append a space at the end so that the routing key
+        // corresponding to the end of the output (i.e. the space) can be hit to
+        // move the caret there.
         this.text = aOutput.output + ' ';
         this.selectionStart = typeof aOutput.selectionStart === 'number' ?
                               aOutput.selectionStart : this.selectionStart;
         this.selectionEnd = typeof aOutput.selectionEnd === 'number' ?
                             aOutput.selectionEnd : this.selectionEnd;
 
         return { text: this.text,
                  selectionStart: this.selectionStart,
@@ -497,137 +502,60 @@ var Output = {
     },
 
     adjustSelection: function adjustSelection(aSelection) {
       let braille = {};
 
       braille.startOffset = this.startOffset;
       braille.endOffset = this.endOffset;
       braille.text = this.text;
-      this.selectionStart = braille.selectionStart = aSelection.selectionStart + this.startOffset;
-      this.selectionEnd = braille.selectionEnd = aSelection.selectionEnd + this.startOffset;
+      this.selectionStart = braille.selectionStart =
+        aSelection.selectionStart + this.startOffset;
+      this.selectionEnd = braille.selectionEnd =
+        aSelection.selectionEnd + this.startOffset;
 
       return braille;
     }
   },
 
-  speechHelper: {
-    EARCONS: ['virtual_cursor_move.ogg',
-              'virtual_cursor_key.ogg',
-              'clicked.ogg'],
-
-    earconBuffers: {},
-
-    inited: false,
-
-    webspeechEnabled: false,
-
-    deferredOutputs: [],
-
-    init: function init() {
-      let window = Utils.win;
-      this.webspeechEnabled = !!window.speechSynthesis &&
-        !!window.SpeechSynthesisUtterance;
-
-      let settingsToGet = 2;
-      let settingsCallback = (aName, aSetting) => {
-        if (--settingsToGet > 0) {
-          return;
-        }
-
-        this.inited = true;
-
-        for (let actions of this.deferredOutputs) {
-          this.output(actions);
-        }
-      };
-
-      this._volumeSetting = new SettingCache(
-        'accessibility.screenreader-volume', settingsCallback,
-        { defaultValue: 1, callbackNow: true, callbackOnce: true });
-      this._rateSetting = new SettingCache(
-        'accessibility.screenreader-rate', settingsCallback,
-        { defaultValue: 0, callbackNow: true, callbackOnce: true });
-
-      for (let earcon of this.EARCONS) {
-        let earconName = /(^.*)\..*$/.exec(earcon)[1];
-        this.earconBuffers[earconName] = new WeakMap();
-        this.earconBuffers[earconName].set(
-          window, new window.Audio('chrome://global/content/accessibility/' + earcon));
-      }
-    },
-
-    uninit: function uninit() {
-      if (this.inited) {
-        delete this._volumeSetting;
-        delete this._rateSetting;
-      }
-      this.inited = false;
-    },
-
-    output: function output(aActions) {
-      if (!this.inited) {
-        this.deferredOutputs.push(aActions);
-        return;
-      }
-
-      for (let action of aActions) {
-        let window = Utils.win;
-        Logger.debug('tts.' + action.method, '"' + action.data + '"',
-                     JSON.stringify(action.options));
-
-        if (!action.options.enqueue && this.webspeechEnabled) {
-          window.speechSynthesis.cancel();
-        }
-
-        if (action.method === 'speak' && this.webspeechEnabled) {
-          let utterance = new window.SpeechSynthesisUtterance(action.data);
-          let requestedRate = this._rateSetting.value;
-          utterance.volume = this._volumeSetting.value;
-          utterance.rate = requestedRate >= 0 ?
-            requestedRate + 1 : 1 / (Math.abs(requestedRate) + 1);
-          window.speechSynthesis.speak(utterance);
-        } else if (action.method === 'playEarcon') {
-          let audioBufferWeakMap = this.earconBuffers[action.data];
-          if (audioBufferWeakMap) {
-            let node = audioBufferWeakMap.get(window).cloneNode(false);
-            node.volume = this._volumeSetting.value;
-            node.play();
-          }
-        }
-      }
-    }
-  },
-
   start: function start() {
     Cu.import('resource://gre/modules/Geometry.jsm');
-    this.speechHelper.init();
   },
 
   stop: function stop() {
     if (this.highlightBox) {
       Utils.win.document.documentElement.removeChild(this.highlightBox.get());
       delete this.highlightBox;
     }
-
-    if (this.announceBox) {
-      Utils.win.document.documentElement.removeChild(this.announceBox.get());
-      delete this.announceBox;
-    }
-
-    this.speechHelper.uninit();
   },
 
-  Speech: function Speech(aDetails, aBrowser) {
-    this.speechHelper.output(aDetails.actions);
+  B2G: function B2G(aDetails) {
+    let details = {
+      type: 'accessfu-output',
+      details: JSON.stringify(aDetails)
+    };
+    let window = Utils.win;
+    if (window.shell) {
+      // On B2G device.
+      window.shell.sendChromeEvent(details);
+    } else {
+      // Dispatch custom event to have support for desktop and screen reader
+      // emulator add-on.
+      window.dispatchEvent(new window.CustomEvent(details.type, {
+        bubbles: true,
+        cancelable: true,
+        detail: details
+      }));
+    }
   },
 
-  Visual: function Visual(aDetails, aBrowser) {
-    switch (aDetails.method) {
-      case 'showBounds':
+  Visual: function Visual(aDetail, aBrowser) {
+    switch (aDetail.eventType) {
+      case 'viewport-change':
+      case 'vc-change':
       {
         let highlightBox = null;
         if (!this.highlightBox) {
           // Add highlight box
           highlightBox = Utils.win.document.
             createElementNS('http://www.w3.org/1999/xhtml', 'div');
           Utils.win.document.documentElement.appendChild(highlightBox);
           highlightBox.id = 'virtual-cursor-box';
@@ -638,66 +566,35 @@ var Output = {
           inset.id = 'virtual-cursor-inset';
 
           highlightBox.appendChild(inset);
           this.highlightBox = Cu.getWeakReference(highlightBox);
         } else {
           highlightBox = this.highlightBox.get();
         }
 
-        let padding = aDetails.padding;
-        let r = AccessFu.adjustContentBounds(aDetails.bounds, aBrowser, true);
+        let padding = aDetail.padding;
+        let r = AccessFu.adjustContentBounds(aDetail.bounds, aBrowser, true);
 
         // First hide it to avoid flickering when changing the style.
         highlightBox.style.display = 'none';
         highlightBox.style.top = (r.top - padding) + 'px';
         highlightBox.style.left = (r.left - padding) + 'px';
         highlightBox.style.width = (r.width + padding*2) + 'px';
         highlightBox.style.height = (r.height + padding*2) + 'px';
         highlightBox.style.display = 'block';
 
         break;
       }
-      case 'hideBounds':
+      case 'tabstate-change':
       {
         let highlightBox = this.highlightBox ? this.highlightBox.get() : null;
-        if (highlightBox)
+        if (highlightBox) {
           highlightBox.style.display = 'none';
-        break;
-      }
-      case 'showAnnouncement':
-      {
-        let announceBox = this.announceBox ? this.announceBox.get() : null;
-        if (!announceBox) {
-          announceBox = Utils.win.document.
-            createElementNS('http://www.w3.org/1999/xhtml', 'div');
-          announceBox.id = 'announce-box';
-          Utils.win.document.documentElement.appendChild(announceBox);
-          this.announceBox = Cu.getWeakReference(announceBox);
         }
-
-        announceBox.innerHTML = '<div>' + aDetails.text + '</div>';
-        announceBox.classList.add('showing');
-
-        if (this._announceHideTimeout)
-          Utils.win.clearTimeout(this._announceHideTimeout);
-
-        if (aDetails.duration > 0)
-          this._announceHideTimeout = Utils.win.setTimeout(
-            function () {
-              announceBox.classList.remove('showing');
-              this._announceHideTimeout = 0;
-            }.bind(this), aDetails.duration);
-        break;
-      }
-      case 'hideAnnouncement':
-      {
-        let announceBox = this.announceBox ? this.announceBox.get() : null;
-        if (announceBox)
-          announceBox.classList.remove('showing');
         break;
       }
     }
   },
 
   get androidBridge() {
     delete this.androidBridge;
     if (Utils.MozBuildApp === 'mobile/android') {
@@ -711,42 +608,43 @@ var Output = {
   Android: function Android(aDetails, aBrowser) {
     const ANDROID_VIEW_TEXT_CHANGED = 0x10;
     const ANDROID_VIEW_TEXT_SELECTION_CHANGED = 0x2000;
 
     if (!this.androidBridge) {
       return;
     }
 
-    for each (let androidEvent in aDetails) {
+    for (let androidEvent of aDetails) {
       androidEvent.type = 'Accessibility:Event';
-      if (androidEvent.bounds)
-        androidEvent.bounds = AccessFu.adjustContentBounds(androidEvent.bounds, aBrowser);
+      if (androidEvent.bounds) {
+        androidEvent.bounds = AccessFu.adjustContentBounds(
+          androidEvent.bounds, aBrowser);
+      }
 
       switch(androidEvent.eventType) {
         case ANDROID_VIEW_TEXT_CHANGED:
-          androidEvent.brailleOutput = this.brailleState.adjustText(androidEvent.text);
+          androidEvent.brailleOutput = this.brailleState.adjustText(
+            androidEvent.text);
           break;
         case ANDROID_VIEW_TEXT_SELECTION_CHANGED:
-          androidEvent.brailleOutput = this.brailleState.adjustSelection(androidEvent.brailleOutput);
+          androidEvent.brailleOutput = this.brailleState.adjustSelection(
+            androidEvent.brailleOutput);
           break;
         default:
-          androidEvent.brailleOutput = this.brailleState.init(androidEvent.brailleOutput);
+          androidEvent.brailleOutput = this.brailleState.init(
+            androidEvent.brailleOutput);
           break;
       }
       this.androidBridge.handleGeckoMessage(androidEvent);
     }
   },
 
-  Haptic: function Haptic(aDetails, aBrowser) {
-    Utils.win.navigator.vibrate(aDetails.pattern);
-  },
-
-  Braille: function Braille(aDetails, aBrowser) {
-    Logger.debug('Braille output: ' + aDetails.text);
+  Braille: function Braille(aDetails) {
+    Logger.debug('Braille output: ' + aDetails.output);
   }
 };
 
 var Input = {
   editState: {},
 
   start: function start() {
     // XXX: This is too disruptive on desktop for now.
@@ -844,74 +742,83 @@ var Input = {
         break;
     }
   },
 
   _handleKeypress: function _handleKeypress(aEvent) {
     let target = aEvent.target;
 
     // Ignore keys with modifiers so the content could take advantage of them.
-    if (aEvent.ctrlKey || aEvent.altKey || aEvent.metaKey)
+    if (aEvent.ctrlKey || aEvent.altKey || aEvent.metaKey) {
       return;
+    }
 
     switch (aEvent.keyCode) {
       case 0:
         // an alphanumeric key was pressed, handle it separately.
         // If it was pressed with either alt or ctrl, just pass through.
         // If it was pressed with meta, pass the key on without the meta.
-        if (this.editState.editing)
+        if (this.editState.editing) {
           return;
+        }
 
         let key = String.fromCharCode(aEvent.charCode);
         try {
           let [methodName, rule] = this.keyMap[key];
           this.moveCursor(methodName, rule, 'keyboard');
         } catch (x) {
           return;
         }
         break;
       case aEvent.DOM_VK_RIGHT:
         if (this.editState.editing) {
-          if (!this.editState.atEnd)
+          if (!this.editState.atEnd) {
             // Don't move forward if caret is not at end of entry.
             // XXX: Fix for rtl
             return;
-          else
+          } else {
             target.blur();
+          }
         }
-        this.moveCursor(aEvent.shiftKey ? 'moveLast' : 'moveNext', 'Simple', 'keyboard');
+        this.moveCursor(aEvent.shiftKey ?
+          'moveLast' : 'moveNext', 'Simple', 'keyboard');
         break;
       case aEvent.DOM_VK_LEFT:
         if (this.editState.editing) {
-          if (!this.editState.atStart)
+          if (!this.editState.atStart) {
             // Don't move backward if caret is not at start of entry.
             // XXX: Fix for rtl
             return;
-          else
+          } else {
             target.blur();
+          }
         }
-        this.moveCursor(aEvent.shiftKey ? 'moveFirst' : 'movePrevious', 'Simple', 'keyboard');
+        this.moveCursor(aEvent.shiftKey ?
+          'moveFirst' : 'movePrevious', 'Simple', 'keyboard');
         break;
       case aEvent.DOM_VK_UP:
         if (this.editState.multiline) {
-          if (!this.editState.atStart)
+          if (!this.editState.atStart) {
             // Don't blur content if caret is not at start of text area.
             return;
-          else
+          } else {
             target.blur();
+          }
         }
 
-        if (Utils.MozBuildApp == 'mobile/android')
+        if (Utils.MozBuildApp == 'mobile/android') {
           // Return focus to native Android browser chrome.
           Services.androidBridge.handleGeckoMessage(
               { type: 'ToggleChrome:Focus' });
+        }
         break;
       case aEvent.DOM_VK_RETURN:
-        if (this.editState.editing)
+        if (this.editState.editing) {
           return;
+        }
         this.activateCurrent();
         break;
     default:
       return;
     }
 
     aEvent.preventDefault();
     aEvent.stopPropagation();
@@ -975,17 +882,18 @@ var Input = {
 
   sendContextMenuMessage: function sendContextMenuMessage() {
     let mm = Utils.getMessageManager(Utils.CurrentBrowser);
     mm.sendAsyncMessage('AccessFu:ContextMenu', {});
   },
 
   activateContextMenu: function activateContextMenu(aDetails) {
     if (Utils.MozBuildApp === 'mobile/android') {
-      let p = AccessFu.adjustContentBounds(aDetails.bounds, Utils.CurrentBrowser,
+      let p = AccessFu.adjustContentBounds(aDetails.bounds,
+                                           Utils.CurrentBrowser,
                                            true, true).center();
       Services.obs.notifyObservers(null, 'Gesture:LongPress',
                                    JSON.stringify({x: p.x, y: p.y}));
     }
   },
 
   setEditState: function setEditState(aEditState) {
     this.editState = aEditState;
@@ -994,17 +902,18 @@ var Input = {
   // XXX: This is here for backwards compatability with screen reader simulator
   // it should be removed when the extension is updated on amo.
   scroll: function scroll(aPage, aHorizontal) {
     this.sendScrollMessage(aPage, aHorizontal);
   },
 
   sendScrollMessage: function sendScrollMessage(aPage, aHorizontal) {
     let mm = Utils.getMessageManager(Utils.CurrentBrowser);
-    mm.sendAsyncMessage('AccessFu:Scroll', {page: aPage, horizontal: aHorizontal, origin: 'top'});
+    mm.sendAsyncMessage('AccessFu:Scroll',
+      {page: aPage, horizontal: aHorizontal, origin: 'top'});
   },
 
   doScroll: function doScroll(aDetails) {
     let horizontal = aDetails.horizontal;
     let page = aDetails.page;
     let p = AccessFu.adjustContentBounds(aDetails.bounds, Utils.CurrentBrowser,
                                          true, true).center();
     Utils.winUtils.sendWheelEvent(p.x, p.y,
@@ -1053,23 +962,25 @@ var Input = {
   },
 
   quickNavMode: {
     get current() {
       return this.modes[this._currentIndex];
     },
 
     previous: function quickNavMode_previous() {
-      if (--this._currentIndex < 0)
+      if (--this._currentIndex < 0) {
         this._currentIndex = this.modes.length - 1;
+      }
     },
 
     next: function quickNavMode_next() {
-      if (++this._currentIndex >= this.modes.length)
+      if (++this._currentIndex >= this.modes.length) {
         this._currentIndex = 0;
+      }
     },
 
     updateModes: function updateModes(aModes) {
       if (aModes) {
         this.modes = aModes.split(',');
       } else {
         this.modes = [];
       }
--- a/accessible/jsat/OutputGenerator.jsm
+++ b/accessible/jsat/OutputGenerator.jsm
@@ -1,60 +1,54 @@
 /* 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/. */
 
+/* global Components, XPCOMUtils, Utils, PrefCache, States, Roles, Logger */
+/* exported UtteranceGenerator, BrailleGenerator */
+
 'use strict';
 
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-const Cu = Components.utils;
-const Cr = Components.results;
+const {utils: Cu, interfaces: Ci} = Components;
 
 const INCLUDE_DESC = 0x01;
 const INCLUDE_NAME = 0x02;
 const INCLUDE_VALUE = 0x04;
-const INCLUDE_CUSTOM = 0x08;
 const NAME_FROM_SUBTREE_RULE = 0x10;
 const IGNORE_EXPLICIT_NAME = 0x20;
 
 const OUTPUT_DESC_FIRST = 0;
 const OUTPUT_DESC_LAST = 1;
 
 Cu.import('resource://gre/modules/XPCOMUtils.jsm');
-XPCOMUtils.defineLazyModuleGetter(this, 'Utils',
+XPCOMUtils.defineLazyModuleGetter(this, 'Utils', // jshint ignore:line
   'resource://gre/modules/accessibility/Utils.jsm');
-XPCOMUtils.defineLazyModuleGetter(this, 'PrefCache',
-  'resource://gre/modules/accessibility/Utils.jsm');
-XPCOMUtils.defineLazyModuleGetter(this, 'Logger',
+XPCOMUtils.defineLazyModuleGetter(this, 'PrefCache', // jshint ignore:line
   'resource://gre/modules/accessibility/Utils.jsm');
-XPCOMUtils.defineLazyModuleGetter(this, 'PluralForm',
-  'resource://gre/modules/PluralForm.jsm');
-XPCOMUtils.defineLazyModuleGetter(this, 'Roles',
+XPCOMUtils.defineLazyModuleGetter(this, 'Logger', // jshint ignore:line
+  'resource://gre/modules/accessibility/Utils.jsm');
+XPCOMUtils.defineLazyModuleGetter(this, 'Roles', // jshint ignore:line
   'resource://gre/modules/accessibility/Constants.jsm');
-XPCOMUtils.defineLazyModuleGetter(this, 'States',
+XPCOMUtils.defineLazyModuleGetter(this, 'States', // jshint ignore:line
   'resource://gre/modules/accessibility/Constants.jsm');
 
-this.EXPORTED_SYMBOLS = ['UtteranceGenerator', 'BrailleGenerator'];
+this.EXPORTED_SYMBOLS = ['UtteranceGenerator', 'BrailleGenerator']; // jshint ignore:line
 
-this.OutputGenerator = {
+let OutputGenerator = {
 
   defaultOutputOrder: OUTPUT_DESC_LAST,
 
   /**
    * Generates output for a PivotContext.
    * @param {PivotContext} aContext object that generates and caches
    *    context information for a given accessible and its relationship with
    *    another accessible.
-   * @return {Object} An object that neccessarily has an output property which
-   *    is an array of strings. Depending on the utterance order,
-   *    the strings describe the context for an accessible object either
+   * @return {Object} An array of speech data. Depending on the utterance order,
+   *    the data describes the context for an accessible object either
    *    starting from the accessible's ancestry or accessible's subtree.
-   *    The object may also have properties specific to the type of output
-   *    generated.
    */
   genForContext: function genForContext(aContext) {
     let output = [];
     let self = this;
     let addOutput = function addOutput(aAccessible) {
       output.push.apply(output, self.genForObject(aAccessible, aContext));
     };
     let ignoreSubtree = function ignoreSubtree(aAccessible) {
@@ -68,96 +62,99 @@ this.OutputGenerator = {
                !(nameRule & IGNORE_EXPLICIT_NAME))));
     };
 
     let contextStart = this._getContextStart(aContext);
 
     if (this.outputOrder === OUTPUT_DESC_FIRST) {
       contextStart.forEach(addOutput);
       addOutput(aContext.accessible);
-      [addOutput(node) for
-        (node of aContext.subtreeGenerator(true, ignoreSubtree))];
+      [addOutput(node) for // jshint ignore:line
+        (node of aContext.subtreeGenerator(true, ignoreSubtree))]; // jshint ignore:line
     } else {
-      [addOutput(node) for
-        (node of aContext.subtreeGenerator(false, ignoreSubtree))];
+      [addOutput(node) for // jshint ignore:line
+        (node of aContext.subtreeGenerator(false, ignoreSubtree))]; // jshint ignore:line
       addOutput(aContext.accessible);
       contextStart.reverse().forEach(addOutput);
     }
 
-    // Clean up the white space.
-    let trimmed;
-    output = [trimmed for (word of output) if (trimmed = word.trim())];
-    return {output: output};
+    return output;
   },
 
 
   /**
    * Generates output for an object.
    * @param {nsIAccessible} aAccessible accessible object to generate output
    *    for.
    * @param {PivotContext} aContext object that generates and caches
    *    context information for a given accessible and its relationship with
    *    another accessible.
-   * @return {Array} Two string array. The first string describes the object
-   *    and its state. The second string is the object's name. Whether the
-   *    object's description or it's role is included is determined by
-   *    {@link roleRuleMap}.
+   * @return {Array} A 2 element array of speech data. The first element
+   *    describes the object and its state. The second element is the object's
+   *    name. Whether the object's description or it's role is included is
+   *    determined by {@link roleRuleMap}.
    */
   genForObject: function genForObject(aAccessible, aContext) {
     let roleString = Utils.AccRetrieval.getStringRole(aAccessible.role);
     let func = this.objectOutputFunctions[
       OutputGenerator._getOutputName(roleString)] ||
       this.objectOutputFunctions.defaultFunc;
 
     let flags = this.roleRuleMap[roleString] || 0;
 
-    if (aAccessible.childCount == 0)
+    if (aAccessible.childCount === 0) {
       flags |= INCLUDE_NAME;
+    }
 
     return func.apply(this, [aAccessible, roleString,
                              Utils.getState(aAccessible), flags, aContext]);
   },
 
   /**
    * Generates output for an action performed.
    * @param {nsIAccessible} aAccessible accessible object that the action was
    *    invoked in.
    * @param {string} aActionName the name of the action, one of the keys in
    *    {@link gActionMap}.
-   * @return {Array} A one string array with the action.
+   * @return {Array} A one element array with action data.
    */
-  genForAction: function genForAction(aObject, aActionName) {},
+  genForAction: function genForAction(aObject, aActionName) {}, // jshint ignore:line
 
   /**
-   * Generates output for an announcement. Basically attempts to localize
-   * the announcement string.
+   * Generates output for an announcement.
    * @param {string} aAnnouncement unlocalized announcement.
-   * @return {Array} A one string array with the announcement.
+   * @return {Array} An announcement speech data to be localized.
    */
-  genForAnnouncement: function genForAnnouncement(aAnnouncement) {},
+  genForAnnouncement: function genForAnnouncement(aAnnouncement) {}, // jshint ignore:line
 
   /**
    * Generates output for a tab state change.
    * @param {nsIAccessible} aAccessible accessible object of the tab's attached
    *    document.
    * @param {string} aTabState the tab state name, see
    *    {@link Presenter.tabStateChanged}.
    * @return {Array} The tab state utterace.
    */
-  genForTabStateChange: function genForTabStateChange(aObject, aTabState) {},
+  genForTabStateChange: function genForTabStateChange(aObject, aTabState) {}, // jshint ignore:line
 
   /**
    * Generates output for announcing entering and leaving editing mode.
    * @param {aIsEditing} boolean true if we are in editing mode
    * @return {Array} The mode utterance
    */
-  genForEditingMode: function genForEditingMode(aIsEditing) {},
+  genForEditingMode: function genForEditingMode(aIsEditing) {}, // jshint ignore:line
+
+  _getContextStart: function getContextStart(aContext) {}, // jshint ignore:line
 
-  _getContextStart: function getContextStart(aContext) {},
-
+  /**
+   * Adds an accessible name and description to the output if available.
+   * @param {Array} aOutput Output array.
+   * @param {nsIAccessible} aAccessible current accessible object.
+   * @param {Number} aFlags output flags.
+   */
   _addName: function _addName(aOutput, aAccessible, aFlags) {
     let name;
     if ((Utils.getAttributes(aAccessible)['explicit-name'] === 'true' &&
          !(aFlags & IGNORE_EXPLICIT_NAME)) || (aFlags & INCLUDE_NAME)) {
       name = aAccessible.name;
     }
 
     let description = aAccessible.description;
@@ -168,88 +165,72 @@ this.OutputGenerator = {
       if (tmpName && (description !== tmpName)) {
         name = name || '';
         name = this.outputOrder === OUTPUT_DESC_FIRST ?
           description + ' - ' + name :
           name + ' - ' + description;
       }
     }
 
-    if (name) {
-      aOutput[this.outputOrder === OUTPUT_DESC_FIRST ?
-        'push' : 'unshift'](name);
+    if (!name || !name.trim()) {
+      return;
     }
+    aOutput[this.outputOrder === OUTPUT_DESC_FIRST ? 'push' : 'unshift'](name);
   },
 
   /**
    * Adds a landmark role to the output if available.
    * @param {Array} aOutput Output array.
    * @param {nsIAccessible} aAccessible current accessible object.
    */
   _addLandmark: function _addLandmark(aOutput, aAccessible) {
     let landmarkName = Utils.getLandmarkName(aAccessible);
     if (!landmarkName) {
       return;
     }
-
-    let landmark = Utils.stringBundle.GetStringFromName(landmarkName);
-    if (!landmark) {
-      return;
-    }
-
-    aOutput[this.outputOrder === OUTPUT_DESC_FIRST ? 'unshift' : 'push'](
-      landmark);
+    aOutput[this.outputOrder === OUTPUT_DESC_FIRST ? 'unshift' : 'push']({
+      string: landmarkName
+    });
   },
 
   /**
    * Adds an entry type attribute to the description if available.
-   * @param {Array} aDesc Description array.
+   * @param {Array} aOutput Output array.
    * @param {nsIAccessible} aAccessible current accessible object.
    * @param {String} aRoleStr aAccessible's role string.
    */
-  _addType: function _addType(aDesc, aAccessible, aRoleStr) {
+  _addType: function _addType(aOutput, aAccessible, aRoleStr) {
     if (aRoleStr !== 'entry') {
       return;
     }
 
     let typeName = Utils.getAttributes(aAccessible)['text-input-type'];
     // Ignore the the input type="text" case.
     if (!typeName || typeName === 'text') {
       return;
     }
-    typeName = 'textInputType_' + typeName;
-    try {
-      aDesc.push(Utils.stringBundle.GetStringFromName(typeName));
-    } catch (x) {
-      Logger.warning('Failed to get a string from a bundle for', typeName);
-    }
+    aOutput.push({string: 'textInputType_' + typeName});
   },
 
+  _addState: function _addState(aOutput, aState) {}, // jshint ignore:line
+
+  _addRole: function _addRole(aOutput, aRoleStr) {}, // jshint ignore:line
+
   get outputOrder() {
     if (!this._utteranceOrder) {
       this._utteranceOrder = new PrefCache('accessibility.accessfu.utterance');
     }
     return typeof this._utteranceOrder.value === 'number' ?
       this._utteranceOrder.value : this.defaultOutputOrder;
   },
 
   _getOutputName: function _getOutputName(aName) {
     return aName.replace(' ', '');
   },
 
-  _getLocalizedRole: function _getLocalizedRole(aRoleStr) {},
-
-  _getLocalizedState: function _getLocalizedState(aState) {},
-
-  _getPluralFormString: function _getPluralFormString(aString, aCount) {
-    let str = Utils.stringBundle.GetStringFromName(this._getOutputName(aString));
-    str = PluralForm.get(aCount, str);
-    return str.replace('#1', aCount);
-  },
-
   roleRuleMap: {
     'menubar': INCLUDE_DESC,
     'scrollbar': INCLUDE_DESC,
     'grip': INCLUDE_DESC,
     'alert': INCLUDE_DESC | INCLUDE_NAME,
     'menupopup': INCLUDE_DESC,
     'menuitem': INCLUDE_DESC | NAME_FROM_SUBTREE_RULE,
     'tooltip': INCLUDE_DESC | NAME_FROM_SUBTREE_RULE,
@@ -317,42 +298,36 @@ this.OutputGenerator = {
     'option': INCLUDE_DESC,
     'listbox': INCLUDE_DESC,
     'definitionlist': INCLUDE_DESC | INCLUDE_NAME,
     'dialog': INCLUDE_DESC | INCLUDE_NAME,
     'chrome window': IGNORE_EXPLICIT_NAME,
     'app root': IGNORE_EXPLICIT_NAME },
 
   objectOutputFunctions: {
-    _generateBaseOutput: function _generateBaseOutput(aAccessible, aRoleStr, aState, aFlags) {
-      let output = [];
+    _generateBaseOutput:
+      function _generateBaseOutput(aAccessible, aRoleStr, aState, aFlags) {
+        let output = [];
 
-      if (aFlags & INCLUDE_DESC) {
-        let desc = this._getLocalizedState(aState);
-        let roleStr = this._getLocalizedRole(aRoleStr);
-        if (roleStr) {
-          this._addType(desc, aAccessible, aRoleStr);
-          desc.push(roleStr);
+        if (aFlags & INCLUDE_DESC) {
+          this._addState(output, aState);
+          this._addType(output, aAccessible, aRoleStr);
+          this._addRole(output, aRoleStr);
         }
-        output.push(desc.join(' '));
-      }
 
-      if (aFlags & INCLUDE_VALUE) {
-        let value = aAccessible.value;
-        if (value) {
-          output[this.outputOrder === OUTPUT_DESC_FIRST ?
-                 'push' : 'unshift'](value);
+        if (aFlags & INCLUDE_VALUE && aAccessible.value.trim()) {
+          output[this.outputOrder === OUTPUT_DESC_FIRST ? 'push' : 'unshift'](
+            aAccessible.value);
         }
-      }
 
-      this._addName(output, aAccessible, aFlags);
-      this._addLandmark(output, aAccessible);
+        this._addName(output, aAccessible, aFlags);
+        this._addLandmark(output, aAccessible);
 
-      return output;
-    },
+        return output;
+      },
 
     label: function label(aAccessible, aRoleStr, aState, aFlags, aContext) {
       if (aContext.isNestedControl ||
           aContext.accessible == Utils.getEmbeddedControl(aAccessible)) {
         // If we are on a nested control, or a nesting label,
         // we don't need the context.
         return [];
       }
@@ -362,26 +337,26 @@ this.OutputGenerator = {
 
     entry: function entry(aAccessible, aRoleStr, aState, aFlags) {
       let rolestr = aState.contains(States.MULTI_LINE) ? 'textarea' : 'entry';
       return this.objectOutputFunctions.defaultFunc.apply(
         this, [aAccessible, rolestr, aState, aFlags]);
     },
 
     pagetab: function pagetab(aAccessible, aRoleStr, aState, aFlags) {
-      let localizedRole = this._getLocalizedRole(aRoleStr);
       let itemno = {};
       let itemof = {};
       aAccessible.groupPosition({}, itemof, itemno);
       let output = [];
-      let desc = this._getLocalizedState(aState);
-      desc.push(
-        Utils.stringBundle.formatStringFromName(
-          'objItemOf', [localizedRole, itemno.value, itemof.value], 3));
-      output.push(desc.join(' '));
+      this._addState(output, aState);
+      this._addRole(output, aRoleStr);
+      output.push({
+        string: 'objItemOfN',
+        args: [itemno.value, itemof.value]
+      });
 
       this._addName(output, aAccessible, aFlags);
       this._addLandmark(output, aAccessible);
 
       return output;
     },
 
     table: function table(aAccessible, aRoleStr, aState, aFlags) {
@@ -393,48 +368,49 @@ this.OutputGenerator = {
         Logger.logException(x);
         return output;
       } finally {
         // Check if it's a layout table, and bail out if true.
         // We don't want to speak any table information for layout tables.
         if (table.isProbablyForLayout()) {
           return output;
         }
-        let tableColumnInfo = this._getPluralFormString('tableColumnInfo',
-          table.columnCount);
-        let tableRowInfo = this._getPluralFormString('tableRowInfo',
-          table.rowCount);
-        output.push(Utils.stringBundle.formatStringFromName(
-          this._getOutputName('tableInfo'), [this._getLocalizedRole(aRoleStr),
-            tableColumnInfo, tableRowInfo], 3));
+        this._addRole(output, aRoleStr);
+        output.push.call(output, {
+          string: this._getOutputName('tblColumnInfo'),
+          count: table.columnCount
+        }, {
+          string: this._getOutputName('tblRowInfo'),
+          count: table.rowCount
+        });
         this._addName(output, aAccessible, aFlags);
         this._addLandmark(output, aAccessible);
         return output;
       }
     }
   }
 };
 
 /**
  * Generates speech utterances from objects, actions and state changes.
- * An utterance is an array of strings.
+ * An utterance is an array of speech data.
  *
  * It should not be assumed that flattening an utterance array would create a
  * gramatically correct sentence. For example, {@link genForObject} might
  * return: ['graphic', 'Welcome to my home page'].
  * Each string element in an utterance should be gramatically correct in itself.
  * Another example from {@link genForObject}: ['list item 2 of 5', 'Alabama'].
  *
  * An utterance is ordered from the least to the most important. Speaking the
  * last string usually makes sense, but speaking the first often won't.
  * For example {@link genForAction} might return ['button', 'clicked'] for a
  * clicked event. Speaking only 'clicked' makes sense. Speaking 'button' does
  * not.
  */
-this.UtteranceGenerator = {
+this.UtteranceGenerator = {  // jshint ignore:line
   __proto__: OutputGenerator,
 
   gActionMap: {
     jump: 'jumpAction',
     press: 'pressAction',
     check: 'checkAction',
     uncheck: 'uncheckAction',
     select: 'selectAction',
@@ -446,148 +422,146 @@ this.UtteranceGenerator = {
     collapse: 'collapseAction',
     expand: 'expandAction',
     activate: 'activateAction',
     cycle: 'cycleAction'
   },
 
   //TODO: May become more verbose in the future.
   genForAction: function genForAction(aObject, aActionName) {
-    return [Utils.stringBundle.GetStringFromName(this.gActionMap[aActionName])];
+    return [{string: this.gActionMap[aActionName]}];
   },
 
-  genForLiveRegion: function genForLiveRegion(aContext, aIsHide, aModifiedText) {
-    let utterance = [];
-    if (aIsHide) {
-      utterance.push(Utils.stringBundle.GetStringFromName('hidden'));
-    }
-    return utterance.concat(
-      aModifiedText || this.genForContext(aContext).output);
-  },
+  genForLiveRegion:
+    function genForLiveRegion(aContext, aIsHide, aModifiedText) {
+      let utterance = [];
+      if (aIsHide) {
+        utterance.push({string: 'hidden'});
+      }
+      return utterance.concat(aModifiedText || this.genForContext(aContext));
+    },
 
   genForAnnouncement: function genForAnnouncement(aAnnouncement) {
-    try {
-      return [Utils.stringBundle.GetStringFromName(aAnnouncement)];
-    } catch (x) {
-      return [aAnnouncement];
-    }
+    return [{
+      string: aAnnouncement
+    }];
   },
 
   genForTabStateChange: function genForTabStateChange(aObject, aTabState) {
     switch (aTabState) {
       case 'newtab':
-        return [Utils.stringBundle.GetStringFromName('tabNew')];
+        return [{string: 'tabNew'}];
       case 'loading':
-        return [Utils.stringBundle.GetStringFromName('tabLoading')];
+        return [{string: 'tabLoading'}];
       case 'loaded':
-        return [aObject.name || '',
-                Utils.stringBundle.GetStringFromName('tabLoaded')];
+        return [aObject.name, {string: 'tabLoaded'}];
       case 'loadstopped':
-        return [Utils.stringBundle.GetStringFromName('tabLoadStopped')];
+        return [{string: 'tabLoadStopped'}];
       case 'reload':
-        return [Utils.stringBundle.GetStringFromName('tabReload')];
+        return [{string: 'tabReload'}];
       default:
         return [];
     }
   },
 
   genForEditingMode: function genForEditingMode(aIsEditing) {
-    return [Utils.stringBundle.GetStringFromName(
-      aIsEditing ? 'editingMode' : 'navigationMode')];
+    return [{string: aIsEditing ? 'editingMode' : 'navigationMode'}];
   },
 
   objectOutputFunctions: {
 
     __proto__: OutputGenerator.objectOutputFunctions,
 
-    defaultFunc: function defaultFunc(aAccessible, aRoleStr, aState, aFlags) {
-      return this.objectOutputFunctions._generateBaseOutput.apply(this, arguments);
+    defaultFunc: function defaultFunc() {
+      return this.objectOutputFunctions._generateBaseOutput.apply(
+        this, arguments);
     },
 
     heading: function heading(aAccessible, aRoleStr, aState, aFlags) {
       let level = {};
       aAccessible.groupPosition(level, {}, {});
-      let utterance =
-        [Utils.stringBundle.formatStringFromName(
-          'headingLevel', [level.value], 1)];
+      let utterance = [{string: 'headingLevel', args: [level.value]}];
 
       this._addName(utterance, aAccessible, aFlags);
       this._addLandmark(utterance, aAccessible);
 
       return utterance;
     },
 
     listitem: function listitem(aAccessible, aRoleStr, aState, aFlags) {
       let itemno = {};
       let itemof = {};
       aAccessible.groupPosition({}, itemof, itemno);
       let utterance = [];
-      if (itemno.value == 1) // Start of list
-        utterance.push(Utils.stringBundle.GetStringFromName('listStart'));
-      else if (itemno.value == itemof.value) // last item
-        utterance.push(Utils.stringBundle.GetStringFromName('listEnd'));
+      if (itemno.value == 1) {
+        // Start of list
+        utterance.push({string: 'listStart'});
+      }
+      else if (itemno.value == itemof.value) {
+        // last item
+        utterance.push({string: 'listEnd'});
+      }
 
       this._addName(utterance, aAccessible, aFlags);
       this._addLandmark(utterance, aAccessible);
 
       return utterance;
     },
 
     list: function list(aAccessible, aRoleStr, aState, aFlags) {
       return this._getListUtterance
         (aAccessible, aRoleStr, aFlags, aAccessible.childCount);
     },
 
-    definitionlist: function definitionlist(aAccessible, aRoleStr, aState, aFlags) {
-      return this._getListUtterance
-        (aAccessible, aRoleStr, aFlags, aAccessible.childCount / 2);
-    },
+    definitionlist:
+      function definitionlist(aAccessible, aRoleStr, aState, aFlags) {
+        return this._getListUtterance
+          (aAccessible, aRoleStr, aFlags, aAccessible.childCount / 2);
+      },
 
     application: function application(aAccessible, aRoleStr, aState, aFlags) {
       // Don't utter location of applications, it gets tiring.
-      if (aAccessible.name != aAccessible.DOMNode.location)
+      if (aAccessible.name != aAccessible.DOMNode.location) {
         return this.objectOutputFunctions.defaultFunc.apply(this,
           [aAccessible, aRoleStr, aState, aFlags]);
+      }
 
       return [];
     },
 
     cell: function cell(aAccessible, aRoleStr, aState, aFlags, aContext) {
       let utterance = [];
       let cell = aContext.getCellInfo(aAccessible);
       if (cell) {
-        let desc = [];
-        let addCellChanged = function addCellChanged(aDesc, aChanged, aString, aIndex) {
-          if (aChanged) {
-            aDesc.push(Utils.stringBundle.formatStringFromName(aString,
-              [aIndex + 1], 1));
+        let addCellChanged =
+          function addCellChanged(aUtterance, aChanged, aString, aIndex) {
+            if (aChanged) {
+              aUtterance.push({string: aString, args: [aIndex + 1]});
+            }
+          };
+        let addExtent = function addExtent(aUtterance, aExtent, aString) {
+          if (aExtent > 1) {
+            aUtterance.push({string: aString, args: [aExtent]});
           }
         };
-        let addExtent = function addExtent(aDesc, aExtent, aString) {
-          if (aExtent > 1) {
-            aDesc.push(Utils.stringBundle.formatStringFromName(aString,
-              [aExtent], 1));
-          }
-        };
-        let addHeaders = function addHeaders(aDesc, aHeaders) {
+        let addHeaders = function addHeaders(aUtterance, aHeaders) {
           if (aHeaders.length > 0) {
-            aDesc.push.apply(aDesc, aHeaders);
+            aUtterance.push.apply(aUtterance, aHeaders);
           }
         };
 
-        addCellChanged(desc, cell.columnChanged, 'columnInfo', cell.columnIndex);
-        addCellChanged(desc, cell.rowChanged, 'rowInfo', cell.rowIndex);
+        addCellChanged(utterance, cell.columnChanged, 'columnInfo',
+          cell.columnIndex);
+        addCellChanged(utterance, cell.rowChanged, 'rowInfo', cell.rowIndex);
 
-        addExtent(desc, cell.columnExtent, 'spansColumns');
-        addExtent(desc, cell.rowExtent, 'spansRows');
+        addExtent(utterance, cell.columnExtent, 'spansColumns');
+        addExtent(utterance, cell.rowExtent, 'spansRows');
 
-        addHeaders(desc, cell.columnHeaders);
-        addHeaders(desc, cell.rowHeaders);
-
-        utterance.push(desc.join(' '));
+        addHeaders(utterance, cell.columnHeaders);
+        addHeaders(utterance, cell.rowHeaders);
       }
 
       this._addName(utterance, aAccessible, aFlags);
       this._addLandmark(utterance, aAccessible);
 
       return utterance;
     },
 
@@ -607,108 +581,93 @@ this.UtteranceGenerator = {
       return this.objectOutputFunctions.defaultFunc.apply(this, arguments);
     }
   },
 
   _getContextStart: function _getContextStart(aContext) {
     return aContext.newAncestry;
   },
 
-  _getLocalizedRole: function _getLocalizedRole(aRoleStr) {
-    try {
-      return Utils.stringBundle.GetStringFromName(
-        this._getOutputName(aRoleStr));
-    } catch (x) {
-      return '';
-    }
+  _addRole: function _addRole(aOutput, aRoleStr) {
+    aOutput.push({string: this._getOutputName(aRoleStr)});
   },
 
-  _getLocalizedState: function _getLocalizedState(aState) {
-    let stateUtterances = [];
+  _addState: function _addState(aOutput, aState) {
 
     if (aState.contains(States.UNAVAILABLE)) {
-      stateUtterances.push(
-        Utils.stringBundle.GetStringFromName('stateUnavailable'));
+      aOutput.push({string: 'stateUnavailable'});
     }
 
     // Don't utter this in Jelly Bean, we let TalkBack do it for us there.
     // This is because we expose the checked information on the node itself.
-    // XXX: this means the checked state is always appended to the end, regardless
-    // of the utterance ordering preference.
+    // XXX: this means the checked state is always appended to the end,
+    // regardless of the utterance ordering preference.
     if ((Utils.AndroidSdkVersion < 16 || Utils.MozBuildApp === 'browser') &&
       aState.contains(States.CHECKABLE)) {
       let statetr = aState.contains(States.CHECKED) ?
         'stateChecked' : 'stateNotChecked';
-      stateUtterances.push(Utils.stringBundle.GetStringFromName(statetr));
+      aOutput.push({string: statetr});
     }
 
     if (aState.contains(States.PRESSED)) {
-      stateUtterances.push(
-        Utils.stringBundle.GetStringFromName('statePressed'));
+      aOutput.push({string: 'statePressed'});
     }
 
     if (aState.contains(States.EXPANDABLE)) {
       let statetr = aState.contains(States.EXPANDED) ?
         'stateExpanded' : 'stateCollapsed';
-      stateUtterances.push(Utils.stringBundle.GetStringFromName(statetr));
+      aOutput.push({string: statetr});
     }
 
     if (aState.contains(States.REQUIRED)) {
-      stateUtterances.push(
-        Utils.stringBundle.GetStringFromName('stateRequired'));
+      aOutput.push({string: 'stateRequired'});
     }
 
     if (aState.contains(States.TRAVERSED)) {
-      stateUtterances.push(
-        Utils.stringBundle.GetStringFromName('stateTraversed'));
+      aOutput.push({string: 'stateTraversed'});
     }
 
     if (aState.contains(States.HASPOPUP)) {
-      stateUtterances.push(
-        Utils.stringBundle.GetStringFromName('stateHasPopup'));
+      aOutput.push({string: 'stateHasPopup'});
     }
 
     if (aState.contains(States.SELECTED)) {
-      stateUtterances.push(
-        Utils.stringBundle.GetStringFromName('stateSelected'));
+      aOutput.push({string: 'stateSelected'});
     }
-
-    return stateUtterances;
   },
 
-  _getListUtterance: function _getListUtterance(aAccessible, aRoleStr, aFlags, aItemCount) {
-    let desc = [];
-    let roleStr = this._getLocalizedRole(aRoleStr);
-    if (roleStr) {
-      desc.push(roleStr);
+  _getListUtterance:
+    function _getListUtterance(aAccessible, aRoleStr, aFlags, aItemCount) {
+      let utterance = [];
+      this._addRole(utterance, aRoleStr);
+      utterance.push({
+        string: this._getOutputName('listItemsCount'),
+        count: aItemCount
+      });
+
+      this._addName(utterance, aAccessible, aFlags);
+      this._addLandmark(utterance, aAccessible);
+
+      return utterance;
     }
-    desc.push(this._getPluralFormString('listItemsCount', aItemCount));
-    let utterance = [desc.join(' ')];
-
-    this._addName(utterance, aAccessible, aFlags);
-    this._addLandmark(utterance, aAccessible);
-
-    return utterance;
-  }
 };
 
-
-this.BrailleGenerator = {
+this.BrailleGenerator = {  // jshint ignore:line
   __proto__: OutputGenerator,
 
   genForContext: function genForContext(aContext) {
     let output = OutputGenerator.genForContext.apply(this, arguments);
 
     let acc = aContext.accessible;
 
     // add the static text indicating a list item; do this for both listitems or
-    // direct first children of listitems, because these are both common browsing
-    // scenarios
+    // direct first children of listitems, because these are both common
+    // browsing scenarios
     let addListitemIndicator = function addListitemIndicator(indicator = '*') {
-      output.output.unshift(indicator);
+      output.unshift(indicator);
     };
 
     if (acc.indexInParent === 1 &&
         acc.parent.role == Roles.LISTITEM &&
         acc.previousSibling.role == Roles.STATICTEXT) {
       if (acc.parent.parent && acc.parent.parent.DOMNode &&
           acc.parent.parent.DOMNode.nodeName == 'UL') {
         addListitemIndicator();
@@ -719,153 +678,127 @@ this.BrailleGenerator = {
                acc.firstChild.role == Roles.STATICTEXT) {
       if (acc.parent.DOMNode.nodeName == 'UL') {
         addListitemIndicator();
       } else {
         addListitemIndicator(acc.firstChild.name.trim());
       }
     }
 
-    if (acc instanceof Ci.nsIAccessibleText) {
-      output.endOffset = this.outputOrder === OUTPUT_DESC_FIRST ?
-                         output.output.join(' ').length : acc.characterCount;
-      output.startOffset = output.endOffset - acc.characterCount;
-    }
-
     return output;
   },
 
   objectOutputFunctions: {
 
     __proto__: OutputGenerator.objectOutputFunctions,
 
-    defaultFunc: function defaultFunc(aAccessible, aRoleStr, aState, aFlags) {
-      return this.objectOutputFunctions._generateBaseOutput.apply(this, arguments);
+    defaultFunc: function defaultFunc() {
+      return this.objectOutputFunctions._generateBaseOutput.apply(
+        this, arguments);
     },
 
     listitem: function listitem(aAccessible, aRoleStr, aState, aFlags) {
       let braille = [];
 
       this._addName(braille, aAccessible, aFlags);
       this._addLandmark(braille, aAccessible);
 
       return braille;
     },
 
     cell: function cell(aAccessible, aRoleStr, aState, aFlags, aContext) {
       let braille = [];
       let cell = aContext.getCellInfo(aAccessible);
       if (cell) {
-        let desc = [];
-        let addHeaders = function addHeaders(aDesc, aHeaders) {
+        let addHeaders = function addHeaders(aBraille, aHeaders) {
           if (aHeaders.length > 0) {
-            aDesc.push.apply(aDesc, aHeaders);
+            aBraille.push.apply(aBraille, aHeaders);
           }
         };
 
-        desc.push(Utils.stringBundle.formatStringFromName(
-          this._getOutputName('cellInfo'), [cell.columnIndex + 1,
-            cell.rowIndex + 1], 2));
+        braille.push({
+          string: this._getOutputName('cellInfo'),
+          args: [cell.columnIndex + 1, cell.rowIndex + 1]
+        });
 
-        addHeaders(desc, cell.columnHeaders);
-        addHeaders(desc, cell.rowHeaders);
-        braille.push(desc.join(' '));
+        addHeaders(braille, cell.columnHeaders);
+        addHeaders(braille, cell.rowHeaders);
       }
 
       this._addName(braille, aAccessible, aFlags);
       this._addLandmark(braille, aAccessible);
       return braille;
     },
 
     columnheader: function columnheader() {
       return this.objectOutputFunctions.cell.apply(this, arguments);
     },
 
     rowheader: function rowheader() {
       return this.objectOutputFunctions.cell.apply(this, arguments);
     },
 
-    statictext: function statictext(aAccessible, aRoleStr, aState, aFlags) {
+    statictext: function statictext(aAccessible) {
       // Since we customize the list bullet's output, we add the static
       // text from the first node in each listitem, so skip it here.
       if (Utils.isListItemDecorator(aAccessible)) {
         return [];
       }
 
       return this.objectOutputFunctions._useStateNotRole.apply(this, arguments);
     },
 
-    _useStateNotRole: function _useStateNotRole(aAccessible, aRoleStr, aState, aFlags) {
-      let braille = [];
-
-      let desc = this._getLocalizedState(aState, aAccessible.role);
-      braille.push(desc.join(' '));
+    _useStateNotRole:
+      function _useStateNotRole(aAccessible, aRoleStr, aState, aFlags) {
+        let braille = [];
+        this._addState(braille, aState, aAccessible.role);
+        this._addName(braille, aAccessible, aFlags);
+        this._addLandmark(braille, aAccessible);
 
-      this._addName(braille, aAccessible, aFlags);
-      this._addLandmark(braille, aAccessible);
+        return braille;
+      },
 
-      return braille;
-    },
-
-    checkbutton: function checkbutton(aAccessible, aRoleStr, aState, aFlags) {
+    checkbutton: function checkbutton() {
       return this.objectOutputFunctions._useStateNotRole.apply(this, arguments);
     },
 
-    radiobutton: function radiobutton(aAccessible, aRoleStr, aState, aFlags) {
+    radiobutton: function radiobutton() {
       return this.objectOutputFunctions._useStateNotRole.apply(this, arguments);
     },
 
-    togglebutton: function radiobutton(aAccessible, aRoleStr, aState, aFlags) {
+    togglebutton: function togglebutton() {
       return this.objectOutputFunctions._useStateNotRole.apply(this, arguments);
     }
   },
 
   _getContextStart: function _getContextStart(aContext) {
     if (aContext.accessible.parent.role == Roles.LINK) {
       return [aContext.accessible.parent];
     }
 
     return [];
   },
 
   _getOutputName: function _getOutputName(aName) {
     return OutputGenerator._getOutputName(aName) + 'Abbr';
   },
 
-  _getLocalizedRole: function _getLocalizedRole(aRoleStr) {
-    try {
-      return Utils.stringBundle.GetStringFromName(
-        this._getOutputName(aRoleStr));
-    } catch (x) {
-      try {
-        return Utils.stringBundle.GetStringFromName(
-          OutputGenerator._getOutputName(aRoleStr));
-      } catch (y) {
-        return '';
-      }
-    }
+  _addRole: function _addRole(aBraille, aRoleStr) {
+    aBraille.push({string: this._getOutputName(aRoleStr)});
   },
 
-  _getLocalizedState: function _getLocalizedState(aState, aRole) {
-    let stateBraille = [];
-
-    let getResultMarker = function getResultMarker(aMarker) {
-      // aMarker is a simple boolean.
-      let resultMarker = [];
-      resultMarker.push('(');
-      resultMarker.push(aMarker ? 'x' : ' ');
-      resultMarker.push(')');
-
-      return resultMarker.join('');
-    };
-
+  _addState: function _addState(aBraille, aState, aRole) {
     if (aState.contains(States.CHECKABLE)) {
-      stateBraille.push(getResultMarker(aState.contains(States.CHECKED)));
-    }
-
-    if (aRole === Roles.TOGGLE_BUTTON) {
-      stateBraille.push(getResultMarker(aState.contains(States.PRESSED)));
+      aBraille.push({
+        string: aState.contains(States.CHECKED) ?
+          this._getOutputName('stateChecked') :
+          this._getOutputName('stateUnchecked')
+      });
     }
-
-    return stateBraille;
+    if (aRole === Roles.TOGGLE_BUTTON) {
+      aBraille.push({
+        string: aState.contains(States.PRESSED) ?
+          this._getOutputName('statePressed') :
+          this._getOutputName('stateUnpressed')
+      });
+    }
   }
-
 };
--- a/accessible/jsat/Presentation.jsm
+++ b/accessible/jsat/Presentation.jsm
@@ -1,36 +1,37 @@
 /* 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 o