johnson 1.2.0 → 2.0.0.pre0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.rdoc +8 -0
- data/Manifest.txt +762 -48
- data/README.rdoc +2 -1
- data/Rakefile +90 -18
- data/ext/spidermonkey/conversions.c +9 -2
- data/ext/spidermonkey/ruby_land_proxy.c +1 -1
- data/ext/spidermonkey/runtime.h +1 -1
- data/ext/tracemonkey/context.cc +125 -0
- data/ext/tracemonkey/context.h +19 -0
- data/ext/tracemonkey/conversions.cc +365 -0
- data/ext/tracemonkey/conversions.h +32 -0
- data/ext/tracemonkey/debugger.cc +234 -0
- data/ext/tracemonkey/debugger.h +10 -0
- data/ext/tracemonkey/extconf.rb +37 -0
- data/ext/tracemonkey/extensions.cc +37 -0
- data/ext/tracemonkey/extensions.h +12 -0
- data/ext/tracemonkey/global.cc +40 -0
- data/ext/tracemonkey/global.h +11 -0
- data/ext/tracemonkey/idhash.cc +16 -0
- data/ext/tracemonkey/idhash.h +8 -0
- data/ext/tracemonkey/immutable_node.cc +1199 -0
- data/ext/tracemonkey/immutable_node.cc.erb +559 -0
- data/ext/tracemonkey/immutable_node.h +22 -0
- data/ext/tracemonkey/jroot.h +215 -0
- data/ext/tracemonkey/js_land_proxy.cc +620 -0
- data/ext/tracemonkey/js_land_proxy.h +20 -0
- data/ext/tracemonkey/ruby_land_proxy.cc +618 -0
- data/ext/tracemonkey/ruby_land_proxy.h +38 -0
- data/ext/tracemonkey/runtime.cc +454 -0
- data/ext/tracemonkey/runtime.h +27 -0
- data/ext/tracemonkey/split_global.cc +392 -0
- data/ext/tracemonkey/split_global.h +11 -0
- data/ext/tracemonkey/tracemonkey.cc +23 -0
- data/ext/tracemonkey/tracemonkey.h +32 -0
- data/lib/johnson.rb +12 -4
- data/lib/johnson/error.rb +5 -0
- data/lib/johnson/js/prelude.js +16 -1
- data/lib/johnson/parser.rb +2 -1
- data/lib/johnson/runtime.rb +87 -26
- data/lib/johnson/spidermonkey/runtime.rb +7 -16
- data/lib/johnson/tracemonkey.rb +13 -0
- data/lib/johnson/tracemonkey/context.rb +10 -0
- data/lib/johnson/tracemonkey/debugger.rb +67 -0
- data/lib/johnson/tracemonkey/immutable_node.rb +282 -0
- data/lib/johnson/tracemonkey/js_land_proxy.rb +64 -0
- data/lib/johnson/tracemonkey/mutable_tree_visitor.rb +242 -0
- data/lib/johnson/tracemonkey/ruby_land_proxy.rb +17 -0
- data/lib/johnson/tracemonkey/runtime.rb +80 -0
- data/test/{johnson_test.rb → generic/johnson_test.rb} +1 -1
- data/test/{parser_test.rb → generic/parser_test.rb} +1 -1
- data/test/helper.rb +23 -4
- data/test/johnson/{browser_test.rb → generic/browser_test.rb} +1 -1
- data/test/johnson/{conversions → generic/conversions}/array_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/boolean_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/callable_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/file_test.rb +1 -1
- data/test/johnson/generic/conversions/helper.rb +1 -0
- data/test/johnson/{conversions → generic/conversions}/nil_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/number_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/regexp_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/string_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/struct_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/symbol_test.rb +1 -1
- data/test/johnson/{conversions → generic/conversions}/thread_test.rb +1 -1
- data/test/johnson/{custom_conversions_test.rb → generic/custom_conversions_test.rb} +1 -1
- data/test/johnson/generic/default_test.rb +12 -0
- data/test/johnson/{error_test.rb → generic/error_test.rb} +1 -1
- data/test/johnson/{extensions_test.rb → generic/extensions_test.rb} +1 -1
- data/test/johnson/generic/helper.rb +1 -0
- data/test/johnson/{nodes → generic/nodes}/array_literal_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/array_node_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/binary_node_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/bracket_access_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/delete_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/do_while_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/dot_accessor_test.rb +1 -1
- data/test/johnson/generic/nodes/export_test.rb +11 -0
- data/test/johnson/{nodes → generic/nodes}/for_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/function_test.rb +1 -1
- data/test/johnson/generic/nodes/helper.rb +1 -0
- data/test/johnson/{nodes → generic/nodes}/if_test.rb +16 -6
- data/test/johnson/generic/nodes/import_test.rb +15 -0
- data/test/johnson/{nodes → generic/nodes}/label_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/let_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/object_literal_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/return_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/semi_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/switch_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/ternary_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/throw_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/try_node_test.rb +36 -6
- data/test/johnson/{nodes → generic/nodes}/typeof_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/unary_node_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/void_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/while_test.rb +1 -1
- data/test/johnson/{nodes → generic/nodes}/with_test.rb +1 -1
- data/test/johnson/{prelude_test.rb → generic/prelude_test.rb} +1 -1
- data/test/johnson/{runtime_test.rb → generic/runtime_test.rb} +3 -6
- data/test/johnson/generic/version_test.rb +13 -0
- data/test/johnson/{visitors → generic/visitors}/dot_visitor_test.rb +1 -1
- data/test/johnson/{visitors → generic/visitors}/enumerating_visitor_test.rb +1 -1
- data/test/johnson/generic/visitors/helper.rb +1 -0
- data/test/johnson/spidermonkey/js_land_proxy_test.rb +1 -5
- data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +11 -7
- data/test/johnson/tracemonkey/context_test.rb +21 -0
- data/test/johnson/tracemonkey/immutable_node_test.rb +34 -0
- data/test/johnson/tracemonkey/js_land_proxy_test.rb +273 -0
- data/test/johnson/tracemonkey/ruby_land_proxy_test.rb +274 -0
- data/test/johnson/tracemonkey/runtime_test.rb +41 -0
- data/test/johnson/tracemonkey/split_global_test.rb +32 -0
- data/vendor/spidermonkey/js.pkg +2 -0
- data/vendor/tracemonkey/Makefile.in +668 -0
- data/vendor/tracemonkey/Makefile.ref +483 -0
- data/vendor/tracemonkey/README.html +54 -0
- data/vendor/tracemonkey/SpiderMonkey.rsp +11 -0
- data/vendor/tracemonkey/Y.js +19 -0
- data/vendor/tracemonkey/aclocal.m4 +9 -0
- data/vendor/tracemonkey/bench.sh +5 -0
- data/vendor/tracemonkey/build/autoconf/acoutput-fast.pl +202 -0
- data/vendor/tracemonkey/build/autoconf/altoptions.m4 +154 -0
- data/vendor/tracemonkey/build/autoconf/config.guess +1537 -0
- data/vendor/tracemonkey/build/autoconf/config.sub +1595 -0
- data/vendor/tracemonkey/build/autoconf/install-sh +119 -0
- data/vendor/tracemonkey/build/autoconf/make-makefile +315 -0
- data/vendor/tracemonkey/build/autoconf/match-dir.sh +101 -0
- data/vendor/tracemonkey/build/autoconf/moznbytetype.m4 +136 -0
- data/vendor/tracemonkey/build/autoconf/nspr.m4 +82 -0
- data/vendor/tracemonkey/build/autoconf/pkg.m4 +59 -0
- data/vendor/tracemonkey/build/autoconf/update-makefile.sh +118 -0
- data/vendor/tracemonkey/build/cygwin-wrapper +75 -0
- data/vendor/tracemonkey/build/hcc +111 -0
- data/vendor/tracemonkey/build/hcpp +155 -0
- data/vendor/tracemonkey/build/unix/mddepend.pl +165 -0
- data/vendor/tracemonkey/build/unix/uniq.pl +63 -0
- data/vendor/tracemonkey/build/win32/pgomerge.py +40 -0
- data/vendor/tracemonkey/builtins.tbl +91 -0
- data/vendor/tracemonkey/call.js +13 -0
- data/vendor/tracemonkey/config.mk +206 -0
- data/vendor/tracemonkey/config/Makefile.in +106 -0
- data/vendor/tracemonkey/config/Moz/Milestone.pm +232 -0
- data/vendor/tracemonkey/config/autoconf.mk.in +362 -0
- data/vendor/tracemonkey/config/check-sync-dirs.py +103 -0
- data/vendor/tracemonkey/config/check-sync-exceptions +7 -0
- data/vendor/tracemonkey/config/config.mk +881 -0
- data/vendor/tracemonkey/config/fastcwd.pl +66 -0
- data/vendor/tracemonkey/config/gcc_hidden.h +2 -0
- data/vendor/tracemonkey/config/insure.mk +53 -0
- data/vendor/tracemonkey/config/make-system-wrappers.pl +59 -0
- data/vendor/tracemonkey/config/milestone.pl +112 -0
- data/vendor/tracemonkey/config/milestone.txt +13 -0
- data/vendor/tracemonkey/config/mkdepend/Makefile.in +84 -0
- data/vendor/tracemonkey/config/mkdepend/cppsetup.c +233 -0
- data/vendor/tracemonkey/config/mkdepend/def.h +184 -0
- data/vendor/tracemonkey/config/mkdepend/ifparser.c +551 -0
- data/vendor/tracemonkey/config/mkdepend/ifparser.h +83 -0
- data/vendor/tracemonkey/config/mkdepend/imakemdep.h +733 -0
- data/vendor/tracemonkey/config/mkdepend/include.c +337 -0
- data/vendor/tracemonkey/config/mkdepend/main.c +860 -0
- data/vendor/tracemonkey/config/mkdepend/mkdepend.man +382 -0
- data/vendor/tracemonkey/config/mkdepend/parse.c +686 -0
- data/vendor/tracemonkey/config/mkdepend/pr.c +124 -0
- data/vendor/tracemonkey/config/nfspwd.pl +50 -0
- data/vendor/tracemonkey/config/nsinstall.c +481 -0
- data/vendor/tracemonkey/config/nsinstall.py +155 -0
- data/vendor/tracemonkey/config/pathsub.c +247 -0
- data/vendor/tracemonkey/config/pathsub.h +74 -0
- data/vendor/tracemonkey/config/preprocessor.pl +671 -0
- data/vendor/tracemonkey/config/revdepth-nt.pl +48 -0
- data/vendor/tracemonkey/config/revdepth.pl +51 -0
- data/vendor/tracemonkey/config/rules.mk +2310 -0
- data/vendor/tracemonkey/config/static-checking-config.mk +21 -0
- data/vendor/tracemonkey/config/static-checking.js +92 -0
- data/vendor/tracemonkey/config/string-format.js +61 -0
- data/vendor/tracemonkey/config/system-headers +1035 -0
- data/vendor/tracemonkey/config/version.mk +85 -0
- data/vendor/tracemonkey/config/version_win.pl +442 -0
- data/vendor/tracemonkey/configure +14183 -0
- data/vendor/tracemonkey/configure.in +5363 -0
- data/vendor/tracemonkey/correct.sh +23 -0
- data/vendor/tracemonkey/correct/check-3d-morph.js +55 -0
- data/vendor/tracemonkey/correct/check-3d-raytrace.js +445 -0
- data/vendor/tracemonkey/correct/check-access-binary-trees.js +52 -0
- data/vendor/tracemonkey/correct/check-access-fannkuch.js +66 -0
- data/vendor/tracemonkey/correct/check-access-nbody.js +171 -0
- data/vendor/tracemonkey/correct/check-access-nsieve.js +40 -0
- data/vendor/tracemonkey/correct/check-bitops-3bit-bits-in-byte.js +35 -0
- data/vendor/tracemonkey/correct/check-bitops-bits-in-byte.js +24 -0
- data/vendor/tracemonkey/correct/check-bitops-bitwise-and.js +29 -0
- data/vendor/tracemonkey/correct/check-bitops-nsieve-bits.js +40 -0
- data/vendor/tracemonkey/correct/check-controlflow-recursive.js +27 -0
- data/vendor/tracemonkey/correct/check-date-format-tofte.js +302 -0
- data/vendor/tracemonkey/correct/check-date-format-xparb.js +421 -0
- data/vendor/tracemonkey/correct/check-mont.js +119 -0
- data/vendor/tracemonkey/dtoa.c +3335 -0
- data/vendor/tracemonkey/editline/Makefile.in +55 -0
- data/vendor/tracemonkey/editline/Makefile.ref +143 -0
- data/vendor/tracemonkey/editline/README +83 -0
- data/vendor/tracemonkey/editline/editline.3 +175 -0
- data/vendor/tracemonkey/editline/editline.c +1371 -0
- data/vendor/tracemonkey/editline/editline.h +135 -0
- data/vendor/tracemonkey/editline/sysunix.c +182 -0
- data/vendor/tracemonkey/editline/unix.h +82 -0
- data/vendor/tracemonkey/if.js +13 -0
- data/vendor/tracemonkey/imacro_asm.js.in +396 -0
- data/vendor/tracemonkey/imacros.c.out +1034 -0
- data/vendor/tracemonkey/imacros.jsasm +770 -0
- data/vendor/tracemonkey/javascript-trace.d +73 -0
- data/vendor/tracemonkey/jitstats.tbl +55 -0
- data/vendor/tracemonkey/js-config.h.in +82 -0
- data/vendor/tracemonkey/js-config.in +111 -0
- data/vendor/tracemonkey/js.mdp +0 -0
- data/vendor/tracemonkey/js.msg +312 -0
- data/vendor/tracemonkey/js3240.rc +79 -0
- data/vendor/tracemonkey/jsOS240.def +654 -0
- data/vendor/tracemonkey/jsapi.cpp +6005 -0
- data/vendor/tracemonkey/jsapi.h +2727 -0
- data/vendor/tracemonkey/jsarena.cpp +450 -0
- data/vendor/tracemonkey/jsarena.h +318 -0
- data/vendor/tracemonkey/jsarray.cpp +3664 -0
- data/vendor/tracemonkey/jsarray.h +238 -0
- data/vendor/tracemonkey/jsatom.cpp +1244 -0
- data/vendor/tracemonkey/jsatom.h +493 -0
- data/vendor/tracemonkey/jsbit.h +249 -0
- data/vendor/tracemonkey/jsbool.cpp +184 -0
- data/vendor/tracemonkey/jsbool.h +88 -0
- data/vendor/tracemonkey/jsbuiltins.cpp +415 -0
- data/vendor/tracemonkey/jsbuiltins.h +456 -0
- data/vendor/tracemonkey/jsclist.h +139 -0
- data/vendor/tracemonkey/jscntxt.cpp +1816 -0
- data/vendor/tracemonkey/jscntxt.h +1541 -0
- data/vendor/tracemonkey/jscompat.h +57 -0
- data/vendor/tracemonkey/jsconfig.mk +181 -0
- data/vendor/tracemonkey/jscpucfg.cpp +194 -0
- data/vendor/tracemonkey/jscpucfg.h +91 -0
- data/vendor/tracemonkey/jsdate.cpp +2465 -0
- data/vendor/tracemonkey/jsdate.h +129 -0
- data/vendor/tracemonkey/jsdbgapi.cpp +2017 -0
- data/vendor/tracemonkey/jsdbgapi.h +500 -0
- data/vendor/tracemonkey/jsdhash.cpp +876 -0
- data/vendor/tracemonkey/jsdhash.h +588 -0
- data/vendor/tracemonkey/jsdtoa.cpp +572 -0
- data/vendor/tracemonkey/jsdtoa.h +131 -0
- data/vendor/tracemonkey/jsdtracef.c +318 -0
- data/vendor/tracemonkey/jsdtracef.h +81 -0
- data/vendor/tracemonkey/jsemit.cpp +7292 -0
- data/vendor/tracemonkey/jsemit.h +802 -0
- data/vendor/tracemonkey/jsexn.cpp +1337 -0
- data/vendor/tracemonkey/jsexn.h +96 -0
- data/vendor/tracemonkey/jsfile.cpp +2747 -0
- data/vendor/tracemonkey/jsfile.h +56 -0
- data/vendor/tracemonkey/jsfile.msg +90 -0
- data/vendor/tracemonkey/jsfun.cpp +3089 -0
- data/vendor/tracemonkey/jsfun.h +366 -0
- data/vendor/tracemonkey/jsgc.cpp +3816 -0
- data/vendor/tracemonkey/jsgc.h +429 -0
- data/vendor/tracemonkey/jshash.cpp +477 -0
- data/vendor/tracemonkey/jshash.h +151 -0
- data/vendor/tracemonkey/jsify.pl +483 -0
- data/vendor/tracemonkey/jsinterp.cpp +7441 -0
- data/vendor/tracemonkey/jsinterp.h +666 -0
- data/vendor/tracemonkey/jsinvoke.cpp +42 -0
- data/vendor/tracemonkey/jsiter.cpp +1040 -0
- data/vendor/tracemonkey/jsiter.h +140 -0
- data/vendor/tracemonkey/jskeyword.tbl +124 -0
- data/vendor/tracemonkey/jskwgen.cpp +460 -0
- data/vendor/tracemonkey/jslibmath.h +69 -0
- data/vendor/tracemonkey/jslock.cpp +1512 -0
- data/vendor/tracemonkey/jslock.h +325 -0
- data/vendor/tracemonkey/jslocko.asm +60 -0
- data/vendor/tracemonkey/jslog2.cpp +111 -0
- data/vendor/tracemonkey/jslong.h +167 -0
- data/vendor/tracemonkey/jsmath.cpp +806 -0
- data/vendor/tracemonkey/jsmath.h +63 -0
- data/vendor/tracemonkey/jsnum.cpp +1374 -0
- data/vendor/tracemonkey/jsnum.h +280 -0
- data/vendor/tracemonkey/jsobj.cpp +6165 -0
- data/vendor/tracemonkey/jsobj.h +870 -0
- data/vendor/tracemonkey/json.cpp +1338 -0
- data/vendor/tracemonkey/json.h +108 -0
- data/vendor/tracemonkey/jsopcode.cpp +5484 -0
- data/vendor/tracemonkey/jsopcode.h +434 -0
- data/vendor/tracemonkey/jsopcode.tbl +591 -0
- data/vendor/tracemonkey/jsoplengen.cpp +121 -0
- data/vendor/tracemonkey/jsotypes.h +202 -0
- data/vendor/tracemonkey/jsparse.cpp +9257 -0
- data/vendor/tracemonkey/jsparse.h +900 -0
- data/vendor/tracemonkey/jsprf.cpp +1262 -0
- data/vendor/tracemonkey/jsprf.h +150 -0
- data/vendor/tracemonkey/jsproto.tbl +117 -0
- data/vendor/tracemonkey/jsprvtd.h +366 -0
- data/vendor/tracemonkey/jspubtd.h +585 -0
- data/vendor/tracemonkey/jsregexp.cpp +5051 -0
- data/vendor/tracemonkey/jsregexp.h +199 -0
- data/vendor/tracemonkey/jsreops.tbl +145 -0
- data/vendor/tracemonkey/jsscan.cpp +2040 -0
- data/vendor/tracemonkey/jsscan.h +467 -0
- data/vendor/tracemonkey/jsscope.cpp +1966 -0
- data/vendor/tracemonkey/jsscope.h +487 -0
- data/vendor/tracemonkey/jsscript.cpp +1932 -0
- data/vendor/tracemonkey/jsscript.h +345 -0
- data/vendor/tracemonkey/jsshell.msg +54 -0
- data/vendor/tracemonkey/jsstack.js +167 -0
- data/vendor/tracemonkey/jsstaticcheck.h +69 -0
- data/vendor/tracemonkey/jsstddef.h +87 -0
- data/vendor/tracemonkey/jsstdint.h +96 -0
- data/vendor/tracemonkey/jsstr.cpp +5277 -0
- data/vendor/tracemonkey/jsstr.h +702 -0
- data/vendor/tracemonkey/jstracer.cpp +10991 -0
- data/vendor/tracemonkey/jstracer.h +794 -0
- data/vendor/tracemonkey/jstypes.h +481 -0
- data/vendor/tracemonkey/jsutil.cpp +361 -0
- data/vendor/tracemonkey/jsutil.h +178 -0
- data/vendor/tracemonkey/jsversion.h +243 -0
- data/vendor/tracemonkey/jswince.asm +44 -0
- data/vendor/tracemonkey/jsxdrapi.cpp +800 -0
- data/vendor/tracemonkey/jsxdrapi.h +220 -0
- data/vendor/tracemonkey/jsxml.cpp +8327 -0
- data/vendor/tracemonkey/jsxml.h +305 -0
- data/vendor/tracemonkey/liveconnect/LiveConnect.dsp +157 -0
- data/vendor/tracemonkey/liveconnect/LiveConnectShell.dsp +120 -0
- data/vendor/tracemonkey/liveconnect/LiveConnectShell.dsw +44 -0
- data/vendor/tracemonkey/liveconnect/Makefile.in +105 -0
- data/vendor/tracemonkey/liveconnect/Makefile.ref +169 -0
- data/vendor/tracemonkey/liveconnect/README.html +712 -0
- data/vendor/tracemonkey/liveconnect/_jni/netscape_javascript_JSException.h +14 -0
- data/vendor/tracemonkey/liveconnect/_jni/netscape_javascript_JSObject.h +155 -0
- data/vendor/tracemonkey/liveconnect/classes/Makefile.in +89 -0
- data/vendor/tracemonkey/liveconnect/classes/Makefile.ref +57 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/Makefile.ref +47 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSException.java +140 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSObject.java +183 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSProxy.java +58 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSRunnable.java +70 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSUtil.java +59 -0
- data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/Makefile.ref +53 -0
- data/vendor/tracemonkey/liveconnect/config/AIX4.1.mk +45 -0
- data/vendor/tracemonkey/liveconnect/config/AIX4.2.mk +45 -0
- data/vendor/tracemonkey/liveconnect/config/AIX4.3.mk +50 -0
- data/vendor/tracemonkey/liveconnect/config/HP-UXB.10.10.mk +43 -0
- data/vendor/tracemonkey/liveconnect/config/HP-UXB.10.20.mk +43 -0
- data/vendor/tracemonkey/liveconnect/config/HP-UXB.11.00.mk +43 -0
- data/vendor/tracemonkey/liveconnect/config/IRIX6.2.mk +43 -0
- data/vendor/tracemonkey/liveconnect/config/IRIX6.3.mk +43 -0
- data/vendor/tracemonkey/liveconnect/config/IRIX6.5.mk +43 -0
- data/vendor/tracemonkey/liveconnect/config/Linux_All.mk +73 -0
- data/vendor/tracemonkey/liveconnect/config/OSF1V4.0.mk +65 -0
- data/vendor/tracemonkey/liveconnect/config/OSF1V5.0.mk +62 -0
- data/vendor/tracemonkey/liveconnect/config/SunOS5.5.1.mk +55 -0
- data/vendor/tracemonkey/liveconnect/config/SunOS5.6.mk +39 -0
- data/vendor/tracemonkey/liveconnect/config/SunOS5.7.mk +39 -0
- data/vendor/tracemonkey/liveconnect/config/SunOS5.8.mk +39 -0
- data/vendor/tracemonkey/liveconnect/config/WINNT4.0.mk +53 -0
- data/vendor/tracemonkey/liveconnect/jsj.c +886 -0
- data/vendor/tracemonkey/liveconnect/jsj.msg +98 -0
- data/vendor/tracemonkey/liveconnect/jsj_JSObject.c +1377 -0
- data/vendor/tracemonkey/liveconnect/jsj_JavaArray.c +474 -0
- data/vendor/tracemonkey/liveconnect/jsj_JavaClass.c +737 -0
- data/vendor/tracemonkey/liveconnect/jsj_JavaMember.c +191 -0
- data/vendor/tracemonkey/liveconnect/jsj_JavaObject.c +1079 -0
- data/vendor/tracemonkey/liveconnect/jsj_JavaPackage.c +569 -0
- data/vendor/tracemonkey/liveconnect/jsj_array.c +207 -0
- data/vendor/tracemonkey/liveconnect/jsj_class.c +770 -0
- data/vendor/tracemonkey/liveconnect/jsj_convert.c +902 -0
- data/vendor/tracemonkey/liveconnect/jsj_field.c +421 -0
- data/vendor/tracemonkey/liveconnect/jsj_hash.c +488 -0
- data/vendor/tracemonkey/liveconnect/jsj_hash.h +161 -0
- data/vendor/tracemonkey/liveconnect/jsj_method.c +1825 -0
- data/vendor/tracemonkey/liveconnect/jsj_nodl.c +1 -0
- data/vendor/tracemonkey/liveconnect/jsj_private.h +677 -0
- data/vendor/tracemonkey/liveconnect/jsj_simpleapi.c +219 -0
- data/vendor/tracemonkey/liveconnect/jsj_utils.c +513 -0
- data/vendor/tracemonkey/liveconnect/jsjava.h +316 -0
- data/vendor/tracemonkey/liveconnect/netscape_javascript_JSObject.h +155 -0
- data/vendor/tracemonkey/liveconnect/nsCLiveconnect.cpp +785 -0
- data/vendor/tracemonkey/liveconnect/nsCLiveconnect.h +197 -0
- data/vendor/tracemonkey/liveconnect/nsCLiveconnectFactory.cpp +118 -0
- data/vendor/tracemonkey/liveconnect/nsCLiveconnectFactory.h +76 -0
- data/vendor/tracemonkey/liveconnect/nsILiveconnect.h +197 -0
- data/vendor/tracemonkey/liveconnect/nsISecureLiveconnect.h +94 -0
- data/vendor/tracemonkey/liveconnect/nsISecurityContext.h +136 -0
- data/vendor/tracemonkey/lock_SunOS.s +119 -0
- data/vendor/tracemonkey/mandelbrot-results.js +3 -0
- data/vendor/tracemonkey/math-partial-sums.js +32 -0
- data/vendor/tracemonkey/math-trace-tests.js +507 -0
- data/vendor/tracemonkey/md5.js +289 -0
- data/vendor/tracemonkey/nanojit/Assembler.cpp +1984 -0
- data/vendor/tracemonkey/nanojit/Assembler.h +375 -0
- data/vendor/tracemonkey/nanojit/Fragmento.cpp +651 -0
- data/vendor/tracemonkey/nanojit/Fragmento.h +237 -0
- data/vendor/tracemonkey/nanojit/LIR.cpp +2314 -0
- data/vendor/tracemonkey/nanojit/LIR.h +879 -0
- data/vendor/tracemonkey/nanojit/LIRopcode.tbl +252 -0
- data/vendor/tracemonkey/nanojit/Native.h +127 -0
- data/vendor/tracemonkey/nanojit/NativeARM.cpp +1742 -0
- data/vendor/tracemonkey/nanojit/NativeARM.h +844 -0
- data/vendor/tracemonkey/nanojit/NativeSparc.cpp +1130 -0
- data/vendor/tracemonkey/nanojit/NativeSparc.h +948 -0
- data/vendor/tracemonkey/nanojit/NativeThumb.cpp +1322 -0
- data/vendor/tracemonkey/nanojit/NativeThumb.h +525 -0
- data/vendor/tracemonkey/nanojit/Nativei386.cpp +1748 -0
- data/vendor/tracemonkey/nanojit/Nativei386.h +857 -0
- data/vendor/tracemonkey/nanojit/RegAlloc.cpp +183 -0
- data/vendor/tracemonkey/nanojit/RegAlloc.h +95 -0
- data/vendor/tracemonkey/nanojit/TraceTreeDrawer.cpp +306 -0
- data/vendor/tracemonkey/nanojit/TraceTreeDrawer.h +88 -0
- data/vendor/tracemonkey/nanojit/avmplus.cpp +56 -0
- data/vendor/tracemonkey/nanojit/avmplus.h +1016 -0
- data/vendor/tracemonkey/nanojit/nanojit.h +253 -0
- data/vendor/tracemonkey/perfect.js +39 -0
- data/vendor/tracemonkey/plify_jsdhash.sed +35 -0
- data/vendor/tracemonkey/prmjtime.cpp +869 -0
- data/vendor/tracemonkey/prmjtime.h +103 -0
- data/vendor/tracemonkey/ref-config/AIX4.1.mk +65 -0
- data/vendor/tracemonkey/ref-config/AIX4.2.mk +64 -0
- data/vendor/tracemonkey/ref-config/AIX4.3.mk +65 -0
- data/vendor/tracemonkey/ref-config/Darwin.mk +85 -0
- data/vendor/tracemonkey/ref-config/Darwin1.3.mk +81 -0
- data/vendor/tracemonkey/ref-config/Darwin1.4.mk +41 -0
- data/vendor/tracemonkey/ref-config/Darwin5.2.mk +81 -0
- data/vendor/tracemonkey/ref-config/Darwin5.3.mk +81 -0
- data/vendor/tracemonkey/ref-config/Darwin64.mk +72 -0
- data/vendor/tracemonkey/ref-config/HP-UXB.10.10.mk +77 -0
- data/vendor/tracemonkey/ref-config/HP-UXB.10.20.mk +77 -0
- data/vendor/tracemonkey/ref-config/HP-UXB.11.00.mk +80 -0
- data/vendor/tracemonkey/ref-config/IRIX.mk +87 -0
- data/vendor/tracemonkey/ref-config/IRIX5.3.mk +44 -0
- data/vendor/tracemonkey/ref-config/IRIX6.1.mk +44 -0
- data/vendor/tracemonkey/ref-config/IRIX6.2.mk +44 -0
- data/vendor/tracemonkey/ref-config/IRIX6.3.mk +44 -0
- data/vendor/tracemonkey/ref-config/IRIX6.5.mk +44 -0
- data/vendor/tracemonkey/ref-config/Linux_All.mk +105 -0
- data/vendor/tracemonkey/ref-config/Mac_OS10.0.mk +82 -0
- data/vendor/tracemonkey/ref-config/OSF1V4.0.mk +72 -0
- data/vendor/tracemonkey/ref-config/OSF1V5.0.mk +69 -0
- data/vendor/tracemonkey/ref-config/SunOS4.1.4.mk +101 -0
- data/vendor/tracemonkey/ref-config/SunOS5.10.mk +50 -0
- data/vendor/tracemonkey/ref-config/SunOS5.3.mk +91 -0
- data/vendor/tracemonkey/ref-config/SunOS5.4.mk +92 -0
- data/vendor/tracemonkey/ref-config/SunOS5.5.1.mk +44 -0
- data/vendor/tracemonkey/ref-config/SunOS5.5.mk +87 -0
- data/vendor/tracemonkey/ref-config/SunOS5.6.mk +89 -0
- data/vendor/tracemonkey/ref-config/SunOS5.7.mk +44 -0
- data/vendor/tracemonkey/ref-config/SunOS5.8.mk +44 -0
- data/vendor/tracemonkey/ref-config/SunOS5.9.mk +44 -0
- data/vendor/tracemonkey/ref-config/WINNT4.0.mk +118 -0
- data/vendor/tracemonkey/ref-config/WINNT5.0.mk +118 -0
- data/vendor/tracemonkey/ref-config/WINNT5.1.mk +118 -0
- data/vendor/tracemonkey/ref-config/WINNT5.2.mk +118 -0
- data/vendor/tracemonkey/ref-config/WINNT6.0.mk +118 -0
- data/vendor/tracemonkey/ref-config/dgux.mk +64 -0
- data/vendor/tracemonkey/resource.h +15 -0
- data/vendor/tracemonkey/rules.mk +206 -0
- data/vendor/tracemonkey/shell/Makefile.in +72 -0
- data/vendor/tracemonkey/shell/js.cpp +4719 -0
- data/vendor/tracemonkey/t/3d-cube.js +337 -0
- data/vendor/tracemonkey/t/3d-morph.js +54 -0
- data/vendor/tracemonkey/t/3d-raytrace.js +441 -0
- data/vendor/tracemonkey/t/access-binary-trees.js +50 -0
- data/vendor/tracemonkey/t/access-fannkuch.js +66 -0
- data/vendor/tracemonkey/t/access-nbody.js +169 -0
- data/vendor/tracemonkey/t/access-nsieve.js +38 -0
- data/vendor/tracemonkey/t/bitops-3bit-bits-in-byte.js +32 -0
- data/vendor/tracemonkey/t/bitops-bits-in-byte.js +21 -0
- data/vendor/tracemonkey/t/bitops-bitwise-and.js +28 -0
- data/vendor/tracemonkey/t/bitops-nsieve-bits.js +32 -0
- data/vendor/tracemonkey/t/controlflow-recursive.js +25 -0
- data/vendor/tracemonkey/t/crypto-aes.js +422 -0
- data/vendor/tracemonkey/t/crypto-md5.js +286 -0
- data/vendor/tracemonkey/t/crypto-sha1.js +224 -0
- data/vendor/tracemonkey/t/date-format-tofte.js +299 -0
- data/vendor/tracemonkey/t/date-format-xparb.js +417 -0
- data/vendor/tracemonkey/t/math-cordic.js +95 -0
- data/vendor/tracemonkey/t/math-partial-sums.js +33 -0
- data/vendor/tracemonkey/t/math-spectral-norm.js +51 -0
- data/vendor/tracemonkey/t/regexp-dna.js +1712 -0
- data/vendor/tracemonkey/t/string-base64.js +135 -0
- data/vendor/tracemonkey/t/string-fasta.js +85 -0
- data/vendor/tracemonkey/t/string-tagcloud.js +265 -0
- data/vendor/tracemonkey/t/string-unpack-code.js +68 -0
- data/vendor/tracemonkey/t/string-validate-input.js +89 -0
- data/vendor/tracemonkey/time.sh +13 -0
- data/vendor/tracemonkey/trace-test.js +5564 -0
- data/vendor/tracemonkey/v8/base.js +187 -0
- data/vendor/tracemonkey/v8/crypto.js +1689 -0
- data/vendor/tracemonkey/v8/deltablue.js +880 -0
- data/vendor/tracemonkey/v8/earley-boyer.js +4682 -0
- data/vendor/tracemonkey/v8/raytrace.js +3418 -0
- data/vendor/tracemonkey/v8/richards.js +539 -0
- data/vendor/tracemonkey/v8/run-crypto.js +44 -0
- data/vendor/tracemonkey/v8/run-deltablue.js +44 -0
- data/vendor/tracemonkey/v8/run-earley-boyer.js +44 -0
- data/vendor/tracemonkey/v8/run-raytrace.js +44 -0
- data/vendor/tracemonkey/v8/run-richards.js +44 -0
- data/vendor/tracemonkey/v8/run.js +49 -0
- data/vendor/tracemonkey/vprof/readme.txt +93 -0
- data/vendor/tracemonkey/vprof/vprof.cpp +360 -0
- data/vendor/tracemonkey/vprof/vprof.h +245 -0
- data/vendor/tracemonkey/xpconnect/Makefile.in +67 -0
- data/vendor/tracemonkey/xpconnect/crashtests/117307-1.html +20 -0
- data/vendor/tracemonkey/xpconnect/crashtests/193710.html +11 -0
- data/vendor/tracemonkey/xpconnect/crashtests/290162-1.html +5 -0
- data/vendor/tracemonkey/xpconnect/crashtests/326615-1.html +16 -0
- data/vendor/tracemonkey/xpconnect/crashtests/328553-1.html +13 -0
- data/vendor/tracemonkey/xpconnect/crashtests/346258-1.html +12 -0
- data/vendor/tracemonkey/xpconnect/crashtests/346512-1-frame1.xhtml +16 -0
- data/vendor/tracemonkey/xpconnect/crashtests/346512-1-frame2.xhtml +15 -0
- data/vendor/tracemonkey/xpconnect/crashtests/346512-1.xhtml +30 -0
- data/vendor/tracemonkey/xpconnect/crashtests/382133-1.html +3 -0
- data/vendor/tracemonkey/xpconnect/crashtests/386680-1.html +22 -0
- data/vendor/tracemonkey/xpconnect/crashtests/394810-1.html +4 -0
- data/vendor/tracemonkey/xpconnect/crashtests/400349-1.html +20 -0
- data/vendor/tracemonkey/xpconnect/crashtests/403356-1.html +13 -0
- data/vendor/tracemonkey/xpconnect/crashtests/418139-1.svg +22 -0
- data/vendor/tracemonkey/xpconnect/crashtests/420513-1.html +11 -0
- data/vendor/tracemonkey/xpconnect/crashtests/453935-1.html +37 -0
- data/vendor/tracemonkey/xpconnect/crashtests/462926.html +12 -0
- data/vendor/tracemonkey/xpconnect/crashtests/468552-1.html +18 -0
- data/vendor/tracemonkey/xpconnect/crashtests/471366-1.html +12 -0
- data/vendor/tracemonkey/xpconnect/crashtests/475185-1.html +13 -0
- data/vendor/tracemonkey/xpconnect/crashtests/475291-1.html +14 -0
- data/vendor/tracemonkey/xpconnect/crashtests/503286-1.html +23 -0
- data/vendor/tracemonkey/xpconnect/crashtests/crashtests.list +21 -0
- data/vendor/tracemonkey/xpconnect/idl/Makefile.in +78 -0
- data/vendor/tracemonkey/xpconnect/idl/XPCIDispatch.idl +51 -0
- data/vendor/tracemonkey/xpconnect/idl/mozIJSSubScriptLoader.idl +64 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIActiveXSecurityPolicy.idl +67 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIDispatchSupport.idl +119 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIJSContextStack.idl +85 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIJSRuntimeService.idl +51 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIScriptError.idl +102 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIScriptableInterfaces.idl +67 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIXPCScriptNotify.idl +66 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIXPCScriptable.idl +183 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIXPCSecurityManager.idl +114 -0
- data/vendor/tracemonkey/xpconnect/idl/nsIXPConnect.idl +819 -0
- data/vendor/tracemonkey/xpconnect/idl/xpcIJSModuleLoader.idl +95 -0
- data/vendor/tracemonkey/xpconnect/idl/xpcIJSWeakReference.idl +49 -0
- data/vendor/tracemonkey/xpconnect/idl/xpccomponents.idl +254 -0
- data/vendor/tracemonkey/xpconnect/idl/xpcexception.idl +66 -0
- data/vendor/tracemonkey/xpconnect/idl/xpcjsid.idl +83 -0
- data/vendor/tracemonkey/xpconnect/loader/ISO8601DateUtils.jsm +176 -0
- data/vendor/tracemonkey/xpconnect/loader/Makefile.in +63 -0
- data/vendor/tracemonkey/xpconnect/loader/XPCOMUtils.jsm +267 -0
- data/vendor/tracemonkey/xpconnect/loader/mozJSComponentLoader.cpp +1717 -0
- data/vendor/tracemonkey/xpconnect/loader/mozJSComponentLoader.h +172 -0
- data/vendor/tracemonkey/xpconnect/loader/mozJSLoaderConstructors.h +101 -0
- data/vendor/tracemonkey/xpconnect/loader/mozJSSubScriptLoader.cpp +360 -0
- data/vendor/tracemonkey/xpconnect/loader/mozJSSubScriptLoader.h +66 -0
- data/vendor/tracemonkey/xpconnect/public/Makefile.in +54 -0
- data/vendor/tracemonkey/xpconnect/public/nsAXPCNativeCallContext.h +89 -0
- data/vendor/tracemonkey/xpconnect/public/nsAutoJSValHolder.h +168 -0
- data/vendor/tracemonkey/xpconnect/public/xpc_map_end.h +327 -0
- data/vendor/tracemonkey/xpconnect/sample/Makefile.in +71 -0
- data/vendor/tracemonkey/xpconnect/sample/README +39 -0
- data/vendor/tracemonkey/xpconnect/sample/xpcsample1.cpp +337 -0
- data/vendor/tracemonkey/xpconnect/sample/xpcsample1.idl +82 -0
- data/vendor/tracemonkey/xpconnect/sample/xpcsample1.js +21 -0
- data/vendor/tracemonkey/xpconnect/shell/Makefile.in +106 -0
- data/vendor/tracemonkey/xpconnect/shell/jsshell.msg +50 -0
- data/vendor/tracemonkey/xpconnect/shell/xpcshell.cpp +1817 -0
- data/vendor/tracemonkey/xpconnect/shell/xpcshellMacUtils.h +43 -0
- data/vendor/tracemonkey/xpconnect/shell/xpcshellMacUtils.mm +54 -0
- data/vendor/tracemonkey/xpconnect/src/Makefile.in +228 -0
- data/vendor/tracemonkey/xpconnect/src/README +3 -0
- data/vendor/tracemonkey/xpconnect/src/XPCCrossOriginWrapper.cpp +1186 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispConvert.cpp +593 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispInlines.h +667 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispInterface.cpp +383 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispObject.cpp +516 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispParamPropJSClass.cpp +223 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispParams.cpp +103 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispPrivate.h +1401 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispTearOff.cpp +547 -0
- data/vendor/tracemonkey/xpconnect/src/XPCDispTypeInfo.cpp +471 -0
- data/vendor/tracemonkey/xpconnect/src/XPCIDispatchClassInfo.cpp +139 -0
- data/vendor/tracemonkey/xpconnect/src/XPCIDispatchExtension.cpp +362 -0
- data/vendor/tracemonkey/xpconnect/src/XPCNativeWrapper.cpp +1350 -0
- data/vendor/tracemonkey/xpconnect/src/XPCNativeWrapper.h +88 -0
- data/vendor/tracemonkey/xpconnect/src/XPCSafeJSObjectWrapper.cpp +1148 -0
- data/vendor/tracemonkey/xpconnect/src/XPCSystemOnlyWrapper.cpp +718 -0
- data/vendor/tracemonkey/xpconnect/src/XPCWrapper.cpp +850 -0
- data/vendor/tracemonkey/xpconnect/src/XPCWrapper.h +394 -0
- data/vendor/tracemonkey/xpconnect/src/dom_quickstubs.qsconf +568 -0
- data/vendor/tracemonkey/xpconnect/src/nsDispatchSupport.cpp +348 -0
- data/vendor/tracemonkey/xpconnect/src/nsScriptError.cpp +201 -0
- data/vendor/tracemonkey/xpconnect/src/nsXPConnect.cpp +2609 -0
- data/vendor/tracemonkey/xpconnect/src/qsgen.py +1487 -0
- data/vendor/tracemonkey/xpconnect/src/xpc.msg +217 -0
- data/vendor/tracemonkey/xpconnect/src/xpcJSWeakReference.cpp +148 -0
- data/vendor/tracemonkey/xpconnect/src/xpcJSWeakReference.h +56 -0
- data/vendor/tracemonkey/xpconnect/src/xpccallcontext.cpp +579 -0
- data/vendor/tracemonkey/xpconnect/src/xpccomponents.cpp +4144 -0
- data/vendor/tracemonkey/xpconnect/src/xpccontext.cpp +115 -0
- data/vendor/tracemonkey/xpconnect/src/xpcconvert.cpp +2298 -0
- data/vendor/tracemonkey/xpconnect/src/xpcdebug.cpp +481 -0
- data/vendor/tracemonkey/xpconnect/src/xpcexception.cpp +502 -0
- data/vendor/tracemonkey/xpconnect/src/xpcforwards.h +114 -0
- data/vendor/tracemonkey/xpconnect/src/xpcinlines.h +772 -0
- data/vendor/tracemonkey/xpconnect/src/xpcjsid.cpp +1025 -0
- data/vendor/tracemonkey/xpconnect/src/xpcjsruntime.cpp +1342 -0
- data/vendor/tracemonkey/xpconnect/src/xpclog.cpp +128 -0
- data/vendor/tracemonkey/xpconnect/src/xpclog.h +101 -0
- data/vendor/tracemonkey/xpconnect/src/xpcmaps.cpp +761 -0
- data/vendor/tracemonkey/xpconnect/src/xpcmaps.h +713 -0
- data/vendor/tracemonkey/xpconnect/src/xpcmodule.cpp +136 -0
- data/vendor/tracemonkey/xpconnect/src/xpcprivate.h +4138 -0
- data/vendor/tracemonkey/xpconnect/src/xpcquickstubs.cpp +1128 -0
- data/vendor/tracemonkey/xpconnect/src/xpcquickstubs.h +480 -0
- data/vendor/tracemonkey/xpconnect/src/xpcruntimesvc.cpp +179 -0
- data/vendor/tracemonkey/xpconnect/src/xpcstack.cpp +342 -0
- data/vendor/tracemonkey/xpconnect/src/xpcstring.cpp +139 -0
- data/vendor/tracemonkey/xpconnect/src/xpcthreadcontext.cpp +599 -0
- data/vendor/tracemonkey/xpconnect/src/xpcthrower.cpp +399 -0
- data/vendor/tracemonkey/xpconnect/src/xpcvariant.cpp +850 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappedjs.cpp +670 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappedjsclass.cpp +2015 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappednative.cpp +3482 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappednativeinfo.cpp +945 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappednativejsops.cpp +2003 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappednativeproto.cpp +302 -0
- data/vendor/tracemonkey/xpconnect/src/xpcwrappednativescope.cpp +991 -0
- data/vendor/tracemonkey/xpconnect/tests/Makefile.in +75 -0
- data/vendor/tracemonkey/xpconnect/tests/TestXPC.cpp +785 -0
- data/vendor/tracemonkey/xpconnect/tests/chrome/Makefile.in +51 -0
- data/vendor/tracemonkey/xpconnect/tests/chrome/test_bug500931.xul +43 -0
- data/vendor/tracemonkey/xpconnect/tests/components/Makefile.in +85 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_array.cpp +388 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_attributes.cpp +305 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_calljs.cpp +135 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_child.cpp +225 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_const.cpp +76 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_domstring.cpp +118 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_echo.cpp +616 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_in.cpp +204 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_inout.cpp +171 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_module.cpp +77 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_multiple.cpp +554 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_noisy.cpp +154 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_out.cpp +335 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_overloaded.cpp +250 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_private.h +192 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_string.cpp +185 -0
- data/vendor/tracemonkey/xpconnect/tests/components/xpctest_variant.cpp +355 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/StdAfx.cpp +12 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/StdAfx.h +28 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCDispUtilities.h +28 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.cpp +86 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.def +9 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.dsp +318 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.dsw +29 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.idl +454 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.rc +145 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.cpp +44 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.h +56 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.cpp +221 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.h +53 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.cpp +699 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.h +138 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.cpp +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.h +41 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.cpp +256 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.h +88 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.cpp +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.h +43 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.cpp +29 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.h +45 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.cpp +177 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.h +50 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.rgs +23 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/resource.h +36 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Arrays/XPCIDispatchArrayTests.js +54 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Attributes/XPCIDispatchAttributeTests.js +150 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/General/XPCIDispatchInstantiations.js +122 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/General/XPCStress.js +58 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Methods/XPCIDispatchMethodTests.js +376 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/shell.js +377 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedJS/General/XPCIDispatchTestWrappedJS.js +76 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedJS/shell.js +377 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/exectests.cmd +1 -0
- data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/jsDriver.pl +1288 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/Makefile.in +61 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest.idl +312 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest2.idl +51 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_attributes.idl +67 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_calljs.idl +59 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_const.idl +61 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_domstring.idl +59 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_in.idl +88 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_inout.idl +86 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_multiple.idl +77 -0
- data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_out.idl +142 -0
- data/vendor/tracemonkey/xpconnect/tests/js/checkid.js +82 -0
- data/vendor/tracemonkey/xpconnect/tests/js/evaluate.js +311 -0
- data/vendor/tracemonkey/xpconnect/tests/js/exceptions-2.js +153 -0
- data/vendor/tracemonkey/xpconnect/tests/js/exceptions-3.js +194 -0
- data/vendor/tracemonkey/xpconnect/tests/js/exceptions-4.js +297 -0
- data/vendor/tracemonkey/xpconnect/tests/js/exceptions-5.js +343 -0
- data/vendor/tracemonkey/xpconnect/tests/js/exceptions.js +230 -0
- data/vendor/tracemonkey/xpconnect/tests/js/javascript.js +96 -0
- data/vendor/tracemonkey/xpconnect/tests/js/multiple-2.js +151 -0
- data/vendor/tracemonkey/xpconnect/tests/js/multiple-3.js +148 -0
- data/vendor/tracemonkey/xpconnect/tests/js/multiple-4.js +152 -0
- data/vendor/tracemonkey/xpconnect/tests/js/multiple.js +137 -0
- data/vendor/tracemonkey/xpconnect/tests/js/notscriptable.js +104 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/simpletest.js +36 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/speed.js +60 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/testxpc.js +464 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/threads.js +74 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/try.js +27 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_array.js +308 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_callcontext.js +68 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_echo.js +636 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_and_sort.js +28 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_constants.js +15 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_create.js +200 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_exceptions.js +167 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_ids.js +135 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_observer.js +36 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_overloaded.js +14 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_primitives.js +141 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_propertybag.js +36 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_variant.js +339 -0
- data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_variant_array.js +30 -0
- data/vendor/tracemonkey/xpconnect/tests/js/readonlyattributes.js +74 -0
- data/vendor/tracemonkey/xpconnect/tests/js/readwriteattributes.js +101 -0
- data/vendor/tracemonkey/xpconnect/tests/js/scriptable.js +120 -0
- data/vendor/tracemonkey/xpconnect/tests/js/testin.js +203 -0
- data/vendor/tracemonkey/xpconnect/tests/js/xpcfun.js +234 -0
- data/vendor/tracemonkey/xpconnect/tests/js/xpctest_primitives.js +200 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/Makefile.in +66 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/bug500931_helper.html +7 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/inner.html +7 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug361111.xul +29 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug384632.html +32 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug390488.html +65 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug393269.html +46 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug396851.html +43 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug428021.html +41 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug446584.html +49 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug448587.html +31 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug462428.html +42 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug478438.html +66 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug484107.html +100 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug484459.html +36 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug500691.html +28 -0
- data/vendor/tracemonkey/xpconnect/tests/mochitest/test_wrappers.html +116 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/bogus_element_type.jsm +1 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/bogus_exports_type.jsm +1 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/bug451678_subscript.js +2 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/component_import.js +144 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/recursive_importA.jsm +44 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/recursive_importB.jsm +45 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/syntax_error.jsm +1 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_bogus_files.js +88 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_bug408412.js +51 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_bug451678.js +52 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_bug_442086.js +68 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_import.js +127 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_js_weak_references.js +63 -0
- data/vendor/tracemonkey/xpconnect/tests/unit/test_recursive_import.js +62 -0
- data/vendor/tracemonkey/xpconnect/tools/Makefile.in +49 -0
- data/vendor/tracemonkey/xpconnect/tools/idl/Makefile.in +53 -0
- data/vendor/tracemonkey/xpconnect/tools/idl/nsIXPCToolsCompiler.idl +60 -0
- data/vendor/tracemonkey/xpconnect/tools/idl/nsIXPCToolsProfiler.idl +57 -0
- data/vendor/tracemonkey/xpconnect/tools/js/CompileJSFiles.js +28 -0
- data/vendor/tracemonkey/xpconnect/tools/js/ListJSFiles.js +18 -0
- data/vendor/tracemonkey/xpconnect/tools/src/Makefile.in +76 -0
- data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsCompiler.cpp +161 -0
- data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsModule.cpp +65 -0
- data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsProfiler.cpp +370 -0
- data/vendor/tracemonkey/xpconnect/tools/src/xpctools_private.h +236 -0
- metadata +782 -107
- data/test/johnson/nodes/export_test.rb +0 -9
- data/test/johnson/nodes/import_test.rb +0 -13
- data/test/johnson/version_test.rb +0 -13
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
2
|
+
* vim: set ts=2 sw=2 et tw=80:
|
|
3
|
+
*
|
|
4
|
+
* ***** BEGIN LICENSE BLOCK *****
|
|
5
|
+
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
6
|
+
*
|
|
7
|
+
* The contents of this file are subject to the Mozilla Public License Version
|
|
8
|
+
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
9
|
+
* the License. You may obtain a copy of the License at
|
|
10
|
+
* http://www.mozilla.org/MPL/
|
|
11
|
+
*
|
|
12
|
+
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
13
|
+
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
14
|
+
* for the specific language governing rights and limitations under the
|
|
15
|
+
* License.
|
|
16
|
+
*
|
|
17
|
+
* The Original Code is xpcshell code
|
|
18
|
+
*
|
|
19
|
+
* The Initial Developer of the Original Code is
|
|
20
|
+
* Mozilla Messaging
|
|
21
|
+
* Portions created by the Initial Developer are Copyright (C) 2008
|
|
22
|
+
* the Initial Developer. All Rights Reserved.
|
|
23
|
+
*
|
|
24
|
+
* Contributor(s):
|
|
25
|
+
* Mark Banner <bugzilla@standard8.plus.com>
|
|
26
|
+
*
|
|
27
|
+
* Alternatively, the contents of this file may be used under the terms of
|
|
28
|
+
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
29
|
+
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
30
|
+
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
31
|
+
* of those above. If you wish to allow use of your version of this file only
|
|
32
|
+
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
33
|
+
* use your version of this file under the terms of the MPL, indicate your
|
|
34
|
+
* decision by deleting the provisions above and replace them with the notice
|
|
35
|
+
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
36
|
+
* the provisions above, a recipient may use your version of this file under
|
|
37
|
+
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
38
|
+
*
|
|
39
|
+
* ***** END LICENSE BLOCK ***** */
|
|
40
|
+
|
|
41
|
+
// Functions to setup and release the Mac memory pool
|
|
42
|
+
void InitAutoreleasePool();
|
|
43
|
+
void FinishAutoreleasePool();
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
2
|
+
* vim: set ts=2 sw=2 et tw=80:
|
|
3
|
+
*
|
|
4
|
+
* ***** BEGIN LICENSE BLOCK *****
|
|
5
|
+
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
6
|
+
*
|
|
7
|
+
* The contents of this file are subject to the Mozilla Public License Version
|
|
8
|
+
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
9
|
+
* the License. You may obtain a copy of the License at
|
|
10
|
+
* http://www.mozilla.org/MPL/
|
|
11
|
+
*
|
|
12
|
+
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
13
|
+
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
14
|
+
* for the specific language governing rights and limitations under the
|
|
15
|
+
* License.
|
|
16
|
+
*
|
|
17
|
+
* The Original Code is xpcshell code
|
|
18
|
+
*
|
|
19
|
+
* The Initial Developer of the Original Code is
|
|
20
|
+
* Mozilla Messaging
|
|
21
|
+
* Portions created by the Initial Developer are Copyright (C) 2008
|
|
22
|
+
* the Initial Developer. All Rights Reserved.
|
|
23
|
+
*
|
|
24
|
+
* Contributor(s):
|
|
25
|
+
* Mark Banner <bugzilla@standard8.plus.com>
|
|
26
|
+
*
|
|
27
|
+
* Alternatively, the contents of this file may be used under the terms of
|
|
28
|
+
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
29
|
+
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
30
|
+
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
31
|
+
* of those above. If you wish to allow use of your version of this file only
|
|
32
|
+
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
33
|
+
* use your version of this file under the terms of the MPL, indicate your
|
|
34
|
+
* decision by deleting the provisions above and replace them with the notice
|
|
35
|
+
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
36
|
+
* the provisions above, a recipient may use your version of this file under
|
|
37
|
+
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
38
|
+
*
|
|
39
|
+
* ***** END LICENSE BLOCK ***** */
|
|
40
|
+
|
|
41
|
+
#include "xpcshellMacUtils.h"
|
|
42
|
+
#include <Foundation/Foundation.h>
|
|
43
|
+
|
|
44
|
+
static NSAutoreleasePool *pool = NULL;
|
|
45
|
+
|
|
46
|
+
void InitAutoreleasePool()
|
|
47
|
+
{
|
|
48
|
+
pool = [[NSAutoreleasePool alloc] init];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
void FinishAutoreleasePool()
|
|
52
|
+
{
|
|
53
|
+
[pool release];
|
|
54
|
+
}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
#
|
|
2
|
+
# ***** BEGIN LICENSE BLOCK *****
|
|
3
|
+
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
4
|
+
#
|
|
5
|
+
# The contents of this file are subject to the Mozilla Public License Version
|
|
6
|
+
# 1.1 (the "License"); you may not use this file except in compliance with
|
|
7
|
+
# the License. You may obtain a copy of the License at
|
|
8
|
+
# http://www.mozilla.org/MPL/
|
|
9
|
+
#
|
|
10
|
+
# Software distributed under the License is distributed on an "AS IS" basis,
|
|
11
|
+
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
12
|
+
# for the specific language governing rights and limitations under the
|
|
13
|
+
# License.
|
|
14
|
+
#
|
|
15
|
+
# The Original Code is Mozilla Communicator client code, released
|
|
16
|
+
# March 31, 1998.
|
|
17
|
+
#
|
|
18
|
+
# The Initial Developer of the Original Code is
|
|
19
|
+
# Netscape Communications Corporation.
|
|
20
|
+
# Portions created by the Initial Developer are Copyright (C) 1998
|
|
21
|
+
# the Initial Developer. All Rights Reserved.
|
|
22
|
+
#
|
|
23
|
+
# Contributor(s):
|
|
24
|
+
# John Bandhauer <jband@netscape.com>
|
|
25
|
+
#
|
|
26
|
+
# Alternatively, the contents of this file may be used under the terms of
|
|
27
|
+
# either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
28
|
+
# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
29
|
+
# in which case the provisions of the GPL or the LGPL are applicable instead
|
|
30
|
+
# of those above. If you wish to allow use of your version of this file only
|
|
31
|
+
# under the terms of either the GPL or the LGPL, and not to allow others to
|
|
32
|
+
# use your version of this file under the terms of the MPL, indicate your
|
|
33
|
+
# decision by deleting the provisions above and replace them with the notice
|
|
34
|
+
# and other provisions required by the GPL or the LGPL. If you do not delete
|
|
35
|
+
# the provisions above, a recipient may use your version of this file under
|
|
36
|
+
# the terms of any one of the MPL, the GPL or the LGPL.
|
|
37
|
+
#
|
|
38
|
+
# ***** END LICENSE BLOCK *****
|
|
39
|
+
|
|
40
|
+
DEPTH = ../../../..
|
|
41
|
+
topsrcdir = @top_srcdir@
|
|
42
|
+
srcdir = @srcdir@
|
|
43
|
+
VPATH = @srcdir@
|
|
44
|
+
|
|
45
|
+
include $(DEPTH)/config/autoconf.mk
|
|
46
|
+
|
|
47
|
+
MODULE = xpconnect
|
|
48
|
+
LIBRARY_NAME = xpconnect
|
|
49
|
+
EXPORT_LIBRARY = 1
|
|
50
|
+
SHORT_LIBNAME = xpconect
|
|
51
|
+
IS_COMPONENT = 1
|
|
52
|
+
MODULE_NAME = xpconnect
|
|
53
|
+
GRE_MODULE = 1
|
|
54
|
+
ifeq ($(OS_ARCH)$(MOZ_ENABLE_LIBXUL),WINNT)
|
|
55
|
+
LIBRARY_NAME = xpc$(MOZ_BITS)$(VERSION_NUMBER)
|
|
56
|
+
SHORT_LIBNAME = xpc$(MOZ_BITS)$(VERSION_NUMBER)
|
|
57
|
+
endif
|
|
58
|
+
LIBXUL_LIBRARY = 1
|
|
59
|
+
|
|
60
|
+
REQUIRES = xpcom \
|
|
61
|
+
string \
|
|
62
|
+
js \
|
|
63
|
+
caps \
|
|
64
|
+
necko \
|
|
65
|
+
dom \
|
|
66
|
+
$(NULL)
|
|
67
|
+
|
|
68
|
+
# These modules are required because the auto-generated file
|
|
69
|
+
# dom_quickstubs.cpp #includes header files from many places.
|
|
70
|
+
REQUIRES += content \
|
|
71
|
+
editor \
|
|
72
|
+
layout \
|
|
73
|
+
rdf \
|
|
74
|
+
svg \
|
|
75
|
+
xuldoc \
|
|
76
|
+
xultmpl \
|
|
77
|
+
widget \
|
|
78
|
+
$(NULL)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
CPPSRCS = \
|
|
82
|
+
nsScriptError.cpp \
|
|
83
|
+
nsXPConnect.cpp \
|
|
84
|
+
xpccallcontext.cpp \
|
|
85
|
+
xpccomponents.cpp \
|
|
86
|
+
xpccontext.cpp \
|
|
87
|
+
xpcconvert.cpp \
|
|
88
|
+
xpcdebug.cpp \
|
|
89
|
+
xpcexception.cpp \
|
|
90
|
+
xpcjsid.cpp \
|
|
91
|
+
xpcjsruntime.cpp \
|
|
92
|
+
xpclog.cpp \
|
|
93
|
+
xpcmaps.cpp \
|
|
94
|
+
xpcmodule.cpp \
|
|
95
|
+
xpcruntimesvc.cpp \
|
|
96
|
+
xpcstack.cpp \
|
|
97
|
+
xpcstring.cpp \
|
|
98
|
+
xpcthreadcontext.cpp \
|
|
99
|
+
xpcthrower.cpp \
|
|
100
|
+
xpcwrappedjs.cpp \
|
|
101
|
+
xpcvariant.cpp \
|
|
102
|
+
xpcwrappedjsclass.cpp \
|
|
103
|
+
xpcwrappednative.cpp \
|
|
104
|
+
xpcwrappednativeinfo.cpp \
|
|
105
|
+
xpcwrappednativejsops.cpp \
|
|
106
|
+
xpcwrappednativeproto.cpp \
|
|
107
|
+
xpcwrappednativescope.cpp \
|
|
108
|
+
XPCNativeWrapper.cpp \
|
|
109
|
+
xpcJSWeakReference.cpp \
|
|
110
|
+
XPCSafeJSObjectWrapper.cpp \
|
|
111
|
+
XPCCrossOriginWrapper.cpp \
|
|
112
|
+
XPCSystemOnlyWrapper.cpp \
|
|
113
|
+
XPCWrapper.cpp \
|
|
114
|
+
xpcquickstubs.cpp \
|
|
115
|
+
dom_quickstubs.cpp \
|
|
116
|
+
$(NULL)
|
|
117
|
+
ifdef XPC_IDISPATCH_SUPPORT
|
|
118
|
+
CPPSRCS += XPCDispObject.cpp \
|
|
119
|
+
XPCDispInterface.cpp \
|
|
120
|
+
XPCDispConvert.cpp \
|
|
121
|
+
XPCDispTypeInfo.cpp \
|
|
122
|
+
XPCDispTearOff.cpp \
|
|
123
|
+
XPCIDispatchExtension.cpp \
|
|
124
|
+
XPCDispParams.cpp \
|
|
125
|
+
XPCDispParamPropJSClass.cpp \
|
|
126
|
+
XPCIDispatchClassInfo.cpp \
|
|
127
|
+
nsDispatchSupport.cpp \
|
|
128
|
+
$(NULL)
|
|
129
|
+
endif
|
|
130
|
+
|
|
131
|
+
include $(topsrcdir)/config/config.mk
|
|
132
|
+
|
|
133
|
+
LOCAL_INCLUDES = \
|
|
134
|
+
-I$(srcdir)/../loader \
|
|
135
|
+
-I$(topsrcdir)/js/src \
|
|
136
|
+
-I$(topsrcdir)/js/src/nanojit \
|
|
137
|
+
$(NULL)
|
|
138
|
+
|
|
139
|
+
EXTRA_DSO_LDOPTS += \
|
|
140
|
+
$(MOZ_COMPONENT_LIBS) \
|
|
141
|
+
$(MOZ_JS_LIBS) \
|
|
142
|
+
$(NULL)
|
|
143
|
+
|
|
144
|
+
ifdef MOZ_JSLOADER
|
|
145
|
+
SHARED_LIBRARY_LIBS = \
|
|
146
|
+
../loader/$(LIB_PREFIX)jsloader_s.$(LIB_SUFFIX) \
|
|
147
|
+
$(NULL)
|
|
148
|
+
endif
|
|
149
|
+
|
|
150
|
+
include $(topsrcdir)/config/rules.mk
|
|
151
|
+
|
|
152
|
+
DEFINES += \
|
|
153
|
+
-DJSFILE \
|
|
154
|
+
-DJS_THREADSAFE \
|
|
155
|
+
-DEXPORT_XPC_API \
|
|
156
|
+
$(NULL)
|
|
157
|
+
|
|
158
|
+
CONFIG := $(shell cat $(DEPTH)/js/src/mozilla-config.h)
|
|
159
|
+
|
|
160
|
+
ENABLE_JIT = $(filter JS_TRACER, $(CONFIG))
|
|
161
|
+
|
|
162
|
+
ifneq (,$(ENABLE_JIT))
|
|
163
|
+
|
|
164
|
+
# Ugly! We need the AVMPLUS defines out of js/src/mozilla-config.h to make the
|
|
165
|
+
# nanojit headers happy. Gotta figure out a better way to get them, bug 483677.
|
|
166
|
+
DEFINES += \
|
|
167
|
+
-DJS_TRACER=1 \
|
|
168
|
+
-DFEATURE_NANOJIT=1 \
|
|
169
|
+
$(addprefix -D,$(filter AVMPLUS%,$(CONFIG))) \
|
|
170
|
+
$(NULL)
|
|
171
|
+
|
|
172
|
+
ENABLE_TRACEABLE_FLAGS = --enable-traceables
|
|
173
|
+
|
|
174
|
+
endif # ENABLE_JIT
|
|
175
|
+
|
|
176
|
+
ifdef MOZ_XPCTOOLS
|
|
177
|
+
DEFINES += -DXPC_TOOLS_SUPPORT
|
|
178
|
+
REQUIRES += xpctools
|
|
179
|
+
endif
|
|
180
|
+
|
|
181
|
+
ifdef XPC_IDISPATCH_SUPPORT
|
|
182
|
+
DEFINES += -DXPC_IDISPATCH_SUPPORT
|
|
183
|
+
ifdef XPC_COMOBJECT
|
|
184
|
+
DEFINES += -DXPC_COMOBJECT
|
|
185
|
+
endif
|
|
186
|
+
|
|
187
|
+
endif
|
|
188
|
+
|
|
189
|
+
ifeq ($(OS_ARCH),WINNT)
|
|
190
|
+
ifndef GNU_CXX
|
|
191
|
+
ifeq (,$(filter-out 1200 1300 1310,$(_MSC_VER)))
|
|
192
|
+
# whole program optimization and precompiled headers are incompatible
|
|
193
|
+
ifeq (,$(findstring GL,$(CXXFLAGS)))
|
|
194
|
+
# use pre-compiled headers
|
|
195
|
+
CXXFLAGS += -YX -Fp$(LIBRARY_NAME).pch
|
|
196
|
+
# precompiled headers require write access to .pch which breaks -j builds
|
|
197
|
+
.NOTPARALLEL:
|
|
198
|
+
endif
|
|
199
|
+
endif
|
|
200
|
+
endif
|
|
201
|
+
endif
|
|
202
|
+
|
|
203
|
+
nsXPConnect.$(OBJ_SUFFIX): dom_quickstubs.h
|
|
204
|
+
|
|
205
|
+
xpcjsruntime.$(OBJ_SUFFIX): dom_quickstubs.h
|
|
206
|
+
|
|
207
|
+
dom_quickstubs.h dom_quickstubs.cpp: $(srcdir)/dom_quickstubs.qsconf \
|
|
208
|
+
$(srcdir)/qsgen.py \
|
|
209
|
+
$(topsrcdir)/xpcom/idl-parser/header.py \
|
|
210
|
+
$(topsrcdir)/xpcom/idl-parser/xpidl.py \
|
|
211
|
+
$(DEPTH)/js/src/mozilla-config.h
|
|
212
|
+
$(PYTHON) $(topsrcdir)/config/pythonpath.py \
|
|
213
|
+
-I$(topsrcdir)/other-licenses/ply \
|
|
214
|
+
-I$(topsrcdir)/xpcom/idl-parser \
|
|
215
|
+
$(srcdir)/qsgen.py \
|
|
216
|
+
--idlpath=$(DEPTH)/dist/idl \
|
|
217
|
+
--cachedir=$(DEPTH)/xpcom/idl-parser \
|
|
218
|
+
--header-output dom_quickstubs.h \
|
|
219
|
+
--stub-output dom_quickstubs.cpp \
|
|
220
|
+
--makedepend-output $(MDDEPDIR)/dom_qsgen.pp \
|
|
221
|
+
$(ENABLE_TRACEABLE_FLAGS) \
|
|
222
|
+
$(srcdir)/dom_quickstubs.qsconf
|
|
223
|
+
|
|
224
|
+
GARBAGE += \
|
|
225
|
+
dom_quickstubs.h \
|
|
226
|
+
dom_quickstubs.cpp \
|
|
227
|
+
$(MDDEPDIR)/dom_qsgen.pp \
|
|
228
|
+
$(NULL)
|
|
@@ -0,0 +1,1186 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
2
|
+
/* vim: set ts=2 sw=2 et tw=78: */
|
|
3
|
+
/* ***** BEGIN LICENSE BLOCK *****
|
|
4
|
+
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
5
|
+
*
|
|
6
|
+
* The contents of this file are subject to the Mozilla Public License Version
|
|
7
|
+
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
8
|
+
* the License. You may obtain a copy of the License at
|
|
9
|
+
* http://www.mozilla.org/MPL/
|
|
10
|
+
*
|
|
11
|
+
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
+
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
13
|
+
* for the specific language governing rights and limitations under the
|
|
14
|
+
* License.
|
|
15
|
+
*
|
|
16
|
+
* The Original Code is mozilla.org code.
|
|
17
|
+
*
|
|
18
|
+
* The Initial Developer of the Original Code is
|
|
19
|
+
* The Mozilla Foundation.
|
|
20
|
+
* Portions created by the Initial Developer are Copyright (C) 2006
|
|
21
|
+
* the Initial Developer. All Rights Reserved.
|
|
22
|
+
*
|
|
23
|
+
* Contributor(s):
|
|
24
|
+
* Blake Kaplan <mrbkap@gmail.com> (original author)
|
|
25
|
+
*
|
|
26
|
+
* Alternatively, the contents of this file may be used under the terms of
|
|
27
|
+
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
28
|
+
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
29
|
+
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
30
|
+
* of those above. If you wish to allow use of your version of this file only
|
|
31
|
+
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
32
|
+
* use your version of this file under the terms of the MPL, indicate your
|
|
33
|
+
* decision by deleting the provisions above and replace them with the notice
|
|
34
|
+
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
35
|
+
* the provisions above, a recipient may use your version of this file under
|
|
36
|
+
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
37
|
+
*
|
|
38
|
+
* ***** END LICENSE BLOCK ***** */
|
|
39
|
+
|
|
40
|
+
#include "xpcprivate.h"
|
|
41
|
+
#include "nsDOMError.h"
|
|
42
|
+
#include "jsdbgapi.h"
|
|
43
|
+
#include "jscntxt.h" // For JSAutoTempValueRooter.
|
|
44
|
+
#include "XPCWrapper.h"
|
|
45
|
+
#include "nsIDOMWindow.h"
|
|
46
|
+
#include "nsIDOMWindowCollection.h"
|
|
47
|
+
|
|
48
|
+
// This file implements a wrapper around objects that allows them to be
|
|
49
|
+
// accessed safely from across origins.
|
|
50
|
+
|
|
51
|
+
static JSBool
|
|
52
|
+
XPC_XOW_AddProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
|
|
53
|
+
|
|
54
|
+
static JSBool
|
|
55
|
+
XPC_XOW_DelProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
|
|
56
|
+
|
|
57
|
+
static JSBool
|
|
58
|
+
XPC_XOW_GetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
|
|
59
|
+
|
|
60
|
+
static JSBool
|
|
61
|
+
XPC_XOW_SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
|
|
62
|
+
|
|
63
|
+
static JSBool
|
|
64
|
+
XPC_XOW_Enumerate(JSContext *cx, JSObject *obj);
|
|
65
|
+
|
|
66
|
+
static JSBool
|
|
67
|
+
XPC_XOW_NewResolve(JSContext *cx, JSObject *obj, jsval id, uintN flags,
|
|
68
|
+
JSObject **objp);
|
|
69
|
+
|
|
70
|
+
static JSBool
|
|
71
|
+
XPC_XOW_Convert(JSContext *cx, JSObject *obj, JSType type, jsval *vp);
|
|
72
|
+
|
|
73
|
+
static void
|
|
74
|
+
XPC_XOW_Finalize(JSContext *cx, JSObject *obj);
|
|
75
|
+
|
|
76
|
+
static JSBool
|
|
77
|
+
XPC_XOW_CheckAccess(JSContext *cx, JSObject *obj, jsval id, JSAccessMode mode,
|
|
78
|
+
jsval *vp);
|
|
79
|
+
|
|
80
|
+
static JSBool
|
|
81
|
+
XPC_XOW_Call(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
|
|
82
|
+
|
|
83
|
+
static JSBool
|
|
84
|
+
XPC_XOW_Construct(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
|
|
85
|
+
jsval *rval);
|
|
86
|
+
|
|
87
|
+
static JSBool
|
|
88
|
+
XPC_XOW_HasInstance(JSContext *cx, JSObject *obj, jsval v, JSBool *bp);
|
|
89
|
+
|
|
90
|
+
static JSBool
|
|
91
|
+
XPC_XOW_Equality(JSContext *cx, JSObject *obj, jsval v, JSBool *bp);
|
|
92
|
+
|
|
93
|
+
static JSObject *
|
|
94
|
+
XPC_XOW_Iterator(JSContext *cx, JSObject *obj, JSBool keysonly);
|
|
95
|
+
|
|
96
|
+
static JSObject *
|
|
97
|
+
XPC_XOW_WrappedObject(JSContext *cx, JSObject *obj);
|
|
98
|
+
|
|
99
|
+
JSExtendedClass sXPC_XOW_JSClass = {
|
|
100
|
+
// JSClass (JSExtendedClass.base) initialization
|
|
101
|
+
{ "XPCCrossOriginWrapper",
|
|
102
|
+
JSCLASS_NEW_RESOLVE | JSCLASS_IS_EXTENDED |
|
|
103
|
+
JSCLASS_HAS_RESERVED_SLOTS(XPCWrapper::sNumSlots + 1),
|
|
104
|
+
XPC_XOW_AddProperty, XPC_XOW_DelProperty,
|
|
105
|
+
XPC_XOW_GetProperty, XPC_XOW_SetProperty,
|
|
106
|
+
XPC_XOW_Enumerate, (JSResolveOp)XPC_XOW_NewResolve,
|
|
107
|
+
XPC_XOW_Convert, XPC_XOW_Finalize,
|
|
108
|
+
nsnull, XPC_XOW_CheckAccess,
|
|
109
|
+
XPC_XOW_Call, XPC_XOW_Construct,
|
|
110
|
+
nsnull, XPC_XOW_HasInstance,
|
|
111
|
+
nsnull, nsnull
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
// JSExtendedClass initialization
|
|
115
|
+
XPC_XOW_Equality,
|
|
116
|
+
nsnull, // outerObject
|
|
117
|
+
nsnull, // innerObject
|
|
118
|
+
XPC_XOW_Iterator,
|
|
119
|
+
XPC_XOW_WrappedObject,
|
|
120
|
+
JSCLASS_NO_RESERVED_MEMBERS
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
// The slot that we stick our scope into.
|
|
124
|
+
// This is used in the finalizer to see if we actually need to remove
|
|
125
|
+
// ourselves from our scope's map. Because we cannot outlive our scope
|
|
126
|
+
// (the parent link ensures this), we know that, when we're being
|
|
127
|
+
// finalized, either our scope is still alive (i.e. we became garbage
|
|
128
|
+
// due to no more references) or it is being garbage collected right now.
|
|
129
|
+
// Therefore, we can look in gDyingScopes, and if our scope is there,
|
|
130
|
+
// then the map is about to be destroyed anyway, so we don't need to
|
|
131
|
+
// do anything.
|
|
132
|
+
static const int XPC_XOW_ScopeSlot = XPCWrapper::sNumSlots;
|
|
133
|
+
|
|
134
|
+
static JSBool
|
|
135
|
+
XPC_XOW_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
|
|
136
|
+
jsval *rval);
|
|
137
|
+
|
|
138
|
+
// Throws an exception on context |cx|.
|
|
139
|
+
static inline
|
|
140
|
+
JSBool
|
|
141
|
+
ThrowException(nsresult ex, JSContext *cx)
|
|
142
|
+
{
|
|
143
|
+
XPCThrower::Throw(ex, cx);
|
|
144
|
+
|
|
145
|
+
return JS_FALSE;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Get the (possibly non-existant) XOW off of an object
|
|
149
|
+
static inline
|
|
150
|
+
JSObject *
|
|
151
|
+
GetWrapper(JSObject *obj)
|
|
152
|
+
{
|
|
153
|
+
while (STOBJ_GET_CLASS(obj) != &sXPC_XOW_JSClass.base) {
|
|
154
|
+
obj = STOBJ_GET_PROTO(obj);
|
|
155
|
+
if (!obj) {
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return obj;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
static inline
|
|
164
|
+
JSObject *
|
|
165
|
+
GetWrappedObject(JSContext *cx, JSObject *wrapper)
|
|
166
|
+
{
|
|
167
|
+
return XPCWrapper::UnwrapGeneric(cx, &sXPC_XOW_JSClass, wrapper);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
JSBool
|
|
171
|
+
XPC_XOW_WrapperMoved(JSContext *cx, XPCWrappedNative *innerObj,
|
|
172
|
+
XPCWrappedNativeScope *newScope)
|
|
173
|
+
{
|
|
174
|
+
typedef WrappedNative2WrapperMap::Link Link;
|
|
175
|
+
XPCJSRuntime *rt = nsXPConnect::GetRuntimeInstance();
|
|
176
|
+
WrappedNative2WrapperMap *map = innerObj->GetScope()->GetWrapperMap();
|
|
177
|
+
Link *link;
|
|
178
|
+
|
|
179
|
+
{ // Scoped lock
|
|
180
|
+
XPCAutoLock al(rt->GetMapLock());
|
|
181
|
+
link = map->FindLink(innerObj->GetFlatJSObject());
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (!link) {
|
|
185
|
+
// No link here means that there were no XOWs for this object.
|
|
186
|
+
return JS_TRUE;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
JSObject *xow = link->obj;
|
|
190
|
+
|
|
191
|
+
{ // Scoped lock.
|
|
192
|
+
XPCAutoLock al(rt->GetMapLock());
|
|
193
|
+
if (!newScope->GetWrapperMap()->AddLink(innerObj->GetFlatJSObject(), link))
|
|
194
|
+
return JS_FALSE;
|
|
195
|
+
map->Remove(innerObj->GetFlatJSObject());
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (!xow) {
|
|
199
|
+
// Nothing else to do.
|
|
200
|
+
return JS_TRUE;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return JS_SetReservedSlot(cx, xow, XPC_XOW_ScopeSlot,
|
|
204
|
+
PRIVATE_TO_JSVAL(newScope)) &&
|
|
205
|
+
JS_SetParent(cx, xow, newScope->GetGlobalJSObject());
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
static JSBool
|
|
209
|
+
IsValFrame(JSObject *obj, jsval v, XPCWrappedNative *wn)
|
|
210
|
+
{
|
|
211
|
+
// Fast path for the common case.
|
|
212
|
+
if (STOBJ_GET_CLASS(obj)->name[0] != 'W') {
|
|
213
|
+
return JS_FALSE;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
nsCOMPtr<nsIDOMWindow> domwin(do_QueryWrappedNative(wn));
|
|
217
|
+
if (!domwin) {
|
|
218
|
+
return JS_FALSE;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
nsCOMPtr<nsIDOMWindowCollection> col;
|
|
222
|
+
domwin->GetFrames(getter_AddRefs(col));
|
|
223
|
+
if (!col) {
|
|
224
|
+
return JS_FALSE;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
if (JSVAL_IS_INT(v)) {
|
|
228
|
+
col->Item(JSVAL_TO_INT(v), getter_AddRefs(domwin));
|
|
229
|
+
} else {
|
|
230
|
+
nsAutoString str(reinterpret_cast<PRUnichar *>
|
|
231
|
+
(JS_GetStringChars(JSVAL_TO_STRING(v))));
|
|
232
|
+
col->NamedItem(str, getter_AddRefs(domwin));
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return domwin != nsnull;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Returns whether the currently executing code is allowed to access
|
|
239
|
+
// the wrapper. Uses nsIPrincipal::Subsumes.
|
|
240
|
+
// |cx| must be the top context on the context stack.
|
|
241
|
+
// If the subject is allowed to access the object returns NS_OK. If not,
|
|
242
|
+
// returns NS_ERROR_DOM_PROP_ACCESS_DENIED, returns another error code on
|
|
243
|
+
// failure.
|
|
244
|
+
nsresult
|
|
245
|
+
CanAccessWrapper(JSContext *cx, JSObject *wrappedObj)
|
|
246
|
+
{
|
|
247
|
+
// Get the subject principal from the execution stack.
|
|
248
|
+
nsIScriptSecurityManager *ssm = XPCWrapper::GetSecurityManager();
|
|
249
|
+
if (!ssm) {
|
|
250
|
+
ThrowException(NS_ERROR_NOT_INITIALIZED, cx);
|
|
251
|
+
return NS_ERROR_NOT_INITIALIZED;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
JSStackFrame *fp = nsnull;
|
|
255
|
+
nsIPrincipal *subjectPrin = ssm->GetCxSubjectPrincipalAndFrame(cx, &fp);
|
|
256
|
+
|
|
257
|
+
if (!subjectPrin) {
|
|
258
|
+
ThrowException(NS_ERROR_FAILURE, cx);
|
|
259
|
+
return NS_ERROR_FAILURE;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
PRBool isSystem = PR_FALSE;
|
|
263
|
+
nsresult rv = ssm->IsSystemPrincipal(subjectPrin, &isSystem);
|
|
264
|
+
NS_ENSURE_SUCCESS(rv, rv);
|
|
265
|
+
|
|
266
|
+
// If we somehow end up being called from chrome, just allow full access.
|
|
267
|
+
// This can happen from components with xpcnativewrappers=no.
|
|
268
|
+
// Note that this is just an optimization to avoid getting the
|
|
269
|
+
// object principal in this case, since Subsumes() would return true.
|
|
270
|
+
if (isSystem) {
|
|
271
|
+
return NS_OK;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// There might be no code running, but if there is, we need to see if it is
|
|
275
|
+
// UniversalXPConnect enabled code.
|
|
276
|
+
if (fp) {
|
|
277
|
+
void *annotation = JS_GetFrameAnnotation(cx, fp);
|
|
278
|
+
rv = subjectPrin->IsCapabilityEnabled("UniversalXPConnect", annotation,
|
|
279
|
+
&isSystem);
|
|
280
|
+
NS_ENSURE_SUCCESS(rv, rv);
|
|
281
|
+
if (isSystem) {
|
|
282
|
+
return NS_OK;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
nsCOMPtr<nsIPrincipal> objectPrin;
|
|
287
|
+
rv = ssm->GetObjectPrincipal(cx, wrappedObj, getter_AddRefs(objectPrin));
|
|
288
|
+
if (NS_FAILED(rv)) {
|
|
289
|
+
return rv;
|
|
290
|
+
}
|
|
291
|
+
NS_ASSERTION(objectPrin, "Object didn't have principals?");
|
|
292
|
+
|
|
293
|
+
// Micro-optimization: don't call into caps if we know the answer.
|
|
294
|
+
if (subjectPrin == objectPrin) {
|
|
295
|
+
return NS_OK;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// Now, we have our two principals, compare them!
|
|
299
|
+
PRBool subsumes;
|
|
300
|
+
rv = subjectPrin->Subsumes(objectPrin, &subsumes);
|
|
301
|
+
if (NS_SUCCEEDED(rv) && !subsumes) {
|
|
302
|
+
rv = NS_ERROR_DOM_PROP_ACCESS_DENIED;
|
|
303
|
+
}
|
|
304
|
+
return rv;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
static JSBool
|
|
308
|
+
WrapSameOriginProp(JSContext *cx, JSObject *outerObj, jsval *vp);
|
|
309
|
+
|
|
310
|
+
static JSBool
|
|
311
|
+
XPC_XOW_FunctionWrapper(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
|
|
312
|
+
jsval *rval)
|
|
313
|
+
{
|
|
314
|
+
JSObject *wrappedObj, *outerObj = obj;
|
|
315
|
+
|
|
316
|
+
// Allow 'this' to be either an XOW, in which case we unwrap it.
|
|
317
|
+
// We disallow invalid XOWs that have no wrapped object. Otherwise,
|
|
318
|
+
// if it isn't an XOW, then pass it through as-is.
|
|
319
|
+
|
|
320
|
+
wrappedObj = GetWrapper(obj);
|
|
321
|
+
if (wrappedObj) {
|
|
322
|
+
wrappedObj = GetWrappedObject(cx, wrappedObj);
|
|
323
|
+
if (!wrappedObj) {
|
|
324
|
+
return ThrowException(NS_ERROR_ILLEGAL_VALUE, cx);
|
|
325
|
+
}
|
|
326
|
+
} else {
|
|
327
|
+
wrappedObj = obj;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
JSObject *funObj = JSVAL_TO_OBJECT(argv[-2]);
|
|
331
|
+
jsval funToCall;
|
|
332
|
+
if (!JS_GetReservedSlot(cx, funObj, XPCWrapper::eWrappedFunctionSlot,
|
|
333
|
+
&funToCall)) {
|
|
334
|
+
return JS_FALSE;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
JSFunction *fun = JS_ValueToFunction(cx, funToCall);
|
|
338
|
+
if (!fun) {
|
|
339
|
+
return ThrowException(NS_ERROR_ILLEGAL_VALUE, cx);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
343
|
+
if (!ccx.IsValid()) {
|
|
344
|
+
return ThrowException(NS_ERROR_FAILURE, cx);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
nsresult rv = CanAccessWrapper(cx, JSVAL_TO_OBJECT(funToCall));
|
|
348
|
+
if (NS_FAILED(rv) && rv != NS_ERROR_DOM_PROP_ACCESS_DENIED) {
|
|
349
|
+
return ThrowException(rv, cx);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
JSNative native = JS_GetFunctionNative(cx, fun);
|
|
353
|
+
NS_ASSERTION(native, "How'd we get here with a scripted function?");
|
|
354
|
+
|
|
355
|
+
// A trick! Calling the native directly doesn't push the native onto the
|
|
356
|
+
// JS stack, so interested onlookers will only see us, meaning that they
|
|
357
|
+
// will compute *our* subject principal.
|
|
358
|
+
|
|
359
|
+
argv[-2] = funToCall;
|
|
360
|
+
argv[-1] = OBJECT_TO_JSVAL(wrappedObj);
|
|
361
|
+
if (!native(cx, wrappedObj, argc, argv, rval)) {
|
|
362
|
+
return JS_FALSE;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
if (NS_SUCCEEDED(rv)) {
|
|
366
|
+
return WrapSameOriginProp(cx, outerObj, rval);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
return XPC_XOW_RewrapIfNeeded(cx, obj, rval);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
static JSBool
|
|
373
|
+
WrapSameOriginProp(JSContext *cx, JSObject *outerObj, jsval *vp)
|
|
374
|
+
{
|
|
375
|
+
// Don't call XPC_XOW_RewrapIfNeeded for same origin properties. We only
|
|
376
|
+
// need to wrap window, document and location.
|
|
377
|
+
if (JSVAL_IS_PRIMITIVE(*vp)) {
|
|
378
|
+
return JS_TRUE;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
JSObject *wrappedObj = JSVAL_TO_OBJECT(*vp);
|
|
382
|
+
JSClass *clasp = STOBJ_GET_CLASS(wrappedObj);
|
|
383
|
+
if (XPC_XOW_ClassNeedsXOW(clasp->name)) {
|
|
384
|
+
return XPC_XOW_WrapObject(cx, JS_GetGlobalForObject(cx, outerObj), vp);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
// Check if wrappedObj is an XOW. If so, verify that it's from the
|
|
388
|
+
// right scope.
|
|
389
|
+
if (clasp == &sXPC_XOW_JSClass.base &&
|
|
390
|
+
STOBJ_GET_PARENT(wrappedObj) != STOBJ_GET_PARENT(outerObj)) {
|
|
391
|
+
*vp = OBJECT_TO_JSVAL(GetWrappedObject(cx, wrappedObj));
|
|
392
|
+
return XPC_XOW_WrapObject(cx, STOBJ_GET_PARENT(outerObj), vp);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
return JS_TRUE;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
JSBool
|
|
399
|
+
XPC_XOW_WrapFunction(JSContext *cx, JSObject *outerObj, JSObject *funobj,
|
|
400
|
+
jsval *rval)
|
|
401
|
+
{
|
|
402
|
+
jsval funobjVal = OBJECT_TO_JSVAL(funobj);
|
|
403
|
+
JSFunction *wrappedFun =
|
|
404
|
+
reinterpret_cast<JSFunction *>(xpc_GetJSPrivate(funobj));
|
|
405
|
+
JSNative native = JS_GetFunctionNative(cx, wrappedFun);
|
|
406
|
+
if (!native || native == XPC_XOW_FunctionWrapper) {
|
|
407
|
+
*rval = funobjVal;
|
|
408
|
+
return JS_TRUE;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
JSFunction *funWrapper =
|
|
412
|
+
JS_NewFunction(cx, XPC_XOW_FunctionWrapper,
|
|
413
|
+
JS_GetFunctionArity(wrappedFun), 0,
|
|
414
|
+
JS_GetGlobalForObject(cx, outerObj),
|
|
415
|
+
JS_GetFunctionName(wrappedFun));
|
|
416
|
+
if (!funWrapper) {
|
|
417
|
+
return JS_FALSE;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
JSObject *funWrapperObj = JS_GetFunctionObject(funWrapper);
|
|
421
|
+
*rval = OBJECT_TO_JSVAL(funWrapperObj);
|
|
422
|
+
|
|
423
|
+
if (!JS_SetReservedSlot(cx, funWrapperObj, XPCWrapper::eWrappedFunctionSlot, funobjVal) ||
|
|
424
|
+
!JS_SetReservedSlot(cx, funWrapperObj, XPCWrapper::eAllAccessSlot, JSVAL_FALSE)) {
|
|
425
|
+
return JS_FALSE;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
return JS_TRUE;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
JSBool
|
|
432
|
+
XPC_XOW_RewrapIfNeeded(JSContext *cx, JSObject *outerObj, jsval *vp)
|
|
433
|
+
{
|
|
434
|
+
// Don't need to wrap primitive values.
|
|
435
|
+
if (JSVAL_IS_PRIMITIVE(*vp)) {
|
|
436
|
+
return JS_TRUE;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
JSObject *obj = JSVAL_TO_OBJECT(*vp);
|
|
440
|
+
|
|
441
|
+
if (JS_ObjectIsFunction(cx, obj)) {
|
|
442
|
+
return XPC_XOW_WrapFunction(cx, outerObj, obj, vp);
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
if (STOBJ_GET_CLASS(obj) == &sXPC_XOW_JSClass.base &&
|
|
446
|
+
STOBJ_GET_PARENT(outerObj) != STOBJ_GET_PARENT(obj)) {
|
|
447
|
+
*vp = OBJECT_TO_JSVAL(GetWrappedObject(cx, obj));
|
|
448
|
+
} else if (!XPCWrappedNative::GetWrappedNativeOfJSObject(cx, obj)) {
|
|
449
|
+
return JS_TRUE;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
return XPC_XOW_WrapObject(cx, JS_GetGlobalForObject(cx, outerObj), vp);
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
JSBool
|
|
456
|
+
XPC_XOW_WrapObject(JSContext *cx, JSObject *parent, jsval *vp,
|
|
457
|
+
XPCWrappedNative* wn)
|
|
458
|
+
{
|
|
459
|
+
NS_ASSERTION(XPCPerThreadData::IsMainThread(cx),
|
|
460
|
+
"Can't do this off the main thread!");
|
|
461
|
+
|
|
462
|
+
// Our argument should be a wrapped native object, but the caller may have
|
|
463
|
+
// passed it in as an optimization.
|
|
464
|
+
JSObject *wrappedObj;
|
|
465
|
+
if (!JSVAL_IS_OBJECT(*vp) ||
|
|
466
|
+
!(wrappedObj = JSVAL_TO_OBJECT(*vp)) ||
|
|
467
|
+
STOBJ_GET_CLASS(wrappedObj) == &sXPC_XOW_JSClass.base) {
|
|
468
|
+
return JS_TRUE;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
if (!wn &&
|
|
472
|
+
!(wn = XPCWrappedNative::GetWrappedNativeOfJSObject(cx, wrappedObj))) {
|
|
473
|
+
return JS_TRUE;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
XPCJSRuntime *rt = nsXPConnect::GetRuntimeInstance();
|
|
477
|
+
|
|
478
|
+
// The parent must be the inner global object for its scope.
|
|
479
|
+
parent = JS_GetGlobalForObject(cx, parent);
|
|
480
|
+
|
|
481
|
+
JSClass *clasp = STOBJ_GET_CLASS(parent);
|
|
482
|
+
if (clasp->flags & JSCLASS_IS_EXTENDED) {
|
|
483
|
+
JSExtendedClass *xclasp = reinterpret_cast<JSExtendedClass *>(clasp);
|
|
484
|
+
if (xclasp->innerObject) {
|
|
485
|
+
parent = xclasp->innerObject(cx, parent);
|
|
486
|
+
if (!parent) {
|
|
487
|
+
return JS_FALSE;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
XPCWrappedNativeScope *parentScope =
|
|
493
|
+
XPCWrappedNativeScope::FindInJSObjectScope(cx, parent, nsnull, rt);
|
|
494
|
+
|
|
495
|
+
#ifdef DEBUG_mrbkap_off
|
|
496
|
+
printf("Wrapping object at %p (%s) [%p]\n",
|
|
497
|
+
(void *)wrappedObj, STOBJ_GET_CLASS(wrappedObj)->name,
|
|
498
|
+
(void *)parentScope);
|
|
499
|
+
#endif
|
|
500
|
+
|
|
501
|
+
JSObject *outerObj = nsnull;
|
|
502
|
+
WrappedNative2WrapperMap *map = parentScope->GetWrapperMap();
|
|
503
|
+
|
|
504
|
+
outerObj = map->Find(wrappedObj);
|
|
505
|
+
if (outerObj) {
|
|
506
|
+
NS_ASSERTION(STOBJ_GET_CLASS(outerObj) == &sXPC_XOW_JSClass.base,
|
|
507
|
+
"What crazy object are we getting here?");
|
|
508
|
+
#ifdef DEBUG_mrbkap_off
|
|
509
|
+
printf("But found a wrapper in the map %p!\n", (void *)outerObj);
|
|
510
|
+
#endif
|
|
511
|
+
*vp = OBJECT_TO_JSVAL(outerObj);
|
|
512
|
+
return JS_TRUE;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
// FIXME: bug 408871, Note that we create outerObj with a null parent
|
|
516
|
+
// here. We set it later so that we find our nominal prototype in the
|
|
517
|
+
// same scope as the one that is calling us.
|
|
518
|
+
outerObj = JS_NewObjectWithGivenProto(cx, &sXPC_XOW_JSClass.base, nsnull,
|
|
519
|
+
parent);
|
|
520
|
+
if (!outerObj) {
|
|
521
|
+
return JS_FALSE;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
if (!JS_SetReservedSlot(cx, outerObj, XPCWrapper::sWrappedObjSlot, *vp) ||
|
|
525
|
+
!JS_SetReservedSlot(cx, outerObj, XPCWrapper::sFlagsSlot,
|
|
526
|
+
JSVAL_ZERO) ||
|
|
527
|
+
!JS_SetReservedSlot(cx, outerObj, XPC_XOW_ScopeSlot,
|
|
528
|
+
PRIVATE_TO_JSVAL(parentScope))) {
|
|
529
|
+
return JS_FALSE;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
*vp = OBJECT_TO_JSVAL(outerObj);
|
|
533
|
+
|
|
534
|
+
map->Add(wn->GetScope()->GetWrapperMap(), wrappedObj, outerObj);
|
|
535
|
+
|
|
536
|
+
return JS_TRUE;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
static JSBool
|
|
540
|
+
XPC_XOW_AddProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
|
541
|
+
{
|
|
542
|
+
// All AddProperty needs to do is pass on addProperty requests to
|
|
543
|
+
// same-origin objects, and throw for all else.
|
|
544
|
+
|
|
545
|
+
obj = GetWrapper(obj);
|
|
546
|
+
jsval resolving;
|
|
547
|
+
if (!JS_GetReservedSlot(cx, obj, XPCWrapper::sFlagsSlot, &resolving)) {
|
|
548
|
+
return JS_FALSE;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
if (HAS_FLAGS(resolving, FLAG_RESOLVING)) {
|
|
552
|
+
// Allow us to define a property on ourselves.
|
|
553
|
+
return JS_TRUE;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
JSObject *wrappedObj = GetWrappedObject(cx, obj);
|
|
557
|
+
if (!wrappedObj) {
|
|
558
|
+
return ThrowException(NS_ERROR_ILLEGAL_VALUE, cx);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
562
|
+
if (!ccx.IsValid()) {
|
|
563
|
+
return ThrowException(NS_ERROR_FAILURE, cx);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
nsresult rv = CanAccessWrapper(cx, wrappedObj);
|
|
567
|
+
if (NS_FAILED(rv)) {
|
|
568
|
+
if (rv == NS_ERROR_DOM_PROP_ACCESS_DENIED) {
|
|
569
|
+
// Can't override properties on foreign objects.
|
|
570
|
+
return ThrowException(rv, cx);
|
|
571
|
+
}
|
|
572
|
+
return JS_FALSE;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
// Same origin, pass this request along.
|
|
576
|
+
return XPCWrapper::AddProperty(cx, obj, JS_TRUE, wrappedObj, id, vp);
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
static JSBool
|
|
580
|
+
XPC_XOW_DelProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
|
581
|
+
{
|
|
582
|
+
JSObject *wrappedObj = GetWrappedObject(cx, obj);
|
|
583
|
+
if (!wrappedObj) {
|
|
584
|
+
return ThrowException(NS_ERROR_ILLEGAL_VALUE, cx);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
588
|
+
if (!ccx.IsValid()) {
|
|
589
|
+
return ThrowException(NS_ERROR_FAILURE, cx);
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
nsresult rv = CanAccessWrapper(cx, wrappedObj);
|
|
593
|
+
if (NS_FAILED(rv)) {
|
|
594
|
+
if (rv == NS_ERROR_DOM_PROP_ACCESS_DENIED) {
|
|
595
|
+
// Can't delete properties on foreign objects.
|
|
596
|
+
return ThrowException(rv, cx);
|
|
597
|
+
}
|
|
598
|
+
return JS_FALSE;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
// Same origin, pass this request along.
|
|
602
|
+
return XPCWrapper::DelProperty(cx, wrappedObj, id, vp);
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
static JSBool
|
|
606
|
+
XPC_XOW_GetOrSetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp,
|
|
607
|
+
JSBool isSet)
|
|
608
|
+
{
|
|
609
|
+
if (id == GetRTStringByIndex(cx, XPCJSRuntime::IDX_TO_STRING)) {
|
|
610
|
+
return JS_TRUE;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// Don't do anything if we already resolved to a wrapped function in
|
|
614
|
+
// NewResolve. In practice, this means that this is a wrapped eval
|
|
615
|
+
// function.
|
|
616
|
+
jsval v = *vp;
|
|
617
|
+
if (!JSVAL_IS_PRIMITIVE(v) &&
|
|
618
|
+
JS_ObjectIsFunction(cx, JSVAL_TO_OBJECT(v)) &&
|
|
619
|
+
JS_GetFunctionNative(cx, JS_ValueToFunction(cx, v)) ==
|
|
620
|
+
XPC_XOW_FunctionWrapper) {
|
|
621
|
+
return JS_TRUE;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
JSObject *origObj = obj;
|
|
625
|
+
obj = GetWrapper(obj);
|
|
626
|
+
if (!obj) {
|
|
627
|
+
return ThrowException(NS_ERROR_ILLEGAL_VALUE, cx);
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
631
|
+
if (!ccx.IsValid()) {
|
|
632
|
+
return ThrowException(NS_ERROR_FAILURE, cx);
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
AUTO_MARK_JSVAL(ccx, vp);
|
|
636
|
+
|
|
637
|
+
JSObject *wrappedObj = GetWrappedObject(cx, obj);
|
|
638
|
+
if (!wrappedObj) {
|
|
639
|
+
return ThrowException(NS_ERROR_ILLEGAL_VALUE, cx);
|
|
640
|
+
}
|
|
641
|
+
nsresult rv = CanAccessWrapper(cx, wrappedObj);
|
|
642
|
+
if (NS_FAILED(rv)) {
|
|
643
|
+
if (rv != NS_ERROR_DOM_PROP_ACCESS_DENIED) {
|
|
644
|
+
return JS_FALSE;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// This is a request to get a property across origins. We need to
|
|
648
|
+
// determine if this property is allAccess. If it is, then we need to
|
|
649
|
+
// actually get the property. If not, we simply need to throw an
|
|
650
|
+
// exception.
|
|
651
|
+
|
|
652
|
+
XPCWrappedNative *wn =
|
|
653
|
+
XPCWrappedNative::GetWrappedNativeOfJSObject(cx, wrappedObj);
|
|
654
|
+
NS_ASSERTION(wn, "How did we wrap a non-WrappedNative?");
|
|
655
|
+
if (!IsValFrame(wrappedObj, id, wn)) {
|
|
656
|
+
nsIScriptSecurityManager *ssm = XPCWrapper::GetSecurityManager();
|
|
657
|
+
if (!ssm) {
|
|
658
|
+
return ThrowException(NS_ERROR_NOT_INITIALIZED, cx);
|
|
659
|
+
}
|
|
660
|
+
rv = ssm->CheckPropertyAccess(cx, wrappedObj,
|
|
661
|
+
STOBJ_GET_CLASS(wrappedObj)->name,
|
|
662
|
+
id, isSet ? XPCWrapper::sSecMgrSetProp
|
|
663
|
+
: XPCWrapper::sSecMgrGetProp);
|
|
664
|
+
if (NS_FAILED(rv)) {
|
|
665
|
+
// The security manager threw an exception for us.
|
|
666
|
+
return JS_FALSE;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
if (!XPCWrapper::GetOrSetNativeProperty(cx, obj, wn, id, vp, isSet,
|
|
671
|
+
JS_FALSE)) {
|
|
672
|
+
return JS_FALSE;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
return XPC_XOW_RewrapIfNeeded(cx, obj, vp);
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
JSObject *proto = nsnull; // Initialize this to quiet GCC.
|
|
679
|
+
JSBool checkProto =
|
|
680
|
+
(isSet && id == GetRTStringByIndex(cx, XPCJSRuntime::IDX_PROTO));
|
|
681
|
+
if (checkProto) {
|
|
682
|
+
proto = STOBJ_GET_PROTO(wrappedObj);
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
// Same origin, pass this request along as though nothing interesting
|
|
686
|
+
// happened.
|
|
687
|
+
jsid asId;
|
|
688
|
+
|
|
689
|
+
if (!JS_ValueToId(cx, id, &asId)) {
|
|
690
|
+
return JS_FALSE;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
JSBool ok = isSet
|
|
694
|
+
? JS_SetPropertyById(cx, wrappedObj, asId, vp)
|
|
695
|
+
: JS_GetPropertyById(cx, wrappedObj, asId, vp);
|
|
696
|
+
if (!ok) {
|
|
697
|
+
return JS_FALSE;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
if (checkProto) {
|
|
701
|
+
JSObject *newProto = STOBJ_GET_PROTO(wrappedObj);
|
|
702
|
+
|
|
703
|
+
// If code is trying to set obj.__proto__ and we're on obj's
|
|
704
|
+
// prototype chain, then the JS_GetPropertyById above will do the
|
|
705
|
+
// wrong thing if wrappedObj still delegates to Object.prototype.
|
|
706
|
+
// However, it's hard to figure out if wrappedObj still does
|
|
707
|
+
// delegate to Object.prototype so check to see if proto changed as a
|
|
708
|
+
// result of setting __proto__.
|
|
709
|
+
|
|
710
|
+
if (origObj != obj) {
|
|
711
|
+
// Undo the damage.
|
|
712
|
+
if (!JS_SetPrototype(cx, wrappedObj, proto) ||
|
|
713
|
+
!JS_SetPrototype(cx, origObj, newProto)) {
|
|
714
|
+
return JS_FALSE;
|
|
715
|
+
}
|
|
716
|
+
} else if (newProto) {
|
|
717
|
+
// __proto__ setting is a bad hack, people shouldn't do it. In
|
|
718
|
+
// this case we're setting the direct prototype of a XOW object,
|
|
719
|
+
// in the interests of sanity only allow it to be set to null in
|
|
720
|
+
// this case.
|
|
721
|
+
|
|
722
|
+
JS_SetPrototype(cx, wrappedObj, proto);
|
|
723
|
+
JS_ReportError(cx, "invalid __proto__ value (can only be set to null)");
|
|
724
|
+
return JS_FALSE;
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
return WrapSameOriginProp(cx, obj, vp);
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
static JSBool
|
|
732
|
+
XPC_XOW_GetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
|
733
|
+
{
|
|
734
|
+
return XPC_XOW_GetOrSetProperty(cx, obj, id, vp, JS_FALSE);
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
static JSBool
|
|
738
|
+
XPC_XOW_SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
|
739
|
+
{
|
|
740
|
+
return XPC_XOW_GetOrSetProperty(cx, obj, id, vp, JS_TRUE);
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
static JSBool
|
|
744
|
+
XPC_XOW_Enumerate(JSContext *cx, JSObject *obj)
|
|
745
|
+
{
|
|
746
|
+
obj = GetWrapper(obj);
|
|
747
|
+
JSObject *wrappedObj = GetWrappedObject(cx, obj);
|
|
748
|
+
if (!wrappedObj) {
|
|
749
|
+
// Nothing to enumerate.
|
|
750
|
+
return JS_TRUE;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
754
|
+
if (!ccx.IsValid()) {
|
|
755
|
+
return ThrowException(NS_ERROR_FAILURE, cx);
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
nsresult rv = CanAccessWrapper(cx, wrappedObj);
|
|
759
|
+
if (NS_FAILED(rv)) {
|
|
760
|
+
if (rv == NS_ERROR_DOM_PROP_ACCESS_DENIED) {
|
|
761
|
+
// Can't enumerate on foreign objects.
|
|
762
|
+
return ThrowException(rv, cx);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
return JS_FALSE;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
return XPCWrapper::Enumerate(cx, obj, wrappedObj);
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
static JSBool
|
|
772
|
+
XPC_XOW_NewResolve(JSContext *cx, JSObject *obj, jsval id, uintN flags,
|
|
773
|
+
JSObject **objp)
|
|
774
|
+
{
|
|
775
|
+
obj = GetWrapper(obj);
|
|
776
|
+
|
|
777
|
+
JSObject *wrappedObj = GetWrappedObject(cx, obj);
|
|
778
|
+
if (!wrappedObj) {
|
|
779
|
+
// No wrappedObj means that this is probably the prototype.
|
|
780
|
+
*objp = nsnull;
|
|
781
|
+
return JS_TRUE;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
785
|
+
if (!ccx.IsValid()) {
|
|
786
|
+
return ThrowException(NS_ERROR_FAILURE, cx);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
nsresult rv = CanAccessWrapper(cx, wrappedObj);
|
|
790
|
+
if (NS_FAILED(rv)) {
|
|
791
|
+
if (rv != NS_ERROR_DOM_PROP_ACCESS_DENIED) {
|
|
792
|
+
return JS_FALSE;
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
// We're dealing with a cross-origin lookup. Ensure that we're allowed to
|
|
796
|
+
// resolve this property and resolve it if so. Otherwise, we deny access
|
|
797
|
+
// and throw a security error. Note that this code does not actually check
|
|
798
|
+
// to see if the property exists, that's dealt with below.
|
|
799
|
+
|
|
800
|
+
XPCWrappedNative *wn =
|
|
801
|
+
XPCWrappedNative::GetWrappedNativeOfJSObject(cx, wrappedObj);
|
|
802
|
+
NS_ASSERTION(wn, "How did we wrap a non-WrappedNative?");
|
|
803
|
+
if (!IsValFrame(wrappedObj, id, wn)) {
|
|
804
|
+
nsIScriptSecurityManager *ssm = XPCWrapper::GetSecurityManager();
|
|
805
|
+
if (!ssm) {
|
|
806
|
+
return ThrowException(NS_ERROR_NOT_INITIALIZED, cx);
|
|
807
|
+
}
|
|
808
|
+
PRUint32 action = (flags & JSRESOLVE_ASSIGNING)
|
|
809
|
+
? (PRUint32)nsIXPCSecurityManager::ACCESS_SET_PROPERTY
|
|
810
|
+
: (PRUint32)nsIXPCSecurityManager::ACCESS_GET_PROPERTY;
|
|
811
|
+
rv = ssm->CheckPropertyAccess(cx, wrappedObj,
|
|
812
|
+
STOBJ_GET_CLASS(wrappedObj)->name,
|
|
813
|
+
id, action);
|
|
814
|
+
if (NS_FAILED(rv)) {
|
|
815
|
+
// The security manager threw an exception for us.
|
|
816
|
+
return JS_FALSE;
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
// We're out! We're allowed to resolve this property.
|
|
821
|
+
return XPCWrapper::ResolveNativeProperty(cx, obj, wrappedObj, wn, id,
|
|
822
|
+
flags, objp, JS_FALSE);
|
|
823
|
+
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
if (id == GetRTStringByIndex(cx, XPCJSRuntime::IDX_TO_STRING)) {
|
|
827
|
+
jsval oldSlotVal;
|
|
828
|
+
if (!JS_GetReservedSlot(cx, obj, XPCWrapper::sFlagsSlot, &oldSlotVal) ||
|
|
829
|
+
!JS_SetReservedSlot(cx, obj, XPCWrapper::sFlagsSlot,
|
|
830
|
+
INT_TO_JSVAL(JSVAL_TO_INT(oldSlotVal) |
|
|
831
|
+
FLAG_RESOLVING))) {
|
|
832
|
+
return JS_FALSE;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
JSBool ok = JS_DefineFunction(cx, obj, "toString",
|
|
836
|
+
XPC_XOW_toString, 0, 0) != nsnull;
|
|
837
|
+
|
|
838
|
+
JS_SetReservedSlot(cx, obj, XPCWrapper::sFlagsSlot, oldSlotVal);
|
|
839
|
+
|
|
840
|
+
if (ok) {
|
|
841
|
+
*objp = obj;
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
return ok;
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
return XPCWrapper::NewResolve(cx, obj, JS_TRUE, wrappedObj, id, flags, objp);
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
static JSBool
|
|
851
|
+
XPC_XOW_Convert(JSContext *cx, JSObject *obj, JSType type, jsval *vp)
|
|
852
|
+
{
|
|
853
|
+
// Don't do any work to convert to object.
|
|
854
|
+
if (type == JSTYPE_OBJECT) {
|
|
855
|
+
*vp = OBJECT_TO_JSVAL(obj);
|
|
856
|
+
return JS_TRUE;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
JSObject *wrappedObj = GetWrappedObject(cx, obj);
|
|
860
|
+
if (!wrappedObj) {
|
|
861
|
+
// Converting the prototype to something.
|
|
862
|
+
|
|
863
|
+
if (type == JSTYPE_STRING || type == JSTYPE_VOID) {
|
|
864
|
+
return XPC_XOW_toString(cx, obj, 0, nsnull, vp);
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
*vp = OBJECT_TO_JSVAL(obj);
|
|
868
|
+
return JS_TRUE;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
872
|
+
if (!ccx.IsValid()) {
|
|
873
|
+
return ThrowException(NS_ERROR_FAILURE, cx);
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
// Note: JSTYPE_VOID and JSTYPE_STRING are equivalent.
|
|
877
|
+
nsresult rv = CanAccessWrapper(cx, wrappedObj);
|
|
878
|
+
if (NS_FAILED(rv) &&
|
|
879
|
+
(rv != NS_ERROR_DOM_PROP_ACCESS_DENIED ||
|
|
880
|
+
(type != JSTYPE_STRING && type != JSTYPE_VOID))) {
|
|
881
|
+
// Ensure that we report some kind of error.
|
|
882
|
+
if (rv == NS_ERROR_DOM_PROP_ACCESS_DENIED) {
|
|
883
|
+
ThrowException(rv, cx);
|
|
884
|
+
}
|
|
885
|
+
return JS_FALSE;
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
if (!STOBJ_GET_CLASS(wrappedObj)->convert(cx, wrappedObj, type, vp)) {
|
|
889
|
+
return JS_FALSE;
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
return NS_SUCCEEDED(rv)
|
|
893
|
+
? WrapSameOriginProp(cx, obj, vp)
|
|
894
|
+
: XPC_XOW_RewrapIfNeeded(cx, obj, vp);
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
static void
|
|
898
|
+
XPC_XOW_Finalize(JSContext *cx, JSObject *obj)
|
|
899
|
+
{
|
|
900
|
+
JSObject *wrappedObj = GetWrappedObject(cx, obj);
|
|
901
|
+
if (!wrappedObj) {
|
|
902
|
+
return;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
// Get our scope.
|
|
906
|
+
jsval scopeVal;
|
|
907
|
+
if (!JS_GetReservedSlot(cx, obj, XPC_XOW_ScopeSlot, &scopeVal)) {
|
|
908
|
+
return;
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
// Now that we have our scope, see if it's going away. If it is,
|
|
912
|
+
// then our work here is going to be done when we destroy the scope
|
|
913
|
+
// entirely. Scope can be null if we're an enumerating XOW.
|
|
914
|
+
XPCWrappedNativeScope *scope = reinterpret_cast<XPCWrappedNativeScope *>
|
|
915
|
+
(JSVAL_TO_PRIVATE(scopeVal));
|
|
916
|
+
if (!scope) {
|
|
917
|
+
return;
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
// Remove ourselves from the map.
|
|
921
|
+
scope->GetWrapperMap()->Remove(wrappedObj);
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
static JSBool
|
|
925
|
+
XPC_XOW_CheckAccess(JSContext *cx, JSObject *obj, jsval prop, JSAccessMode mode,
|
|
926
|
+
jsval *vp)
|
|
927
|
+
{
|
|
928
|
+
// Simply forward checkAccess to our wrapped object. It's already expecting
|
|
929
|
+
// untrusted things to ask it about accesses.
|
|
930
|
+
|
|
931
|
+
uintN junk;
|
|
932
|
+
jsid id;
|
|
933
|
+
return JS_ValueToId(cx, prop, &id) &&
|
|
934
|
+
JS_CheckAccess(cx, GetWrappedObject(cx, obj), id, mode, vp, &junk);
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
static JSBool
|
|
938
|
+
XPC_XOW_Call(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
939
|
+
{
|
|
940
|
+
JSObject *wrappedObj = GetWrappedObject(cx, obj);
|
|
941
|
+
if (!wrappedObj) {
|
|
942
|
+
// Nothing to call.
|
|
943
|
+
return JS_TRUE;
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
947
|
+
if (!ccx.IsValid()) {
|
|
948
|
+
return ThrowException(NS_ERROR_FAILURE, cx);
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
nsresult rv = CanAccessWrapper(cx, wrappedObj);
|
|
952
|
+
if (NS_FAILED(rv)) {
|
|
953
|
+
if (rv == NS_ERROR_DOM_PROP_ACCESS_DENIED) {
|
|
954
|
+
// Can't call.
|
|
955
|
+
return ThrowException(rv, cx);
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
return JS_FALSE;
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
JSObject *callee = JSVAL_TO_OBJECT(argv[-2]);
|
|
962
|
+
NS_ASSERTION(GetWrappedObject(cx, callee), "How'd we get here?");
|
|
963
|
+
callee = GetWrappedObject(cx, callee);
|
|
964
|
+
if (!JS_CallFunctionValue(cx, obj, OBJECT_TO_JSVAL(callee), argc, argv,
|
|
965
|
+
rval)) {
|
|
966
|
+
return JS_FALSE;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
return XPC_XOW_RewrapIfNeeded(cx, callee, rval);
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
static JSBool
|
|
973
|
+
XPC_XOW_Construct(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
|
|
974
|
+
jsval *rval)
|
|
975
|
+
{
|
|
976
|
+
JSObject *realObj = GetWrapper(JSVAL_TO_OBJECT(argv[-2]));
|
|
977
|
+
JSObject *wrappedObj = GetWrappedObject(cx, realObj);
|
|
978
|
+
if (!wrappedObj) {
|
|
979
|
+
// Nothing to construct.
|
|
980
|
+
return JS_TRUE;
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
984
|
+
if (!ccx.IsValid()) {
|
|
985
|
+
return ThrowException(NS_ERROR_FAILURE, cx);
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
nsresult rv = CanAccessWrapper(cx, wrappedObj);
|
|
989
|
+
if (NS_FAILED(rv)) {
|
|
990
|
+
if (rv == NS_ERROR_DOM_PROP_ACCESS_DENIED) {
|
|
991
|
+
// Can't construct.
|
|
992
|
+
return ThrowException(rv, cx);
|
|
993
|
+
}
|
|
994
|
+
return JS_FALSE;
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
if (!JS_CallFunctionValue(cx, obj, OBJECT_TO_JSVAL(wrappedObj), argc, argv,
|
|
998
|
+
rval)) {
|
|
999
|
+
return JS_FALSE;
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
return XPC_XOW_RewrapIfNeeded(cx, wrappedObj, rval);
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
static JSBool
|
|
1006
|
+
XPC_XOW_HasInstance(JSContext *cx, JSObject *obj, jsval v, JSBool *bp)
|
|
1007
|
+
{
|
|
1008
|
+
JSObject *iface = GetWrappedObject(cx, obj);
|
|
1009
|
+
|
|
1010
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
1011
|
+
if (!ccx.IsValid()) {
|
|
1012
|
+
return ThrowException(NS_ERROR_FAILURE, cx);
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
nsresult rv = CanAccessWrapper(cx, iface);
|
|
1016
|
+
if (NS_FAILED(rv)) {
|
|
1017
|
+
if (rv == NS_ERROR_DOM_PROP_ACCESS_DENIED) {
|
|
1018
|
+
// Don't do this test across origins.
|
|
1019
|
+
return ThrowException(rv, cx);
|
|
1020
|
+
}
|
|
1021
|
+
return JS_FALSE;
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
JSClass *clasp = STOBJ_GET_CLASS(iface);
|
|
1025
|
+
|
|
1026
|
+
*bp = JS_FALSE;
|
|
1027
|
+
if (!clasp->hasInstance) {
|
|
1028
|
+
return JS_TRUE;
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
// Prematurely unwrap the left hand side.
|
|
1032
|
+
if (!JSVAL_IS_PRIMITIVE(v)) {
|
|
1033
|
+
JSObject *test = JSVAL_TO_OBJECT(v);
|
|
1034
|
+
|
|
1035
|
+
// GetWrappedObject does an instanceof check.
|
|
1036
|
+
test = GetWrappedObject(cx, test);
|
|
1037
|
+
if (test) {
|
|
1038
|
+
v = OBJECT_TO_JSVAL(test);
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
return clasp->hasInstance(cx, iface, v, bp);
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
static JSBool
|
|
1046
|
+
XPC_XOW_Equality(JSContext *cx, JSObject *obj, jsval v, JSBool *bp)
|
|
1047
|
+
{
|
|
1048
|
+
// Convert both sides to XPCWrappedNative and see if they match.
|
|
1049
|
+
if (JSVAL_IS_PRIMITIVE(v)) {
|
|
1050
|
+
*bp = JS_FALSE;
|
|
1051
|
+
return JS_TRUE;
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
JSObject *test = JSVAL_TO_OBJECT(v);
|
|
1055
|
+
if (STOBJ_GET_CLASS(test) == &sXPC_XOW_JSClass.base) {
|
|
1056
|
+
if (!JS_GetReservedSlot(cx, test, XPCWrapper::sWrappedObjSlot, &v)) {
|
|
1057
|
+
return JS_FALSE;
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
if (JSVAL_IS_PRIMITIVE(v)) {
|
|
1061
|
+
*bp = JS_FALSE;
|
|
1062
|
+
return JS_TRUE;
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
test = JSVAL_TO_OBJECT(v);
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
obj = GetWrappedObject(cx, obj);
|
|
1069
|
+
if (!obj) {
|
|
1070
|
+
return ThrowException(NS_ERROR_ILLEGAL_VALUE, cx);
|
|
1071
|
+
}
|
|
1072
|
+
XPCWrappedNative *other =
|
|
1073
|
+
XPCWrappedNative::GetWrappedNativeOfJSObject(cx, test);
|
|
1074
|
+
if (!other) {
|
|
1075
|
+
*bp = JS_FALSE;
|
|
1076
|
+
return JS_TRUE;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
XPCWrappedNative *me = XPCWrappedNative::GetWrappedNativeOfJSObject(cx, obj);
|
|
1080
|
+
obj = me->GetFlatJSObject();
|
|
1081
|
+
test = other->GetFlatJSObject();
|
|
1082
|
+
return ((JSExtendedClass *)STOBJ_GET_CLASS(obj))->
|
|
1083
|
+
equality(cx, obj, OBJECT_TO_JSVAL(test), bp);
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
static JSObject *
|
|
1087
|
+
XPC_XOW_Iterator(JSContext *cx, JSObject *obj, JSBool keysonly)
|
|
1088
|
+
{
|
|
1089
|
+
JSObject *wrappedObj = GetWrappedObject(cx, obj);
|
|
1090
|
+
if (!wrappedObj) {
|
|
1091
|
+
ThrowException(NS_ERROR_INVALID_ARG, cx);
|
|
1092
|
+
return nsnull;
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1095
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
1096
|
+
if (!ccx.IsValid()) {
|
|
1097
|
+
ThrowException(NS_ERROR_FAILURE, cx);
|
|
1098
|
+
return nsnull;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
nsresult rv = CanAccessWrapper(cx, wrappedObj);
|
|
1102
|
+
if (NS_FAILED(rv)) {
|
|
1103
|
+
if (rv == NS_ERROR_DOM_PROP_ACCESS_DENIED) {
|
|
1104
|
+
// Can't create iterators for foreign objects.
|
|
1105
|
+
ThrowException(rv, cx);
|
|
1106
|
+
return nsnull;
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
ThrowException(NS_ERROR_FAILURE, cx);
|
|
1110
|
+
return nsnull;
|
|
1111
|
+
}
|
|
1112
|
+
|
|
1113
|
+
JSObject *wrapperIter = JS_NewObject(cx, &sXPC_XOW_JSClass.base, nsnull,
|
|
1114
|
+
JS_GetGlobalForObject(cx, obj));
|
|
1115
|
+
if (!wrapperIter) {
|
|
1116
|
+
return nsnull;
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
JSAutoTempValueRooter tvr(cx, OBJECT_TO_JSVAL(wrapperIter));
|
|
1120
|
+
|
|
1121
|
+
// Initialize our XOW.
|
|
1122
|
+
jsval v = OBJECT_TO_JSVAL(wrappedObj);
|
|
1123
|
+
if (!JS_SetReservedSlot(cx, wrapperIter, XPCWrapper::sWrappedObjSlot, v) ||
|
|
1124
|
+
!JS_SetReservedSlot(cx, wrapperIter, XPCWrapper::sFlagsSlot,
|
|
1125
|
+
JSVAL_ZERO) ||
|
|
1126
|
+
!JS_SetReservedSlot(cx, wrapperIter, XPC_XOW_ScopeSlot,
|
|
1127
|
+
PRIVATE_TO_JSVAL(nsnull))) {
|
|
1128
|
+
return nsnull;
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
return XPCWrapper::CreateIteratorObj(cx, wrapperIter, obj, wrappedObj,
|
|
1132
|
+
keysonly);
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
static JSObject *
|
|
1136
|
+
XPC_XOW_WrappedObject(JSContext *cx, JSObject *obj)
|
|
1137
|
+
{
|
|
1138
|
+
return GetWrappedObject(cx, obj);
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
static JSBool
|
|
1142
|
+
XPC_XOW_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
|
|
1143
|
+
jsval *rval)
|
|
1144
|
+
{
|
|
1145
|
+
obj = GetWrapper(obj);
|
|
1146
|
+
if (!obj) {
|
|
1147
|
+
return ThrowException(NS_ERROR_UNEXPECTED, cx);
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
JSObject *wrappedObj = GetWrappedObject(cx, obj);
|
|
1151
|
+
if (!wrappedObj) {
|
|
1152
|
+
// Someone's calling toString on our prototype.
|
|
1153
|
+
NS_NAMED_LITERAL_CSTRING(protoString, "[object XPCCrossOriginWrapper]");
|
|
1154
|
+
JSString *str =
|
|
1155
|
+
JS_NewStringCopyN(cx, protoString.get(), protoString.Length());
|
|
1156
|
+
if (!str) {
|
|
1157
|
+
return JS_FALSE;
|
|
1158
|
+
}
|
|
1159
|
+
*rval = STRING_TO_JSVAL(str);
|
|
1160
|
+
return JS_TRUE;
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
XPCCallContext ccx(JS_CALLER, cx);
|
|
1164
|
+
if (!ccx.IsValid()) {
|
|
1165
|
+
return ThrowException(NS_ERROR_FAILURE, cx);
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
nsresult rv = CanAccessWrapper(cx, wrappedObj);
|
|
1169
|
+
if (rv == NS_ERROR_DOM_PROP_ACCESS_DENIED) {
|
|
1170
|
+
nsIScriptSecurityManager *ssm = XPCWrapper::GetSecurityManager();
|
|
1171
|
+
if (!ssm) {
|
|
1172
|
+
return ThrowException(NS_ERROR_NOT_INITIALIZED, cx);
|
|
1173
|
+
}
|
|
1174
|
+
rv = ssm->CheckPropertyAccess(cx, wrappedObj,
|
|
1175
|
+
STOBJ_GET_CLASS(wrappedObj)->name,
|
|
1176
|
+
GetRTStringByIndex(cx, XPCJSRuntime::IDX_TO_STRING),
|
|
1177
|
+
nsIXPCSecurityManager::ACCESS_GET_PROPERTY);
|
|
1178
|
+
}
|
|
1179
|
+
if (NS_FAILED(rv)) {
|
|
1180
|
+
return JS_FALSE;
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
XPCWrappedNative *wn =
|
|
1184
|
+
XPCWrappedNative::GetWrappedNativeOfJSObject(cx, wrappedObj);
|
|
1185
|
+
return XPCWrapper::NativeToString(cx, wn, argc, argv, rval, JS_FALSE);
|
|
1186
|
+
}
|