Chromium Code Reviews| Index: webkit/port/bindings/v8/v8_proxy.h |
| =================================================================== |
| --- webkit/port/bindings/v8/v8_proxy.h (revision 2436) |
| +++ webkit/port/bindings/v8/v8_proxy.h (working copy) |
| @@ -276,7 +276,7 @@ |
| static bool CanAccess(Frame* target); |
| // Create a V8 wrapper for a C pointer |
| - static v8::Handle<v8::Value> WrapCPointer(void* cptr); |
| + static inline v8::Handle<v8::Value> WrapCPointer(void* cptr); |
| static v8::Handle<v8::Value> CheckNewLegal(const v8::Arguments& args); |
| @@ -291,12 +291,14 @@ |
| const String& fileName, |
| int baseLine); |
| + |
| +#ifndef NDEBUG |
| // Checks if a v8 value can be a DOM wrapper |
| - static bool MaybeDOMWrapper(v8::Handle<v8::Value> obj); |
| + static bool MaybeDOMWrapper(v8::Handle<v8::Value> value); |
| +#endif |
| - // Sets contents of a DOM wrapper, returns false if |
| - // obj is not a DOM wrapper type |
| - static bool SetDOMWrapper(v8::Handle<v8::Object> obj, int type, void* ptr); |
| + // 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); |
| @@ -305,16 +307,6 @@ |
| // and cast to the specified type. |
| template <class C> |
| static C* DOMWrapperToNative(v8::Handle<v8::Value> object) { |
| - if (!MaybeDOMWrapper(object)) |
| - return 0; |
| - return ExtractCPointer<C>( |
| - v8::Handle<v8::Object>::Cast(object)->GetInternalField(0)); |
| - } |
| - |
| - // A helper function extract native object pointer from a DOM wrapper |
| - // and cast to the specified type. |
| - template <class C> |
| - static C* FastDOMWrapperToNative(v8::Handle<v8::Value> object) { |
| ASSERT(MaybeDOMWrapper(object)); |
| return ExtractCPointer<C>( |
| v8::Handle<v8::Object>::Cast(object)->GetInternalField(0)); |
| @@ -323,24 +315,24 @@ |
| // A help function extract a node type pointer from a DOM wrapper. |
| // Wrapped pointer must be cast to Node* first. |
| template <class C> |
| - static C* DOMWrapperToNode(v8::Handle<v8::Value> object) { |
| - if (!MaybeDOMWrapper(object)) |
| - return 0; |
| + static C* DOMWrapperToNode(v8::Handle<v8::Value> value) { |
| + ASSERT(MaybeDOMWrapper(value)); |
| + |
| + v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(value); |
| + |
| + ASSERT(GetDOMWrapperType(object) == V8ClassIndex::NODE); |
| + |
| v8::Handle<v8::Value> wrapper = |
| - v8::Handle<v8::Object>::Cast(object)->GetInternalField(0); |
| + object->GetInternalField(V8Custom::kDOMWrapperObjectIndex); |
| return static_cast<C*>(ExtractCPointer<Node>(wrapper)); |
| } |
| 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* FastToNativeObject(V8ClassIndex::V8WrapperType type, |
| - v8::Handle<v8::Value> object) { |
| - return static_cast<C*>(FastToNativeObjectImpl(type, object)); |
| - } |
| - |
| - template <class C> |
| static C* ToNativeObject(V8ClassIndex::V8WrapperType type, |
| v8::Handle<v8::Value> object) { |
| return static_cast<C*>(ToNativeObjectImpl(type, object)); |
| @@ -366,6 +358,7 @@ |
| 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); |
| } |
| @@ -414,26 +407,26 @@ |
| void initContextIfNeeded(); |
| void DisconnectEventListeners(); |
| + // 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); |
| - static void* FastToNativeObjectImpl(V8ClassIndex::V8WrapperType type, |
| - v8::Handle<v8::Value> object); |
| // Take C pointer out of a v8 wrapper |
| - static void* ExtractCPointerImpl(v8::Handle<v8::Value> obj); |
| + static inline void* ExtractCPointerImpl(v8::Handle<v8::Value> obj); |
| - static v8::Handle<v8::Object> NodeToV8Object(Node* node); |
| - static v8::Handle<v8::Object> StyleSheetToV8Object(StyleSheet* sheet); |
| - static v8::Handle<v8::Object> CSSValueToV8Object(CSSValue* value); |
| - static v8::Handle<v8::Object> CSSRuleToV8Object(CSSRule* rule); |
| + 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::Object> WindowToV8Object(DOMWindow* window); |
| + static v8::Handle<v8::Value> WindowToV8Object(DOMWindow* window); |
| #if ENABLE(SVG) |
| - static v8::Handle<v8::Object> SVGElementInstanceToV8Object( |
| + static v8::Handle<v8::Value> SVGElementInstanceToV8Object( |
| SVGElementInstance* instance); |
| - static v8::Handle<v8::Object> SVGObjectWithContextToV8Object( |
| + static v8::Handle<v8::Value> SVGObjectWithContextToV8Object( |
| Peerable* object, V8ClassIndex::V8WrapperType type); |
| #endif |
| @@ -444,8 +437,16 @@ |
| 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 has store cptr_type and impl as |
|
Mads Ager (chromium)
2008/09/23 06:45:09
JS wrapper has store -> JS wrappers store
Feng Qian
2008/09/23 21:46:04
Done.
|
| + // internal fields. |
| static v8::Local<v8::Object> InstantiateV8Object( |
| - V8ClassIndex::V8WrapperType type, void* impl); |
| + V8ClassIndex::V8WrapperType desc_type, |
| + V8ClassIndex::V8WrapperType cptr_type, |
| + void* impl); |
| static const char* GetRangeExceptionName(int exception_code); |
| static const char* GetEventExceptionName(int exception_code); |