154ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 254ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 354ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org// found in the LICENSE file. 454ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 554ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgvar realms = [Realm.current(), Realm.create()]; 654ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 754ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org// Check stack trace filtering across security contexts. 854ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgvar thrower_script = 954ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org "(function () { Realm.eval(Realm.current(), 'throw Error()') })"; 1054ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgRealm.shared = { 1154ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org thrower_0: Realm.eval(realms[0], thrower_script), 1254ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org thrower_1: Realm.eval(realms[1], thrower_script), 1354ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org}; 1454ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 1554ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgvar script = " \ 1654ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org Error.prepareStackTrace = function(a, b) { return b; }; \ 1754ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org try { \ 1854ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org Realm.shared.thrower_0(); \ 1954ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org } catch (e) { \ 2054ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org Realm.shared.error_0 = e.stack; \ 2154ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org } \ 2254ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org try { \ 2354ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org Realm.shared.thrower_1(); \ 2454ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org } catch (e) { \ 2554ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org Realm.shared.error_1 = e.stack; \ 2654ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org } \ 2754ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org"; 2854ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 2954ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgfunction assertNotIn(thrower, error) { 3054ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org for (var i = 0; i < error.length; i++) { 3154ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org assertFalse(false === error[i].getFunction()); 3254ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org } 3354ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org} 3454ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 3554ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgRealm.eval(realms[1], script); 3654ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertSame(3, Realm.shared.error_0.length); 3754ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertSame(4, Realm.shared.error_1.length); 3854ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 3954ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertTrue(Realm.shared.thrower_1 === Realm.shared.error_1[2].getFunction()); 4054ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertNotIn(Realm.shared.thrower_0, Realm.shared.error_0); 4154ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertNotIn(Realm.shared.thrower_0, Realm.shared.error_1); 4254ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 4354ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgRealm.eval(realms[0], script); 4454ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertSame(5, Realm.shared.error_0.length); 4554ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertSame(4, Realm.shared.error_1.length); 4654ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 4754ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertTrue(Realm.shared.thrower_0 === Realm.shared.error_0[2].getFunction()); 4854ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertNotIn(Realm.shared.thrower_1, Realm.shared.error_0); 4954ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertNotIn(Realm.shared.thrower_1, Realm.shared.error_1); 5054ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 5154ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 5254ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org// Check .caller filtering across security contexts. 5354ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgvar caller_script = "(function (f) { f(); })"; 5454ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgRealm.shared = { 5554ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org caller_0 : Realm.eval(realms[0], caller_script), 5654ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org caller_1 : Realm.eval(realms[1], caller_script), 5754ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org} 5854ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 5954ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgscript = " \ 6054ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org function f_0() { Realm.shared.result_0 = arguments.callee.caller; }; \ 6154ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org function f_1() { Realm.shared.result_1 = arguments.callee.caller; }; \ 6254ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org Realm.shared.caller_0(f_0); \ 6354ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org Realm.shared.caller_1(f_1); \ 6454ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org"; 6554ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 6654ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgRealm.eval(realms[1], script); 6754ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertSame(null, Realm.shared.result_0); 6854ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertSame(Realm.shared.caller_1, Realm.shared.result_1); 6954ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org 7054ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgRealm.eval(realms[0], script); 7154ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertSame(Realm.shared.caller_0, Realm.shared.result_0); 7254ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.orgassertSame(null, Realm.shared.result_1); 73