summaryrefslogtreecommitdiffstats
path: root/webkit/port/bindings
diff options
context:
space:
mode:
authorpinkerton@google.com <pinkerton@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-15 17:33:47 +0000
committerpinkerton@google.com <pinkerton@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-15 17:33:47 +0000
commitf6fc4db35b28dc4e96167e2f6e9fed6554de4c31 (patch)
treeef835042ae9b476cdd6c121a5da3cf46304e1eb5 /webkit/port/bindings
parent37088fefa67704ad6f18e1e72e2e6292ba48ee1b (diff)
downloadchromium_src-f6fc4db35b28dc4e96167e2f6e9fed6554de4c31.zip
chromium_src-f6fc4db35b28dc4e96167e2f6e9fed6554de4c31.tar.gz
chromium_src-f6fc4db35b28dc4e96167e2f6e9fed6554de4c31.tar.bz2
Fix some gcc'isms in compilation. Break circular dependency between v8_common and v8_proxy by introducing a new header, v8_properties.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@945 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/port/bindings')
-rw-r--r--webkit/port/bindings/v8/dom_wrapper_map.h2
-rw-r--r--webkit/port/bindings/v8/np_v8object.cpp4
-rw-r--r--webkit/port/bindings/v8/v8_collection.h221
-rw-r--r--webkit/port/bindings/v8/v8_custom.cpp2
-rw-r--r--webkit/port/bindings/v8/v8_custom.h115
-rw-r--r--webkit/port/bindings/v8/v8_proxy.cpp8
-rw-r--r--webkit/port/bindings/v8/v8_proxy.h66
7 files changed, 230 insertions, 188 deletions
diff --git a/webkit/port/bindings/v8/dom_wrapper_map.h b/webkit/port/bindings/v8/dom_wrapper_map.h
index d5f88b3..346a534 100644
--- a/webkit/port/bindings/v8/dom_wrapper_map.h
+++ b/webkit/port/bindings/v8/dom_wrapper_map.h
@@ -90,7 +90,7 @@ template <class KeyType>
class DOMWrapperMap : public WeakReferenceMap<KeyType, v8::Object> {
public:
DOMWrapperMap(v8::WeakReferenceCallback callback) :
- WeakReferenceMap(callback) { }
+ WeakReferenceMap<KeyType, v8::Object>(callback) { }
};
#endif // BINDINGS_V8_DOM_WRAPPER_MAP
diff --git a/webkit/port/bindings/v8/np_v8object.cpp b/webkit/port/bindings/v8/np_v8object.cpp
index df04aca..3b3be3a 100644
--- a/webkit/port/bindings/v8/np_v8object.cpp
+++ b/webkit/port/bindings/v8/np_v8object.cpp
@@ -257,7 +257,7 @@ bool NPN_Evaluate(NPP npp, NPObject *npobj, NPString *npscript,
v8::Context::Scope scope(context);
- WebCore::String filename(L"npscript");
+ WebCore::String filename("npscript");
// Convert UTF-8 stream to WebCore::String.
WebCore::String script = WebCore::String::fromUTF8(
npscript->UTF8Characters, npscript->UTF8Length);
@@ -457,7 +457,7 @@ bool NPN_Enumerate(NPP npp, NPObject *npobj, NPIdentifier **identifier,
v8::Handle<v8::Value> argv[] = { obj };
v8::Local<v8::Value> props_obj =
enumerator->Call(v8::Handle<v8::Object>::Cast(enumerator_obj),
- arraysize(argv), argv);
+ ARRAYSIZE_UNSAFE(argv), argv);
if (props_obj.IsEmpty())
return false;
diff --git a/webkit/port/bindings/v8/v8_collection.h b/webkit/port/bindings/v8/v8_collection.h
new file mode 100644
index 0000000..7eb8a77
--- /dev/null
+++ b/webkit/port/bindings/v8/v8_collection.h
@@ -0,0 +1,221 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Copied from base/basictypes.h with some modifications
+
+#ifndef V8_PROPERTY_H__
+#define V8_PROPERTY_H__
+
+#include <v8.h>
+#include "v8_proxy.h"
+
+namespace WebCore {
+
+
+// Returns named property of a collection.
+template <class C>
+static v8::Handle<v8::Value> GetNamedPropertyOfCollection(
+ v8::Local<v8::String> name,
+ v8::Local<v8::Object> object,
+ v8::Local<v8::Value> data) {
+ // TODO: assert object is a collection type
+ ASSERT(V8Proxy::MaybeDOMWrapper(object));
+
+ V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(object);
+ C* collection = V8Proxy::FastToNativeObject<C>(t, object);
+ String prop_name = ToWebCoreString(name);
+ void* result = collection->namedItem(prop_name);
+ if (!result) return v8::Handle<v8::Value>();
+ V8ClassIndex::V8WrapperType type = V8ClassIndex::ToWrapperType(data);
+ return V8Proxy::ToV8Object(type, result);
+}
+
+// A template of named property accessor of collections.
+template <class C>
+static v8::Handle<v8::Value> CollectionNamedPropertyGetter(
+ v8::Local<v8::String> name, const v8::AccessorInfo& info) {
+ return GetNamedPropertyOfCollection<C>(name, info.Holder(), info.Data());
+}
+
+// A template returns whether a collection has a named property.
+// This function does not cause JS heap allocation.
+template <class C>
+static bool HasNamedPropertyOfCollection(v8::Local<v8::String> name,
+ v8::Local<v8::Object> object,
+ v8::Local<v8::Value> data) {
+ // TODO: assert object is a collection type
+ ASSERT(V8Proxy::MaybeDOMWrapper(object));
+
+ V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(object);
+ C* collection = V8Proxy::FastToNativeObject<C>(t, object);
+ String prop_name = ToWebCoreString(name);
+ void* result = collection->namedItem(prop_name);
+ return result != NULL;
+}
+
+
+// Returns the property at the index of a collection.
+template <class C>
+static v8::Handle<v8::Value> GetIndexedPropertyOfCollection(
+ uint32_t index, v8::Local<v8::Object> object, v8::Local<v8::Value> data) {
+ // TODO, assert that object must be a collection type
+ ASSERT(V8Proxy::MaybeDOMWrapper(object));
+ V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(object);
+ C* collection = V8Proxy::FastToNativeObject<C>(t, object);
+ void* result = collection->item(index);
+ if (!result) return v8::Handle<v8::Value>();
+ V8ClassIndex::V8WrapperType type = V8ClassIndex::ToWrapperType(data);
+ return V8Proxy::ToV8Object(type, result);
+}
+
+
+// A template of index interceptor of collections.
+template <class C>
+static v8::Handle<v8::Value> CollectionIndexedPropertyGetter(
+ uint32_t index, const v8::AccessorInfo& info) {
+ return GetIndexedPropertyOfCollection<C>(index, info.Holder(), info.Data());
+}
+
+
+// Get an array containing the names of indexed properties in a collection.
+template <class C>
+static v8::Handle<v8::Array> CollectionIndexedPropertyEnumerator(
+ const v8::AccessorInfo& info) {
+ ASSERT(V8Proxy::MaybeDOMWrapper(info.Holder()));
+ V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(info.Holder());
+ C* collection = V8Proxy::FastToNativeObject<C>(t, info.Holder());
+ int length = collection->length();
+ v8::Handle<v8::Array> properties = v8::Array::New(length);
+ for (int i = 0; i < length; i++) {
+ // TODO(ager): Do we need to check that the item function returns
+ // a non-null value for this index?
+ v8::Handle<v8::Integer> integer = v8::Integer::New(i);
+ properties->Set(integer, integer);
+ }
+ return properties;
+}
+
+
+// Returns whether a collection has a property at a given index.
+// This function does not cause JS heap allocation.
+template <class C>
+static bool HasIndexedPropertyOfCollection(uint32_t index,
+ v8::Local<v8::Object> object,
+ v8::Local<v8::Value> data) {
+ // TODO, assert that object must be a collection type
+ ASSERT(V8Proxy::MaybeDOMWrapper(object));
+ V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(object);
+ C* collection = V8Proxy::FastToNativeObject<C>(t, object);
+ void* result = collection->item(index);
+ return result != NULL;
+}
+
+
+// A template for indexed getters on collections of strings that should return
+// null if the resulting string is a null string.
+template <class C>
+static v8::Handle<v8::Value> CollectionStringOrNullIndexedPropertyGetter(
+ uint32_t index, const v8::AccessorInfo& info) {
+ // TODO, assert that object must be a collection type
+ ASSERT(V8Proxy::MaybeDOMWrapper(info.Holder()));
+ V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(info.Holder());
+ C* collection = V8Proxy::FastToNativeObject<C>(t, info.Holder());
+ String result = collection->item(index);
+ return v8StringOrNull(result);
+}
+
+
+// Add indexed getter to the function template for a collection.
+template <class T>
+static void SetCollectionIndexedGetter(v8::Handle<v8::FunctionTemplate> desc,
+ V8ClassIndex::V8WrapperType type) {
+ desc->InstanceTemplate()->SetIndexedPropertyHandler(
+ CollectionIndexedPropertyGetter<T>,
+ 0,
+ 0,
+ 0,
+ CollectionIndexedPropertyEnumerator<T>,
+ v8::External::New(reinterpret_cast<void*>(type)));
+}
+
+
+// Add named getter to the function template for a collection.
+template <class T>
+static void SetCollectionNamedGetter(v8::Handle<v8::FunctionTemplate> desc,
+ V8ClassIndex::V8WrapperType type) {
+ desc->InstanceTemplate()->SetNamedPropertyHandler(
+ CollectionNamedPropertyGetter<T>,
+ 0,
+ 0,
+ 0,
+ 0,
+ v8::External::New(reinterpret_cast<void*>(type)));
+}
+
+
+// Add named and indexed getters to the function template for a collection.
+template <class T>
+static void SetCollectionIndexedAndNamedGetters(
+ v8::Handle<v8::FunctionTemplate> desc, V8ClassIndex::V8WrapperType type) {
+ // If we interceptor before object, accessing 'length' can trigger
+ // a webkit assertion error.
+ // (see fast/dom/HTMLDocument/document-special-properties.html
+ desc->InstanceTemplate()->SetNamedPropertyHandler(
+ CollectionNamedPropertyGetter<T>,
+ 0,
+ 0,
+ 0,
+ 0,
+ v8::External::New(reinterpret_cast<void*>(type)));
+ desc->InstanceTemplate()->SetIndexedPropertyHandler(
+ CollectionIndexedPropertyGetter<T>,
+ 0,
+ 0,
+ 0,
+ CollectionIndexedPropertyEnumerator<T>,
+ v8::External::New(reinterpret_cast<void*>(type)));
+}
+
+
+// Add indexed getter returning a string or null to a function template
+// for a collection.
+template <class T>
+static void SetCollectionStringOrNullIndexedGetter(
+ v8::Handle<v8::FunctionTemplate> desc) {
+ desc->InstanceTemplate()->SetIndexedPropertyHandler(
+ CollectionStringOrNullIndexedPropertyGetter<T>,
+ 0,
+ 0,
+ 0,
+ CollectionIndexedPropertyEnumerator<T>);
+}
+
+
+} // namespace WebCore
+
+#endif // V8_PROPERTY_H__
diff --git a/webkit/port/bindings/v8/v8_custom.cpp b/webkit/port/bindings/v8/v8_custom.cpp
index 866c0cd..bfcb7e0 100644
--- a/webkit/port/bindings/v8/v8_custom.cpp
+++ b/webkit/port/bindings/v8/v8_custom.cpp
@@ -1491,7 +1491,7 @@ NAMED_PROPERTY_GETTER(HTMLFormElement) {
}
// Second call may return different results from the first call,
// but if the first the size cannot be zero.
- Vector<RefPtr<Node>> elements;
+ Vector<RefPtr<Node> > elements;
imp->getNamedElements(v, elements);
ASSERT(elements.size() != 0);
if (elements.size() == 1) {
diff --git a/webkit/port/bindings/v8/v8_custom.h b/webkit/port/bindings/v8/v8_custom.h
index 6b94f81..83b0088 100644
--- a/webkit/port/bindings/v8/v8_custom.h
+++ b/webkit/port/bindings/v8/v8_custom.h
@@ -339,121 +339,6 @@ DECLARE_CALLBACK(SVGMatrixRotateFromVector)
bool single_shot);
};
-
-// A template of named property accessor of collections.
-template <class C>
-static v8::Handle<v8::Value> CollectionNamedPropertyGetter(
- v8::Local<v8::String> name, const v8::AccessorInfo& info) {
- return GetNamedPropertyOfCollection<C>(name, info.Holder(), info.Data());
-}
-
-
-// Returns named property of a collection.
-template <class C>
-static v8::Handle<v8::Value> GetNamedPropertyOfCollection(
- v8::Local<v8::String> name,
- v8::Local<v8::Object> object,
- v8::Local<v8::Value> data) {
- // TODO: assert object is a collection type
- ASSERT(V8Proxy::MaybeDOMWrapper(object));
-
- V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(object);
- C* collection = V8Proxy::FastToNativeObject<C>(t, object);
- String prop_name = ToWebCoreString(name);
- void* result = collection->namedItem(prop_name);
- if (!result) return v8::Handle<v8::Value>();
- V8ClassIndex::V8WrapperType type = V8ClassIndex::ToWrapperType(data);
- return V8Proxy::ToV8Object(type, result);
-}
-
-
-// A template returns whether a collection has a named property.
-// This function does not cause JS heap allocation.
-template <class C>
-static bool HasNamedPropertyOfCollection(v8::Local<v8::String> name,
- v8::Local<v8::Object> object,
- v8::Local<v8::Value> data) {
- // TODO: assert object is a collection type
- ASSERT(V8Proxy::MaybeDOMWrapper(object));
-
- V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(object);
- C* collection = V8Proxy::FastToNativeObject<C>(t, object);
- String prop_name = ToWebCoreString(name);
- void* result = collection->namedItem(prop_name);
- return result != NULL;
-}
-
-
-// A template of index interceptor of collections.
-template <class C>
-static v8::Handle<v8::Value> CollectionIndexedPropertyGetter(
- uint32_t index, const v8::AccessorInfo& info) {
- return GetIndexedPropertyOfCollection<C>(index, info.Holder(), info.Data());
-}
-
-
-// Returns the property at the index of a collection.
-template <class C>
-static v8::Handle<v8::Value> GetIndexedPropertyOfCollection(
- uint32_t index, v8::Local<v8::Object> object, v8::Local<v8::Value> data) {
- // TODO, assert that object must be a collection type
- ASSERT(V8Proxy::MaybeDOMWrapper(object));
- V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(object);
- C* collection = V8Proxy::FastToNativeObject<C>(t, object);
- void* result = collection->item(index);
- if (!result) return v8::Handle<v8::Value>();
- V8ClassIndex::V8WrapperType type = V8ClassIndex::ToWrapperType(data);
- return V8Proxy::ToV8Object(type, result);
-}
-
-
-// Get an array containing the names of indexed properties in a collection.
-template <class C>
-static v8::Handle<v8::Array> CollectionIndexedPropertyEnumerator(
- const v8::AccessorInfo& info) {
- ASSERT(V8Proxy::MaybeDOMWrapper(info.Holder()));
- V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(info.Holder());
- C* collection = V8Proxy::FastToNativeObject<C>(t, info.Holder());
- int length = collection->length();
- v8::Handle<v8::Array> properties = v8::Array::New(length);
- for (int i = 0; i < length; i++) {
- // TODO(ager): Do we need to check that the item function returns
- // a non-null value for this index?
- v8::Handle<v8::Integer> integer = v8::Integer::New(i);
- properties->Set(integer, integer);
- }
- return properties;
-}
-
-
-// Returns whether a collection has a property at a given index.
-// This function does not cause JS heap allocation.
-template <class C>
-static bool HasIndexedPropertyOfCollection(uint32_t index,
- v8::Local<v8::Object> object,
- v8::Local<v8::Value> data) {
- // TODO, assert that object must be a collection type
- ASSERT(V8Proxy::MaybeDOMWrapper(object));
- V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(object);
- C* collection = V8Proxy::FastToNativeObject<C>(t, object);
- void* result = collection->item(index);
- return result != NULL;
-}
-
-
-// A template for indexed getters on collections of strings that should return
-// null if the resulting string is a null string.
-template <class C>
-static v8::Handle<v8::Value> CollectionStringOrNullIndexedPropertyGetter(
- uint32_t index, const v8::AccessorInfo& info) {
- // TODO, assert that object must be a collection type
- ASSERT(V8Proxy::MaybeDOMWrapper(info.Holder()));
- V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(info.Holder());
- C* collection = V8Proxy::FastToNativeObject<C>(t, info.Holder());
- String result = collection->item(index);
- return v8StringOrNull(result);
-}
-
} // namespace WebCore
#endif // V8_CUSTOM_H__
diff --git a/webkit/port/bindings/v8/v8_proxy.cpp b/webkit/port/bindings/v8/v8_proxy.cpp
index be8c7ff..d6015b4 100644
--- a/webkit/port/bindings/v8/v8_proxy.cpp
+++ b/webkit/port/bindings/v8/v8_proxy.cpp
@@ -37,6 +37,7 @@
#include "v8_events.h"
#include "v8_binding.h"
#include "v8_custom.h"
+#include "v8_collection.h"
#include "v8_nodefilter.h"
#include "V8Bridge.h"
@@ -97,6 +98,7 @@
#include "base/stats_table.h"
#include "webkit/glue/glue_util.h"
+#include "webkit/glue/webkit_glue.h"
namespace WebCore {
@@ -192,12 +194,12 @@ template<class T>
class DOMPeerableWrapperMap : public DOMWrapperMap<T> {
public:
explicit DOMPeerableWrapperMap(v8::WeakReferenceCallback callback) :
- DOMWrapperMap(callback) { }
+ DOMWrapperMap<T>(callback) { }
// Get the JS wrapper object of an object.
v8::Persistent<v8::Object> get(T* obj) {
v8::Object* peer = static_cast<v8::Object*>(obj->peer());
- ASSERT(peer == map_.get(obj));
+ ASSERT(peer == this->map_.get(obj));
return peer ? v8::Persistent<v8::Object>(peer)
: v8::Persistent<v8::Object>();
}
@@ -210,7 +212,7 @@ class DOMPeerableWrapperMap : public DOMWrapperMap<T> {
void forget(T* obj) {
v8::Object* peer = static_cast<v8::Object*>(obj->peer());
- ASSERT(peer == map_.get(obj));
+ ASSERT(peer == this->map_.get(obj));
if (peer)
obj->setPeer(0);
DOMWrapperMap<T>::forget(obj);
diff --git a/webkit/port/bindings/v8/v8_proxy.h b/webkit/port/bindings/v8/v8_proxy.h
index 7bee90e..27c87df 100644
--- a/webkit/port/bindings/v8/v8_proxy.h
+++ b/webkit/port/bindings/v8/v8_proxy.h
@@ -486,20 +486,6 @@ class V8Proxy {
int m_recursion;
};
-
-// Add indexed getter to the function template for a collection.
-template <class T>
-static void SetCollectionIndexedGetter(v8::Handle<v8::FunctionTemplate> desc,
- V8ClassIndex::V8WrapperType type) {
- desc->InstanceTemplate()->SetIndexedPropertyHandler(
- CollectionIndexedPropertyGetter<T>,
- 0,
- 0,
- 0,
- CollectionIndexedPropertyEnumerator<T>,
- v8::External::New(reinterpret_cast<void*>(type)));
-}
-
template <int tag, typename T>
v8::Handle<v8::Value> V8Proxy::ConstructDOMObject(const v8::Arguments& args) {
if (!args.IsConstructCall()) {
@@ -514,58 +500,6 @@ v8::Handle<v8::Value> V8Proxy::ConstructDOMObject(const v8::Arguments& args) {
return args.Holder();
}
-// Add named getter to the function template for a collection.
-template <class T>
-static void SetCollectionNamedGetter(v8::Handle<v8::FunctionTemplate> desc,
- V8ClassIndex::V8WrapperType type) {
- desc->InstanceTemplate()->SetNamedPropertyHandler(
- CollectionNamedPropertyGetter<T>,
- 0,
- 0,
- 0,
- 0,
- v8::External::New(reinterpret_cast<void*>(type)));
-}
-
-
-// Add named and indexed getters to the function template for a collection.
-template <class T>
-static void SetCollectionIndexedAndNamedGetters(
- v8::Handle<v8::FunctionTemplate> desc, V8ClassIndex::V8WrapperType type) {
- // If we interceptor before object, accessing 'length' can trigger
- // a webkit assertion error.
- // (see fast/dom/HTMLDocument/document-special-properties.html
- desc->InstanceTemplate()->SetNamedPropertyHandler(
- CollectionNamedPropertyGetter<T>,
- 0,
- 0,
- 0,
- 0,
- v8::External::New(reinterpret_cast<void*>(type)));
- desc->InstanceTemplate()->SetIndexedPropertyHandler(
- CollectionIndexedPropertyGetter<T>,
- 0,
- 0,
- 0,
- CollectionIndexedPropertyEnumerator<T>,
- v8::External::New(reinterpret_cast<void*>(type)));
-}
-
-
-// Add indexed getter returning a string or null to a function template
-// for a collection.
-template <class T>
-static void SetCollectionStringOrNullIndexedGetter(
- v8::Handle<v8::FunctionTemplate> desc) {
- desc->InstanceTemplate()->SetIndexedPropertyHandler(
- CollectionStringOrNullIndexedPropertyGetter<T>,
- 0,
- 0,
- 0,
- CollectionIndexedPropertyEnumerator<T>);
-}
-
-
} // namespace WebCore
#endif // V8_PROXY_H__