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 5 #ifndef EXTENSIONS_RENDERER_SAFE_BUILTINS_H_ 6 #define EXTENSIONS_RENDERER_SAFE_BUILTINS_H_ 7 8 #include "v8/include/v8.h" 9 10 namespace extensions { 11 class ScriptContext; 12 13 // A collection of safe builtin objects, in that they won't be tained by 14 // extensions overriding methods on them. 15 class SafeBuiltins { 16 public: 17 // Creates the v8::Extension which manages SafeBuiltins instances. 18 static v8::Extension* CreateV8Extension(); 19 20 explicit SafeBuiltins(ScriptContext* context); 21 22 virtual ~SafeBuiltins(); 23 24 // Each method returns an object with methods taken from their respective 25 // builtin object's prototype, adapted to automatically call() themselves. 26 // 27 // Examples: 28 // Array.prototype.forEach.call(...) becomes Array.forEach(...) 29 // Object.prototype.toString.call(...) becomes Object.toString(...) 30 // Object.keys.call(...) becomes Object.keys(...) 31 v8::Local<v8::Object> GetArray() const; 32 v8::Local<v8::Object> GetFunction() const; 33 v8::Local<v8::Object> GetJSON() const; 34 // NOTE(kalman): VS2010 won't compile "GetObject", it mysteriously renames it 35 // to "GetObjectW" - hence GetObjekt. Sorry. 36 v8::Local<v8::Object> GetObjekt() const; 37 v8::Local<v8::Object> GetRegExp() const; 38 v8::Local<v8::Object> GetString() const; 39 v8::Local<v8::Object> GetError() const; 40 41 private: 42 ScriptContext* context_; 43 }; 44 45 } // namespace extensions 46 47 #endif // EXTENSIONS_RENDERER_SAFE_BUILTINS_H_ 48