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

Unified Diff: webkit/port/bindings/v8/v8_proxy.h

Issue 149086: Use upstream V8Proxy and V8Utilities (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 6 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
« no previous file with comments | « webkit/port/bindings/v8/V8SVGPODTypeWrapper.h ('k') | webkit/port/bindings/v8/v8_proxy.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/port/bindings/v8/v8_proxy.h
===================================================================
--- webkit/port/bindings/v8/v8_proxy.h (revision 19426)
+++ webkit/port/bindings/v8/v8_proxy.h (working copy)
@@ -1,673 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef V8_PROXY_H__
-#define V8_PROXY_H__
-
-#include <v8.h>
-#include "v8_utility.h"
-#include "ChromiumBridge.h"
-#include "Node.h"
-#include "NodeFilter.h"
-#include "PlatformString.h" // for WebCore::String
-#include "ScriptSourceCode.h" // for WebCore::ScriptSourceCode
-#include "SecurityOrigin.h" // for WebCore::SecurityOrigin
-#include "V8CustomBinding.h"
-#include "V8DOMMap.h"
-#include "V8EventListenerList.h"
-#include "V8Index.h"
-#include <wtf/Assertions.h>
-#include <wtf/PassRefPtr.h> // so generated bindings don't have to
-#include <wtf/Vector.h>
-
-#include <iterator>
-#include <list>
-
-#ifdef ENABLE_DOM_STATS_COUNTERS
-#define INC_STATS(name) ChromiumBridge::incrementStatsCounter(name)
-#else
-#define INC_STATS(name)
-#endif
-
-// FIXME: Remove the following hack when we replace all references to GetDOMObjectMap.
-#define GetDOMObjectMap getDOMObjectMap
-
-namespace WebCore {
-
-class CSSStyleDeclaration;
-class ClientRectList;
-class DOMImplementation;
-class Element;
-class Event;
-class EventListener;
-class Frame;
-class HTMLCollection;
-class HTMLOptionsCollection;
-class HTMLElement;
-class HTMLDocument;
-class MediaList;
-class NamedNodeMap;
-class Node;
-class NodeList;
-class Screen;
-class String;
-class StyleSheet;
-class SVGElement;
-class DOMWindow;
-class Document;
-class EventTarget;
-class Event;
-class EventListener;
-class Navigator;
-class MimeType;
-class MimeTypeArray;
-class Plugin;
-class PluginArray;
-class StyleSheetList;
-class CSSValue;
-class CSSRule;
-class CSSRuleList;
-class CSSValueList;
-class NodeFilter;
-class ScriptExecutionContext;
-
-#if ENABLE(DOM_STORAGE)
-class Storage;
-class StorageEvent;
-#endif
-
-#if ENABLE(SVG)
-class SVGElementInstance;
-#endif
-
-class V8EventListener;
-class V8ObjectEventListener;
-
-
-// TODO(fqian): use standard logging facilities in WebCore.
-void log_info(Frame* frame, const String& msg, const String& url);
-
-
-#ifndef NDEBUG
-
-#define GlobalHandleTypeList(V) \
- V(PROXY) \
- V(NPOBJECT) \
- V(SCHEDULED_ACTION) \
- V(EVENT_LISTENER) \
- V(NODE_FILTER) \
- V(SCRIPTINSTANCE) \
- V(SCRIPTVALUE)
-
-
-// Host information of persistent handles.
-enum GlobalHandleType {
-#define ENUM(name) name,
- GlobalHandleTypeList(ENUM)
-#undef ENUM
-};
-
-
-class GlobalHandleInfo {
- public:
- GlobalHandleInfo(void* host, GlobalHandleType type)
- : host_(host), type_(type) { }
- void* host_;
- GlobalHandleType type_;
-};
-
-#endif // NDEBUG
-
-// The following Batch structs and methods are used for setting multiple
-// properties on an ObjectTemplate, used from the generated bindings
-// initialization (ConfigureXXXTemplate). This greatly reduces the binary
-// size by moving from code driven setup to data table driven setup.
-
-// BatchedAttribute translates into calls to SetAccessor() on either the
-// instance or the prototype ObjectTemplate, based on |on_proto|.
-struct BatchedAttribute {
- const char* const name;
- v8::AccessorGetter getter;
- v8::AccessorSetter setter;
- V8ClassIndex::V8WrapperType data;
- v8::AccessControl settings;
- v8::PropertyAttribute attribute;
- bool on_proto;
-};
-
-void BatchConfigureAttributes(v8::Handle<v8::ObjectTemplate> inst,
- v8::Handle<v8::ObjectTemplate> proto,
- const BatchedAttribute* attrs,
- size_t num_attrs);
-
-// BatchedConstant translates into calls to Set() for setting up an object's
-// constants. It sets the constant on both the FunctionTemplate |desc| and the
-// ObjectTemplate |proto|. PropertyAttributes is always ReadOnly.
-struct BatchedConstant {
- const char* const name;
- int value;
-};
-
-void BatchConfigureConstants(v8::Handle<v8::FunctionTemplate> desc,
- v8::Handle<v8::ObjectTemplate> proto,
- const BatchedConstant* consts,
- size_t num_consts);
-
-const int kMaxRecursionDepth = 20;
-
-// Information about an extension that is registered for use with V8. If scheme
-// is non-empty, it contains the URL scheme the extension should be used with.
-// Otherwise, the extension is used with all schemes.
-struct V8ExtensionInfo {
- String scheme;
- v8::Extension* extension;
-};
-typedef std::list<V8ExtensionInfo> V8ExtensionList;
-
-class V8Proxy {
- public:
- // The types of javascript errors that can be thrown.
- enum ErrorType {
- RANGE_ERROR,
- REFERENCE_ERROR,
- SYNTAX_ERROR,
- TYPE_ERROR,
- GENERAL_ERROR
- };
-
- explicit V8Proxy(Frame* frame)
- : m_frame(frame), m_inlineCode(false),
- m_timerCallback(false), m_recursion(0) { }
-
- ~V8Proxy();
-
- Frame* frame() { return m_frame; }
-
- // Clear page-specific data, but keep the global object identify.
- void clearForNavigation();
-
- // Clear page-specific data before shutting down the proxy object.
- void clearForClose();
-
- // Update document object of the frame.
- void updateDocument();
-
- // Update the security origin of a document
- // (e.g., after setting docoument.domain).
- void updateSecurityOrigin();
-
- // Destroy the global object.
- void DestroyGlobal();
-
- // TODO(mpcomplete): Need comment. User Gesture related.
- bool inlineCode() const { return m_inlineCode; }
- void setInlineCode(bool value) { m_inlineCode = value; }
-
- bool timerCallback() const { return m_timerCallback; }
- void setTimerCallback(bool value) { m_timerCallback = value; }
-
- // Has the context for this proxy been initialized?
- bool ContextInitialized();
-
- // Disconnects the proxy from its owner frame,
- // and clears all timeouts on the DOM window.
- void disconnectFrame();
-
- bool isEnabled();
-
- // Find/Create/Remove event listener wrappers.
- PassRefPtr<V8EventListener> FindV8EventListener(v8::Local<v8::Value> listener,
- bool html);
- PassRefPtr<V8EventListener> FindOrCreateV8EventListener(v8::Local<v8::Value> listener,
- bool html);
-
- PassRefPtr<V8EventListener> FindObjectEventListener(v8::Local<v8::Value> listener,
- bool html);
- PassRefPtr<V8EventListener> FindOrCreateObjectEventListener(v8::Local<v8::Value> listener,
- bool html);
-
- void RemoveV8EventListener(V8EventListener* listener);
- void RemoveObjectEventListener(V8ObjectEventListener* listener);
-
- // Protect/Unprotect JS wrappers of a DOM object.
- static void GCProtect(void* dom_object);
- static void GCUnprotect(void* dom_object);
-
-#if ENABLE(SVG)
- static void SetSVGContext(void* object, SVGElement* context);
- static SVGElement* GetSVGContext(void* object);
-#endif
-
- void setEventHandlerLineno(int lineno) { m_handlerLineno = lineno; }
- void finishedWithEvent(Event* event) { }
-
- // Evaluate JavaScript in a new isolated world. The script gets its own
- // global scope, its own prototypes for intrinsic JavaScript objects (String,
- // Array, and so-on), and its own wrappers for all DOM nodes and DOM
- // constructors.
- void evaluateInNewWorld(const Vector<ScriptSourceCode>& sources);
-
- // Evaluate JavaScript in a new context. The script gets its own global scope
- // and its own prototypes for intrinsic JavaScript objects (String, Array,
- // and so-on). It shares the wrappers for all DOM nodes and DOM constructors.
- void evaluateInNewContext(const Vector<ScriptSourceCode>& sources);
-
- // Evaluate a script file in the current execution environment.
- // The caller must hold an execution context.
- // If cannot evalute the script, it returns an error.
- v8::Local<v8::Value> evaluate(const ScriptSourceCode& source,
- Node* node);
-
- // Run an already compiled script.
- v8::Local<v8::Value> RunScript(v8::Handle<v8::Script> script,
- bool inline_code);
-
- // Call the function with the given receiver and arguments.
- v8::Local<v8::Value> CallFunction(v8::Handle<v8::Function> function,
- v8::Handle<v8::Object> receiver,
- int argc,
- v8::Handle<v8::Value> argv[]);
-
- // Call the function as constructor with the given arguments.
- v8::Local<v8::Value> NewInstance(v8::Handle<v8::Function> constructor,
- int argc,
- v8::Handle<v8::Value> argv[]);
-
- // Returns the dom constructor function for the given node type.
- v8::Local<v8::Function> GetConstructor(V8ClassIndex::V8WrapperType type);
-
- // To create JS Wrapper objects, we create a cache of a 'boiler plate'
- // object, and then simply Clone that object each time we need a new one.
- // This is faster than going through the full object creation process.
- v8::Local<v8::Object> CreateWrapperFromCache(V8ClassIndex::V8WrapperType type);
-
- // Returns the window object of the currently executing context.
- static DOMWindow* retrieveWindow();
- // Returns the window object associated with a context.
- static DOMWindow* retrieveWindow(v8::Handle<v8::Context> context);
- // Returns V8Proxy object of the currently executing context.
- static V8Proxy* retrieve();
- // Returns V8Proxy object associated with a frame.
- static V8Proxy* retrieve(Frame* frame);
- // Returns V8Proxy object associated with a script execution context.
- static V8Proxy* retrieve(ScriptExecutionContext* context);
-
- // Returns the frame object of the window object associated
- // with the currently executing context.
- static Frame* retrieveFrame();
- // Returns the frame object of the window object associated with
- // a context.
- static Frame* retrieveFrame(v8::Handle<v8::Context> context);
-
-
- // The three functions below retrieve WebFrame instances relating the
- // currently executing JavaScript. Since JavaScript can make function calls
- // across frames, though, we need to be more precise.
- //
- // For example, imagine that a JS function in frame A calls a function in
- // frame B, which calls native code, which wants to know what the 'active'
- // frame is.
- //
- // The 'entered context' is the context where execution first entered the
- // script engine; the context that is at the bottom of the JS function stack.
- // RetrieveFrameForEnteredContext() would return Frame A in our example.
- // This frame is often referred to as the "dynamic global object."
- //
- // The 'current context' is the context the JS engine is currently inside of;
- // the context that is at the top of the JS function stack.
- // RetrieveFrameForCurrentContext() would return Frame B in our example.
- // This frame is often referred to as the "lexical global object."
- //
- // Finally, the 'calling context' is the context one below the current
- // context on the JS function stack. For example, if function f calls
- // function g, then the calling context will be the context associated with
- // f. This context is commonly used by DOM security checks because they want
- // to know who called them.
- //
- // If you are unsure which of these functions to use, ask abarth.
- //
- // NOTE: These cannot be declared as inline function, because VS complains at
- // linking time.
- static Frame* retrieveFrameForEnteredContext();
- static Frame* retrieveFrameForCurrentContext();
- static Frame* retrieveFrameForCallingContext();
-
- // Returns V8 Context of a frame. If none exists, creates
- // a new context. It is potentially slow and consumes memory.
- static v8::Local<v8::Context> GetContext(Frame* frame);
- static v8::Local<v8::Context> GetCurrentContext();
-
- // If the current context causes out of memory, JavaScript setting
- // is disabled and it returns true.
- static bool HandleOutOfMemory();
-
- // Check if the active execution context can access the target frame.
- static bool CanAccessFrame(Frame* target, bool report_error);
-
- // Check if it is safe to access the given node from the
- // current security context.
- static bool CheckNodeSecurity(Node* node);
-
- static v8::Handle<v8::Value> CheckNewLegal(const v8::Arguments& args);
-
- // Create a V8 wrapper for a C pointer
- static v8::Handle<v8::Value> WrapCPointer(void* cptr) {
- // Represent void* as int
- int addr = reinterpret_cast<int>(cptr);
- ASSERT((addr & 0x01) == 0); // the address must be aligned.
- return v8::Integer::New(addr >> 1);
- }
-
- // Take C pointer out of a v8 wrapper
- template <class C>
- static C* ExtractCPointer(v8::Handle<v8::Value> obj) {
- return static_cast<C*>(ExtractCPointerImpl(obj));
- }
-
- static v8::Handle<v8::Script> CompileScript(v8::Handle<v8::String> code,
- const String& fileName,
- int baseLine);
-
-#ifndef NDEBUG
- // Checks if a v8 value can be a DOM wrapper
- static bool MaybeDOMWrapper(v8::Handle<v8::Value> value);
-#endif
-
- // Sets contents of a DOM wrapper.
- static void SetDOMWrapper(v8::Handle<v8::Object> obj, int type, void* ptr);
-
- static v8::Handle<v8::Object> LookupDOMWrapper(
- V8ClassIndex::V8WrapperType type, v8::Handle<v8::Value> value);
-
- // A helper function extract native object pointer from a DOM wrapper
- // and cast to the specified type.
- template <class C>
- static C* DOMWrapperToNative(v8::Handle<v8::Value> object) {
- ASSERT(MaybeDOMWrapper(object));
- v8::Handle<v8::Value> ptr =
- v8::Handle<v8::Object>::Cast(object)->GetInternalField(
- V8Custom::kDOMWrapperObjectIndex);
- return ExtractCPointer<C>(ptr);
- }
-
- // A help function extract a node type pointer from a DOM wrapper.
- // Wrapped pointer must be cast to Node* first.
- static void* DOMWrapperToNodeHelper(v8::Handle<v8::Value> value);
-
- template <class C>
- static C* DOMWrapperToNode(v8::Handle<v8::Value> value) {
- return static_cast<C*>(DOMWrapperToNodeHelper(value));
- }
-
- template<typename T>
- static v8::Handle<v8::Value> ToV8Object(V8ClassIndex::V8WrapperType type, PassRefPtr<T> imp)
- {
- return ToV8Object(type, imp.get());
- }
- static v8::Handle<v8::Value> ToV8Object(V8ClassIndex::V8WrapperType type,
- void* imp);
- // Fast-path for Node objects.
- static v8::Handle<v8::Value> NodeToV8Object(Node* node);
-
- template <class C>
- static C* ToNativeObject(V8ClassIndex::V8WrapperType type,
- v8::Handle<v8::Value> object) {
- return static_cast<C*>(ToNativeObjectImpl(type, object));
- }
-
- static V8ClassIndex::V8WrapperType GetDOMWrapperType(
- v8::Handle<v8::Object> object);
-
- // If the exception code is different from zero, a DOM exception is
- // schedule to be thrown.
- static void SetDOMException(int exception_code);
-
- // Schedule an error object to be thrown.
- static v8::Handle<v8::Value> ThrowError(ErrorType type, const char* message);
-
- // Create an instance of a function descriptor and set to the global object
- // as a named property. Used by v8_test_shell.
- static void BindJSObjectToWindow(Frame* frame,
- const char* name,
- int type,
- v8::Handle<v8::FunctionTemplate> desc,
- void* imp);
-
- static v8::Handle<v8::Value> EventToV8Object(Event* event);
- static Event* ToNativeEvent(v8::Handle<v8::Value> jsevent) {
- if (!IsDOMEventWrapper(jsevent)) return 0;
- return DOMWrapperToNative<Event>(jsevent);
- }
-
- static v8::Handle<v8::Value> EventTargetToV8Object(EventTarget* target);
- // Wrap and unwrap JS event listeners
- static v8::Handle<v8::Value> EventListenerToV8Object(EventListener* target);
-
- // DOMImplementation is a singleton and it is handled in a special
- // way. A wrapper is generated per document and stored in an
- // internal field of the document.
- static v8::Handle<v8::Value> DOMImplementationToV8Object(
- DOMImplementation* impl);
-
- // Wrap JS node filter in C++
- static PassRefPtr<NodeFilter> ToNativeNodeFilter(v8::Handle<v8::Value> filter);
-
- static v8::Persistent<v8::FunctionTemplate> GetTemplate(
- V8ClassIndex::V8WrapperType type);
-
- template <int tag, typename T>
- static v8::Handle<v8::Value> ConstructDOMObject(const v8::Arguments& args);
-
- // Checks whether a DOM object has a JS wrapper.
- static bool DOMObjectHasJSWrapper(void* obj);
- // Set JS wrapper of a DOM object, the caller in charge of increase ref.
- static void SetJSWrapperForDOMObject(void* obj,
- v8::Persistent<v8::Object> wrapper);
- static void SetJSWrapperForActiveDOMObject(void* obj,
- v8::Persistent<v8::Object> wrapper);
- static void SetJSWrapperForDOMNode(Node* node,
- v8::Persistent<v8::Object> wrapper);
-
- // Process any pending JavaScript console messages.
- static void ProcessConsoleMessages();
-
-#ifndef NDEBUG
- // For debugging and leak detection purpose
- static void RegisterGlobalHandle(GlobalHandleType type,
- void* host,
- v8::Persistent<v8::Value> handle);
- static void UnregisterGlobalHandle(void* host,
- v8::Persistent<v8::Value> handle);
-#endif
-
- // Check whether a V8 value is a wrapper of type |classType|.
- static bool IsWrapperOfType(v8::Handle<v8::Value> obj,
- V8ClassIndex::V8WrapperType classType);
-
- // Function for retrieving the line number and source name for the top
- // JavaScript stack frame.
- static int GetSourceLineNumber();
- static String GetSourceName();
-
-
- // Returns a local handle of the context.
- v8::Local<v8::Context> GetContext() {
- return v8::Local<v8::Context>::New(m_context);
- }
-
- bool SetContextDebugId(int id);
- static int GetContextDebugId(v8::Handle<v8::Context> context);
-
- // Registers an extension to be available on webpages with a particular scheme
- // If the scheme argument is empty, the extension is available on all pages.
- // Will only affect v8 contexts initialized after this call. Takes ownership
- // of the v8::Extension object passed.
- static void RegisterExtension(v8::Extension* extension,
- const String& schemeRestriction);
-
- static void* ToSVGPODTypeImpl(V8ClassIndex::V8WrapperType type,
- v8::Handle<v8::Value> object);
-
- // TODO(abarth): Separate these concerns from V8Proxy?
- v8::Persistent<v8::Context> createNewContext(v8::Handle<v8::Object> global);
- bool installDOMWindow(v8::Handle<v8::Context> context, DOMWindow* window);
-
- private:
- static const char* kContextDebugDataType;
- static const char* kContextDebugDataValue;
-
- void InitContextIfNeeded();
- void DisconnectEventListeners();
- void SetSecurityToken();
- void ClearDocumentWrapper();
- void UpdateDocumentWrapper(v8::Handle<v8::Value> wrapper);
-
- // The JavaScript wrapper for the document object is cached on the global
- // object for fast access. UpdateDocumentWrapperCache sets the wrapper
- // for the current document on the global object. ClearDocumentWrapperCache
- // deletes the document wrapper from the global object.
- void UpdateDocumentWrapperCache();
- void ClearDocumentWrapperCache();
-
- // Dispose global handles of m_contexts and friends.
- void DisposeContextHandles();
-
- static bool CanAccessPrivate(DOMWindow* target);
-
- // Check whether a V8 value is a DOM Event wrapper
- static bool IsDOMEventWrapper(v8::Handle<v8::Value> obj);
-
- static void* ToNativeObjectImpl(V8ClassIndex::V8WrapperType type,
- v8::Handle<v8::Value> object);
-
- // Take C pointer out of a v8 wrapper
- static void* ExtractCPointerImpl(v8::Handle<v8::Value> obj) {
- ASSERT(obj->IsNumber());
- int addr = obj->Int32Value();
- return reinterpret_cast<void*>(addr << 1);
- }
-
-
- static v8::Handle<v8::Value> StyleSheetToV8Object(StyleSheet* sheet);
- static v8::Handle<v8::Value> CSSValueToV8Object(CSSValue* value);
- static v8::Handle<v8::Value> CSSRuleToV8Object(CSSRule* rule);
- // Returns the JS wrapper of a window object, initializes the environment
- // of the window frame if needed.
- static v8::Handle<v8::Value> WindowToV8Object(DOMWindow* window);
-
-#if ENABLE(SVG)
- static v8::Handle<v8::Value> SVGElementInstanceToV8Object(
- SVGElementInstance* instance);
- static v8::Handle<v8::Value> SVGObjectWithContextToV8Object(
- V8ClassIndex::V8WrapperType type, void* object);
-#endif
-
- // Set hidden references in a DOMWindow object of a frame.
- static void SetHiddenWindowReference(Frame* frame,
- const int internal_index,
- v8::Handle<v8::Object> jsobj);
-
- static V8ClassIndex::V8WrapperType GetHTMLElementType(HTMLElement* elm);
-
- // The first parameter, desc_type, specifies the function descriptor
- // used to create JS object. The second parameter, cptr_type, specifies
- // the type of third parameter, impl, for type casting.
- // For example, a HTML element has HTMLELEMENT desc_type, but always
- // use NODE as cptr_type. JS wrapper stores cptr_type and impl as
- // internal fields.
- static v8::Local<v8::Object> InstantiateV8Object(
- V8ClassIndex::V8WrapperType desc_type,
- V8ClassIndex::V8WrapperType cptr_type,
- void* impl);
-
- static const char* GetRangeExceptionName(int exception_code);
- static const char* GetEventExceptionName(int exception_code);
- static const char* GetXMLHttpRequestExceptionName(int exception_code);
- static const char* GetDOMExceptionName(int exception_code);
-
-#if ENABLE(XPATH)
- static const char* GetXPathExceptionName(int exception_code);
-#endif
-
-#if ENABLE(SVG)
- static V8ClassIndex::V8WrapperType GetSVGElementType(SVGElement* elm);
- static const char* GetSVGExceptionName(int exception_code);
-#endif
-
- // Create and populate the utility context.
- static void CreateUtilityContext();
-
- // Returns a local handle of the utility context.
- static v8::Local<v8::Context> GetUtilityContext() {
- if (m_utilityContext.IsEmpty()) {
- CreateUtilityContext();
- }
- return v8::Local<v8::Context>::New(m_utilityContext);
- }
-
- Frame* m_frame;
-
- v8::Persistent<v8::Context> m_context;
- // For each possible type of wrapper, we keep a boilerplate object.
- // The boilerplate is used to create additional wrappers of the same type.
- // We keep a single persistent handle to an array of the activated
- // boilerplates.
- v8::Persistent<v8::Array> m_wrapper_boilerplates;
- v8::Persistent<v8::Value> m_object_prototype;
-
- v8::Persistent<v8::Object> m_global;
- v8::Persistent<v8::Value> m_document;
-
- // Utility context holding JavaScript functions used internally.
- static v8::Persistent<v8::Context> m_utilityContext;
-
- int m_handlerLineno;
-
- // A list of event listeners created for this frame,
- // the list gets cleared when removing all timeouts.
- V8EventListenerList m_event_listeners;
-
- // A list of event listeners create for XMLHttpRequest object for this frame,
- // the list gets cleared when removing all timeouts.
- V8EventListenerList m_xhr_listeners;
-
- // True for <a href="javascript:foo()"> and false for <script>foo()</script>.
- // Only valid during execution.
- bool m_inlineCode;
-
- // True when executing from within a timer callback. Only valid during
- // execution.
- bool m_timerCallback;
-
- // Track the recursion depth to be able to avoid too deep recursion. The V8
- // engine allows much more recursion than KJS does so we need to guard against
- // excessive recursion in the binding layer.
- int m_recursion;
-
- // List of extensions registered with the context.
- static V8ExtensionList m_extensions;
-};
-
-template <int tag, typename T>
-v8::Handle<v8::Value> V8Proxy::ConstructDOMObject(const v8::Arguments& args) {
- if (!args.IsConstructCall()) {
- V8Proxy::ThrowError(V8Proxy::TYPE_ERROR,
- "DOM object constructor cannot be called as a function.");
- return v8::Undefined();
- }
-
-
- // Note: it's OK to let this RefPtr go out of scope because we also call
- // SetDOMWrapper(), which effectively holds a reference to obj.
- RefPtr<T> obj = T::create();
- V8Proxy::SetDOMWrapper(args.Holder(), tag, obj.get());
- obj->ref();
- V8Proxy::SetJSWrapperForDOMObject(
- obj.get(), v8::Persistent<v8::Object>::New(args.Holder()));
- return args.Holder();
-}
-
-} // namespace WebCore
-
-#endif // V8_PROXY_H__
« no previous file with comments | « webkit/port/bindings/v8/V8SVGPODTypeWrapper.h ('k') | webkit/port/bindings/v8/v8_proxy.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698