Merge m-c to s-c (including fixed conflict in Android Sync manifest).
authorRichard Newman <rnewman@mozilla.com>
Sat, 15 Dec 2012 17:08:14 -0800
changeset 126460 f686da9aa3ca4d1f5b4ff7a40b87d81604365bcd
parent 126459 d6176d70331d5a1c50da4660621544e3d1ea0763 (current diff)
parent 125261 c8a1314aa449e76e5338f4b8a389bc16e29f831e (diff)
child 126461 afa37a092db548a746a3e60e89cd718b4db3052d
push id2151
push userlsblakk@mozilla.com
push dateTue, 19 Feb 2013 18:06:57 +0000
treeherdermozilla-beta@4952e88741ec [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone20.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge m-c to s-c (including fixed conflict in Android Sync manifest).
browser/base/content/test/browser_social.js
browser/base/content/test/browser_social_chatwindow.js
browser/base/content/test/browser_social_flyout.js
browser/base/content/test/browser_social_isVisible.js
browser/base/content/test/browser_social_mozSocial_API.js
browser/base/content/test/browser_social_shareButton.js
browser/base/content/test/browser_social_sidebar.js
browser/base/content/test/browser_social_toolbar.js
browser/base/content/test/social_chat.html
browser/base/content/test/social_flyout.html
browser/base/content/test/social_panel.html
browser/base/content/test/social_share_image.png
browser/base/content/test/social_sidebar.html
browser/base/content/test/social_window.html
browser/base/content/test/social_worker.js
browser/devtools/debugger/test/browser_dbg_leaktest.js
build/.gdbinit
dom/battery/test/marionette/test_battery.js
dom/interfaces/css/nsIDOMCSSValueList.idl
layout/base/tests/chrome/paint_listener.js
layout/tables/nsITableLayout.h
mobile/android/base/ScreenshotHandler.java
mobile/android/base/android-services-files.mk
mobile/android/base/gfx/CheckerboardImage.java
mobile/android/base/gfx/ScreenshotLayer.java
mobile/android/base/resources/color/tabs_counter_color.xml.in
mobile/android/base/resources/drawable-hdpi/tabs_carat_pb.png
mobile/android/base/resources/drawable-land-hdpi-v14/tabs_carat_pb.png
mobile/android/base/resources/drawable-land-mdpi-v14/tabs_carat_pb.png
mobile/android/base/resources/drawable-land-xhdpi-v14/tabs_carat_pb.png
mobile/android/base/resources/drawable-large-hdpi-v11/tabs_carat_pb.png
mobile/android/base/resources/drawable-large-mdpi-v11/tabs_carat_pb.png
mobile/android/base/resources/drawable-large-xhdpi-v11/tabs_carat_pb.png
mobile/android/base/resources/drawable-nodpi/tabs_tray_bg_pb.png
mobile/android/base/resources/drawable-xhdpi/tabs_carat_pb.png
mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_carat_contracted_pb.png
mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_carat_expanded_pb.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml.in
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_carat_contracted_pb.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_carat_expanded_pb.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_level.xml
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_level.xml.in
mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_carat_contracted_pb.png
mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_carat_expanded_pb.png
mobile/android/base/resources/drawable/tabs_button.xml
mobile/android/base/resources/drawable/tabs_button.xml.in
mobile/android/base/resources/drawable/tabs_carat_pb.png
mobile/android/base/resources/drawable/tabs_level.xml
mobile/android/base/resources/drawable/tabs_level.xml.in
mobile/android/base/resources/drawable/tabs_tray_bg_pb_repeat.xml
mobile/android/base/sync/delegates/InfoCollectionsDelegate.java
mobile/android/base/sync/net/BaseResourceDelegate.java
mobile/android/branding/aurora/content/bookmarkdefaults_favicon_aboutfirefox.png
mobile/android/branding/beta/content/bookmarkdefaults_favicon_aboutfirefox.png
mobile/android/branding/nightly/content/bookmarkdefaults_favicon_aboutfirefox.png
mobile/android/branding/official/content/bookmarkdefaults_favicon_aboutfirefox.png
mobile/android/branding/unofficial/content/bookmarkdefaults_favicon_aboutfirefox.png
mobile/android/services/java-sources.mn
netwerk/cache/nsIDiskCacheStreamInternal.idl
nsprpub/admin/repackage.sh
services/sync/tests/unit/xpcshell.ini
testing/mozbase/docs.manifest
tools/profiler/libunwind/README.mozilla
tools/profiler/libunwind/dont_build_docs.sh
tools/profiler/libunwind/src/AUTHORS
tools/profiler/libunwind/src/COPYING
tools/profiler/libunwind/src/ChangeLog
tools/profiler/libunwind/src/INSTALL
tools/profiler/libunwind/src/LICENSE
tools/profiler/libunwind/src/Makefile.am
tools/profiler/libunwind/src/Makefile.in
tools/profiler/libunwind/src/NEWS
tools/profiler/libunwind/src/README
tools/profiler/libunwind/src/TODO
tools/profiler/libunwind/src/acinclude.m4
tools/profiler/libunwind/src/aclocal.m4
tools/profiler/libunwind/src/aux_/config.guess
tools/profiler/libunwind/src/aux_/config.sub
tools/profiler/libunwind/src/aux_/ltmain.sh
tools/profiler/libunwind/src/config/compile
tools/profiler/libunwind/src/config/config.guess
tools/profiler/libunwind/src/config/config.sub
tools/profiler/libunwind/src/config/depcomp
tools/profiler/libunwind/src/config/install-sh
tools/profiler/libunwind/src/config/ltmain.sh
tools/profiler/libunwind/src/config/missing
tools/profiler/libunwind/src/configure
tools/profiler/libunwind/src/configure.in
tools/profiler/libunwind/src/doc/Makefile.am
tools/profiler/libunwind/src/doc/Makefile.in
tools/profiler/libunwind/src/doc/NOTES
tools/profiler/libunwind/src/doc/_U_dyn_cancel.man
tools/profiler/libunwind/src/doc/_U_dyn_cancel.tex
tools/profiler/libunwind/src/doc/_U_dyn_register.man
tools/profiler/libunwind/src/doc/_U_dyn_register.tex
tools/profiler/libunwind/src/doc/common.tex.in
tools/profiler/libunwind/src/doc/libunwind-dynamic.man
tools/profiler/libunwind/src/doc/libunwind-dynamic.tex
tools/profiler/libunwind/src/doc/libunwind-ia64.man
tools/profiler/libunwind/src/doc/libunwind-ia64.tex
tools/profiler/libunwind/src/doc/libunwind-ptrace.man
tools/profiler/libunwind/src/doc/libunwind-ptrace.tex
tools/profiler/libunwind/src/doc/libunwind-setjmp.man
tools/profiler/libunwind/src/doc/libunwind-setjmp.tex
tools/profiler/libunwind/src/doc/libunwind.man
tools/profiler/libunwind/src/doc/libunwind.tex
tools/profiler/libunwind/src/doc/libunwind.trans
tools/profiler/libunwind/src/doc/unw_create_addr_space.man
tools/profiler/libunwind/src/doc/unw_create_addr_space.tex
tools/profiler/libunwind/src/doc/unw_destroy_addr_space.man
tools/profiler/libunwind/src/doc/unw_destroy_addr_space.tex
tools/profiler/libunwind/src/doc/unw_flush_cache.man
tools/profiler/libunwind/src/doc/unw_flush_cache.tex
tools/profiler/libunwind/src/doc/unw_get_accessors.man
tools/profiler/libunwind/src/doc/unw_get_accessors.tex
tools/profiler/libunwind/src/doc/unw_get_fpreg.man
tools/profiler/libunwind/src/doc/unw_get_fpreg.tex
tools/profiler/libunwind/src/doc/unw_get_proc_info.man
tools/profiler/libunwind/src/doc/unw_get_proc_info.tex
tools/profiler/libunwind/src/doc/unw_get_proc_info_by_ip.man
tools/profiler/libunwind/src/doc/unw_get_proc_info_by_ip.tex
tools/profiler/libunwind/src/doc/unw_get_proc_name.man
tools/profiler/libunwind/src/doc/unw_get_proc_name.tex
tools/profiler/libunwind/src/doc/unw_get_reg.man
tools/profiler/libunwind/src/doc/unw_get_reg.tex
tools/profiler/libunwind/src/doc/unw_getcontext.man
tools/profiler/libunwind/src/doc/unw_getcontext.tex
tools/profiler/libunwind/src/doc/unw_init_local.man
tools/profiler/libunwind/src/doc/unw_init_local.tex
tools/profiler/libunwind/src/doc/unw_init_remote.man
tools/profiler/libunwind/src/doc/unw_init_remote.tex
tools/profiler/libunwind/src/doc/unw_is_fpreg.man
tools/profiler/libunwind/src/doc/unw_is_fpreg.tex
tools/profiler/libunwind/src/doc/unw_is_signal_frame.man
tools/profiler/libunwind/src/doc/unw_is_signal_frame.tex
tools/profiler/libunwind/src/doc/unw_regname.man
tools/profiler/libunwind/src/doc/unw_regname.tex
tools/profiler/libunwind/src/doc/unw_resume.man
tools/profiler/libunwind/src/doc/unw_resume.tex
tools/profiler/libunwind/src/doc/unw_set_caching_policy.man
tools/profiler/libunwind/src/doc/unw_set_caching_policy.tex
tools/profiler/libunwind/src/doc/unw_set_fpreg.man
tools/profiler/libunwind/src/doc/unw_set_fpreg.tex
tools/profiler/libunwind/src/doc/unw_set_reg.man
tools/profiler/libunwind/src/doc/unw_set_reg.tex
tools/profiler/libunwind/src/doc/unw_step.man
tools/profiler/libunwind/src/doc/unw_step.tex
tools/profiler/libunwind/src/doc/unw_strerror.man
tools/profiler/libunwind/src/doc/unw_strerror.tex
tools/profiler/libunwind/src/include/config.h.in
tools/profiler/libunwind/src/include/dwarf-eh.h
tools/profiler/libunwind/src/include/dwarf.h
tools/profiler/libunwind/src/include/dwarf_i.h
tools/profiler/libunwind/src/include/libunwind-arm.h
tools/profiler/libunwind/src/include/libunwind-common.h.in
tools/profiler/libunwind/src/include/libunwind-dynamic.h
tools/profiler/libunwind/src/include/libunwind-hppa.h
tools/profiler/libunwind/src/include/libunwind-ia64.h
tools/profiler/libunwind/src/include/libunwind-mips.h
tools/profiler/libunwind/src/include/libunwind-ppc32.h
tools/profiler/libunwind/src/include/libunwind-ppc64.h
tools/profiler/libunwind/src/include/libunwind-ptrace.h
tools/profiler/libunwind/src/include/libunwind-x86.h
tools/profiler/libunwind/src/include/libunwind-x86_64.h
tools/profiler/libunwind/src/include/libunwind.h.in
tools/profiler/libunwind/src/include/libunwind_i.h
tools/profiler/libunwind/src/include/mempool.h
tools/profiler/libunwind/src/include/remote.h
tools/profiler/libunwind/src/include/tdep-arm/dwarf-config.h
tools/profiler/libunwind/src/include/tdep-arm/ex_tables.h
tools/profiler/libunwind/src/include/tdep-arm/jmpbuf.h
tools/profiler/libunwind/src/include/tdep-arm/libunwind_i.h
tools/profiler/libunwind/src/include/tdep-hppa/dwarf-config.h
tools/profiler/libunwind/src/include/tdep-hppa/jmpbuf.h
tools/profiler/libunwind/src/include/tdep-hppa/libunwind_i.h
tools/profiler/libunwind/src/include/tdep-ia64/jmpbuf.h
tools/profiler/libunwind/src/include/tdep-ia64/libunwind_i.h
tools/profiler/libunwind/src/include/tdep-ia64/rse.h
tools/profiler/libunwind/src/include/tdep-ia64/script.h
tools/profiler/libunwind/src/include/tdep-mips/dwarf-config.h
tools/profiler/libunwind/src/include/tdep-mips/jmpbuf.h
tools/profiler/libunwind/src/include/tdep-mips/libunwind_i.h
tools/profiler/libunwind/src/include/tdep-ppc32/dwarf-config.h
tools/profiler/libunwind/src/include/tdep-ppc32/jmpbuf.h
tools/profiler/libunwind/src/include/tdep-ppc32/libunwind_i.h
tools/profiler/libunwind/src/include/tdep-ppc64/dwarf-config.h
tools/profiler/libunwind/src/include/tdep-ppc64/jmpbuf.h
tools/profiler/libunwind/src/include/tdep-ppc64/libunwind_i.h
tools/profiler/libunwind/src/include/tdep-x86/dwarf-config.h
tools/profiler/libunwind/src/include/tdep-x86/jmpbuf.h
tools/profiler/libunwind/src/include/tdep-x86/libunwind_i.h
tools/profiler/libunwind/src/include/tdep-x86_64/dwarf-config.h
tools/profiler/libunwind/src/include/tdep-x86_64/jmpbuf.h
tools/profiler/libunwind/src/include/tdep-x86_64/libunwind_i.h
tools/profiler/libunwind/src/include/tdep/dwarf-config.h
tools/profiler/libunwind/src/include/tdep/jmpbuf.h
tools/profiler/libunwind/src/include/tdep/libunwind_i.h.in
tools/profiler/libunwind/src/include/unwind.h
tools/profiler/libunwind/src/include/x86/jmpbuf.h
tools/profiler/libunwind/src/scripts/kernel-diff.sh
tools/profiler/libunwind/src/scripts/kernel-files.txt
tools/profiler/libunwind/src/scripts/make-L-files
tools/profiler/libunwind/src/src/Makefile.am
tools/profiler/libunwind/src/src/Makefile.in
tools/profiler/libunwind/src/src/arm/Gcreate_addr_space.c
tools/profiler/libunwind/src/src/arm/Gex_tables.c
tools/profiler/libunwind/src/src/arm/Gget_proc_info.c
tools/profiler/libunwind/src/src/arm/Gget_save_loc.c
tools/profiler/libunwind/src/src/arm/Gglobal.c
tools/profiler/libunwind/src/src/arm/Ginit.c
tools/profiler/libunwind/src/src/arm/Ginit_local.c
tools/profiler/libunwind/src/src/arm/Ginit_remote.c
tools/profiler/libunwind/src/src/arm/Gis_signal_frame.c
tools/profiler/libunwind/src/src/arm/Gregs.c
tools/profiler/libunwind/src/src/arm/Gresume.c
tools/profiler/libunwind/src/src/arm/Gstep.c
tools/profiler/libunwind/src/src/arm/Lcreate_addr_space.c
tools/profiler/libunwind/src/src/arm/Lex_tables.c
tools/profiler/libunwind/src/src/arm/Lget_proc_info.c
tools/profiler/libunwind/src/src/arm/Lget_save_loc.c
tools/profiler/libunwind/src/src/arm/Lglobal.c
tools/profiler/libunwind/src/src/arm/Linit.c
tools/profiler/libunwind/src/src/arm/Linit_local.c
tools/profiler/libunwind/src/src/arm/Linit_remote.c
tools/profiler/libunwind/src/src/arm/Lis_signal_frame.c
tools/profiler/libunwind/src/src/arm/Lregs.c
tools/profiler/libunwind/src/src/arm/Lresume.c
tools/profiler/libunwind/src/src/arm/Lstep.c
tools/profiler/libunwind/src/src/arm/gen-offsets.c
tools/profiler/libunwind/src/src/arm/getcontext.S
tools/profiler/libunwind/src/src/arm/init.h
tools/profiler/libunwind/src/src/arm/is_fpreg.c
tools/profiler/libunwind/src/src/arm/offsets.h
tools/profiler/libunwind/src/src/arm/regname.c
tools/profiler/libunwind/src/src/arm/siglongjmp.S
tools/profiler/libunwind/src/src/arm/unwind_i.h
tools/profiler/libunwind/src/src/dl-iterate-phdr.c
tools/profiler/libunwind/src/src/dl-iterate-phdr.h
tools/profiler/libunwind/src/src/dwarf/Gexpr.c
tools/profiler/libunwind/src/src/dwarf/Gfde.c
tools/profiler/libunwind/src/src/dwarf/Gfind_proc_info-lsb.c
tools/profiler/libunwind/src/src/dwarf/Gparser.c
tools/profiler/libunwind/src/src/dwarf/Gpe.c
tools/profiler/libunwind/src/src/dwarf/Gstep.c
tools/profiler/libunwind/src/src/dwarf/Lexpr.c
tools/profiler/libunwind/src/src/dwarf/Lfde.c
tools/profiler/libunwind/src/src/dwarf/Lfind_proc_info-lsb.c
tools/profiler/libunwind/src/src/dwarf/Lparser.c
tools/profiler/libunwind/src/src/dwarf/Lpe.c
tools/profiler/libunwind/src/src/dwarf/Lstep.c
tools/profiler/libunwind/src/src/dwarf/global.c
tools/profiler/libunwind/src/src/elf32.c
tools/profiler/libunwind/src/src/elf32.h
tools/profiler/libunwind/src/src/elf64.c
tools/profiler/libunwind/src/src/elf64.h
tools/profiler/libunwind/src/src/elfxx.c
tools/profiler/libunwind/src/src/elfxx.h
tools/profiler/libunwind/src/src/hppa/Gcreate_addr_space.c
tools/profiler/libunwind/src/src/hppa/Gget_proc_info.c
tools/profiler/libunwind/src/src/hppa/Gget_save_loc.c
tools/profiler/libunwind/src/src/hppa/Gglobal.c
tools/profiler/libunwind/src/src/hppa/Ginit.c
tools/profiler/libunwind/src/src/hppa/Ginit_local.c
tools/profiler/libunwind/src/src/hppa/Ginit_remote.c
tools/profiler/libunwind/src/src/hppa/Gis_signal_frame.c
tools/profiler/libunwind/src/src/hppa/Gregs.c
tools/profiler/libunwind/src/src/hppa/Gresume.c
tools/profiler/libunwind/src/src/hppa/Gstep.c
tools/profiler/libunwind/src/src/hppa/Lcreate_addr_space.c
tools/profiler/libunwind/src/src/hppa/Lget_proc_info.c
tools/profiler/libunwind/src/src/hppa/Lget_save_loc.c
tools/profiler/libunwind/src/src/hppa/Lglobal.c
tools/profiler/libunwind/src/src/hppa/Linit.c
tools/profiler/libunwind/src/src/hppa/Linit_local.c
tools/profiler/libunwind/src/src/hppa/Linit_remote.c
tools/profiler/libunwind/src/src/hppa/Lis_signal_frame.c
tools/profiler/libunwind/src/src/hppa/Lregs.c
tools/profiler/libunwind/src/src/hppa/Lresume.c
tools/profiler/libunwind/src/src/hppa/Lstep.c
tools/profiler/libunwind/src/src/hppa/get_accessors.c
tools/profiler/libunwind/src/src/hppa/getcontext.S
tools/profiler/libunwind/src/src/hppa/init.h
tools/profiler/libunwind/src/src/hppa/offsets.h
tools/profiler/libunwind/src/src/hppa/regname.c
tools/profiler/libunwind/src/src/hppa/setcontext.S
tools/profiler/libunwind/src/src/hppa/siglongjmp.S
tools/profiler/libunwind/src/src/hppa/tables.c
tools/profiler/libunwind/src/src/hppa/unwind_i.h
tools/profiler/libunwind/src/src/ia64/Gcreate_addr_space.c
tools/profiler/libunwind/src/src/ia64/Gget_proc_info.c
tools/profiler/libunwind/src/src/ia64/Gget_save_loc.c
tools/profiler/libunwind/src/src/ia64/Gglobal.c
tools/profiler/libunwind/src/src/ia64/Ginit.c
tools/profiler/libunwind/src/src/ia64/Ginit_local.c
tools/profiler/libunwind/src/src/ia64/Ginit_remote.c
tools/profiler/libunwind/src/src/ia64/Ginstall_cursor.S
tools/profiler/libunwind/src/src/ia64/Gis_signal_frame.c
tools/profiler/libunwind/src/src/ia64/Gparser.c
tools/profiler/libunwind/src/src/ia64/Grbs.c
tools/profiler/libunwind/src/src/ia64/Gregs.c
tools/profiler/libunwind/src/src/ia64/Gresume.c
tools/profiler/libunwind/src/src/ia64/Gscript.c
tools/profiler/libunwind/src/src/ia64/Gstep.c
tools/profiler/libunwind/src/src/ia64/Gtables.c
tools/profiler/libunwind/src/src/ia64/Lcreate_addr_space.c
tools/profiler/libunwind/src/src/ia64/Lget_proc_info.c
tools/profiler/libunwind/src/src/ia64/Lget_save_loc.c
tools/profiler/libunwind/src/src/ia64/Lglobal.c
tools/profiler/libunwind/src/src/ia64/Linit.c
tools/profiler/libunwind/src/src/ia64/Linit_local.c
tools/profiler/libunwind/src/src/ia64/Linit_remote.c
tools/profiler/libunwind/src/src/ia64/Linstall_cursor.S
tools/profiler/libunwind/src/src/ia64/Lis_signal_frame.c
tools/profiler/libunwind/src/src/ia64/Lparser.c
tools/profiler/libunwind/src/src/ia64/Lrbs.c
tools/profiler/libunwind/src/src/ia64/Lregs.c
tools/profiler/libunwind/src/src/ia64/Lresume.c
tools/profiler/libunwind/src/src/ia64/Lscript.c
tools/profiler/libunwind/src/src/ia64/Lstep.c
tools/profiler/libunwind/src/src/ia64/Ltables.c
tools/profiler/libunwind/src/src/ia64/NOTES
tools/profiler/libunwind/src/src/ia64/dyn_info_list.S
tools/profiler/libunwind/src/src/ia64/getcontext.S
tools/profiler/libunwind/src/src/ia64/init.h
tools/profiler/libunwind/src/src/ia64/longjmp.S
tools/profiler/libunwind/src/src/ia64/mk_Gcursor_i.c
tools/profiler/libunwind/src/src/ia64/mk_Lcursor_i.c
tools/profiler/libunwind/src/src/ia64/offsets.h
tools/profiler/libunwind/src/src/ia64/regname.c
tools/profiler/libunwind/src/src/ia64/regs.h
tools/profiler/libunwind/src/src/ia64/setjmp.S
tools/profiler/libunwind/src/src/ia64/siglongjmp.S
tools/profiler/libunwind/src/src/ia64/sigsetjmp.S
tools/profiler/libunwind/src/src/ia64/ucontext_i.h
tools/profiler/libunwind/src/src/ia64/unwind_decoder.h
tools/profiler/libunwind/src/src/ia64/unwind_i.h
tools/profiler/libunwind/src/src/mi/Gdestroy_addr_space.c
tools/profiler/libunwind/src/src/mi/Gdyn-extract.c
tools/profiler/libunwind/src/src/mi/Gdyn-remote.c
tools/profiler/libunwind/src/src/mi/Gfind_dynamic_proc_info.c
tools/profiler/libunwind/src/src/mi/Gget_accessors.c
tools/profiler/libunwind/src/src/mi/Gget_fpreg.c
tools/profiler/libunwind/src/src/mi/Gget_proc_info_by_ip.c
tools/profiler/libunwind/src/src/mi/Gget_proc_name.c
tools/profiler/libunwind/src/src/mi/Gget_reg.c
tools/profiler/libunwind/src/src/mi/Gput_dynamic_unwind_info.c
tools/profiler/libunwind/src/src/mi/Gset_caching_policy.c
tools/profiler/libunwind/src/src/mi/Gset_fpreg.c
tools/profiler/libunwind/src/src/mi/Gset_reg.c
tools/profiler/libunwind/src/src/mi/Ldestroy_addr_space.c
tools/profiler/libunwind/src/src/mi/Ldyn-extract.c
tools/profiler/libunwind/src/src/mi/Ldyn-remote.c
tools/profiler/libunwind/src/src/mi/Lfind_dynamic_proc_info.c
tools/profiler/libunwind/src/src/mi/Lget_accessors.c
tools/profiler/libunwind/src/src/mi/Lget_fpreg.c
tools/profiler/libunwind/src/src/mi/Lget_proc_info_by_ip.c
tools/profiler/libunwind/src/src/mi/Lget_proc_name.c
tools/profiler/libunwind/src/src/mi/Lget_reg.c
tools/profiler/libunwind/src/src/mi/Lput_dynamic_unwind_info.c
tools/profiler/libunwind/src/src/mi/Lset_caching_policy.c
tools/profiler/libunwind/src/src/mi/Lset_fpreg.c
tools/profiler/libunwind/src/src/mi/Lset_reg.c
tools/profiler/libunwind/src/src/mi/_ReadSLEB.c
tools/profiler/libunwind/src/src/mi/_ReadULEB.c
tools/profiler/libunwind/src/src/mi/backtrace.c
tools/profiler/libunwind/src/src/mi/dyn-cancel.c
tools/profiler/libunwind/src/src/mi/dyn-info-list.c
tools/profiler/libunwind/src/src/mi/dyn-register.c
tools/profiler/libunwind/src/src/mi/flush_cache.c
tools/profiler/libunwind/src/src/mi/init.c
tools/profiler/libunwind/src/src/mi/mempool.c
tools/profiler/libunwind/src/src/mi/strerror.c
tools/profiler/libunwind/src/src/mips/Gcreate_addr_space.c
tools/profiler/libunwind/src/src/mips/Gget_proc_info.c
tools/profiler/libunwind/src/src/mips/Gget_save_loc.c
tools/profiler/libunwind/src/src/mips/Gglobal.c
tools/profiler/libunwind/src/src/mips/Ginit.c
tools/profiler/libunwind/src/src/mips/Ginit_local.c
tools/profiler/libunwind/src/src/mips/Ginit_remote.c
tools/profiler/libunwind/src/src/mips/Gis_signal_frame.c
tools/profiler/libunwind/src/src/mips/Gregs.c
tools/profiler/libunwind/src/src/mips/Gresume.c
tools/profiler/libunwind/src/src/mips/Gstep.c
tools/profiler/libunwind/src/src/mips/Lcreate_addr_space.c
tools/profiler/libunwind/src/src/mips/Lget_proc_info.c
tools/profiler/libunwind/src/src/mips/Lget_save_loc.c
tools/profiler/libunwind/src/src/mips/Lglobal.c
tools/profiler/libunwind/src/src/mips/Linit.c
tools/profiler/libunwind/src/src/mips/Linit_local.c
tools/profiler/libunwind/src/src/mips/Linit_remote.c
tools/profiler/libunwind/src/src/mips/Lis_signal_frame.c
tools/profiler/libunwind/src/src/mips/Lregs.c
tools/profiler/libunwind/src/src/mips/Lresume.c
tools/profiler/libunwind/src/src/mips/Lstep.c
tools/profiler/libunwind/src/src/mips/elfxx.c
tools/profiler/libunwind/src/src/mips/gen-offsets.c
tools/profiler/libunwind/src/src/mips/getcontext.S
tools/profiler/libunwind/src/src/mips/init.h
tools/profiler/libunwind/src/src/mips/is_fpreg.c
tools/profiler/libunwind/src/src/mips/offsets.h
tools/profiler/libunwind/src/src/mips/regname.c
tools/profiler/libunwind/src/src/mips/siglongjmp.S
tools/profiler/libunwind/src/src/mips/unwind_i.h
tools/profiler/libunwind/src/src/os-freebsd.c
tools/profiler/libunwind/src/src/os-hpux.c
tools/profiler/libunwind/src/src/os-linux.c
tools/profiler/libunwind/src/src/os-linux.h
tools/profiler/libunwind/src/src/ppc/Gcreate_addr_space.c
tools/profiler/libunwind/src/src/ppc/Gget_proc_info.c
tools/profiler/libunwind/src/src/ppc/Gget_save_loc.c
tools/profiler/libunwind/src/src/ppc/Ginit_local.c
tools/profiler/libunwind/src/src/ppc/Ginit_remote.c
tools/profiler/libunwind/src/src/ppc/Gis_signal_frame.c
tools/profiler/libunwind/src/src/ppc/Lcreate_addr_space.c
tools/profiler/libunwind/src/src/ppc/Lget_proc_info.c
tools/profiler/libunwind/src/src/ppc/Lget_save_loc.c
tools/profiler/libunwind/src/src/ppc/Linit_local.c
tools/profiler/libunwind/src/src/ppc/Linit_remote.c
tools/profiler/libunwind/src/src/ppc/Lis_signal_frame.c
tools/profiler/libunwind/src/src/ppc/longjmp.S
tools/profiler/libunwind/src/src/ppc/siglongjmp.S
tools/profiler/libunwind/src/src/ppc32/Gglobal.c
tools/profiler/libunwind/src/src/ppc32/Ginit.c
tools/profiler/libunwind/src/src/ppc32/Gregs.c
tools/profiler/libunwind/src/src/ppc32/Gresume.c
tools/profiler/libunwind/src/src/ppc32/Gstep.c
tools/profiler/libunwind/src/src/ppc32/Lglobal.c
tools/profiler/libunwind/src/src/ppc32/Linit.c
tools/profiler/libunwind/src/src/ppc32/Lregs.c
tools/profiler/libunwind/src/src/ppc32/Lresume.c
tools/profiler/libunwind/src/src/ppc32/Lstep.c
tools/profiler/libunwind/src/src/ppc32/Make-arch.in
tools/profiler/libunwind/src/src/ppc32/get_func_addr.c
tools/profiler/libunwind/src/src/ppc32/init.h
tools/profiler/libunwind/src/src/ppc32/is_fpreg.c
tools/profiler/libunwind/src/src/ppc32/regname.c
tools/profiler/libunwind/src/src/ppc32/setcontext.S
tools/profiler/libunwind/src/src/ppc32/ucontext_i.h
tools/profiler/libunwind/src/src/ppc32/unwind_i.h
tools/profiler/libunwind/src/src/ppc64/Gglobal.c
tools/profiler/libunwind/src/src/ppc64/Ginit.c
tools/profiler/libunwind/src/src/ppc64/Gregs.c
tools/profiler/libunwind/src/src/ppc64/Gresume.c
tools/profiler/libunwind/src/src/ppc64/Gstep.c
tools/profiler/libunwind/src/src/ppc64/Lglobal.c
tools/profiler/libunwind/src/src/ppc64/Linit.c
tools/profiler/libunwind/src/src/ppc64/Lregs.c
tools/profiler/libunwind/src/src/ppc64/Lresume.c
tools/profiler/libunwind/src/src/ppc64/Lstep.c
tools/profiler/libunwind/src/src/ppc64/get_func_addr.c
tools/profiler/libunwind/src/src/ppc64/init.h
tools/profiler/libunwind/src/src/ppc64/is_fpreg.c
tools/profiler/libunwind/src/src/ppc64/regname.c
tools/profiler/libunwind/src/src/ppc64/setcontext.S
tools/profiler/libunwind/src/src/ppc64/ucontext_i.h
tools/profiler/libunwind/src/src/ppc64/unwind_i.h
tools/profiler/libunwind/src/src/ptrace/_UPT_access_fpreg.c
tools/profiler/libunwind/src/src/ptrace/_UPT_access_mem.c
tools/profiler/libunwind/src/src/ptrace/_UPT_access_reg.c
tools/profiler/libunwind/src/src/ptrace/_UPT_accessors.c
tools/profiler/libunwind/src/src/ptrace/_UPT_create.c
tools/profiler/libunwind/src/src/ptrace/_UPT_destroy.c
tools/profiler/libunwind/src/src/ptrace/_UPT_elf.c
tools/profiler/libunwind/src/src/ptrace/_UPT_find_proc_info.c
tools/profiler/libunwind/src/src/ptrace/_UPT_get_dyn_info_list_addr.c
tools/profiler/libunwind/src/src/ptrace/_UPT_get_proc_name.c
tools/profiler/libunwind/src/src/ptrace/_UPT_internal.h
tools/profiler/libunwind/src/src/ptrace/_UPT_put_unwind_info.c
tools/profiler/libunwind/src/src/ptrace/_UPT_reg_offset.c
tools/profiler/libunwind/src/src/ptrace/_UPT_resume.c
tools/profiler/libunwind/src/src/setjmp/longjmp.c
tools/profiler/libunwind/src/src/setjmp/setjmp.c
tools/profiler/libunwind/src/src/setjmp/setjmp_i.h
tools/profiler/libunwind/src/src/setjmp/siglongjmp.c
tools/profiler/libunwind/src/src/setjmp/sigsetjmp.c
tools/profiler/libunwind/src/src/unwind/Backtrace.c
tools/profiler/libunwind/src/src/unwind/DeleteException.c
tools/profiler/libunwind/src/src/unwind/FindEnclosingFunction.c
tools/profiler/libunwind/src/src/unwind/ForcedUnwind.c
tools/profiler/libunwind/src/src/unwind/GetBSP.c
tools/profiler/libunwind/src/src/unwind/GetCFA.c
tools/profiler/libunwind/src/src/unwind/GetDataRelBase.c
tools/profiler/libunwind/src/src/unwind/GetGR.c
tools/profiler/libunwind/src/src/unwind/GetIP.c
tools/profiler/libunwind/src/src/unwind/GetIPInfo.c
tools/profiler/libunwind/src/src/unwind/GetLanguageSpecificData.c
tools/profiler/libunwind/src/src/unwind/GetRegionStart.c
tools/profiler/libunwind/src/src/unwind/GetTextRelBase.c
tools/profiler/libunwind/src/src/unwind/RaiseException.c
tools/profiler/libunwind/src/src/unwind/Resume.c
tools/profiler/libunwind/src/src/unwind/Resume_or_Rethrow.c
tools/profiler/libunwind/src/src/unwind/SetGR.c
tools/profiler/libunwind/src/src/unwind/SetIP.c
tools/profiler/libunwind/src/src/unwind/unwind-internal.h
tools/profiler/libunwind/src/src/x86/Gcreate_addr_space.c
tools/profiler/libunwind/src/src/x86/Gget_proc_info.c
tools/profiler/libunwind/src/src/x86/Gget_save_loc.c
tools/profiler/libunwind/src/src/x86/Gglobal.c
tools/profiler/libunwind/src/src/x86/Ginit.c
tools/profiler/libunwind/src/src/x86/Ginit_local.c
tools/profiler/libunwind/src/src/x86/Ginit_remote.c
tools/profiler/libunwind/src/src/x86/Gos-freebsd.c
tools/profiler/libunwind/src/src/x86/Gos-linux.c
tools/profiler/libunwind/src/src/x86/Gregs.c
tools/profiler/libunwind/src/src/x86/Gresume.c
tools/profiler/libunwind/src/src/x86/Gstep.c
tools/profiler/libunwind/src/src/x86/Lcreate_addr_space.c
tools/profiler/libunwind/src/src/x86/Lget_proc_info.c
tools/profiler/libunwind/src/src/x86/Lget_save_loc.c
tools/profiler/libunwind/src/src/x86/Lglobal.c
tools/profiler/libunwind/src/src/x86/Linit.c
tools/profiler/libunwind/src/src/x86/Linit_local.c
tools/profiler/libunwind/src/src/x86/Linit_remote.c
tools/profiler/libunwind/src/src/x86/Los-freebsd.c
tools/profiler/libunwind/src/src/x86/Los-linux.c
tools/profiler/libunwind/src/src/x86/Lregs.c
tools/profiler/libunwind/src/src/x86/Lresume.c
tools/profiler/libunwind/src/src/x86/Lstep.c
tools/profiler/libunwind/src/src/x86/getcontext-freebsd.S
tools/profiler/libunwind/src/src/x86/getcontext-linux.S
tools/profiler/libunwind/src/src/x86/init.h
tools/profiler/libunwind/src/src/x86/is_fpreg.c
tools/profiler/libunwind/src/src/x86/longjmp.S
tools/profiler/libunwind/src/src/x86/offsets.h
tools/profiler/libunwind/src/src/x86/regname.c
tools/profiler/libunwind/src/src/x86/siglongjmp.S
tools/profiler/libunwind/src/src/x86/unwind_i.h
tools/profiler/libunwind/src/src/x86_64/Gcreate_addr_space.c
tools/profiler/libunwind/src/src/x86_64/Gget_proc_info.c
tools/profiler/libunwind/src/src/x86_64/Gget_save_loc.c
tools/profiler/libunwind/src/src/x86_64/Gglobal.c
tools/profiler/libunwind/src/src/x86_64/Ginit.c
tools/profiler/libunwind/src/src/x86_64/Ginit_local.c
tools/profiler/libunwind/src/src/x86_64/Ginit_remote.c
tools/profiler/libunwind/src/src/x86_64/Gos-freebsd.c
tools/profiler/libunwind/src/src/x86_64/Gos-linux.c
tools/profiler/libunwind/src/src/x86_64/Gregs.c
tools/profiler/libunwind/src/src/x86_64/Gresume.c
tools/profiler/libunwind/src/src/x86_64/Gstash_frame.c
tools/profiler/libunwind/src/src/x86_64/Gstep.c
tools/profiler/libunwind/src/src/x86_64/Gtrace.c
tools/profiler/libunwind/src/src/x86_64/Lcreate_addr_space.c
tools/profiler/libunwind/src/src/x86_64/Lget_proc_info.c
tools/profiler/libunwind/src/src/x86_64/Lget_save_loc.c
tools/profiler/libunwind/src/src/x86_64/Lglobal.c
tools/profiler/libunwind/src/src/x86_64/Linit.c
tools/profiler/libunwind/src/src/x86_64/Linit_local.c
tools/profiler/libunwind/src/src/x86_64/Linit_remote.c
tools/profiler/libunwind/src/src/x86_64/Lis_signal_frame.c
tools/profiler/libunwind/src/src/x86_64/Los-freebsd.c
tools/profiler/libunwind/src/src/x86_64/Los-linux.c
tools/profiler/libunwind/src/src/x86_64/Lregs.c
tools/profiler/libunwind/src/src/x86_64/Lresume.c
tools/profiler/libunwind/src/src/x86_64/Lstash_frame.c
tools/profiler/libunwind/src/src/x86_64/Lstep.c
tools/profiler/libunwind/src/src/x86_64/Ltrace.c
tools/profiler/libunwind/src/src/x86_64/getcontext.S
tools/profiler/libunwind/src/src/x86_64/init.h
tools/profiler/libunwind/src/src/x86_64/is_fpreg.c
tools/profiler/libunwind/src/src/x86_64/longjmp.S
tools/profiler/libunwind/src/src/x86_64/offsets.h
tools/profiler/libunwind/src/src/x86_64/regname.c
tools/profiler/libunwind/src/src/x86_64/setcontext.S
tools/profiler/libunwind/src/src/x86_64/siglongjmp.S
tools/profiler/libunwind/src/src/x86_64/ucontext_i.h
tools/profiler/libunwind/src/src/x86_64/unwind_i.h
tools/profiler/libunwind/src/tests/Gia64-test-nat.c
tools/profiler/libunwind/src/tests/Gia64-test-rbs.c
tools/profiler/libunwind/src/tests/Gia64-test-readonly.c
tools/profiler/libunwind/src/tests/Gia64-test-stack.c
tools/profiler/libunwind/src/tests/Gperf-simple.c
tools/profiler/libunwind/src/tests/Gperf-trace.c
tools/profiler/libunwind/src/tests/Gtest-bt.c
tools/profiler/libunwind/src/tests/Gtest-concurrent.c
tools/profiler/libunwind/src/tests/Gtest-dyn1.c
tools/profiler/libunwind/src/tests/Gtest-exc.c
tools/profiler/libunwind/src/tests/Gtest-init.cxx
tools/profiler/libunwind/src/tests/Gtest-nocalloc.c
tools/profiler/libunwind/src/tests/Gtest-nomalloc.c
tools/profiler/libunwind/src/tests/Gtest-resume-sig.c
tools/profiler/libunwind/src/tests/Gtest-trace.c
tools/profiler/libunwind/src/tests/Lia64-test-nat.c
tools/profiler/libunwind/src/tests/Lia64-test-rbs.c
tools/profiler/libunwind/src/tests/Lia64-test-readonly.c
tools/profiler/libunwind/src/tests/Lia64-test-stack.c
tools/profiler/libunwind/src/tests/Lperf-simple.c
tools/profiler/libunwind/src/tests/Lperf-trace.c
tools/profiler/libunwind/src/tests/Ltest-bt.c
tools/profiler/libunwind/src/tests/Ltest-concurrent.c
tools/profiler/libunwind/src/tests/Ltest-cxx-exceptions.cxx
tools/profiler/libunwind/src/tests/Ltest-dyn1.c
tools/profiler/libunwind/src/tests/Ltest-exc.c
tools/profiler/libunwind/src/tests/Ltest-init.cxx
tools/profiler/libunwind/src/tests/Ltest-nocalloc.c
tools/profiler/libunwind/src/tests/Ltest-nomalloc.c
tools/profiler/libunwind/src/tests/Ltest-resume-sig.c
tools/profiler/libunwind/src/tests/Ltest-trace.c
tools/profiler/libunwind/src/tests/Makefile.am
tools/profiler/libunwind/src/tests/Makefile.in
tools/profiler/libunwind/src/tests/check-namespace.sh.in
tools/profiler/libunwind/src/tests/flush-cache.S
tools/profiler/libunwind/src/tests/forker.c
tools/profiler/libunwind/src/tests/ia64-dyn-asm.S
tools/profiler/libunwind/src/tests/ia64-test-dyn1.c
tools/profiler/libunwind/src/tests/ia64-test-nat-asm.S
tools/profiler/libunwind/src/tests/ia64-test-rbs-asm.S
tools/profiler/libunwind/src/tests/ia64-test-rbs.h
tools/profiler/libunwind/src/tests/ia64-test-readonly-asm.S
tools/profiler/libunwind/src/tests/ia64-test-setjmp.c
tools/profiler/libunwind/src/tests/ia64-test-sig.c
tools/profiler/libunwind/src/tests/ia64-test-stack-asm.S
tools/profiler/libunwind/src/tests/ia64-test-stack.h
tools/profiler/libunwind/src/tests/ident.c
tools/profiler/libunwind/src/tests/mapper.c
tools/profiler/libunwind/src/tests/perf-startup
tools/profiler/libunwind/src/tests/ppc64-test-altivec-utils.c
tools/profiler/libunwind/src/tests/ppc64-test-altivec.c
tools/profiler/libunwind/src/tests/ppc64-test-wchar.c
tools/profiler/libunwind/src/tests/rs-race.c
tools/profiler/libunwind/src/tests/run-check-namespace
tools/profiler/libunwind/src/tests/run-ia64-test-dyn1
tools/profiler/libunwind/src/tests/run-ptrace-mapper
tools/profiler/libunwind/src/tests/run-ptrace-misc
tools/profiler/libunwind/src/tests/test-async-sig.c
tools/profiler/libunwind/src/tests/test-flush-cache.c
tools/profiler/libunwind/src/tests/test-init-remote.c
tools/profiler/libunwind/src/tests/test-mem.c
tools/profiler/libunwind/src/tests/test-proc-info.c
tools/profiler/libunwind/src/tests/test-ptrace-misc.c
tools/profiler/libunwind/src/tests/test-ptrace.c
tools/profiler/libunwind/src/tests/test-setjmp.c
tools/profiler/libunwind/src/tests/test-static-link-gen.c
tools/profiler/libunwind/src/tests/test-static-link-loc.c
tools/profiler/libunwind/src/tests/test-strerror.c
tools/profiler/libunwind/src/tests/test-varargs.c
tools/profiler/libunwind/update.sh
tools/profiler/libunwind/upstream.info
tools/rb/fix-macosx-stack.pl
rename from build/.gdbinit
rename to .gdbinit
--- a/accessible/src/base/AccTypes.h
+++ b/accessible/src/base/AccTypes.h
@@ -8,37 +8,37 @@
 
 namespace mozilla {
 namespace a11y {
 
 /**
  * Accessible object types used when creating an accessible based on the frame.
  */
 enum AccType {
-  eNoAccessible,
-  eHTMLBRAccessible,
-  eHTMLButtonAccessible,
-  eHTMLCanvasAccessible,
-  eHTMLCaptionAccessible,
-  eHTMLCheckboxAccessible,
-  eHTMLComboboxAccessible,
-  eHTMLFileInputAccessible,
-  eHTMLGroupboxAccessible,
-  eHTMLHRAccessible,
-  eHTMLImageMapAccessible,
-  eHTMLLabelAccessible,
-  eHTMLLiAccessible,
-  eHTMLSelectListAccessible,
-  eHTMLMediaAccessible,
-  eHTMLObjectFrameAccessible,
-  eHTMLRadioButtonAccessible,
-  eHTMLTableAccessible,
-  eHTMLTableCellAccessible,
-  eHTMLTableRowAccessible,
-  eHTMLTextFieldAccessible,
-  eHyperTextAccessible,
-  eImageAccessible,
-  eOuterDocAccessible,
-  eTextLeafAccessible
+  eNoType,
+  eHTMLBR,
+  eHTMLButton,
+  eHTMLCanvas,
+  eHTMLCaption,
+  eHTMLCheckbox,
+  eHTMLCombobox,
+  eHTMLFileInput,
+  eHTMLGroupbox,
+  eHTMLHR,
+  eHTMLImageMap,
+  eHTMLLabel,
+  eHTMLLi,
+  eHTMLSelectList,
+  eHTMLMedia,
+  eHTMLRadioButton,
+  eHTMLTable,
+  eHTMLTableCell,
+  eHTMLTableRow,
+  eHTMLTextField,
+  eHyperText,
+  eImage,
+  eOuterDoc,
+  ePlugin,
+  eTextLeaf
 };
 }
 }
 
--- a/accessible/src/base/nsAccessibilityService.cpp
+++ b/accessible/src/base/nsAccessibilityService.cpp
@@ -202,19 +202,19 @@ nsAccessibilityService::GetRootDocumentA
       return aCanCreate ?
         GetDocAccessible(documentNode) : GetDocAccessibleFromCache(documentNode);
     }
   }
   return nullptr;
 }
 
 already_AddRefed<Accessible>
