merge m-c to cedar
authorChris AtLee <catlee@mozilla.com>
Fri, 20 Feb 2015 11:01:39 -0500
changeset 326746 a433892912f3b83d49348543356ae09665654ac5
parent 326745 3f228d2096e524f8961e725adbc365cf5838419a (current diff)
parent 245043 5f1009731a977b83d2b177099c6ae3b12085ec7a (diff)
child 326747 d2d9810cf8d737a28da3aa0535bfba3b0ae002b4
push id10169
push userdminor@mozilla.com
push dateThu, 28 Jan 2016 13:10:48 +0000
milestone38.0a1
merge m-c to cedar
CLOBBER
addon-sdk/source/README
addon-sdk/source/lib/sdk/content/worker-parent.js
addon-sdk/source/lib/sdk/panel/window.js
addon-sdk/source/lib/sdk/util/registry.js
addon-sdk/source/lib/sdk/windows/loader.js
addon-sdk/source/modules/system/XulApp.js
addon-sdk/source/python-lib/cuddlefish/tests/bug-661083-files/packages/noLocalization/locale/en-GB.properties
addon-sdk/source/python-lib/cuddlefish/tests/bug-661083-files/packages/noLocalization/locale/en-US.properties
addon-sdk/source/python-lib/cuddlefish/tests/bug-661083-files/packages/noLocalization/package.json
addon-sdk/source/python-lib/cuddlefish/tests/bug-661083-files/packages/twoLanguages/locale/en-GB.properties
addon-sdk/source/python-lib/cuddlefish/tests/bug-661083-files/packages/twoLanguages/locale/en-US.properties
addon-sdk/source/python-lib/cuddlefish/tests/bug-661083-files/packages/twoLanguages/package.json
addon-sdk/source/python-lib/cuddlefish/tests/test_linker.py
addon-sdk/source/test/addons/addon-manager/main.js
addon-sdk/source/test/addons/layout-change/main.js
addon-sdk/source/test/addons/manifest-localized/locale/en-US.properties
addon-sdk/source/test/addons/manifest-localized/main.js
addon-sdk/source/test/addons/manifest-localized/package.json
addon-sdk/source/test/addons/places/favicon-helpers.js
addon-sdk/source/test/addons/places/httpd.js
addon-sdk/source/test/addons/places/main.js
addon-sdk/source/test/addons/places/places-helper.js
addon-sdk/source/test/addons/places/tests/test-places-bookmarks.js
addon-sdk/source/test/addons/places/tests/test-places-events.js
addon-sdk/source/test/addons/places/tests/test-places-favicon.js
addon-sdk/source/test/addons/places/tests/test-places-history.js
addon-sdk/source/test/addons/places/tests/test-places-host.js
addon-sdk/source/test/addons/places/tests/test-places-utils.js
addon-sdk/source/test/fixtures/Firefox.jpg
addon-sdk/source/test/fixtures/test-page-worker.html
addon-sdk/source/test/fixtures/test-page-worker.js
addon-sdk/source/test/test-content-worker-parent.js
addon-sdk/source/test/test-registry.js
addon-sdk/source/test/test-type.js
addon-sdk/source/test/test-window-loader.js
b2g/dev/app/Makefile.in
browser/app/default_permissions
browser/base/content/test/general/browser_customize_popupNotification.js
browser/base/content/test/general/browser_searchHighlight.js
browser/components/downloads/BrowserDownloads.manifest
browser/components/downloads/DownloadsStartup.js
browser/components/sidebar/moz.build
browser/components/sidebar/nsSidebar.js
browser/components/sidebar/nsSidebar.manifest
browser/devtools/performance/test/browser_perf-details-calltree-render-01.js
browser/devtools/performance/test/browser_perf-details-calltree-render-02.js
browser/devtools/performance/test/browser_perf-details-flamegraph-render-01.js
browser/devtools/performance/test/browser_perf-details-waterfall-render-01.js
browser/devtools/performance/test/browser_perf-details.js
browser/devtools/performance/test/browser_perf-options-invert-call-tree.js
browser/devtools/performance/views/details-call-tree.js
browser/devtools/performance/views/details-flamegraph.js
browser/devtools/profiler/test/browser_profiler_categories.js
browser/devtools/profiler/test/browser_profiler_content-check.js
browser/devtools/profiler/test/browser_profiler_tree-abstract-01.js
browser/devtools/profiler/test/browser_profiler_tree-abstract-02.js
browser/devtools/profiler/test/browser_profiler_tree-abstract-03.js
browser/devtools/profiler/test/browser_profiler_tree-abstract-04.js
browser/devtools/profiler/test/browser_profiler_tree-frame-node.js
browser/devtools/profiler/test/browser_profiler_tree-model-01.js
browser/devtools/profiler/test/browser_profiler_tree-model-02.js
browser/devtools/profiler/test/browser_profiler_tree-model-03.js
browser/devtools/profiler/test/browser_profiler_tree-model-04.js
browser/devtools/profiler/test/browser_profiler_tree-model-05.js
browser/devtools/profiler/test/browser_profiler_tree-view-01.js
browser/devtools/profiler/test/browser_profiler_tree-view-02.js
browser/devtools/profiler/test/browser_profiler_tree-view-03.js
browser/devtools/profiler/test/browser_profiler_tree-view-04.js
browser/devtools/profiler/test/browser_profiler_tree-view-05.js
browser/devtools/profiler/test/browser_profiler_tree-view-06.js
browser/devtools/profiler/test/browser_profiler_tree-view-07.js
browser/devtools/profiler/utils/global.js
browser/devtools/profiler/utils/tree-model.js
browser/devtools/profiler/utils/tree-view.js
browser/devtools/storage/test/moz.build
browser/devtools/timeline/test/browser_timeline_blueprint.js
browser/devtools/timeline/widgets/global.js
browser/devtools/timeline/widgets/marker-details.js
browser/devtools/timeline/widgets/markers-overview.js
browser/devtools/timeline/widgets/memory-overview.js
browser/devtools/timeline/widgets/waterfall.js
browser/devtools/webide/Makefile.in
browser/devtools/webide/test/chrome.ini
browser/devtools/webide/test/test_deviceinfo.html
browser/devtools/webide/themes/devicepreferences.css
browser/extensions/shumway/content/avm2/generated/avm1lib/avm1lib.abc
browser/extensions/shumway/content/gfx/gl/shaders/blurh.frag
browser/extensions/shumway/content/gfx/gl/shaders/blurv.frag
browser/extensions/shumway/content/gfx/gl/shaders/canvas.vert
browser/extensions/shumway/content/gfx/gl/shaders/curve.frag
browser/extensions/shumway/content/gfx/gl/shaders/solid-fill.frag
browser/extensions/shumway/content/gfx/gl/shaders/solid-fill.vert
browser/extensions/shumway/content/gfx/gl/shaders/texture-fill.frag
browser/extensions/shumway/content/gfx/gl/shaders/texture-fill.vert
browser/extensions/shumway/content/shumway.parser.js
browser/metro/profile/Makefile.in
browser/themes/linux/aboutSessionRestore.css
browser/themes/linux/aboutTabCrashed.css
browser/themes/osx/aboutSessionRestore.css
browser/themes/osx/aboutTabCrashed.css
browser/themes/shared/dots.png
browser/themes/shared/dots@2x.png
browser/themes/shared/incontentprefs/icons.png
browser/themes/shared/incontentprefs/icons@2x.png
browser/themes/windows/aboutSessionRestore.css
browser/themes/windows/aboutTabCrashed.css
docshell/base/LoadInfo.cpp
docshell/base/LoadInfo.h
docshell/base/nsILoadInfo.idl
dom/base/CompositionStringSynthesizer.cpp
dom/base/CompositionStringSynthesizer.h
dom/base/nsElementFrameLoaderOwner.cpp
dom/base/nsElementFrameLoaderOwner.h
dom/base/test/chrome/chrome.ini
dom/base/test/csp/chrome.ini
dom/base/test/csp/file_bug886164.html
dom/base/test/csp/file_bug886164.html^headers^
dom/base/test/csp/file_bug886164_2.html
dom/base/test/csp/file_bug886164_2.html^headers^
dom/base/test/csp/file_bug886164_3.html
dom/base/test/csp/file_bug886164_3.html^headers^
dom/base/test/csp/file_bug886164_4.html
dom/base/test/csp/file_bug886164_4.html^headers^
dom/base/test/csp/file_bug886164_5.html
dom/base/test/csp/file_bug886164_5.html^headers^
dom/base/test/csp/file_bug886164_6.html
dom/base/test/csp/file_bug886164_6.html^headers^
dom/bindings/test/chrome.ini
dom/bluetooth2/bluedroid/BluetoothUtils.cpp
dom/bluetooth2/bluedroid/BluetoothUtils.h
dom/bluetooth2/bluez/BluetoothUtils.cpp
dom/bluetooth2/bluez/BluetoothUtils.h
dom/canvas/test/moz.build
dom/canvas/test/webgl-conformance/moz.build
dom/canvas/test/webgl-mochitest/moz.build
dom/contacts/tests/chrome.ini
dom/encoding/test/moz.build
dom/icc/tests/IccInfo.cpp
dom/icc/tests/marionette/icc_header.js
dom/icc/tests/marionette/stk_helper.js
dom/icc/tests/marionette/test_stk_proactive_command.js
dom/interfaces/base/nsICompositionStringSynthesizer.idl
dom/media/eme/EMELog.cpp
dom/media/eme/EMELog.h
dom/media/fmp4/eme/EMEH264Decoder.cpp
dom/media/fmp4/eme/EMEH264Decoder.h
dom/media/test/chrome.ini
dom/media/test/short-cenc.mp4
dom/media/test/short-cenc.xml
dom/media/tests/mochitest/constraints.js
dom/media/tests/mochitest/test_getUserMedia_constraints_mobile.html
dom/smil/test/moz.build
dom/svg/SVGIFrameElement.cpp
dom/svg/SVGIFrameElement.h
dom/telephony/test/marionette/test_incoming_connecting_hangup.js
dom/tests/mochitest/fetch/moz.build
dom/webidl/InstallPhaseEvent.webidl
dom/webidl/SVGIFrameElement.webidl
dom/workers/test/fetch/moz.build
dom/xml/test/moz.build
editor/libeditor/tests/chrome.ini
extensions/spellcheck/hunspell/tests/unit/data/1463589_utf.aff
extensions/spellcheck/hunspell/tests/unit/data/1463589_utf.dic
extensions/spellcheck/hunspell/tests/unit/data/1463589_utf.sug
extensions/spellcheck/hunspell/tests/unit/data/1463589_utf.test
extensions/spellcheck/hunspell/tests/unit/data/1463589_utf.wrong
extensions/spellcheck/hunspell/tests/unit/data/allcaps_utf.aff
extensions/spellcheck/hunspell/tests/unit/data/allcaps_utf.dic
extensions/spellcheck/hunspell/tests/unit/data/allcaps_utf.good
extensions/spellcheck/hunspell/tests/unit/data/allcaps_utf.sug
extensions/spellcheck/hunspell/tests/unit/data/allcaps_utf.test
extensions/spellcheck/hunspell/tests/unit/data/allcaps_utf.wrong
extensions/spellcheck/hunspell/tests/unit/data/base_utf.aff
extensions/spellcheck/hunspell/tests/unit/data/base_utf.dic
extensions/spellcheck/hunspell/tests/unit/data/base_utf.good
extensions/spellcheck/hunspell/tests/unit/data/base_utf.sug
extensions/spellcheck/hunspell/tests/unit/data/base_utf.test
extensions/spellcheck/hunspell/tests/unit/data/base_utf.wrong
extensions/spellcheck/hunspell/tests/unit/data/colons_in_words.aff
extensions/spellcheck/hunspell/tests/unit/data/colons_in_words.dic
extensions/spellcheck/hunspell/tests/unit/data/colons_in_words.test
extensions/spellcheck/hunspell/tests/unit/data/condition_utf.aff
extensions/spellcheck/hunspell/tests/unit/data/condition_utf.dic
extensions/spellcheck/hunspell/tests/unit/data/condition_utf.good
extensions/spellcheck/hunspell/tests/unit/data/condition_utf.test
extensions/spellcheck/hunspell/tests/unit/data/condition_utf.wrong
extensions/spellcheck/hunspell/tests/unit/data/digits_in_words.aff
extensions/spellcheck/hunspell/tests/unit/data/digits_in_words.dic
extensions/spellcheck/hunspell/tests/unit/data/digits_in_words.test
extensions/spellcheck/hunspell/tests/unit/data/digits_in_words.wrong
extensions/spellcheck/hunspell/tests/unit/data/ngram_utf_fix.aff
extensions/spellcheck/hunspell/tests/unit/data/ngram_utf_fix.dic
extensions/spellcheck/hunspell/tests/unit/data/ngram_utf_fix.good
extensions/spellcheck/hunspell/tests/unit/data/ngram_utf_fix.sug
extensions/spellcheck/hunspell/tests/unit/data/ngram_utf_fix.test
extensions/spellcheck/hunspell/tests/unit/data/ngram_utf_fix.wrong
extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat.aff
extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat.dic
extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat.good
extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat.test
extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat.wrong
extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat2.aff
extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat2.dic
extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat2.good
extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat2.test
extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat2.wrong
extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword1.aff
extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword1.dic
extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword1.good
extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword1.sug
extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword1.test
extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword1.wrong
extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword2.aff
extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword2.dic
extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword2.good
extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword2.sug
extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword2.test
extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword2.wrong
extensions/spellcheck/hunspell/tests/unit/data/opentaal_keepcase.aff
extensions/spellcheck/hunspell/tests/unit/data/opentaal_keepcase.dic
extensions/spellcheck/hunspell/tests/unit/data/opentaal_keepcase.good
extensions/spellcheck/hunspell/tests/unit/data/opentaal_keepcase.sug
extensions/spellcheck/hunspell/tests/unit/data/opentaal_keepcase.test
extensions/spellcheck/hunspell/tests/unit/data/opentaal_keepcase.wrong
extensions/spellcheck/hunspell/tests/unit/data/utf8_bom.aff
extensions/spellcheck/hunspell/tests/unit/data/utf8_bom.dic
extensions/spellcheck/hunspell/tests/unit/data/utf8_bom.good
extensions/spellcheck/hunspell/tests/unit/data/utf8_bom.test
extensions/spellcheck/hunspell/tests/unit/data/utf8_bom2.aff
extensions/spellcheck/hunspell/tests/unit/data/utf8_bom2.dic
extensions/spellcheck/hunspell/tests/unit/data/utf8_bom2.good
extensions/spellcheck/hunspell/tests/unit/data/utf8_bom2.test
extensions/spellcheck/hunspell/tests/unit/data/utf8_nonbmp.aff
extensions/spellcheck/hunspell/tests/unit/data/utf8_nonbmp.dic
extensions/spellcheck/hunspell/tests/unit/data/utf8_nonbmp.good
extensions/spellcheck/hunspell/tests/unit/data/utf8_nonbmp.sug
extensions/spellcheck/hunspell/tests/unit/data/utf8_nonbmp.test
extensions/spellcheck/hunspell/tests/unit/data/utf8_nonbmp.wrong
gfx/angle/src/build_angle.gyp
gfx/layers/d3d10/CanvasLayerD3D10.cpp
gfx/layers/d3d10/CanvasLayerD3D10.h
gfx/layers/d3d10/ColorLayerD3D10.cpp
gfx/layers/d3d10/ColorLayerD3D10.h
gfx/layers/d3d10/ContainerLayerD3D10.cpp
gfx/layers/d3d10/ContainerLayerD3D10.h
gfx/layers/d3d10/ImageLayerD3D10.cpp
gfx/layers/d3d10/ImageLayerD3D10.h
gfx/layers/d3d10/LayerManagerD3D10.cpp
gfx/layers/d3d10/LayerManagerD3D10.fx
gfx/layers/d3d10/LayerManagerD3D10.h
gfx/layers/d3d10/LayerManagerD3D10Effect.h
gfx/layers/d3d10/PaintedLayerD3D10.cpp
gfx/layers/d3d10/PaintedLayerD3D10.h
gfx/layers/d3d10/ReadbackLayerD3D10.h
gfx/layers/d3d10/ReadbackManagerD3D10.cpp
gfx/layers/d3d10/ReadbackManagerD3D10.h
gfx/layers/d3d10/genshaders.sh
gfx/layers/d3d9/CanvasLayerD3D9.cpp
gfx/layers/d3d9/CanvasLayerD3D9.h
gfx/layers/d3d9/ColorLayerD3D9.cpp
gfx/layers/d3d9/ColorLayerD3D9.h
gfx/layers/d3d9/ContainerLayerD3D9.cpp
gfx/layers/d3d9/ContainerLayerD3D9.h
gfx/layers/d3d9/ImageLayerD3D9.cpp
gfx/layers/d3d9/ImageLayerD3D9.h
gfx/layers/d3d9/LayerManagerD3D9.cpp
gfx/layers/d3d9/LayerManagerD3D9.h
gfx/layers/d3d9/PaintedLayerD3D9.cpp
gfx/layers/d3d9/PaintedLayerD3D9.h
gfx/layers/ipc/ShadowLayerUtilsD3D10.cpp
gfx/layers/ipc/ShadowLayerUtilsD3D10.h
image/decoders/icon/nsIIconURI.idl
image/test/mochitest/chrome.ini
js/src/devtools/jint/sunspider/3d-cube.js
js/src/devtools/jint/sunspider/3d-morph.js
js/src/devtools/jint/sunspider/3d-raytrace.js
js/src/devtools/jint/sunspider/access-binary-trees.js
js/src/devtools/jint/sunspider/access-fannkuch.js
js/src/devtools/jint/sunspider/access-nbody.js
js/src/devtools/jint/sunspider/access-nsieve.js
js/src/devtools/jint/sunspider/bitops-3bit-bits-in-byte.js
js/src/devtools/jint/sunspider/bitops-bits-in-byte.js
js/src/devtools/jint/sunspider/bitops-bitwise-and.js
js/src/devtools/jint/sunspider/bitops-nsieve-bits.js
js/src/devtools/jint/sunspider/controlflow-recursive.js
js/src/devtools/jint/sunspider/crypto-aes.js
js/src/devtools/jint/sunspider/crypto-md5.js
js/src/devtools/jint/sunspider/crypto-sha1.js
js/src/devtools/jint/sunspider/date-format-tofte.js
js/src/devtools/jint/sunspider/date-format-xparb.js
js/src/devtools/jint/sunspider/math-cordic.js
js/src/devtools/jint/sunspider/math-partial-sums.js
js/src/devtools/jint/sunspider/math-spectral-norm.js
js/src/devtools/jint/sunspider/regexp-dna.js
js/src/devtools/jint/sunspider/string-base64.js
js/src/devtools/jint/sunspider/string-fasta.js
js/src/devtools/jint/sunspider/string-tagcloud.js
js/src/devtools/jint/sunspider/string-unpack-code.js
js/src/devtools/jint/sunspider/string-validate-input.js
js/src/devtools/jint/treesearch.py
js/src/devtools/jint/v8/base.js
js/src/devtools/jint/v8/crypto.js
js/src/devtools/jint/v8/deltablue.js
js/src/devtools/jint/v8/earley-boyer.js
js/src/devtools/jint/v8/raytrace.js
js/src/devtools/jint/v8/richards.js
js/src/devtools/jint/v8/run-earley-boyer.js
js/src/devtools/jint/v8/run-raytrace.js
js/src/devtools/jint/v8/run-richards.js
js/src/devtools/jint/v8/run.js
js/src/jit-test/tests/auto-regress/bug595923.js
js/src/jit-test/tests/basic/bug639529.js
js/src/jit-test/tests/basic/testBug748212.js
js/src/jit-test/tests/basic/testBug761439.js
js/src/jit-test/tests/ion/bug1073910.js
js/src/jit-test/tests/ion/simd-bug1121299.js
js/src/jit-test/tests/ion/simd-bug1123631.js
js/src/jscrashformat.h
js/src/jscrashreport.cpp
js/src/jscrashreport.h
js/src/jsinfer.cpp
js/src/jsinfer.h
js/src/jsinferinlines.h
js/src/jsproxy.h
js/src/tests/ecma_2/RegExp/function-001.js
js/src/tests/ecma_6/String/normalize-generateddata.js
js/src/tests/ecma_7/SIMD/float32x4with.js
js/src/tests/ecma_7/SIMD/float64x2with.js
js/src/tests/ecma_7/SIMD/int32x4with.js
js/xpconnect/public/nsAutoJSValHolder.h
js/xpconnect/tests/chrome/chrome.ini
layout/inspector/inFlasher.cpp
layout/inspector/inFlasher.h
layout/inspector/inIFlasher.idl
layout/mathml/nsMathMLmphantomFrame.cpp
layout/mathml/nsMathMLmphantomFrame.h
layout/reftests/css-ruby/autohiding-1-ref.html
layout/reftests/css-ruby/autohiding-1.html
layout/reftests/css-ruby/autohiding-2-ref.html
layout/reftests/css-ruby/autohiding-2.html
layout/reftests/css-ruby/autohiding-3-ref.html
layout/reftests/css-ruby/autohiding-3.html
layout/reftests/css-ruby/inlinize-blocks-1-ref.html
layout/reftests/css-ruby/inlinize-blocks-1.html
layout/reftests/css-ruby/inlinize-blocks-2-ref.html
layout/reftests/css-ruby/inlinize-blocks-2.html
layout/reftests/css-ruby/inlinize-blocks-3-ref.html
layout/reftests/css-ruby/inlinize-blocks-3.html
layout/reftests/css-ruby/inlinize-blocks-4-ref.html
layout/reftests/css-ruby/inlinize-blocks-4.html
layout/reftests/css-ruby/inlinize-blocks-5-ref.html
layout/reftests/css-ruby/inlinize-blocks-5.html
layout/reftests/reftest-sanity/test-displayport.html
media/gmp-clearkey/0.1/clearkey.info
media/webrtc/trunk/base/base.Makefile
media/webrtc/trunk/base/base.gyp
media/webrtc/trunk/base/base.target.mk
media/webrtc/trunk/webrtc/build/find_depot_tools.py
media/webrtc/trunk/webrtc/common_audio/resampler/Android.mk
media/webrtc/trunk/webrtc/common_audio/signal_processing/Android.mk
media/webrtc/trunk/webrtc/common_audio/signal_processing/spl_version.c
media/webrtc/trunk/webrtc/common_audio/vad/Android.mk
media/webrtc/trunk/webrtc/common_video/libyuv/Android.mk
media/webrtc/trunk/webrtc/modules/audio_coding/codecs/cng/Android.mk
media/webrtc/trunk/webrtc/modules/audio_coding/codecs/g711/Android.mk
media/webrtc/trunk/webrtc/modules/audio_coding/codecs/g722/Android.mk
media/webrtc/trunk/webrtc/modules/audio_coding/codecs/ilbc/Android.mk
media/webrtc/trunk/webrtc/modules/audio_coding/codecs/isac/fix/source/Android.mk
media/webrtc/trunk/webrtc/modules/audio_coding/codecs/isac/main/source/Android.mk
media/webrtc/trunk/webrtc/modules/audio_coding/codecs/pcm16b/Android.mk
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/Android.mk
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_amr.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_amr.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_amrwb.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_amrwb.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_celt.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_celt.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_cng.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_cng.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_codec_database.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_codec_database.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_dtmf_detection.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_dtmf_detection.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_dtmf_playout.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_dtmf_playout.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_g722.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_g722.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_g7221.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_g7221.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_g7221c.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_g7221c.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_g729.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_g729.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_g7291.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_g7291.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_generic_codec.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_generic_codec.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_gsmfr.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_gsmfr.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_ilbc.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_ilbc.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_isac.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_isac.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_isac_macros.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_neteq.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_neteq.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_neteq_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_opus.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_opus.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_pcm16b.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_pcm16b.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_pcma.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_pcma.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_pcmu.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_pcmu.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_red.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_red.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_resampler.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_resampler.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_speex.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/acm_speex.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/audio_coding_module.gypi
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/audio_coding_module_impl.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/source/audio_coding_module_impl.h
media/webrtc/trunk/webrtc/modules/audio_coding/main/test/ACMTest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/test/TestFEC.cc
media/webrtc/trunk/webrtc/modules/audio_coding/main/test/TestFEC.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/Android.mk
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/accelerate.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/automode.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/automode.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/bgn_update.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/buffer_stats.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/bufstats_decision.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/cng_internal.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/codec_db.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/codec_db.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/codec_db_defines.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/correlator.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/delay_logging.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/dsp.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/dsp.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/dtmf_buffer.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/dtmf_tonegen.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/expand.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/interface/webrtc_neteq.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/interface/webrtc_neteq_help_macros.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/interface/webrtc_neteq_internal.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/mcu.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/mcu_address_init.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/mcu_dsp_common.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/mcu_reset.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/merge.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/min_distortion.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/mute_signal.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq_defines.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq_error_codes.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq_statistics.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq_unittests.isolate
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/normal.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/packet_buffer.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/peak_detection.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/preemptive_expand.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/random_vector.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/recin.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/recout.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/rtcp.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/rtp.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/rtp.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/set_fs.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/signal_mcu.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/split_and_insert.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/test/NETEQTEST_CodecClass.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/test/NETEQTEST_CodecClass.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/test/NETEQTEST_NetEQClass.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/test/NETEQTEST_NetEQClass.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/test/NetEqRTPplay.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/test/RTPanalyze.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/test/ptypes.txt
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/unmute_signal.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
media/webrtc/trunk/webrtc/modules/audio_coding/neteq/webrtc_neteq_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/OWNERS
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/accelerate.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/accelerate.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/audio_decoder.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/audio_decoder_impl.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/audio_decoder_impl.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/audio_decoder_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/audio_decoder_unittests.isolate
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/audio_multi_vector.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/audio_multi_vector.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/audio_multi_vector_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/audio_vector.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/audio_vector.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/audio_vector_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/background_noise.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/background_noise.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/background_noise_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/buffer_level_filter.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/buffer_level_filter.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/buffer_level_filter_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/comfort_noise.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/comfort_noise.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/comfort_noise_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/decision_logic.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/decision_logic.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/decision_logic_fax.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/decision_logic_fax.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/decision_logic_normal.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/decision_logic_normal.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/decision_logic_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/decoder_database.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/decoder_database.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/decoder_database_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/defines.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/delay_manager.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/delay_manager.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/delay_manager_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/delay_peak_detector.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/delay_peak_detector.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/delay_peak_detector_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/dsp_helper.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/dsp_helper.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/dsp_helper_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/dtmf_buffer.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/dtmf_buffer.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/dtmf_buffer_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/dtmf_tone_generator.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/dtmf_tone_generator.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/dtmf_tone_generator_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/expand.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/expand.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/expand_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/interface/audio_decoder.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/interface/neteq.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/merge.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/merge.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/merge_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/mock/mock_audio_decoder.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/mock/mock_audio_vector.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/mock/mock_buffer_level_filter.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/mock/mock_decoder_database.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/mock/mock_delay_manager.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/mock/mock_delay_peak_detector.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/mock/mock_dtmf_buffer.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/mock/mock_dtmf_tone_generator.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/mock/mock_external_decoder_pcm16b.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/mock/mock_packet_buffer.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/mock/mock_payload_splitter.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/neteq.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/neteq.gypi
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/neteq_external_decoder_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/neteq_impl.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/neteq_impl.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/neteq_impl_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/neteq_stereo_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/neteq_tests.gypi
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/neteq_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/normal.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/normal.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/normal_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/packet.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/packet_buffer.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/packet_buffer.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/packet_buffer_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/payload_splitter.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/payload_splitter.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/payload_splitter_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/post_decode_vad.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/post_decode_vad.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/post_decode_vad_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/preemptive_expand.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/preemptive_expand.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/random_vector.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/random_vector.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/random_vector_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/rtcp.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/rtcp.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/statistics_calculator.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/statistics_calculator.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/sync_buffer.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/sync_buffer.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/sync_buffer_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/NETEQTEST_DummyRTPpacket.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/NETEQTEST_DummyRTPpacket.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/NETEQTEST_RTPpacket.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/NETEQTEST_RTPpacket.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/PayloadTypes.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/RTPanalyze.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/RTPcat.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/RTPchange.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/RTPencode.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/RTPjitter.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/RTPtimeshift.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/delay_tool/parse_delay_file.m
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/delay_tool/plot_neteq_delay.m
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/neteq_performance_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/neteq_speed_test.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/test/rtp_to_text.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/time_stretch.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/time_stretch.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/time_stretch_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/timestamp_scaler.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/timestamp_scaler.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/timestamp_scaler_unittest.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/tools/audio_loop.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/tools/audio_loop.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/tools/input_audio_file.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/tools/input_audio_file.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/tools/neteq_performance_test.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/tools/neteq_performance_test.h
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/tools/neteq_rtpplay.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/tools/rtp_generator.cc
media/webrtc/trunk/webrtc/modules/audio_coding/neteq4/tools/rtp_generator.h
media/webrtc/trunk/webrtc/modules/audio_conference_mixer/source/Android.mk
media/webrtc/trunk/webrtc/modules/audio_device/Android.mk
media/webrtc/trunk/webrtc/modules/audio_device/ios/audio_device_ios.cc
media/webrtc/trunk/webrtc/modules/audio_processing/Android.mk
media/webrtc/trunk/webrtc/modules/audio_processing/aec/Android.mk
media/webrtc/trunk/webrtc/modules/audio_processing/aecm/Android.mk
media/webrtc/trunk/webrtc/modules/audio_processing/agc/Android.mk
media/webrtc/trunk/webrtc/modules/audio_processing/echo_cancellation_impl_wrapper.h
media/webrtc/trunk/webrtc/modules/audio_processing/ns/Android.mk
media/webrtc/trunk/webrtc/modules/audio_processing/test/android/apmtest/jni/Android.mk
media/webrtc/trunk/webrtc/modules/audio_processing/utility/Android.mk
media/webrtc/trunk/webrtc/modules/desktop_capture/mac/osx_version.cc
media/webrtc/trunk/webrtc/modules/desktop_capture/mac/osx_version.h
media/webrtc/trunk/webrtc/modules/media_file/source/Android.mk
media/webrtc/trunk/webrtc/modules/remote_bitrate_estimator/include/rtp_to_ntp.h
media/webrtc/trunk/webrtc/modules/remote_bitrate_estimator/rtp_to_ntp.cc
media/webrtc/trunk/webrtc/modules/remote_bitrate_estimator/rtp_to_ntp_unittest.cc
media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/Android.mk
media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/H264/bitstream_builder.cc
media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/H264/bitstream_builder.h
media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/H264/bitstream_parser.cc
media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/H264/bitstream_parser.h
media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/H264/h264_information.cc
media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/H264/h264_information.h
media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/H264/rtp_sender_h264.cc
media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/H264/rtp_sender_h264.h
media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/rtp_utility_unittest.cc
media/webrtc/trunk/webrtc/modules/utility/source/Android.mk
media/webrtc/trunk/webrtc/modules/video_capture/Android.mk
media/webrtc/trunk/webrtc/modules/video_capture/android/OWNERS
media/webrtc/trunk/webrtc/modules/video_capture/ios/video_capture_ios_objc.h
media/webrtc/trunk/webrtc/modules/video_capture/ios/video_capture_ios_objc.mm
media/webrtc/trunk/webrtc/modules/video_coding/codecs/i420/main/source/Android.mk
media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/Android.mk
media/webrtc/trunk/webrtc/modules/video_coding/main/source/Android.mk
media/webrtc/trunk/webrtc/modules/video_coding/main/source/timestamp_extrapolator.cc
media/webrtc/trunk/webrtc/modules/video_coding/main/source/timestamp_extrapolator.h
media/webrtc/trunk/webrtc/modules/video_coding/main/test/pcap_file_reader.cc
media/webrtc/trunk/webrtc/modules/video_coding/main/test/pcap_file_reader.h
media/webrtc/trunk/webrtc/modules/video_coding/main/test/pcap_file_reader_unittest.cc
media/webrtc/trunk/webrtc/modules/video_coding/main/test/rtp_file_reader.cc
media/webrtc/trunk/webrtc/modules/video_coding/main/test/rtp_file_reader.h
media/webrtc/trunk/webrtc/modules/video_coding/main/test/rtp_file_reader_unittest.cc
media/webrtc/trunk/webrtc/modules/video_coding/utility/Android.mk
media/webrtc/trunk/webrtc/modules/video_coding/utility/exp_filter.cc
media/webrtc/trunk/webrtc/modules/video_coding/utility/include/exp_filter.h
media/webrtc/trunk/webrtc/modules/video_processing/main/OWNERS
media/webrtc/trunk/webrtc/modules/video_processing/main/source/Android.mk
media/webrtc/trunk/webrtc/modules/video_processing/main/source/denoising.cc
media/webrtc/trunk/webrtc/modules/video_processing/main/source/denoising.h
media/webrtc/trunk/webrtc/modules/video_processing/main/test/unit_test/denoising_test.cc
media/webrtc/trunk/webrtc/modules/video_render/Android.mk
media/webrtc/trunk/webrtc/modules/video_render/android/OWNERS
media/webrtc/trunk/webrtc/system_wrappers/interface/constructor_magic.h
media/webrtc/trunk/webrtc/system_wrappers/interface/thread_annotations.h
media/webrtc/trunk/webrtc/system_wrappers/source/Android.mk
media/webrtc/trunk/webrtc/system_wrappers/source/unittest_utilities.h
media/webrtc/trunk/webrtc/system_wrappers/source/unittest_utilities_unittest.cc
media/webrtc/trunk/webrtc/test/Android.mk
media/webrtc/trunk/webrtc/test/buildbot_tests.py
media/webrtc/trunk/webrtc/test/flags.cc
media/webrtc/trunk/webrtc/test/flags.h
media/webrtc/trunk/webrtc/test/libtest/helpers/bit_flip_encryption.cc
media/webrtc/trunk/webrtc/test/libtest/helpers/random_encryption.cc
media/webrtc/trunk/webrtc/test/libtest/include/bit_flip_encryption.h
media/webrtc/trunk/webrtc/test/libtest/include/random_encryption.h
media/webrtc/trunk/webrtc/test/libtest/libtest.gyp
media/webrtc/trunk/webrtc/test/mac/run_tests.mm
media/webrtc/trunk/webrtc/test/run_tests.h
media/webrtc/trunk/webrtc/test/testsupport/android/root_path_android.cc
media/webrtc/trunk/webrtc/test/testsupport/android/root_path_android_chromium.cc
media/webrtc/trunk/webrtc/test/w3c/getusermedia_conformance_test.html
media/webrtc/trunk/webrtc/test/w3c/getusermedia_conformance_test.js
media/webrtc/trunk/webrtc/test/w3c/peerconnection_conformance_test.html
media/webrtc/trunk/webrtc/video/call_tests.cc
media/webrtc/trunk/webrtc/video_engine/Android.mk
media/webrtc/trunk/webrtc/video_engine/test/auto_test/android/Android.mk
media/webrtc/trunk/webrtc/video_engine/test/auto_test/android/jni/Android.mk
media/webrtc/trunk/webrtc/video_engine/test/auto_test/source/Android.mk
media/webrtc/trunk/webrtc/voice_engine/Android.mk
media/webrtc/trunk/webrtc/voice_engine/include/mock/mock_voe_connection_observer.h
media/webrtc/trunk/webrtc/voice_engine/include/voe_call_report.h
media/webrtc/trunk/webrtc/voice_engine/include/voe_encryption.h
media/webrtc/trunk/webrtc/voice_engine/output_mixer_internal.cc
media/webrtc/trunk/webrtc/voice_engine/output_mixer_internal.h
media/webrtc/trunk/webrtc/voice_engine/output_mixer_unittest.cc
media/webrtc/trunk/webrtc/voice_engine/test/android/OWNERS
media/webrtc/trunk/webrtc/voice_engine/test/android/android_test/Android.mk
media/webrtc/trunk/webrtc/voice_engine/test/android/android_test/jni/Android.mk
media/webrtc/trunk/webrtc/voice_engine/test/auto_test/Android.mk
media/webrtc/trunk/webrtc/voice_engine/test/auto_test/fuzz/rtp_fuzz_test.cc
media/webrtc/trunk/webrtc/voice_engine/test/auto_test/standard/call_report_test.cc
media/webrtc/trunk/webrtc/voice_engine/test/auto_test/standard/encryption_test.cc
media/webrtc/trunk/webrtc/voice_engine/test/auto_test/standard/manual_hold_test.cc
media/webrtc/trunk/webrtc/voice_engine/test/auto_test/standard/neteq_test.cc
media/webrtc/trunk/webrtc/voice_engine/test/auto_test/standard/network_test.cc
media/webrtc/trunk/webrtc/voice_engine/test/auto_test/voe_unit_test.cc
media/webrtc/trunk/webrtc/voice_engine/test/auto_test/voe_unit_test.h
media/webrtc/trunk/webrtc/voice_engine/test/cmd_test/Android.mk
media/webrtc/trunk/webrtc/voice_engine/voe_call_report_impl.cc
media/webrtc/trunk/webrtc/voice_engine/voe_call_report_impl.h
media/webrtc/trunk/webrtc/voice_engine/voe_encryption_impl.cc
media/webrtc/trunk/webrtc/voice_engine/voe_encryption_impl.h
media/webrtc/trunk/webrtc/voice_engine/voe_neteq_stats_unittest.cc
memory/mozalloc/fallible.h
mfbt/TypedEnum.h
mfbt/TypedEnumInternal.h
mobile/android/app/Makefile.in
mobile/android/base/StartPane.java
mobile/android/base/browserid/verifier/BrowserIDRemoteVerifierClient.java
mobile/android/base/gfx/BufferedCairoImage.java
mobile/android/base/gfx/CairoGLInfo.java
mobile/android/base/gfx/CairoImage.java
mobile/android/base/gfx/CairoUtils.java
mobile/android/base/gfx/GeckoLayerClient.java
mobile/android/base/resources/drawable-hdpi/favicon.png
mobile/android/base/resources/drawable-large-hdpi-v11/new_tablet_default_favicon.png
mobile/android/base/resources/drawable-large-mdpi-v11/new_tablet_default_favicon.png
mobile/android/base/resources/drawable-large-xhdpi-v11/new_tablet_default_favicon.png
mobile/android/base/resources/drawable-large-xxhdpi-v11/new_tablet_default_favicon.png
mobile/android/base/resources/drawable-mdpi/favicon.png
mobile/android/base/resources/drawable-xhdpi/favicon.png
mobile/android/base/resources/drawable/new_tablet_default_favicon.xml
mobile/android/base/resources/drawable/onboard_start_button.xml
mobile/android/base/resources/drawable/url_bar_nav_button.xml
mobile/android/base/resources/layout-large-v11/new_tablet_browser_toolbar.xml
mobile/android/base/resources/layout/onboard_start_pane.xml
mobile/android/base/toolbar/BrowserToolbarNewTablet.java
mobile/android/base/toolbar/TabletTabsButton.java
mobile/android/components/Sidebar.js
mobile/android/config/mozconfigs/android-armv6/debug
mobile/android/config/mozconfigs/android-armv6/l10n-nightly
mobile/android/config/mozconfigs/android-armv6/l10n-release
mobile/android/config/mozconfigs/android-armv6/nightly
mobile/android/config/mozconfigs/android-armv6/release
mobile/android/config/mozconfigs/android/debug
mobile/android/config/mozconfigs/android/l10n-nightly
mobile/android/config/mozconfigs/android/l10n-release
mobile/android/config/mozconfigs/android/nightly
mobile/android/config/mozconfigs/android/release
mobile/android/gradle/android.gradle
mobile/android/themes/core/images/reader-minus-icon-hdpi.png
mobile/android/themes/core/images/reader-minus-icon-mdpi.png
mobile/android/themes/core/images/reader-minus-icon-xhdpi.png
mobile/android/themes/core/images/reader-plus-icon-hdpi.png
mobile/android/themes/core/images/reader-plus-icon-mdpi.png
mobile/android/themes/core/images/reader-plus-icon-xhdpi.png
modules/libjar/test/chrome/moz.build
modules/libjar/test/mochitest/moz.build
modules/libjar/test/moz.build
modules/libjar/zipwriter/test/moz.build
modules/libpref/test/moz.build
netwerk/dns/Makefile.in
security/manager/boot/public/nsISecurityWarningDialogs.idl
security/manager/boot/src/nsSecurityWarningDialogs.cpp
security/manager/boot/src/nsSecurityWarningDialogs.h
security/manager/locales/en-US/chrome/pipnss/security.properties
security/manager/pki/resources/content/getp12password.xul
security/manager/ssl/public/nsIStreamCipher.idl
security/manager/ssl/src/nsStreamCipher.cpp
security/manager/ssl/src/nsStreamCipher.h
security/pkix/include/pkix/bind.h
security/pkix/lib/pkixbind.cpp
security/sandbox/chromium-shim/base/threading/thread_local_storage.h
security/sandbox/chromium/base/atomicops_internals_tsan.h
security/sandbox/chromium/base/file_util.h
security/sandbox/chromium/base/file_util_win.cc
security/sandbox/chromium/sandbox/linux/seccomp-bpf/demo.cc
security/sandbox/chromium/sandbox/linux/seccomp-bpf/sandbox_bpf_compatibility_policy.h
security/sandbox/chromium/sandbox/linux/seccomp-bpf/sandbox_bpf_policy.cc
security/sandbox/chromium/sandbox/linux/seccomp-bpf/sandbox_bpf_policy.h
security/sandbox/chromium/sandbox/linux/seccomp-bpf/sandbox_bpf_unittest.cc
services/common/Makefile.in
services/crypto/component/tests/moz.build
services/crypto/tests/moz.build
services/datareporting/tests/moz.build
services/fxaccounts/tests/moz.build
services/healthreport/tests/moz.build
services/metrics/tests/moz.build
services/mobileid/tests/moz.build
services/sync/tests/moz.build
testing/mozbase/manifestparser/manifestparser/manifestparser.py
testing/web-platform/meta/FileAPI/Blob-close.html.ini
testing/web-platform/meta/FileAPI/Blob-constructor.html.ini
testing/web-platform/meta/FileAPI/Blob-slice.html.ini
testing/web-platform/meta/FileAPI/BlobURL/test1_manual.html.ini
testing/web-platform/meta/FileAPI/BlobURL/test2_manual.html.ini
testing/web-platform/meta/FileAPI/BlobURL/test3_manual.html.ini
testing/web-platform/meta/FileAPI/File-constructor.html.ini
testing/web-platform/meta/FileAPI/FileReader-interface/filereader_abort.html.ini
testing/web-platform/meta/FileAPI/FileReader/test_errors_manual.html.ini
testing/web-platform/meta/XMLHttpRequest/withcredentials-set.htm.ini
testing/web-platform/meta/XMLHttpRequest/withcredentials-wrong-state.htm.ini
testing/web-platform/meta/battery-status/battery-interface-idlharness.html.ini
testing/web-platform/meta/gamepad/idlharness.html.ini
testing/web-platform/meta/html/browsers/history/the-history-interface/003.html.ini
testing/web-platform/meta/html/dom/documents/resource-metadata-management/document-cookie.html.ini
testing/web-platform/meta/html/dom/documents/resource-metadata-management/document-lastModified-01.html.ini
testing/web-platform/meta/html/semantics/embedded-content/the-canvas-element/size.attributes.parse.whitespace.html.ini
testing/web-platform/meta/html/syntax/serializing-html-fragments/outerHTML.html.ini
testing/web-platform/meta/notifications/interfaces.html.ini
testing/web-platform/meta/selectors-api/tests/submissions/Opera/Element-matches.html.ini
testing/web-platform/meta/selectors-api/tests/submissions/Opera/ParentNode-find-findAll.html.ini
testing/web-platform/meta/user-timing/idlharness.html.ini
testing/web-platform/meta/user-timing/test_user_timing_clear_marks.html.ini
testing/web-platform/meta/user-timing/test_user_timing_clear_measures.html.ini
testing/web-platform/meta/user-timing/test_user_timing_entry_type.html.ini
testing/web-platform/meta/user-timing/test_user_timing_exists.html.ini
testing/web-platform/meta/user-timing/test_user_timing_mark_and_measure_exception_when_invoke_without_parameter.html.ini
testing/web-platform/meta/user-timing/test_user_timing_mark_exceptions.html.ini
testing/web-platform/meta/user-timing/test_user_timing_measure_exceptions.html.ini
testing/web-platform/meta/webaudio/the-audio-api/the-audiodestinationnode-interface/idl-test.html.ini
testing/web-platform/meta/webaudio/the-audio-api/the-delaynode-interface/idl-test.html.ini
testing/web-platform/meta/webaudio/the-audio-api/the-gainnode-interface/idl-test.html.ini
testing/web-platform/meta/webstorage/idlharness.html.ini
testing/web-platform/meta/webstorage/storage_local_security.html.ini
testing/web-platform/meta/workers/WorkerLocation_hash_encoding.htm.ini
testing/web-platform/meta/workers/interfaces/DedicatedWorkerGlobalScope/onmessage.html.ini
testing/web-platform/tests/FileAPI/Blob-XHR-revoke.html
testing/web-platform/tests/FileAPI/Blob-close.html
testing/web-platform/tests/FileAPI/Blob-constructor.html
testing/web-platform/tests/FileAPI/Blob-slice.html
testing/web-platform/tests/FileAPI/BlobURL/test1_manual.html
testing/web-platform/tests/FileAPI/BlobURL/test2_manual.html
testing/web-platform/tests/FileAPI/BlobURL/test3_manual.html
testing/web-platform/tests/FileAPI/File-constructor.html
testing/web-platform/tests/FileAPI/FileReader-interface/.gitkeep
testing/web-platform/tests/FileAPI/FileReader-interface/filereader_abort.html
testing/web-platform/tests/FileAPI/FileReader-interface/filereader_error.html
testing/web-platform/tests/FileAPI/FileReader-interface/filereader_file-manual.html
testing/web-platform/tests/FileAPI/FileReader-interface/filereader_file_img-manual.html
testing/web-platform/tests/FileAPI/FileReader-interface/filereader_readAsArrayBuffer.html
testing/web-platform/tests/FileAPI/FileReader-interface/filereader_readAsDataURL.html
testing/web-platform/tests/FileAPI/FileReader-interface/filereader_readAsText.html
testing/web-platform/tests/FileAPI/FileReader-interface/filereader_readystate.html
testing/web-platform/tests/FileAPI/FileReader-interface/filereader_result.html
testing/web-platform/tests/FileAPI/FileReader-interface/support/blue-100x100.png
testing/web-platform/tests/FileAPI/FileReader/Determining-Encoding.html
testing/web-platform/tests/FileAPI/FileReader/test_errors_manual.html
testing/web-platform/tests/WebIDL/tests/submissions/W3C/invalid/idl/enum.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/invalid/idl/module.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/invalid/idl/nonnullableany.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/invalid/idl/nonnullableobjects.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/invalid/idl/raises.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/invalid/idl/scopedname.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/invalid/idl/sequenceAsAttribute.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/invalid/idl/special-omittable.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/invalid/idl/stringconstants.idl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/readme.txt
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/allowany.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/array.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/attributes.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/callback.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/caller.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/constants.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/constructor.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/dictionary-inherits.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/dictionary.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/documentation-dos.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/documentation.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/enum.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/equivalent-decl.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/exception-inheritance.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/exception.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/getter-setter.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/identifier-qualified-names.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/implements.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/indexed-properties.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/inherits-getter.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/interface-inherits.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/iterator.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/namedconstructor.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/nointerfaceobject.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/nullable.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/nullableobjects.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/operation-optional-arg.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/overloading.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/overridebuiltins.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/partial-interface.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/primitives.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/prototyperoot.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/putforwards.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/reg-operations.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/replaceable.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/sequence.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/serializer.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/static.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/stringifier-attribute.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/stringifier-custom.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/stringifier.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/treatasnull.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/treatasundefined.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/typedef.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/typesuffixes.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/uniontype.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/idl/variadic-operations.widl
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/allowany.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/array.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/attributes.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/callback.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/caller.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/constants.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/constructor.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/dictionary-inherits.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/dictionary.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/documentation-dos.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/documentation.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/enum.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/equivalent-decl.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/exception-inheritance.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/exception.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/getter-setter.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/identifier-qualified-names.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/implements.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/indexed-properties.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/inherits-getter.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/interface-inherits.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/iterator.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/module.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/namedconstructor.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/namespaceobject.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/nointerfaceobject.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/nullable.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/nullableobjects.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/operation-optional-arg.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/overloading.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/overridebuiltins.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/partial-interface.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/primitives.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/prototyperoot.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/putforwards.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/reg-operations.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/replaceable.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/sequence.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/serializer.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/special-omittable.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/static.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/stringifier-attribute.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/stringifier-custom.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/stringifier.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/treatasnull.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/treatasundefined.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/typedef.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/typesuffixes.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/uniontype.widlprocxml
testing/web-platform/tests/WebIDL/tests/submissions/W3C/valid/xml/variadic-operations.widlprocxml
testing/web-platform/tests/XMLHttpRequest/withcredentials-set.htm
testing/web-platform/tests/XMLHttpRequest/withcredentials-wrong-state.htm
testing/web-platform/tests/battery-status/battery-plugged-in-manual.html
testing/web-platform/tests/battery-status/battery-unplugged-manual.html
testing/web-platform/tests/battery-status/countdown.js
testing/web-platform/tests/common/failing-test.html
testing/web-platform/tests/conformance-checkers/html/attributes/accesskey/surrogate-pair-high-novalid.html
testing/web-platform/tests/conformance-checkers/html/attributes/accesskey/surrogate-pair-low-novalid.html
testing/web-platform/tests/conformance-checkers/html/elements/picture/build.py
testing/web-platform/tests/conformance-checkers/html/media-queries/generate.py
testing/web-platform/tests/conformance-checkers/html/mime-types/generate.py
testing/web-platform/tests/conformance-checkers/html/tools/ins-del-datetime.py
testing/web-platform/tests/conformance-checkers/html/tools/meta-extensions
testing/web-platform/tests/conformance-checkers/html/tools/meta-name.py
testing/web-platform/tests/conformance-checkers/html/tools/url.py
testing/web-platform/tests/html/browsers/history/the-history-interface/003.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/combination_history_001.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/combination_history_002.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/combination_history_003.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/combination_history_004.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/combination_history_005.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/combination_history_006.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/combination_history_007.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/history_back.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/history_forward.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/history_go_minus.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/history_go_plus.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/history_pushstate.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/history_pushstate_err.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/history_pushstate_nooptionalparam.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/history_replacestate.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/history_replacestate_err.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/history_replacestate_nooptionalparam.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/history_state.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/location_assign.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/location_hash.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/location_host.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/location_hostname.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/location_href.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/location_pathname.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/location_port.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/location_protocol.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/location_replace.html
testing/web-platform/tests/old-tests/submission/Infraware/Session_History/contents/Session_History/location_search.html
testing/web-platform/tests/selectors-api/tests/submissions/Opera/Element-matches.html
testing/web-platform/tests/selectors-api/tests/submissions/Opera/Element-matches.js
testing/web-platform/tests/selectors-api/tests/submissions/Opera/ParentNode-find-findAll.html
testing/web-platform/tests/selectors-api/tests/submissions/Opera/ParentNode-find-findAll.js
testing/web-platform/tests/selectors-api/tests/submissions/Opera/level2-lib.js
testing/web-platform/tests/webstorage/iframe/local_security_iframe.html
testing/web-platform/tests/webstorage/storage_local_security.html
testing/web-platform/tests/workers/WorkerGlobalScope_EventTarget.htm
testing/web-platform/tests/workers/WorkerGlobalScope_XMLHttpRequest.htm
testing/web-platform/tests/workers/WorkerGlobalScope_addEventListener.htm
testing/web-platform/tests/workers/WorkerGlobalScope_nested_Worker.htm
testing/web-platform/tests/workers/WorkerGlobalScope_removeEventListener.htm
testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/onmessage.html
testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/return-value.html
testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/001.html
testing/web-platform/tests/workers/support/EventListener.js
testing/web-platform/tests/workers/support/WorkerNested.js
testing/web-platform/tests/workers/support/XMLHttpRequest.js
testing/web-platform/tests/workers/support/XMLHttpRequest.txt
toolkit/components/aboutmemory/tests/chrome.ini
toolkit/components/passwordmgr/test/test_basic_form_observer_autocomplete.html
toolkit/components/passwordmgr/test/test_bug_227640.html
toolkit/components/xulstore/tests/moz.build
toolkit/content/tests/widgets/chrome.ini
toolkit/devtools/apps/tests/moz.build
toolkit/devtools/discovery/tests/moz.build
toolkit/devtools/server/tests/mochitest/chrome.ini
toolkit/devtools/transport/tests/moz.build
toolkit/mozapps/extensions/content/openH264Prefs.xul
toolkit/mozapps/extensions/internal/OpenH264Provider.jsm
toolkit/mozapps/extensions/test/browser/browser_openH264.js
toolkit/mozapps/extensions/test/xpcshell/test_openh264.js
toolkit/mozapps/update/tests/chrome/chrome.ini
toolkit/themes/osx/global/config.css
toolkit/themes/osx/mozapps/extensions/utilities.png
toolkit/themes/windows/global/config.css
toolkit/themes/windows/mozapps/extensions/utilities.png
toolkit/webapps/tests/chrome.ini
widget/tests/chrome.ini
xpcom/base/Makefile.in
xpcom/base/nsErrorAssertsC.c
xpcom/tests/TestThreadPool.cpp
xpcom/tests/TestTimeStamp.cpp
xpcom/tests/TestUTF.cpp
xpcom/tests/UTFStrings.h
new file mode 100644
--- /dev/null
+++ b/GNUmakefile
@@ -0,0 +1,14 @@
+# This Makefile is used as a shim to aid people with muscle memory
+# so that they can type "make".
+#
+# This file and all of its targets should not be used by anything important.
+
+all: build
+
+build:
+	./mach build
+
+clean:
+	./mach clobber
+
+.PHONY: all build clean
--- a/README.txt
+++ b/README.txt
@@ -21,8 +21,9 @@ are accessible on Google Groups, or news
 You can download nightly development builds from the Mozilla FTP server.
 Keep in mind that nightly builds, which are used by Mozilla developers for
 testing, may be buggy. Firefox nightlies, for example, can be found at:
 
     ftp://ftp.mozilla.org/pub/firefox/nightly/latest-trunk/
             - or -
     http://nightly.mozilla.org/
 
