874
edits
(simplified explanation) |
(added more) |
||
| Line 11: | Line 11: | ||
<pre class="brush:js;"> | <pre class="brush:js;"> | ||
const Cu = Components.utils; | const Cu = Components.utils; | ||
function foo(obj) { | |||
/* Do something here that requires chrome privileges. */ | |||
} | |||
foo.__callableByContent__ = true; | |||
var sandbox = Cu.Sandbox("http://www.mozilla.org"); | var sandbox = Cu.Sandbox("http://www.mozilla.org"); | ||
sandbox.foo = | sandbox.foo = foo; | ||
var result = Cu.evalInSandbox("foo({bar: 5});"); | var result = Cu.evalInSandbox("foo({bar: 5});"); | ||
</pre> | </pre> | ||
In the above example, <tt>foo()</tt> is wrapped by a COW when accessed by sandboxed code executed via <tt>Components.utils.evalInSandbox()</tt>. The object <tt>{bar: 5}</tt> is wrapped in an <tt>XPCSafeJSObjectWrapper</tt> before being passed into <tt>foo()</tt>. | In the above example, <tt>foo()</tt> is wrapped by a COW when accessed by sandboxed code executed via <tt>Components.utils.evalInSandbox()</tt>. The object <tt>{bar: 5}</tt> is wrapped in an <tt>XPCSafeJSObjectWrapper</tt> before being passed into <tt>foo()</tt>. | ||
The metadata attached to <tt>foo()</tt>, <tt>__callableByContent__</tt>, is used to explicitly declare that the function its attached to can be called from content. This is necessary for security purposes; if a function that's only ever intended to be called from trusted code ever accidentally "falls into the wrong hands", we don't want untrusted code to be able to exploit it. | |||
edits