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.
Files changed (782) hide show
  1. data/CHANGELOG.rdoc +8 -0
  2. data/Manifest.txt +762 -48
  3. data/README.rdoc +2 -1
  4. data/Rakefile +90 -18
  5. data/ext/spidermonkey/conversions.c +9 -2
  6. data/ext/spidermonkey/ruby_land_proxy.c +1 -1
  7. data/ext/spidermonkey/runtime.h +1 -1
  8. data/ext/tracemonkey/context.cc +125 -0
  9. data/ext/tracemonkey/context.h +19 -0
  10. data/ext/tracemonkey/conversions.cc +365 -0
  11. data/ext/tracemonkey/conversions.h +32 -0
  12. data/ext/tracemonkey/debugger.cc +234 -0
  13. data/ext/tracemonkey/debugger.h +10 -0
  14. data/ext/tracemonkey/extconf.rb +37 -0
  15. data/ext/tracemonkey/extensions.cc +37 -0
  16. data/ext/tracemonkey/extensions.h +12 -0
  17. data/ext/tracemonkey/global.cc +40 -0
  18. data/ext/tracemonkey/global.h +11 -0
  19. data/ext/tracemonkey/idhash.cc +16 -0
  20. data/ext/tracemonkey/idhash.h +8 -0
  21. data/ext/tracemonkey/immutable_node.cc +1199 -0
  22. data/ext/tracemonkey/immutable_node.cc.erb +559 -0
  23. data/ext/tracemonkey/immutable_node.h +22 -0
  24. data/ext/tracemonkey/jroot.h +215 -0
  25. data/ext/tracemonkey/js_land_proxy.cc +620 -0
  26. data/ext/tracemonkey/js_land_proxy.h +20 -0
  27. data/ext/tracemonkey/ruby_land_proxy.cc +618 -0
  28. data/ext/tracemonkey/ruby_land_proxy.h +38 -0
  29. data/ext/tracemonkey/runtime.cc +454 -0
  30. data/ext/tracemonkey/runtime.h +27 -0
  31. data/ext/tracemonkey/split_global.cc +392 -0
  32. data/ext/tracemonkey/split_global.h +11 -0
  33. data/ext/tracemonkey/tracemonkey.cc +23 -0
  34. data/ext/tracemonkey/tracemonkey.h +32 -0
  35. data/lib/johnson.rb +12 -4
  36. data/lib/johnson/error.rb +5 -0
  37. data/lib/johnson/js/prelude.js +16 -1
  38. data/lib/johnson/parser.rb +2 -1
  39. data/lib/johnson/runtime.rb +87 -26
  40. data/lib/johnson/spidermonkey/runtime.rb +7 -16
  41. data/lib/johnson/tracemonkey.rb +13 -0
  42. data/lib/johnson/tracemonkey/context.rb +10 -0
  43. data/lib/johnson/tracemonkey/debugger.rb +67 -0
  44. data/lib/johnson/tracemonkey/immutable_node.rb +282 -0
  45. data/lib/johnson/tracemonkey/js_land_proxy.rb +64 -0
  46. data/lib/johnson/tracemonkey/mutable_tree_visitor.rb +242 -0
  47. data/lib/johnson/tracemonkey/ruby_land_proxy.rb +17 -0
  48. data/lib/johnson/tracemonkey/runtime.rb +80 -0
  49. data/test/{johnson_test.rb → generic/johnson_test.rb} +1 -1
  50. data/test/{parser_test.rb → generic/parser_test.rb} +1 -1
  51. data/test/helper.rb +23 -4
  52. data/test/johnson/{browser_test.rb → generic/browser_test.rb} +1 -1
  53. data/test/johnson/{conversions → generic/conversions}/array_test.rb +1 -1
  54. data/test/johnson/{conversions → generic/conversions}/boolean_test.rb +1 -1
  55. data/test/johnson/{conversions → generic/conversions}/callable_test.rb +1 -1
  56. data/test/johnson/{conversions → generic/conversions}/file_test.rb +1 -1
  57. data/test/johnson/generic/conversions/helper.rb +1 -0
  58. data/test/johnson/{conversions → generic/conversions}/nil_test.rb +1 -1
  59. data/test/johnson/{conversions → generic/conversions}/number_test.rb +1 -1
  60. data/test/johnson/{conversions → generic/conversions}/regexp_test.rb +1 -1
  61. data/test/johnson/{conversions → generic/conversions}/string_test.rb +1 -1
  62. data/test/johnson/{conversions → generic/conversions}/struct_test.rb +1 -1
  63. data/test/johnson/{conversions → generic/conversions}/symbol_test.rb +1 -1
  64. data/test/johnson/{conversions → generic/conversions}/thread_test.rb +1 -1
  65. data/test/johnson/{custom_conversions_test.rb → generic/custom_conversions_test.rb} +1 -1
  66. data/test/johnson/generic/default_test.rb +12 -0
  67. data/test/johnson/{error_test.rb → generic/error_test.rb} +1 -1
  68. data/test/johnson/{extensions_test.rb → generic/extensions_test.rb} +1 -1
  69. data/test/johnson/generic/helper.rb +1 -0
  70. data/test/johnson/{nodes → generic/nodes}/array_literal_test.rb +1 -1
  71. data/test/johnson/{nodes → generic/nodes}/array_node_test.rb +1 -1
  72. data/test/johnson/{nodes → generic/nodes}/binary_node_test.rb +1 -1
  73. data/test/johnson/{nodes → generic/nodes}/bracket_access_test.rb +1 -1
  74. data/test/johnson/{nodes → generic/nodes}/delete_test.rb +1 -1
  75. data/test/johnson/{nodes → generic/nodes}/do_while_test.rb +1 -1
  76. data/test/johnson/{nodes → generic/nodes}/dot_accessor_test.rb +1 -1
  77. data/test/johnson/generic/nodes/export_test.rb +11 -0
  78. data/test/johnson/{nodes → generic/nodes}/for_test.rb +1 -1
  79. data/test/johnson/{nodes → generic/nodes}/function_test.rb +1 -1
  80. data/test/johnson/generic/nodes/helper.rb +1 -0
  81. data/test/johnson/{nodes → generic/nodes}/if_test.rb +16 -6
  82. data/test/johnson/generic/nodes/import_test.rb +15 -0
  83. data/test/johnson/{nodes → generic/nodes}/label_test.rb +1 -1
  84. data/test/johnson/{nodes → generic/nodes}/let_test.rb +1 -1
  85. data/test/johnson/{nodes → generic/nodes}/object_literal_test.rb +1 -1
  86. data/test/johnson/{nodes → generic/nodes}/return_test.rb +1 -1
  87. data/test/johnson/{nodes → generic/nodes}/semi_test.rb +1 -1
  88. data/test/johnson/{nodes → generic/nodes}/switch_test.rb +1 -1
  89. data/test/johnson/{nodes → generic/nodes}/ternary_test.rb +1 -1
  90. data/test/johnson/{nodes → generic/nodes}/throw_test.rb +1 -1
  91. data/test/johnson/{nodes → generic/nodes}/try_node_test.rb +36 -6
  92. data/test/johnson/{nodes → generic/nodes}/typeof_test.rb +1 -1
  93. data/test/johnson/{nodes → generic/nodes}/unary_node_test.rb +1 -1
  94. data/test/johnson/{nodes → generic/nodes}/void_test.rb +1 -1
  95. data/test/johnson/{nodes → generic/nodes}/while_test.rb +1 -1
  96. data/test/johnson/{nodes → generic/nodes}/with_test.rb +1 -1
  97. data/test/johnson/{prelude_test.rb → generic/prelude_test.rb} +1 -1
  98. data/test/johnson/{runtime_test.rb → generic/runtime_test.rb} +3 -6
  99. data/test/johnson/generic/version_test.rb +13 -0
  100. data/test/johnson/{visitors → generic/visitors}/dot_visitor_test.rb +1 -1
  101. data/test/johnson/{visitors → generic/visitors}/enumerating_visitor_test.rb +1 -1
  102. data/test/johnson/generic/visitors/helper.rb +1 -0
  103. data/test/johnson/spidermonkey/js_land_proxy_test.rb +1 -5
  104. data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +11 -7
  105. data/test/johnson/tracemonkey/context_test.rb +21 -0
  106. data/test/johnson/tracemonkey/immutable_node_test.rb +34 -0
  107. data/test/johnson/tracemonkey/js_land_proxy_test.rb +273 -0
  108. data/test/johnson/tracemonkey/ruby_land_proxy_test.rb +274 -0
  109. data/test/johnson/tracemonkey/runtime_test.rb +41 -0
  110. data/test/johnson/tracemonkey/split_global_test.rb +32 -0
  111. data/vendor/spidermonkey/js.pkg +2 -0
  112. data/vendor/tracemonkey/Makefile.in +668 -0
  113. data/vendor/tracemonkey/Makefile.ref +483 -0
  114. data/vendor/tracemonkey/README.html +54 -0
  115. data/vendor/tracemonkey/SpiderMonkey.rsp +11 -0
  116. data/vendor/tracemonkey/Y.js +19 -0
  117. data/vendor/tracemonkey/aclocal.m4 +9 -0
  118. data/vendor/tracemonkey/bench.sh +5 -0
  119. data/vendor/tracemonkey/build/autoconf/acoutput-fast.pl +202 -0
  120. data/vendor/tracemonkey/build/autoconf/altoptions.m4 +154 -0
  121. data/vendor/tracemonkey/build/autoconf/config.guess +1537 -0
  122. data/vendor/tracemonkey/build/autoconf/config.sub +1595 -0
  123. data/vendor/tracemonkey/build/autoconf/install-sh +119 -0
  124. data/vendor/tracemonkey/build/autoconf/make-makefile +315 -0
  125. data/vendor/tracemonkey/build/autoconf/match-dir.sh +101 -0
  126. data/vendor/tracemonkey/build/autoconf/moznbytetype.m4 +136 -0
  127. data/vendor/tracemonkey/build/autoconf/nspr.m4 +82 -0
  128. data/vendor/tracemonkey/build/autoconf/pkg.m4 +59 -0
  129. data/vendor/tracemonkey/build/autoconf/update-makefile.sh +118 -0
  130. data/vendor/tracemonkey/build/cygwin-wrapper +75 -0
  131. data/vendor/tracemonkey/build/hcc +111 -0
  132. data/vendor/tracemonkey/build/hcpp +155 -0
  133. data/vendor/tracemonkey/build/unix/mddepend.pl +165 -0
  134. data/vendor/tracemonkey/build/unix/uniq.pl +63 -0
  135. data/vendor/tracemonkey/build/win32/pgomerge.py +40 -0
  136. data/vendor/tracemonkey/builtins.tbl +91 -0
  137. data/vendor/tracemonkey/call.js +13 -0
  138. data/vendor/tracemonkey/config.mk +206 -0
  139. data/vendor/tracemonkey/config/Makefile.in +106 -0
  140. data/vendor/tracemonkey/config/Moz/Milestone.pm +232 -0
  141. data/vendor/tracemonkey/config/autoconf.mk.in +362 -0
  142. data/vendor/tracemonkey/config/check-sync-dirs.py +103 -0
  143. data/vendor/tracemonkey/config/check-sync-exceptions +7 -0
  144. data/vendor/tracemonkey/config/config.mk +881 -0
  145. data/vendor/tracemonkey/config/fastcwd.pl +66 -0
  146. data/vendor/tracemonkey/config/gcc_hidden.h +2 -0
  147. data/vendor/tracemonkey/config/insure.mk +53 -0
  148. data/vendor/tracemonkey/config/make-system-wrappers.pl +59 -0
  149. data/vendor/tracemonkey/config/milestone.pl +112 -0
  150. data/vendor/tracemonkey/config/milestone.txt +13 -0
  151. data/vendor/tracemonkey/config/mkdepend/Makefile.in +84 -0
  152. data/vendor/tracemonkey/config/mkdepend/cppsetup.c +233 -0
  153. data/vendor/tracemonkey/config/mkdepend/def.h +184 -0
  154. data/vendor/tracemonkey/config/mkdepend/ifparser.c +551 -0
  155. data/vendor/tracemonkey/config/mkdepend/ifparser.h +83 -0
  156. data/vendor/tracemonkey/config/mkdepend/imakemdep.h +733 -0
  157. data/vendor/tracemonkey/config/mkdepend/include.c +337 -0
  158. data/vendor/tracemonkey/config/mkdepend/main.c +860 -0
  159. data/vendor/tracemonkey/config/mkdepend/mkdepend.man +382 -0
  160. data/vendor/tracemonkey/config/mkdepend/parse.c +686 -0
  161. data/vendor/tracemonkey/config/mkdepend/pr.c +124 -0
  162. data/vendor/tracemonkey/config/nfspwd.pl +50 -0
  163. data/vendor/tracemonkey/config/nsinstall.c +481 -0
  164. data/vendor/tracemonkey/config/nsinstall.py +155 -0
  165. data/vendor/tracemonkey/config/pathsub.c +247 -0
  166. data/vendor/tracemonkey/config/pathsub.h +74 -0
  167. data/vendor/tracemonkey/config/preprocessor.pl +671 -0
  168. data/vendor/tracemonkey/config/revdepth-nt.pl +48 -0
  169. data/vendor/tracemonkey/config/revdepth.pl +51 -0
  170. data/vendor/tracemonkey/config/rules.mk +2310 -0
  171. data/vendor/tracemonkey/config/static-checking-config.mk +21 -0
  172. data/vendor/tracemonkey/config/static-checking.js +92 -0
  173. data/vendor/tracemonkey/config/string-format.js +61 -0
  174. data/vendor/tracemonkey/config/system-headers +1035 -0
  175. data/vendor/tracemonkey/config/version.mk +85 -0
  176. data/vendor/tracemonkey/config/version_win.pl +442 -0
  177. data/vendor/tracemonkey/configure +14183 -0
  178. data/vendor/tracemonkey/configure.in +5363 -0
  179. data/vendor/tracemonkey/correct.sh +23 -0
  180. data/vendor/tracemonkey/correct/check-3d-morph.js +55 -0
  181. data/vendor/tracemonkey/correct/check-3d-raytrace.js +445 -0
  182. data/vendor/tracemonkey/correct/check-access-binary-trees.js +52 -0
  183. data/vendor/tracemonkey/correct/check-access-fannkuch.js +66 -0
  184. data/vendor/tracemonkey/correct/check-access-nbody.js +171 -0
  185. data/vendor/tracemonkey/correct/check-access-nsieve.js +40 -0
  186. data/vendor/tracemonkey/correct/check-bitops-3bit-bits-in-byte.js +35 -0
  187. data/vendor/tracemonkey/correct/check-bitops-bits-in-byte.js +24 -0
  188. data/vendor/tracemonkey/correct/check-bitops-bitwise-and.js +29 -0
  189. data/vendor/tracemonkey/correct/check-bitops-nsieve-bits.js +40 -0
  190. data/vendor/tracemonkey/correct/check-controlflow-recursive.js +27 -0
  191. data/vendor/tracemonkey/correct/check-date-format-tofte.js +302 -0
  192. data/vendor/tracemonkey/correct/check-date-format-xparb.js +421 -0
  193. data/vendor/tracemonkey/correct/check-mont.js +119 -0
  194. data/vendor/tracemonkey/dtoa.c +3335 -0
  195. data/vendor/tracemonkey/editline/Makefile.in +55 -0
  196. data/vendor/tracemonkey/editline/Makefile.ref +143 -0
  197. data/vendor/tracemonkey/editline/README +83 -0
  198. data/vendor/tracemonkey/editline/editline.3 +175 -0
  199. data/vendor/tracemonkey/editline/editline.c +1371 -0
  200. data/vendor/tracemonkey/editline/editline.h +135 -0
  201. data/vendor/tracemonkey/editline/sysunix.c +182 -0
  202. data/vendor/tracemonkey/editline/unix.h +82 -0
  203. data/vendor/tracemonkey/if.js +13 -0
  204. data/vendor/tracemonkey/imacro_asm.js.in +396 -0
  205. data/vendor/tracemonkey/imacros.c.out +1034 -0
  206. data/vendor/tracemonkey/imacros.jsasm +770 -0
  207. data/vendor/tracemonkey/javascript-trace.d +73 -0
  208. data/vendor/tracemonkey/jitstats.tbl +55 -0
  209. data/vendor/tracemonkey/js-config.h.in +82 -0
  210. data/vendor/tracemonkey/js-config.in +111 -0
  211. data/vendor/tracemonkey/js.mdp +0 -0
  212. data/vendor/tracemonkey/js.msg +312 -0
  213. data/vendor/tracemonkey/js3240.rc +79 -0
  214. data/vendor/tracemonkey/jsOS240.def +654 -0
  215. data/vendor/tracemonkey/jsapi.cpp +6005 -0
  216. data/vendor/tracemonkey/jsapi.h +2727 -0
  217. data/vendor/tracemonkey/jsarena.cpp +450 -0
  218. data/vendor/tracemonkey/jsarena.h +318 -0
  219. data/vendor/tracemonkey/jsarray.cpp +3664 -0
  220. data/vendor/tracemonkey/jsarray.h +238 -0
  221. data/vendor/tracemonkey/jsatom.cpp +1244 -0
  222. data/vendor/tracemonkey/jsatom.h +493 -0
  223. data/vendor/tracemonkey/jsbit.h +249 -0
  224. data/vendor/tracemonkey/jsbool.cpp +184 -0
  225. data/vendor/tracemonkey/jsbool.h +88 -0
  226. data/vendor/tracemonkey/jsbuiltins.cpp +415 -0
  227. data/vendor/tracemonkey/jsbuiltins.h +456 -0
  228. data/vendor/tracemonkey/jsclist.h +139 -0
  229. data/vendor/tracemonkey/jscntxt.cpp +1816 -0
  230. data/vendor/tracemonkey/jscntxt.h +1541 -0
  231. data/vendor/tracemonkey/jscompat.h +57 -0
  232. data/vendor/tracemonkey/jsconfig.mk +181 -0
  233. data/vendor/tracemonkey/jscpucfg.cpp +194 -0
  234. data/vendor/tracemonkey/jscpucfg.h +91 -0
  235. data/vendor/tracemonkey/jsdate.cpp +2465 -0
  236. data/vendor/tracemonkey/jsdate.h +129 -0
  237. data/vendor/tracemonkey/jsdbgapi.cpp +2017 -0
  238. data/vendor/tracemonkey/jsdbgapi.h +500 -0
  239. data/vendor/tracemonkey/jsdhash.cpp +876 -0
  240. data/vendor/tracemonkey/jsdhash.h +588 -0
  241. data/vendor/tracemonkey/jsdtoa.cpp +572 -0
  242. data/vendor/tracemonkey/jsdtoa.h +131 -0
  243. data/vendor/tracemonkey/jsdtracef.c +318 -0
  244. data/vendor/tracemonkey/jsdtracef.h +81 -0
  245. data/vendor/tracemonkey/jsemit.cpp +7292 -0
  246. data/vendor/tracemonkey/jsemit.h +802 -0
  247. data/vendor/tracemonkey/jsexn.cpp +1337 -0
  248. data/vendor/tracemonkey/jsexn.h +96 -0
  249. data/vendor/tracemonkey/jsfile.cpp +2747 -0
  250. data/vendor/tracemonkey/jsfile.h +56 -0
  251. data/vendor/tracemonkey/jsfile.msg +90 -0
  252. data/vendor/tracemonkey/jsfun.cpp +3089 -0
  253. data/vendor/tracemonkey/jsfun.h +366 -0
  254. data/vendor/tracemonkey/jsgc.cpp +3816 -0
  255. data/vendor/tracemonkey/jsgc.h +429 -0
  256. data/vendor/tracemonkey/jshash.cpp +477 -0
  257. data/vendor/tracemonkey/jshash.h +151 -0
  258. data/vendor/tracemonkey/jsify.pl +483 -0
  259. data/vendor/tracemonkey/jsinterp.cpp +7441 -0
  260. data/vendor/tracemonkey/jsinterp.h +666 -0
  261. data/vendor/tracemonkey/jsinvoke.cpp +42 -0
  262. data/vendor/tracemonkey/jsiter.cpp +1040 -0
  263. data/vendor/tracemonkey/jsiter.h +140 -0
  264. data/vendor/tracemonkey/jskeyword.tbl +124 -0
  265. data/vendor/tracemonkey/jskwgen.cpp +460 -0
  266. data/vendor/tracemonkey/jslibmath.h +69 -0
  267. data/vendor/tracemonkey/jslock.cpp +1512 -0
  268. data/vendor/tracemonkey/jslock.h +325 -0
  269. data/vendor/tracemonkey/jslocko.asm +60 -0
  270. data/vendor/tracemonkey/jslog2.cpp +111 -0
  271. data/vendor/tracemonkey/jslong.h +167 -0
  272. data/vendor/tracemonkey/jsmath.cpp +806 -0
  273. data/vendor/tracemonkey/jsmath.h +63 -0
  274. data/vendor/tracemonkey/jsnum.cpp +1374 -0
  275. data/vendor/tracemonkey/jsnum.h +280 -0
  276. data/vendor/tracemonkey/jsobj.cpp +6165 -0
  277. data/vendor/tracemonkey/jsobj.h +870 -0
  278. data/vendor/tracemonkey/json.cpp +1338 -0
  279. data/vendor/tracemonkey/json.h +108 -0
  280. data/vendor/tracemonkey/jsopcode.cpp +5484 -0
  281. data/vendor/tracemonkey/jsopcode.h +434 -0
  282. data/vendor/tracemonkey/jsopcode.tbl +591 -0
  283. data/vendor/tracemonkey/jsoplengen.cpp +121 -0
  284. data/vendor/tracemonkey/jsotypes.h +202 -0
  285. data/vendor/tracemonkey/jsparse.cpp +9257 -0
  286. data/vendor/tracemonkey/jsparse.h +900 -0
  287. data/vendor/tracemonkey/jsprf.cpp +1262 -0
  288. data/vendor/tracemonkey/jsprf.h +150 -0
  289. data/vendor/tracemonkey/jsproto.tbl +117 -0
  290. data/vendor/tracemonkey/jsprvtd.h +366 -0
  291. data/vendor/tracemonkey/jspubtd.h +585 -0
  292. data/vendor/tracemonkey/jsregexp.cpp +5051 -0
  293. data/vendor/tracemonkey/jsregexp.h +199 -0
  294. data/vendor/tracemonkey/jsreops.tbl +145 -0
  295. data/vendor/tracemonkey/jsscan.cpp +2040 -0
  296. data/vendor/tracemonkey/jsscan.h +467 -0
  297. data/vendor/tracemonkey/jsscope.cpp +1966 -0
  298. data/vendor/tracemonkey/jsscope.h +487 -0
  299. data/vendor/tracemonkey/jsscript.cpp +1932 -0
  300. data/vendor/tracemonkey/jsscript.h +345 -0
  301. data/vendor/tracemonkey/jsshell.msg +54 -0
  302. data/vendor/tracemonkey/jsstack.js +167 -0
  303. data/vendor/tracemonkey/jsstaticcheck.h +69 -0
  304. data/vendor/tracemonkey/jsstddef.h +87 -0
  305. data/vendor/tracemonkey/jsstdint.h +96 -0
  306. data/vendor/tracemonkey/jsstr.cpp +5277 -0
  307. data/vendor/tracemonkey/jsstr.h +702 -0
  308. data/vendor/tracemonkey/jstracer.cpp +10991 -0
  309. data/vendor/tracemonkey/jstracer.h +794 -0
  310. data/vendor/tracemonkey/jstypes.h +481 -0
  311. data/vendor/tracemonkey/jsutil.cpp +361 -0
  312. data/vendor/tracemonkey/jsutil.h +178 -0
  313. data/vendor/tracemonkey/jsversion.h +243 -0
  314. data/vendor/tracemonkey/jswince.asm +44 -0
  315. data/vendor/tracemonkey/jsxdrapi.cpp +800 -0
  316. data/vendor/tracemonkey/jsxdrapi.h +220 -0
  317. data/vendor/tracemonkey/jsxml.cpp +8327 -0
  318. data/vendor/tracemonkey/jsxml.h +305 -0
  319. data/vendor/tracemonkey/liveconnect/LiveConnect.dsp +157 -0
  320. data/vendor/tracemonkey/liveconnect/LiveConnectShell.dsp +120 -0
  321. data/vendor/tracemonkey/liveconnect/LiveConnectShell.dsw +44 -0
  322. data/vendor/tracemonkey/liveconnect/Makefile.in +105 -0
  323. data/vendor/tracemonkey/liveconnect/Makefile.ref +169 -0
  324. data/vendor/tracemonkey/liveconnect/README.html +712 -0
  325. data/vendor/tracemonkey/liveconnect/_jni/netscape_javascript_JSException.h +14 -0
  326. data/vendor/tracemonkey/liveconnect/_jni/netscape_javascript_JSObject.h +155 -0
  327. data/vendor/tracemonkey/liveconnect/classes/Makefile.in +89 -0
  328. data/vendor/tracemonkey/liveconnect/classes/Makefile.ref +57 -0
  329. data/vendor/tracemonkey/liveconnect/classes/netscape/Makefile.ref +47 -0
  330. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSException.java +140 -0
  331. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSObject.java +183 -0
  332. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSProxy.java +58 -0
  333. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSRunnable.java +70 -0
  334. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSUtil.java +59 -0
  335. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/Makefile.ref +53 -0
  336. data/vendor/tracemonkey/liveconnect/config/AIX4.1.mk +45 -0
  337. data/vendor/tracemonkey/liveconnect/config/AIX4.2.mk +45 -0
  338. data/vendor/tracemonkey/liveconnect/config/AIX4.3.mk +50 -0
  339. data/vendor/tracemonkey/liveconnect/config/HP-UXB.10.10.mk +43 -0
  340. data/vendor/tracemonkey/liveconnect/config/HP-UXB.10.20.mk +43 -0
  341. data/vendor/tracemonkey/liveconnect/config/HP-UXB.11.00.mk +43 -0
  342. data/vendor/tracemonkey/liveconnect/config/IRIX6.2.mk +43 -0
  343. data/vendor/tracemonkey/liveconnect/config/IRIX6.3.mk +43 -0
  344. data/vendor/tracemonkey/liveconnect/config/IRIX6.5.mk +43 -0
  345. data/vendor/tracemonkey/liveconnect/config/Linux_All.mk +73 -0
  346. data/vendor/tracemonkey/liveconnect/config/OSF1V4.0.mk +65 -0
  347. data/vendor/tracemonkey/liveconnect/config/OSF1V5.0.mk +62 -0
  348. data/vendor/tracemonkey/liveconnect/config/SunOS5.5.1.mk +55 -0
  349. data/vendor/tracemonkey/liveconnect/config/SunOS5.6.mk +39 -0
  350. data/vendor/tracemonkey/liveconnect/config/SunOS5.7.mk +39 -0
  351. data/vendor/tracemonkey/liveconnect/config/SunOS5.8.mk +39 -0
  352. data/vendor/tracemonkey/liveconnect/config/WINNT4.0.mk +53 -0
  353. data/vendor/tracemonkey/liveconnect/jsj.c +886 -0
  354. data/vendor/tracemonkey/liveconnect/jsj.msg +98 -0
  355. data/vendor/tracemonkey/liveconnect/jsj_JSObject.c +1377 -0
  356. data/vendor/tracemonkey/liveconnect/jsj_JavaArray.c +474 -0
  357. data/vendor/tracemonkey/liveconnect/jsj_JavaClass.c +737 -0
  358. data/vendor/tracemonkey/liveconnect/jsj_JavaMember.c +191 -0
  359. data/vendor/tracemonkey/liveconnect/jsj_JavaObject.c +1079 -0
  360. data/vendor/tracemonkey/liveconnect/jsj_JavaPackage.c +569 -0
  361. data/vendor/tracemonkey/liveconnect/jsj_array.c +207 -0
  362. data/vendor/tracemonkey/liveconnect/jsj_class.c +770 -0
  363. data/vendor/tracemonkey/liveconnect/jsj_convert.c +902 -0
  364. data/vendor/tracemonkey/liveconnect/jsj_field.c +421 -0
  365. data/vendor/tracemonkey/liveconnect/jsj_hash.c +488 -0
  366. data/vendor/tracemonkey/liveconnect/jsj_hash.h +161 -0
  367. data/vendor/tracemonkey/liveconnect/jsj_method.c +1825 -0
  368. data/vendor/tracemonkey/liveconnect/jsj_nodl.c +1 -0
  369. data/vendor/tracemonkey/liveconnect/jsj_private.h +677 -0
  370. data/vendor/tracemonkey/liveconnect/jsj_simpleapi.c +219 -0
  371. data/vendor/tracemonkey/liveconnect/jsj_utils.c +513 -0
  372. data/vendor/tracemonkey/liveconnect/jsjava.h +316 -0
  373. data/vendor/tracemonkey/liveconnect/netscape_javascript_JSObject.h +155 -0
  374. data/vendor/tracemonkey/liveconnect/nsCLiveconnect.cpp +785 -0
  375. data/vendor/tracemonkey/liveconnect/nsCLiveconnect.h +197 -0
  376. data/vendor/tracemonkey/liveconnect/nsCLiveconnectFactory.cpp +118 -0
  377. data/vendor/tracemonkey/liveconnect/nsCLiveconnectFactory.h +76 -0
  378. data/vendor/tracemonkey/liveconnect/nsILiveconnect.h +197 -0
  379. data/vendor/tracemonkey/liveconnect/nsISecureLiveconnect.h +94 -0
  380. data/vendor/tracemonkey/liveconnect/nsISecurityContext.h +136 -0
  381. data/vendor/tracemonkey/lock_SunOS.s +119 -0
  382. data/vendor/tracemonkey/mandelbrot-results.js +3 -0
  383. data/vendor/tracemonkey/math-partial-sums.js +32 -0
  384. data/vendor/tracemonkey/math-trace-tests.js +507 -0
  385. data/vendor/tracemonkey/md5.js +289 -0
  386. data/vendor/tracemonkey/nanojit/Assembler.cpp +1984 -0
  387. data/vendor/tracemonkey/nanojit/Assembler.h +375 -0
  388. data/vendor/tracemonkey/nanojit/Fragmento.cpp +651 -0
  389. data/vendor/tracemonkey/nanojit/Fragmento.h +237 -0
  390. data/vendor/tracemonkey/nanojit/LIR.cpp +2314 -0
  391. data/vendor/tracemonkey/nanojit/LIR.h +879 -0
  392. data/vendor/tracemonkey/nanojit/LIRopcode.tbl +252 -0
  393. data/vendor/tracemonkey/nanojit/Native.h +127 -0
  394. data/vendor/tracemonkey/nanojit/NativeARM.cpp +1742 -0
  395. data/vendor/tracemonkey/nanojit/NativeARM.h +844 -0
  396. data/vendor/tracemonkey/nanojit/NativeSparc.cpp +1130 -0
  397. data/vendor/tracemonkey/nanojit/NativeSparc.h +948 -0
  398. data/vendor/tracemonkey/nanojit/NativeThumb.cpp +1322 -0
  399. data/vendor/tracemonkey/nanojit/NativeThumb.h +525 -0
  400. data/vendor/tracemonkey/nanojit/Nativei386.cpp +1748 -0
  401. data/vendor/tracemonkey/nanojit/Nativei386.h +857 -0
  402. data/vendor/tracemonkey/nanojit/RegAlloc.cpp +183 -0
  403. data/vendor/tracemonkey/nanojit/RegAlloc.h +95 -0
  404. data/vendor/tracemonkey/nanojit/TraceTreeDrawer.cpp +306 -0
  405. data/vendor/tracemonkey/nanojit/TraceTreeDrawer.h +88 -0
  406. data/vendor/tracemonkey/nanojit/avmplus.cpp +56 -0
  407. data/vendor/tracemonkey/nanojit/avmplus.h +1016 -0
  408. data/vendor/tracemonkey/nanojit/nanojit.h +253 -0
  409. data/vendor/tracemonkey/perfect.js +39 -0
  410. data/vendor/tracemonkey/plify_jsdhash.sed +35 -0
  411. data/vendor/tracemonkey/prmjtime.cpp +869 -0
  412. data/vendor/tracemonkey/prmjtime.h +103 -0
  413. data/vendor/tracemonkey/ref-config/AIX4.1.mk +65 -0
  414. data/vendor/tracemonkey/ref-config/AIX4.2.mk +64 -0
  415. data/vendor/tracemonkey/ref-config/AIX4.3.mk +65 -0
  416. data/vendor/tracemonkey/ref-config/Darwin.mk +85 -0
  417. data/vendor/tracemonkey/ref-config/Darwin1.3.mk +81 -0
  418. data/vendor/tracemonkey/ref-config/Darwin1.4.mk +41 -0
  419. data/vendor/tracemonkey/ref-config/Darwin5.2.mk +81 -0
  420. data/vendor/tracemonkey/ref-config/Darwin5.3.mk +81 -0
  421. data/vendor/tracemonkey/ref-config/Darwin64.mk +72 -0
  422. data/vendor/tracemonkey/ref-config/HP-UXB.10.10.mk +77 -0
  423. data/vendor/tracemonkey/ref-config/HP-UXB.10.20.mk +77 -0
  424. data/vendor/tracemonkey/ref-config/HP-UXB.11.00.mk +80 -0
  425. data/vendor/tracemonkey/ref-config/IRIX.mk +87 -0
  426. data/vendor/tracemonkey/ref-config/IRIX5.3.mk +44 -0
  427. data/vendor/tracemonkey/ref-config/IRIX6.1.mk +44 -0
  428. data/vendor/tracemonkey/ref-config/IRIX6.2.mk +44 -0
  429. data/vendor/tracemonkey/ref-config/IRIX6.3.mk +44 -0
  430. data/vendor/tracemonkey/ref-config/IRIX6.5.mk +44 -0
  431. data/vendor/tracemonkey/ref-config/Linux_All.mk +105 -0
  432. data/vendor/tracemonkey/ref-config/Mac_OS10.0.mk +82 -0
  433. data/vendor/tracemonkey/ref-config/OSF1V4.0.mk +72 -0
  434. data/vendor/tracemonkey/ref-config/OSF1V5.0.mk +69 -0
  435. data/vendor/tracemonkey/ref-config/SunOS4.1.4.mk +101 -0
  436. data/vendor/tracemonkey/ref-config/SunOS5.10.mk +50 -0
  437. data/vendor/tracemonkey/ref-config/SunOS5.3.mk +91 -0
  438. data/vendor/tracemonkey/ref-config/SunOS5.4.mk +92 -0
  439. data/vendor/tracemonkey/ref-config/SunOS5.5.1.mk +44 -0
  440. data/vendor/tracemonkey/ref-config/SunOS5.5.mk +87 -0
  441. data/vendor/tracemonkey/ref-config/SunOS5.6.mk +89 -0
  442. data/vendor/tracemonkey/ref-config/SunOS5.7.mk +44 -0
  443. data/vendor/tracemonkey/ref-config/SunOS5.8.mk +44 -0
  444. data/vendor/tracemonkey/ref-config/SunOS5.9.mk +44 -0
  445. data/vendor/tracemonkey/ref-config/WINNT4.0.mk +118 -0
  446. data/vendor/tracemonkey/ref-config/WINNT5.0.mk +118 -0
  447. data/vendor/tracemonkey/ref-config/WINNT5.1.mk +118 -0
  448. data/vendor/tracemonkey/ref-config/WINNT5.2.mk +118 -0
  449. data/vendor/tracemonkey/ref-config/WINNT6.0.mk +118 -0
  450. data/vendor/tracemonkey/ref-config/dgux.mk +64 -0
  451. data/vendor/tracemonkey/resource.h +15 -0
  452. data/vendor/tracemonkey/rules.mk +206 -0
  453. data/vendor/tracemonkey/shell/Makefile.in +72 -0
  454. data/vendor/tracemonkey/shell/js.cpp +4719 -0
  455. data/vendor/tracemonkey/t/3d-cube.js +337 -0
  456. data/vendor/tracemonkey/t/3d-morph.js +54 -0
  457. data/vendor/tracemonkey/t/3d-raytrace.js +441 -0
  458. data/vendor/tracemonkey/t/access-binary-trees.js +50 -0
  459. data/vendor/tracemonkey/t/access-fannkuch.js +66 -0
  460. data/vendor/tracemonkey/t/access-nbody.js +169 -0
  461. data/vendor/tracemonkey/t/access-nsieve.js +38 -0
  462. data/vendor/tracemonkey/t/bitops-3bit-bits-in-byte.js +32 -0
  463. data/vendor/tracemonkey/t/bitops-bits-in-byte.js +21 -0
  464. data/vendor/tracemonkey/t/bitops-bitwise-and.js +28 -0
  465. data/vendor/tracemonkey/t/bitops-nsieve-bits.js +32 -0
  466. data/vendor/tracemonkey/t/controlflow-recursive.js +25 -0
  467. data/vendor/tracemonkey/t/crypto-aes.js +422 -0
  468. data/vendor/tracemonkey/t/crypto-md5.js +286 -0
  469. data/vendor/tracemonkey/t/crypto-sha1.js +224 -0
  470. data/vendor/tracemonkey/t/date-format-tofte.js +299 -0
  471. data/vendor/tracemonkey/t/date-format-xparb.js +417 -0
  472. data/vendor/tracemonkey/t/math-cordic.js +95 -0
  473. data/vendor/tracemonkey/t/math-partial-sums.js +33 -0
  474. data/vendor/tracemonkey/t/math-spectral-norm.js +51 -0
  475. data/vendor/tracemonkey/t/regexp-dna.js +1712 -0
  476. data/vendor/tracemonkey/t/string-base64.js +135 -0
  477. data/vendor/tracemonkey/t/string-fasta.js +85 -0
  478. data/vendor/tracemonkey/t/string-tagcloud.js +265 -0
  479. data/vendor/tracemonkey/t/string-unpack-code.js +68 -0
  480. data/vendor/tracemonkey/t/string-validate-input.js +89 -0
  481. data/vendor/tracemonkey/time.sh +13 -0
  482. data/vendor/tracemonkey/trace-test.js +5564 -0
  483. data/vendor/tracemonkey/v8/base.js +187 -0
  484. data/vendor/tracemonkey/v8/crypto.js +1689 -0
  485. data/vendor/tracemonkey/v8/deltablue.js +880 -0
  486. data/vendor/tracemonkey/v8/earley-boyer.js +4682 -0
  487. data/vendor/tracemonkey/v8/raytrace.js +3418 -0
  488. data/vendor/tracemonkey/v8/richards.js +539 -0
  489. data/vendor/tracemonkey/v8/run-crypto.js +44 -0
  490. data/vendor/tracemonkey/v8/run-deltablue.js +44 -0
  491. data/vendor/tracemonkey/v8/run-earley-boyer.js +44 -0
  492. data/vendor/tracemonkey/v8/run-raytrace.js +44 -0
  493. data/vendor/tracemonkey/v8/run-richards.js +44 -0
  494. data/vendor/tracemonkey/v8/run.js +49 -0
  495. data/vendor/tracemonkey/vprof/readme.txt +93 -0
  496. data/vendor/tracemonkey/vprof/vprof.cpp +360 -0
  497. data/vendor/tracemonkey/vprof/vprof.h +245 -0
  498. data/vendor/tracemonkey/xpconnect/Makefile.in +67 -0
  499. data/vendor/tracemonkey/xpconnect/crashtests/117307-1.html +20 -0
  500. data/vendor/tracemonkey/xpconnect/crashtests/193710.html +11 -0
  501. data/vendor/tracemonkey/xpconnect/crashtests/290162-1.html +5 -0
  502. data/vendor/tracemonkey/xpconnect/crashtests/326615-1.html +16 -0
  503. data/vendor/tracemonkey/xpconnect/crashtests/328553-1.html +13 -0
  504. data/vendor/tracemonkey/xpconnect/crashtests/346258-1.html +12 -0
  505. data/vendor/tracemonkey/xpconnect/crashtests/346512-1-frame1.xhtml +16 -0
  506. data/vendor/tracemonkey/xpconnect/crashtests/346512-1-frame2.xhtml +15 -0
  507. data/vendor/tracemonkey/xpconnect/crashtests/346512-1.xhtml +30 -0
  508. data/vendor/tracemonkey/xpconnect/crashtests/382133-1.html +3 -0
  509. data/vendor/tracemonkey/xpconnect/crashtests/386680-1.html +22 -0
  510. data/vendor/tracemonkey/xpconnect/crashtests/394810-1.html +4 -0
  511. data/vendor/tracemonkey/xpconnect/crashtests/400349-1.html +20 -0
  512. data/vendor/tracemonkey/xpconnect/crashtests/403356-1.html +13 -0
  513. data/vendor/tracemonkey/xpconnect/crashtests/418139-1.svg +22 -0
  514. data/vendor/tracemonkey/xpconnect/crashtests/420513-1.html +11 -0
  515. data/vendor/tracemonkey/xpconnect/crashtests/453935-1.html +37 -0
  516. data/vendor/tracemonkey/xpconnect/crashtests/462926.html +12 -0
  517. data/vendor/tracemonkey/xpconnect/crashtests/468552-1.html +18 -0
  518. data/vendor/tracemonkey/xpconnect/crashtests/471366-1.html +12 -0
  519. data/vendor/tracemonkey/xpconnect/crashtests/475185-1.html +13 -0
  520. data/vendor/tracemonkey/xpconnect/crashtests/475291-1.html +14 -0
  521. data/vendor/tracemonkey/xpconnect/crashtests/503286-1.html +23 -0
  522. data/vendor/tracemonkey/xpconnect/crashtests/crashtests.list +21 -0
  523. data/vendor/tracemonkey/xpconnect/idl/Makefile.in +78 -0
  524. data/vendor/tracemonkey/xpconnect/idl/XPCIDispatch.idl +51 -0
  525. data/vendor/tracemonkey/xpconnect/idl/mozIJSSubScriptLoader.idl +64 -0
  526. data/vendor/tracemonkey/xpconnect/idl/nsIActiveXSecurityPolicy.idl +67 -0
  527. data/vendor/tracemonkey/xpconnect/idl/nsIDispatchSupport.idl +119 -0
  528. data/vendor/tracemonkey/xpconnect/idl/nsIJSContextStack.idl +85 -0
  529. data/vendor/tracemonkey/xpconnect/idl/nsIJSRuntimeService.idl +51 -0
  530. data/vendor/tracemonkey/xpconnect/idl/nsIScriptError.idl +102 -0
  531. data/vendor/tracemonkey/xpconnect/idl/nsIScriptableInterfaces.idl +67 -0
  532. data/vendor/tracemonkey/xpconnect/idl/nsIXPCScriptNotify.idl +66 -0
  533. data/vendor/tracemonkey/xpconnect/idl/nsIXPCScriptable.idl +183 -0
  534. data/vendor/tracemonkey/xpconnect/idl/nsIXPCSecurityManager.idl +114 -0
  535. data/vendor/tracemonkey/xpconnect/idl/nsIXPConnect.idl +819 -0
  536. data/vendor/tracemonkey/xpconnect/idl/xpcIJSModuleLoader.idl +95 -0
  537. data/vendor/tracemonkey/xpconnect/idl/xpcIJSWeakReference.idl +49 -0
  538. data/vendor/tracemonkey/xpconnect/idl/xpccomponents.idl +254 -0
  539. data/vendor/tracemonkey/xpconnect/idl/xpcexception.idl +66 -0
  540. data/vendor/tracemonkey/xpconnect/idl/xpcjsid.idl +83 -0
  541. data/vendor/tracemonkey/xpconnect/loader/ISO8601DateUtils.jsm +176 -0
  542. data/vendor/tracemonkey/xpconnect/loader/Makefile.in +63 -0
  543. data/vendor/tracemonkey/xpconnect/loader/XPCOMUtils.jsm +267 -0
  544. data/vendor/tracemonkey/xpconnect/loader/mozJSComponentLoader.cpp +1717 -0
  545. data/vendor/tracemonkey/xpconnect/loader/mozJSComponentLoader.h +172 -0
  546. data/vendor/tracemonkey/xpconnect/loader/mozJSLoaderConstructors.h +101 -0
  547. data/vendor/tracemonkey/xpconnect/loader/mozJSSubScriptLoader.cpp +360 -0
  548. data/vendor/tracemonkey/xpconnect/loader/mozJSSubScriptLoader.h +66 -0
  549. data/vendor/tracemonkey/xpconnect/public/Makefile.in +54 -0
  550. data/vendor/tracemonkey/xpconnect/public/nsAXPCNativeCallContext.h +89 -0
  551. data/vendor/tracemonkey/xpconnect/public/nsAutoJSValHolder.h +168 -0
  552. data/vendor/tracemonkey/xpconnect/public/xpc_map_end.h +327 -0
  553. data/vendor/tracemonkey/xpconnect/sample/Makefile.in +71 -0
  554. data/vendor/tracemonkey/xpconnect/sample/README +39 -0
  555. data/vendor/tracemonkey/xpconnect/sample/xpcsample1.cpp +337 -0
  556. data/vendor/tracemonkey/xpconnect/sample/xpcsample1.idl +82 -0
  557. data/vendor/tracemonkey/xpconnect/sample/xpcsample1.js +21 -0
  558. data/vendor/tracemonkey/xpconnect/shell/Makefile.in +106 -0
  559. data/vendor/tracemonkey/xpconnect/shell/jsshell.msg +50 -0
  560. data/vendor/tracemonkey/xpconnect/shell/xpcshell.cpp +1817 -0
  561. data/vendor/tracemonkey/xpconnect/shell/xpcshellMacUtils.h +43 -0
  562. data/vendor/tracemonkey/xpconnect/shell/xpcshellMacUtils.mm +54 -0
  563. data/vendor/tracemonkey/xpconnect/src/Makefile.in +228 -0
  564. data/vendor/tracemonkey/xpconnect/src/README +3 -0
  565. data/vendor/tracemonkey/xpconnect/src/XPCCrossOriginWrapper.cpp +1186 -0
  566. data/vendor/tracemonkey/xpconnect/src/XPCDispConvert.cpp +593 -0
  567. data/vendor/tracemonkey/xpconnect/src/XPCDispInlines.h +667 -0
  568. data/vendor/tracemonkey/xpconnect/src/XPCDispInterface.cpp +383 -0
  569. data/vendor/tracemonkey/xpconnect/src/XPCDispObject.cpp +516 -0
  570. data/vendor/tracemonkey/xpconnect/src/XPCDispParamPropJSClass.cpp +223 -0
  571. data/vendor/tracemonkey/xpconnect/src/XPCDispParams.cpp +103 -0
  572. data/vendor/tracemonkey/xpconnect/src/XPCDispPrivate.h +1401 -0
  573. data/vendor/tracemonkey/xpconnect/src/XPCDispTearOff.cpp +547 -0
  574. data/vendor/tracemonkey/xpconnect/src/XPCDispTypeInfo.cpp +471 -0
  575. data/vendor/tracemonkey/xpconnect/src/XPCIDispatchClassInfo.cpp +139 -0
  576. data/vendor/tracemonkey/xpconnect/src/XPCIDispatchExtension.cpp +362 -0
  577. data/vendor/tracemonkey/xpconnect/src/XPCNativeWrapper.cpp +1350 -0
  578. data/vendor/tracemonkey/xpconnect/src/XPCNativeWrapper.h +88 -0
  579. data/vendor/tracemonkey/xpconnect/src/XPCSafeJSObjectWrapper.cpp +1148 -0
  580. data/vendor/tracemonkey/xpconnect/src/XPCSystemOnlyWrapper.cpp +718 -0
  581. data/vendor/tracemonkey/xpconnect/src/XPCWrapper.cpp +850 -0
  582. data/vendor/tracemonkey/xpconnect/src/XPCWrapper.h +394 -0
  583. data/vendor/tracemonkey/xpconnect/src/dom_quickstubs.qsconf +568 -0
  584. data/vendor/tracemonkey/xpconnect/src/nsDispatchSupport.cpp +348 -0
  585. data/vendor/tracemonkey/xpconnect/src/nsScriptError.cpp +201 -0
  586. data/vendor/tracemonkey/xpconnect/src/nsXPConnect.cpp +2609 -0
  587. data/vendor/tracemonkey/xpconnect/src/qsgen.py +1487 -0
  588. data/vendor/tracemonkey/xpconnect/src/xpc.msg +217 -0
  589. data/vendor/tracemonkey/xpconnect/src/xpcJSWeakReference.cpp +148 -0
  590. data/vendor/tracemonkey/xpconnect/src/xpcJSWeakReference.h +56 -0
  591. data/vendor/tracemonkey/xpconnect/src/xpccallcontext.cpp +579 -0
  592. data/vendor/tracemonkey/xpconnect/src/xpccomponents.cpp +4144 -0
  593. data/vendor/tracemonkey/xpconnect/src/xpccontext.cpp +115 -0
  594. data/vendor/tracemonkey/xpconnect/src/xpcconvert.cpp +2298 -0
  595. data/vendor/tracemonkey/xpconnect/src/xpcdebug.cpp +481 -0
  596. data/vendor/tracemonkey/xpconnect/src/xpcexception.cpp +502 -0
  597. data/vendor/tracemonkey/xpconnect/src/xpcforwards.h +114 -0
  598. data/vendor/tracemonkey/xpconnect/src/xpcinlines.h +772 -0
  599. data/vendor/tracemonkey/xpconnect/src/xpcjsid.cpp +1025 -0
  600. data/vendor/tracemonkey/xpconnect/src/xpcjsruntime.cpp +1342 -0
  601. data/vendor/tracemonkey/xpconnect/src/xpclog.cpp +128 -0
  602. data/vendor/tracemonkey/xpconnect/src/xpclog.h +101 -0
  603. data/vendor/tracemonkey/xpconnect/src/xpcmaps.cpp +761 -0
  604. data/vendor/tracemonkey/xpconnect/src/xpcmaps.h +713 -0
  605. data/vendor/tracemonkey/xpconnect/src/xpcmodule.cpp +136 -0
  606. data/vendor/tracemonkey/xpconnect/src/xpcprivate.h +4138 -0
  607. data/vendor/tracemonkey/xpconnect/src/xpcquickstubs.cpp +1128 -0
  608. data/vendor/tracemonkey/xpconnect/src/xpcquickstubs.h +480 -0
  609. data/vendor/tracemonkey/xpconnect/src/xpcruntimesvc.cpp +179 -0
  610. data/vendor/tracemonkey/xpconnect/src/xpcstack.cpp +342 -0
  611. data/vendor/tracemonkey/xpconnect/src/xpcstring.cpp +139 -0
  612. data/vendor/tracemonkey/xpconnect/src/xpcthreadcontext.cpp +599 -0
  613. data/vendor/tracemonkey/xpconnect/src/xpcthrower.cpp +399 -0
  614. data/vendor/tracemonkey/xpconnect/src/xpcvariant.cpp +850 -0
  615. data/vendor/tracemonkey/xpconnect/src/xpcwrappedjs.cpp +670 -0
  616. data/vendor/tracemonkey/xpconnect/src/xpcwrappedjsclass.cpp +2015 -0
  617. data/vendor/tracemonkey/xpconnect/src/xpcwrappednative.cpp +3482 -0
  618. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativeinfo.cpp +945 -0
  619. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativejsops.cpp +2003 -0
  620. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativeproto.cpp +302 -0
  621. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativescope.cpp +991 -0
  622. data/vendor/tracemonkey/xpconnect/tests/Makefile.in +75 -0
  623. data/vendor/tracemonkey/xpconnect/tests/TestXPC.cpp +785 -0
  624. data/vendor/tracemonkey/xpconnect/tests/chrome/Makefile.in +51 -0
  625. data/vendor/tracemonkey/xpconnect/tests/chrome/test_bug500931.xul +43 -0
  626. data/vendor/tracemonkey/xpconnect/tests/components/Makefile.in +85 -0
  627. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_array.cpp +388 -0
  628. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_attributes.cpp +305 -0
  629. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_calljs.cpp +135 -0
  630. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_child.cpp +225 -0
  631. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_const.cpp +76 -0
  632. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_domstring.cpp +118 -0
  633. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_echo.cpp +616 -0
  634. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_in.cpp +204 -0
  635. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_inout.cpp +171 -0
  636. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_module.cpp +77 -0
  637. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_multiple.cpp +554 -0
  638. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_noisy.cpp +154 -0
  639. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_out.cpp +335 -0
  640. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_overloaded.cpp +250 -0
  641. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_private.h +192 -0
  642. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_string.cpp +185 -0
  643. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_variant.cpp +355 -0
  644. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/StdAfx.cpp +12 -0
  645. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/StdAfx.h +28 -0
  646. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCDispUtilities.h +28 -0
  647. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.cpp +86 -0
  648. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.def +9 -0
  649. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.dsp +318 -0
  650. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.dsw +29 -0
  651. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.idl +454 -0
  652. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.rc +145 -0
  653. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.cpp +44 -0
  654. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.h +56 -0
  655. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.rgs +23 -0
  656. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.cpp +221 -0
  657. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.h +53 -0
  658. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.rgs +23 -0
  659. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.cpp +699 -0
  660. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.h +138 -0
  661. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.rgs +23 -0
  662. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.cpp +23 -0
  663. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.h +41 -0
  664. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.rgs +23 -0
  665. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.cpp +256 -0
  666. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.h +88 -0
  667. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.rgs +23 -0
  668. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.cpp +23 -0
  669. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.h +43 -0
  670. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.rgs +23 -0
  671. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.cpp +29 -0
  672. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.h +45 -0
  673. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.rgs +23 -0
  674. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.cpp +177 -0
  675. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.h +50 -0
  676. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.rgs +23 -0
  677. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/resource.h +36 -0
  678. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Arrays/XPCIDispatchArrayTests.js +54 -0
  679. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Attributes/XPCIDispatchAttributeTests.js +150 -0
  680. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/General/XPCIDispatchInstantiations.js +122 -0
  681. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/General/XPCStress.js +58 -0
  682. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Methods/XPCIDispatchMethodTests.js +376 -0
  683. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/shell.js +377 -0
  684. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedJS/General/XPCIDispatchTestWrappedJS.js +76 -0
  685. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedJS/shell.js +377 -0
  686. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/exectests.cmd +1 -0
  687. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/jsDriver.pl +1288 -0
  688. data/vendor/tracemonkey/xpconnect/tests/idl/Makefile.in +61 -0
  689. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest.idl +312 -0
  690. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest2.idl +51 -0
  691. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_attributes.idl +67 -0
  692. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_calljs.idl +59 -0
  693. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_const.idl +61 -0
  694. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_domstring.idl +59 -0
  695. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_in.idl +88 -0
  696. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_inout.idl +86 -0
  697. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_multiple.idl +77 -0
  698. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_out.idl +142 -0
  699. data/vendor/tracemonkey/xpconnect/tests/js/checkid.js +82 -0
  700. data/vendor/tracemonkey/xpconnect/tests/js/evaluate.js +311 -0
  701. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-2.js +153 -0
  702. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-3.js +194 -0
  703. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-4.js +297 -0
  704. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-5.js +343 -0
  705. data/vendor/tracemonkey/xpconnect/tests/js/exceptions.js +230 -0
  706. data/vendor/tracemonkey/xpconnect/tests/js/javascript.js +96 -0
  707. data/vendor/tracemonkey/xpconnect/tests/js/multiple-2.js +151 -0
  708. data/vendor/tracemonkey/xpconnect/tests/js/multiple-3.js +148 -0
  709. data/vendor/tracemonkey/xpconnect/tests/js/multiple-4.js +152 -0
  710. data/vendor/tracemonkey/xpconnect/tests/js/multiple.js +137 -0
  711. data/vendor/tracemonkey/xpconnect/tests/js/notscriptable.js +104 -0
  712. data/vendor/tracemonkey/xpconnect/tests/js/old/simpletest.js +36 -0
  713. data/vendor/tracemonkey/xpconnect/tests/js/old/speed.js +60 -0
  714. data/vendor/tracemonkey/xpconnect/tests/js/old/testxpc.js +464 -0
  715. data/vendor/tracemonkey/xpconnect/tests/js/old/threads.js +74 -0
  716. data/vendor/tracemonkey/xpconnect/tests/js/old/try.js +27 -0
  717. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_array.js +308 -0
  718. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_callcontext.js +68 -0
  719. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_echo.js +636 -0
  720. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_and_sort.js +28 -0
  721. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_constants.js +15 -0
  722. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_create.js +200 -0
  723. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_exceptions.js +167 -0
  724. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_ids.js +135 -0
  725. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_observer.js +36 -0
  726. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_overloaded.js +14 -0
  727. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_primitives.js +141 -0
  728. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_propertybag.js +36 -0
  729. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_variant.js +339 -0
  730. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_variant_array.js +30 -0
  731. data/vendor/tracemonkey/xpconnect/tests/js/readonlyattributes.js +74 -0
  732. data/vendor/tracemonkey/xpconnect/tests/js/readwriteattributes.js +101 -0
  733. data/vendor/tracemonkey/xpconnect/tests/js/scriptable.js +120 -0
  734. data/vendor/tracemonkey/xpconnect/tests/js/testin.js +203 -0
  735. data/vendor/tracemonkey/xpconnect/tests/js/xpcfun.js +234 -0
  736. data/vendor/tracemonkey/xpconnect/tests/js/xpctest_primitives.js +200 -0
  737. data/vendor/tracemonkey/xpconnect/tests/mochitest/Makefile.in +66 -0
  738. data/vendor/tracemonkey/xpconnect/tests/mochitest/bug500931_helper.html +7 -0
  739. data/vendor/tracemonkey/xpconnect/tests/mochitest/inner.html +7 -0
  740. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug361111.xul +29 -0
  741. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug384632.html +32 -0
  742. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug390488.html +65 -0
  743. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug393269.html +46 -0
  744. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug396851.html +43 -0
  745. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug428021.html +41 -0
  746. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug446584.html +49 -0
  747. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug448587.html +31 -0
  748. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug462428.html +42 -0
  749. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug478438.html +66 -0
  750. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug484107.html +100 -0
  751. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug484459.html +36 -0
  752. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug500691.html +28 -0
  753. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_wrappers.html +116 -0
  754. data/vendor/tracemonkey/xpconnect/tests/unit/bogus_element_type.jsm +1 -0
  755. data/vendor/tracemonkey/xpconnect/tests/unit/bogus_exports_type.jsm +1 -0
  756. data/vendor/tracemonkey/xpconnect/tests/unit/bug451678_subscript.js +2 -0
  757. data/vendor/tracemonkey/xpconnect/tests/unit/component_import.js +144 -0
  758. data/vendor/tracemonkey/xpconnect/tests/unit/recursive_importA.jsm +44 -0
  759. data/vendor/tracemonkey/xpconnect/tests/unit/recursive_importB.jsm +45 -0
  760. data/vendor/tracemonkey/xpconnect/tests/unit/syntax_error.jsm +1 -0
  761. data/vendor/tracemonkey/xpconnect/tests/unit/test_bogus_files.js +88 -0
  762. data/vendor/tracemonkey/xpconnect/tests/unit/test_bug408412.js +51 -0
  763. data/vendor/tracemonkey/xpconnect/tests/unit/test_bug451678.js +52 -0
  764. data/vendor/tracemonkey/xpconnect/tests/unit/test_bug_442086.js +68 -0
  765. data/vendor/tracemonkey/xpconnect/tests/unit/test_import.js +127 -0
  766. data/vendor/tracemonkey/xpconnect/tests/unit/test_js_weak_references.js +63 -0
  767. data/vendor/tracemonkey/xpconnect/tests/unit/test_recursive_import.js +62 -0
  768. data/vendor/tracemonkey/xpconnect/tools/Makefile.in +49 -0
  769. data/vendor/tracemonkey/xpconnect/tools/idl/Makefile.in +53 -0
  770. data/vendor/tracemonkey/xpconnect/tools/idl/nsIXPCToolsCompiler.idl +60 -0
  771. data/vendor/tracemonkey/xpconnect/tools/idl/nsIXPCToolsProfiler.idl +57 -0
  772. data/vendor/tracemonkey/xpconnect/tools/js/CompileJSFiles.js +28 -0
  773. data/vendor/tracemonkey/xpconnect/tools/js/ListJSFiles.js +18 -0
  774. data/vendor/tracemonkey/xpconnect/tools/src/Makefile.in +76 -0
  775. data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsCompiler.cpp +161 -0
  776. data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsModule.cpp +65 -0
  777. data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsProfiler.cpp +370 -0
  778. data/vendor/tracemonkey/xpconnect/tools/src/xpctools_private.h +236 -0
  779. metadata +782 -107
  780. data/test/johnson/nodes/export_test.rb +0 -9
  781. data/test/johnson/nodes/import_test.rb +0 -13
  782. 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,3 @@
1
+
2
+ see http://www.mozilla.org/scriptable
3
+
@@ -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
+ }