-nsAccessibilityService::CreateHTMLObjectFrameAccessible(nsObjectFrame* aFrame,
-                                                        nsIContent* aContent,
-                                                        Accessible* aContext)
+nsAccessibilityService::CreatePluginAccessible(nsObjectFrame* aFrame,
+                                               nsIContent* aContent,
+                                               Accessible* aContext)
 {
   // nsObjectFrame means a plugin, so we need to use the accessibility support
   // of the plugin.
   if (aFrame->GetRect().IsEmpty())
     return nullptr;
 
 #if defined(XP_WIN) || defined(MOZ_ACCESSIBILITY_ATK)
   nsRefPtr<nsNPAPIPluginInstance> pluginInstance;
@@ -794,53 +794,53 @@ nsAccessibilityService::GetOrCreateAcces
   }
 
   if (!newAcc && isHTML) {  // HTML accessibles
     if (roleMapEntry) {
       // Create pure ARIA grid/treegrid related accessibles if they weren't used
       // on accessible HTML table elements.
       if ((roleMapEntry->accTypes & Accessible::eTableCellAccessible)) {
         if (aContext->IsOfType(Accessible::eTableRowAccessible) &&
-            (frame->AccessibleType() != eHTMLTableCellAccessible ||
+            (frame->AccessibleType() != eHTMLTableCell ||
              aContext->GetContent() != content->GetParent())) {
           newAcc = new ARIAGridCellAccessibleWrap(content, document);
         }
 
       } else if ((roleMapEntry->accTypes & Accessible::eTableAccessible) &&
-                 frame->AccessibleType() != eHTMLTableAccessible) {
+                 frame->AccessibleType() != eHTMLTable) {
         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) {
-        if (frame->AccessibleType() == eHTMLTableRowAccessible) {
+        if (frame->AccessibleType() == eHTMLTableRow) {
           nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
           if (contextRoleMap &&
               !(contextRoleMap->accTypes & Accessible::eTableAccessible))
             roleMapEntry = &nsARIAMap::gEmptyRoleMap;
 
-        } else if (frame->AccessibleType() == eHTMLTableCellAccessible &&
+        } else if (frame->AccessibleType() == eHTMLTableCell &&
                    aContext->ARIARoleMap() == &nsARIAMap::gEmptyRoleMap) {
           roleMapEntry = &nsARIAMap::gEmptyRoleMap;
 
         } else if (content->Tag() == nsGkAtoms::dt ||
                    content->Tag() == nsGkAtoms::li ||
                    content->Tag() == nsGkAtoms::dd ||
-                   frame->AccessibleType() == eHTMLLiAccessible) {
+                   frame->AccessibleType() == eHTMLLi) {
           nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
           if (contextRoleMap &&
               !(contextRoleMap->accTypes & Accessible::eListAccessible))
             roleMapEntry = &nsARIAMap::gEmptyRoleMap;
         }
       }
     }
   }
@@ -1301,85 +1301,79 @@ already_AddRefed<Accessible>
 nsAccessibilityService::CreateAccessibleByFrameType(nsIFrame* aFrame,
                                                     nsIContent* aContent,
                                                     Accessible* aContext)
 {
   DocAccessible* document = aContext->Document();
 
   nsRefPtr<Accessible> newAcc;
   switch (aFrame->AccessibleType()) {
-    case eNoAccessible:
+    case eNoType:
       return nullptr;
-    case eHTMLBRAccessible:
+    case eHTMLBR:
       newAcc = new HTMLBRAccessible(aContent, document);
       break;
-    case eHTMLButtonAccessible:
+    case eHTMLButton:
       newAcc = new HTMLButtonAccessible(aContent, document);
       break;
-    case eHTMLCanvasAccessible:
+    case eHTMLCanvas:
       newAcc = new HTMLCanvasAccessible(aContent, document);
       break;
-    case eHTMLCaptionAccessible:
+    case eHTMLCaption:
       if (aContext->IsOfType(Accessible::eTableAccessible) &&
           aContext->GetContent() == aContent->GetParent()) {
         newAcc = new HTMLCaptionAccessible(aContent, document);
       }
       break;
-    case eHTMLCheckboxAccessible:
+    case eHTMLCheckbox:
       newAcc = new HTMLCheckboxAccessible(aContent, document);
       break;
-    case eHTMLComboboxAccessible:
+    case eHTMLCombobox:
       newAcc = new HTMLComboboxAccessible(aContent, document);
       break;
-    case eHTMLFileInputAccessible:
+    case eHTMLFileInput:
       newAcc = new HTMLFileInputAccessible(aContent, document);
       break;
-    case eHTMLGroupboxAccessible:
+    case eHTMLGroupbox:
       newAcc = new HTMLGroupboxAccessible(aContent, document);
       break;
-    case eHTMLHRAccessible:
+    case eHTMLHR:
       newAcc = new HTMLHRAccessible(aContent, document);
       break;
-    case eHTMLImageMapAccessible:
+    case eHTMLImageMap:
       newAcc = new HTMLImageMapAccessible(aContent, document);
       break;
-    case eHTMLLabelAccessible:
+    case eHTMLLabel:
       newAcc = new HTMLLabelAccessible(aContent, document);
       break;
-    case eHTMLLiAccessible:
+    case eHTMLLi:
       if (aContext->IsOfType(Accessible::eListAccessible) &&
           aContext->GetContent() == aContent->GetParent()) {
         newAcc = new HTMLLIAccessible(aContent, document);
       }
       break;
-    case eHTMLSelectListAccessible:
+    case eHTMLSelectList:
       newAcc = new HTMLSelectListAccessible(aContent, document);
       break;
-    case eHTMLMediaAccessible:
+    case eHTMLMedia:
       newAcc = new EnumRoleAccessible(aContent, document, roles::GROUPING);
       break;
-    case eHTMLObjectFrameAccessible: {
-      nsObjectFrame* objectFrame = do_QueryFrame(aFrame);
-      newAcc = CreateHTMLObjectFrameAccessible(objectFrame, aContent, aContext);
-      break;
-    }
-
-    case eHTMLRadioButtonAccessible:
+    case eHTMLRadioButton:
       newAcc = new HTMLRadioButtonAccessible(aContent, document);
       break;
-    case eHTMLTableAccessible:
+    case eHTMLTable:
       newAcc = new HTMLTableAccessibleWrap(aContent, document);
       break;
-    case eHTMLTableCellAccessible:
+    case eHTMLTableCell:
       // Accessible HTML table cell must be a child of accessible HTML table row.
       if (aContext->IsOfType(Accessible::eHTMLTableRowAccessible))
         newAcc = new HTMLTableCellAccessibleWrap(aContent, document);
       break;
 
-    case eHTMLTableRowAccessible: {
+    case eHTMLTableRow: {
       // Accessible HTML table row must be a child of tbody/tfoot/thead of
       // accessible HTML table or must be a child of accessible of HTML table.
       if (aContext->IsOfType(Accessible::eTableAccessible)) {
         nsIContent* parentContent = aContent->GetParent();
         nsIFrame* parentFrame = parentContent->GetPrimaryFrame();
         if (parentFrame->GetType() == nsGkAtoms::tableRowGroupFrame) {
           parentContent = parentContent->GetParent();
           parentFrame = parentContent->GetPrimaryFrame();
@@ -1387,31 +1381,36 @@ nsAccessibilityService::CreateAccessible
 
         if (parentFrame->GetType() == nsGkAtoms::tableOuterFrame &&
             aContext->GetContent() == parentContent) {
           newAcc = new HTMLTableRowAccessible(aContent, document);
         }
       }
       break;
     }
-    case eHTMLTextFieldAccessible:
+    case eHTMLTextField:
       newAcc = new HTMLTextFieldAccessible(aContent, document);
       break;
-    case eHyperTextAccessible:
+    case eHyperText:
       if (aContent->Tag() != nsGkAtoms::dt && aContent->Tag() != nsGkAtoms::dd)
         newAcc = new HyperTextAccessibleWrap(aContent, document);
       break;
 
-    case eImageAccessible:
+    case eImage:
       newAcc = new ImageAccessibleWrap(aContent, document);
       break;
-    case eOuterDocAccessible:
+    case eOuterDoc:
       newAcc = new OuterDocAccessible(aContent, document);
       break;
-    case eTextLeafAccessible:
+    case ePlugin: {
+      nsObjectFrame* objectFrame = do_QueryFrame(aFrame);
+      newAcc = CreatePluginAccessible(objectFrame, aContent, aContext);
+      break;
+    }
+    case eTextLeaf:
       newAcc = new TextLeafAccessibleWrap(aContent, document);
       break;
   }
 
   return newAcc.forget();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
--- a/accessible/src/base/nsAccessibilityService.h
+++ b/accessible/src/base/nsAccessibilityService.h
@@ -49,18 +49,18 @@ public:
   NS_DECL_ISUPPORTS_INHERITED
   NS_DECL_NSIACCESSIBLERETRIEVAL
   NS_DECL_NSIOBSERVER
 
   // nsIAccessibilityService
   virtual Accessible* GetRootDocumentAccessible(nsIPresShell* aPresShell,
                                                 bool aCanCreate);
   already_AddRefed<Accessible>
-    CreateHTMLObjectFrameAccessible(nsObjectFrame* aFrame, nsIContent* aContent,
-                                    Accessible* aContext);
+    CreatePluginAccessible(nsObjectFrame* aFrame, nsIContent* aContent,
+                           Accessible* aContext);
 
   /**
    * Adds/remove ATK root accessible for gtk+ native window to/from children
    * of the application accessible.
    */
   virtual Accessible* AddNativeRootAccessible(void* aAtkAccessible);
   virtual void RemoveNativeRootAccessible(Accessible* aRootAccessible);
 
--- a/accessible/src/generic/Accessible-inl.h
+++ b/accessible/src/generic/Accessible-inl.h
@@ -37,17 +37,17 @@ Accessible::SetRoleMapEntry(nsRoleMapEnt
   mRoleMapEntry = aRoleMapEntry;
   if (mRoleMapEntry)
     mFlags |= mRoleMapEntry->accTypes;
 }
 
 inline bool
 Accessible::HasNumericValue() const
 {
-  if (mFlags & eHasNumericValue)
+  if (mStateFlags & eHasNumericValue)
     return true;
 
   return mRoleMapEntry && mRoleMapEntry->valueRule != eNoValue;
 }
 
 } // namespace a11y
 } // namespace mozilla
 
--- a/accessible/src/generic/Accessible.cpp
+++ b/accessible/src/generic/Accessible.cpp
@@ -140,18 +140,18 @@ Accessible::QueryInterface(REFNSIID aIID
     return NS_ERROR_NO_INTERFACE;
   }
 
   return nsAccessNodeWrap::QueryInterface(aIID, aInstancePtr);
 }
 
 Accessible::Accessible(nsIContent* aContent, DocAccessible* aDoc) :
   nsAccessNodeWrap(aContent, aDoc),
-  mParent(nullptr), mIndexInParent(-1), mFlags(eChildrenUninitialized),
-  mIndexOfEmbeddedChild(-1), mRoleMapEntry(nullptr)
+  mParent(nullptr), mIndexInParent(-1), mChildrenFlags(eChildrenUninitialized),
+  mStateFlags(0), mFlags(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);
@@ -2425,17 +2425,17 @@ Accessible::AppendTextTo(nsAString& aTex
 ////////////////////////////////////////////////////////////////////////////////
 // nsAccessNode public methods
 
 void
 Accessible::Shutdown()
 {
   // Mark the accessible as defunct, invalidate the child count and pointers to 
   // other accessibles, also make sure none of its children point to this parent
-  mFlags |= eIsDefunct;
+  mStateFlags |= eIsDefunct;
 
   InvalidateChildren();
   if (mParent)
     mParent->RemoveChild(this);
 
   nsAccessNodeWrap::Shutdown();
 }
 
--- a/accessible/src/generic/Accessible.h
+++ b/accessible/src/generic/Accessible.h
@@ -673,33 +673,34 @@ public:
   /**
    * Return the localized string for the given key.
    */
   static void TranslateString(const nsString& aKey, nsAString& aStringOut);
 
   /**
    * Return true if the accessible is defunct.
    */
-  bool IsDefunct() const { return mFlags & eIsDefunct; }
+  bool IsDefunct() const { return mStateFlags & eIsDefunct; }
 
   /**
    * Return true if the accessible is no longer in the document.
    */
-  bool IsInDocument() const { return !(mFlags & eIsNotInDocument); }
+  bool IsInDocument() const { return !(mStateFlags & eIsNotInDocument); }
 
   /**
    * Return true if the accessible should be contained by document node map.
    */
   bool IsNodeMapEntry() const
-    { return HasOwnContent() && !(mFlags & eNotNodeMapEntry); }
+    { return HasOwnContent() && !(mStateFlags & eNotNodeMapEntry); }
 
   /**
    * Return true if the accessible has associated DOM content.
    */
-  bool HasOwnContent() const { return mContent && !(mFlags & eSharedNode); }
+  bool HasOwnContent() const
+    { return mContent && !(mStateFlags & eSharedNode); }
 
   /**
    * Return true if accessible is of given type.
    */
   bool IsOfType(uint32_t aType) const { return mFlags & aType; }
 
   /**
   * Return true if the accessible has a numeric value.
@@ -747,67 +748,66 @@ protected:
     eChildrenUninitialized = 0, // children aren't initialized
     eMixedChildren = 1 << 0, // text leaf children are presented
     eEmbeddedChildren = 1 << 1 // all children are embedded objects
   };
 
   /**
    * Return true if the children flag is set.
    */
-  inline bool IsChildrenFlag(ChildrenFlags aFlag) const
-    { return static_cast<ChildrenFlags> (mFlags & kChildrenFlagsMask) == aFlag; }
+  bool IsChildrenFlag(ChildrenFlags aFlag) const
+    { return static_cast<ChildrenFlags>(mChildrenFlags) == aFlag; }
 
   /**
    * Set children flag.
    */
-  inline void SetChildrenFlag(ChildrenFlags aFlag)
-    { mFlags = (mFlags & ~kChildrenFlagsMask) | aFlag; }
+  void SetChildrenFlag(ChildrenFlags aFlag) { mChildrenFlags = aFlag; }
 
   /**
    * Flags used to describe the state of this accessible.
    * @note keep these flags in sync with ChildrenFlags
    */
   enum StateFlags {
-    eIsDefunct = 1 << 2, // accessible is defunct
-    eIsNotInDocument = 1 << 3, // accessible is not in document
-    eSharedNode = 1 << 4, // accessible shares DOM node from another accessible
-    eNotNodeMapEntry = 1 << 5, // accessible shouldn't be in document node map
-    eHasNumericValue = 1 << 6 // accessible has a numeric value
+    eIsDefunct = 1 << 0, // accessible is defunct
+    eIsNotInDocument = 1 << 1, // accessible is not in document
+    eSharedNode = 1 << 2, // accessible shares DOM node from another accessible
+    eNotNodeMapEntry = 1 << 3, // accessible shouldn't be in document node map
+    eHasNumericValue = 1 << 4 // accessible has a numeric value
   };
 
 public: // XXX: a small hack to make these visible for nsARIAMap
   /**
    * Flags describing the type of this accessible.
    * @note keep these flags in sync with ChildrenFlags and StateFlags
    */
   enum AccessibleTypes {
-    eApplicationAccessible = 1 << 7,
-    eAutoCompleteAccessible = 1 << 8,
-    eAutoCompletePopupAccessible = 1 << 9,
-    eComboboxAccessible = 1 << 10,
-    eDocAccessible = 1 << 11,
-    eHyperTextAccessible = 1 << 12,
-    eHTMLFileInputAccessible = 1 << 13,
-    eHTMLListItemAccessible = 1 << 14,
-    eHTMLTableRowAccessible = 1 << 15,
-    eImageAccessible = 1 << 16,
-    eImageMapAccessible = 1 << 17,
-    eListAccessible = 1 << 18,
-    eListControlAccessible = 1 << 19,
-    eMenuButtonAccessible = 1 << 20,
-    eMenuPopupAccessible = 1 << 21,
-    eProgressAccessible = 1 << 22,
-    eRootAccessible = 1 << 23,
-    eSelectAccessible = 1 << 24,
-    eTableAccessible = 1 << 25,
-    eTableCellAccessible = 1 << 26,
-    eTableRowAccessible = 1 << 27,
-    eTextLeafAccessible = 1 << 28,
-    eXULDeckAccessible = 1 << 29,
-    eXULTreeAccessible = 1 << 30
+    eApplicationAccessible = 1 << 0,
+    eAutoCompleteAccessible = 1 << 1,
+    eAutoCompletePopupAccessible = 1 << 2,
+    eComboboxAccessible = 1 << 3,
+    eDocAccessible = 1 << 4,
+    eHyperTextAccessible = 1 << 5,
+    eHTMLFileInputAccessible = 1 << 6,
+    eHTMLListItemAccessible = 1 << 7,
+    eHTMLTableRowAccessible = 1 << 8,
+    eImageAccessible = 1 << 9,
+    eImageMapAccessible = 1 << 10,
+    eListAccessible = 1 << 11,
+    eListControlAccessible = 1 << 12,
+    eMenuButtonAccessible = 1 << 13,
+    eMenuPopupAccessible = 1 << 14,
+    eProgressAccessible = 1 << 15,
+    eRootAccessible = 1 << 16,
+    eSelectAccessible = 1 << 17,
+    eTableAccessible = 1 << 18,
+    eTableCellAccessible = 1 << 19,
+    eTableRowAccessible = 1 << 20,
+    eTextLeafAccessible = 1 << 21,
+    eXULDeckAccessible = 1 << 22,
+    eXULTreeAccessible = 1 << 23
   };
 
 protected:
 
   //////////////////////////////////////////////////////////////////////////////
   // Miscellaneous helpers
 
   /**
@@ -904,20 +904,23 @@ protected:
    */
   virtual nsresult FirePlatformEvent(AccEvent* aEvent) = 0;
 
   // Data Members
   nsRefPtr<Accessible> mParent;
   nsTArray<nsRefPtr<Accessible> > mChildren;
   int32_t mIndexInParent;
 
-  static const uint32_t kChildrenFlagsMask =
-    eChildrenUninitialized | eMixedChildren | eEmbeddedChildren;
+  /**
+   * Keep in sync with ChildrenFlags, StateFlags and AccessibleTypes.
+   */
+  uint32_t mChildrenFlags : 2;
+  uint32_t mStateFlags : 5;
+  uint32_t mFlags : 25;
 
-  uint32_t mFlags;
   friend class DocAccessible;
 
   nsAutoPtr<mozilla::a11y::EmbeddedObjCollector> mEmbeddedObjCollector;
   int32_t mIndexOfEmbeddedChild;
   friend class EmbeddedObjCollector;
 
   nsAutoPtr<AccGroupInfo> mGroupInfo;
   friend class AccGroupInfo;
--- a/accessible/src/generic/DocAccessible.cpp
+++ b/accessible/src/generic/DocAccessible.cpp
@@ -74,17 +74,19 @@ DocAccessible::
   DocAccessible(nsIDocument* aDocument, nsIContent* aRootContent,
                   nsIPresShell* aPresShell) :
   HyperTextAccessibleWrap(aRootContent, this),
   mDocumentNode(aDocument), mScrollPositionChangedTicks(0),
   mLoadState(eTreeConstructionPending), mLoadEventType(0),
   mVirtualCursor(nullptr),
   mPresShell(aPresShell)
 {
-  mFlags |= eDocAccessible | eNotNodeMapEntry;
+  mFlags |= eDocAccessible;
+  mStateFlags |= eNotNodeMapEntry;
+
   MOZ_ASSERT(mPresShell, "should have been given a pres shell");
   mPresShell->SetDocAccessible(this);
 
   mDependentIDsHash.Init();
   // XXX aaronl should we use an algorithm for the initial cache size?
   mAccessibleCache.Init(kDefaultCacheSize);
   mNodeToAccessibleMap.Init(kDefaultCacheSize);
 
@@ -608,17 +610,17 @@ DocAccessible::Shutdown()
     mNotificationController = nullptr;
   }
 
   RemoveEventListeners();
 
   // Mark the document as shutdown before AT is notified about the document
   // removal from its container (valid for root documents on ATK and due to
   // some reason for MSAA, refer to bug 757392 for details).
-  mFlags |= eIsDefunct;
+  mStateFlags |= eIsDefunct;
   nsCOMPtr<nsIDocument> kungFuDeathGripDoc = mDocumentNode;
   mDocumentNode = nullptr;
 
   if (mParent) {
     DocAccessible* parentDocument = mParent->Document();
     if (parentDocument)
       parentDocument->RemoveChildDocument(this);
 
@@ -1936,17 +1938,17 @@ DocAccessible::CacheChildrenInSubtree(Ac
     if (role == roles::DIALOG || role == roles::DOCUMENT)
       FireDelayedEvent(nsIAccessibleEvent::EVENT_DOCUMENT_LOAD_COMPLETE, aRoot);
   }
 }
 
 void
 DocAccessible::UncacheChildrenInSubtree(Accessible* aRoot)
 {
-  aRoot->mFlags |= eIsNotInDocument;
+  aRoot->mStateFlags |= eIsNotInDocument;
 
   if (aRoot->IsElement())
     RemoveDependentIDsFor(aRoot);
 
   uint32_t count = aRoot->ContentChildCount();
   for (uint32_t idx = 0; idx < count; idx++)
     UncacheChildrenInSubtree(aRoot->ContentChildAt(idx));
 
--- a/accessible/src/generic/FormControlAccessible.h
+++ b/accessible/src/generic/FormControlAccessible.h
@@ -16,17 +16,18 @@ namespace a11y {
   */
 template<int Max>
 class ProgressMeterAccessible : public LeafAccessible
 {
 public:
   ProgressMeterAccessible(nsIContent* aContent, DocAccessible* aDoc) :
     LeafAccessible(aContent, aDoc)
   {
-    mFlags |= eHasNumericValue | eProgressAccessible;
+    mStateFlags |= eHasNumericValue;
+    mFlags |= eProgressAccessible;
   }
 
   NS_DECL_ISUPPORTS_INHERITED
   NS_DECL_NSIACCESSIBLEVALUE
 
   // Accessible
   virtual void Value(nsString& aValue);
   virtual mozilla::a11y::role NativeRole();
--- a/accessible/src/html/HTMLImageMapAccessible.cpp
+++ b/accessible/src/html/HTMLImageMapAccessible.cpp
@@ -148,17 +148,17 @@ HTMLImageMapAccessible::CacheChildren()
 ////////////////////////////////////////////////////////////////////////////////
 
 HTMLAreaAccessible::
   HTMLAreaAccessible(nsIContent* aContent, DocAccessible* aDoc) :
   HTMLLinkAccessible(aContent, aDoc)
 {
   // Make HTML area DOM element not accessible. HTML image map accessible
   // manages its tree itself.
-  mFlags |= eNotNodeMapEntry;
+  mStateFlags |= eNotNodeMapEntry;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // HTMLAreaAccessible: nsIAccessible
 
 ENameValueFlag
 HTMLAreaAccessible::NativeName(nsString& aName)
 {
--- a/accessible/src/html/HTMLListAccessible.cpp
+++ b/accessible/src/html/HTMLListAccessible.cpp
@@ -140,17 +140,17 @@ HTMLLIAccessible::CacheChildren()
 
 ////////////////////////////////////////////////////////////////////////////////
 // HTMLListBulletAccessible
 ////////////////////////////////////////////////////////////////////////////////
 HTMLListBulletAccessible::
   HTMLListBulletAccessible(nsIContent* aContent, DocAccessible* aDoc) :
   LeafAccessible(aContent, aDoc)
 {
-  mFlags |= eSharedNode;
+  mStateFlags |= eSharedNode;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // HTMLListBulletAccessible: nsAccessNode
 
 nsIFrame*
 HTMLListBulletAccessible::GetFrame() const
 {
--- a/accessible/src/html/HTMLSelectAccessible.cpp
+++ b/accessible/src/html/HTMLSelectAccessible.cpp
@@ -615,17 +615,17 @@ HTMLComboboxAccessible::SelectedOption()
 // HTMLComboboxListAccessible
 ////////////////////////////////////////////////////////////////////////////////
 
 HTMLComboboxListAccessible::
   HTMLComboboxListAccessible(nsIAccessible* aParent, nsIContent* aContent,
                              DocAccessible* aDoc) :
   HTMLSelectListAccessible(aContent, aDoc)
 {
-  mFlags |= eSharedNode;
+  mStateFlags |= eSharedNode;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // HTMLComboboxAccessible: nsAccessNode
 
 nsIFrame*
 HTMLComboboxListAccessible::GetFrame() const
 {
--- a/accessible/src/html/HTMLTableAccessible.cpp
+++ b/accessible/src/html/HTMLTableAccessible.cpp
@@ -25,22 +25,23 @@
 #include "nsIDOMHTMLCollection.h"
 #include "nsIDOMHTMLTableCellElement.h"
 #include "nsIDOMHTMLTableElement.h"
 #include "nsIDOMHTMLTableRowElement.h"
 #include "nsIDOMHTMLTableSectionElem.h"
 #include "nsIDocument.h"
 #include "nsIMutableArray.h"
 #include "nsIPresShell.h"
-#include "nsITableLayout.h"
 #include "nsITableCellLayout.h"
 #include "nsFrameSelection.h"
 #include "nsError.h"
 #include "nsArrayUtils.h"
 #include "nsComponentManagerUtils.h"
+#include "nsTableCellFrame.h"
+#include "nsTableOuterFrame.h"
 
 using namespace mozilla;
 using namespace mozilla::a11y;
 
 ////////////////////////////////////////////////////////////////////////////////
 // HTMLTableCellAccessible
 ////////////////////////////////////////////////////////////////////////////////
 
@@ -116,19 +117,21 @@ HTMLTableCellAccessible::NativeAttribute
   // abbr attribute
 
   // Pick up object attribute from abbr DOM element (a child of the cell) or
   // from abbr DOM attribute.
   nsAutoString abbrText;
   if (ChildCount() == 1) {
     Accessible* abbr = FirstChild();
     if (abbr->IsAbbreviation()) {
-      nsTextEquivUtils::
-        AppendTextEquivFromTextContent(abbr->GetContent()->GetFirstChild(),
-                                       &abbrText);
+      nsIContent* firstChildNode = abbr->GetContent()->GetFirstChild();
+      if (firstChildNode) {
+        nsTextEquivUtils::
+          AppendTextEquivFromTextContent(firstChildNode, &abbrText);
+      }
     }
   }
   if (abbrText.IsEmpty())
     mContent->GetAttr(kNameSpaceID_None, nsGkAtoms::abbr, abbrText);
 
   if (!abbrText.IsEmpty())
     nsAccUtils::SetAccAttr(attributes, nsGkAtoms::abbr, abbrText);
 
@@ -464,62 +467,45 @@ HTMLTableAccessible::Summary(nsString& a
 
   if (table)
     table->GetSummary(aSummary);
 }
 
 uint32_t
 HTMLTableAccessible::ColCount()
 {
-  nsITableLayout* tableLayout = GetTableLayout();
-  if (!tableLayout)
-    return 0;
-
-  int32_t rowCount = 0, colCount = 0;
-  tableLayout->GetTableSize(rowCount, colCount);
-  return colCount;
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  return tableFrame ? tableFrame->GetColCount() : 0;
 }
 
 uint32_t
 HTMLTableAccessible::RowCount()
 {
-  nsITableLayout* tableLayout = GetTableLayout();
-  if (!tableLayout)
-    return 0;
-
-  int32_t rowCount = 0, colCount = 0;
-  tableLayout->GetTableSize(rowCount, colCount);
-  return rowCount;
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  return tableFrame ? tableFrame->GetRowCount() : 0;
 }
 
 uint32_t
 HTMLTableAccessible::SelectedCellCount()
 {
-  nsITableLayout *tableLayout = GetTableLayout();
-  if (!tableLayout)
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
     return 0;
 
   uint32_t count = 0, rowCount = RowCount(), colCount = ColCount();
-
-  nsCOMPtr<nsIDOMElement> domElement;
-  int32_t startRowIndex = 0, startColIndex = 0,
-    rowSpan, colSpan, actualRowSpan, actualColSpan;
-  bool isSelected = false;
-
   for (uint32_t rowIdx = 0; rowIdx < rowCount; rowIdx++) {
     for (uint32_t colIdx = 0; colIdx < colCount; colIdx++) {
-      nsresult rv = tableLayout->GetCellDataAt(rowIdx, colIdx,
-                                               *getter_AddRefs(domElement),
-                                               startRowIndex, startColIndex,
-                                               rowSpan, colSpan,
-                                               actualRowSpan, actualColSpan,
-                                               isSelected);
+      nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(rowIdx, colIdx);
+      if (!cellFrame || !cellFrame->IsSelected())
+        continue;
 
-      if (NS_SUCCEEDED(rv) && startRowIndex == rowIdx &&
-          startColIndex == colIdx && isSelected)
+      int32_t startRow = -1, startCol = -1;
+      cellFrame->GetRowIndex(startRow);
+      cellFrame->GetColIndex(startCol);
+      if (startRow == rowIdx && startCol == colIdx)
         count++;
     }
   }
 
   return count;
 }
 
 uint32_t
@@ -544,71 +530,57 @@ HTMLTableAccessible::SelectedRowCount()
       count++;
 
   return count;
 }
 
 void
 HTMLTableAccessible::SelectedCells(nsTArray<Accessible*>* aCells)
 {
-  uint32_t rowCount = RowCount(), colCount = ColCount();
-
-  nsITableLayout *tableLayout = GetTableLayout();
-  if (!tableLayout) 
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
     return;
 
-  nsCOMPtr<nsIDOMElement> cellElement;
-  int32_t startRowIndex = 0, startColIndex = 0,
-    rowSpan, colSpan, actualRowSpan, actualColSpan;
-  bool isSelected = false;
-
+  uint32_t rowCount = RowCount(), colCount = ColCount();
   for (uint32_t rowIdx = 0; rowIdx < rowCount; rowIdx++) {
     for (uint32_t colIdx = 0; colIdx < colCount; colIdx++) {
-      nsresult rv = tableLayout->GetCellDataAt(rowIdx, colIdx,
-                                      *getter_AddRefs(cellElement),
-                                      startRowIndex, startColIndex,
-                                      rowSpan, colSpan,
-                                      actualRowSpan, actualColSpan,
-                                      isSelected);
+      nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(rowIdx, colIdx);
+      if (!cellFrame || !cellFrame->IsSelected())
+        continue;
 
-      if (NS_SUCCEEDED(rv) && startRowIndex == rowIdx &&
-          startColIndex == colIdx && isSelected) {
-        nsCOMPtr<nsIContent> cellContent(do_QueryInterface(cellElement));
-        Accessible* cell = mDoc->GetAccessible(cellContent);
+      int32_t startCol = -1, startRow = -1;
+      cellFrame->GetRowIndex(startRow);
+      cellFrame->GetColIndex(startCol);
+      if (startRow != rowIdx || startCol != colIdx)
+        continue;
+
+      Accessible* cell = mDoc->GetAccessible(cellFrame->GetContent());
         aCells->AppendElement(cell);
-      }
     }
   }
 }
 
 void
 HTMLTableAccessible::SelectedCellIndices(nsTArray<uint32_t>* aCells)
 {
-  nsITableLayout *tableLayout = GetTableLayout();
-  if (!tableLayout)
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
     return;
 
   uint32_t rowCount = RowCount(), colCount = ColCount();
-
-  nsCOMPtr<nsIDOMElement> domElement;
-  int32_t startRowIndex = 0, startColIndex = 0,
-    rowSpan, colSpan, actualRowSpan, actualColSpan;
-  bool isSelected = false;
-
   for (uint32_t rowIdx = 0; rowIdx < rowCount; rowIdx++) {
     for (uint32_t colIdx = 0; colIdx < colCount; colIdx++) {
-      nsresult rv = tableLayout->GetCellDataAt(rowIdx, colIdx,
-                                               *getter_AddRefs(domElement),
-                                               startRowIndex, startColIndex,
-                                               rowSpan, colSpan,
-                                               actualRowSpan, actualColSpan,
-                                               isSelected);
+      nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(rowIdx, colIdx);
+      if (!cellFrame || !cellFrame->IsSelected())
+        continue;
 
-      if (NS_SUCCEEDED(rv) && startRowIndex == rowIdx &&
-          startColIndex == colIdx && isSelected)
+      int32_t startRow = -1, startCol = -1;
+      cellFrame->GetColIndex(startCol);
+      cellFrame->GetRowIndex(startRow);
+      if (startRow == rowIdx && startCol == colIdx)
         aCells->AppendElement(CellIndexAt(rowIdx, colIdx));
     }
   }
 }
 
 void
 HTMLTableAccessible::SelectedColIndices(nsTArray<uint32_t>* aCols)
 {
@@ -623,118 +595,91 @@ HTMLTableAccessible::SelectedRowIndices(
 {
   uint32_t rowCount = RowCount();
   for (uint32_t rowIdx = 0; rowIdx < rowCount; rowIdx++)
     if (IsRowSelected(rowIdx))
       aRows->AppendElement(rowIdx);
 }
 
 Accessible*
-HTMLTableAccessible::CellAt(uint32_t aRowIndex, uint32_t aColumnIndex)
-{ 
-  nsCOMPtr<nsIDOMElement> cellElement;
-  GetCellAt(aRowIndex, aColumnIndex, *getter_AddRefs(cellElement));
-  if (!cellElement)
+HTMLTableAccessible::CellAt(uint32_t aRowIdx, uint32_t aColIdx)
+{
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
     return nullptr;
 
-  nsCOMPtr<nsIContent> cellContent(do_QueryInterface(cellElement));
-  if (!cellContent)
-    return nullptr;
-
+  nsIContent* cellContent = tableFrame->GetCellAt(aRowIdx, aColIdx);
   Accessible* cell = mDoc->GetAccessible(cellContent);
 
   // XXX bug 576838: crazy tables (like table6 in tables/test_table2.html) may
   // return itself as a cell what makes Orca hang.
   return cell == this ? nullptr : cell;
 }
 
 int32_t
 HTMLTableAccessible::CellIndexAt(uint32_t aRowIdx, uint32_t aColIdx)
 {
-  nsITableLayout* tableLayout = GetTableLayout();
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
+    return -1;
 
-  int32_t index = -1;
-  tableLayout->GetIndexByRowAndColumn(aRowIdx, aColIdx, &index);
-  return index;
+  return tableFrame->GetIndexByRowAndColumn(aRowIdx, aColIdx);
 }
 
 int32_t
 HTMLTableAccessible::ColIndexAt(uint32_t aCellIdx)
 {
-  nsITableLayout* tableLayout = GetTableLayout();
-  if (!tableLayout) 
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
     return -1;
 
   int32_t rowIdx = -1, colIdx = -1;
-  tableLayout->GetRowAndColumnByIndex(aCellIdx, &rowIdx, &colIdx);
+  tableFrame->GetRowAndColumnByIndex(aCellIdx, &rowIdx, &colIdx);
   return colIdx;
 }
 
 int32_t
 HTMLTableAccessible::RowIndexAt(uint32_t aCellIdx)
 {
-  nsITableLayout* tableLayout = GetTableLayout();
-  if (!tableLayout) 
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
     return -1;
 
   int32_t rowIdx = -1, colIdx = -1;
-  tableLayout->GetRowAndColumnByIndex(aCellIdx, &rowIdx, &colIdx);
+  tableFrame->GetRowAndColumnByIndex(aCellIdx, &rowIdx, &colIdx);
   return rowIdx;
 }
 
 void
 HTMLTableAccessible::RowAndColIndicesAt(uint32_t aCellIdx, int32_t* aRowIdx,
                                         int32_t* aColIdx)
 {
-  nsITableLayout* tableLayout = GetTableLayout();
-
-  if (tableLayout)
-    tableLayout->GetRowAndColumnByIndex(aCellIdx, aRowIdx, aColIdx);
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (tableFrame)
+    tableFrame->GetRowAndColumnByIndex(aCellIdx, aRowIdx, aColIdx);
 }
 
 uint32_t
 HTMLTableAccessible::ColExtentAt(uint32_t aRowIdx, uint32_t aColIdx)
 {
-  nsITableLayout* tableLayout = GetTableLayout();
-  if (!tableLayout)
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
     return 0;
 
-  nsCOMPtr<nsIDOMElement> domElement;
-  int32_t startRowIndex, startColIndex, rowSpan, colSpan, actualRowSpan;
-  bool isSelected;
-  int32_t columnExtent = 0;
-
-  DebugOnly<nsresult> rv = tableLayout->
-    GetCellDataAt(aRowIdx, aColIdx, *getter_AddRefs(domElement),
-                  startRowIndex, startColIndex, rowSpan, colSpan,
-                  actualRowSpan, columnExtent, isSelected);
-  NS_ASSERTION(NS_SUCCEEDED(rv), "Could not get cell data");
-
-  return columnExtent;
+  return tableFrame->GetEffectiveColSpanAt(aRowIdx, aColIdx);
 }
 
 uint32_t
 HTMLTableAccessible::RowExtentAt(uint32_t aRowIdx, uint32_t aColIdx)
 {
-  nsITableLayout* tableLayout = GetTableLayout();
-  if (!tableLayout)
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
     return 0;
 
-  nsCOMPtr<nsIDOMElement> domElement;
-  int32_t startRowIndex, startColIndex, rowSpan, colSpan, actualColSpan;
-  bool isSelected;
-  int32_t rowExtent = 0;
-
-  DebugOnly<nsresult> rv = tableLayout->
-    GetCellDataAt(aRowIdx, aColIdx, *getter_AddRefs(domElement),
-                  startRowIndex, startColIndex, rowSpan, colSpan,
-                  rowExtent, actualColSpan, isSelected);
-  NS_ASSERTION(NS_SUCCEEDED(rv), "Could not get cell data");
-
-  return rowExtent;
+  return tableFrame->GetEffectiveRowSpanAt(aRowIdx, aColIdx);
 }
 
 bool
 HTMLTableAccessible::IsColSelected(uint32_t aColIdx)
 {
   bool isSelected = false;
 
   uint32_t rowCount = RowCount();
@@ -760,30 +705,22 @@ HTMLTableAccessible::IsRowSelected(uint3
   }
 
   return isSelected;
 }
 
 bool
 HTMLTableAccessible::IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx)
 {
-  nsITableLayout *tableLayout = GetTableLayout();
-  if (!tableLayout)
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
     return false;
 
-  nsCOMPtr<nsIDOMElement> domElement;
-  int32_t startRowIndex = 0, startColIndex = 0,
-          rowSpan, colSpan, actualRowSpan, actualColSpan;
-  bool isSelected = false;
-
-  tableLayout->GetCellDataAt(aRowIdx, aColIdx, *getter_AddRefs(domElement),
-                             startRowIndex, startColIndex, rowSpan, colSpan,
-                             actualRowSpan, actualColSpan, isSelected);
-
-  return isSelected;
+  nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(aRowIdx, aColIdx);
+  return cellFrame ? cellFrame->IsSelected() : false;
 }
 
 void
 HTMLTableAccessible::SelectRow(uint32_t aRowIdx)
 {
   nsresult rv =
     RemoveRowsOrColumnsFromSelection(aRowIdx,
                                      nsISelectionPrivate::TABLESELECTION_ROW,
@@ -823,120 +760,74 @@ HTMLTableAccessible::UnselectCol(uint32_
                                    false);
 }
 
 nsresult
 HTMLTableAccessible::AddRowOrColumnToSelection(int32_t aIndex, uint32_t aTarget)
 {
   bool doSelectRow = (aTarget == nsISelectionPrivate::TABLESELECTION_ROW);
 
-  nsITableLayout *tableLayout = GetTableLayout();
-  NS_ENSURE_STATE(tableLayout);
-
-  nsCOMPtr<nsIDOMElement> cellElm;
-  int32_t startRowIdx, startColIdx, rowSpan, colSpan,
-    actualRowSpan, actualColSpan;
-  bool isSelected = false;
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
+    return NS_OK;
 
-  nsresult rv = NS_OK;
-  int32_t count = 0;
+  uint32_t count = 0;
   if (doSelectRow)
-    rv = GetColumnCount(&count);
+    count = ColCount();
   else
-    rv = GetRowCount(&count);
-
-  NS_ENSURE_SUCCESS(rv, rv);
+    count = RowCount();
 
   nsIPresShell* presShell(mDoc->PresShell());
   nsRefPtr<nsFrameSelection> tableSelection =
     const_cast<nsFrameSelection*>(presShell->ConstFrameSelection());
 
-  for (int32_t idx = 0; idx < count; idx++) {
+  for (uint32_t idx = 0; idx < count; idx++) {
     int32_t rowIdx = doSelectRow ? aIndex : idx;
     int32_t colIdx = doSelectRow ? idx : aIndex;
-    rv = tableLayout->GetCellDataAt(rowIdx, colIdx,
-                                    *getter_AddRefs(cellElm),
-                                    startRowIdx, startColIdx,
-                                    rowSpan, colSpan,
-                                    actualRowSpan, actualColSpan,
-                                    isSelected);
-
-    if (NS_SUCCEEDED(rv) && !isSelected) {
-      nsCOMPtr<nsIContent> cellContent(do_QueryInterface(cellElm));
-      rv = tableSelection->SelectCellElement(cellContent);
+    nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(rowIdx, colIdx);
+    if (cellFrame && !cellFrame->IsSelected()) {
+      nsresult rv = tableSelection->SelectCellElement(cellFrame->GetContent());
       NS_ENSURE_SUCCESS(rv, rv);
     }
   }
 
   return NS_OK;
 }
 
 nsresult
 HTMLTableAccessible::RemoveRowsOrColumnsFromSelection(int32_t aIndex,
                                                       uint32_t aTarget,
                                                       bool aIsOuter)
 {
-  nsITableLayout *tableLayout = GetTableLayout();
-  NS_ENSURE_STATE(tableLayout);
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
+    return NS_OK;
 
   nsIPresShell* presShell(mDoc->PresShell());
   nsRefPtr<nsFrameSelection> tableSelection =
     const_cast<nsFrameSelection*>(presShell->ConstFrameSelection());
 
   bool doUnselectRow = (aTarget == nsISelectionPrivate::TABLESELECTION_ROW);
-  int32_t count = 0;
-  nsresult rv = doUnselectRow ? GetColumnCount(&count) : GetRowCount(&count);
-  NS_ENSURE_SUCCESS(rv, rv);
+  uint32_t count = doUnselectRow ? ColCount() : RowCount();
 
   int32_t startRowIdx = doUnselectRow ? aIndex : 0;
   int32_t endRowIdx = doUnselectRow ? aIndex : count - 1;
   int32_t startColIdx = doUnselectRow ? 0 : aIndex;
   int32_t endColIdx = doUnselectRow ? count - 1 : aIndex;
 
   if (aIsOuter)
     return tableSelection->RestrictCellsToSelection(mContent,
                                                     startRowIdx, startColIdx,
                                                     endRowIdx, endColIdx);
 
   return tableSelection->RemoveCellsFromSelection(mContent,
                                                   startRowIdx, startColIdx,
                                                   endRowIdx, endColIdx);
 }
 
-nsITableLayout*
-HTMLTableAccessible::GetTableLayout()
-{
-  nsIFrame *frame = mContent->GetPrimaryFrame();
-  if (!frame)
-    return nullptr;
-
-  nsITableLayout *tableLayout = do_QueryFrame(frame);
-  return tableLayout;
-}
-
-nsresult
-HTMLTableAccessible::GetCellAt(int32_t aRowIndex, int32_t aColIndex,
-                               nsIDOMElement*& aCell)
-{
-  int32_t startRowIndex = 0, startColIndex = 0,
-          rowSpan, colSpan, actualRowSpan, actualColSpan;
-  bool isSelected;
-
-  nsITableLayout *tableLayout = GetTableLayout();
-  NS_ENSURE_STATE(tableLayout);
-
-  nsresult rv = tableLayout->
-    GetCellDataAt(aRowIndex, aColIndex, aCell, startRowIndex, startColIndex,
-                  rowSpan, colSpan, actualRowSpan, actualColSpan, isSelected);
-
-  if (rv == NS_TABLELAYOUT_CELL_NOT_FOUND)
-    return NS_ERROR_INVALID_ARG;
-  return rv;
-}
-
 void
 HTMLTableAccessible::Description(nsString& aDescription)
 {
   // Helpful for debugging layout vs. data tables
   aDescription.Truncate();
   Accessible::Description(aDescription);
   if (!aDescription.IsEmpty())
     return;
@@ -1133,26 +1024,24 @@ HTMLTableAccessible::IsProbablyLayoutTab
   // Check for many columns
   if (columns >= 5) {
     RETURN_LAYOUT_ANSWER(false, ">=5 columns");
   }
 
   // Now we know there are 2-4 columns and 2 or more rows
   // Check to see if there are visible borders on the cells
   // XXX currently, we just check the first cell -- do we really need to do more?
-  nsCOMPtr<nsIDOMElement> cellElement;
-  nsresult rv = GetCellAt(0, 0, *getter_AddRefs(cellElement));
-  NS_ENSURE_SUCCESS(rv, false);
+  nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
+  if (!tableFrame)
+    RETURN_LAYOUT_ANSWER(false, "table with no frame!");
 
-  nsCOMPtr<nsIContent> cellContent(do_QueryInterface(cellElement));
-  NS_ENSURE_TRUE(cellContent, false);
-  nsIFrame *cellFrame = cellContent->GetPrimaryFrame();
-  if (!cellFrame) {
-    RETURN_LAYOUT_ANSWER(false, "Could not get frame for cellContent");
-  }
+  nsIFrame* cellFrame = tableFrame->GetCellFrameAt(0, 0);
+  if (!cellFrame)
+    RETURN_LAYOUT_ANSWER(false, "table's first cell has no frame!");
+
   nsMargin border;
   cellFrame->GetBorder(border);
   if (border.top && border.bottom && border.left && border.right) {
     RETURN_LAYOUT_ANSWER(false, "Has nonzero border-width on table cell");
   }
 
   /**
    * Rules for non-bordered tables with 2-4 columns and 2+ rows from here on forward
--- a/accessible/src/html/HTMLTableAccessible.h
+++ b/accessible/src/html/HTMLTableAccessible.h
@@ -161,29 +161,16 @@ public:
   // Accessible
   virtual TableAccessible* AsTable() { return this; }
   virtual void Description(nsString& aDescription);
   virtual a11y::role NativeRole();
   virtual uint64_t NativeState();
   virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
   virtual Relation RelationByType(uint32_t aRelationType);
 
-  // HTMLTableAccessible
-
-  /**
-   * Retun cell element at the given row and column index.
-   */
-  nsresult GetCellAt(int32_t aRowIndex, int32_t aColIndex,
-                     nsIDOMElement* &aCell);
-
-  /**
-   * Return nsITableLayout for the frame of the accessible table.
-   */
-  nsITableLayout* GetTableLayout();
-
 protected:
   // Accessible
   virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;
   virtual void CacheChildren();
 
   // HTMLTableAccessible
 
   /**
--- a/accessible/src/html/Makefile.in
+++ b/accessible/src/html/Makefile.in
@@ -34,16 +34,17 @@ include $(topsrcdir)/config/rules.mk
 
 LOCAL_INCLUDES = \
   -I$(srcdir)/../base \
   -I$(srcdir)/../generic \
   -I$(srcdir)/../xpcom \
   -I$(srcdir)/../../../content/base/src \
   -I$(srcdir)/../../../content/html/content/src \
   -I$(srcdir)/../../../layout/generic \
+  -I$(srcdir)/../../../layout/tables \
   -I$(srcdir)/../../../layout/xul/base/src \
   $(NULL)
 
 ifeq ($(MOZ_WIDGET_TOOLKIT),gtk2)
 LOCAL_INCLUDES += \
   -I$(srcdir)/../atk \
   $(NULL)
 else
--- a/accessible/src/jsat/AccessFu.jsm
+++ b/accessible/src/jsat/AccessFu.jsm
@@ -9,17 +9,16 @@ const Ci = Components.interfaces;
 const Cu = Components.utils;
 const Cr = Components.results;
 
 this.EXPORTED_SYMBOLS = ['AccessFu'];
 
 Cu.import('resource://gre/modules/Services.jsm');
 
 Cu.import('resource://gre/modules/accessibility/Utils.jsm');
-Cu.import('resource://gre/modules/accessibility/TouchAdapter.jsm');
 
 const ACCESSFU_DISABLE = 0;
 const ACCESSFU_ENABLE = 1;
 const ACCESSFU_AUTO = 2;
 
 this.AccessFu = {
   /**
    * Initialize chrome-layer accessibility functionality.
@@ -53,16 +52,18 @@ this.AccessFu = {
     }
 
     try {
       this._activatePref = this.prefsBranch.getIntPref('activate');
     } catch (x) {
       this._activatePref = ACCESSFU_DISABLE;
     }
 
+    Input.quickNavMode.updateModes(this.prefsBranch);
+
     this._enableOrDisable();
   },
 
   /**
    * Start AccessFu mode, this primarily means controlling the virtual cursor
    * with arrow keys.
    */
   _enable: function _enable() {
@@ -71,32 +72,29 @@ this.AccessFu = {
     this._enabled = true;
 
     Cu.import('resource://gre/modules/accessibility/Utils.jsm');
     Cu.import('resource://gre/modules/accessibility/TouchAdapter.jsm');
     Cu.import('resource://gre/modules/accessibility/Presentation.jsm');
 
     Logger.info('enable');
 
-    this.touchAdapter = (Utils.MozBuildApp == 'mobile/android') ?
-      AndroidTouchAdapter : TouchAdapter;
-
     for each (let mm in Utils.getAllMessageManagers(this.chromeWin))
       this._loadFrameScript(mm);
 
     // Add stylesheet
     let stylesheetURL = 'chrome://global/content/accessibility/AccessFu.css';
     this.stylesheet = this.chromeWin.document.createProcessingInstruction(
       'xml-stylesheet', 'href="' + stylesheetURL + '" type="text/css"');
     this.chromeWin.document.insertBefore(this.stylesheet,
                                          this.chromeWin.document.firstChild);
 
     Input.attach(this.chromeWin);
     Output.attach(this.chromeWin);
-    this.touchAdapter.attach(this.chromeWin);
+    TouchAdapter.attach(this.chromeWin);
 
     Services.obs.addObserver(this, 'remote-browser-frame-shown', false);
     Services.obs.addObserver(this, 'Accessibility:NextObject', false);
     Services.obs.addObserver(this, 'Accessibility:PreviousObject', false);
     Services.obs.addObserver(this, 'Accessibility:Focus', false);
     this.chromeWin.addEventListener('TabOpen', this);
     this.chromeWin.addEventListener('TabSelect', this);
   },
@@ -112,17 +110,17 @@ this.AccessFu = {
 
     Logger.info('disable');
 
     this.chromeWin.document.removeChild(this.stylesheet);
     for each (let mm in Utils.getAllMessageManagers(this.chromeWin))
       mm.sendAsyncMessage('AccessFu:Stop');
 
     Input.detach();
-    this.touchAdapter.detach(this.chromeWin);
+    TouchAdapter.detach(this.chromeWin);
 
     this.chromeWin.removeEventListener('TabOpen', this);
     this.chromeWin.removeEventListener('TabSelect', this);
 
     Services.obs.removeObserver(this, 'remote-browser-frame-shown');
     Services.obs.removeObserver(this, 'Accessibility:NextObject');
     Services.obs.removeObserver(this, 'Accessibility:PreviousObject');
     Services.obs.removeObserver(this, 'Accessibility:Focus');
@@ -200,16 +198,18 @@ this.AccessFu = {
           mm.sendAsyncMessage('AccessFu:VirtualCursor',
                               {action: 'whereIsIt', move: true});
         }
         break;
       case 'nsPref:changed':
         if (aData == 'activate') {
           this._activatePref = this.prefsBranch.getIntPref('activate');
           this._enableOrDisable();
+        } else if (aData == 'quicknav_modes') {
+          Input.quickNavMode.updateModes(this.prefsBranch);
         }
         break;
       case 'remote-browser-frame-shown':
       {
         this._loadFrameScript(
           aSubject.QueryInterface(Ci.nsIFrameLoader).messageManager);
         break;
       }
@@ -384,62 +384,74 @@ var Input = {
 
   handleEvent: function Input_handleEvent(aEvent) {
     try {
       switch (aEvent.type) {
       case 'keypress':
         this._handleKeypress(aEvent);
         break;
       case 'mozAccessFuGesture':
-        this._handleGesture(aEvent);
+        this._handleGesture(aEvent.detail);
         break;
       }
     } catch (x) {
       Logger.logException(x);
     }
   },
 
-  _handleGesture: function _handleGesture(aEvent) {
-    let detail = aEvent.detail;
-    Logger.info('Gesture', detail.type,
-                '(fingers: ' + detail.touches.length + ')');
+  _handleGesture: function _handleGesture(aGesture) {
+    let gestureName = aGesture.type + aGesture.touches.length;
+    Logger.info('Gesture', aGesture.type,
+                '(fingers: ' + aGesture.touches.length + ')');
 
-    if (detail.touches.length == 1) {
-      switch (detail.type) {
-        case 'swiperight':
-          this.moveCursor('moveNext', 'Simple', 'gestures');
-          break;
-        case 'swipeleft':
-          this.moveCursor('movePrevious', 'Simple', 'gesture');
-          break;
-        case 'doubletap':
-          this.activateCurrent();
-          break;
-        case 'explore':
-          this.moveCursor('moveToPoint', 'Simple', 'gesture',
-                          detail.x, detail.y);
-          break;
-      }
-    }
-
-    if (detail.touches.length == 3) {
-      switch (detail.type) {
-        case 'swiperight':
-          this.scroll(-1, true);
-          break;
-        case 'swipedown':
-          this.scroll(-1);
-          break;
-        case 'swipeleft':
-          this.scroll(1, true);
-          break;
-        case 'swipeup':
-          this.scroll(1);
-          break;
-      }
+    switch (gestureName) {
+      case 'dwell1':
+      case 'explore1':
+        this.moveCursor('moveToPoint', 'Simple', 'gesture',
+                        aGesture.x, aGesture.y);
+        break;
+      case 'doubletap1':
+        this.activateCurrent();
+        break;
+      case 'swiperight1':
+        this.moveCursor('moveNext', 'Simple', 'gestures');
+        break;
+      case 'swipeleft1':
+        this.moveCursor('movePrevious', 'Simple', 'gesture');
+        break;
+      case 'swiperight2':
+        this.scroll(-1, true);
+        break;
+      case 'swipedown2':
+        this.scroll(-1);
+        break;
+      case 'swipeleft2':
+        this.scroll(1, true);
+        break;
+      case 'swipeup2':
+        this.scroll(1);
+        break;
+      case 'explore2':
+        Utils.getCurrentBrowser(this.chromeWin).contentWindow.scrollBy(
+          -aGesture.deltaX, -aGesture.deltaY);
+        break;
+      case 'swiperight3':
+        this.moveCursor('moveNext', this.quickNavMode.current, 'gesture');
+        break;
+      case 'swipeleft3':
+        this.moveCursor('movePrevious', this.quickNavMode.current, 'gesture');
+        break;
+      case 'swipedown3':
+        this.quickNavMode.next();
+        AccessFu.announce('quicknav_' + this.quickNavMode.current);
+        break;
+      case 'swipeup3':
+        this.quickNavMode.previous();
+        AccessFu.announce('quicknav_' + this.quickNavMode.current);
+        break;
     }
   },
 
   _handleKeypress: function _handleKeypress(aEvent) {
     let target = aEvent.target;
 
     // Ignore keys with modifiers so the content could take advantage of them.
     if (aEvent.ctrlKey || aEvent.altKey || aEvent.metaKey)
@@ -563,10 +575,39 @@ var Input = {
       R: ['movePrevious', 'RadioButton'],
       s: ['moveNext', 'Separator'],
       S: ['movePrevious', 'Separator'],
       t: ['moveNext', 'Table'],
       T: ['movePrevious', 'Table'],
       x: ['moveNext', 'Checkbox'],
       X: ['movePrevious', 'Checkbox']
     };
+
+    return this.keyMap;
+  },
+
+  quickNavMode: {
+    get current() {
+      return this.modes[this._currentIndex];
+    },
+
+    previous: function quickNavMode_previous() {
+      if (--this._currentIndex < 0)
+        this._currentIndex = this.modes.length - 1;
+    },
+
+    next: function quickNavMode_next() {
+      if (++this._currentIndex >= this.modes.length)
+        this._currentIndex = 0;
+    },
+
+    updateModes: function updateModes(aPrefsBranch) {
+      try {
+        this.modes = aPrefsBranch.getCharPref('quicknav_modes').split(',');
+      } catch (x) {
+        // Fallback
+        this.modes = [];
+      }
+    },
+
+    _currentIndex: -1
   }
 };
--- a/accessible/src/jsat/TouchAdapter.jsm
+++ b/accessible/src/jsat/TouchAdapter.jsm
@@ -4,17 +4,17 @@
 
 'use strict';
 
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 const Cr = Components.results;
 
-this.EXPORTED_SYMBOLS = ['TouchAdapter', 'AndroidTouchAdapter'];
+this.EXPORTED_SYMBOLS = ['TouchAdapter'];
 
 Cu.import('resource://gre/modules/accessibility/Utils.jsm');
 
 // We should not be emitting explore events more than 10 times a second.
 // It is granular enough to feel natural, and it does not hammer the CPU.
 const EXPLORE_THROTTLE = 100;
 
 this.TouchAdapter = {
@@ -34,99 +34,141 @@ this.TouchAdapter = {
   DWELL_THRESHOLD: 500,
 
   // delay before distinct dwell events
   DWELL_REPEAT_DELAY: 300,
 
   // maximum distance the mouse could move during a tap in inches
   TAP_MAX_RADIUS: 0.2,
 
+  // The virtual touch ID generated by an Android hover event.
+  HOVER_ID: 'hover',
+
   attach: function TouchAdapter_attach(aWindow) {
     if (this.chromeWin)
       return;
 
     Logger.info('TouchAdapter.attach');
 
     this.chromeWin = aWindow;
     this._touchPoints = {};
     this._dwellTimeout = 0;
     this._prevGestures = {};
     this._lastExploreTime = 0;
     this._dpi = this.chromeWin.QueryInterface(Ci.nsIInterfaceRequestor).
       getInterface(Ci.nsIDOMWindowUtils).displayDPI;
 
-    this.glass = this.chromeWin.document.
-      createElementNS('http://www.w3.org/1999/xhtml', 'div');
-    this.glass.id = 'accessfu-glass';
-    this.chromeWin.document.documentElement.appendChild(this.glass);
+    let target = this.chromeWin;
+
+    if (Utils.MozBuildApp == 'b2g') {
+      this.glass = this.chromeWin.document.
+        createElementNS('http://www.w3.org/1999/xhtml', 'div');
+      this.glass.id = 'accessfu-glass';
+      this.chromeWin.document.documentElement.appendChild(this.glass);
+      target = this.glass;
+    }
 
-    this.glass.addEventListener('touchend', this, true, true);
-    this.glass.addEventListener('touchmove', this, true, true);
-    this.glass.addEventListener('touchstart', this, true, true);
+    target.addEventListener('mousemove', this, true, true);
+    target.addEventListener('mouseenter', this, true, true);
+    target.addEventListener('mouseleave', this, true, true);
+    target.addEventListener('mousedown', this, true, true);
+    target.addEventListener('mouseup', this, true, true);
+    target.addEventListener('click', this, true, true);
+
+    target.addEventListener('touchend', this, true, true);
+    target.addEventListener('touchmove', this, true, true);
+    target.addEventListener('touchstart', this, true, true);
 
     if (Utils.OS != 'Android')
       Mouse2Touch.attach(aWindow);
   },
 
   detach: function TouchAdapter_detach(aWindow) {
     if (!this.chromeWin)
       return;
 
     Logger.info('TouchAdapter.detach');
 
-    this.glass.removeEventListener('touchend', this, true, true);
-    this.glass.removeEventListener('touchmove', this, true, true);
-    this.glass.removeEventListener('touchstart', this, true, true);
-    this.glass.parentNode.removeChild(this.glass);
+    let target = this.chromeWin;
+
+    if (Utils.MozBuildApp == 'b2g') {
+      target = this.glass;
+      this.glass.parentNode.removeChild(this.glass);
+    }
+
+    target.removeEventListener('mousemove', this, true, true);
+    target.removeEventListener('mouseenter', this, true, true);
+    target.removeEventListener('mouseleave', this, true, true);
+    target.removeEventListener('mousedown', this, true, true);
+    target.removeEventListener('mouseup', this, true, true);
+    target.removeEventListener('click', this, true, true);
+
+    target.removeEventListener('touchend', this, true, true);
+    target.removeEventListener('touchmove', this, true, true);
+    target.removeEventListener('touchstart', this, true, true);
 
     if (Utils.OS != 'Android')
       Mouse2Touch.detach(aWindow);
 
     delete this.chromeWin;
   },
 
   handleEvent: function TouchAdapter_handleEvent(aEvent) {
-    let touches = aEvent.changedTouches;
+    if (this._delayedEvent) {
+      this.chromeWin.clearTimeout(this._delayedEvent);
+      delete this._delayedEvent;
+    }
+
+    let changedTouches = aEvent.changedTouches || [aEvent];
+
     // XXX: Until bug 77992 is resolved, on desktop we get microseconds
     // instead of milliseconds.
     let timeStamp = (Utils.OS == 'Android') ? aEvent.timeStamp : Date.now();
     switch (aEvent.type) {
+      case 'mouseenter':
       case 'touchstart':
-        for (var i = 0; i < touches.length; i++) {
-          let touch = touches[i];
+        for (var i = 0; i < changedTouches.length; i++) {
+          let touch = changedTouches[i];
           let touchPoint = new TouchPoint(touch, timeStamp, this._dpi);
-          this._touchPoints[touch.identifier] = touchPoint;
+          this._touchPoints[touch.identifier || this.HOVER_ID] = touchPoint;
           this._lastExploreTime = timeStamp + this.SWIPE_MAX_DURATION;
         }
         this._dwellTimeout = this.chromeWin.setTimeout(
           (function () {
              this.compileAndEmit(timeStamp + this.DWELL_THRESHOLD);
            }).bind(this), this.DWELL_THRESHOLD);
         break;
+      case 'mousemove':
       case 'touchmove':
-        for (var i = 0; i < touches.length; i++) {
-          let touch = touches[i];
-          let touchPoint = this._touchPoints[touch.identifier];
-          touchPoint.update(touch, timeStamp);
+        for (var i = 0; i < changedTouches.length; i++) {
+          let touch = changedTouches[i];
+          let touchPoint = this._touchPoints[touch.identifier || this.HOVER_ID];
+          if (touchPoint)
+            touchPoint.update(touch, timeStamp);
         }
         if (timeStamp - this._lastExploreTime >= EXPLORE_THROTTLE) {
           this.compileAndEmit(timeStamp);
           this._lastExploreTime = timeStamp;
         }
         break;
+      case 'mouseleave':
       case 'touchend':
-        for (var i = 0; i < touches.length; i++) {
-          let touch = touches[i];
-          let touchPoint = this._touchPoints[touch.identifier];
-          touchPoint.update(touch, timeStamp);
-          touchPoint.finish();
+        for (var i = 0; i < changedTouches.length; i++) {
+          let touch = changedTouches[i];
+          let touchPoint = this._touchPoints[touch.identifier || this.HOVER_ID];
+          if (touchPoint) {
+            touchPoint.update(touch, timeStamp);
+            touchPoint.finish();
+          }
         }
         this.compileAndEmit(timeStamp);
         break;
     }
+
+    aEvent.preventDefault();
   },
 
   cleanupTouches: function cleanupTouches() {
     for (var identifier in this._touchPoints) {
       if (!this._touchPoints[identifier].done)
         continue;
 
       delete this._touchPoints[identifier];
@@ -165,38 +207,75 @@ this.TouchAdapter = {
 
       if (prevGesture) {
         // The time delta is calculated as the period between the end of the
         // last gesture and the start of this one.
         let timeDelta = details.startTime - prevGesture.endTime;
         if (timeDelta > this.MAX_CONSECUTIVE_GESTURE_DELAY) {
           delete this._prevGestures[idhash];
         } else {
-          if (details.type == 'tap' && prevGesture.type == 'tap')
-            details.type = 'doubletap';
-          if (details.type == 'tap' && prevGesture.type == 'doubletap')
-            details.type = 'tripletap';
-          if (details.type == 'dwell' && prevGesture.type == 'tap')
-            details.type = 'taphold';
+          let sequence = prevGesture.type + '-' + details.type;
+          switch (sequence) {
+            case 'tap-tap':
+              details.type = 'doubletap';
+              break;
+            case 'doubletap-tap':
+              details.type = 'tripletap';
+              break;
+            case 'tap-dwell':
+              details.type = 'taphold';
+              break;
+            case 'explore-explore':
+              details.deltaX = details.x - prevGesture.x;
+              details.deltaY = details.y - prevGesture.y;
+              break;
+          }
         }
       }
 
       this._prevGestures[idhash] = details;
     }
 
     this.chromeWin.clearTimeout(this._dwellTimeout);
     this.cleanupTouches();
 
     return multiDetails;
   },
 
   emitGesture: function TouchAdapter_emitGesture(aDetails) {
-    let evt = this.chromeWin.document.createEvent('CustomEvent');
-    evt.initCustomEvent('mozAccessFuGesture', true, true, aDetails);
-    this.chromeWin.dispatchEvent(evt);
+    let emitDelay = 0;
+
+    // Unmutate gestures we are getting from Android when EBT is enabled.
+    // Two finger gestures are translated to one. Double taps are translated
+    // to single taps.
+    if (Utils.MozBuildApp == 'mobile/android' &&
+        Utils.AndroidSdkVersion >= 14 &&
+        aDetails.touches[0] != this.HOVER_ID) {
+      if (aDetails.touches.length == 1) {
+        if (aDetails.type == 'tap') {
+          emitDelay = 50;
+          aDetails.type = 'doubletap';
+        } else {
+          aDetails.touches.push(this.HOVER_ID);
+        }
+      }
+    }
+
+    let emit = function emit() {
+      let evt = this.chromeWin.document.createEvent('CustomEvent');
+      evt.initCustomEvent('mozAccessFuGesture', true, true, aDetails);
+      this.chromeWin.dispatchEvent(evt);
+      delete this._delayedEvent;
+    }.bind(this);
+
+    if (emitDelay) {
+      this._delayedEvent = this.chromeWin.setTimeout(emit, emitDelay);
+    } else {
+      emit();
+    }
   },
 
   compileAndEmit: function TouchAdapter_compileAndEmit(aTime) {
     for each (let details in this.compile(aTime)) {
       this.emitGesture(details);
     }
   }
 };
@@ -359,46 +438,8 @@ var Mouse2Touch = {
       evt.initTouchEvent(name, true, true, this.chromeWin, 0,
                          false, false, false, false, touches, touches, touches);
     }
     aEvent.target.dispatchEvent(evt);
     aEvent.preventDefault();
     aEvent.stopImmediatePropagation();
   }
 };
-
-this.AndroidTouchAdapter = {
-  attach: function AndroidTouchAdapter_attach(aWindow) {
-    if (this.chromeWin)
-      return;
-
-    Logger.info('AndroidTouchAdapter.attach');
-
-    this.chromeWin = aWindow;
-    this.chromeWin.addEventListener('mousemove', this, true, true);
-    this._lastExploreTime = 0;
-  },
-
-  detach: function AndroidTouchAdapter_detach(aWindow) {
-    if (!this.chromeWin)
-      return;
-
-    Logger.info('AndroidTouchAdapter.detach');
-
-    this.chromeWin.removeEventListener('mousemove', this, true, true);
-    delete this.chromeWin;
-  },
-
-  handleEvent: function AndroidTouchAdapter_handleEvent(aEvent) {
-    // On non-Android we use the shift key to simulate touch.
-    if (Utils.MozBuildApp != 'mobile/android' && !aEvent.shiftKey)
-      return;
-
-    if (aEvent.timeStamp - this._lastExploreTime >= EXPLORE_THROTTLE) {
-      let evt = this.chromeWin.document.createEvent('CustomEvent');
-      evt.initCustomEvent(
-        'mozAccessFuGesture', true, true,
-       {type: 'explore', x: aEvent.screenX, y: aEvent.screenY, touches: [1]});
-      this.chromeWin.dispatchEvent(evt);
-      this._lastExploreTime = aEvent.timeStamp;
-    }
-  }
-};
\ No newline at end of file
--- a/accessible/src/msaa/AccessibleWrap.cpp
+++ b/accessible/src/msaa/AccessibleWrap.cpp
@@ -54,28 +54,25 @@ const uint32_t USE_ROLE_STRING = 0;
  */
 
 //#define DEBUG_LEAKS
 
 #ifdef DEBUG_LEAKS
 static gAccessibles = 0;
 #endif
 
-EXTERN_C GUID CDECL CLSID_Accessible =
-{ 0x61044601, 0xa811, 0x4e2b, { 0xbb, 0xba, 0x17, 0xbf, 0xab, 0xd3, 0x29, 0xd7 } };
-
 static const int32_t kIEnumVariantDisconnected = -1;
 
 ////////////////////////////////////////////////////////////////////////////////
 // AccessibleWrap
 ////////////////////////////////////////////////////////////////////////////////
 
 ITypeInfo* AccessibleWrap::gTypeInfo = NULL;
 
-NS_IMPL_ISUPPORTS_INHERITED0(AccessibleWrap, Accessible);
+NS_IMPL_ISUPPORTS_INHERITED0(AccessibleWrap, Accessible)
 
 //-----------------------------------------------------
 // IUnknown interface methods - see iunknown.h for documentation
 //-----------------------------------------------------
 
 // Microsoft COM QueryInterface
 STDMETHODIMP
 AccessibleWrap::QueryInterface(REFIID iid, void** ppv)
@@ -92,17 +89,17 @@ AccessibleWrap::QueryInterface(REFIID ii
       return E_NOINTERFACE;
 
     *ppv = static_cast<IEnumVARIANT*>(new ChildrenEnumVariant(this));
   } else if (IID_IServiceProvider == iid)
     *ppv = static_cast<IServiceProvider*>(this);
   else if (IID_IAccessible2 == iid && !Compatibility::IsIA2Off())
     *ppv = static_cast<IAccessible2*>(this);
   else if (IID_ISimpleDOMNode == iid) {
-    if (IsDefunct() || !HasOwnContent() && !IsDoc())
+    if (IsDefunct() || (!HasOwnContent() && !IsDoc()))
       return E_NOINTERFACE;
 
     *ppv = new sdnAccessible(GetNode());
   }
 
   if (NULL == *ppv) {
     HRESULT hr = ia2AccessibleComponent::QueryInterface(iid, ppv);
     if (SUCCEEDED(hr))
@@ -140,17 +137,17 @@ AccessibleWrap::QueryService(REFGUID aGu
   if (!aInstancePtr)
     return E_INVALIDARG;
 
   *aInstancePtr = NULL;
 
   // UIA IAccessibleEx
   if (aGuidService == IID_IAccessibleEx &&
       Preferences::GetBool("accessibility.uia.enable")) {
-    IAccessibleEx* accEx = new uiaRawElmProvider(this);
+    uiaRawElmProvider* accEx = new uiaRawElmProvider(this);
     HRESULT hr = accEx->QueryInterface(aIID, aInstancePtr);
     if (FAILED(hr))
       delete accEx;
 
     return hr;
   }
 
   return nsAccessNodeWrap::QueryService(aGuidService, aIID, aInstancePtr);
@@ -170,18 +167,18 @@ AccessibleWrap::get_accParent( IDispatch
   if (IsDefunct())
     return CO_E_OBJNOTCONNECTED;
 
   DocAccessible* doc = AsDoc();
   if (doc) {
     // Return window system accessible object for root document and tab document
     // accessibles.
     if (!doc->ParentDocument() ||
-        nsWinUtils::IsWindowEmulationStarted() &&
-        nsCoreUtils::IsTabDocument(doc->DocumentNode())) {
+        (nsWinUtils::IsWindowEmulationStarted() &&
+         nsCoreUtils::IsTabDocument(doc->DocumentNode()))) {
       HWND hwnd = static_cast<HWND>(doc->GetNativeWindow());
       if (hwnd && SUCCEEDED(::AccessibleObjectFromWindow(hwnd, OBJID_WINDOW,
                                                          IID_IAccessible,
                                                          (void**)ppdispParent))) {
         return S_OK;
       }
     }
   }
@@ -580,17 +577,17 @@ AccessibleWrap::get_accFocus(
 
   return S_OK;
 
   A11Y_TRYBLOCK_END
 }
 
 // This helper class implements IEnumVARIANT for a nsIArray containing nsIAccessible objects.
 
-class AccessibleEnumerator : public IEnumVARIANT
+class AccessibleEnumerator MOZ_FINAL : public IEnumVARIANT
 {
 public:
   AccessibleEnumerator(nsIArray* aArray) : mArray(aArray), mCurIndex(0) { }
   AccessibleEnumerator(const AccessibleEnumerator& toCopy) :
     mArray(toCopy.mArray), mCurIndex(toCopy.mCurIndex) { }
   ~AccessibleEnumerator() { }
 
   // IUnknown
@@ -1097,17 +1094,17 @@ AccessibleWrap::get_relation(long aRelat
   if (!aRelation)
     return E_INVALIDARG;
 
   *aRelation = NULL;
 
   if (IsDefunct())
     return CO_E_OBJNOTCONNECTED;
 
-  uint32_t relIdx = 0;
+  long relIdx = 0;
   for (uint32_t relType = nsIAccessibleRelation::RELATION_FIRST;
        relType <= nsIAccessibleRelation::RELATION_LAST; relType++) {
     Relation rel = RelationByType(relType);
     nsRefPtr<ia2AccessibleRelation> ia2Relation =
       new ia2AccessibleRelation(relType, &rel);
     if (ia2Relation->HasTargets()) {
       if (relIdx == aRelationIndex) {
         ia2Relation.forget(aRelation);
@@ -1564,18 +1561,17 @@ nsresult
 AccessibleWrap::FirePlatformEvent(AccEvent* aEvent)
 {
   uint32_t eventType = aEvent->GetEventType();
 
   NS_ENSURE_TRUE(eventType > 0 &&
                  eventType < nsIAccessibleEvent::EVENT_LAST_ENTRY,
                  NS_ERROR_FAILURE);
 
-  uint32_t winLastEntry = gWinEventMap[nsIAccessibleEvent::EVENT_LAST_ENTRY];
-  NS_ASSERTION(winLastEntry == kEVENT_LAST_ENTRY,
+  NS_ASSERTION(gWinEventMap[nsIAccessibleEvent::EVENT_LAST_ENTRY] == kEVENT_LAST_ENTRY,
                "MSAA event map skewed");
 
   uint32_t winEvent = gWinEventMap[eventType];
   if (!winEvent)
     return NS_OK;
 
   // Means we're not active.
   NS_ENSURE_TRUE(!IsDefunct(), NS_ERROR_FAILURE);
@@ -1706,17 +1702,17 @@ AccessibleWrap::ConvertToIA2Attributes(n
     nsCOMPtr<nsIPropertyElement> propElem(do_QueryInterface(propSupports));
     if (!propElem)
       return E_FAIL;
 
     nsAutoCString name;
     if (NS_FAILED(propElem->GetKey(name)))
       return E_FAIL;
 
-    uint32_t offset = 0;
+    int32_t offset = 0;
     while ((offset = name.FindCharInSet(kCharsToEscape, offset)) != kNotFound) {
       name.Insert('\\', offset);
       offset += 2;
     }
 
     nsAutoString value;
     if (NS_FAILED(propElem->GetValue(value)))
       return E_FAIL;
--- a/accessible/src/msaa/DocAccessibleWrap.cpp
+++ b/accessible/src/msaa/DocAccessibleWrap.cpp
@@ -254,17 +254,17 @@ DocAccessibleWrap::DoInitialUpdate()
   if (nsWinUtils::IsWindowEmulationStarted()) {
     // Create window for tab document.
     if (nsCoreUtils::IsTabDocument(mDocumentNode)) {
       mozilla::dom::TabChild* tabChild =
         mozilla::dom::GetTabChildFrom(mDocumentNode->GetShell());
 
       a11y::RootAccessible* rootDocument = RootAccessible();
 
-      mozilla::WindowsHandle nativeData = NULL;
+      mozilla::WindowsHandle nativeData = 0;
       if (tabChild)
         tabChild->SendGetWidgetNativeData(&nativeData);
       else
         nativeData = reinterpret_cast<mozilla::WindowsHandle>(
           rootDocument->GetNativeWindow());
 
       bool isActive = true;
       int32_t x = CW_USEDEFAULT, y = CW_USEDEFAULT, width = 0, height = 0;
--- a/accessible/src/msaa/EnumVariant.h
+++ b/accessible/src/msaa/EnumVariant.h
@@ -13,18 +13,18 @@ namespace mozilla {
 namespace a11y {
 
 /**
  * Used to fetch accessible children.
  */
 class ChildrenEnumVariant MOZ_FINAL : public IEnumVARIANT
 {
 public:
-  ChildrenEnumVariant(AccessibleWrap* aAnchor) : mAnchorAcc(aAnchor),
-    mCurAcc(mAnchorAcc->GetChildAt(0)), mCurIndex(0), mRefCnt(0) { }
+  ChildrenEnumVariant(AccessibleWrap* aAnchor) : mRefCnt(0), mAnchorAcc(aAnchor),
+    mCurAcc(mAnchorAcc->GetChildAt(0)), mCurIndex(0) { }
 
   // IUnknown
   DECL_IUNKNOWN
 
   // IEnumVariant
   virtual /* [local] */ HRESULT STDMETHODCALLTYPE Next(
     /* [in] */ ULONG aCount,
     /* [length_is][size_is][out] */ VARIANT* aItems,
@@ -38,18 +38,18 @@ public:
   virtual HRESULT STDMETHODCALLTYPE Clone(
     /* [out] */ IEnumVARIANT** aEnumVaraint);
 
 private:
   ChildrenEnumVariant() MOZ_DELETE;
   ChildrenEnumVariant& operator =(const ChildrenEnumVariant&) MOZ_DELETE;
 
   ChildrenEnumVariant(const ChildrenEnumVariant& aEnumVariant) :
-    mAnchorAcc(aEnumVariant.mAnchorAcc), mCurAcc(aEnumVariant.mCurAcc),
-    mCurIndex(aEnumVariant.mCurIndex), mRefCnt(0) { }
+    mRefCnt(0), mAnchorAcc(aEnumVariant.mAnchorAcc), mCurAcc(aEnumVariant.mCurAcc),
+    mCurIndex(aEnumVariant.mCurIndex) { }
   virtual ~ChildrenEnumVariant() { }
 
 protected:
   nsRefPtr<AccessibleWrap> mAnchorAcc;
   Accessible* mCurAcc;
   uint32_t mCurIndex;
 };
 
--- a/accessible/src/msaa/ImageAccessibleWrap.cpp
+++ b/accessible/src/msaa/ImageAccessibleWrap.cpp
@@ -10,10 +10,10 @@
 using namespace mozilla;
 using namespace mozilla::a11y;
 
 NS_IMPL_ISUPPORTS_INHERITED0(ImageAccessibleWrap,
                              ImageAccessible)
 
 IMPL_IUNKNOWN_INHERITED1(ImageAccessibleWrap,
                          AccessibleWrap,
-                         ia2AccessibleImage);
+                         ia2AccessibleImage)
 
--- a/accessible/src/windows/ia2/ia2AccessibleRelation.cpp
+++ b/accessible/src/windows/ia2/ia2AccessibleRelation.cpp
@@ -155,17 +155,17 @@ ia2AccessibleRelation::get_nTargets(long
   A11Y_TRYBLOCK_END
 }
 
 STDMETHODIMP
 ia2AccessibleRelation::get_target(long aTargetIndex, IUnknown **aTarget)
 {
   A11Y_TRYBLOCK_BEGIN
 
-  if (aTargetIndex < 0 || aTargetIndex >= mTargets.Length() || !aTarget)
+  if (aTargetIndex < 0 || (uint32_t)aTargetIndex >= mTargets.Length() || !aTarget)
     return E_INVALIDARG;
 
   mTargets[aTargetIndex]->QueryNativeInterface(IID_IUnknown, (void**) aTarget);
   return S_OK;
 
   A11Y_TRYBLOCK_END
 }
 
@@ -174,21 +174,21 @@ ia2AccessibleRelation::get_targets(long 
                                    long *aNTargets)
 {
   A11Y_TRYBLOCK_BEGIN
 
   if (!aNTargets || !aTargets)
     return E_INVALIDARG;
 
   *aNTargets = 0;
-  uint32_t maxTargets = mTargets.Length();
+  long maxTargets = mTargets.Length();
   if (maxTargets > aMaxTargets)
     maxTargets = aMaxTargets;
 
-  for (uint32_t idx = 0; idx < maxTargets; idx++)
+  for (long idx = 0; idx < maxTargets; idx++)
     get_target(idx, aTargets + idx);
 
   *aNTargets = maxTargets;
   return S_OK;
 
   A11Y_TRYBLOCK_END
 }
 
--- a/accessible/src/windows/sdn/sdnAccessible.h
+++ b/accessible/src/windows/sdn/sdnAccessible.h
@@ -10,17 +10,17 @@
 #include "ISimpleDOMNode.h"
 #include "AccessibleWrap.h"
 
 #include "mozilla/Attributes.h"
 
 namespace mozilla {
 namespace a11y {
 
-class sdnAccessible : public ISimpleDOMNode
+class sdnAccessible MOZ_FINAL : public ISimpleDOMNode
 {
 public:
   sdnAccessible(nsINode* aNode) : mNode(aNode) { }
   ~sdnAccessible() { }
 
   /**
    * Retrun if the object is defunct.
    */
--- a/accessible/src/windows/uia/uiaRawElmProvider.cpp
+++ b/accessible/src/windows/uia/uiaRawElmProvider.cpp
@@ -72,17 +72,17 @@ uiaRawElmProvider::GetRuntimeId(__RPC__d
   if (!aRuntimeIds)
     return E_INVALIDARG;
 
   int ids[] = { UiaAppendRuntimeId, static_cast<int>(reinterpret_cast<intptr_t>(mAcc->UniqueID())) };
   *aRuntimeIds = SafeArrayCreateVector(VT_I4, 0, 2);
   if (!*aRuntimeIds)
     return E_OUTOFMEMORY;
 
-  for (LONG i = 0; i < ArrayLength(ids); i++)
+  for (LONG i = 0; i < (LONG)ArrayLength(ids); i++)
     SafeArrayPutElement(*aRuntimeIds, &i, (void*)&(ids[i]));
 
   return S_OK;
 
   A11Y_TRYBLOCK_END
 }
 
 STDMETHODIMP
--- a/accessible/src/windows/uia/uiaRawElmProvider.h
+++ b/accessible/src/windows/uia/uiaRawElmProvider.h
@@ -18,17 +18,17 @@ class AccessibleWrap;
 
 /**
  * IRawElementProviderSimple implementation (maintains IAccessibleEx approach).
  */
 class uiaRawElmProvider MOZ_FINAL : public IAccessibleEx,
                                     public IRawElementProviderSimple
 {
 public:
-  uiaRawElmProvider(AccessibleWrap* aAcc) : mAcc(aAcc), mRefCnt(0) { }
+  uiaRawElmProvider(AccessibleWrap* aAcc) : mRefCnt(0), mAcc(aAcc) { }
 
   // IUnknown
   DECL_IUNKNOWN
 
   // IAccessibleEx
   virtual HRESULT STDMETHODCALLTYPE GetObjectForChild(
     /* [in] */ long aIdChild,
     /* [retval][out] */ __RPC__deref_out_opt IAccessibleEx** aAccEx);
--- a/accessible/src/xul/XULSliderAccessible.cpp
+++ b/accessible/src/xul/XULSliderAccessible.cpp
@@ -16,17 +16,17 @@ using namespace mozilla::a11y;
 ////////////////////////////////////////////////////////////////////////////////
 // XULSliderAccessible
 ////////////////////////////////////////////////////////////////////////////////
 
 XULSliderAccessible::
   XULSliderAccessible(nsIContent* aContent, DocAccessible* aDoc) :
   AccessibleWrap(aContent, aDoc)
 {
-  mFlags = mFlags | eHasNumericValue;
+  mStateFlags |= eHasNumericValue;
 }
 
 // nsISupports
 
 NS_IMPL_ISUPPORTS_INHERITED1(XULSliderAccessible,
                              AccessibleWrap,
                              nsIAccessibleValue)
 
--- a/accessible/src/xul/XULTreeAccessible.cpp
+++ b/accessible/src/xul/XULTreeAccessible.cpp
@@ -680,17 +680,17 @@ XULTreeAccessible::CreateTreeItemAccessi
 XULTreeItemAccessibleBase::
   XULTreeItemAccessibleBase(nsIContent* aContent, DocAccessible* aDoc,
                             Accessible* aParent, nsITreeBoxObject* aTree,
                             nsITreeView* aTreeView, int32_t aRow) :
   AccessibleWrap(aContent, aDoc),
   mTree(aTree), mTreeView(aTreeView), mRow(aRow)
 {
   mParent = aParent;
-  mFlags |= eSharedNode;
+  mStateFlags |= eSharedNode;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // XULTreeItemAccessibleBase: nsISupports implementation
 
 NS_IMPL_CYCLE_COLLECTION_INHERITED_1(XULTreeItemAccessibleBase, Accessible,
                                      mTree)
 
--- a/accessible/src/xul/XULTreeGridAccessible.cpp
+++ b/accessible/src/xul/XULTreeGridAccessible.cpp
@@ -458,17 +458,17 @@ XULTreeGridCellAccessible::
   XULTreeGridCellAccessible(nsIContent* aContent, DocAccessible* aDoc,
                             XULTreeGridRowAccessible* aRowAcc,
                             nsITreeBoxObject* aTree, nsITreeView* aTreeView,
                             int32_t aRow, nsITreeColumn* aColumn) :
   LeafAccessible(aContent, aDoc), xpcAccessibleTableCell(this), mTree(aTree),
   mTreeView(aTreeView), mRow(aRow), mColumn(aColumn)
 {
   mParent = aRowAcc;
-  mFlags |= eSharedNode;
+  mStateFlags |= eSharedNode;
 
   NS_ASSERTION(mTreeView, "mTreeView is null");
 
   int16_t type = -1;
   mColumn->GetType(&type);
   if (type == nsITreeColumn::TYPE_CHECKBOX)
     mTreeView->GetCellValue(mRow, mColumn, mCachedTextEquiv);
   else
--- a/accessible/tests/mochitest/attributes/test_obj.html
+++ b/accessible/tests/mochitest/attributes/test_obj.html
@@ -95,16 +95,19 @@ https://bugzilla.mozilla.org/show_bug.cg
       // html
       testAttrs("radio", {"checkable" : "true"}, true); 
       testAttrs("checkbox", {"checkable" : "true"}, true); 
       testAttrs("draggable", {"draggable" : "true"}, true);
       testAttrs("th1", { "abbr": "SS#" }, true);
       testAttrs("th2", { "abbr": "SS#" }, true);
       testAttrs("th2", { "axis": "social" }, true);
 
+      // don't barf on an empty abbr element.
+      testAbsentAttrs("th3", { "abbr": "" }, true);
+
       // application accessible
       if (WIN) {
         var gfxInfo = Components.classes["@mozilla.org/gfx/info;1"].
           getService(Components.interfaces.nsIGfxInfo);
         var attrs = {
           "D2D": (gfxInfo.D2DEnabled ? "true" : "false")
         }
         testAttrs(getApplicationAccessible(), attrs, false);
@@ -149,16 +152,21 @@ https://bugzilla.mozilla.org/show_bug.cg
      title="Add test coverage for tablist as implicit live region">
     Mozilla Bug 663136
   </a>
   <a target="_blank"
      href="https://bugzilla.mozilla.org/show_bug.cgi?id=563862"
      title="Expand support for nsIAccessibleEvent::OBJECT_ATTRIBUTE_CHANGE">
     Mozilla Bug 563862
   </a>
+  <a target="_blank"
+     href="https://bugzilla.mozilla.org/show_bug.cgi?id=819303"
+     title="crash in nsTextEquivUtils::AppendTextEquivFromTextContent">
+    Mozilla Bug 819303
+  </a>
   <p id="display"></p>
   <div id="content" style="display: none"></div>
   <pre id="test">
   </pre>
 
   <!-- aria -->
   <div id="atomic" aria-atomic="true"></div>
   <div id="autocomplete" role="textbox" aria-autocomplete="true"></div>
@@ -206,16 +214,17 @@ https://bugzilla.mozilla.org/show_bug.cg
   <!-- html -->
   <input id="radio" type="radio"/>
   <input id="checkbox" type="checkbox"/>
   <div id="draggable" draggable="true">Draggable div</div>
   <table>
     <tr>
       <th id="th1"><abbr title="Social Security Number">SS#</abbr></th>
       <th id="th2" abbr="SS#" axis="social">Social Security Number</th>
+      <th id="th3"><abbr></abbr></th>
     </tr>
   </table>
 
   <ul>
     <li id="listitem">item
   </ul>
 
   <!-- experimental aria -->
--- a/b2g/app/b2g.js
+++ b/b2g/app/b2g.js
@@ -229,26 +229,35 @@ pref("ui.windowframe", "#efebe7");
 // replace newlines with spaces on paste into single-line text boxes
 pref("editor.singleLine.pasteNewlines", 2);
 
 // threshold where a tap becomes a drag, in 1/240" reference pixels
 // The names of the preferences are to be in sync with nsEventStateManager.cpp
 pref("ui.dragThresholdX", 25);
 pref("ui.dragThresholdY", 25);
 
-// Layers Acceleration
+// Layers Acceleration.  We can only have nice things on gonk, because
+// they're not maintained anywhere else.
+#ifndef MOZ_WIDGET_GONK
+pref("dom.ipc.tabs.disabled", true);
+pref("layers.offmainthreadcomposition.enabled", false);
+pref("layers.offmainthreadcomposition.animate-opacity", false);
+pref("layers.offmainthreadcomposition.animate-transform", false);
+pref("layers.offmainthreadcomposition.throttle-animations", false);
+pref("layers.async-video.enabled", false);
+#else
+pref("dom.ipc.tabs.disabled", false);
+pref("layers.offmainthreadcomposition.enabled", true);
 pref("layers.acceleration.disabled", false);
-#ifndef XP_WIN
-//TODO: turn this on for Windows in bug 808016
-pref("layers.offmainthreadcomposition.enabled", true);
-#endif
 pref("layers.offmainthreadcomposition.animate-opacity", true);
 pref("layers.offmainthreadcomposition.animate-transform", true);
+pref("layers.offmainthreadcomposition.throttle-animations", true);
 pref("layers.async-video.enabled", true);
 pref("layers.async-pan-zoom.enabled", true);
+#endif
 
 // Web Notifications
 pref("notification.feature.enabled", true);
 
 // IndexedDB
 pref("indexedDB.feature.enabled", true);
 pref("dom.indexedDB.warningQuota", 5);
 
@@ -374,32 +383,32 @@ pref("browser.link.open_newwindow.restri
 // Enable browser frames (including OOP, except on Windows, where it doesn't
 // work), but make in-process browser frames the default.
 pref("dom.mozBrowserFramesEnabled", true);
 
 // Enable a (virtually) unlimited number of mozbrowser processes.
 // We'll run out of PIDs on UNIX-y systems before we hit this limit.
 pref("dom.ipc.processCount", 100000);
 
-pref("dom.ipc.tabs.disabled", false);
 pref("dom.ipc.browser_frames.oop_by_default", false);
 
 // Temporary permission hack for WebSMS
 pref("dom.sms.enabled", true);
 pref("dom.sms.strict7BitEncoding", false); // Disabled by default.
 
 // Temporary permission hack for WebContacts
 pref("dom.mozContacts.enabled", true);
 
 // WebAlarms
 pref("dom.mozAlarms.enabled", true);
 
 // NetworkStats
 #ifdef MOZ_B2G_RIL
 pref("dom.mozNetworkStats.enabled", true);
+pref("ril.lastKnownMcc", 724);
 #endif
 
 // WebSettings
 pref("dom.mozSettings.enabled", true);
 pref("dom.mozPermissionSettings.enabled", true);
 
 // controls if we want camera support
 pref("device.camera.enabled", true);
--- a/b2g/app/nsBrowserApp.cpp
+++ b/b2g/app/nsBrowserApp.cpp
@@ -163,20 +163,16 @@ static int do_main(int argc, char* argv[
 
   return XRE_main(argc, argv, &sAppData, 0);
 }
 
 int main(int argc, char* argv[])
 {
   char exePath[MAXPATHLEN];
 
-#if defined(MOZ_X11)
-  putenv("MOZ_USE_OMTC=1");
-#endif
-
   nsresult rv = mozilla::BinaryPath::Get(argv[0], exePath);
   if (NS_FAILED(rv)) {
     Output("Couldn't calculate the application directory.\n");
     return 255;
   }
 
   char *lastSlash = strrchr(exePath, XPCOM_FILE_PATH_SEPARATOR[0]);
   if (!lastSlash || ((lastSlash - exePath) + sizeof(XPCOM_DLL) + 1 > MAXPATHLEN))
--- a/b2g/chrome/content/settings.js
+++ b/b2g/chrome/content/settings.js
@@ -65,17 +65,17 @@ SettingsListener.observe('audio.volume.m
 });
 
 let audioChannelSettings = [];
 
 if ("nsIAudioManager" in Ci) {
   const nsIAudioManager = Ci.nsIAudioManager;
   audioChannelSettings = [
     // settings name, max value, apply to stream types
-    ['audio.volume.content', 15, [nsIAudioManager.STREAM_TYPE_SYSTEM, nsIAudioManager.STREAM_TYPE_MUSIC, nsIAudioManager.STREAM_TYPE_FM]],
+    ['audio.volume.content', 15, [nsIAudioManager.STREAM_TYPE_SYSTEM, nsIAudioManager.STREAM_TYPE_MUSIC]],
     ['audio.volume.notification', 15, [nsIAudioManager.STREAM_TYPE_RING, nsIAudioManager.STREAM_TYPE_NOTIFICATION]],
     ['audio.volume.alarm', 15, [nsIAudioManager.STREAM_TYPE_ALARM]],
     ['audio.volume.telephony', 5, [nsIAudioManager.STREAM_TYPE_VOICE_CALL]],
     ['audio.volume.bt_sco', 15, [nsIAudioManager.STREAM_TYPE_BLUETOOTH_SCO]],
   ];
 }
 
 for each (let [setting, maxValue, streamTypes] in audioChannelSettings) {
--- a/b2g/chrome/content/shell.js
+++ b/b2g/chrome/content/shell.js
@@ -102,16 +102,19 @@ var shell = {
       }
     } catch(e) { }
 
     // Bail if there isn't a valid crashID.
     if (!crashID) {
       return;
     }
 
+    // purge the queue.
+    this.CrashSubmit.pruneSavedDumps();
+
     try {
       // Check if we should automatically submit this crash.
       if (Services.prefs.getBoolPref("app.reportCrashes")) {
         this.submitCrash(crashID);
       }
     } catch (e) { }
 
     // Let Gaia notify the user of the crash.
@@ -130,17 +133,17 @@ var shell = {
     }
 
     Services.obs.addObserver(function observer(subject, topic, state) {
       let network = subject.QueryInterface(Ci.nsINetworkInterface);
       if (network.state == Ci.nsINetworkInterface.NETWORK_STATE_CONNECTED
           && network.type == Ci.nsINetworkInterface.NETWORK_TYPE_WIFI) {
         shell.CrashSubmit.submit(aCrashID);
 
-        // purge the queue.
+        // submit the pending queue.
         let pending = shell.CrashSubmit.pendingIDs();
         for (let crashid of pending) {
           shell.CrashSubmit.submit(crashid);
         }
 
         Services.obs.removeObserver(observer, topic);
       }
     }, "network-interface-state-changed", false);
--- a/b2g/config/mozconfigs/ics_armv7a_gecko/nightly
+++ b/b2g/config/mozconfigs/ics_armv7a_gecko/nightly
@@ -1,14 +1,15 @@
 . "$topsrcdir/b2g/config/mozconfigs/common"
 
 mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-b2g
 
 ac_add_options --enable-application=b2g
 ac_add_options --enable-b2g-camera
+ac_add_options --enable-updater
 
 ac_add_options --target=arm-linux-androideabi
 ac_add_options --with-gonk="$topsrcdir/gonk-toolchain"
 export TOOLCHAIN_HOST=linux-x86
 export GONK_PRODUCT=generic
 ac_add_options --with-gonk-toolchain-prefix="$topsrcdir/gonk-toolchain/prebuilt/$TOOLCHAIN_HOST/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-"
 ac_add_options --disable-elf-hack
 ac_add_options --enable-debug-symbols
--- a/b2g/config/otoro/config.json
+++ b/b2g/config/otoro/config.json
@@ -1,34 +1,33 @@
 {
     "config_version": 1,
     "tooltool_manifest": "releng-otoro.tt",
     "mock_target": "mozilla-centos6-i386",
     "mock_packages": ["ccache", "make", "bison", "flex", "gcc", "g++", "mpfr", "zlib-devel", "ncurses-devel", "zip", "autoconf213", "glibc-static", "perl-Digest-SHA", "wget", "alsa-lib", "atk", "cairo", "dbus-glib", "fontconfig", "freetype", "glib2", "gtk2", "libXRender", "libXt", "pango", "mozilla-python27-mercurial", "openssh-clients", "nss-devel"],
     "mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
     "build_targets": [],
     "upload_files": [
-        "{objdir}/dist/b2g-update/*.mar",
-        "{objdir}/dist/b2g-*.tar.gz",
         "{objdir}/dist/b2g-*.crashreporter-symbols.zip",
         "{workdir}/sources.xml"
     ],
     "zip_files": [
         ["{workdir}/out/target/product/otoro/*.img", "out/target/product/otoro/"],
         "{workdir}/boot.img",
         "{workdir}/flash.sh",
         "{workdir}/load-config.sh",
         "{workdir}/.config",
         "{workdir}/sources.xml"
     ],
     "env": {
         "VARIANT": "user",
         "MOZILLA_OFFICIAL": "1",
         "B2GUPDATER": "1"
     },
+    "gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
     "gaia": {
         "vcs": "hgtool",
         "repo": "http://hg.mozilla.org/integration/gaia-nightly",
         "l10n": {
             "vcs": "hgtool",
             "root": "http://hg.mozilla.org/gaia-l10n"
         }
     }
--- a/b2g/config/otoro/releng-otoro.tt
+++ b/b2g/config/otoro/releng-otoro.tt
@@ -1,12 +1,12 @@
 [
 {
-"size": 868355892,
-"digest": "0ccae39ee8910947fe3cf51fa3a45e820d2ff11571f6ccec29d9b3e5ae7f7709c1ad657210fbfea98baadd032c3d6a58e00ddbb2e93acafd751089869a72fed6",
+"size": 895408640,
+"digest": "fc5be04b9b8365cd65fa8e66f4686bf0da8e34abb16ee618dd069469c9d9c9c3495562ebfcd21a2beadb27d59d6c011781188b9038ffebfd3e85cdd264f0aac3",
 "algorithm": "sha512",
 "filename": "gonk.tar.xz"
 },
 {
 "size": 4139008,
 "digest": "b1eac90cebe52708d512bbc293c507da9d93bc8c6a78cbbbd78cc9b7beb2cd335bef9bf8e4bf5a9dc38521f7080d29a743626f9e4af6c42ec211db22dc9d0fda",
 "algorithm": "sha512",
 "filename": "boot.img"
--- a/b2g/config/otoro/sources.xml
+++ b/b2g/config/otoro/sources.xml
@@ -2,107 +2,108 @@
   <!-- This is only a record of which revisions were pulled to generate the
        gonk.tar.xz snapshot referred to by releng-otoro.tt -->
 
   <remote fetch="https://android.googlesource.com/" name="aosp"/>
   <remote fetch="git://github.com/mozilla-b2g/" name="b2g"/>
   <remote fetch="git://github.com/mozilla/" name="mozilla"/>
   <remote fetch="git://codeaurora.org/" name="caf"/>
   <remote fetch="git://android.git.linaro.org/" name="linaro"/>
+  <remote fetch="https://git.mozilla.org" name="mozillaorg"/>
   <default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
 
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="273ba23d5c6c9f6a34995a3cc429804d1449ca9f">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2f4377622f4c40275546c7816c0d4b21e800b4c6"/>
+  <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="654358494ba601a46ef9838debc95417ae464cc6"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="32106d4ea635ebe17a1610b643b398db639b8b97"/>
-  <project name="librecovery" path="librecovery" remote="b2g" revision="b7911c064a71a5c18e2c92f869f6364a798b46cd"/>
+  <project name="librecovery" path="librecovery" remote="b2g" revision="e1bd90051c9e937221eb1f91c94e3cde747311a7"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="6ee1f8987ef36d688f97064c003ad57849dfadf2"/>
 
   <!-- Stock Android things -->
-  <!-- Information: platform/abi/cpp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
+  <!-- Information: platform/abi/cpp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <!-- Information: platform/bionic is tagged with M8960AAAAANLYA100715A --><project name="platform/bionic" path="bionic" revision="cd5dfce80bc3f0139a56b58aca633202ccaee7f8"/>
   <!-- Information: platform/bootable/recovery is tagged with M8960AAAAANLYA100715A --><project name="platform/bootable/recovery" path="bootable/recovery" revision="e0a9ac010df3afaa47ba107192c05ac8b5516435"/>
   <!-- Information: platform/development is tagged with M8960AAAAANLYA100715A --><project name="platform/development" path="development" revision="a384622f5fcb1d2bebb9102591ff7ae91fe8ed2d"/>
   <!-- Information: device/common is tagged with M8960AAAAANLYA1005304 --><project name="device/common" path="device/common" revision="7c65ea240157763b8ded6154a17d3c033167afb7"/>
   <!-- Information: device/sample is tagged with M8960AAAAANLYA100715A --><project name="device/sample" path="device/sample" revision="c328f3d4409db801628861baa8d279fb8855892f"/>
-  <!-- Information: platform/external/apache-http is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/apache-http" path="external/apache-http" revision="6c9d8c58d3ed710f87c26820d903bb8aad81754f"/>
+  <!-- Information: platform/external/apache-http is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/apache-http" path="external/apache-http" revision="6c9d8c58d3ed710f87c26820d903bb8aad81754f"/>
   <!-- Information: platform/external/bluetooth/bluez is tagged with M76XXUSNEKNLYA2040 --><project name="platform/external/bluetooth/bluez" path="external/bluetooth/bluez" revision="1023c91c66e9c3bd1132480051993bf7827770f6"/>
-  <!-- Information: platform/external/bluetooth/glib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/bluetooth/glib" path="external/bluetooth/glib" revision="c6b49241cc1a8950723a5f74f8f4b4f4c3fa970e"/>
+  <!-- Information: platform/external/bluetooth/glib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/bluetooth/glib" path="external/bluetooth/glib" revision="c6b49241cc1a8950723a5f74f8f4b4f4c3fa970e"/>
   <!-- Information: platform/external/bluetooth/hcidump is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/bluetooth/hcidump" path="external/bluetooth/hcidump" revision="02b1eb24fbb3d0135a81edb4a2175b1397308d7d"/>
-  <!-- Information: platform/external/bsdiff is tagged with A8064AAAAANLYA1334 --><project name="platform/external/bsdiff" path="external/bsdiff" revision="81872540236d9bb15cccf963d05b9de48baa5375"/>
-  <!-- Information: platform/external/bzip2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/bzip2" path="external/bzip2" revision="048dacdca43eed1534689ececcf2781c63e1e4ba"/>
+  <!-- Information: platform/external/bsdiff is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/bsdiff" path="external/bsdiff" revision="81872540236d9bb15cccf963d05b9de48baa5375"/>
+  <!-- Information: platform/external/bzip2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/bzip2" path="external/bzip2" revision="048dacdca43eed1534689ececcf2781c63e1e4ba"/>
   <!-- Information: platform/external/dbus is tagged with M8960AAAAANLYA100715A --><project name="platform/external/dbus" path="external/dbus" revision="c7517b6195dc6926728352113e6cc335da3f9c9e"/>
   <!-- Information: platform/external/dhcpcd is tagged with M8960AAAAANLYA100715A --><project name="platform/external/dhcpcd" path="external/dhcpcd" revision="1e00fb67022d0921af0fead263f81762781b9ffa"/>
-  <!-- Information: platform/external/dnsmasq is tagged with A8064AAAAANLYA1334 --><project name="platform/external/dnsmasq" path="external/dnsmasq" revision="f621afad94df46204c25fc2593a19d704d2637f5"/>
-  <!-- Information: platform/external/e2fsprogs is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="d5f550bb2f556c5d287f7c8d2b77223654bcec37"/>
-  <!-- Information: platform/external/expat is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
-  <!-- Information: platform/external/fdlibm is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
-  <!-- Information: platform/external/flac is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
-  <!-- Information: platform/external/freetype is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
-  <!-- Information: platform/external/giflib is tagged with A8064AAAAANLYA1334 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
-  <!-- Information: platform/external/gtest is tagged with android-4.2_r1 --><project name="platform/external/gtest" path="external/gtest" remote="linaro" revision="344e5f3db17615cc853073a02968a603efd39109"/>
-  <!-- Information: platform/external/harfbuzz is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/harfbuzz" path="external/harfbuzz" revision="116610d63a859521dacf00fb6818ee9ab2e666f6"/>
-  <!-- Information: platform/external/icu4c is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
-  <!-- Information: platform/external/iptables is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
-  <!-- Information: platform/external/jhead is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
+  <!-- Information: platform/external/dnsmasq is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/dnsmasq" path="external/dnsmasq" revision="f621afad94df46204c25fc2593a19d704d2637f5"/>
+  <!-- Information: platform/external/e2fsprogs is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="d5f550bb2f556c5d287f7c8d2b77223654bcec37"/>
+  <!-- Information: platform/external/expat is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
+  <!-- Information: platform/external/fdlibm is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
+  <!-- Information: platform/external/flac is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
+  <!-- Information: platform/external/freetype is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
+  <!-- Information: platform/external/giflib is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
+  <!-- Information: platform/external/gtest is tagged with android-4.2.1_r1 --><project name="platform/external/gtest" path="external/gtest" remote="linaro" revision="344e5f3db17615cc853073a02968a603efd39109"/>
+  <!-- Information: platform/external/harfbuzz is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/harfbuzz" path="external/harfbuzz" revision="116610d63a859521dacf00fb6818ee9ab2e666f6"/>
+  <!-- Information: platform/external/icu4c is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
+  <!-- Information: platform/external/iptables is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
+  <!-- Information: platform/external/jhead is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
   <!-- Information: platform/external/jpeg is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/jpeg" path="external/jpeg" revision="a62e464d672a4623233180e4023034bf825f066e"/>
-  <!-- Information: platform/external/libgsm is tagged with A8064AAAAANLYA1334 --><project name="platform/external/libgsm" path="external/libgsm" revision="5e4516958690b9a1b2c98f88eeecba3edd2dbda4"/>
-  <!-- Information: platform/external/liblzf is tagged with A8064AAAAANLYA1334 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
-  <!-- Information: platform/external/libnfc-nxp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="3a912b065a31a72c63ad56ac224cfeaa933423b6"/>
-  <!-- Information: platform/external/libnl-headers is tagged with A8064AAAAANLYA1334 --><project name="platform/external/libnl-headers" path="external/libnl-headers" revision="6ccf7349d61f73ac26a0675d735d903ab919c658"/>
-  <!-- Information: platform/external/libphonenumber is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/libphonenumber" path="external/libphonenumber" revision="8d22c9a05eda1935c6dc27d188158e6ee38dc016"/>
+  <!-- Information: platform/external/libgsm is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/libgsm" path="external/libgsm" revision="5e4516958690b9a1b2c98f88eeecba3edd2dbda4"/>
+  <!-- Information: platform/external/liblzf is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
+  <!-- Information: platform/external/libnfc-nxp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="3a912b065a31a72c63ad56ac224cfeaa933423b6"/>
+  <!-- Information: platform/external/libnl-headers is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/libnl-headers" path="external/libnl-headers" revision="6ccf7349d61f73ac26a0675d735d903ab919c658"/>
+  <!-- Information: platform/external/libphonenumber is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libphonenumber" path="external/libphonenumber" revision="8d22c9a05eda1935c6dc27d188158e6ee38dc016"/>
   <!-- Information: platform/external/libpng is tagged with M8960AAAAANLYA100715A --><project name="platform/external/libpng" path="external/libpng" revision="9c3730f0efa69f580f03463c237cd928f3196404"/>
-  <!-- Information: platform/external/libvpx is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/libvpx" path="external/libvpx" revision="3a40da0d96da5c520e7707aa14f48a80956e20d7"/>
+  <!-- Information: platform/external/libvpx is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libvpx" path="external/libvpx" revision="3a40da0d96da5c520e7707aa14f48a80956e20d7"/>
   <!-- Information: platform/external/llvm is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/llvm" path="external/llvm" revision="bff5923831940309f7d8ddbff5826ca6ed2dc050"/>
   <!-- Information: platform/external/mksh is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/mksh" path="external/mksh" revision="ec646e8f5e7dac9a77d1de549c6ed92c04d0cd4b"/>
   <project name="platform_external_opensans" path="external/opensans" remote="b2g" revision="b5b4c226ca1d71e936153cf679dda6d3d60e2354"/>
   <!-- Information: platform/external/openssl is tagged with AU_LINUX_ANDROID_ICS.04.00.04.00.110 --><project name="platform/external/openssl" path="external/openssl" revision="27d333cce9a31c806b4bfa042925f045c727aecd"/>
-  <!-- Information: platform/external/protobuf is tagged with A8064AAAAANLYA1334 --><project name="platform/external/protobuf" path="external/protobuf" revision="e217977611c52bccde7f7c78e1d3c790c6357431"/>
-  <!-- Information: platform/external/safe-iop is tagged with A8064AAAAANLYA1334 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
+  <!-- Information: platform/external/protobuf is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/protobuf" path="external/protobuf" revision="e217977611c52bccde7f7c78e1d3c790c6357431"/>
+  <!-- Information: platform/external/safe-iop is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
   <project name="screencap-gonk" path="external/screencap-gonk" remote="b2g" revision="e6403c71e9eca8cb943739d5a0a192deac60fc51"/>
   <!-- Information: platform/external/skia is tagged with M8960AAAAANLYA100715A --><project name="platform/external/skia" path="external/skia" revision="7d90c85f2c0e3b747f7c7eff8bc9253b0063b439"/>
   <!-- Information: platform/external/sonivox is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/sonivox" path="external/sonivox" revision="7c967779dfc61ac1f346e972de91d4bfce7dccbb"/>
-  <!-- Information: platform/external/speex is tagged with A8064AAAAANLYA1334 --><project name="platform/external/speex" path="external/speex" revision="ebe6230a7f7c69f5a4389f2b09b7b19ef9e94f32"/>
+  <!-- Information: platform/external/speex is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/speex" path="external/speex" revision="ebe6230a7f7c69f5a4389f2b09b7b19ef9e94f32"/>
   <project name="platform/external/sqlite" path="external/sqlite" revision="fb30e613139b8836fdc8e81e166cf3a76e5fa17f"/>
-  <!-- Information: platform/external/stlport is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/stlport" path="external/stlport" revision="a6734e0645fce81c9610de0488b729207bfa576e"/>
-  <!-- Information: platform/external/strace is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
-  <!-- Information: platform/external/tagsoup is tagged with A8064AAAAANLYA1334 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
+  <!-- Information: platform/external/stlport is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/stlport" path="external/stlport" revision="a6734e0645fce81c9610de0488b729207bfa576e"/>
+  <!-- Information: platform/external/strace is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
+  <!-- Information: platform/external/tagsoup is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
   <!-- Information: platform/external/tinyalsa is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/tinyalsa" path="external/tinyalsa" revision="06cc244ee512c1352215e543615738bc8ac82814"/>
-  <!-- Information: platform/external/tremolo is tagged with A8064AAAAANLYA1334 --><project name="platform/external/tremolo" path="external/tremolo" revision="25bd78d2392dbdc879ae53382cde9d019f79cf6f"/>
+  <!-- Information: platform/external/tremolo is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/tremolo" path="external/tremolo" revision="25bd78d2392dbdc879ae53382cde9d019f79cf6f"/>
   <project name="unbootimg" path="external/unbootimg" remote="b2g" revision="9464623d92eb8668544916dc5a8f4f6337d0bc08"/>
-  <!-- Information: platform/external/webp is tagged with A8064AAAAANLYA1334 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
-  <!-- Information: platform/external/webrtc is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/webrtc" path="external/webrtc" revision="137024dc8a2e9251a471e20518a9c3ae06f81f23"/>
-  <!-- Information: platform/external/wpa_supplicant is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/wpa_supplicant" path="external/wpa_supplicant" revision="a01d37870bbf9892d43e792e5de0683ca41c5497"/>
+  <!-- Information: platform/external/webp is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
+  <!-- Information: platform/external/webrtc is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/webrtc" path="external/webrtc" revision="137024dc8a2e9251a471e20518a9c3ae06f81f23"/>
+  <!-- Information: platform/external/wpa_supplicant is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/wpa_supplicant" path="external/wpa_supplicant" revision="a01d37870bbf9892d43e792e5de0683ca41c5497"/>
   <!-- Information: platform/external/hostap is tagged with M8960AAAAANLYA1047 --><project name="platform/external/hostap" path="external/hostap" revision="bf04b0faadbdeb4b7943f2e2c4c5aa59df872bb1"/>
-  <!-- Information: platform/external/zlib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/zlib" path="external/zlib" revision="f96a1d1ebfdf1cd582210fd09c23d8f59e0ae094"/>
-  <!-- Information: platform/external/yaffs2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/yaffs2" path="external/yaffs2" revision="0afa916204c664b3114429637b63af1321a0aeca"/>
+  <!-- Information: platform/external/zlib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/zlib" path="external/zlib" revision="f96a1d1ebfdf1cd582210fd09c23d8f59e0ae094"/>
+  <!-- Information: platform/external/yaffs2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/yaffs2" path="external/yaffs2" revision="0afa916204c664b3114429637b63af1321a0aeca"/>
   <!-- Information: platform/frameworks/base is tagged with M76XXUSNEKNLYA2040 --><project name="platform/frameworks/base" path="frameworks/base" revision="eb2bc75803ca179353c24c364a9c8a8ce23e8b78"/>
-  <!-- Information: platform/frameworks/opt/emoji is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="a95d8db002770469d72dfaf59ff37ac96db29a87"/>
+  <!-- Information: platform/frameworks/opt/emoji is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="a95d8db002770469d72dfaf59ff37ac96db29a87"/>
   <!-- Information: platform/frameworks/support is tagged with M8960AAAAANLYA1005304 --><project name="platform/frameworks/support" path="frameworks/support" revision="27208692b001981f1806f4f396434f4eac78b909"/>
   <!-- Information: platform/hardware/libhardware is tagged with M8960AAAAANLYA1049B --><project name="platform/hardware/libhardware" path="hardware/libhardware" revision="4a619901847621f8a7305edf42dd07347a140484"/>
   <!-- Information: platform/hardware/libhardware_legacy is tagged with M8960AAAAANLYA153611 --><project name="platform/hardware/libhardware_legacy" path="hardware/libhardware_legacy" revision="87b4d7afa8f854b445e2d0d95091f6f6069f2b30"/>
   <!-- Information: platform/libcore is tagged with M8960AAAAANLYA100715A --><project name="platform/libcore" path="libcore" revision="30841f9fba9ccd5c54f4f079f495994db97f283e"/>
-  <!-- Information: platform/ndk is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/ndk" path="ndk" revision="9f555971e1481854d5b4dc11b3e6af9fff4f241f"/>
+  <!-- Information: platform/ndk is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/ndk" path="ndk" revision="9f555971e1481854d5b4dc11b3e6af9fff4f241f"/>
   <!-- Information: platform/prebuilt is tagged with M8960AAAAANLYA1005304 --><project name="platform/prebuilt" path="prebuilt" revision="447ea790fcc957dde59730ecc2a65ca263bdc733"/>
   <!-- Information: platform/system/bluetooth is tagged with M8960AAAAANLYA100703 --><project name="platform/system/bluetooth" path="system/bluetooth" revision="7772cad4823f1f427ce1d4df84a55982386d6d18"/>
   <!-- Information: platform/system/core is tagged with M76XXUSNEKNLYA2040 --><project name="platform/system/core" path="system/core" revision="bf1970408676ce570b8f4dc3efa038e47552137f"/>
   <!-- Information: platform/system/extras is tagged with M8960AAAAANLYA1005304 --><project name="platform/system/extras" path="system/extras" revision="01db6c1254e1407740a543f24317fc540fc4c049"/>
   <!-- Information: platform/system/media is tagged with M8960AAAAANLYA1005304 --><project name="platform/system/media" path="system/media" revision="7f71c7fd362bbd992ff2e0e80f7af5859ad116ad"/>
   <!-- Information: platform/system/netd is tagged with M8960AAAAANLYA1049 --><project name="platform/system/netd" path="system/netd" revision="306e765248e3900041bf2737e9f57b1b5694a4ce"/>
   <!-- Information: platform/system/vold is tagged with M8960AAAAANLYA100715A --><project name="platform/system/vold" path="system/vold" revision="99fff257d53cc045d1460841edca5d901dacfcf5"/>
 
   <!-- Otoro/Unagi specific things -->
   <!-- Information: device/qcom/common is tagged with M8960AAAAANLYA100715A --><project name="device/qcom/common" path="device/qcom/common" revision="b9cdab8e1e1a215a8c65b8d5816f666bec7be205"/>
   <!-- Information: platform/vendor/qcom/msm7627a is tagged with M8960AAAAANLYA100715A --><project name="platform/vendor/qcom/msm7627a" path="device/qcom/msm7627a" revision="d920a502ba17cf4d716f8b1a615f07e796b0501a"/>
   <project name="android-device-otoro" path="device/qcom/otoro" remote="b2g" revision="e3e99b264dd0230108aa78f2b653db4ce0e494fb"/>
-  <project name="android-device-unagi" path="device/qcom/unagi" remote="b2g" revision="f8ca54267ed2ceabefadf96b6953814ac89c5056"/>
+  <project name="android-device-unagi" path="device/qcom/unagi" remote="b2g" revision="e74925a10e11a4f0bc56158c248bd20c521d3dd7"/>
   <project name="codeaurora_kernel_msm" path="kernel" remote="b2g" revision="0a01247e4b0880f93424b27251cd3a1f6b19dbb2"/>
   <!-- Information: platform/hardware/qcom/camera is tagged with M76XXUSNEKNLYA2040 --><project name="platform/hardware/qcom/camera" path="hardware/qcom/camera" revision="1acf77a75e30f3fc8b1eed2057c97adf1cb1633f"/>
   <project name="hardware_qcom_display" path="hardware/qcom/display" remote="b2g" revision="6405d30f2fac7d8a1f2cb17b99fb7dd0a8bcfdac"/>
   <!-- Information: platform/hardware/qcom/media is tagged with M8960AAAAANLYA100715A --><project name="platform/hardware/qcom/media" path="hardware/qcom/media" revision="552c3ddb7174a01f3508782d40c4d8c845ab441a"/>
   <!-- Information: platform/hardware/qcom/gps is tagged with M8960AAAAANLYA100705 --><project name="platform/hardware/qcom/gps" path="hardware/qcom/gps" revision="23d5707b320d7fc69f8ba3b7d84d78a1c5681708"/>
-  <!-- Information: platform/hardware/msm7k is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/hardware/msm7k" path="hardware/msm7k" revision="8892d46805c5639b55dd07547745c5180da861e7"/>
+  <!-- Information: platform/hardware/msm7k is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/hardware/msm7k" path="hardware/msm7k" revision="8892d46805c5639b55dd07547745c5180da861e7"/>
   <!-- Information: platform/vendor/qcom-opensource/omx/mm-core is tagged with M8960AAAAANLYA100715A --><project name="platform/vendor/qcom-opensource/omx/mm-core" path="vendor/qcom/opensource/omx/mm-core" revision="ab17ac9a074b4bb69986a8436336bdfbbaf9cd39"/>
   <!-- Information: platform/hardware/ril is tagged with M76XXUSNEKNLYA1610 --><project name="platform/hardware/ril" path="hardware/ril" remote="caf" revision="fe9a3f63922143b57e79ed570bab2328df8c83a5"/>
-</manifest>
+</manifest>
\ No newline at end of file
--- a/b2g/config/panda-gaia-central/config.json
+++ b/b2g/config/panda-gaia-central/config.json
@@ -1,23 +1,23 @@
 {
     "config_version": 1,
     "tooltool_manifest": "releng-pandaboard.tt",
     "mock_target": "mozilla-centos6-i386",
     "mock_packages": ["ccache", "make", "bison", "flex", "gcc", "g++", "mpfr", "zlib-devel", "ncurses-devel", "zip", "autoconf213", "glibc-static", "perl-Digest-SHA", "wget", "alsa-lib", "atk", "cairo", "dbus-glib", "fontconfig", "freetype", "glib2", "gtk2", "libXRender", "libXt", "pango", "mozilla-python27-mercurial", "openssh-clients", "nss-devel"],
     "mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
-    "build_targets": ["boottarball", "systemtarball", "userdatatarball"],
+    "build_targets": ["boottarball", "systemtarball", "userdatatarball", "package-tests"],
     "upload_files": [
         "{workdir}/out/target/product/panda/*.tar.bz2",
-        "{objdir}/dist/b2g-update/*.mar",
-        "{objdir}/dist/b2g-*.tar.gz",
+        "{workdir}/out/target/product/panda/tests/*.zip",
         "{objdir}/dist/b2g-*.crashreporter-symbols.zip",
         "{srcdir}/b2g/config/panda/README",
         "{workdir}/sources.xml"
     ],
+    "gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
     "gaia": {
         "vcs": "hgtool",
         "repo": "http://hg.mozilla.org/integration/gaia-central",
         "l10n": {
             "vcs": "hgtool",
             "root": "http://hg.mozilla.org/gaia-l10n"
         }
     }
--- a/b2g/config/panda/config.json
+++ b/b2g/config/panda/config.json
@@ -1,23 +1,23 @@
 {
     "config_version": 1,
     "tooltool_manifest": "releng-pandaboard.tt",
     "mock_target": "mozilla-centos6-i386",
     "mock_packages": ["ccache", "make", "bison", "flex", "gcc", "g++", "mpfr", "zlib-devel", "ncurses-devel", "zip", "autoconf213", "glibc-static", "perl-Digest-SHA", "wget", "alsa-lib", "atk", "cairo", "dbus-glib", "fontconfig", "freetype", "glib2", "gtk2", "libXRender", "libXt", "pango", "mozilla-python27-mercurial", "openssh-clients", "nss-devel"],
     "mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
-    "build_targets": ["boottarball", "systemtarball", "userdatatarball"],
+    "build_targets": ["boottarball", "systemtarball", "userdatatarball", "package-tests"],
     "upload_files": [
         "{workdir}/out/target/product/panda/*.tar.bz2",
-        "{objdir}/dist/b2g-update/*.mar",
-        "{objdir}/dist/b2g-*.tar.gz",
+        "{workdir}/out/target/product/panda/tests/*.zip",
         "{objdir}/dist/b2g-*.crashreporter-symbols.zip",
         "{srcdir}/b2g/config/panda/README",
         "{workdir}/sources.xml"
     ],
+    "gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
     "gaia": {
         "vcs": "hgtool",
         "repo": "http://hg.mozilla.org/integration/gaia-nightly",
         "l10n": {
             "vcs": "hgtool",
             "root": "http://hg.mozilla.org/gaia-l10n"
         }
     }
--- a/b2g/config/panda/releng-pandaboard.tt
+++ b/b2g/config/panda/releng-pandaboard.tt
@@ -1,8 +1,8 @@
 [
 {
-"size": 649725280,
-"digest": "9059a4ebdf8d1ead0e9975fb872d95b07bceba1f84453f47a32559f258351ee6f6ff459c2747130603de309586dfaf784e674fd7a558be354f276795d12c273f",
+"size": 676548372,
+"digest": "e94c1ef674d2144ef19bf6b5faa0bc050f2f6e61d5a859c20f0d61a4665cd4587836f2c45dbc3a2b264f94b4da9db7f31d566d6ad21e9e43b90bc3f617508184",
 "algorithm": "sha512",
 "filename": "gonk.tar.xz"
 }
 ]
--- a/b2g/config/panda/sources.xml
+++ b/b2g/config/panda/sources.xml
@@ -9,77 +9,77 @@
   <remote fetch="https://git.mozilla.org" name="mozillaorg"/>
   <default remote="linaro" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
 
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="273ba23d5c6c9f6a34995a3cc429804d1449ca9f">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="9947f535cbe34fe583d122322b077cb0fc0a9ff7"/>
+  <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="654358494ba601a46ef9838debc95417ae464cc6"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="32106d4ea635ebe17a1610b643b398db639b8b97"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="6ee1f8987ef36d688f97064c003ad57849dfadf2"/>
 
   <!-- Stock Android things -->
-  <!-- Information: platform/abi/cpp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
+  <!-- Information: platform/abi/cpp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="c7bab8cb8483e7869eabdbd4add7c9e5beeecc80"/>
   <!-- Information: platform/bootable/recovery is tagged with android-4.0.4_r2.1 --><project name="platform/bootable/recovery" path="bootable/recovery" revision="fadc5ac81d6400ebdd041f7d4ea64021596d6b7d"/>
   <!-- Information: device/common is tagged with android-sdk-adt_r20 --><project name="device/common" path="device/common" revision="7d4526582f88808a3194e1a3b304abb369d2745c"/>
   <!-- Information: device/sample is tagged with android-4.0.4_r2.1 --><project name="device/sample" path="device/sample" revision="ef228b8b377a9663e94be4b1aeb6c2bf7a07d098"/>
-  <!-- Information: platform/external/apache-http is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/apache-http" path="external/apache-http" revision="6c9d8c58d3ed710f87c26820d903bb8aad81754f"/>
+  <!-- Information: platform/external/apache-http is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/apache-http" path="external/apache-http" revision="6c9d8c58d3ed710f87c26820d903bb8aad81754f"/>
   <!-- Information: platform/external/bluetooth/bluez is tagged with android-4.0.4_r2.1 --><project name="platform/external/bluetooth/bluez" path="external/bluetooth/bluez" revision="966afbd88f0bfc325bf80274ad2723c238883fa1"/>
   <!-- Information: platform/external/bluetooth/glib is tagged with android-4.1.1_r6.1 --><project name="platform/external/bluetooth/glib" path="external/bluetooth/glib" revision="1143b9918eab068401b604eb11c3f651f4e38b25"/>
   <!-- Information: platform/external/bluetooth/hcidump is tagged with android-4.1.1_r6.1 --><project name="platform/external/bluetooth/hcidump" path="external/bluetooth/hcidump" revision="7322661808c2006b7848e79e6bb72b37fbcf6710"/>
-  <!-- Information: platform/external/bsdiff is tagged with A8064AAAAANLYA1334 --><project name="platform/external/bsdiff" path="external/bsdiff" revision="81872540236d9bb15cccf963d05b9de48baa5375"/>
+  <!-- Information: platform/external/bsdiff is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/bsdiff" path="external/bsdiff" revision="81872540236d9bb15cccf963d05b9de48baa5375"/>
   <project name="platform/external/busybox" path="external/busybox" remote="linaro" revision="4fa5717aed10a5617c52def848dbd42ec7eca35b"/>
-  <!-- Information: platform/external/bzip2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/bzip2" path="external/bzip2" revision="048dacdca43eed1534689ececcf2781c63e1e4ba"/>
+  <!-- Information: platform/external/bzip2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/bzip2" path="external/bzip2" revision="048dacdca43eed1534689ececcf2781c63e1e4ba"/>
   <!-- Information: platform/external/dbus is tagged with android-4.1.1_r6.1 --><project name="platform/external/dbus" path="external/dbus" revision="537eaff5de9aace3348436166d4cde7adc1e488e"/>
   <!-- Information: platform/external/dhcpcd is tagged with android-sdk-adt_r20 --><project name="platform/external/dhcpcd" path="external/dhcpcd" revision="ddaa48f57b54b2862b3e6dcf18a44c9647f3baaa"/>
-  <!-- Information: platform/external/dnsmasq is tagged with A8064AAAAANLYA1334 --><project name="platform/external/dnsmasq" path="external/dnsmasq" revision="f621afad94df46204c25fc2593a19d704d2637f5"/>
-  <!-- Information: platform/external/expat is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
-  <!-- Information: platform/external/fdlibm is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
-  <!-- Information: platform/external/flac is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
-  <!-- Information: platform/external/freetype is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
-  <!-- Information: platform/external/giflib is tagged with A8064AAAAANLYA1334 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
+  <!-- Information: platform/external/dnsmasq is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/dnsmasq" path="external/dnsmasq" revision="f621afad94df46204c25fc2593a19d704d2637f5"/>
+  <!-- Information: platform/external/expat is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
+  <!-- Information: platform/external/fdlibm is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
+  <!-- Information: platform/external/flac is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
+  <!-- Information: platform/external/freetype is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
+  <!-- Information: platform/external/giflib is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
   <!-- Information: platform/external/gtest is tagged with android-4.2.1_r1 --><project name="platform/external/gtest" path="external/gtest" remote="linaro" revision="344e5f3db17615cc853073a02968a603efd39109"/>
   <!-- Information: platform/external/harfbuzz is tagged with android-sdk-adt_r20 --><project name="platform/external/harfbuzz" path="external/harfbuzz" revision="bae491c03a00757d83ede8d855b7d85d246bde3d"/>
-  <!-- Information: platform/external/icu4c is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
-  <!-- Information: platform/external/iptables is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
-  <!-- Information: platform/external/jhead is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
+  <!-- Information: platform/external/icu4c is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
+  <!-- Information: platform/external/iptables is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
+  <!-- Information: platform/external/jhead is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
   <!-- Information: platform/external/jpeg is tagged with android-4.1.1_r6.1 --><project name="platform/external/jpeg" path="external/jpeg" revision="d4fad7f50f79626455d88523207e05b868819cd8"/>
-  <!-- Information: platform/external/libgsm is tagged with A8064AAAAANLYA1334 --><project name="platform/external/libgsm" path="external/libgsm" revision="5e4516958690b9a1b2c98f88eeecba3edd2dbda4"/>
-  <!-- Information: platform/external/liblzf is tagged with android-4.2.1_r1 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
+  <!-- Information: platform/external/libgsm is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/libgsm" path="external/libgsm" revision="5e4516958690b9a1b2c98f88eeecba3edd2dbda4"/>
+  <!-- Information: platform/external/liblzf is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
   <!-- Information: platform/external/libnfc-nxp is tagged with android-4.0.4_r2.1 --><project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="533c14450e6239cce8acb74f4e4dea2c89f8f219"/>
-  <!-- Information: platform/external/libnl-headers is tagged with android-4.2.1_r1 --><project name="platform/external/libnl-headers" path="external/libnl-headers" revision="6ccf7349d61f73ac26a0675d735d903ab919c658"/>
+  <!-- Information: platform/external/libnl-headers is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/libnl-headers" path="external/libnl-headers" revision="6ccf7349d61f73ac26a0675d735d903ab919c658"/>
   <!-- Information: platform/external/libphonenumber is tagged with android-4.0.4_r2.1 --><project name="platform/external/libphonenumber" path="external/libphonenumber" revision="d470984844c388d6766c3de6ac64e93e00480fc9"/>
   <!-- Information: platform/external/libpng is tagged with android-4.0.4_r2.1 --><project name="platform/external/libpng" path="external/libpng" revision="84d92c718ab9f48faec0f640747c4b6f7a995607"/>
-  <!-- Information: platform/external/libvpx is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/libvpx" path="external/libvpx" revision="3a40da0d96da5c520e7707aa14f48a80956e20d7"/>
+  <!-- Information: platform/external/libvpx is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libvpx" path="external/libvpx" revision="3a40da0d96da5c520e7707aa14f48a80956e20d7"/>
   <!-- Information: platform/external/mksh is tagged with M8960AAAAANLYA1099D --><project name="platform/external/mksh" path="external/mksh" revision="5155f1c7438ef540d7b25eb70aa1639579795b07"/>
   <project name="platform_external_opensans" path="external/opensans" remote="b2g" revision="b5b4c226ca1d71e936153cf679dda6d3d60e2354"/>
   <!-- Information: platform/external/openssl is tagged with android-4.0.4_r2.1 --><project name="platform/external/openssl" path="external/openssl" revision="ce96fb211b9a44bbd7fb5ef7ed0e6c1244045c2e"/>
-  <!-- Information: platform/external/protobuf is tagged with A8064AAAAANLYA1334 --><project name="platform/external/protobuf" path="external/protobuf" revision="e217977611c52bccde7f7c78e1d3c790c6357431"/>
-  <!-- Information: platform/external/safe-iop is tagged with A8064AAAAANLYA1334 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
+  <!-- Information: platform/external/protobuf is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/protobuf" path="external/protobuf" revision="e217977611c52bccde7f7c78e1d3c790c6357431"/>
+  <!-- Information: platform/external/safe-iop is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
   <project name="screencap-gonk" path="external/screencap-gonk" remote="b2g" revision="e6403c71e9eca8cb943739d5a0a192deac60fc51"/>
   <!-- Information: platform/external/skia is tagged with android-4.0.4_r2.1 --><project name="platform/external/skia" path="external/skia" revision="5c67a309e16bffe7013defda8f1217b3ce2420b4"/>
   <!-- Information: platform/external/sonivox is tagged with android-sdk-adt_r20 --><project name="platform/external/sonivox" path="external/sonivox" revision="5f9600971859fe072f31b38a51c38157f5f9b381"/>
-  <!-- Information: platform/external/speex is tagged with A8064AAAAANLYA1334 --><project name="platform/external/speex" path="external/speex" revision="ebe6230a7f7c69f5a4389f2b09b7b19ef9e94f32"/>
+  <!-- Information: platform/external/speex is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/speex" path="external/speex" revision="ebe6230a7f7c69f5a4389f2b09b7b19ef9e94f32"/>
   <!-- Information: platform/external/sqlite is tagged with android-4.0.4_r2.1 --><project name="platform/external/sqlite" path="external/sqlite" revision="c999ff8c12a4cf81cb9ad628f47b2720effba5e5"/>
-  <!-- Information: platform/external/stlport is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/stlport" path="external/stlport" revision="a6734e0645fce81c9610de0488b729207bfa576e"/>
-  <!-- Information: platform/external/strace is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
-  <!-- Information: platform/external/tagsoup is tagged with android-4.2.1_r1 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
+  <!-- Information: platform/external/stlport is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/stlport" path="external/stlport" revision="a6734e0645fce81c9610de0488b729207bfa576e"/>
+  <!-- Information: platform/external/strace is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
+  <!-- Information: platform/external/tagsoup is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
   <!-- Information: platform/external/tinyalsa is tagged with android-4.0.4_r2.1 --><project name="platform/external/tinyalsa" path="external/tinyalsa" revision="495239e683a728957c890c124b239f9b7b8ef5a8"/>
-  <!-- Information: platform/external/tremolo is tagged with A8064AAAAANLYA1334 --><project name="platform/external/tremolo" path="external/tremolo" revision="25bd78d2392dbdc879ae53382cde9d019f79cf6f"/>
-  <!-- Information: platform/external/webp is tagged with A8064AAAAANLYA1334 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
+  <!-- Information: platform/external/tremolo is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/tremolo" path="external/tremolo" revision="25bd78d2392dbdc879ae53382cde9d019f79cf6f"/>
+  <!-- Information: platform/external/webp is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
   <!-- Information: platform/external/webrtc is tagged with android-sdk-adt_r20 --><project name="platform/external/webrtc" path="external/webrtc" revision="4b6dc1ec58105d17dc8c2f550124cc0621dc93b7"/>
-  <!-- Information: platform/external/wpa_supplicant is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/wpa_supplicant" path="external/wpa_supplicant" revision="a01d37870bbf9892d43e792e5de0683ca41c5497"/>
+  <!-- Information: platform/external/wpa_supplicant is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/wpa_supplicant" path="external/wpa_supplicant" revision="a01d37870bbf9892d43e792e5de0683ca41c5497"/>
   <project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="6dd24fc3792d71edccef9b09140f9a44b063a553"/>
   <!-- Information: platform/external/zlib is tagged with android-4.0.4_r2.1 --><project name="platform/external/zlib" path="external/zlib" revision="69e5801bd16a495e1c1666669fe827b1ddb8d56b"/>
   <!-- Information: platform/external/yaffs2 is tagged with android-4.0.4-aah_r1 --><project name="platform/external/yaffs2" path="external/yaffs2" revision="6232e2d5ab34a40d710e4b05ab0ec6e3727804e7"/>
   <!-- Information: platform/frameworks/base is tagged with android-4.0.4_r2.1 --><project name="platform/frameworks/base" path="frameworks/base" revision="df331873c8576e0ae34ae1ee3cc258beed373535"/>
-  <!-- Information: platform/frameworks/opt/emoji is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="a95d8db002770469d72dfaf59ff37ac96db29a87"/>
+  <!-- Information: platform/frameworks/opt/emoji is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="a95d8db002770469d72dfaf59ff37ac96db29a87"/>
   <!-- Information: platform/frameworks/support is tagged with android-4.0.4_r2.1 --><project name="platform/frameworks/support" path="frameworks/support" revision="bfc8e01b7b0d5ea70ce89d0409b72b7f7d540f43"/>
   <!-- Information: platform/hardware/libhardware is tagged with android-4.0.4_r2.1 --><project name="platform/hardware/libhardware" path="hardware/libhardware" revision="a9b677fce432b29ab8f61e13796f34880dc0fe0f"/>
   <!-- Information: platform/hardware/libhardware_legacy is tagged with android-4.0.4_r2.1 --><project name="platform/hardware/libhardware_legacy" path="hardware/libhardware_legacy" revision="153d0f1a27e0a157cabb6ca9d0d88248630f5695"/>
   <!-- Information: platform/hardware/ril is tagged with android-4.0.4_r2.1 --><project name="platform/hardware/ril" path="hardware/ril" revision="300105d1487f5238940c18792b879793826b61f4"/>
   <!-- Information: platform/libcore is tagged with android-4.0.4_r2.1 --><project name="platform/libcore" path="libcore" revision="fc294a48d80d9e2b2ac126edf93ad316f5f6cf72"/>
   <!-- Information: platform/ndk is tagged with android-4.0.4_r2.1 --><project name="platform/ndk" path="ndk" revision="2d77f5a05f60029c981f299b222cfe28db18ccf7"/>
   <!-- Information: platform/prebuilt is tagged with tungsten-bootloader-ics-aah --><project name="platform/prebuilt" path="prebuilt" revision="0e104261b6d33f87e9f86ff4249bcc0306ab278b"/>
   <!-- Information: platform/system/bluetooth is tagged with android-4.0.4_r2.1 --><project name="platform/system/bluetooth" path="system/bluetooth" revision="2588cd802f322650ed737dfb7a10e9ad94064e99"/>
@@ -92,9 +92,9 @@
   <!-- Pandaboard specific things -->
   <project name="android-device-panda" path="device/ti/panda" remote="b2g" revision="63196b48f479c30787863c8ca89456acd4b03910"/>
   <!-- Information: platform/hardware/ti/omap4xxx is tagged with android-4.0.4_r2.1 --><project name="platform/hardware/ti/omap4xxx" path="hardware/ti/omap4xxx" revision="8be8e9a68c96b6cf43c08a58e7ecd7708737c599"/>
   <project name="platform/hardware/ti/wlan" path="hardware/ti/wlan" revision="60dfeb6e4448bfed707946ebca6612980f525e69"/>
   <project name="platform/hardware/ti/wpan" path="hardware/ti/wpan" revision="3ece7d9e08052989401e008bc397dbcd2557cfd0"/>
   <project name="Negatus" path="external/negatus" remote="mozilla" revision="5d5288e7bec67d0a6a29320308cccb1321062b58"/>
   <project name="orangutan" path="external/orangutan" remote="b2g" revision="601280aed7d7f29f1a78496f6fa41bd79c16305c"/>
 
-</manifest>
+</manifest>
\ No newline at end of file
--- a/b2g/config/tooltool-manifests/macosx64/releng.manifest
+++ b/b2g/config/tooltool-manifests/macosx64/releng.manifest
@@ -1,17 +1,17 @@
 [
 {
-"clang_version": "r169139"
+"clang_version": "r169730"
 },
 {
 "size": 47,
 "digest": "2005a41fe97a5e00997063705f39d42b6a43b1cf7ba306cbc7b1513de34cdcd050fc6326efa2107f19ba0cc67914745dbf13154fa748010a93cf072481ef4aaa",
 "algorithm": "sha512",
 "filename": "setup.sh"
 },
 {
-"size": 56158651,
-"digest": "38d718f20a8fa9218e22ade312e724e6c9cdd7c6650e023cfdc21b5505fe7aa3743ae41c0abd717a1bbccec4c4271be2fa82d0e2f96c91e693d70e33b4dc00d6",
+"size": 56115091,
+"digest": "d7188264f28d6f6a84fab9737520cad22fe3d575917a87fc110d0b9a2033617c35da83530ea20553f5c55a996459f750fa2d0c49288c1fb9671f6252a92cf4c9",
 "algorithm": "sha512",
 "filename": "clang.tar.bz2"
 }
 ]
--- a/b2g/config/unagi/config.json
+++ b/b2g/config/unagi/config.json
@@ -2,33 +2,33 @@
     "config_version": 1,
     "tooltool_manifest": "releng-unagi.tt",
     "mock_target": "mozilla-centos6-i386",
     "mock_packages": ["ccache", "make", "bison", "flex", "gcc", "g++", "mpfr", "zlib-devel", "ncurses-devel", "zip", "autoconf213", "glibc-static", "perl-Digest-SHA", "wget", "alsa-lib", "atk", "cairo", "dbus-glib", "fontconfig", "freetype", "glib2", "gtk2", "libXRender", "libXt", "pango", "mozilla-python27-mercurial", "openssh-clients", "nss-devel"],
     "mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
     "build_targets": [],
     "upload_files": [
         "{objdir}/dist/b2g-update/*.mar",
-        "{objdir}/dist/b2g-*.tar.gz",
         "{objdir}/dist/b2g-*.crashreporter-symbols.zip",
         "{workdir}/sources.xml"
     ],
     "zip_files": [
         ["{workdir}/out/target/product/unagi/*.img", "out/target/product/unagi/"],
         "{workdir}/boot.img",
         "{workdir}/flash.sh",
         "{workdir}/load-config.sh",
         "{workdir}/.config",
         "{workdir}/sources.xml"
     ],
     "env": {
         "VARIANT": "user",
         "MOZILLA_OFFICIAL": "1",
         "B2GUPDATER": "1"
     },
+    "gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
     "gaia": {
         "vcs": "hgtool",
         "repo": "http://hg.mozilla.org/integration/gaia-nightly",
         "l10n": {
             "vcs": "hgtool",
             "root": "http://hg.mozilla.org/gaia-l10n"
         }
     }
--- a/b2g/config/unagi/releng-unagi.tt
+++ b/b2g/config/unagi/releng-unagi.tt
@@ -1,14 +1,14 @@
 [
 {
-"size": 805101852,
-"digest": "553e88831f0760ef8de039a037c91499ff9334691f0532835c73a44352750a4911752cf0d5346f5e023f64b2351ed7f49a2a833c27538ddde59ad505f50ab063",
+"size": 832341968,
+"digest": "e2d099677f5f930db0b2c03eaf3812a53f02be0773bdb3bad89b1c387041e920c17b90f041bf70d9c2ab715dd4556503534483d4ebc28fb035f41cd5ebba6a52",
 "algorithm": "sha512",
 "filename": "gonk.tar.xz"
 },
 {
-"size": 8859648,
-"digest": "05d4a99e0f36cd91d1b10a2b558979ea776e9a7e03b8a921af3b0bfc62e2d96cf4faa20586c39885b6f8b25089fe07726794620a3b18c4826a2f71e29d90a8ef",
+"size": 8622080,
+"digest": "7a2bbf0c76f7b7d5e4b89f758f69b5d8bcf08ec579374877de8939ad69883ab8cd842f04fdaa03a4ef9cdf8170f242e0381dd437e969d5212ead6cdd6f79ab50",
 "algorithm": "sha512",
 "filename": "boot.img"
 }
 ]
--- a/b2g/config/unagi/sources.xml
+++ b/b2g/config/unagi/sources.xml
@@ -2,107 +2,108 @@
   <!-- This is only a record of which revisions were pulled to generate the
        gonk.tar.xz snapshot referred to by releng-unagi.tt -->
 
   <remote fetch="https://android.googlesource.com/" name="aosp"/>
   <remote fetch="git://github.com/mozilla-b2g/" name="b2g"/>
   <remote fetch="git://github.com/mozilla/" name="mozilla"/>
   <remote fetch="git://codeaurora.org/" name="caf"/>
   <remote fetch="git://android.git.linaro.org/" name="linaro"/>
+  <remote fetch="https://git.mozilla.org" name="mozillaorg"/>
   <default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
 
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="273ba23d5c6c9f6a34995a3cc429804d1449ca9f">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="aafa9ca4d2e9e755fe9964018a9797eac4ecc7de"/>
+  <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="654358494ba601a46ef9838debc95417ae464cc6"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="32106d4ea635ebe17a1610b643b398db639b8b97"/>
-  <project name="librecovery" path="librecovery" remote="b2g" revision="b7911c064a71a5c18e2c92f869f6364a798b46cd"/>
+  <project name="librecovery" path="librecovery" remote="b2g" revision="e1bd90051c9e937221eb1f91c94e3cde747311a7"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="6ee1f8987ef36d688f97064c003ad57849dfadf2"/>
 
   <!-- Stock Android things -->
-  <!-- Information: platform/abi/cpp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
+  <!-- Information: platform/abi/cpp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <!-- Information: platform/bionic is tagged with M8960AAAAANLYA100715A --><project name="platform/bionic" path="bionic" revision="cd5dfce80bc3f0139a56b58aca633202ccaee7f8"/>
   <!-- Information: platform/bootable/recovery is tagged with M8960AAAAANLYA100715A --><project name="platform/bootable/recovery" path="bootable/recovery" revision="e0a9ac010df3afaa47ba107192c05ac8b5516435"/>
   <!-- Information: platform/development is tagged with M8960AAAAANLYA100715A --><project name="platform/development" path="development" revision="a384622f5fcb1d2bebb9102591ff7ae91fe8ed2d"/>
   <!-- Information: device/common is tagged with M8960AAAAANLYA1005304 --><project name="device/common" path="device/common" revision="7c65ea240157763b8ded6154a17d3c033167afb7"/>
   <!-- Information: device/sample is tagged with M8960AAAAANLYA100715A --><project name="device/sample" path="device/sample" revision="c328f3d4409db801628861baa8d279fb8855892f"/>
-  <!-- Information: platform/external/apache-http is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/apache-http" path="external/apache-http" revision="6c9d8c58d3ed710f87c26820d903bb8aad81754f"/>
+  <!-- Information: platform/external/apache-http is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/apache-http" path="external/apache-http" revision="6c9d8c58d3ed710f87c26820d903bb8aad81754f"/>
   <!-- Information: platform/external/bluetooth/bluez is tagged with M76XXUSNEKNLYA2040 --><project name="platform/external/bluetooth/bluez" path="external/bluetooth/bluez" revision="1023c91c66e9c3bd1132480051993bf7827770f6"/>
-  <!-- Information: platform/external/bluetooth/glib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/bluetooth/glib" path="external/bluetooth/glib" revision="c6b49241cc1a8950723a5f74f8f4b4f4c3fa970e"/>
+  <!-- Information: platform/external/bluetooth/glib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/bluetooth/glib" path="external/bluetooth/glib" revision="c6b49241cc1a8950723a5f74f8f4b4f4c3fa970e"/>
   <!-- Information: platform/external/bluetooth/hcidump is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/bluetooth/hcidump" path="external/bluetooth/hcidump" revision="02b1eb24fbb3d0135a81edb4a2175b1397308d7d"/>
-  <!-- Information: platform/external/bsdiff is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/bsdiff" path="external/bsdiff" revision="81872540236d9bb15cccf963d05b9de48baa5375"/>
-  <!-- Information: platform/external/bzip2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/bzip2" path="external/bzip2" revision="048dacdca43eed1534689ececcf2781c63e1e4ba"/>
+  <!-- Information: platform/external/bsdiff is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/bsdiff" path="external/bsdiff" revision="81872540236d9bb15cccf963d05b9de48baa5375"/>
+  <!-- Information: platform/external/bzip2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/bzip2" path="external/bzip2" revision="048dacdca43eed1534689ececcf2781c63e1e4ba"/>
   <!-- Information: platform/external/dbus is tagged with M8960AAAAANLYA100715A --><project name="platform/external/dbus" path="external/dbus" revision="c7517b6195dc6926728352113e6cc335da3f9c9e"/>
   <!-- Information: platform/external/dhcpcd is tagged with M8960AAAAANLYA100715A --><project name="platform/external/dhcpcd" path="external/dhcpcd" revision="1e00fb67022d0921af0fead263f81762781b9ffa"/>
-  <!-- Information: platform/external/dnsmasq is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/dnsmasq" path="external/dnsmasq" revision="f621afad94df46204c25fc2593a19d704d2637f5"/>
-  <!-- Information: platform/external/e2fsprogs is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="d5f550bb2f556c5d287f7c8d2b77223654bcec37"/>
-  <!-- Information: platform/external/expat is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
-  <!-- Information: platform/external/fdlibm is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
-  <!-- Information: platform/external/flac is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
-  <!-- Information: platform/external/freetype is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
-  <!-- Information: platform/external/giflib is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
-  <!-- Information: platform/external/gtest is tagged with android-4.2_r1 --><project name="platform/external/gtest" path="external/gtest" remote="linaro" revision="344e5f3db17615cc853073a02968a603efd39109"/>
-  <!-- Information: platform/external/harfbuzz is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/harfbuzz" path="external/harfbuzz" revision="116610d63a859521dacf00fb6818ee9ab2e666f6"/>
-  <!-- Information: platform/external/icu4c is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
-  <!-- Information: platform/external/iptables is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
-  <!-- Information: platform/external/jhead is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
+  <!-- Information: platform/external/dnsmasq is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/dnsmasq" path="external/dnsmasq" revision="f621afad94df46204c25fc2593a19d704d2637f5"/>
+  <!-- Information: platform/external/e2fsprogs is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="d5f550bb2f556c5d287f7c8d2b77223654bcec37"/>
+  <!-- Information: platform/external/expat is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
+  <!-- Information: platform/external/fdlibm is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
+  <!-- Information: platform/external/flac is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
+  <!-- Information: platform/external/freetype is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
+  <!-- Information: platform/external/giflib is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
+  <!-- Information: platform/external/gtest is tagged with android-4.2.1_r1 --><project name="platform/external/gtest" path="external/gtest" remote="linaro" revision="344e5f3db17615cc853073a02968a603efd39109"/>
+  <!-- Information: platform/external/harfbuzz is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/harfbuzz" path="external/harfbuzz" revision="116610d63a859521dacf00fb6818ee9ab2e666f6"/>
+  <!-- Information: platform/external/icu4c is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
+  <!-- Information: platform/external/iptables is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
+  <!-- Information: platform/external/jhead is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
   <!-- Information: platform/external/jpeg is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/jpeg" path="external/jpeg" revision="a62e464d672a4623233180e4023034bf825f066e"/>
-  <!-- Information: platform/external/libgsm is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/libgsm" path="external/libgsm" revision="5e4516958690b9a1b2c98f88eeecba3edd2dbda4"/>
-  <!-- Information: platform/external/liblzf is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
-  <!-- Information: platform/external/libnfc-nxp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="3a912b065a31a72c63ad56ac224cfeaa933423b6"/>
-  <!-- Information: platform/external/libnl-headers is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/libnl-headers" path="external/libnl-headers" revision="6ccf7349d61f73ac26a0675d735d903ab919c658"/>
-  <!-- Information: platform/external/libphonenumber is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/libphonenumber" path="external/libphonenumber" revision="8d22c9a05eda1935c6dc27d188158e6ee38dc016"/>
+  <!-- Information: platform/external/libgsm is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/libgsm" path="external/libgsm" revision="5e4516958690b9a1b2c98f88eeecba3edd2dbda4"/>
+  <!-- Information: platform/external/liblzf is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
+  <!-- Information: platform/external/libnfc-nxp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="3a912b065a31a72c63ad56ac224cfeaa933423b6"/>
+  <!-- Information: platform/external/libnl-headers is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/libnl-headers" path="external/libnl-headers" revision="6ccf7349d61f73ac26a0675d735d903ab919c658"/>
+  <!-- Information: platform/external/libphonenumber is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libphonenumber" path="external/libphonenumber" revision="8d22c9a05eda1935c6dc27d188158e6ee38dc016"/>
   <!-- Information: platform/external/libpng is tagged with M8960AAAAANLYA100715A --><project name="platform/external/libpng" path="external/libpng" revision="9c3730f0efa69f580f03463c237cd928f3196404"/>
-  <!-- Information: platform/external/libvpx is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/libvpx" path="external/libvpx" revision="3a40da0d96da5c520e7707aa14f48a80956e20d7"/>
+  <!-- Information: platform/external/libvpx is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libvpx" path="external/libvpx" revision="3a40da0d96da5c520e7707aa14f48a80956e20d7"/>
   <!-- Information: platform/external/llvm is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/llvm" path="external/llvm" revision="bff5923831940309f7d8ddbff5826ca6ed2dc050"/>
   <!-- Information: platform/external/mksh is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/mksh" path="external/mksh" revision="ec646e8f5e7dac9a77d1de549c6ed92c04d0cd4b"/>
   <project name="platform_external_opensans" path="external/opensans" remote="b2g" revision="b5b4c226ca1d71e936153cf679dda6d3d60e2354"/>
   <!-- Information: platform/external/openssl is tagged with AU_LINUX_ANDROID_ICS.04.00.04.00.110 --><project name="platform/external/openssl" path="external/openssl" revision="27d333cce9a31c806b4bfa042925f045c727aecd"/>
-  <!-- Information: platform/external/protobuf is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/protobuf" path="external/protobuf" revision="e217977611c52bccde7f7c78e1d3c790c6357431"/>
-  <!-- Information: platform/external/safe-iop is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
+  <!-- Information: platform/external/protobuf is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/protobuf" path="external/protobuf" revision="e217977611c52bccde7f7c78e1d3c790c6357431"/>
+  <!-- Information: platform/external/safe-iop is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
   <project name="screencap-gonk" path="external/screencap-gonk" remote="b2g" revision="e6403c71e9eca8cb943739d5a0a192deac60fc51"/>
   <!-- Information: platform/external/skia is tagged with M8960AAAAANLYA100715A --><project name="platform/external/skia" path="external/skia" revision="7d90c85f2c0e3b747f7c7eff8bc9253b0063b439"/>
   <!-- Information: platform/external/sonivox is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/sonivox" path="external/sonivox" revision="7c967779dfc61ac1f346e972de91d4bfce7dccbb"/>
-  <!-- Information: platform/external/speex is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/speex" path="external/speex" revision="ebe6230a7f7c69f5a4389f2b09b7b19ef9e94f32"/>
+  <!-- Information: platform/external/speex is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/speex" path="external/speex" revision="ebe6230a7f7c69f5a4389f2b09b7b19ef9e94f32"/>
   <project name="platform/external/sqlite" path="external/sqlite" revision="fb30e613139b8836fdc8e81e166cf3a76e5fa17f"/>
-  <!-- Information: platform/external/stlport is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/stlport" path="external/stlport" revision="a6734e0645fce81c9610de0488b729207bfa576e"/>
-  <!-- Information: platform/external/strace is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
-  <!-- Information: platform/external/tagsoup is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
+  <!-- Information: platform/external/stlport is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/stlport" path="external/stlport" revision="a6734e0645fce81c9610de0488b729207bfa576e"/>
+  <!-- Information: platform/external/strace is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
+  <!-- Information: platform/external/tagsoup is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
   <!-- Information: platform/external/tinyalsa is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/tinyalsa" path="external/tinyalsa" revision="06cc244ee512c1352215e543615738bc8ac82814"/>
-  <!-- Information: platform/external/tremolo is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/tremolo" path="external/tremolo" revision="25bd78d2392dbdc879ae53382cde9d019f79cf6f"/>
+  <!-- Information: platform/external/tremolo is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/tremolo" path="external/tremolo" revision="25bd78d2392dbdc879ae53382cde9d019f79cf6f"/>
   <project name="unbootimg" path="external/unbootimg" remote="b2g" revision="9464623d92eb8668544916dc5a8f4f6337d0bc08"/>
-  <!-- Information: platform/external/webp is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
-  <!-- Information: platform/external/webrtc is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/webrtc" path="external/webrtc" revision="137024dc8a2e9251a471e20518a9c3ae06f81f23"/>
-  <!-- Information: platform/external/wpa_supplicant is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/wpa_supplicant" path="external/wpa_supplicant" revision="a01d37870bbf9892d43e792e5de0683ca41c5497"/>
+  <!-- Information: platform/external/webp is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
+  <!-- Information: platform/external/webrtc is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/webrtc" path="external/webrtc" revision="137024dc8a2e9251a471e20518a9c3ae06f81f23"/>
+  <!-- Information: platform/external/wpa_supplicant is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/wpa_supplicant" path="external/wpa_supplicant" revision="a01d37870bbf9892d43e792e5de0683ca41c5497"/>
   <!-- Information: platform/external/hostap is tagged with M8960AAAAANLYA1047 --><project name="platform/external/hostap" path="external/hostap" revision="bf04b0faadbdeb4b7943f2e2c4c5aa59df872bb1"/>
-  <!-- Information: platform/external/zlib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/zlib" path="external/zlib" revision="f96a1d1ebfdf1cd582210fd09c23d8f59e0ae094"/>
-  <!-- Information: platform/external/yaffs2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/yaffs2" path="external/yaffs2" revision="0afa916204c664b3114429637b63af1321a0aeca"/>
+  <!-- Information: platform/external/zlib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/zlib" path="external/zlib" revision="f96a1d1ebfdf1cd582210fd09c23d8f59e0ae094"/>
+  <!-- Information: platform/external/yaffs2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/yaffs2" path="external/yaffs2" revision="0afa916204c664b3114429637b63af1321a0aeca"/>
   <!-- Information: platform/frameworks/base is tagged with M76XXUSNEKNLYA2040 --><project name="platform/frameworks/base" path="frameworks/base" revision="eb2bc75803ca179353c24c364a9c8a8ce23e8b78"/>
-  <!-- Information: platform/frameworks/opt/emoji is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="a95d8db002770469d72dfaf59ff37ac96db29a87"/>
+  <!-- Information: platform/frameworks/opt/emoji is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="a95d8db002770469d72dfaf59ff37ac96db29a87"/>
   <!-- Information: platform/frameworks/support is tagged with M8960AAAAANLYA1005304 --><project name="platform/frameworks/support" path="frameworks/support" revision="27208692b001981f1806f4f396434f4eac78b909"/>
   <!-- Information: platform/hardware/libhardware is tagged with M8960AAAAANLYA1049B --><project name="platform/hardware/libhardware" path="hardware/libhardware" revision="4a619901847621f8a7305edf42dd07347a140484"/>
   <!-- Information: platform/hardware/libhardware_legacy is tagged with M8960AAAAANLYA153611 --><project name="platform/hardware/libhardware_legacy" path="hardware/libhardware_legacy" revision="87b4d7afa8f854b445e2d0d95091f6f6069f2b30"/>
   <!-- Information: platform/libcore is tagged with M8960AAAAANLYA100715A --><project name="platform/libcore" path="libcore" revision="30841f9fba9ccd5c54f4f079f495994db97f283e"/>
-  <!-- Information: platform/ndk is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/ndk" path="ndk" revision="9f555971e1481854d5b4dc11b3e6af9fff4f241f"/>
+  <!-- Information: platform/ndk is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/ndk" path="ndk" revision="9f555971e1481854d5b4dc11b3e6af9fff4f241f"/>
   <!-- Information: platform/prebuilt is tagged with M8960AAAAANLYA1005304 --><project name="platform/prebuilt" path="prebuilt" revision="447ea790fcc957dde59730ecc2a65ca263bdc733"/>
   <!-- Information: platform/system/bluetooth is tagged with M8960AAAAANLYA100703 --><project name="platform/system/bluetooth" path="system/bluetooth" revision="7772cad4823f1f427ce1d4df84a55982386d6d18"/>
   <!-- Information: platform/system/core is tagged with M76XXUSNEKNLYA2040 --><project name="platform/system/core" path="system/core" revision="bf1970408676ce570b8f4dc3efa038e47552137f"/>
   <!-- Information: platform/system/extras is tagged with M8960AAAAANLYA1005304 --><project name="platform/system/extras" path="system/extras" revision="01db6c1254e1407740a543f24317fc540fc4c049"/>
   <!-- Information: platform/system/media is tagged with M8960AAAAANLYA1005304 --><project name="platform/system/media" path="system/media" revision="7f71c7fd362bbd992ff2e0e80f7af5859ad116ad"/>
   <!-- Information: platform/system/netd is tagged with M8960AAAAANLYA1049 --><project name="platform/system/netd" path="system/netd" revision="306e765248e3900041bf2737e9f57b1b5694a4ce"/>
   <!-- Information: platform/system/vold is tagged with M8960AAAAANLYA100715A --><project name="platform/system/vold" path="system/vold" revision="99fff257d53cc045d1460841edca5d901dacfcf5"/>
 
   <!-- Otoro/Unagi specific things -->
   <!-- Information: device/qcom/common is tagged with M8960AAAAANLYA100715A --><project name="device/qcom/common" path="device/qcom/common" revision="b9cdab8e1e1a215a8c65b8d5816f666bec7be205"/>
   <!-- Information: platform/vendor/qcom/msm7627a is tagged with M8960AAAAANLYA100715A --><project name="platform/vendor/qcom/msm7627a" path="device/qcom/msm7627a" revision="d920a502ba17cf4d716f8b1a615f07e796b0501a"/>
-  <project name="android-device-otoro" path="device/qcom/otoro" remote="b2g" revision="ad559059650d98bb7049720086401fc7ed4d24fb"/>
-  <project name="android-device-unagi" path="device/qcom/unagi" remote="b2g" revision="c83d823b231b6ad8f48ba486375a0c951a4f42fb"/>
+  <project name="android-device-otoro" path="device/qcom/otoro" remote="b2g" revision="e3e99b264dd0230108aa78f2b653db4ce0e494fb"/>
+  <project name="android-device-unagi" path="device/qcom/unagi" remote="b2g" revision="e74925a10e11a4f0bc56158c248bd20c521d3dd7"/>
   <project name="codeaurora_kernel_msm" path="kernel" remote="b2g" revision="0a01247e4b0880f93424b27251cd3a1f6b19dbb2"/>
   <!-- Information: platform/hardware/qcom/camera is tagged with M76XXUSNEKNLYA2040 --><project name="platform/hardware/qcom/camera" path="hardware/qcom/camera" revision="1acf77a75e30f3fc8b1eed2057c97adf1cb1633f"/>
   <project name="hardware_qcom_display" path="hardware/qcom/display" remote="b2g" revision="6405d30f2fac7d8a1f2cb17b99fb7dd0a8bcfdac"/>
   <!-- Information: platform/hardware/qcom/media is tagged with M8960AAAAANLYA100715A --><project name="platform/hardware/qcom/media" path="hardware/qcom/media" revision="552c3ddb7174a01f3508782d40c4d8c845ab441a"/>
   <!-- Information: platform/hardware/qcom/gps is tagged with M8960AAAAANLYA100705 --><project name="platform/hardware/qcom/gps" path="hardware/qcom/gps" revision="23d5707b320d7fc69f8ba3b7d84d78a1c5681708"/>
-  <!-- Information: platform/hardware/msm7k is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/hardware/msm7k" path="hardware/msm7k" revision="8892d46805c5639b55dd07547745c5180da861e7"/>
+  <!-- Information: platform/hardware/msm7k is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/hardware/msm7k" path="hardware/msm7k" revision="8892d46805c5639b55dd07547745c5180da861e7"/>
   <!-- Information: platform/vendor/qcom-opensource/omx/mm-core is tagged with M8960AAAAANLYA100715A --><project name="platform/vendor/qcom-opensource/omx/mm-core" path="vendor/qcom/opensource/omx/mm-core" revision="ab17ac9a074b4bb69986a8436336bdfbbaf9cd39"/>
   <!-- Information: platform/hardware/ril is tagged with M76XXUSNEKNLYA1610 --><project name="platform/hardware/ril" path="hardware/ril" remote="caf" revision="fe9a3f63922143b57e79ed570bab2328df8c83a5"/>
-</manifest>
+</manifest>
\ No newline at end of file
--- a/b2g/confvars.sh
+++ b/b2g/confvars.sh
@@ -42,12 +42,13 @@ MOZ_XULRUNNER=
 fi
 
 MOZ_APP_ID={3c2e2abc-06d4-11e1-ac3b-374f68613e61}
 MOZ_EXTENSION_MANAGER=1
 
 MOZ_SYS_MSG=1
 MOZ_TIME_MANAGER=1
 
+MOZ_B2G_CERTDATA=1
 MOZ_PAY=1
 MOZ_TOOLKIT_SEARCH=
 MOZ_PLACES=
 MOZ_B2G=1
--- a/b2g/installer/package-manifest.in
+++ b/b2g/installer/package-manifest.in
@@ -49,16 +49,19 @@
 #ifndef MOZ_STATIC_JS
 @BINPATH@/@DLL_PREFIX@mozjs@DLL_SUFFIX@
 #endif
 @BINPATH@/@DLL_PREFIX@plc4@DLL_SUFFIX@
 @BINPATH@/@DLL_PREFIX@plds4@DLL_SUFFIX@
 @BINPATH@/@DLL_PREFIX@xpcom@DLL_SUFFIX@
 @BINPATH@/@DLL_PREFIX@nspr4@DLL_SUFFIX@
 @BINPATH@/@DLL_PREFIX@mozalloc@DLL_SUFFIX@
+#ifdef MOZ_DMD
+@BINPATH@/@DLL_PREFIX@dmd@DLL_SUFFIX@
+#endif
 #ifdef XP_MACOSX
 @BINPATH@/XUL
 #else
 @BINPATH@/@DLL_PREFIX@xul@DLL_SUFFIX@
 #endif
 #ifdef XP_MACOSX
 @BINPATH@/@MOZ_CHILD_PROCESS_NAME@.app/
 #else
--- a/browser/app/Makefile.in
+++ b/browser/app/Makefile.in
@@ -141,18 +141,18 @@ libs::
 endif
 
 libs:: $(srcdir)/profile/prefs.js
 	$(INSTALL) $(IFLAGS1) $^ $(FINAL_TARGET)/defaults/profile
 
 ifndef LIBXUL_SDK
 # channel-prefs.js is handled separate from other prefs due to bug 756325
 libs:: $(srcdir)/profile/channel-prefs.js
-	$(NSINSTALL) -D $(FINAL_TARGET)/defaults/pref
-	$(PYTHON) $(topsrcdir)/config/Preprocessor.py $(PREF_PPFLAGS) $(ACDEFINES) $^ > $(FINAL_TARGET)/defaults/pref/channel-prefs.js
+	$(NSINSTALL) -D $(DIST)/bin/defaults/pref
+	$(PYTHON) $(topsrcdir)/config/Preprocessor.py $(PREF_PPFLAGS) $(ACDEFINES) $^ > $(DIST)/bin/defaults/pref/channel-prefs.js
 endif
 
 libs:: $(srcdir)/blocklist.xml
 	$(INSTALL) $(IFLAGS1) $^ $(FINAL_TARGET)
 
 ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
 
 MAC_APP_NAME = $(MOZ_APP_DISPLAYNAME)
--- a/browser/app/blocklist.xml
+++ b/browser/app/blocklist.xml
@@ -63,17 +63,17 @@
                   </emItem>
       <emItem  blockID="i78" id="socialnetworktools@mozilla.doslash.org">
                         <versionRange  minVersion="0" maxVersion="*">
                     </versionRange>
                   </emItem>
       <emItem  blockID="i238" id="/^pink@.*\.info$/">
                         <versionRange  minVersion="0" maxVersion="*" severity="3">
                       <targetApplication  id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
-                              <versionRange  minVersion="19.0a1" maxVersion="*" />
+                              <versionRange  minVersion="18.0" maxVersion="*" />
                           </targetApplication>
                     </versionRange>
                   </emItem>
       <emItem  blockID="i174" id="info@thebflix.com">
                         <versionRange  minVersion="0" maxVersion="*" severity="3">
                     </versionRange>
                   </emItem>
       <emItem  blockID="i101" id="{3a12052a-66ef-49db-8c39-e5b0bd5c83fa}">
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -857,18 +857,20 @@ pref("toolkit.crashreporter.pluginHangSu
 pref("app.support.baseURL", "http://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/");
 
 // Name of alternate about: page for certificate errors (when undefined, defaults to about:neterror)
 pref("security.alternate_certificate_error_page", "certerror");
 
 // Whether to start the private browsing mode at application startup
 pref("browser.privatebrowsing.autostart", false);
 
+#ifndef MOZ_PER_WINDOW_PRIVATE_BROWSING
 // Whether we should skip prompting before starting the private browsing mode
 pref("browser.privatebrowsing.dont_prompt_on_enter", false);
+#endif
 
 // Don't try to alter this pref, it'll be reset the next time you use the
 // bookmarking dialog
 pref("browser.bookmarks.editDialog.firstEditField", "namePicker");
 
 // Whether to use a panel that looks like an OS X sheet for customization
 #ifdef XP_MACOSX
 pref("toolbar.customization.usesheet", true);
@@ -1040,16 +1042,19 @@ pref("devtools.debugger.ui.win-width", 9
 pref("devtools.debugger.ui.win-height", 400);
 pref("devtools.debugger.ui.stackframes-width", 200);
 pref("devtools.debugger.ui.variables-width", 300);
 pref("devtools.debugger.ui.panes-visible-on-startup", false);
 pref("devtools.debugger.ui.variables-sorting-enabled", true);
 pref("devtools.debugger.ui.variables-only-enum-visible", false);
 pref("devtools.debugger.ui.variables-searchbox-visible", false);
 
+// Enable the Profiler
+pref("devtools.profiler.enabled", true);
+
 // Enable the Tilt inspector
 pref("devtools.tilt.enabled", true);
 pref("devtools.tilt.intro_transition", true);
 pref("devtools.tilt.outro_transition", true);
 
 // Enable the Scratchpad tool.
 pref("devtools.scratchpad.enabled", true);
 
@@ -1158,19 +1163,20 @@ pref("pdfjs.firstRun", true);
 pref("pdfjs.previousHandler.preferredAction", 0);
 pref("pdfjs.previousHandler.alwaysAskBeforeHandling", false);
 
 // The maximum amount of decoded image data we'll willingly keep around (we
 // might keep around more than this, but we'll try to get down to this value).
 // (This is intentionally on the high side; see bug 746055.)
 pref("image.mem.max_decoded_image_kb", 256000);
 
-// Example social provider
+// Default social providers
 pref("social.manifest.facebook", "{\"origin\":\"https://www.facebook.com\",\"name\":\"Facebook Messenger\",\"workerURL\":\"https://www.facebook.com/desktop/fbdesktop2/socialfox/fbworker.js.php\",\"iconURL\":\"data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAX0lEQVQ4jWP4%2F%2F8%2FAyUYTFhHzjgDxP9JxGeQDSBVMxgTbUBCxer%2Fr999%2BQ8DJBuArJksA9A10s8AXIBoA0B%2BR%2FY%2FjD%2BEwoBoA1yT5v3PbdmCE8MAshhID%2FUMoDgzUYIBj0Cgi7ar4coAAAAASUVORK5CYII%3D\",\"sidebarURL\":\"https://www.facebook.com/desktop/fbdesktop2/?socialfox=true\"}");
+
 // Comma-separated list of nsIURI::prePaths that are allowed to activate
 // built-in social functionality.
 pref("social.activation.whitelist", "https://www.facebook.com");
+
 pref("social.sidebar.open", true);
 pref("social.sidebar.unload_timeout_ms", 10000);
-pref("social.active", false);
 pref("social.toast-notifications.enabled", true);
 
 pref("dom.identity.enabled", false);
--- a/browser/base/content/browser-appmenu.inc
+++ b/browser/base/content/browser-appmenu.inc
@@ -304,20 +304,18 @@
 #ifdef MOZ_SERVICES_SYNC
             <menuitem id="appmenu_sync-tabs"
                       class="syncTabsMenuItem"
                       label="&syncTabsMenu2.label;"
                       oncommand="BrowserOpenSyncTabs();"
                       disabled="true"/>
 #endif
             <menuitem id="appmenu_restoreLastSession"
-                      class="restoreLastSession"
                       label="&historyRestoreLastSession.label;"
-                      oncommand="restoreLastSession();"
-                      disabled="true"/>
+                      command="Browser:RestoreLastSession"/>
             <menu id="appmenu_recentlyClosedTabsMenu"
                   class="recentlyClosedTabsMenu"
                   label="&historyUndoMenu.label;"
                   disabled="true">
               <menupopup id="appmenu_recentlyClosedTabsMenupopup"
                          onpopupshowing="document.getElementById('appmenu_history')._placesView.populateUndoSubmenu();"/>
             </menu>
             <menu id="appmenu_recentlyClosedWindowsMenu"
--- a/browser/base/content/browser-menubar.inc
+++ b/browser/base/content/browser-menubar.inc
@@ -371,20 +371,18 @@
 #ifdef MOZ_SERVICES_SYNC
                 <menuitem id="sync-tabs-menuitem"
                           class="syncTabsMenuItem"
                           label="&syncTabsMenu2.label;"
                           oncommand="BrowserOpenSyncTabs();"
                           disabled="true"/>
 #endif
                 <menuitem id="historyRestoreLastSession"
-                          class="restoreLastSession"
                           label="&historyRestoreLastSession.label;"
-                          oncommand="restoreLastSession();"
-                          disabled="true"/>
+                          command="Browser:RestoreLastSession"/>
                 <menu id="historyUndoMenu"
                       class="recentlyClosedTabsMenu"
                       label="&historyUndoMenu.label;"
                       disabled="true">
                   <menupopup id="historyUndoPopup"
 #ifndef XP_MACOSX
                              placespopup="true"
 #endif
@@ -537,16 +535,17 @@
                             accesskey="&social.toggleNotifications.accesskey;"/>
                   <menuitem id="menu_focusChatBar"
                             label="&social.chatBar.label;"
                             accesskey="&social.chatBar.accesskey;"
                             key="focusChatBar"
                             command="Social:FocusChat"
                             class="show-only-for-keyboard"/>
                   <menuseparator class="social-statusarea-separator"/>
+                  <menuseparator class="social-provider-menu" hidden="true"/>
                   <menuitem class="social-toggle-menuitem" command="Social:Toggle"/>
                   <menuitem class="social-remove-menuitem" command="Social:Remove"/>
                 </menupopup>
               </menu>
 #ifdef MOZ_SERVICES_SYNC
               <!-- only one of sync-setup or sync-menu will be showing at once -->
               <menuitem id="sync-setup"
                         label="&syncSetup.label;"
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -655,36 +655,26 @@ HistoryMenu.prototype = {
     let enabled = Weave.Service.isLoggedIn &&
                   Weave.Service.engineManager.get("tabs") &&
                   Weave.Service.engineManager.get("tabs").enabled;
     menuitem.setAttribute("disabled", !enabled);
     menuitem.setAttribute("hidden", false);
 #endif
   },
 
-  toggleRestoreLastSession: function PHM_toggleRestoreLastSession() {
-    let restoreItem = this._rootElt.getElementsByClassName("restoreLastSession")[0];
-
-    if (this._ss.canRestoreLastSession)
-      restoreItem.removeAttribute("disabled");
-    else
-      restoreItem.setAttribute("disabled", true);
-  },
-
   _onPopupShowing: function HM__onPopupShowing(aEvent) {
     PlacesMenu.prototype._onPopupShowing.apply(this, arguments);
 
     // Don't handle events for submenus.
     if (aEvent.target != aEvent.currentTarget)
       return;
 
     this.toggleRecentlyClosedTabs();
     this.toggleRecentlyClosedWindows();
     this.toggleTabsFromOtherComputers();
-    this.toggleRestoreLastSession();
   },
 
   _onCommand: function HM__onCommand(aEvent) {
     let placesNode = aEvent.target._placesNode;
     if (placesNode) {
       if (!PrivateBrowsingUtils.isWindowPrivate(window))
         PlacesUIUtils.markPageAsTyped(placesNode.uri);
       openUILink(placesNode.uri, aEvent, { ignoreAlt: true });
--- a/browser/base/content/browser-plugins.js
+++ b/browser/base/content/browser-plugins.js
@@ -246,16 +246,17 @@ var gPluginHandler = {
     // Hide the in-content UI if it's too big. The crashed plugin handler already did this.
     if (eventType != "PluginCrashed") {
       let overlay = doc.getAnonymousElementByAttribute(plugin, "class", "mainBox");
       if (overlay != null && self.isTooSmall(plugin, overlay))
           overlay.style.visibility = "hidden";
     }
   },
 
+  _notificationDisplayedOnce: false,
   handlePluginScripted: function PH_handlePluginScripted(aBrowser) {
     let contentWindow = aBrowser.contentWindow;
     if (!contentWindow)
       return;
 
     let cwu = contentWindow.QueryInterface(Ci.nsIInterfaceRequestor)
                             .getInterface(Ci.nsIDOMWindowUtils);
     let haveVisibleCTPPlugin = cwu.plugins.some(function(plugin) {
@@ -273,19 +274,20 @@ var gPluginHandler = {
       let isInvisible = ((computedStyle.width == "240px" &&
                           computedStyle.height == "200px") ||
                          gPluginHandler.isTooSmall(plugin, overlay));
       return (!isInvisible &&
               gPluginHandler.canActivatePlugin(objLoadingContent));
     });
 
     let notification = PopupNotifications.getNotification("click-to-play-plugins", aBrowser);
-    if (notification && !haveVisibleCTPPlugin) {
+    if (notification && !haveVisibleCTPPlugin && !this._notificationDisplayedOnce) {
       notification.dismissed = false;
       PopupNotifications._update(notification.anchorElement);
+      this._notificationDisplayedOnce = true;
     }
 
     aBrowser._pluginScriptedState = PLUGIN_SCRIPTED_STATE_DONE;
   },
 
   isKnownPlugin: function PH_isKnownPlugin(objLoadingContent) {
     return (objLoadingContent.getContentTypeForMIMEType(objLoadingContent.actualType) ==
             Ci.nsIObjectLoadingContent.TYPE_PLUGIN);
@@ -638,18 +640,19 @@ var gPluginHandler = {
         if (notification)
           notification.remove();
         gPluginHandler._removeClickToPlayOverlays(contentWindow);
       }
     }];
     let notification = PopupNotifications.getNotification("click-to-play-plugins", aBrowser);
     let dismissed = notification ? notification.dismissed : true;
     let options = { dismissed: dismissed, centerActions: centerActions };
+    let icon = haveVulnerablePlugin ? "blocked-plugins-notification-icon" : "plugins-notification-icon"
     PopupNotifications.show(aBrowser, "click-to-play-plugins",
-                            messageString, "plugins-notification-icon",
+                            messageString, icon,
                             mainAction, secondaryActions, options);
   },
 
   _removeClickToPlayOverlays: function PH_removeClickToPlayOverlays(aContentWindow) {
     let doc = aContentWindow.document;
     let cwu = aContentWindow.QueryInterface(Ci.nsIInterfaceRequestor)
                             .getInterface(Ci.nsIDOMWindowUtils);
     for (let plugin of cwu.plugins) {
--- a/browser/base/content/browser-sets.inc
+++ b/browser/base/content/browser-sets.inc
@@ -80,28 +80,29 @@
     <command id="Browser:ShowAllTabs" oncommand="allTabs.open();"/>
     <command id="Browser:ToggleTabView" oncommand="TabView.toggle();"/>
     <command id="Browser:FocusNextFrame" oncommand="focusNextFrame(event);"/>
     <command id="cmd_fullZoomReduce"  oncommand="FullZoom.reduce()"/>
     <command id="cmd_fullZoomEnlarge" oncommand="FullZoom.enlarge()"/>
     <command id="cmd_fullZoomReset"   oncommand="FullZoom.reset()"/>
     <command id="cmd_fullZoomToggle"  oncommand="ZoomManager.toggleZoom();"/>
     <command id="Browser:OpenLocation" oncommand="openLocation();"/>
+    <command id="Browser:RestoreLastSession" oncommand="restoreLastSession();" disabled="true"/>
 
     <command id="Tools:Search" oncommand="BrowserSearch.webSearch();"/>
     <command id="Tools:Downloads" oncommand="BrowserDownloadsUI();"/>
-    <command id="Tools:DevToolbox" oncommand="gDevTools.toggleToolboxCommand(gBrowser);"/>
+    <command id="Tools:DevToolbox" oncommand="gDevToolsBrowser.toggleToolboxCommand(gBrowser);"/>
     <command id="Tools:DevToolbar" oncommand="DeveloperToolbar.toggle();" disabled="true" hidden="true"/>
     <command id="Tools:DevToolbarFocus" oncommand="DeveloperToolbar.focusToggle();" disabled="true"/>
     <command id="Tools:ChromeDebugger" oncommand="DebuggerUI.toggleChromeDebugger();" disabled="true" hidden="true"/>
     <command id="Tools:Scratchpad" oncommand="Scratchpad.openScratchpad();" disabled="true" hidden="true"/>
     <command id="Tools:ResponsiveUI" oncommand="ResponsiveUI.toggle();" disabled="true" hidden="true"/>
     <command id="Tools:Addons" oncommand="BrowserOpenAddonsMgr();"/>
     <command id="Tools:ErrorConsole" oncommand="toJavaScriptConsole()" disabled="true" hidden="true"/>
-    <command id="Tools:DevToolsConnect" oncommand="DevToolsXULCommands.openConnectScreen(gBrowser)"/>
+    <command id="Tools:DevToolsConnect" oncommand="gDevToolsBrowser.openConnectScreen(gBrowser)"/>
     <command id="Tools:Sanitize"
      oncommand="Cc['@mozilla.org/browser/browserglue;1'].getService(Ci.nsIBrowserGlue).sanitize(window);"/>
     <command id="Tools:PrivateBrowsing"
 #ifdef MOZ_PER_WINDOW_PRIVATE_BROWSING
       oncommand="OpenBrowserWindow({private: true});"/>
 #else
       oncommand="gPrivateBrowsingUI.toggleMode();"/>
 #endif
--- a/browser/base/content/browser-social.js
+++ b/browser/base/content/browser-social.js
@@ -5,27 +5,27 @@
 // The minimum sizes for the auto-resize panel code.
 const PANEL_MIN_HEIGHT = 100;
 const PANEL_MIN_WIDTH = 330;
 
 XPCOMUtils.defineLazyModuleGetter(this, "SharedFrame",
   "resource:///modules/SharedFrame.jsm");
 
 let SocialUI = {
-  // Called on delayed startup to initialize UI
+  // Called on delayed startup to initialize the UI
   init: function SocialUI_init() {
     Services.obs.addObserver(this, "social:pref-changed", false);
     Services.obs.addObserver(this, "social:ambient-notification-changed", false);
     Services.obs.addObserver(this, "social:profile-changed", false);
     Services.obs.addObserver(this, "social:recommend-info-changed", false);
     Services.obs.addObserver(this, "social:frameworker-error", false);
+    Services.obs.addObserver(this, "social:provider-set", false);
 
     Services.prefs.addObserver("social.sidebar.open", this, false);
     Services.prefs.addObserver("social.toast-notifications.enabled", this, false);
-    Services.prefs.addObserver("social.active", this, false);
 
     gBrowser.addEventListener("ActivateSocialFeature", this._activationEventHandler, true, true);
 
     // Called when we enter DOM full-screen mode.
     window.addEventListener("mozfullscreenchange", function () {
       SocialSidebar.update();
       SocialChatBar.update();
     });
@@ -35,179 +35,221 @@ let SocialUI = {
 
   // Called on window unload
   uninit: function SocialUI_uninit() {
     Services.obs.removeObserver(this, "social:pref-changed");
     Services.obs.removeObserver(this, "social:ambient-notification-changed");
     Services.obs.removeObserver(this, "social:profile-changed");
     Services.obs.removeObserver(this, "social:recommend-info-changed");
     Services.obs.removeObserver(this, "social:frameworker-error");
+    Services.obs.removeObserver(this, "social:provider-set");
 
     Services.prefs.removeObserver("social.sidebar.open", this);
     Services.prefs.removeObserver("social.toast-notifications.enabled", this);
-    Services.prefs.removeObserver("social.active", this);
+  },
+
+  // Called once, after window load, once Social.jsm's provider has been set.
+  _providerReady: function SocialUI_providerReady() {
+    this._updateActiveUI();
+    this._updateMenuItems();
+
+    SocialChatBar.update();
+    SocialShareButton.init();
+    SocialMenu.populate();
+    SocialToolbar.init();
+    SocialSidebar.init();
+  },
+
+  // Social.provider has changed, update any state that depends on it.
+  // Note: this method is not called when Social.provider is first set, during
+  // the first window load.
+  _updateProvider: function () {
+    // XXX audit for handling nullness of social.provider
+    this._updateActiveUI();
+    this._updateMenuItems();
+
+    SocialChatBar.update();
+    SocialShareButton.updateProvider();
+    SocialMenu.populate();
+    SocialToolbar.updateProvider();
+    SocialSidebar.update();
+  },
+
+  // The entire feature is being turned on/off.
+  _updateEnabledState: function () {
+    this._updateActiveUI();
+    SocialChatBar.update();
+    SocialSidebar.update();
+    SocialShareButton.updateButtonHiddenState();
+    SocialMenu.populate();
+    SocialToolbar.updateButtonHiddenState();
+    SocialToolbar.populateProviderMenus();
+  },
+
+  _matchesCurrentProvider: function (origin) {
+    return Social.provider && Social.provider.origin == origin;
   },
 
+  observe: function SocialUI_observe(subject, topic, data) {
+    // Exceptions here sometimes don't get reported properly, report them
+    // manually :(
+    try {
+      switch (topic) {
+        case "social:provider-set":
+          this._updateProvider();
+          break;
+        case "social:pref-changed":
+          this._updateEnabledState();
+          break;
+
+        // Provider-specific notifications
+        case "social:ambient-notification-changed":
+          if (this._matchesCurrentProvider(data)) {
+            SocialToolbar.updateButton();
+            SocialMenu.populate();
+          }
+          break;
+        case "social:profile-changed":
+          if (this._matchesCurrentProvider(data)) {
+            SocialToolbar.updateProfile();
+            SocialShareButton.updateProfileInfo();
+            SocialChatBar.update();
+          }
+          break;
+        case "social:recommend-info-changed":
+          if (this._matchesCurrentProvider(data)) {
+            SocialShareButton.updateShareState();
+          }
+          break;
+        case "social:frameworker-error":
+          if (Social.provider && Social.provider.origin == data) {
+            SocialSidebar.setSidebarErrorMessage("frameworker-error");
+          }
+          break;
+
+        case "nsPref:changed":
+          if (data == "social.sidebar.open") {
+            SocialSidebar.update();
+          }
+          break;
+      }
+    } catch (e) {
+      Components.utils.reportError(e + e.stack);
+      throw e;
+    }
+  },
+
+  nonBrowserWindowInit: function SocialUI_nonBrowserInit() {
+    // Disable the social menu item in non-browser windows
+    document.getElementById("menu_socialAmbientMenu").hidden = true;
+  },
+
+  // Miscellaneous helpers
   showProfile: function SocialUI_showProfile() {
-    if (this.haveLoggedInUser())
+    if (Social.haveLoggedInUser())
       openUILinkIn(Social.provider.profile.profileURL, "tab");
     else {
       // XXX Bug 789585 will implement an API for provider-specified login pages.
       openUILinkIn(Social.provider.origin, "tab");
     }
   },
 
-  observe: function SocialUI_observe(subject, topic, data) {
-    switch (topic) {
-      case "social:pref-changed":
-        // Exceptions here sometimes don't get reported properly, report them
-        // manually :(
-        try {
-          this.updateToggleCommand();
-          SocialShareButton.updateButtonHiddenState();
-          SocialToolbar.updateButtonHiddenState();
-          SocialSidebar.update();
-          SocialChatBar.update();
-          SocialFlyout.unload();
-          SocialMenu.populate();
-        } catch (e) {
-          Components.utils.reportError(e);
-          throw e;
-        }
-        break;
-      case "social:ambient-notification-changed":
-        SocialToolbar.updateButton();
-        SocialMenu.populate();
-        break;
-      case "social:profile-changed":
-        SocialToolbar.updateProfile();
-        SocialShareButton.updateProfileInfo();
-        SocialChatBar.update();
-        break;
-      case "social:recommend-info-changed":
-        SocialShareButton.updateShareState();
-        break;
-      case "social:frameworker-error":
-        if (Social.provider) {
-          Social.errorState = "frameworker-error";
-          SocialSidebar.setSidebarErrorMessage("frameworker-error");
-        }
-        break;
-      case "nsPref:changed":
-        this.updateActiveBroadcaster();
-        this.updateToggleCommand();
-        SocialSidebar.update();
-        SocialToolbar.updateButton();
-        SocialMenu.populate();
-        break;
-    }
-  },
+  _updateActiveUI: function SocialUI_updateActiveUI() {
+    let broadcaster = document.getElementById("socialActiveBroadcaster");
+    broadcaster.hidden = !Social.active;
 
-  get toggleCommand() {
-    return document.getElementById("Social:Toggle");
-  },
-
-  // Called once Social.jsm's provider has been set
-  _providerReady: function SocialUI_providerReady() {
-    // If we couldn't find a provider, nothing to do here.
     if (!Social.provider)
       return;
 
-    this.updateToggleCommand();
-
-    // The View->Sidebar and Menubar->Tools menu.
-    for (let id of ["menu_socialSidebar", "menu_socialAmbientMenu"])
-      document.getElementById(id).setAttribute("label", Social.provider.name);
-
-    SocialToolbar.init();
-    SocialShareButton.init();
-    SocialSidebar.init();
-    SocialMenu.populate();
-    SocialChatBar.update();
-    this.updateActiveBroadcaster();
-  },
-
-  updateToggleCommand: function SocialUI_updateToggleCommand() {
-    if (!Social.provider)
-      return;
-
-    let toggleCommand = this.toggleCommand;
+    let toggleCommand = document.getElementById("Social:Toggle");
     // We only need to update the command itself - all our menu items use it.
-    let enabled = Services.prefs.getBoolPref("social.enabled");
-    let label = gNavigatorBundle.getFormattedString(enabled ? "social.turnOff.label" : "social.turnOn.label",
+    let label = gNavigatorBundle.getFormattedString(Social.provider.enabled ?
+                                                      "social.turnOff.label" :
+                                                      "social.turnOn.label",
                                                     [Social.provider.name]);
-    let accesskey = gNavigatorBundle.getString(enabled ? "social.turnOff.accesskey" : "social.turnOn.accesskey");
+    let accesskey = gNavigatorBundle.getString(Social.provider.enabled ?
+                                                 "social.turnOff.accesskey" :
+                                                 "social.turnOn.accesskey");
     toggleCommand.setAttribute("label", label);
     toggleCommand.setAttribute("accesskey", accesskey);
     toggleCommand.setAttribute("hidden", Social.active ? "false" : "true");
   },
 
-  updateActiveBroadcaster: function SocialUI_updateActiveBroadcaster() {
-    let broadcaster = document.getElementById("socialActiveBroadcaster");
-    broadcaster.hidden = !Social.active;
+  _updateMenuItems: function () {
+    if (!Social.provider)
+      return;
+
+    // The View->Sidebar and Menubar->Tools menu.
+    for (let id of ["menu_socialSidebar", "menu_socialAmbientMenu"])
+      document.getElementById(id).setAttribute("label", Social.provider.name);
   },
 
   // This handles "ActivateSocialFeature" events fired against content documents
   // in this window.
   _activationEventHandler: function SocialUI_activationHandler(e) {
-    // Nothing to do if Social is already enabled, or we don't have a provider
-    // to enable yet.
-    if (Social.enabled || !Social.provider)
-      return;
-
     let targetDoc = e.target;
 
     // Event must be fired against the document
     if (!(targetDoc instanceof HTMLDocument))
       return;
 
     // Ignore events fired in background tabs
     if (targetDoc.defaultView.top != content)
       return;
 
     // Check that the associated document's origin is in our whitelist
-    let prePath = targetDoc.documentURIObject.prePath;
+    let providerOrigin = targetDoc.nodePrincipal.origin;
     let whitelist = Services.prefs.getCharPref("social.activation.whitelist");
-    if (whitelist.split(",").indexOf(prePath) == -1)
+    if (whitelist.split(",").indexOf(providerOrigin) == -1)
       return;
 
     // If the last event was received < 1s ago, ignore this one
     let now = Date.now();
     if (now - Social.lastEventReceived < 1000)
       return;
     Social.lastEventReceived = now;
 
+    // Keep track of the old provider in case of undo
+    let oldOrigin = Social.provider ? Social.provider.origin : "";
+
     // Enable the social functionality, and indicate that it was activated
-    Social.active = true;
+    let provider = Social.activateFromOrigin(providerOrigin);
+
+    // Provider to activate may not have been found
+    if (!provider)
+      return;
 
     // Show a warning, allow undoing the activation
     let description = document.getElementById("social-activation-message");
     let brandShortName = document.getElementById("bundle_brand").getString("brandShortName");
     let message = gNavigatorBundle.getFormattedString("social.activated.description",
-                                                      [Social.provider.name, brandShortName]);
+                                                      [provider.name, brandShortName]);
     description.value = message;
 
-    SocialUI.notificationPanel.hidden = false;
+    let notificationPanel = SocialUI.notificationPanel;
+    // Set the origin being activated and the previously active one, to allow undo
+    notificationPanel.setAttribute("origin", provider.origin);
+    notificationPanel.setAttribute("oldorigin", oldOrigin);
 
+    // Show the panel
+    notificationPanel.hidden = false;
     setTimeout(function () {
-      SocialUI.notificationPanel.openPopup(SocialToolbar.button, "bottomcenter topright");
-    }.bind(this), 0);
+      notificationPanel.openPopup(SocialToolbar.button, "bottomcenter topright");
+    }, 0);
+  },
+
+  undoActivation: function SocialUI_undoActivation() {
+    let origin = this.notificationPanel.getAttribute("origin");
+    let oldOrigin = this.notificationPanel.getAttribute("oldorigin");
+    Social.deactivateFromOrigin(origin, oldOrigin);
+    this.notificationPanel.hidePopup();
   },
 
   get notificationPanel() {
-    return document.getElementById("socialActivatedNotification")
-  },
-
-  undoActivation: function SocialUI_undoActivation() {
-    Social.active = false;
-    this.notificationPanel.hidePopup();
-  },
-
-  haveLoggedInUser: function SocialUI_haveLoggedInUser() {
-    return !!(Social.provider && Social.provider.profile && Social.provider.profile.userName);
+    return document.getElementById("socialActivatedNotification");
   },
 
   closeSocialPanelForLinkTraversal: function (target, linkNode) {
     // No need to close the panel if this traversal was not retargeted
     if (target == "" || target == "_self")
       return;
 
     // Check to see whether this link traversal was in a social panel
@@ -233,29 +275,30 @@ let SocialUI = {
 
     let ps = Services.prompt;
     let flags = ps.BUTTON_TITLE_IS_STRING * ps.BUTTON_POS_0 +
                 ps.BUTTON_TITLE_CANCEL * ps.BUTTON_POS_1 +
                 ps.BUTTON_POS_0_DEFAULT;
 
     let confirmationIndex = ps.confirmEx(null, dialogTitle, text, flags,
                                          okButtonText, null, null, null, {});
-    if (confirmationIndex == 0)
-      Social.active = false;
+    if (confirmationIndex == 0) {
+      Social.deactivateFromOrigin(Social.provider.origin);
+    }
   }
 }
 
 let SocialChatBar = {
   get chatbar() {
     return document.getElementById("pinnedchats");
   },
   // Whether the chatbar is available for this window.  Note that in full-screen
   // mode chats are available, but not shown.
   get isAvailable() {
-    if (!SocialUI.haveLoggedInUser())
+    if (!Social.haveLoggedInUser())
       return false;
     let docElem = document.documentElement;
     let chromeless = docElem.getAttribute("chromehidden").indexOf("extrachrome") >= 0;
     return Social.uiVisible && !chromeless;
   },
   // Does this chatbar have any chats (whether minimized, collapsed or normal)
   get hasChats() {
     return !!this.chatbar.firstElementChild;
@@ -472,35 +515,42 @@ let SocialFlyout = {
     }
     this.yOffset = yOffset;
   }
 }
 
 let SocialShareButton = {
   // Called once, after window load, when the Social.provider object is initialized
   init: function SSB_init() {
+    this.updateProvider();
+  },
+
+  // Called when the Social.provider changes
+  updateProvider: function () {
     this.updateButtonHiddenState();
+    if (!Social.provider)
+      return;
     this.updateProfileInfo();
   },
 
+  // Called when the provider's profile info changes (or when the provider
+  // changes, via updateProvider)
   updateProfileInfo: function SSB_updateProfileInfo() {
     let profileRow = document.getElementById("unsharePopupHeader");
     let profile = Social.provider.profile;
     if (profile && profile.displayName) {
       profileRow.hidden = false;
       let portrait = document.getElementById("socialUserPortrait");
       portrait.setAttribute("src", profile.portrait || "chrome://global/skin/icons/information-32.png");
       let displayName = document.getElementById("socialUserDisplayName");
       displayName.setAttribute("label", profile.displayName);
     } else {
       profileRow.hidden = true;
       this.updateButtonHiddenState();
-      return;
     }
-    this.updateShareState();
   },
 
   get shareButton() {
     return document.getElementById("share-button");
   },
   get unsharePopup() {
     return document.getElementById("unsharePopup");
   },
@@ -513,18 +563,19 @@ let SocialShareButton = {
     // We only allow sharing of http or https
     return aURI && (aURI.schemeIs('http') || aURI.schemeIs('https'));
   },
 
   updateButtonHiddenState: function SSB_updateButtonHiddenState() {
     let shareButton = this.shareButton;
     if (shareButton)
       shareButton.hidden = !Social.uiVisible || Social.provider.recommendInfo == null ||
-                           !SocialUI.haveLoggedInUser() ||
+                           !Social.haveLoggedInUser() ||
                            !this.canSharePage(gBrowser.currentURI);
+
     // also update the relevent command's disabled state so the keyboard
     // shortcut only works when available.
     let cmd = document.getElementById("Social:SharePage");
     cmd.setAttribute("disabled", shareButton.hidden ? "true" : "false");
   },
 
   onClick: function SSB_onClick(aEvent) {
     if (aEvent.button != 0)
@@ -572,18 +623,16 @@ let SocialShareButton = {
 
   unsharePage: function SSB_unsharePage() {
     Social.unsharePage(gBrowser.currentURI);
     this.updateShareState();
     this.dismissUnsharePopup();
   },
 
   updateShareState: function SSB_updateShareState() {
-    // we might have been called due to a location change, and the new location
-    // might change the state of "can this url be shared"
     this.updateButtonHiddenState();
 
     let shareButton = this.shareButton;
     let currentPageShared = shareButton && !shareButton.hidden && Social.isPageShared(gBrowser.currentURI);
 
     let recommendInfo = Social.provider ? Social.provider.recommendInfo : null;
     // Provide a11y-friendly notification of share.
     let status = document.getElementById("share-button-status");
@@ -621,70 +670,82 @@ var SocialMenu = {
   populate: function SocialMenu_populate() {
     let submenu = document.getElementById("menu_social-statusarea-popup");
     let ambientMenuItems = submenu.getElementsByClassName("ambient-menuitem");
     while (ambientMenuItems.length)
       submenu.removeChild(ambientMenuItems.item(0));
 
     let separator = document.getElementById("socialAmbientMenuSeparator");
     separator.hidden = true;
+    if (!Social.uiVisible)
+      return;
+
     let provider = Social.provider;
-    if (provider && provider.enabled) {
-      let iconNames = Object.keys(provider.ambientNotificationIcons);
-      for (let name of iconNames) {
-        let icon = provider.ambientNotificationIcons[name];
-        if (!icon.label || !icon.menuURL)
-          continue;
-        separator.hidden = false;
-        let menuitem = document.createElement("menuitem");
-        menuitem.setAttribute("label", icon.label);
-        menuitem.classList.add("ambient-menuitem");
-        menuitem.addEventListener("command", function() {
-          openUILinkIn(icon.menuURL, "tab");
-        }, false);
-        submenu.insertBefore(menuitem, separator);
-      }
+    let iconNames = Object.keys(provider.ambientNotificationIcons);
+    for (let name of iconNames) {
+      let icon = provider.ambientNotificationIcons[name];
+      if (!icon.label || !icon.menuURL)
+        continue;
+      separator.hidden = false;
+      let menuitem = document.createElement("menuitem");
+      menuitem.setAttribute("label", icon.label);
+      menuitem.classList.add("ambient-menuitem");
+      menuitem.addEventListener("command", function() {
+        openUILinkIn(icon.menuURL, "tab");
+      }, false);
+      submenu.insertBefore(menuitem, separator);
     }
   }
 };
 
+// XXX Need to audit that this is being initialized correctly
 var SocialToolbar = {
-  // Called once, after window load, when the Social.provider object is initialized
+  // Called once, after window load, when the Social.provider object is
+  // initialized.
   init: function SocialToolbar_init() {
-    this.button.setAttribute("image", Social.provider.iconURL);
-
     let brandShortName = document.getElementById("bundle_brand").getString("brandShortName");
     let label = gNavigatorBundle.getFormattedString("social.remove.label",
                                                     [brandShortName]);
     let accesskey = gNavigatorBundle.getString("social.remove.accesskey");
 
     let removeCommand = document.getElementById("Social:Remove");
     removeCommand.setAttribute("label", label);
     removeCommand.setAttribute("accesskey", accesskey);
 
+    this.updateProvider();
+    this._dynamicResizer = new DynamicResizeWatcher();
+  },
+
+  // Called when the Social.provider changes
+  updateProvider: function () {
+    if (!Social.provider)
+      return;
+    this.button.setAttribute("image", Social.provider.iconURL);
     this.updateButton();
     this.updateProfile();
-    this._dynamicResizer = new DynamicResizeWatcher();
+    this.populateProviderMenus();
   },
 
   get button() {
     return document.getElementById("social-provider-button");
   },
 
+  // Note: this doesn't actually handle hiding the toolbar button,
+  // socialActiveBroadcaster is responsible for that.
   updateButtonHiddenState: function SocialToolbar_updateButtonHiddenState() {
     let tbi = document.getElementById("social-toolbar-item");
-    let socialEnabled = Social.enabled;
+    let socialEnabled = Social.uiVisible;
     for (let className of ["social-statusarea-separator", "social-statusarea-user"]) {
       for (let element of document.getElementsByClassName(className))
         element.hidden = !socialEnabled;
     }
     let toggleNotificationsCommand = document.getElementById("Social:ToggleNotifications");
     toggleNotificationsCommand.setAttribute("hidden", !socialEnabled);
 
-    if (!SocialUI.haveLoggedInUser() || !socialEnabled) {
+    if (!Social.haveLoggedInUser() || !socialEnabled) {
       let parent = document.getElementById("social-notification-panel");
       while (parent.hasChildNodes()) {
         let frame = parent.firstChild;
         SharedFrame.forgetGroup(frame.id);
         parent.removeChild(frame);
       }
 
       while (tbi.lastChild != tbi.firstChild)
@@ -695,46 +756,46 @@ var SocialToolbar = {
   updateProfile: function SocialToolbar_updateProfile() {
     // Profile may not have been initialized yet, since it depends on a worker
     // response. In that case we'll be called again when it's available, via
     // social:profile-changed
     let profile = Social.provider.profile || {};
     let userPortrait = profile.portrait || "chrome://global/skin/icons/information-32.png";
 
     let userDetailsBroadcaster = document.getElementById("socialBroadcaster_userDetails");
-    let loggedInStatusValue = profile.userName ?
-                              profile.userName :
-                              userDetailsBroadcaster.getAttribute("notLoggedInLabel");;
+    let loggedInStatusValue = profile.userName ||
+                              userDetailsBroadcaster.getAttribute("notLoggedInLabel");
 
     // "image" and "label" are used by Mac's native menus that do not render the menuitem's children
     // elements. "src" and "value" are used by the image/label children on the other platforms.
     userDetailsBroadcaster.setAttribute("src", userPortrait);
     userDetailsBroadcaster.setAttribute("image", userPortrait);
 
     userDetailsBroadcaster.setAttribute("value", loggedInStatusValue);
     userDetailsBroadcaster.setAttribute("label", loggedInStatusValue);
   },
 
+  // XXX doesn't this need to be called for profile changes, given its use of provider.profile?
   updateButton: function SocialToolbar_updateButton() {
     this.updateButtonHiddenState();
     let provider = Social.provider;
     let icons = provider.ambientNotificationIcons;
     let iconNames = Object.keys(icons);
     let iconBox = document.getElementById("social-toolbar-item");
     let panel = document.getElementById("social-notification-panel");
     panel.hidden = false;
 
     let command = document.getElementById("Social:ToggleNotifications");
     command.setAttribute("checked", Services.prefs.getBoolPref("social.toast-notifications.enabled"));
 
     const CACHE_PREF_NAME = "social.cached.ambientNotificationIcons";
     // provider.profile == undefined means no response yet from the provider
     // to tell us whether the user is logged in or not.
-    if (!Social.provider || !Social.provider.enabled ||
-        (!SocialUI.haveLoggedInUser() && provider.profile !== undefined)) {
+    if (!provider.enabled ||
+        (!Social.haveLoggedInUser() && provider.profile !== undefined)) {
       // Either no enabled provider, or there is a provider and it has
       // responded with a profile and the user isn't loggedin.  The icons
       // etc have already been removed by updateButtonHiddenState, so we want
       // to nuke any cached icons we have and get out of here!
       Services.prefs.clearUserPref(CACHE_PREF_NAME);
       return;
     }
     if (Social.provider.profile === undefined) {
@@ -926,16 +987,51 @@ var SocialToolbar = {
       return;
 
     let src = aNotificationFrame.getAttribute("src");
     aNotificationFrame.removeAttribute("src");
     aNotificationFrame.webNavigation.loadURI("about:socialerror?mode=tryAgainOnly&url=" +
                                              encodeURIComponent(src), null, null, null, null);
     let panel = aNotificationFrame.parentNode;
     sizeSocialPanelToContent(panel, aNotificationFrame);
+  },
+
+  populateProviderMenus: function SocialToolbar_renderProviderMenus() {
+    let providerMenuSeps = document.getElementsByClassName("social-provider-menu");
+    let activeProviders = [p for (p of Social.providers) if (p.active)];
+    for (let providerMenuSep of providerMenuSeps)
+      this._populateProviderMenu(providerMenuSep, activeProviders);
+  },
+
+  _populateProviderMenu: function SocialToolbar_renderProviderMenu(providerMenuSep, providers) {
+    let menu = providerMenuSep.parentNode;
+    // selectable providers are inserted before the provider-menu seperator,
+    // remove any menuitems in that area
+    while (providerMenuSep.previousSibling.nodeName == "menuitem") {
+      menu.removeChild(providerMenuSep.previousSibling);
+    }
+    // only show a selection if there is more than one
+    if (!Social.enabled || providers.length < 2) {
+      providerMenuSep.hidden = true;
+      return;
+    }
+    for (let provider of providers) {
+      let menuitem = document.createElement("menuitem");
+      menuitem.className = "menuitem-iconic social-provider-menuitem";
+      menuitem.setAttribute("image", provider.iconURL);
+      menuitem.setAttribute("label", provider.name);
+      menuitem.setAttribute("origin", provider.origin);
+      if (provider == Social.provider) {
+        menuitem.setAttribute("checked", "true");
+      } else {
+        menuitem.setAttribute("oncommand", "Social.setProviderByOrigin(this.getAttribute('origin'));");
+      }
+      menu.insertBefore(menuitem, providerMenuSep);
+    }
+    providerMenuSep.hidden = false;
   }
 }
 
 var SocialSidebar = {
   // Called once, after window load, when the Social.provider object is initialized
   init: function SocialSidebar_init() {
     let sbrowser = document.getElementById("social-sidebar-browser");
     this.errorListener = new SocialErrorListener("sidebar");
@@ -991,39 +1087,40 @@ var SocialSidebar = {
     // Hide the sidebar if it cannot appear, or has been toggled off.
     // Also set the command "checked" state accordingly.
     let hideSidebar = !this.canShow || !this.opened;
     let broadcaster = document.getElementById("socialSidebarBroadcaster");
     broadcaster.hidden = hideSidebar;
     command.setAttribute("checked", !hideSidebar);
 
     let sbrowser = document.getElementById("social-sidebar-browser");
+
     if (hideSidebar) {
       sbrowser.removeEventListener("load", SocialSidebar._loadListener, true);
       this.setSidebarVisibilityState(false);
       // If we've been disabled, unload the sidebar content immediately;
       // if the sidebar was just toggled to invisible, wait a timeout
       // before unloading.
       if (!this.canShow) {
         this.unloadSidebar();
       } else {
         this._unloadTimeoutId = setTimeout(
           this.unloadSidebar,
           Services.prefs.getIntPref("social.sidebar.unload_timeout_ms")
         );
       }
     } else {
-      if (Social.errorState == "frameworker-error") {
+      sbrowser.setAttribute("origin", Social.provider.origin);
+      if (Social.provider.errorState == "frameworker-error") {
         SocialSidebar.setSidebarErrorMessage("frameworker-error");
         return;
       }
 
       // Make sure the right sidebar URL is loaded
-      if (sbrowser.getAttribute("origin") != Social.provider.origin) {
-        sbrowser.setAttribute("origin", Social.provider.origin);
+      if (sbrowser.getAttribute("src") != Social.provider.sidebarURL) {
         sbrowser.setAttribute("src", Social.provider.sidebarURL);
         sbrowser.addEventListener("load", SocialSidebar._loadListener, true);
       } else {
         this.setSidebarVisibilityState(true);
       }
     }
   },
 
@@ -1033,16 +1130,17 @@ var SocialSidebar = {
     SocialSidebar.setSidebarVisibilityState(true);
   },
 
   unloadSidebar: function SocialSidebar_unloadSidebar() {
     let sbrowser = document.getElementById("social-sidebar-browser");
     if (!sbrowser.hasAttribute("origin"))
       return;
 
+    sbrowser.stop();
     sbrowser.removeAttribute("origin");
     sbrowser.setAttribute("src", "about:blank");
     SocialFlyout.unload();
   },
 
   _unloadTimeoutId: 0,
 
   setSidebarErrorMessage: function(aType) {
@@ -1089,17 +1187,17 @@ SocialErrorListener.prototype = {
     if (failure && aStatus != Components.results.NS_BINDING_ABORTED) {
       aRequest.cancel(Components.results.NS_BINDING_ABORTED);
       this.setErrorMessage(aWebProgress);
     }
   },
 
   onLocationChange: function SPL_onLocationChange(aWebProgress, aRequest, aLocation, aFlags) {
     let failure = aFlags & Ci.nsIWebProgressListener.LOCATION_CHANGE_ERROR_PAGE;
-    if (failure && Social.errorState != "frameworker-error") {
+    if (failure && Social.provider.errorState != "frameworker-error") {
       aRequest.cancel(Components.results.NS_BINDING_ABORTED);
       window.setTimeout(function(self) {
         self.setErrorMessage(aWebProgress);
       }, 0, this);
     }
   },
 
   onProgressChange: function SPL_onProgressChange() {},
@@ -1109,17 +1207,17 @@ SocialErrorListener.prototype = {
   setErrorMessage: function(aWebProgress) {
     switch (this.type) {
       case "flyout":
         SocialFlyout.setFlyoutErrorMessage();
         break;
 
       case "sidebar":
         // a frameworker error "trumps" a sidebar error.
-        let reason = Social.errorState ? Social.errorState : "sidebar-error";
+        let reason = Social.provider.errorState || "sidebar-error";
         SocialSidebar.setSidebarErrorMessage(reason);
         break;
 
       case "notification-panel":
         let frame = aWebProgress.QueryInterface(Ci.nsIDocShell)
                                 .chromeEventHandler;
         SocialToolbar.setPanelErrorMessage(frame);
         break;
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -1313,23 +1313,26 @@ var gBrowserInit = {
     // Bug 666804 - NetworkPrioritizer support for e10s
 #else
     let NP = {};
     Cu.import("resource:///modules/NetworkPrioritizer.jsm", NP);
     NP.trackBrowserWindow(window);
 #endif
 
     // initialize the session-restore service (in case it's not already running)
-    try {
-      Cc["@mozilla.org/browser/sessionstore;1"]
-        .getService(Ci.nsISessionStore)
-        .init(window);
-    } catch (ex) {
-      dump("nsSessionStore could not be initialized: " + ex + "\n");
-    }
+    let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
+    ss.init(window);
+
+    // Enable the Restore Last Session command if needed
+    if (ss.canRestoreLastSession
+#ifdef MOZ_PER_WINDOW_PRIVATE_BROWSING
+        && !PrivateBrowsingUtils.isWindowPrivate(window)
+#endif
+        )
+      goSetCommandEnabled("Browser:RestoreLastSession", true);
 
     PlacesToolbarHelper.init();
 
     ctrlTab.readPref();
     gPrefService.addObserver(ctrlTab.prefName, ctrlTab, false);
     gPrefService.addObserver(allTabs.prefName, allTabs, false);
 
     // Initialize the download manager some time after the app starts so that
@@ -1454,17 +1457,17 @@ var gBrowserInit = {
     let responsiveUIEnabled = gPrefService.getBoolPref("devtools.responsiveUI.enabled");
     if (responsiveUIEnabled) {
       let cmd = document.getElementById("Tools:ResponsiveUI");
       cmd.removeAttribute("disabled");
       cmd.removeAttribute("hidden");
     }
 
     // Add Devtools menuitems and listeners
-    gDevTools.registerBrowserWindow(window);
+    gDevToolsBrowser.registerBrowserWindow(window);
 
     let appMenuButton = document.getElementById("appmenu-button");
     let appMenuPopup = document.getElementById("appmenu-popup");
     if (appMenuButton && appMenuPopup) {
       let appMenuOpening = null;
       appMenuButton.addEventListener("mousedown", function(event) {
         if (event.button == 0)
           appMenuOpening = new Date();
@@ -1498,17 +1501,17 @@ var gBrowserInit = {
 
   onUnload: function() {
     // In certain scenarios it's possible for unload to be fired before onload,
     // (e.g. if the window is being closed after browser.js loads but before the
     // load completes). In that case, there's nothing to do here.
     if (!this._loadHandled)
       return;
 
-    gDevTools.forgetBrowserWindow(window);
+    gDevToolsBrowser.forgetBrowserWindow(window);
 
     // First clean up services initialized in gBrowserInit.onLoad (or those whose
     // uninit methods don't depend on the services having been initialized).
     allTabs.uninit();
 
     CombinedStopReload.uninit();
 
     gGestureSupport.init(false);
@@ -1637,16 +1640,18 @@ var gBrowserInit = {
                             .getService(Ci.nsIMacDockSupport);
           dockSupport.dockMenu = nativeMenu;
         }
         catch (e) {
         }
       }
     }
 
+    SocialUI.nonBrowserWindowInit();
+
     this._delayedStartupTimeoutId = setTimeout(this.nonBrowserWindowDelayedStartup.bind(this), 0);
   },
 
   nonBrowserWindowDelayedStartup: function() {
     this._delayedStartupTimeoutId = null;
 
     // initialise the offline listener
     BrowserOffline.init();
@@ -2453,17 +2458,21 @@ function BrowserOnAboutPageLoad(document
   if (/^about:home$/i.test(document.documentURI)) {
     // XXX bug 738646 - when Marketplace is launched, remove this statement and
     // the hidden attribute set on the apps button in aboutHome.xhtml
     if (getBoolPref("browser.aboutHome.apps", false))
       document.getElementById("apps").removeAttribute("hidden");
 
     let ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
              getService(Components.interfaces.nsISessionStore);
-    if (ss.canRestoreLastSession)
+    if (ss.canRestoreLastSession
+#ifdef MOZ_PER_WINDOW_PRIVATE_BROWSING
+        && !PrivateBrowsingUtils.isWindowPrivate(window)
+#endif
+        )
       document.getElementById("launcher").setAttribute("session", "true");
 
     // Inject search engine and snippets URL.
     let docElt = document.documentElement;
     docElt.setAttribute("snippetsURL", AboutHomeUtils.snippetsURL);
     docElt.setAttribute("searchEngineName",
                         AboutHomeUtils.defaultSearchEngine.name);
     docElt.setAttribute("searchEngineURL",
@@ -3480,27 +3489,26 @@ function OpenBrowserWindow(options)
 
   var charsetArg = new String();
   var handler = Components.classes["@mozilla.org/browser/clh;1"]
                           .getService(Components.interfaces.nsIBrowserHandler);
   var defaultArgs = handler.defaultArgs;
   var wintype = document.documentElement.getAttribute('windowtype');
 
   var extraFeatures = "";
-  var forcePrivate = false;
 #ifdef MOZ_PER_WINDOW_PRIVATE_BROWSING
-  forcePrivate = typeof options == "object" && "private" in options && options.private;
+  if (typeof options == "object" && options.private) {
 #else
-  forcePrivate = gPrivateBrowsingUI.privateBrowsingEnabled;
+  if (gPrivateBrowsingUI.privateBrowsingEnabled) {
 #endif
-
-  if (forcePrivate) {
     extraFeatures = ",private";
     // Force the new window to load about:privatebrowsing instead of the default home page
     defaultArgs = "about:privatebrowsing";
+  } else {
+    extraFeatures = ",non-private";
   }
 
   // if and only if the current window is a browser window and it has a document with a character
   // set, then extract the current charset menu setting from the current document and use it to
   // initialize the new browser window...
   var win;
   if (window && (wintype == "navigator:browser") && window.content && window.content.document)
   {
@@ -7284,17 +7292,17 @@ var TabContextMenu = {
     document.getElementById("context_tabViewMenu").hidden =
       (this.contextTab.pinned || !TabView.firstUseExperienced);
   }
 };
 
 XPCOMUtils.defineLazyModuleGetter(this, "gDevTools",
                                   "resource:///modules/devtools/gDevTools.jsm");
 
-XPCOMUtils.defineLazyModuleGetter(this, "DevToolsXULCommands",
+XPCOMUtils.defineLazyModuleGetter(this, "gDevToolsBrowser",
                                   "resource:///modules/devtools/gDevTools.jsm");
 
 XPCOMUtils.defineLazyGetter(this, "HUDConsoleUI", function () {
   let tempScope = {};
   Cu.import("resource:///modules/HUDService.jsm", tempScope);
   try {
     return tempScope.HUDService.consoleUI;
   }
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -189,32 +189,32 @@
         <vbox flex="1">
           <description id="social-activation-message" class="popup-notification-description"/>
           <spacer flex="1"/>
           <hbox pack="end" align="center" class="popup-notification-button-container">
 #ifdef XP_UNIX
         <button id="social-undoactivation-button"
                 label="&social.activated.undobutton.label;"
                 accesskey="&social.activated.undobutton.accesskey;"
-                onclick="SocialUI.undoActivation();"/>
+                onclick="SocialUI.undoActivation(this);"/>
         <button default="true"
                 autofocus="autofocus"
                 label="&social.ok.label;"
                 accesskey="&social.ok.accesskey;"
                 oncommand="SocialUI.notificationPanel.hidePopup();"/>
 #else
         <button default="true"
                 autofocus="autofocus"
                 label="&social.ok.label;"
                 accesskey="&social.ok.accesskey;"
                 oncommand="SocialUI.notificationPanel.hidePopup();"/>
         <button id="social-undoactivation-button"
                 label="&social.activated.undobutton.label;"
                 accesskey="&social.activated.undobutton.accesskey;"
-                onclick="SocialUI.undoActivation();"/>
+                onclick="SocialUI.undoActivation(this);"/>
 #endif
           </hbox>
         </vbox>
       </hbox>
     </panel>
 
     <panel id="unsharePopup"
            type="arrow"
@@ -552,16 +552,17 @@
             <image id="default-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="identity-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="geo-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="addons-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="indexedDB-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="password-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="webapps-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="plugins-notification-icon" class="notification-anchor-icon" role="button"/>
+            <image id="blocked-plugins-notification-icon" class="notification-anchor-icon" role="button"/>
           </box>
           <!-- Use onclick instead of normal popup= syntax since the popup
                code fires onmousedown, and hence eats our favicon drag events.
                We only add the identity-box button to the tab order when the location bar
                has focus, otherwise pressing F6 focuses it instead of the location bar -->
           <box id="identity-box" role="button"
                align="center"
                onclick="gIdentityHandler.handleIdentityButtonEvent(event);"
@@ -674,16 +675,17 @@
                       accesskey="&social.toggleSidebar.accesskey;"/>
             <menuitem class="social-toggle-notifications-menuitem"
                       type="checkbox"
                       autocheck="false"
                       command="Social:ToggleNotifications"
                       label="&social.toggleNotifications.label;"
                       accesskey="&social.toggleNotifications.accesskey;"/>
             <menuseparator class="social-statusarea-separator"/>
+            <menuseparator class="social-provider-menu" hidden="true"/>
             <menuitem class="social-toggle-menuitem" command="Social:Toggle"/>
             <menuitem class="social-remove-menuitem" command="Social:Remove"/>
           </menupopup>
         </toolbarbutton>
       </toolbaritem>
 
       <toolbaritem id="bookmarks-menu-button-container"
                    class="chromeclass-toolbar-additional"
--- a/browser/base/content/nsContextMenu.js
+++ b/browser/base/content/nsContextMenu.js
@@ -416,35 +416,28 @@ nsContextMenu.prototype = {
     }
     this.showItem("context-media-sep-commands",  onMedia);
   },
 
   inspectNode: function CM_inspectNode() {
     let gBrowser = this.browser.ownerDocument.defaultView.gBrowser;
     let imported = {};
     Cu.import("resource:///modules/devtools/Target.jsm", imported);
-    var target = imported.TargetFactory.forTab(gBrowser.selectedTab);
-    let inspector = gDevTools.getPanelForTarget("inspector", target);
-    if (inspector && inspector.isReady) {
-      inspector.selection.setNode(this.target);
-    } else {
-      let toolbox = gDevTools.openToolboxForTab(target, "inspector");
-      toolbox.once("inspector-ready", function(event, panel) {
-        let inspector = gDevTools.getPanelForTarget("inspector", target);
-        inspector.selection.setNode(this.target, "browser-context-menu");
-      }.bind(this));
-    }
+    let tt = imported.TargetFactory.forTab(gBrowser.selectedTab);
+    return gDevTools.showToolbox(tt, "inspector").then(function(toolbox) {
+      let inspector = toolbox.getCurrentPanel();
+      inspector.selection.setNode(this.target, "browser-context-menu");
+    }.bind(this));
   },
 
   // Set various context menu attributes based on the state of the world.
   setTarget: function (aNode, aRangeParent, aRangeOffset) {
     const xulNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
     if (aNode.namespaceURI == xulNS ||
-        aNode.nodeType == Node.DOCUMENT_NODE ||
-        this.isTargetAFormControl(aNode)) {
+        aNode.nodeType == Node.DOCUMENT_NODE) {
       this.shouldDisplay = false;
       return;
     }
 
     // Initialize contextual info.
     this.onImage           = false;
     this.onLoadedImage     = false;
     this.onCompletedImage  = false;
@@ -1292,28 +1285,16 @@ nsContextMenu.prototype = {
     return "contextMenu.target     = " + this.target + "\n" +
            "contextMenu.onImage    = " + this.onImage + "\n" +
            "contextMenu.onLink     = " + this.onLink + "\n" +
            "contextMenu.link       = " + this.link + "\n" +
            "contextMenu.inFrame    = " + this.inFrame + "\n" +
            "contextMenu.hasBGImage = " + this.hasBGImage + "\n";
   },
 
-  // Returns true if aNode is a from control (except text boxes and images).
-  // This is used to disable the context menu for form controls.
-  isTargetAFormControl: function(aNode) {
-    if (aNode instanceof HTMLInputElement)
-      return (!aNode.mozIsTextField(false) && aNode.type != "image");
-
-    return (aNode instanceof HTMLButtonElement) ||
-           (aNode instanceof HTMLSelectElement) ||
-           (aNode instanceof HTMLOptionElement) ||
-           (aNode instanceof HTMLOptGroupElement);
-  },
-
   isTargetATextBox: function(node) {
     if (node instanceof HTMLInputElement)
       return node.mozIsTextField(false);
 
     return (node instanceof HTMLTextAreaElement);
   },
 
   isTargetAKeywordField: function(aNode) {
--- a/browser/base/content/test/Makefile.in
+++ b/browser/base/content/test/Makefile.in
@@ -5,16 +5,17 @@
 DEPTH		= @DEPTH@
 topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH		= @srcdir@
 relativesrcdir  = @relativesrcdir@
 
 DIRS += \
 		newtab \
+		social \
 		$(NULL)
 
 include $(DEPTH)/config/autoconf.mk
 
 MOCHITEST_FILES = \
 		head.js \
 		test_feed_discovery.html \
 		feed_discovery.html \
@@ -281,31 +282,16 @@ endif
                  browser_bug734076.js \
                  browser_bug812562.js \
                  browser_bug818009.js \
                  browser_bug818118.js \
                  blockPluginVulnerableUpdatable.xml \
                  blockPluginVulnerableNoUpdate.xml \
                  blockNoPlugins.xml \
                  browser_utilityOverlay.js \
-                 browser_social.js \
-                 browser_social_toolbar.js \
-                 browser_social_shareButton.js \
-                 browser_social_sidebar.js \
-                 browser_social_flyout.js \
-                 browser_social_mozSocial_API.js \
-                 browser_social_isVisible.js \
-                 browser_social_chatwindow.js \
-                 social_panel.html \
-                 social_share_image.png \
-                 social_sidebar.html \
-                 social_chat.html \
-                 social_flyout.html \
-                 social_window.html \
-                 social_worker.js \
                  browser_bug676619.js \
                  download_page.html \
                  $(NULL)
 
 ifneq (cocoa,$(MOZ_WIDGET_TOOLKIT))
 _BROWSER_FILES += \
 		browser_bug462289.js \
 		$(NULL)
--- a/browser/base/content/test/browser_bug424101.js
+++ b/browser/base/content/test/browser_bug424101.js
@@ -29,25 +29,25 @@ function test() {
       let contextMenu = new nsContextMenu(contentAreaContextMenu, gBrowser);
 
       is(contextMenu.shouldDisplay, expected, "context menu behavior for <" + tag + "> is wrong");
     };
 
     testInput("text", true);
     testInput("password", true);
     testInput("image", true);
-    testInput("button", false);
-    testInput("submit", false);
-    testInput("reset", false);
-    testInput("checkbox", false);
-    testInput("radio", false);
-    testElement("button", false);
-    testElement("select", false);
-    testElement("option", false);
-    testElement("optgroup", false);
+    testInput("button", true);
+    testInput("submit", true);
+    testInput("reset", true);
+    testInput("checkbox", true);
+    testInput("radio", true);
+    testElement("button", true);
+    testElement("select", true);
+    testElement("option", true);
+    testElement("optgroup", true);
 
     // cleanup
     document.popupNode = null;
     gBrowser.removeCurrentTab();
     finish();
   }, true);
   content.location = "data:text/html,test";
 }
--- a/browser/base/content/test/browser_clickToPlayPluginScriptAccessPopup.js
+++ b/browser/base/content/test/browser_clickToPlayPluginScriptAccessPopup.js
@@ -18,21 +18,25 @@ function test() {
   });
   Services.prefs.setBoolPref("plugins.click_to_play", true);
 
   gBrowser.selectedTab = gBrowser.addTab();
   gTestBrowser = gBrowser.selectedBrowser;
   gTestBrowser.addEventListener("load", pageLoad, true);
   gTestBrowser.addEventListener("PluginScripted", pluginScripted, true);
 
+  // This list is iterated in reverse order, since it uses Array.pop to get the next test.
   gNextTestList = [
-    { func: testExpectPopupPart1,
+    // Doesn't show a popup since not the first instance of a small plugin
+    { func: testExpectNoPopupPart1,
       url: gHttpTestRoot + "plugin_test_scriptedPopup1.html" },
-    { func: testExpectPopupPart1,
+    // Doesn't show a popup since not the first instance of a small plugin
+    { func: testExpectNoPopupPart1,
       url: gHttpTestRoot + "plugin_test_scriptedPopup2.html" },
+    // Shows a popup since it is the first instance of a small plugin
     { func: testExpectPopupPart1,
       url: gHttpTestRoot + "plugin_test_scriptedPopup3.html" },
     { func: testExpectNoPopupPart1,
       url: gHttpTestRoot + "plugin_test_scriptedNoPopup1.html" },
     { func: testExpectNoPopupPart1,
       url: gHttpTestRoot + "plugin_test_scriptedNoPopup2.html" },
     { func: testExpectNoPopupPart1,
       url: gHttpTestRoot + "plugin_test_scriptedNoPopup3.html" }
--- a/browser/base/content/test/browser_pluginnotification.js
+++ b/browser/base/content/test/browser_pluginnotification.js
@@ -987,20 +987,22 @@ function test23() {
 
   // Activate
   objLoadingContent.playPlugin();
   is(objLoadingContent.displayedType, Ci.nsIObjectLoadingContent.TYPE_PLUGIN, "Test 23, plugin should have started");
   ok(pluginNode.activated, "Test 23, plugin should be activated");
 
   // Reload plugin (this may need RunSoon() in the future when plugins change state asynchronously)
   pluginNode.type = null;
-  pluginNode.src = pluginNode.src; // We currently don't properly change state just on type change, bug 767631
+  // We currently don't properly change state just on type change,
+  // so rebind the plugin to tree. bug 767631
+  pluginNode.parentNode.appendChild(pluginNode);
   is(objLoadingContent.displayedType, Ci.nsIObjectLoadingContent.TYPE_NULL, "Test 23, plugin should be unloaded");
   pluginNode.type = "application/x-test";
-  pluginNode.src = pluginNode.src;
+  pluginNode.parentNode.appendChild(pluginNode);
   is(objLoadingContent.displayedType, Ci.nsIObjectLoadingContent.TYPE_NULL, "Test 23, Plugin should not have activated");
   is(objLoadingContent.pluginFallbackType, Ci.nsIObjectLoadingContent.PLUGIN_CLICK_TO_PLAY, "Test 23, Plugin should be click-to-play");
   ok(!pluginNode.activated, "Test 23, plugin node should not be activated");
 
   prepareTest(test24a, gHttpTestRoot + "plugin_test.html");
 }
 
 // Test that "always allow"-ing a plugin will not allow it when it becomes
--- a/browser/base/content/test/browser_private_browsing_window.js
+++ b/browser/base/content/test/browser_private_browsing_window.js
@@ -1,11 +1,24 @@
 // Make sure that we can open private browsing windows
 
 function test() {
+  waitForExplicitFinish();
   var nonPrivateWin = OpenBrowserWindow();
   ok(!PrivateBrowsingUtils.isWindowPrivate(nonPrivateWin), "OpenBrowserWindow() should open a normal window");
   nonPrivateWin.close();
+
   var privateWin = OpenBrowserWindow({private: true});
   ok(PrivateBrowsingUtils.isWindowPrivate(privateWin), "OpenBrowserWindow({private: true}) should open a private window");
-  privateWin.close();
+
+  nonPrivateWin = OpenBrowserWindow({private: false});
+  ok(!PrivateBrowsingUtils.isWindowPrivate(nonPrivateWin), "OpenBrowserWindow({private: false}) should open a normal window");
+  nonPrivateWin.close();
+
+  whenDelayedStartupFinished(privateWin, function() {
+    nonPrivateWin = privateWin.OpenBrowserWindow({private: false});
+    ok(!PrivateBrowsingUtils.isWindowPrivate(nonPrivateWin), "privateWin.OpenBrowserWindow({private: false}) should open a normal window");
+    nonPrivateWin.close();
+    privateWin.close();
+    finish();
+  });
 }
 
--- a/browser/base/content/test/head.js
+++ b/browser/base/content/test/head.js
@@ -83,129 +83,29 @@ function waitForCondition(condition, nex
     if (condition()) {
       moveOn();
     }
     tries++;
   }, 100);
   var moveOn = function() { clearInterval(interval); nextTest(); };
 }
 
-// Check that a specified (string) URL hasn't been "remembered" (ie, is not
-// in history, will not appear in about:newtab or auto-complete, etc.)
-function ensureSocialUrlNotRemembered(url) {
-  let gh = Cc["@mozilla.org/browser/global-history;2"]
-           .getService(Ci.nsIGlobalHistory2);
-  let uri = Services.io.newURI(url, null, null);
-  ok(!gh.isVisited(uri), "social URL " + url + " should not be in global history");
-}
-
 function getTestPlugin() {
   var ph = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost);
   var tags = ph.getPluginTags();
 
   // Find the test plugin
   for (var i = 0; i < tags.length; i++) {
     if (tags[i].name == "Test Plug-in")
       return tags[i];
   }
   ok(false, "Unable to find plugin");
   return null;
 }
 
-function runSocialTestWithProvider(manifest, callback) {
-  let SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService;
-
-  // Check that none of the provider's content ends up in history.
-  registerCleanupFunction(function () {
-    for (let what of ['sidebarURL', 'workerURL', 'iconURL']) {
-      if (manifest[what]) {
-        ensureSocialUrlNotRemembered(manifest[what]);
-      }
-    }
-  });
-
-  info("runSocialTestWithProvider: " + manifest.toSource());
-
-  let oldProvider;
-  SocialService.addProvider(manifest, function(provider) {
-    info("runSocialTestWithProvider: provider added");
-    oldProvider = Social.provider;
-    Social.provider = provider;
-
-    // Now that we've set the UI's provider, enable the social functionality
-    Services.prefs.setBoolPref("social.enabled", true);
-    Services.prefs.setBoolPref("social.active", true);
-
-    // Need to re-call providerReady since it is actually called before the test
-    // framework is loaded and the provider state won't be set in the browser yet.
-    SocialUI._providerReady();
-
-    registerCleanupFunction(function () {
-      // if one test happens to fail, it is likely finishSocialTest will not
-      // be called, causing most future social tests to also fail as they
-      // attempt to add a provider which already exists - so work
-      // around that by also attempting to remove the test provider.
-      try {
-        SocialService.removeProvider(provider.origin, finish);
-      } catch (ex) {
-        ;
-      }
-      Social.provider = oldProvider;
-      Services.prefs.clearUserPref("social.enabled");
-      Services.prefs.clearUserPref("social.active");
-    });
-
-    function finishSocialTest() {
-      SocialService.removeProvider(provider.origin, finish);
-    }
-    callback(finishSocialTest);
-  });
-}
-
-
-function runSocialTests(tests, cbPreTest, cbPostTest, cbFinish) {
-  let testIter = Iterator(tests);
-
-  if (cbPreTest === undefined) {
-    cbPreTest = function(cb) {cb()};
-  }
-  if (cbPostTest === undefined) {
-    cbPostTest = function(cb) {cb()};
-  }
-
-  function runNextTest() {
-    let name, func;
-    try {
-      [name, func] = testIter.next();
-    } catch (err if err instanceof StopIteration) {
-      // out of items:
-      (cbFinish || finish)();
-      return;
-    }
-    // We run on a timeout as the frameworker also makes use of timeouts, so
-    // this helps keep the debug messages sane.
-    executeSoon(function() {
-      function cleanupAndRunNextTest() {
-        info("sub-test " + name + " complete");
-        cbPostTest(runNextTest);
-      }
-      cbPreTest(function() {
-        info("sub-test " + name + " starting");
-        try {
-          func.call(tests, cleanupAndRunNextTest);
-        } catch (ex) {
-          ok(false, "sub-test " + name + " failed: " + ex.toString() +"\n"+ex.stack);
-          cleanupAndRunNextTest();
-        }
-      })
-    });
-  }
-  runNextTest();
-}
-
 function updateBlocklist(aCallback) {
   var blocklistNotifier = Cc["@mozilla.org/extensions/blocklist;1"]
                           .getService(Ci.nsITimerCallback);
   var observer = function() {
     aCallback();
     Services.obs.removeObserver(observer, "blocklist-updated");
   };
   Services.obs.addObserver(observer, "blocklist-updated", false);
new file mode 100644
--- /dev/null
+++ b/browser/base/content/test/social/Makefile.in
@@ -0,0 +1,36 @@
+# 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/.
+
+DEPTH		= @DEPTH@
+topsrcdir	= @top_srcdir@
+srcdir		= @srcdir@
+VPATH		= @srcdir@
+relativesrcdir  = @relativesrcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+_BROWSER_FILES = \
+                 head.js \
+                 browser_social.js \
+                 browser_social_toolbar.js \
+                 browser_social_shareButton.js \
+                 browser_social_sidebar.js \
+                 browser_social_flyout.js \
+                 browser_social_mozSocial_API.js \
+                 browser_social_isVisible.js \
+                 browser_social_chatwindow.js \
+                 browser_social_multiprovider.js \
+                 social_panel.html \
+                 social_share_image.png \
+                 social_sidebar.html \
+                 social_chat.html \
+                 social_flyout.html \
+                 social_window.html \
+                 social_worker.js \
+                 $(NULL)
+
+include $(topsrcdir)/config/rules.mk
+
+libs::	$(_BROWSER_FILES)
+	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/browser/$(relativesrcdir)
rename from browser/base/content/test/browser_social.js
rename to browser/base/content/test/social/browser_social.js
--- a/browser/base/content/test/browser_social.js
+++ b/browser/base/content/test/social/browser_social.js
@@ -25,18 +25,18 @@ function portClosed(port) {
 }
 
 function test() {
   waitForExplicitFinish();
 
   let manifest = { // normal provider
     name: "provider 1",
     origin: "https://example.com",
-    sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
-    workerURL: "https://example.com/browser/browser/base/content/test/social_worker.js",
+    sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
+    workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
     iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
   };
   runSocialTestWithProvider(manifest, function (finishcb) {
     runSocialTests(tests, undefined, undefined, finishcb);
   });
 }
 
 var tests = {
@@ -48,29 +48,31 @@ var tests = {
       let topic = e.data.topic;
       switch (topic) {
         case "got-sidebar-message":
           ok(true, "got sidebar message");
           port.close();
           togglePrivateBrowsing(function () {
             ok(!Social.enabled, "Social shuts down during private browsing");
             togglePrivateBrowsing(function () {
+              ok(Social.provider.getWorkerPort(), "port still obtainable after PB")
               ok(Social.enabled, "Social enabled after private browsing");
               next();
             });
           });
           break;
       }
     };
   },
 
   testPrivateBrowsingSocialDisabled: function(next) {
     // test PB from the perspective of entering PB without social enabled
     // we expect social to be enabled at the start of the test, we need
     // to disable it before testing PB transitions.
+    ok(Social.enabled, "social is still enabled");
     let port = Social.provider.getWorkerPort();
     ok(port, "provider has a port");
     port.postMessage({topic: "test-init"});
     port.onmessage = function (e) {
       let topic = e.data.topic;
       switch (topic) {
         case "got-sidebar-message":
           ok(true, "got sidebar message");
rename from browser/base/content/test/browser_social_chatwindow.js
rename to browser/base/content/test/social/browser_social_chatwindow.js
--- a/browser/base/content/test/browser_social_chatwindow.js
+++ b/browser/base/content/test/social/browser_social_chatwindow.js
@@ -3,18 +3,18 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 function test() {
   waitForExplicitFinish();
 
   let ma