safe_builtins_unittest.cc 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "extensions/renderer/module_system_test.h"
  5. namespace extensions {
  6. namespace {
  7. class SafeBuiltinsUnittest : public ModuleSystemTest {};
  8. TEST_F(SafeBuiltinsUnittest, TestNotOriginalObject) {
  9. ModuleSystem::NativesEnabledScope natives_enabled_scope(
  10. env()->module_system());
  11. env()->RegisterModule("test",
  12. "var assert = requireNative('assert');\n"
  13. "Array.foo = 10;\n"
  14. "assert.AssertTrue(!$Array.hasOwnProperty('foo'));\n");
  15. env()->module_system()->Require("test");
  16. }
  17. TEST_F(SafeBuiltinsUnittest, TestSelf) {
  18. ModuleSystem::NativesEnabledScope natives_enabled_scope(
  19. env()->module_system());
  20. env()->RegisterModule("test",
  21. "var assert = requireNative('assert');\n"
  22. "Array.foo = 10;\n"
  23. "assert.AssertTrue($Array.self.foo == 10);\n"
  24. "var arr = $Array.self(1);\n"
  25. "assert.AssertTrue(arr.length == 1);\n"
  26. "assert.AssertTrue(arr[0] === undefined);\n");
  27. env()->module_system()->Require("test");
  28. }
  29. TEST_F(SafeBuiltinsUnittest, TestStaticFunction) {
  30. ModuleSystem::NativesEnabledScope natives_enabled_scope(
  31. env()->module_system());
  32. env()->RegisterModule("test",
  33. "var assert = requireNative('assert');\n"
  34. "Object.keys = function() {throw new Error()};\n"
  35. "var obj = {a: 10};\n"
  36. "var keys = $Object.keys(obj);\n"
  37. "assert.AssertTrue(keys.length == 1);\n"
  38. "assert.AssertTrue(keys[0] == 'a');\n");
  39. env()->module_system()->Require("test");
  40. }
  41. TEST_F(SafeBuiltinsUnittest, TestInstanceMethod) {
  42. ModuleSystem::NativesEnabledScope natives_enabled_scope(
  43. env()->module_system());
  44. env()->RegisterModule(
  45. "test",
  46. "var assert = requireNative('assert');\n"
  47. "Array.prototype.push = function() {throw new Error();}\n"
  48. "var arr = []\n"
  49. "$Array.push(arr, 1);\n"
  50. "assert.AssertTrue(arr.length == 1);\n"
  51. "assert.AssertTrue(arr[0] == 1);\n");
  52. env()->module_system()->Require("test");
  53. }
  54. // NOTE: JSON is already tested in ExtensionApiTest.Messaging, via
  55. // chrome/test/data/extensions/api_test/messaging/connect/page.js.
  56. } // namespace
  57. } // namespace extensions