| 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__
|
|
|