+
--- a/accessible/atk/AccessibleWrap.cpp
+++ b/accessible/atk/AccessibleWrap.cpp
@@ -956,16 +956,50 @@ UpdateAtkRelation(RelationType aType, Ac
 }
 
 AtkRelationSet *
 refRelationSetCB(AtkObject *aAtkObj)
 {
   AtkRelationSet* relation_set =
     ATK_OBJECT_CLASS(parent_class)->ref_relation_set(aAtkObj);
 
+  const AtkRelationType typeMap[] = {
+#define RELATIONTYPE(gecko, s, atk, m, i) atk,
+#include "RelationTypeMap.h"
+#undef RELATIONTYPE
+  };
+
+  if (ProxyAccessible* proxy = GetProxy(aAtkObj)) {
+    nsTArray<RelationType> types;
+    nsTArray<nsTArray<ProxyAccessible*>> targetSets;
+    proxy->Relations(&types, &targetSets);
+
+    size_t relationCount = types.Length();
+    for (size_t i = 0; i < relationCount; i++) {
+      if (typeMap[static_cast<uint32_t>(types[i])] == ATK_RELATION_NULL)
+        continue;
+
+      size_t targetCount = targetSets[i].Length();
+      nsAutoTArray<AtkObject*, 5> wrappers;
+      for (size_t j = 0; j < targetCount; j++)
+        wrappers.AppendElement(GetWrapperFor(targetSets[i][j]));
+
+      AtkRelationType atkType = typeMap[static_cast<uint32_t>(types[i])];
+      AtkRelation* atkRelation =
+        atk_relation_set_get_relation_by_type(relation_set, atkType);
+      if (atkRelation)
+        atk_relation_set_remove(relation_set, atkRelation);
+
+      atkRelation = atk_relation_new(wrappers.Elements(), wrappers.Length(),
+                                     atkType);
+      atk_relation_set_add(relation_set, atkRelation);
+      g_object_unref(atkRelation);
+    }
+  }
+
   AccessibleWrap* accWrap = GetAccessibleWrap(aAtkObj);
   if (!accWrap)
     return relation_set;
 
 #define RELATIONTYPE(geckoType, geckoTypeName, atkType, msaaType, ia2Type) \
   UpdateAtkRelation(RelationType::geckoType, accWrap, atkType, relation_set);
 
 #include "RelationTypeMap.h"
--- a/accessible/base/ARIAMap.cpp
+++ b/accessible/base/ARIAMap.cpp
@@ -361,16 +361,26 @@ static nsRoleMapEntry sWAIRoleMaps[] =
     kUseMapRole,
     eNoValue,
     eClickAction,
     eNoLiveAttr,
     kGenericAccType,
     kNoReqStates,
     eARIACheckableBool
   },
