Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(287)

Unified Diff: test/mjsunit/cross-realm-filtering.js

Issue 261103002: filter out .caller from other worlds (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/api.cc ('K') | « src/isolate.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/cross-realm-filtering.js
diff --git a/test/mjsunit/cross-realm-filtering.js b/test/mjsunit/cross-realm-filtering.js
new file mode 100644
index 0000000000000000000000000000000000000000..73d24dfac1e1d45a6bc6937e905df7d7bb584221
--- /dev/null
+++ b/test/mjsunit/cross-realm-filtering.js
@@ -0,0 +1,51 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+var realms = [Realm.current(), Realm.create()];
+
+function throw_in_current() { Realm.eval(Realm.current(), "throw Error()"); };
+
+Realm.shared = {
+ throw_in_current: throw_in_current,
+ thrower_0: (function thrower_0() { Realm.shared.throw_in_current(); }),
+ thrower_1: Realm.eval(realms[1],
+ "(function thrower_1() { Realm.shared.throw_in_current(); })"),
+};
+
+var script =
+"Error.prepareStackTrace = function(a, b) { return b; }; \
+ try { \
+ Realm.shared.thrower_0(); \
+ } catch (e) { \
+ Realm.shared.error_0 = e.stack; \
+ } \
+ try { \
+ Realm.shared.thrower_1(); \
+ } catch (e) { \
+ Realm.shared.error_1 = e.stack; \
+ }"
+
+Realm.eval(realms[1], script);
+assertSame(3, Realm.shared.error_0.length);
+assertSame(4, Realm.shared.error_1.length);
+
+assertTrue(Realm.shared.thrower_1 === Realm.shared.error_1[2].getFunction());
+for (var i = 0; i < Realm.shared.error_0.length; i++) {
+ assertFalse(Realm.shared.thrower_0 === Realm.shared.error_0[i].getFunction());
+}
+for (var i = 0; i < Realm.shared.error_1.length; i++) {
+ assertFalse(Realm.shared.thrower_0 === Realm.shared.error_1[i].getFunction());
+}
+
+Realm.eval(realms[0], script);
+assertSame(6, Realm.shared.error_0.length);
+assertSame(5, Realm.shared.error_1.length);
+
+assertTrue(Realm.shared.thrower_0 === Realm.shared.error_0[3].getFunction());
+for (var i = 0; i < Realm.shared.error_0.length; i++) {
+ assertFalse(Realm.shared.thrower_1 === Realm.shared.error_0[i].getFunction());
+}
+for (var i = 0; i < Realm.shared.error_1.length; i++) {
+ assertFalse(Realm.shared.thrower_1 === Realm.shared.error_1[i].getFunction());
+}
« src/api.cc ('K') | « src/isolate.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698