michael@0: function run_test() { michael@0: var cu = Components.utils; michael@0: var sbMaster = cu.Sandbox(["http://www.a.com", michael@0: "http://www.b.com", michael@0: "http://www.d.com"]); michael@0: var sbSubset = cu.Sandbox(["http://www.d.com", michael@0: "http://www.a.com"]); michael@0: michael@0: var sbA = cu.Sandbox("http://www.a.com"); michael@0: var sbB = cu.Sandbox("http://www.b.com"); michael@0: var sbC = cu.Sandbox("http://www.c.com"); michael@0: michael@0: sbMaster.objA = cu.evalInSandbox("var obj = {prop1:200}; obj", sbA); michael@0: sbMaster.objB = cu.evalInSandbox("var obj = {prop1:200}; obj", sbB); michael@0: sbMaster.objC = cu.evalInSandbox("var obj = {prop1:200}; obj", sbC); michael@0: sbMaster.objOwn = cu.evalInSandbox("var obj = {prop1:200}; obj", sbMaster); michael@0: michael@0: sbMaster.objSubset = cu.evalInSandbox("var obj = {prop1:200}; obj", sbSubset); michael@0: sbA.objMaster = cu.evalInSandbox("var obj = {prop1:200}; obj", sbMaster); michael@0: sbSubset.objMaster = cu.evalInSandbox("var obj = {prop1:200}; obj", sbMaster); michael@0: michael@0: var ret; michael@0: ret = cu.evalInSandbox("objA.prop1", sbMaster); michael@0: do_check_eq(ret, 200); michael@0: ret = cu.evalInSandbox("objB.prop1", sbMaster); michael@0: do_check_eq(ret, 200); michael@0: ret = cu.evalInSandbox("objSubset.prop1", sbMaster); michael@0: do_check_eq(ret, 200); michael@0: michael@0: function evalAndCatch(str, sb) { michael@0: try { michael@0: ret = cu.evalInSandbox(str, sb); michael@0: do_check_true(false, "unexpected pass") michael@0: } catch (e) { michael@0: do_check_true(e.message && e.message.indexOf("Permission denied to access property") != -1); michael@0: } michael@0: } michael@0: michael@0: evalAndCatch("objC.prop1", sbMaster); michael@0: evalAndCatch("objMaster.prop1", sbA); michael@0: evalAndCatch("objMaster.prop1", sbSubset); michael@0: michael@0: // Bug 777705: michael@0: sbMaster.Components = cu.getComponentsForScope(sbMaster); michael@0: Components.utils.evalInSandbox("Components.interfaces", sbMaster); michael@0: do_check_true(true); michael@0: }