+  { // none
+    &nsGkAtoms::none,
+    roles::NOTHING,
+    kUseMapRole,
+    eNoValue,
+    eNoAction,
+    eNoLiveAttr,
+    kGenericAccType,
+    kNoReqStates
+  },
   { // note
     &nsGkAtoms::note_,
     roles::NOTE,
     kUseMapRole,
     eNoValue,
     eNoAction,
     eNoLiveAttr,
     kGenericAccType,
@@ -706,17 +716,17 @@ static const AttrCharacteristics gWAIUni
   {&nsGkAtoms::aria_controls,          ATTR_BYPASSOBJ                 | ATTR_GLOBAL },
   {&nsGkAtoms::aria_describedby,       ATTR_BYPASSOBJ                 | ATTR_GLOBAL },
   {&nsGkAtoms::aria_disabled,          ATTR_BYPASSOBJ | ATTR_VALTOKEN | ATTR_GLOBAL },
   {&nsGkAtoms::aria_dropeffect,                         ATTR_VALTOKEN | ATTR_GLOBAL },
   {&nsGkAtoms::aria_expanded,          ATTR_BYPASSOBJ | ATTR_VALTOKEN               },
   {&nsGkAtoms::aria_flowto,            ATTR_BYPASSOBJ                 | ATTR_GLOBAL },
   {&nsGkAtoms::aria_grabbed,                            ATTR_VALTOKEN | ATTR_GLOBAL },
   {&nsGkAtoms::aria_haspopup,          ATTR_BYPASSOBJ | ATTR_VALTOKEN | ATTR_GLOBAL },
-  {&nsGkAtoms::aria_hidden,   ATTR_BYPASSOBJ_IF_FALSE | ATTR_VALTOKEN | ATTR_GLOBAL },
+  {&nsGkAtoms::aria_hidden,            ATTR_BYPASSOBJ | ATTR_VALTOKEN | ATTR_GLOBAL }, /* handled special way */
   {&nsGkAtoms::aria_invalid,           ATTR_BYPASSOBJ | ATTR_VALTOKEN | ATTR_GLOBAL },
   {&nsGkAtoms::aria_label,             ATTR_BYPASSOBJ                 | ATTR_GLOBAL },
   {&nsGkAtoms::aria_labelledby,        ATTR_BYPASSOBJ                 | ATTR_GLOBAL },
   {&nsGkAtoms::aria_level,             ATTR_BYPASSOBJ                               }, /* handled via groupPosition */
   {&nsGkAtoms::aria_live,                               ATTR_VALTOKEN | ATTR_GLOBAL },
   {&nsGkAtoms::aria_modal,             ATTR_BYPASSOBJ | ATTR_VALTOKEN | ATTR_GLOBAL },
   {&nsGkAtoms::aria_multiline,         ATTR_BYPASSOBJ | ATTR_VALTOKEN               },
   {&nsGkAtoms::aria_multiselectable,   ATTR_BYPASSOBJ | ATTR_VALTOKEN               },
@@ -793,16 +803,25 @@ aria::AttrCharacteristicsFor(nsIAtom* aA
 {
   for (uint32_t i = 0; i < ArrayLength(gWAIUnivAttrMap); i++)
     if (*gWAIUnivAttrMap[i].attributeName == aAtom)
       return gWAIUnivAttrMap[i].characteristics;
 
   return 0;
 }
 
+bool
+aria::HasDefinedARIAHidden(nsIContent* aContent)
+{
+  return aContent &&
+    nsAccUtils::HasDefinedARIAToken(aContent, nsGkAtoms::aria_hidden) &&
+    !aContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::aria_hidden,
+                           nsGkAtoms::_false, eCaseMatters);
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // AttrIterator class
 
 bool
 AttrIterator::Next(nsAString& aAttrName, nsAString& aAttrValue)
 {
   while (mAttrIdx < mAttrCount) {
     const nsAttrName* attr = mContent->GetAttrNameAt(mAttrIdx);
--- a/accessible/base/ARIAMap.h
+++ b/accessible/base/ARIAMap.h
@@ -222,16 +222,21 @@ uint64_t UniversalStatesFor(mozilla::dom
  * Get the ARIA attribute characteristics for a given ARIA attribute.
  *
  * @param aAtom  ARIA attribute
  * @return       A bitflag representing the attribute characteristics
  *               (see above for possible bit masks, prefixed "ATTR_")
  */
 uint8_t AttrCharacteristicsFor(nsIAtom* aAtom);
 
+/**
+ * Return true if the element has defined aria-hidden.
+ */
+bool HasDefinedARIAHidden(nsIContent* aContent);
+
  /**
   * Represents a simple enumerator for iterating through ARIA attributes
   * exposed as object attributes on a given accessible.
   */
 class AttrIterator
 {
 public:
   explicit AttrIterator(nsIContent* aContent) :
--- a/accessible/base/AccGroupInfo.cpp
+++ b/accessible/base/AccGroupInfo.cpp
@@ -59,20 +59,20 @@ AccGroupInfo::Update()
     }
 
     // Skip subset.
     if (siblingLevel > level)
       continue;
 
     // If the previous item in the group has calculated group information then
     // build group information for this item based on found one.
-    if (sibling->mGroupInfo) {
-      mPosInSet += sibling->mGroupInfo->mPosInSet;
-      mParent = sibling->mGroupInfo->mParent;
-      mSetSize = sibling->mGroupInfo->mSetSize;
+    if (sibling->mBits.groupInfo) {
+      mPosInSet += sibling->mBits.groupInfo->mPosInSet;
+      mParent = sibling->mBits.groupInfo->mParent;
+      mSetSize = sibling->mBits.groupInfo->mSetSize;
       return;
     }
 
     mPosInSet++;
   }
 
   // Compute set size.
   mSetSize = mPosInSet;
@@ -96,19 +96,19 @@ AccGroupInfo::Update()
       break;
 
     // Skip subset.
     if (siblingLevel > level)
       continue;
 
     // If the next item in the group has calculated group information then
     // build group information for this item based on found one.
-    if (sibling->mGroupInfo) {
-      mParent = sibling->mGroupInfo->mParent;
-      mSetSize = sibling->mGroupInfo->mSetSize;
+    if (sibling->mBits.groupInfo) {
+      mParent = sibling->mBits.groupInfo->mParent;
+      mSetSize = sibling->mBits.groupInfo->mSetSize;
       return;
     }
 
     mSetSize++;
   }
 
   if (mParent)
     return;
--- a/accessible/base/AccTypes.h
+++ b/accessible/base/AccTypes.h
@@ -47,16 +47,17 @@ enum AccType {
 
   /**
    * Other accessible types.
    */
   eApplicationType,
   eHTMLOptGroupType,
   eImageMapType,
   eMenuPopupType,
+  eProxyType,
   eProgressType,
   eRootType,
   eXULLabelType,
   eXULListItemType,
   eXULTabpanelsType,
   eXULTreeType,
 
   eLastAccType = eXULTreeType
--- a/accessible/base/RelationType.h
+++ b/accessible/base/RelationType.h
@@ -2,18 +2,16 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef mozilla_a11y_relationtype_h_
 #define mozilla_a11y_relationtype_h_
 
-#include "mozilla/TypedEnum.h"
-
 namespace mozilla {
 namespace a11y {
 
 enum class RelationType {
 
   /**
    * This object is labelled by a target object.
    */
--- a/accessible/base/nsAccCache.h
+++ b/accessible/base/nsAccCache.h
@@ -15,22 +15,33 @@
 /**
  * Shutdown and removes the accessible from cache.
  */
 template <class T>
 static PLDHashOperator
 ClearCacheEntry(const void* aKey, nsRefPtr<T>& aAccessible, void* aUserArg)
 {
   NS_ASSERTION(aAccessible, "Calling ClearCacheEntry with a nullptr pointer!");
-  if (aAccessible)
+  if (aAccessible && !aAccessible->IsDefunct())
     aAccessible->Shutdown();
 
   return PL_DHASH_REMOVE;
 }
 
+template <class T>
+static PLDHashOperator
+UnbindCacheEntryFromDocument(const void* aKey, nsRefPtr<T>& aAccessible,
+                             void* aUserArg)
+{
+  MOZ_ASSERT(aAccessible && !aAccessible->IsDefunct());
+  aAccessible->Document()->UnbindFromDocument(aAccessible);
+
+  return PL_DHASH_REMOVE;
+}
+
 /**
  * Clear the cache and shutdown the accessibles.
  */
 
 template <class T>
 static void
 ClearCache(nsRefPtrHashtable<nsPtrHashKey<const void>, T>& aCache)
 {
--- a/accessible/base/nsAccessibilityService.cpp
+++ b/accessible/base/nsAccessibilityService.cpp
@@ -957,69 +957,70 @@ nsAccessibilityService::GetOrCreateAcces
     return newAcc;
   }
 
   nsRoleMapEntry* roleMapEntry = aria::GetRoleMap(aNode);
 
   // If the element is focusable or global ARIA attribute is applied to it or
   // it is referenced by ARIA relationship then treat role="presentation" on
   // the element as the role is not there.
-  if (roleMapEntry && roleMapEntry->Is(nsGkAtoms::presentation)) {
+  if (roleMapEntry &&
+      (roleMapEntry->Is(nsGkAtoms::presentation) ||
+       roleMapEntry->Is(nsGkAtoms::none))) {
     if (!MustBeAccessible(content, document))
       return nullptr;
 
     roleMapEntry = nullptr;
   }
 
   if (!newAcc && isHTML) {  // HTML accessibles
-    if (roleMapEntry) {
-      // Create pure ARIA grid/treegrid related accessibles if they weren't used
-      // on accessible HTML table elements.
+    bool isARIATableOrCell = roleMapEntry &&
+      (roleMapEntry->accTypes & (eTableCell | eTable));
+
+    if (!isARIATableOrCell ||
+        frame->AccessibleType() == eHTMLTableCellType ||
+        frame->AccessibleType() == eHTMLTableType) {
+      // Prefer to use markup (mostly tag name, perhaps attributes) to decide if
+      // and what kind of accessible to create,
+      newAcc = CreateHTMLAccessibleByMarkup(frame, content, aContext);
+      if (!newAcc) // try by frame accessible type.
+        newAcc = CreateAccessibleByFrameType(frame, content, aContext);
+    }
+
+    // In case of ARIA grids use grid-specific classes if it's not native table
+    // based.
+    if (isARIATableOrCell && (!newAcc || newAcc->IsGenericHyperText())) {
       if ((roleMapEntry->accTypes & eTableCell)) {
-        if (aContext->IsTableRow() &&
-            (frame->AccessibleType() != eHTMLTableCellType ||
-             aContext->GetContent() != content->GetParent())) {
+        if (aContext->IsTableRow())
           newAcc = new ARIAGridCellAccessibleWrap(content, document);
-        }
 
-      } else if ((roleMapEntry->IsOfType(eTable)) &&
-                 frame->AccessibleType() != eHTMLTableType) {
+      } else if (roleMapEntry->IsOfType(eTable)) {
         newAcc = new ARIAGridAccessibleWrap(content, document);
       }
     }
 
-    if (!newAcc) {
-      // Prefer to use markup (mostly tag name, perhaps attributes) to decide if
-      // and what kind of accessible to create.
-      newAcc = CreateHTMLAccessibleByMarkup(frame, content, aContext);
-
-      // Try using frame to do it.
-      if (!newAcc)
-        newAcc = CreateAccessibleByFrameType(frame, content, aContext);
-
-      // If table has strong ARIA role then all table descendants shouldn't
-      // expose their native roles.
-      if (!roleMapEntry && newAcc && aContext->HasStrongARIARole()) {
-        if (frame->AccessibleType() == eHTMLTableRowType) {
-          nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
-          if (!contextRoleMap->IsOfType(eTable))
-            roleMapEntry = &aria::gEmptyRoleMap;
-
-        } else if (frame->AccessibleType() == eHTMLTableCellType &&
-                   aContext->ARIARoleMap() == &aria::gEmptyRoleMap) {
+    // If table has strong ARIA role then all table descendants shouldn't
+    // expose their native roles.
+    if (!roleMapEntry && newAcc && aContext->HasStrongARIARole()) {
+      if (frame->AccessibleType() == eHTMLTableRowType) {
+        nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
+        if (!contextRoleMap->IsOfType(eTable))
           roleMapEntry = &aria::gEmptyRoleMap;
 
-        } else if (content->Tag() == nsGkAtoms::dt ||
-                   content->Tag() == nsGkAtoms::li ||
-                   content->Tag() == nsGkAtoms::dd ||
-                   frame->AccessibleType() == eHTMLLiType) {
-          nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
-          if (!contextRoleMap->IsOfType(eList))
-            roleMapEntry = &aria::gEmptyRoleMap;
-        }
+      } else if (frame->AccessibleType() == eHTMLTableCellType &&
+                 aContext->ARIARoleMap() == &aria::gEmptyRoleMap) {
+        roleMapEntry = &aria::gEmptyRoleMap;
+
+      } else if (content->Tag() == nsGkAtoms::dt ||
+                 content->Tag() == nsGkAtoms::li ||
+                 content->Tag() == nsGkAtoms::dd ||
+                 frame->AccessibleType() == eHTMLLiType) {
+        nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
+        if (!contextRoleMap->IsOfType(eList))
+          roleMapEntry = &aria::gEmptyRoleMap;
       }
     }
   }
 
   // Accessible XBL types and deck stuff are used in XUL only currently.
   if (!newAcc && content->IsXUL()) {
     // No accessible for not selected deck panel and its children.
     if (!aContext->IsXULTabpanels()) {
--- a/accessible/base/nsAccessiblePivot.cpp
+++ b/accessible/base/nsAccessiblePivot.cpp
@@ -887,21 +887,17 @@ RuleCache::ApplyFilter(Accessible* aAcce
         (state & states::OFFSCREEN))
       return NS_OK;
 
     if ((nsIAccessibleTraversalRule::PREFILTER_NOT_FOCUSABLE & mPreFilter) &&
         !(state & states::FOCUSABLE))
       return NS_OK;
 
     if (nsIAccessibleTraversalRule::PREFILTER_ARIA_HIDDEN & mPreFilter) {
-      nsIContent* content = aAccessible->GetContent();
-      if (content &&
-          nsAccUtils::HasDefinedARIAToken(content, nsGkAtoms::aria_hidden) &&
-          !content->AttrValueIs(kNameSpaceID_None, nsGkAtoms::aria_hidden,
-                                nsGkAtoms::_false, eCaseMatters)) {
+      if (aAccessible->IsARIAHidden()) {
         *aResult |= nsIAccessibleTraversalRule::FILTER_IGNORE_SUBTREE;
         return NS_OK;
       }
     }
 
     if ((nsIAccessibleTraversalRule::PREFILTER_TRANSPARENT & mPreFilter) &&
         !(state & states::OPAQUE1)) {
       nsIFrame* frame = aAccessible->GetFrame();
--- a/accessible/base/nsCoreUtils.cpp
+++ b/accessible/base/nsCoreUtils.cpp
@@ -144,17 +144,17 @@ nsCoreUtils::DispatchTouchEvent(uint32_t
   if (!dom::TouchEvent::PrefEnabled())
     return;
 
   WidgetTouchEvent event(true, aEventType, aRootWidget);
 
   event.time = PR_IntervalNow();
 
   // XXX: Touch has an identifier of -1 to hint that it is synthesized.
-  nsRefPtr<dom::Touch> t = new dom::Touch(-1, nsIntPoint(aX, aY),
+  nsRefPtr<dom::Touch> t = new dom::Touch(-1, LayoutDeviceIntPoint(aX, aY),
                                           nsIntPoint(1, 1), 0.0f, 1.0f);
   t->SetTarget(aContent);
   event.touches.AppendElement(t);
   nsEventStatus status = nsEventStatus_eIgnore;
   aPresShell->HandleEventWithTarget(&event, aFrame, aContent, &status);
 }
 
 uint32_t
--- a/accessible/generic/ARIAGridAccessible.cpp
+++ b/accessible/generic/ARIAGridAccessible.cpp
@@ -599,10 +599,17 @@ ARIAGridCellAccessible::NativeAttributes
   }
 
   int32_t rowIdx = RowIndexFor(thisRow);
 
   nsAutoString stringIdx;
   stringIdx.AppendInt(rowIdx * colCount + colIdx);
   nsAccUtils::SetAccAttr(attributes, nsGkAtoms::tableCellIndex, stringIdx);
 
+#ifdef DEBUG
+  nsAutoString unused;
+  attributes->SetStringProperty(NS_LITERAL_CSTRING("cppclass"),
+                                NS_LITERAL_STRING("ARIAGridCellAccessible"),
+                                unused);
+#endif
+
   return attributes.forget();
 }
--- a/accessible/generic/Accessible.cpp
+++ b/accessible/generic/Accessible.cpp
@@ -104,34 +104,17 @@ NS_IMPL_CYCLE_COLLECTING_ADDREF(Accessib
 NS_IMPL_CYCLE_COLLECTING_RELEASE_WITH_DESTROY(Accessible, LastRelease())
 
 Accessible::Accessible(nsIContent* aContent, DocAccessible* aDoc) :
   mContent(aContent), mDoc(aDoc),
   mParent(nullptr), mIndexInParent(-1), mChildrenFlags(eChildrenUninitialized),
   mStateFlags(0), mContextFlags(0), mType(0), mGenericTypes(0),
   mIndexOfEmbeddedChild(-1), mRoleMapEntry(nullptr)
 {
-#ifdef NS_DEBUG_X
-   {
-     nsCOMPtr<nsIPresShell> shell(do_QueryReferent(aShell));
-     printf(">>> %p Created Acc - DOM: %p  PS: %p",
-            (void*)static_cast<nsIAccessible*>(this), (void*)aNode,
-            (void*)shell.get());
-    nsCOMPtr<nsIContent> content = do_QueryInterface(aNode);
-    if (content) {
-      printf(" Con: %s@%p",
-             NS_ConvertUTF16toUTF8(content->NodeInfo()->QualifiedName()).get(),
-             (void *)content.get());
-      nsAutoString buf;
-      Name(buf);
-      printf(" Name:[%s]", NS_ConvertUTF16toUTF8(buf).get());
-     }
-     printf("\n");
-   }
-#endif
+  mBits.groupInfo = nullptr;
 }
 
 Accessible::~Accessible()
 {
   NS_ASSERTION(!mDoc, "LastRelease was never called!?!");
 }
 
 ENameValueFlag
@@ -520,21 +503,18 @@ Accessible::FocusedChild()
 }
 
 Accessible*
 Accessible::ChildAtPoint(int32_t aX, int32_t aY,
                          EWhichChildAtPoint aWhichChild)
 {
   // If we can't find the point in a child, we will return the fallback answer:
   // we return |this| if the point is within it, otherwise nullptr.
+  Accessible* fallbackAnswer = nullptr;
   nsIntRect rect = Bounds();
-  if (rect.IsEmpty())
-   return nullptr;
-
-  Accessible* fallbackAnswer = nullptr;
   if (aX >= rect.x && aX < rect.x + rect.width &&
       aY >= rect.y && aY < rect.y + rect.height)
     fallbackAnswer = this;
 
   if (nsAccUtils::MustPrune(this))  // Do not dig any further
     return fallbackAnswer;
 
   // Search an accessible at the given point starting from accessible document
@@ -888,16 +868,21 @@ Accessible::Attributes()
   }
 
   // Expose object attributes from ARIA attributes.
   aria::AttrIterator attribIter(mContent);
   nsAutoString name, value;
   while(attribIter.Next(name, value))
     attributes->SetStringProperty(NS_ConvertUTF16toUTF8(name), value, unused);
 
+  if (IsARIAHidden()) {
+    nsAccUtils::SetAccAttr(attributes, nsGkAtoms::hidden,
+                           NS_LITERAL_STRING("true"));
+  }
+
   // If there is no aria-live attribute then expose default value of 'live'
   // object attribute used for ARIA role of this accessible.
   if (mRoleMapEntry) {
     nsAutoString live;
     nsAccUtils::GetAccAttr(attributes, nsGkAtoms::live, live);
     if (live.IsEmpty()) {
       if (nsAccUtils::GetLiveAttrValue(mRoleMapEntry->liveAttRule, live))
         nsAccUtils::SetAccAttr(attributes, nsGkAtoms::live, live);
@@ -1935,29 +1920,36 @@ Accessible::BindToParent(Accessible* aPa
   AssertInMutatingSubtree();
 #endif
 
   // Note: this is currently only used for richlistitems and their children.
   if (mParent->HasNameDependentParent() || mParent->IsXULListItem())
     mContextFlags |= eHasNameDependentParent;
   else
     mContextFlags &= ~eHasNameDependentParent;
+
+  if (mParent->IsARIAHidden() || aria::HasDefinedARIAHidden(mContent))
+    SetARIAHidden(true);
 }
 
 // Accessible protected
 void
 Accessible::UnbindFromParent()
 {
 #ifdef DEBUG
   AssertInMutatingSubtree();
 #endif
   mParent = nullptr;
   mIndexInParent = -1;
   mIndexOfEmbeddedChild = -1;
-  mGroupInfo = nullptr;
+  if (IsProxy())
+    MOZ_CRASH("this should never be called on proxy wrappers");
+
+  delete mBits.groupInfo;
+  mBits.groupInfo = nullptr;
   mContextFlags &= ~eHasNameDependentParent;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // Accessible public methods
 
 RootAccessible*
 Accessible::RootAccessible() const
@@ -2388,16 +2380,30 @@ Accessible::ContainerWidget() const
       // Don't cross DOM document boundaries.
       if (parent->IsDoc())
         break;
     }
   }
   return nullptr;
 }
 
+void
+Accessible::SetARIAHidden(bool aIsDefined)
+{
+  if (aIsDefined)
+    mContextFlags |= eARIAHidden;
+  else
+    mContextFlags &= ~eARIAHidden;
+
+  uint32_t length = mChildren.Length();
+  for (uint32_t i = 0; i < length; i++) {
+    mChildren[i]->SetARIAHidden(aIsDefined);
+  }
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // Accessible protected methods
 
 void
 Accessible::LastRelease()
 {
   // First cleanup if needed...
   if (mDoc) {
@@ -2523,27 +2529,30 @@ Accessible::GetActionRule() const
     return eExpandAction;
 
   return eNoAction;
 }
 
 AccGroupInfo*
 Accessible::GetGroupInfo()
 {
-  if (mGroupInfo){
+  if (IsProxy())
+    MOZ_CRASH("This should never be called on proxy wrappers");
+
+  if (mBits.groupInfo){
     if (HasDirtyGroupInfo()) {
-      mGroupInfo->Update();
+      mBits.groupInfo->Update();
       SetDirtyGroupInfo(false);
     }
 
-    return mGroupInfo;
+    return mBits.groupInfo;
   }
 
-  mGroupInfo = AccGroupInfo::CreateGroupInfo(this);
-  return mGroupInfo;
+  mBits.groupInfo = AccGroupInfo::CreateGroupInfo(this);
+  return mBits.groupInfo;
 }
 
 void
 Accessible::InvalidateChildrenGroupInfo()
 {
   uint32_t length = mChildren.Length();
   for (uint32_t i = 0; i < length; i++) {
     Accessible* child = mChildren[i];
--- a/accessible/generic/Accessible.h
+++ b/accessible/generic/Accessible.h
@@ -34,16 +34,17 @@ class AccGroupInfo;
 class ApplicationAccessible;
 class DocAccessible;
 class EmbeddedObjCollector;
 class HTMLImageMapAccessible;
 class HTMLLIAccessible;
 class HyperTextAccessible;
 class ImageAccessible;
 class KeyBinding;
+class ProxyAccessible;
 class Relation;
 class RootAccessible;
 class TableAccessible;
 class TableCellAccessible;
 class TextLeafAccessible;
 class XULLabelAccessible;
 class XULTreeAccessible;
 
@@ -573,16 +574,17 @@ public:
 
   bool IsButton() const { return HasGenericType(eButton); }
 
   bool IsCombobox() const { return HasGenericType(eCombobox); }
 
   bool IsDoc() const { return HasGenericType(eDocument); }
   DocAccessible* AsDoc();
 
+  bool IsGenericHyperText() const { return mType == eHyperTextType; }
   bool IsHyperText() const { return HasGenericType(eHyperText); }
   HyperTextAccessible* AsHyperText();
 
   bool IsHTMLBr() const { return mType == eHTMLBRType; }
   bool IsHTMLCombobox() const { return mType == eHTMLComboboxType; }
   bool IsHTMLFileInput() const { return mType == eHTMLFileInputType; }
 
   bool IsHTMLListItem() const { return mType == eHTMLLiType; }
@@ -602,16 +604,23 @@ public:
   bool IsList() const { return HasGenericType(eList); }
 
   bool IsListControl() const { return HasGenericType(eListControl); }
 
   bool IsMenuButton() const { return HasGenericType(eMenuButton); }
 
   bool IsMenuPopup() const { return mType == eMenuPopupType; }
 
+  bool IsProxy() const { return mType == eProxyType; }
+  ProxyAccessible* Proxy() const
+  {
+    MOZ_ASSERT(IsProxy());
+    return mBits.proxy;
+  }
+
   bool IsProgress() const { return mType == eProgressType; }
 
   bool IsRoot() const { return mType == eRootType; }
   a11y::RootAccessible* AsRoot();
 
   bool IsSelect() const { return HasGenericType(eSelect); }
 
   bool IsTable() const { return HasGenericType(eTable); }
@@ -881,16 +890,23 @@ public:
 
   /**
    * Return true if this accessible has a parent whose name depends on this
    * accessible.
    */
   bool HasNameDependentParent() const
     { return mContextFlags & eHasNameDependentParent; }
 
+  /**
+   * Return true if aria-hidden="true" is applied to the accessible or inherited
+   * from the parent.
+   */
+  bool IsARIAHidden() const { return mContextFlags & eARIAHidden; }
+  void SetARIAHidden(bool aIsDefined);
+
 protected:
 
   virtual ~Accessible();
 
   /**
    * Return the accessible name provided by native markup. It doesn't take
    * into account ARIA markup used to specify the name.
    */
@@ -967,18 +983,19 @@ protected:
     eLastStateFlag = eSurvivingInUpdate
   };
 
   /**
    * Flags used for contextual information about the accessible.
    */
   enum ContextFlags {
     eHasNameDependentParent = 1 << 0, // Parent's name depends on this accessible.
+    eARIAHidden = 1 << 1,
 
-    eLastContextFlag = eHasNameDependentParent
+    eLastContextFlag = eARIAHidden
   };
 
 protected:
 
   //////////////////////////////////////////////////////////////////////////////
   // Miscellaneous helpers
 
   /**
@@ -1074,17 +1091,17 @@ protected:
   DocAccessible* mDoc;
 
   nsRefPtr<Accessible> mParent;
   nsTArray<nsRefPtr<Accessible> > mChildren;
   int32_t mIndexInParent;
 
   static const uint8_t kChildrenFlagsBits = 2;
   static const uint8_t kStateFlagsBits = 9;
-  static const uint8_t kContextFlagsBits = 1;
+  static const uint8_t kContextFlagsBits = 2;
   static const uint8_t kTypeBits = 6;
   static const uint8_t kGenericTypesBits = 13;
 
   /**
    * Keep in sync with ChildrenFlags, StateFlags, ContextFlags, and AccTypes.
    */
   uint32_t mChildrenFlags : kChildrenFlagsBits;
   uint32_t mStateFlags : kStateFlagsBits;
@@ -1098,17 +1115,21 @@ protected:
   friend class DocAccessible;
   friend class xpcAccessible;
   friend class AutoTreeMutation;
 
   nsAutoPtr<mozilla::a11y::EmbeddedObjCollector> mEmbeddedObjCollector;
   int32_t mIndexOfEmbeddedChild;
   friend class EmbeddedObjCollector;
 
-  nsAutoPtr<AccGroupInfo> mGroupInfo;
+  union
+  {
+    AccGroupInfo* groupInfo;
+    ProxyAccessible* proxy;
+  } mBits;
   friend class AccGroupInfo;
 
   /**
    * Non-null indicates author-supplied role; possibly state & value as well
    */
   nsRoleMapEntry* mRoleMapEntry;
 
 private:
--- a/accessible/generic/DocAccessible.cpp
+++ b/accessible/generic/DocAccessible.cpp
@@ -950,16 +950,32 @@ DocAccessible::ARIAAttributeChanged(Acce
   if (!(attrFlags & ATTR_BYPASSOBJ)) {
     nsRefPtr<AccEvent> event =
       new AccObjectAttrChangedEvent(aAccessible, aAttribute);
     FireDelayedEvent(event);
   }
 
   nsIContent* elm = aAccessible->GetContent();
 
+  // Update aria-hidden flag for the whole subtree iff aria-hidden is changed
+  // on the root, i.e. ignore any affiliated aria-hidden changes in the subtree
+  // of top aria-hidden.
+  if (aAttribute == nsGkAtoms::aria_hidden) {
+    bool isDefined = aria::HasDefinedARIAHidden(elm);
+    if (isDefined != aAccessible->IsARIAHidden() &&
+        !aAccessible->Parent()->IsARIAHidden()) {
+      aAccessible->SetARIAHidden(isDefined);
+
+      nsRefPtr<AccEvent> event =
+        new AccObjectAttrChangedEvent(aAccessible, aAttribute);
+      FireDelayedEvent(event);
+    }
+    return;
+  }
+
   if (aAttribute == nsGkAtoms::aria_checked ||
       (aAccessible->IsButton() &&
        aAttribute == nsGkAtoms::aria_pressed)) {
     const uint64_t kState = (aAttribute == nsGkAtoms::aria_checked) ?
                             states::CHECKED : states::PRESSED;
     nsRefPtr<AccEvent> event = new AccStateChangeEvent(aAccessible, kState);
     FireDelayedEvent(event);
 
--- a/accessible/generic/HyperTextAccessible.cpp
+++ b/accessible/generic/HyperTextAccessible.cpp
@@ -45,16 +45,17 @@ using namespace mozilla::a11y;
 ////////////////////////////////////////////////////////////////////////////////
 // HyperTextAccessible
 ////////////////////////////////////////////////////////////////////////////////
 
 HyperTextAccessible::
   HyperTextAccessible(nsIContent* aNode, DocAccessible* aDoc) :
   AccessibleWrap(aNode, aDoc)
 {
+  mType = eHyperTextType;
   mGenericTypes |= eHyperText;
 }
 
 NS_IMPL_ISUPPORTS_INHERITED0(HyperTextAccessible, Accessible)
 
 role
 HyperTextAccessible::NativeRole()
 {
@@ -505,17 +506,17 @@ HyperTextAccessible::FindOffset(uint32_t
 
   const bool kIsJumpLinesOk = true; // okay to jump lines
   const bool kIsScrollViewAStop = false; // do not stop at scroll views
   const bool kIsKeyboardSelect = true; // is keyboard selection
   const bool kIsVisualBidi = false; // use visual order for bidi text
   nsPeekOffsetStruct pos(aAmount, aDirection, innerContentOffset,
                          nsPoint(0, 0), kIsJumpLinesOk, kIsScrollViewAStop,
                          kIsKeyboardSelect, kIsVisualBidi,
-                         aWordMovementType);
+                         false, aWordMovementType);
   nsresult rv = frameAtOffset->PeekOffset(&pos);
 
   // PeekOffset fails on last/first lines of the text in certain cases.
   if (NS_FAILED(rv) && aAmount == eSelectLine) {
     pos.mAmount = (aDirection == eDirNext) ? eSelectEndLine : eSelectBeginLine;
     frameAtOffset->PeekOffset(&pos);
   }
   if (!pos.mResultContent) {
@@ -1339,17 +1340,17 @@ HyperTextAccessible::GetCaretRect(nsIWid
   // on the widget.
   *aWidget = frame->GetNearestWidget(offset);
   NS_ENSURE_TRUE(*aWidget, nsIntRect());
   rect.MoveBy(offset);
 
   nsIntRect caretRect;
   caretRect = rect.ToOutsidePixels(frame->PresContext()->AppUnitsPerDevPixel());
   // ((content screen origin) - (content offset in the widget)) = widget origin on the screen
-  caretRect.MoveBy((*aWidget)->WidgetToScreenOffset() - (*aWidget)->GetClientOffset());
+  caretRect.MoveBy((*aWidget)->WidgetToScreenOffsetUntyped() - (*aWidget)->GetClientOffset());
 
   // Correct for character size, so that caret always matches the size of
   // the character. This is important for font size transitions, and is
   // necessary because the Gecko caret uses the previous character's size as
   // the user moves forward in the text by character.
   nsIntRect charRect = CharBounds(CaretOffset(),
                                   nsIAccessibleCoordinateType::COORDTYPE_SCREEN_RELATIVE);
   if (!charRect.IsEmpty()) {
--- a/accessible/html/HTMLSelectAccessible.cpp
+++ b/accessible/html/HTMLSelectAccessible.cpp
@@ -376,16 +376,27 @@ void
 HTMLComboboxAccessible::InvalidateChildren()
 {
   AccessibleWrap::InvalidateChildren();
 
   if (mListAccessible)
     mListAccessible->InvalidateChildren();
 }
 
+bool
+HTMLComboboxAccessible::RemoveChild(Accessible* aChild)
+{
+  MOZ_ASSERT(aChild == mListAccessible);
+  if (AccessibleWrap::RemoveChild(aChild)) {
+    mListAccessible = nullptr;
+    return true;
+  }
+  return false;
+}
+
 void
 HTMLComboboxAccessible::CacheChildren()
 {
   nsIComboboxControlFrame* comboFrame = do_QueryFrame(GetFrame());
   if (!comboFrame)
     return;
 
   nsIFrame* listFrame = comboFrame->GetDropDown();
@@ -404,22 +415,20 @@ HTMLComboboxAccessible::CacheChildren()
     // tree for combobox.
     mListAccessible->EnsureChildren();
   }
 }
 
 void
 HTMLComboboxAccessible::Shutdown()
 {
-  AccessibleWrap::Shutdown();
+  MOZ_ASSERT(mDoc->IsDefunct() || !mListAccessible);
+  mListAccessible = nullptr;
 
-  if (mListAccessible) {
-    mListAccessible->Shutdown();
-    mListAccessible = nullptr;
-  }
+  AccessibleWrap::Shutdown();
 }
 
 uint64_t
 HTMLComboboxAccessible::NativeState()
 {
   // As a HTMLComboboxAccessible we can have the following states:
   // FOCUSED, FOCUSABLE, HASPOPUP, EXPANDED, COLLAPSED
   // Get focus status from base class
--- a/accessible/html/HTMLSelectAccessible.h
+++ b/accessible/html/HTMLSelectAccessible.h
@@ -169,16 +169,17 @@ public:
 
   // Accessible
   virtual void Shutdown() MOZ_OVERRIDE;
   virtual void Description(nsString& aDescription) MOZ_OVERRIDE;
   virtual void Value(nsString& aValue) MOZ_OVERRIDE;
   virtual a11y::role NativeRole() MOZ_OVERRIDE;
   virtual uint64_t NativeState() MOZ_OVERRIDE;
   virtual void InvalidateChildren() MOZ_OVERRIDE;
+  virtual bool RemoveChild(Accessible* aChild) MOZ_OVERRIDE;
 
   // ActionAccessible
   virtual uint8_t ActionCount() MOZ_OVERRIDE;
   virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
   virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
 
   // Widgets
   virtual bool IsWidget() const MOZ_OVERRIDE;
--- a/accessible/html/HTMLTableAccessible.cpp
+++ b/accessible/html/HTMLTableAccessible.cpp
@@ -43,16 +43,17 @@ using namespace mozilla::a11y;
 ////////////////////////////////////////////////////////////////////////////////
 // HTMLTableCellAccessible
 ////////////////////////////////////////////////////////////////////////////////
 
 HTMLTableCellAccessible::
   HTMLTableCellAccessible(nsIContent* aContent, DocAccessible* aDoc) :
   HyperTextAccessibleWrap(aContent, aDoc)
 {
+  mType = eHTMLTableCellType;
   mGenericTypes |= eTableCell;
 }
 
 NS_IMPL_ISUPPORTS_INHERITED0(HTMLTableCellAccessible, HyperTextAccessible)
 
 ////////////////////////////////////////////////////////////////////////////////
 // HTMLTableCellAccessible: Accessible implementation
 
@@ -124,16 +125,23 @@ HTMLTableCellAccessible::NativeAttribute
     nsAccUtils::SetAccAttr(attributes, nsGkAtoms::abbr, abbrText);
 
   // axis attribute
   nsAutoString axisText;
   mContent->GetAttr(kNameSpaceID_None, nsGkAtoms::axis, axisText);
   if (!axisText.IsEmpty())
     nsAccUtils::SetAccAttr(attributes, nsGkAtoms::axis, axisText);
 
+#ifdef DEBUG
+  nsAutoString unused;
+  attributes->SetStringProperty(NS_LITERAL_CSTRING("cppclass"),
+                                NS_LITERAL_STRING("HTMLTableCellAccessible"),
+                                unused);
+#endif
+
   return attributes.forget();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // HTMLTableCellAccessible: TableCellAccessible implementation
 
 TableAccessible*
 HTMLTableCellAccessible::Table() const
--- a/accessible/interfaces/nsIAccessible.idl
+++ b/accessible/interfaces/nsIAccessible.idl
@@ -147,16 +147,18 @@ interface nsIAccessible : nsISupports
    *                 constants)
    * @param aExtraState - the second bit field
    *                      (see nsIAccessibleStates::EXT_STATE_* constants)
    */
   void getState(out unsigned long aState, out unsigned long aExtraState);
 
   /**
    * Help text associated with node
+   *
+   * @note As of now, this just returns empty string.
    */
   readonly attribute AString help;
 
   /**
    * Focused accessible child of node
    */
   readonly attribute nsIAccessible focusedChild;
 
--- a/accessible/ipc/DocAccessibleChild.cpp
+++ b/accessible/ipc/DocAccessibleChild.cpp
@@ -3,16 +3,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "DocAccessibleChild.h"
 
 #include "Accessible-inl.h"
 #include "ProxyAccessible.h"
+#include "Relation.h"
 
 #include "nsIPersistentProperties2.h"
 #include "nsISimpleEnumerator.h"
 
 namespace mozilla {
 namespace a11y {
 
 static uint32_t
@@ -39,68 +40,94 @@ SerializeTree(Accessible* aRoot, nsTArra
   if (childCount == 1 && aRoot->GetChildAt(0)->IsDoc())
     childCount = 0;
 
   aTree.AppendElement(AccessibleData(id, role, childCount, interfaces));
   for (uint32_t i = 0; i < childCount; i++)
     SerializeTree(aRoot->GetChildAt(i), aTree);
 }
 
+Accessible*
+DocAccessibleChild::IdToAccessible(const uint64_t& aID)
+{
+  return mDoc->GetAccessibleByUniqueID(reinterpret_cast<void*>(aID));
+}
+
+HyperTextAccessible*
+DocAccessibleChild::IdToHyperTextAccessible(const uint64_t& aID)
+{
+  Accessible* acc = IdToAccessible(aID);
+  MOZ_ASSERT(!acc || acc->IsHyperText());
+  return acc ? acc->AsHyperText() : nullptr;
+}
+
 void
 DocAccessibleChild::ShowEvent(AccShowEvent* aShowEvent)
 {
   Accessible* parent = aShowEvent->Parent();
   uint64_t parentID = parent->IsDoc() ? 0 : reinterpret_cast<uint64_t>(parent->UniqueID());
   uint32_t idxInParent = aShowEvent->GetAccessible()->IndexInParent();
   nsTArray<AccessibleData> shownTree;
   ShowEventData data(parentID, idxInParent, shownTree);
   SerializeTree(aShowEvent->GetAccessible(), data.NewTree());
   SendShowEvent(data);
 }
 
 bool
 DocAccessibleChild::RecvState(const uint64_t& aID, uint64_t* aState)
 {
-  Accessible* acc = mDoc->GetAccessibleByUniqueID((void*)aID);
+  Accessible* acc = IdToAccessible(aID);
   if (!acc) {
     *aState = states::DEFUNCT;
     return true;
   }
 
   *aState = acc->State();
 
   return true;
 }
 
 bool
 DocAccessibleChild::RecvName(const uint64_t& aID, nsString* aName)
 {
-  Accessible* acc = mDoc->GetAccessibleByUniqueID((void*)aID);
+  Accessible* acc = IdToAccessible(aID);
   if (!acc)
     return true;
 
   acc->Name(*aName);
   return true;
 }
 
 bool
+DocAccessibleChild::RecvValue(const uint64_t& aID, nsString* aValue)
+{
+  Accessible* acc = IdToAccessible(aID);
+  if (!acc) {
+    return true;
+  }
+
+  acc->Value(*aValue);
+  return true;
+}
+
+bool
 DocAccessibleChild::RecvDescription(const uint64_t& aID, nsString* aDesc)
 {
-  Accessible* acc = mDoc->GetAccessibleByUniqueID((void*)aID);
+  Accessible* acc = IdToAccessible(aID);
   if (!acc)
     return true;
 
   acc->Description(*aDesc);
   return true;
 }
 
 bool
 DocAccessibleChild::RecvAttributes(const uint64_t& aID, nsTArray<Attribute>* aAttributes)
 {
-  Accessible* acc = mDoc->GetAccessibleByUniqueID((void*)aID);
+  Accessible* acc = IdToAccessible(aID);
   if (!acc)
     return true;
 
   nsCOMPtr<nsIPersistentProperties> props = acc->Attributes();
   if (!props)
     return true;
 
   nsCOMPtr<nsISimpleEnumerator> propEnum;
@@ -126,22 +153,128 @@ DocAccessibleChild::RecvAttributes(const
 
     aAttributes->AppendElement(Attribute(name, value));
     }
 
   return true;
 }
 
 bool
+DocAccessibleChild::RecvRelationByType(const uint64_t& aID,
+                                       const uint32_t& aType,
+                                       nsTArray<uint64_t>* aTargets)
+{
+  Accessible* acc = mDoc->GetAccessibleByUniqueID((void*)aID);
+  if (!acc)
+    return false;
+
+  auto type = static_cast<RelationType>(aType);
+  Relation rel = acc->RelationByType(type);
+  while (Accessible* target = rel.Next())
+    aTargets->AppendElement(reinterpret_cast<uintptr_t>(target));
+
+  return true;
+}
+
+static void
+AddRelation(Accessible* aAcc, RelationType aType,
+            nsTArray<RelationTargets>* aTargets)
+{
+  Relation rel = aAcc->RelationByType(aType);
+  nsTArray<uint64_t> targets;
+  while (Accessible* target = rel.Next())
+    targets.AppendElement(reinterpret_cast<uintptr_t>(target));
+
+  if (!targets.IsEmpty()) {
+    RelationTargets* newRelation =
+      aTargets->AppendElement(RelationTargets(static_cast<uint32_t>(aType),
+                                              nsTArray<uint64_t>()));
+    newRelation->Targets().SwapElements(targets);
+  }
+}
+
+bool
+DocAccessibleChild::RecvRelations(const uint64_t& aID,
+                                  nsTArray<RelationTargets>* aRelations)
+{
+  Accessible* acc = mDoc->GetAccessibleByUniqueID((void*)aID);
+  if (!aID)
+    return false;
+
+#define RELATIONTYPE(gecko, s, a, m, i) AddRelation(acc, RelationType::gecko, aRelations);
+
+#include "RelationTypeMap.h"
+#undef RELATIONTYPE
+
+  return true;
+}
+
+bool
 DocAccessibleChild::RecvTextSubstring(const uint64_t& aID,
                                       const int32_t& aStartOffset,
                                       const int32_t& aEndOffset,
                                       nsString* aText)
 {
-  Accessible* acc = mDoc->GetAccessibleByUniqueID((void*)aID);
-  if (!acc || !acc->IsHyperText())
-    return false;
+  HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
+  if (!acc) {
+    return true;
+  }
+
+  acc->TextSubstring(aStartOffset, aEndOffset, *aText);
+  return true;
+}
 
-  acc->AsHyperText()->TextSubstring(aStartOffset, aEndOffset, *aText);
+bool
+DocAccessibleChild::RecvGetTextAfterOffset(const uint64_t& aID,
+                                           const int32_t& aOffset,
+                                           const int32_t& aBoundaryType,
+                                           nsString* aText,
+                                           int32_t* aStartOffset,
+                                           int32_t* aEndOffset)
+{
+  *aStartOffset = 0;
+  *aEndOffset = 0;
+  HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
+  if (acc) {
+    acc->TextAfterOffset(aOffset, aBoundaryType,
+                         aStartOffset, aEndOffset, *aText);
+  }
   return true;
 }
+
+bool
+DocAccessibleChild::RecvGetTextAtOffset(const uint64_t& aID,
+                                        const int32_t& aOffset,
+                                        const int32_t& aBoundaryType,
+                                        nsString* aText,
+                                        int32_t* aStartOffset,
+                                        int32_t* aEndOffset)
+{
+  *aStartOffset = 0;
+  *aEndOffset = 0;
+  HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
+  if (acc) {
+    acc->TextAtOffset(aOffset, aBoundaryType,
+                      aStartOffset, aEndOffset, *aText);
+  }
+  return true;
+}
+
+bool
+DocAccessibleChild::RecvGetTextBeforeOffset(const uint64_t& aID,
+                                            const int32_t& aOffset,
+                                            const int32_t& aBoundaryType,
+                                            nsString* aText,
+                                            int32_t* aStartOffset,
+                                            int32_t* aEndOffset)
+{
+  *aStartOffset = 0;
+  *aEndOffset = 0;
+  HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
+  if (acc) {
+    acc->TextBeforeOffset(aOffset, aBoundaryType,
+                          aStartOffset, aEndOffset, *aText);
+  }
+  return true;
+}
+
 }
 }
--- a/accessible/ipc/DocAccessibleChild.h
+++ b/accessible/ipc/DocAccessibleChild.h
@@ -8,16 +8,19 @@
 #define mozilla_a11y_DocAccessibleChild_h
 
 #include "mozilla/a11y/DocAccessible.h"
 #include "mozilla/a11y/PDocAccessibleChild.h"
 #include "nsISupportsImpl.h"
 
 namespace mozilla {
 namespace a11y {
+class Accessible;
+class HyperTextAccessible;
+
 class AccShowEvent;
 
   /*
    * These objects handle content side communication for an accessible document,
    * and their lifetime is the same as the document they represent.
    */
 class DocAccessibleChild : public PDocAccessibleChild
 {
@@ -26,39 +29,66 @@ public:
     mDoc(aDoc)
   { MOZ_COUNT_CTOR(DocAccessibleChild); }
   ~DocAccessibleChild()
   {
     mDoc->SetIPCDoc(nullptr);
     MOZ_COUNT_DTOR(DocAccessibleChild);
   }
 
+  Accessible* IdToAccessible(const uint64_t& aID);
+  HyperTextAccessible* IdToHyperTextAccessible(const uint64_t& aID);
+
   void ShowEvent(AccShowEvent* aShowEvent);
 
   /*
    * Return the state for the accessible with given ID.
    */
   virtual bool RecvState(const uint64_t& aID, uint64_t* aState) MOZ_OVERRIDE;
 
   /*
    * Get the name for the accessible with given id.
    */
   virtual bool RecvName(const uint64_t& aID, nsString* aName) MOZ_OVERRIDE;
 
+  virtual bool RecvValue(const uint64_t& aID, nsString* aValue) MOZ_OVERRIDE;
+  
   /*
    * Get the description for the accessible with given id.
    */
   virtual bool RecvDescription(const uint64_t& aID, nsString* aDesc) MOZ_OVERRIDE;
+  virtual bool RecvRelationByType(const uint64_t& aID, const uint32_t& aType,
+                                  nsTArray<uint64_t>* aTargets) MOZ_OVERRIDE;
+  virtual bool RecvRelations(const uint64_t& aID,
+                             nsTArray<RelationTargets>* aRelations)
+    MOZ_OVERRIDE;
 
-  virtual bool RecvAttributes(const uint64_t& aID, nsTArray<Attribute> *aAttributes) MOZ_OVERRIDE;
+  virtual bool RecvAttributes(const uint64_t& aID,
+                              nsTArray<Attribute> *aAttributes) MOZ_OVERRIDE;
   virtual bool RecvTextSubstring(const uint64_t& aID,
                                  const int32_t& aStartOffset,
                                  const int32_t& aEndOffset, nsString* aText)
     MOZ_OVERRIDE;
 
+  virtual bool RecvGetTextAfterOffset(const uint64_t& aID,
+                                      const int32_t& aOffset,
+                                      const int32_t& aBoundaryType,
+                                      nsString* aText, int32_t* aStartOffset,
+                                      int32_t* aEndOffset) MOZ_OVERRIDE;
+  virtual bool RecvGetTextAtOffset(const uint64_t& aID,
+                                   const int32_t& aOffset,
+                                   const int32_t& aBoundaryType,
+                                   nsString* aText, int32_t* aStartOffset,
+                                   int32_t* aEndOffset) MOZ_OVERRIDE;
+  virtual bool RecvGetTextBeforeOffset(const uint64_t& aID,
+                                       const int32_t& aOffset,
+                                       const int32_t& aBoundaryType,
+                                       nsString* aText, int32_t* aStartOffset,
+                                       int32_t* aEndOffset) MOZ_OVERRIDE;
+
 private:
   DocAccessible* mDoc;
 };
 
 }
 }
 
 #endif
--- a/accessible/ipc/DocAccessibleParent.cpp
+++ b/accessible/ipc/DocAccessibleParent.cpp
@@ -10,16 +10,19 @@
 #include "ProxyAccessible.h"
 
 namespace mozilla {
 namespace a11y {
 
 bool
 DocAccessibleParent::RecvShowEvent(const ShowEventData& aData)
 {
+  if (mShutdown)
+    return true;
+
   if (aData.NewTree().IsEmpty()) {
     NS_ERROR("no children being added");
     return false;
   }
 
   ProxyAccessible* parent = nullptr;
   if (aData.ID()) {
     ProxyEntry* e = mAccessibles.GetEntry(aData.ID());
@@ -46,17 +49,17 @@ DocAccessibleParent::RecvShowEvent(const
   MOZ_ASSERT(consumed == aData.NewTree().Length());
 #ifdef DEBUG
   for (uint32_t i = 0; i < consumed; i++) {
     uint64_t id = aData.NewTree()[i].ID();
     MOZ_ASSERT(mAccessibles.GetEntry(id));
   }
 #endif
 
-  return consumed;
+  return consumed != 0;
 }
 
 uint32_t
 DocAccessibleParent::AddSubtree(ProxyAccessible* aParent,
                                 const nsTArray<a11y::AccessibleData>& aNewTree,
                                 uint32_t aIdx, uint32_t aIdxInParent)
 {
   if (aNewTree.Length() <= aIdx) {
@@ -90,16 +93,19 @@ DocAccessibleParent::AddSubtree(ProxyAcc
   MOZ_ASSERT(newProxy->ChildrenCount() == kids);
 
   return accessibles;
 }
 
 bool
 DocAccessibleParent::RecvHideEvent(const uint64_t& aRootID)
 {
+  if (mShutdown)
+    return true;
+
   ProxyEntry* rootEntry = mAccessibles.GetEntry(aRootID);
   if (!rootEntry) {
     NS_ERROR("invalid root being removed!");
     return true;
   }
 
   ProxyAccessible* root = rootEntry->mProxy;
   if (!root) {
@@ -146,26 +152,30 @@ DocAccessibleParent::AddChildDoc(DocAcce
   ProxyCreated(aChildDoc, 0);
   return true;
 }
 
 PLDHashOperator
 DocAccessibleParent::ShutdownAccessibles(ProxyEntry* entry, void*)
 {
   ProxyDestroyed(entry->mProxy);
-  return PL_DHASH_NEXT;
+  return PL_DHASH_REMOVE;
 }
 
 void
 DocAccessibleParent::Destroy()
 {
-  MOZ_ASSERT(mChildDocs.IsEmpty(),
-      "why wheren't the child docs destroyed already?");
+  NS_ASSERTION(mChildDocs.IsEmpty(),
+               "why weren't the child docs destroyed already?");
   MOZ_ASSERT(!mShutdown);
   mShutdown = true;
 
+  uint32_t childDocCount = mChildDocs.Length();
+  for (uint32_t i = childDocCount - 1; i < childDocCount; i--)
+    mChildDocs[i]->Destroy();
+
   mAccessibles.EnumerateEntries(ShutdownAccessibles, nullptr);
   ProxyDestroyed(this);
   mParentDoc ? mParentDoc->RemoveChildDoc(this)
     : GetAccService()->RemoteDocShutdown(this);
 }
 }
 }
--- a/accessible/ipc/DocAccessibleParent.h
+++ b/accessible/ipc/DocAccessibleParent.h
@@ -77,16 +77,25 @@ public:
   }
 
   void RemoveAccessible(ProxyAccessible* aAccessible)
   {
     MOZ_ASSERT(mAccessibles.GetEntry(aAccessible->ID()));
     mAccessibles.RemoveEntry(aAccessible->ID());
   }
 
+  /**
+   * Return the accessible for given id.
+   */
+  ProxyAccessible* GetAccessible(uintptr_t aID) const
+  {
+    ProxyEntry* e = mAccessibles.GetEntry(aID);
+    return e ? e->mProxy : nullptr;
+  }
+
 private:
 
   class ProxyEntry : public PLDHashEntryHdr
   {
   public:
     explicit ProxyEntry(const void*) : mProxy(nullptr) {}
     ProxyEntry(ProxyEntry&& aOther) :
       mProxy(aOther.mProxy) { aOther.mProxy = nullptr; }
--- a/accessible/ipc/PDocAccessible.ipdl
+++ b/accessible/ipc/PDocAccessible.ipdl
@@ -25,34 +25,55 @@ struct ShowEventData
 };
 
 struct Attribute
 {
   nsCString Name;
   nsString Value;
 };
 
+struct RelationTargets
+{
+  uint32_t Type;
+  uint64_t[] Targets;
+};
+
 prio(normal upto high) sync protocol PDocAccessible
 {
   manager PContent;
 
 parent:
   __delete__();
 
   /*
    * Notify the parent process the document in the child process is firing an
    * event.
    */
   Event(uint64_t aID, uint32_t type);
   ShowEvent(ShowEventData data);
   HideEvent(uint64_t aRootID);
 
 child:
+  // Accessible
   prio(high) sync State(uint64_t aID) returns(uint64_t states);
   prio(high) sync Name(uint64_t aID) returns(nsString name);
+  prio(high) sync Value(uint64_t aID) returns(nsString value);
   prio(high) sync Description(uint64_t aID) returns(nsString desc);
   prio(high) sync Attributes(uint64_t aID) returns(Attribute[] attributes);
-prio(high) sync TextSubstring(uint64_t aID, int32_t aStartOffset, int32_t
-                              aEndOffset) returns(nsString aText);
+  prio(high) sync RelationByType(uint64_t aID, uint32_t aRelationType)
+    returns(uint64_t[] targets);
+  prio(high) sync Relations(uint64_t aID) returns(RelationTargets[] relations);
+
+  // AccessibleText
+
+  // TextSubstring is getText in IDL.
+  prio(high) sync TextSubstring(uint64_t aID, int32_t aStartOffset, int32_t
+                                aEndOffset) returns(nsString aText);
+  prio(high) sync GetTextAfterOffset(uint64_t aID, int32_t aOffset, int32_t aBoundaryType)
+    returns(nsString aText, int32_t aStartOffset, int32_t aEndOffset);
+  prio(high) sync GetTextAtOffset(uint64_t aID, int32_t aOffset, int32_t aBoundaryType)
+    returns(nsString aText, int32_t aStartOffset, int32_t aEndOffset);
+  prio(high) sync GetTextBeforeOffset(uint64_t aID, int32_t aOffset, int32_t aBoundaryType)
+    returns(nsString aText, int32_t aStartOffset, int32_t aEndOffset);
 };
 
 }
 }
--- a/accessible/ipc/ProxyAccessible.cpp
+++ b/accessible/ipc/ProxyAccessible.cpp
@@ -3,24 +3,26 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "ProxyAccessible.h"
 #include "DocAccessibleParent.h"
 #include "mozilla/unused.h"
 #include "mozilla/a11y/Platform.h"
+#include "RelationType.h"
+#include "mozilla/a11y/Role.h"
 
 namespace mozilla {
 namespace a11y {
 
 void
 ProxyAccessible::Shutdown()
 {
-  MOZ_ASSERT(!mOuterDoc);
+  NS_ASSERTION(!mOuterDoc, "Why do we still have a child doc?");
 
   // XXX Ideally  this wouldn't be necessary, but it seems OuterDoc accessibles
   // can be destroyed before the doc they own.
   if (!mOuterDoc) {
     uint32_t childCount = mChildren.Length();
     for (uint32_t idx = 0; idx < childCount; idx++)
       mChildren[idx]->Shutdown();
   } else {
@@ -44,42 +46,145 @@ ProxyAccessible::SetChildDoc(DocAccessib
     mOuterDoc = true;
   } else {
     MOZ_ASSERT(mChildren.Length() == 1);
     mChildren.Clear();
     mOuterDoc = false;
   }
 }
 
+bool
+ProxyAccessible::MustPruneChildren() const
+{
+  // this is the equivalent to nsAccUtils::MustPrune for proxies and should be
+  // kept in sync with that.
+  if (mRole != roles::MENUITEM && mRole != roles::COMBOBOX_OPTION
+      && mRole != roles::OPTION && mRole != roles::ENTRY
+      && mRole != roles::FLAT_EQUATION && mRole != roles::PASSWORD_TEXT
+      && mRole != roles::PUSHBUTTON && mRole != roles::TOGGLE_BUTTON
+      && mRole != roles::GRAPHIC && mRole != roles::SLIDER
+      && mRole != roles::PROGRESSBAR && mRole != roles::SEPARATOR)
+    return false;
+
+  if (mChildren.Length() != 1)
+    return false;
+
+  return mChildren[0]->Role() == roles::TEXT_LEAF
+    || mChildren[0]->Role() == roles::STATICTEXT;
+}
+
 uint64_t
 ProxyAccessible::State() const
 {
   uint64_t state = 0;
   unused << mDoc->SendState(mID, &state);
   return state;
 }
 
 void
 ProxyAccessible::Name(nsString& aName) const
 {
   unused << mDoc->SendName(mID, &aName);
 }
 
 void
+ProxyAccessible::Value(nsString& aValue) const
+{
+  unused << mDoc->SendValue(mID, &aValue);
+}
+
+void
 ProxyAccessible::Description(nsString& aDesc) const
 {
   unused << mDoc->SendDescription(mID, &aDesc);
 }
 
 void
 ProxyAccessible::Attributes(nsTArray<Attribute> *aAttrs) const
 {
   unused << mDoc->SendAttributes(mID, aAttrs);
 }
 
+nsTArray<ProxyAccessible*>
+ProxyAccessible::RelationByType(RelationType aType) const
+{
+  nsTArray<uint64_t> targetIDs;
+  unused << mDoc->SendRelationByType(mID, static_cast<uint32_t>(aType),
+                                     &targetIDs);
+
+  size_t targetCount = targetIDs.Length();
+  nsTArray<ProxyAccessible*> targets(targetCount);
+  for (size_t i = 0; i < targetCount; i++)
+    if (ProxyAccessible* proxy = mDoc->GetAccessible(targetIDs[i]))
+      targets.AppendElement(proxy);
+
+  return Move(targets);
+}
+
+void
+ProxyAccessible::Relations(nsTArray<RelationType>* aTypes,
+                           nsTArray<nsTArray<ProxyAccessible*>>* aTargetSets)
+  const
+{
+  nsTArray<RelationTargets> ipcRelations;
+  unused << mDoc->SendRelations(mID, &ipcRelations);
+
+  size_t relationCount = ipcRelations.Length();
+  aTypes->SetCapacity(relationCount);
+  aTargetSets->SetCapacity(relationCount);
+  for (size_t i = 0; i < relationCount; i++) {
+    uint32_t type = ipcRelations[i].Type();
+    if (type > static_cast<uint32_t>(RelationType::LAST))
+      continue;
+
+    size_t targetCount = ipcRelations[i].Targets().Length();
+    nsTArray<ProxyAccessible*> targets(targetCount);
+    for (size_t j = 0; j < targetCount; j++)
+      if (ProxyAccessible* proxy = mDoc->GetAccessible(ipcRelations[i].Targets()[j]))
+        targets.AppendElement(proxy);
+
+    if (targets.IsEmpty())
+      continue;
+
+    aTargetSets->AppendElement(Move(targets));
+    aTypes->AppendElement(static_cast<RelationType>(type));
+  }
+}
+
 void
 ProxyAccessible::TextSubstring(int32_t aStartOffset, int32_t aEndOfset,
                                nsString& aText) const
 {
   unused << mDoc->SendTextSubstring(mID, aStartOffset, aEndOfset, &aText);
 }
+
+void
+ProxyAccessible::GetTextAfterOffset(int32_t aOffset,
+                                    AccessibleTextBoundary aBoundaryType,
+                                    nsString& aText, int32_t* aStartOffset,
+                                    int32_t* aEndOffset)
+{
+  unused << mDoc->SendGetTextAfterOffset(mID, aOffset, aBoundaryType,
+                                         &aText, aStartOffset, aEndOffset);
+}
+
+void
+ProxyAccessible::GetTextAtOffset(int32_t aOffset,
+                                 AccessibleTextBoundary aBoundaryType,
+                                 nsString& aText, int32_t* aStartOffset,
+                                 int32_t* aEndOffset)
+{
+  unused << mDoc->SendGetTextAtOffset(mID, aOffset, aBoundaryType,
+                                      &aText, aStartOffset, aEndOffset);
+}
+
+void
+ProxyAccessible::GetTextBeforeOffset(int32_t aOffset,
+                                     AccessibleTextBoundary aBoundaryType,
+                                     nsString& aText, int32_t* aStartOffset,
+                                     int32_t* aEndOffset)
+{
+  unused << mDoc->SendGetTextBeforeOffset(mID, aOffset, aBoundaryType,
+                                          &aText, aStartOffset, aEndOffset);
+}
+
 }
 }
--- a/accessible/ipc/ProxyAccessible.h
+++ b/accessible/ipc/ProxyAccessible.h
@@ -3,24 +3,26 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef mozilla_a11y_ProxyAccessible_h
 #define mozilla_a11y_ProxyAccessible_h
 
 #include "mozilla/a11y/Role.h"
+#include "nsIAccessibleText.h"
 #include "nsString.h"
 #include "nsTArray.h"
 
 namespace mozilla {
 namespace a11y {
 
 class Attribute;
 class DocAccessibleParent;
+enum class RelationType;
 
 class ProxyAccessible
 {
 public:
 
   ProxyAccessible(uint64_t aID, ProxyAccessible* aParent,
                   DocAccessibleParent* aDoc, role aRole) :
      mParent(aParent), mDoc(aDoc), mWrapper(0), mID(aID), mRole(aRole),
@@ -33,16 +35,18 @@ public:
     MOZ_COUNT_DTOR(ProxyAccessible);
     MOZ_ASSERT(!mWrapper);
   }
 
   void AddChildAt(uint32_t aIdx, ProxyAccessible* aChild)
   { mChildren.InsertElementAt(aIdx, aChild); }
 
   uint32_t ChildrenCount() const { return mChildren.Length(); }
+  ProxyAccessible* ChildAt(uint32_t aIdx) const { return mChildren[aIdx]; }
+  bool MustPruneChildren() const;
 
   void Shutdown();
 
   void SetChildDoc(DocAccessibleParent*);
 
   /**
    * Remove The given child.
    */
@@ -64,32 +68,60 @@ public:
    */
   uint64_t State() const;
 
   /*
    * Set aName to the name of the proxied accessible.
    */
   void Name(nsString& aName) const;
 
+  /*
+   * Set aValue to the value of the proxied accessible.
+   */
+  void Value(nsString& aValue) const;
+
   /**
    * Set aDesc to the description of the proxied accessible.
    */
   void Description(nsString& aDesc) const;
 
   /**
    * Get the set of attributes on the proxied accessible.
    */
   void Attributes(nsTArray<Attribute> *aAttrs) const;
 
   /**
+   * Return set of targets of given relation type.
+   */
+  nsTArray<ProxyAccessible*> RelationByType(RelationType aType) const;
+
+  /**
+   * Get all relations for this accessible.
+   */
+  void Relations(nsTArray<RelationType>* aTypes,
+                 nsTArray<nsTArray<ProxyAccessible*>>* aTargetSets) const;
+
+  /**
    * Get the text between the given offsets.
    */
   void TextSubstring(int32_t aStartOffset, int32_t aEndOfset,
                      nsString& aText) const;
 
+  void GetTextAfterOffset(int32_t aOffset, AccessibleTextBoundary aBoundaryType,
+                          nsString& aText, int32_t* aStartOffset,
+                          int32_t* aEndOffset);
+
+  void GetTextAtOffset(int32_t aOffset, AccessibleTextBoundary aBoundaryType,
+                       nsString& aText, int32_t* aStartOffset,
+                       int32_t* aEndOffset);
+
+  void GetTextBeforeOffset(int32_t aOffset, AccessibleTextBoundary aBoundaryType,
+                           nsString& aText, int32_t* aStartOffset,
+                           int32_t* aEndOffset);
+
   /**
    * Allow the platform to store a pointers worth of data on us.
    */
   uintptr_t GetWrapper() const { return mWrapper; }
   void SetWrapper(uintptr_t aWrapper) { mWrapper = aWrapper; }
 
   /*
    * Return the ID of the accessible being proxied.
--- a/accessible/jsat/ContentControl.jsm
+++ b/accessible/jsat/ContentControl.jsm
@@ -282,18 +282,17 @@ this.ContentControl.prototype = {
 
     if (elem.tagName === 'INPUT' && elem.type === 'range') {
       elem[aStepUp ? 'stepDown' : 'stepUp']();
       let evt = this.document.createEvent('UIEvent');
       evt.initEvent('change', true, true);
       elem.dispatchEvent(evt);
     } else {
       let evt = this.document.createEvent('KeyboardEvent');
-      let keycode = aStepUp ? content.KeyEvent.DOM_VK_DOWN :
-        content.KeyEvent.DOM_VK_UP;
+      let keycode = aStepUp ? evt.DOM_VK_DOWN : evt.DOM_VK_UP;
       evt.initKeyEvent(
         "keypress", false, true, null, false, false, false, false, keycode, 0);
       elem.dispatchEvent(evt);
     }
 
     return true;
   },
 
--- a/accessible/jsat/EventManager.jsm
+++ b/accessible/jsat/EventManager.jsm
@@ -181,16 +181,24 @@ this.EventManager.prototype = {
         } else if (state.contains(States.SELECTED)) {
           this.present(
             Presentation.
               actionInvoked(aEvent.accessible,
                             event.isEnabled ? 'select' : 'unselect'));
         }
         break;
       }
+      case Events.NAME_CHANGE:
+      {
+        let acc = aEvent.accessible;
+        if (acc === this.contentControl.vc.position) {
+          this.present(Presentation.nameChanged(acc));
+        }
+        break;
+      }
       case Events.SCROLLING_START:
       {
         this.contentControl.autoMove(aEvent.accessible);
         break;
       }
       case Events.TEXT_CARET_MOVED:
       {
         let acc = aEvent.accessible.QueryInterface(Ci.nsIAccessibleText);
--- a/accessible/jsat/Presentation.jsm
+++ b/accessible/jsat/Presentation.jsm
@@ -70,16 +70,22 @@ Presenter.prototype = {
 
   /**
    * Selection has changed. TODO.
    * @param {nsIAccessible} aObject the object that has been selected.
    */
   selectionChanged: function selectionChanged(aObject) {}, // jshint ignore:line
 
   /**
+   * Name has changed.
+   * @param {nsIAccessible} aAccessible the object whose value has changed.
+   */
+  nameChanged: function nameChanged(aAccessible) {}, // jshint ignore: line
+
+  /**
    * Value has changed.
    * @param {nsIAccessible} aAccessible the object whose value has changed.
    */
   valueChanged: function valueChanged(aAccessible) {}, // jshint ignore:line
 
   /**
    * The tab, or the tab's document state has changed.
    * @param {nsIAccessible} aDocObj the tab document accessible that has had its
@@ -509,16 +515,27 @@ B2GPresenter.prototype.pivotChanged =
           reason: this.pivotChangedReasons[aReason],
           isUserInput: aIsUserInput,
           hints: aContext.interactionHints
         }
       }
     };
   };
 
+B2GPresenter.prototype.nameChanged =
+  function B2GPresenter_nameChanged(aAccessible) {
+    return {
+      type: this.type,
+      details: {
+        eventType: 'name-change',
+        data: aAccessible.name
+      }
+    };
+  };
+
 B2GPresenter.prototype.valueChanged =
   function B2GPresenter_valueChanged(aAccessible) {
 
     // the editable value changes are handled in the text changed presenter
     if (Utils.getState(aAccessible).contains(States.EDITABLE)) {
       return null;
     }
 
@@ -684,16 +701,20 @@ this.Presentation = { // jshint ignore:l
 
   textSelectionChanged: function textSelectionChanged(aText, aStart, aEnd,
                                                       aOldStart, aOldEnd,
                                                       aIsFromUserInput) {
     return [p.textSelectionChanged(aText, aStart, aEnd, aOldStart, aOldEnd, // jshint ignore:line
       aIsFromUserInput) for each (p in this.presenters)]; // jshint ignore:line
   },
 
+  nameChanged: function nameChanged(aAccessible) {
+    return [ p.nameChanged(aAccessible) for (p of this.presenters) ]; // jshint ignore:line
+  },
+
   valueChanged: function valueChanged(aAccessible) {
     return [ p.valueChanged(aAccessible) for (p of this.presenters) ]; // jshint ignore:line
   },
 
   tabStateChanged: function Presentation_tabStateChanged(aDocObj, aPageState) {
     return [p.tabStateChanged(aDocObj, aPageState) // jshint ignore:line
       for each (p in this.presenters)]; // jshint ignore:line
   },
--- a/accessible/jsat/TraversalRules.jsm
+++ b/accessible/jsat/TraversalRules.jsm
@@ -97,17 +97,18 @@ var gSimpleTraversalRoles =
    Roles.HEADER,
    Roles.HEADING,
    Roles.SLIDER,
    Roles.SPINBUTTON,
    Roles.OPTION,
    Roles.LISTITEM,
    Roles.GRID_CELL,
    Roles.COLUMNHEADER,
-   Roles.ROWHEADER];
+   Roles.ROWHEADER,
+   Roles.STATUSBAR];
 
 var gSimpleMatchFunc = function gSimpleMatchFunc(aAccessible) {
   // An object is simple, if it either has a single child lineage,
   // or has a flat subtree.
   function isSingleLineage(acc) {
     for (let child = acc; child; child = child.firstChild) {
       if (Utils.visibleChildCount(child) > 1) {
         return false;
@@ -146,16 +147,17 @@ var gSimpleMatchFunc = function gSimpleM
     return Utils.isListItemDecorator(aAccessible) ?
       Filters.IGNORE : Filters.MATCH;
   case Roles.GRAPHIC:
     return TraversalRules._shouldSkipImage(aAccessible);
   case Roles.HEADER:
   case Roles.HEADING:
   case Roles.COLUMNHEADER:
   case Roles.ROWHEADER:
+  case Roles.STATUSBAR:
     if ((aAccessible.childCount > 0 || aAccessible.name) &&
         (isSingleLineage(aAccessible) || isFlatSubtree(aAccessible))) {
       return Filters.MATCH | Filters.IGNORE_SUBTREE;
     }
     return Filters.IGNORE;
   case Roles.GRID_CELL:
     return isSingleLineage(aAccessible) || isFlatSubtree(aAccessible) ?
       Filters.MATCH | Filters.IGNORE_SUBTREE : Filters.IGNORE;
--- a/accessible/tests/mochitest/common.js
+++ b/accessible/tests/mochitest/common.js
@@ -208,17 +208,17 @@ const DONOTFAIL_IF_NO_INTERFACE = 2;
 function getAccessible(aAccOrElmOrID, aInterfaces, aElmObj, aDoNotFailIf)
 {
   if (!aAccOrElmOrID)
     return null;
 
   var elm = null;
 
   if (aAccOrElmOrID instanceof nsIAccessible) {
-    elm = aAccOrElmOrID.DOMNode;
+    try { elm = aAccOrElmOrID.DOMNode; } catch(e) { }
 
   } else if (aAccOrElmOrID instanceof nsIDOMNode) {
     elm = aAccOrElmOrID;
 
   } else {
     elm = document.getElementById(aAccOrElmOrID);
     if (!elm) {
       ok(false, "Can't get DOM element for " + aAccOrElmOrID);
@@ -695,18 +695,19 @@ function prettyName(aIdentifier)
 
       msg += prettyName(aIdentifier[idx]);
     }
     return msg;
   }
 
   if (aIdentifier instanceof nsIAccessible) {
     var acc = getAccessible(aIdentifier);
-    var msg = "[" + getNodePrettyName(acc.DOMNode);
+    var msg = "[";
     try {
+      msg += getNodePrettyName(acc.DOMNode);
       msg += ", role: " + roleToString(acc.role);
       if (acc.name)
         msg += ", name: '" + shortenString(acc.name) + "'";
     } catch (e) {
       msg += "defunct";
     }
 
     if (acc)
--- a/accessible/tests/mochitest/elm/test_canvas.html
+++ b/accessible/tests/mochitest/elm/test_canvas.html
@@ -13,42 +13,41 @@
   <script type="application/javascript"
           src="../common.js"></script>
   <script type="application/javascript"
           src="../role.js"></script>
   <script type="application/javascript"
           src="../layout.js"></script>
 
   <script type="application/javascript">
-  SpecialPowers.setBoolPref("canvas.hitregions.enabled", true);
-
     function doTest()
     {
       var canv = document.getElementById("c");
       var context = canv.getContext('2d');
       var element = document.getElementById("showA");
       context.beginPath();
       context.rect(10, 10, 150, 100);
       context.addHitRegion({control: element});
       var input = getAccessible("showA");
       var input = getAccessible("showA");
       var [cnvX, cnvY, cnvWidth, cnvHeight] = getBoundsForDOMElm(canv);
       var [accX, accY, accWidth, accHeight] = getBounds(input);
       is(accX, cnvX + 10, "accX should be 10 and not " + accX);
       is(accY, cnvY + 10, "accY should be 10 and not " + accY);
       is(accWidth, 150, "accWidth should be 150 and not " + accWidth);
       is(accHeight, 100, "accHeight should be 100 and not " + accHeight);
-
-      SpecialPowers.setBoolPref("canvas.hitregions.enabled", false);
       SimpleTest.finish();
     }
 
     SimpleTest.waitForExplicitFinish();
-    addA11yLoadEvent(doTest);
-  </script>
+    addA11yLoadEvent(function() {
+      SpecialPowers.pushPrefEnv({"set": [['canvas.hitregions.enabled', true]]}, doTest);
+    });
+
+    </script>
 </head>
 <body>
 
   <canvas id="c">
     <input id="showA" type="checkbox"><label for="showA"> Show As </label>
   </canvas>
 
 </body>
--- a/accessible/tests/mochitest/events/test_aria_objattr.html
+++ b/accessible/tests/mochitest/events/test_aria_objattr.html
@@ -7,16 +7,18 @@
         href="chrome://mochikit/content/tests/SimpleTest/test.css" />
 
   <script type="application/javascript"
           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
 
   <script type="application/javascript"
           src="../common.js"></script>
   <script type="application/javascript"
+          src="../attributes.js"></script>
+  <script type="application/javascript"
           src="../events.js"></script>
 
   <script type="application/javascript">
 
     /**
      * Do tests.
      */
     var gQueue = null;
@@ -35,25 +37,43 @@
       };
 
       this.getID = function updateAttribute_getID()
       {
         return aAttr + " for " + aID + " " + aValue;
       };
     }
 
+    function updateARIAHidden(aID, aIsDefined, aChildId)
+    {
+      this.__proto__ = new updateAttribute(aID, "aria-hidden",
+                                           aIsDefined ? "true" : "false");
+
+      this.finalCheck = function updateARIAHidden()
+      {
+        if (aIsDefined) {
+          testAttrs(aID, {"hidden" : "true"}, true);
+          testAttrs(aChildId, {"hidden" : "true"}, true);
+        } else {
+          testAbsentAttrs(aID, { "hidden": "true"});
+          testAbsentAttrs(aChildId, { "hidden": "true"});
+        }
+      }
+    }
+
     // Debug stuff.
     // gA11yEventDumpID = "eventdump";
     //gA11yEventDumpToConsole = true;
 
     function doTests()
     {
       gQueue = new eventQueue();
 
-      gQueue.push(new updateAttribute("hideable", "aria-hidden", "true"));
+      gQueue.push(new updateARIAHidden("hideable", true, "hideable_child"));
+      gQueue.push(new updateARIAHidden("hideable", false, "hideable_child"));
 
       gQueue.push(new updateAttribute("sortable", "aria-sort", "ascending"));
 
       // For experimental ARIA extensions
       gQueue.push(new updateAttribute("custom", "aria-blah", "true"));
 
       gQueue.invoke(); // Will call SimpleTest.finish();
     }
@@ -84,15 +104,15 @@
   </a>
 
   <p id="display"></p>
   <div id="content" style="display: none"></div>
   <pre id="test">
   </pre>
   <div id="eventdump"></div>
 
-  <div id="hideable"><div>Hi</div><div>there</div></div>
+  <div id="hideable"><div id="hideable_child">Hi</div><div>there</div></div>
 
   <div id="sortable" role="columnheader" aria-sort="none">aria-sort</div>
 
   <div id="custom" role="custom" aria-blah="false">Fat free cheese</div>
 </body>
 </html>
--- a/accessible/tests/mochitest/hittest/test_canvas_hitregion.html
+++ b/accessible/tests/mochitest/hittest/test_canvas_hitregion.html
@@ -8,18 +8,16 @@
           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
 
   <script type="application/javascript"
           src="../common.js"></script>
   <script type="application/javascript"
           src="../layout.js"></script>
 
   <script type="application/javascript">
-    SpecialPowers.setBoolPref("canvas.hitregions.enabled", true);
-
     function redrawCheckbox(context, element, x, y)
     {
       context.save();
       context.font = '10px sans-serif';
       context.textAlign = 'left';
       context.textBaseline = 'middle';
       var metrics = context.measureText(element.parentNode.textContent);
       context.beginPath();
@@ -62,23 +60,23 @@
                           ". Found: " + prettyName(hitAcc));
 
       tgtY = hitY+75;
       hitAcc = docAcc.getDeepestChildAtPoint(tgtX, tgtY);
       // test that we don't hit the region associated with the shadow dom checkbox
       is(hitAcc, hitcanvas, "Hit match at " + tgtX + "," + tgtY +
                           ". Found: " + prettyName(hitAcc));
 
-      SpecialPowers.setBoolPref("canvas.hitregions.enabled", false);
       SimpleTest.finish();
     }
-
     SimpleTest.waitForExplicitFinish();
-    addA11yLoadEvent(doTest);
-  </script>
+    addA11yLoadEvent(function() {
+      SpecialPowers.pushPrefEnv({"set": [['canvas.hitregions.enabled', true]]}, doTest);
+    });
+ </script>
 </head>
 <body>
 
   <a target="_blank"
      href="https://bugzilla.mozilla.org/show_bug.cgi?id=966591"
      title="nsIAccessible::childAtPoint() for canvas hit regions from browser tests">Mozilla Bug 966591</a>
 
   <canvas id="hitcanvas">
--- a/accessible/tests/mochitest/hittest/test_general.html
+++ b/accessible/tests/mochitest/hittest/test_general.html
@@ -63,16 +63,18 @@ if (!MAC) {
 
       testChildAtPoint("area", 1, 1, "area", "area");
 
       // Test image maps. Their children are not in the layout tree.
       var theLetterA = getAccessible("imgmap").firstChild;
       hitTest("imgmap", theLetterA, theLetterA);
       hitTest("container", "imgmap", theLetterA);
 
+      // hit testing for element contained by zero-width element
+      hitTest("container2", "container2_input", "container2_input");
       SimpleTest.finish();
     }
 
     SimpleTest.waitForExplicitFinish();
     addA11yLoadEvent(doPreTest);
   </script>
 </head>
 <body>
@@ -101,10 +103,13 @@ if (!MAC) {
     <area href="http://www.bbc.co.uk/radio4/atoz/index.shtml#a"
           coords="0,0,15,15" alt="thelettera" shape="rect"/>
   </map>
 
   <div id="container">
     <img id="imgmap" width="447" height="15" usemap="#atoz_map" src="../letters.gif"/>
   </div>
 
+  <div id="container2" style="width: 0px">
+    <input id="container2_input">
+  </div>
 </body>
 </html>
--- a/accessible/tests/mochitest/jsat/doc_content_integration.html
+++ b/accessible/tests/mochitest/jsat/doc_content_integration.html
@@ -35,16 +35,20 @@
     function ariaShowIframe() {
       document.getElementById('iframe').setAttribute('aria-hidden', false);
     }
 
     function ariaHideIframe() {
       document.getElementById('iframe').setAttribute('aria-hidden', true);
     }
 
+    function renameFruit() {
+      document.getElementById('fruit').setAttribute('aria-label', 'banana');
+    }
+
   </script>
   <style>
     #windows {
       position: relative;
       width: 320px;
       height: 480px;
     }
 
@@ -79,10 +83,11 @@
       <h1>This is an alert!</h1>
       <p>Do you agree?</p>
       <button onclick="setTimeout(hideAlert, 500)">Yes</button>
       <button onclick="hideAlert()">No</button>
     </div>
     <div id="appframe"></div>
   </div>
   <button id="home">Home</button>
+  <button id="fruit" aria-label="apple"></button>
 </body>
 </html>
--- a/accessible/tests/mochitest/jsat/doc_traversal.html
+++ b/accessible/tests/mochitest/jsat/doc_traversal.html
@@ -136,10 +136,12 @@
     </tfoot>
     <tbody>
       <tr>
         <td>Dirt</td>
         <td>Messy Stuff</td>
       </tr>
     </tbody>
   </table>
+  <div id="statusbar-1" role="status">Last sync:<span>2 days ago</span></div>
+  <div aria-label="Last sync: 30min ago" id="statusbar-2" role="status"></div>
 </body>
 </html>
--- a/accessible/tests/mochitest/jsat/jsatcommon.js
+++ b/accessible/tests/mochitest/jsat/jsatcommon.js
@@ -612,16 +612,25 @@ function ExpectedCheckAction(aChecked, a
   }, [{
     eventType: AndroidEvent.VIEW_CLICKED,
     checked: aChecked
   }], aOptions);
 }
 
 ExpectedCheckAction.prototype = Object.create(ExpectedPresent.prototype);
 
+function ExpectedNameChange(aName, aOptions) {
+  ExpectedPresent.call(this, {
+    eventType: 'name-change',
+    data: aName
+  }, null, aOptions);
+}
+
+ExpectedNameChange.prototype = Object.create(ExpectedPresent.prototype);
+
 function ExpectedValueChange(aValue, aOptions) {
   ExpectedPresent.call(this, {
     eventType: 'value-change',
     data: [aValue]
   }, null, aOptions);
 }
 
 ExpectedValueChange.prototype = Object.create(ExpectedPresent.prototype);
--- a/accessible/tests/mochitest/jsat/test_content_integration.html
+++ b/accessible/tests/mochitest/jsat/test_content_integration.html
@@ -51,19 +51,23 @@
            new ExpectedCheckAction(true, { android_todo: true })],
           [ContentMessages.simpleMoveNext,
            new ExpectedCursorChange(['much range', {'string': 'label'}])],
           [ContentMessages.simpleMoveNext,
            new ExpectedCursorChange(['much range', '5', {'string': 'slider'}])],
           [ContentMessages.moveOrAdjustUp(), new ExpectedValueChange('6')],
           [ContentMessages.simpleMoveNext,
            new ExpectedCursorChange(['Home', {'string': 'pushbutton'}])],
+          [ContentMessages.simpleMoveNext,
+           new ExpectedCursorChange(['apple', {'string': 'pushbutton'}])],
 
           // Simple traversal backward
           [ContentMessages.simpleMovePrevious,
+           new ExpectedCursorChange(['Home', {'string': 'pushbutton'}])],
+          [ContentMessages.simpleMovePrevious,
            new ExpectedCursorChange(['much range', '6', {'string': 'slider'}, 'such app'])],
           [ContentMessages.moveOrAdjustDown(), new ExpectedValueChange('5')],
           [ContentMessages.simpleMovePrevious,
            new ExpectedCursorChange(['much range', {'string': 'label'}])],
           [ContentMessages.simpleMovePrevious,
            new ExpectedCursorChange(['many option', {'string': 'stateChecked'},
             {'string': 'checkbutton'}, {'string': 'listStart'},
             {'string': 'list'}, {'string': 'listItemsCount', 'count': 1}])],
@@ -83,17 +87,17 @@
           // Moving to the absolute last item from an embedded document
           // fails. Bug 972035.
           [ContentMessages.simpleMoveNext,
            new ExpectedCursorChange(
             ['wow', {'string': 'headingLevel', 'args': [1]}, 'such app'])],
           // Move from an inner frame to the last element in the parent doc
           [ContentMessages.simpleMoveLast,
             new ExpectedCursorChange(
-              ['Home', {'string': 'pushbutton'}], { b2g_todo: true })],
+              ['apple', {'string': 'pushbutton'}], { b2g_todo: true })],
 
           [ContentMessages.clearCursor, 'AccessFu:CursorCleared'],
 
           [ContentMessages.simpleMoveNext,
            new ExpectedCursorChange(['Phone status bar', 'Traversal Rule test document'])],
           [Con