2009-02-11 Dimitri Glazkov <dglazkov@chromium.org>
authordglazkov@chromium.org <dglazkov@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Feb 2009 22:35:19 +0000 (22:35 +0000)
committerdglazkov@chromium.org <dglazkov@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Feb 2009 22:35:19 +0000 (22:35 +0000)
        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23901
        Add HTML options/collections V8 custom bindings.

        * bindings/v8/custom/V8HTMLCollectionCustom.cpp: Added.
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp: Added.
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::removeElement):
        * bindings/v8/custom/V8HTMLSelectElementCustom.h: Added.
        * bindings/v8/custom/V8NamedNodesCollection.cpp: Added.
        (WebCore::V8NamedNodesCollection::item):
        (WebCore::V8NamedNodesCollection::itemWithName):
        * bindings/v8/custom/V8NamedNodesCollection.h: Added.
        (WebCore::V8NamedNodesCollection::V8NamedNodesCollection):
        (WebCore::V8NamedNodesCollection::length):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@40873 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp [new file with mode: 0644]
WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp [new file with mode: 0644]
WebCore/bindings/v8/custom/V8HTMLInputElementCustom.cpp
WebCore/bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp
WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp [new file with mode: 0644]
WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.h [new file with mode: 0644]
WebCore/bindings/v8/custom/V8NamedNodesCollection.cpp [new file with mode: 0644]
WebCore/bindings/v8/custom/V8NamedNodesCollection.h [new file with mode: 0644]

index 690e07f..24b6b58 100644 (file)
@@ -1,3 +1,35 @@
+2009-02-11  Dimitri Glazkov  <dglazkov@chromium.org>
+
+        Reviewed by Eric Seidel.
+
+        https://bugs.webkit.org/show_bug.cgi?id=23901
+        Add HTML options/collections V8 custom bindings.
+
+        * bindings/v8/custom/V8HTMLCollectionCustom.cpp: Added.
+        (WebCore::getNamedItems):
+        (WebCore::getItem):
+        (WebCore::NAMED_PROPERTY_GETTER):
+        (WebCore::CALLBACK_FUNC_DECL):
+        * bindings/v8/custom/V8HTMLFormElementCustom.cpp: Added.
+        (WebCore::NAMED_PROPERTY_GETTER):
+        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
+        (WebCore::ACCESSOR_GETTER):
+        (WebCore::ACCESSOR_SETTER):
+        (WebCore::CALLBACK_FUNC_DECL):
+        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
+        (WebCore::CALLBACK_FUNC_DECL):
+        (WebCore::ACCESSOR_SETTER):
+        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp: Added.
+        (WebCore::CALLBACK_FUNC_DECL):
+        (WebCore::removeElement):
+        * bindings/v8/custom/V8HTMLSelectElementCustom.h: Added.
+        * bindings/v8/custom/V8NamedNodesCollection.cpp: Added.
+        (WebCore::V8NamedNodesCollection::item):
+        (WebCore::V8NamedNodesCollection::itemWithName):
+        * bindings/v8/custom/V8NamedNodesCollection.h: Added.
+        (WebCore::V8NamedNodesCollection::V8NamedNodesCollection):
+        (WebCore::V8NamedNodesCollection::length):
+
 2009-02-11  Dimitri Dupuis-latour  <dupuislatour@apple.com>
 
         Added a preference to disable some Inspector's panels (rdar://6419624, rdar://6419645).
diff --git a/WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp
new file mode 100644 (file)
index 0000000..97a3b4f
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2009 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.
+ */
+
+#include "config.h"
+#include "HTMLCollection.h"
+
+#include "V8Binding.h"
+#include "V8CustomBinding.h"
+#include "V8NamedNodesCollection.h"
+#include "V8Proxy.h"
+
+namespace WebCore {
+
+static v8::Handle<v8::Value> getNamedItems(HTMLCollection* collection, String name)
+{
+    Vector<RefPtr<Node> > namedItems;
+    collection->namedItems(name, namedItems);
+
+    if (!namedItems.size())
+        return v8::Handle<v8::Value>();
+
+    if (namedItems.size() == 1)
+        return V8Proxy::NodeToV8Object(namedItems.at(0).get());
+
+    NodeList* list = new V8NamedNodesCollection(namedItems);
+    return V8Proxy::ToV8Object(V8ClassIndex::NODELIST, list);
+}
+
+static v8::Handle<v8::Value> getItem(HTMLCollection* collection, v8::Handle<v8::Value> argument)
+{
+    v8::Local<v8::Uint32> index = argument->ToArrayIndex();
+    if (index.IsEmpty()) {
+        v8::Handle<v8::Value> result = getNamedItems(collection, toWebCoreString(argument->ToString()));
+
+        if (result.IsEmpty())
+            return v8::Undefined();
+
+        return result;
+    }
+
+    RefPtr<Node> result = collection->item(index->Uint32Value());
+    return V8Proxy::NodeToV8Object(result.get());
+}
+
+NAMED_PROPERTY_GETTER(HTMLCollection)
+{
+    INC_STATS("DOM.HTMLCollection.NamedPropertyGetter");
+    // Search the prototype chain first.
+    v8::Handle<v8::Value> value = info.Holder()->GetRealNamedPropertyInPrototypeChain(name);
+
+    if (!value.IsEmpty())
+        return value;
+
+    // Search local callback properties next to find IDL defined
+    // properties.
+    if (info.Holder()->HasRealNamedCallbackProperty(name))
+        return v8::Handle<v8::Value>();
+
+    // Finally, search the DOM structure.
+    HTMLCollection* imp = V8Proxy::ToNativeObject<HTMLCollection>(V8ClassIndex::HTMLCOLLECTION, info.Holder());
+    return getNamedItems(imp, toWebCoreString(name));
+}
+
+CALLBACK_FUNC_DECL(HTMLCollectionItem)
+{
+    INC_STATS("DOM.HTMLCollection.item()");
+    HTMLCollection* imp = V8Proxy::ToNativeObject<HTMLCollection>(V8ClassIndex::HTMLCOLLECTION, args.Holder());
+    return getItem(imp, args[0]);
+}
+
+CALLBACK_FUNC_DECL(HTMLCollectionNamedItem)
+{
+    INC_STATS("DOM.HTMLCollection.namedItem()");
+    HTMLCollection* imp = V8Proxy::ToNativeObject<HTMLCollection>(V8ClassIndex::HTMLCOLLECTION, args.Holder());
+    v8::Handle<v8::Value> result = getNamedItems(imp, toWebCoreString(args[0]));
+
+    if (result.IsEmpty())
+        return v8::Undefined();
+
+    return result;
+}
+
+CALLBACK_FUNC_DECL(HTMLCollectionCallAsFunction)
+{
+    INC_STATS("DOM.HTMLCollection.callAsFunction()");
+    if (args.Length() < 1)
+        return v8::Undefined();
+
+    HTMLCollection* imp = V8Proxy::ToNativeObject<HTMLCollection>(V8ClassIndex::HTMLCOLLECTION, args.Holder());
+
+    if (args.Length() == 1)
+        return getItem(imp, args[0]);
+
+    // If there is a second argument it is the index of the item we want.
+    String name = toWebCoreString(args[0]);
+    v8::Local<v8::Uint32> index = args[1]->ToArrayIndex();
+    if (index.IsEmpty())
+        return v8::Undefined();
+
+    unsigned current = index->Uint32Value();
+    Node* node = imp->namedItem(name);
+    while (node) {
+        if (!current)
+            return V8Proxy::NodeToV8Object(node);
+
+        node = imp->nextNamedItem(name);
+        current--;
+    }
+
+    return v8::Undefined();
+}
+
+} // namespace WebCore
diff --git a/WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp
new file mode 100644 (file)
index 0000000..454bbc0
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2009 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.
+ */
+
+#include "config.h"
+#include "HTMLFormElement.h"
+
+#include "V8Binding.h"
+#include "V8CustomBinding.h"
+#include "V8NamedNodesCollection.h"
+#include "V8Proxy.h"
+
+namespace WebCore {
+
+NAMED_PROPERTY_GETTER(HTMLFormElement)
+{
+    INC_STATS("DOM.HTMLFormElement.NamedPropertyGetter");
+    HTMLFormElement* imp = V8Proxy::DOMWrapperToNode<HTMLFormElement>(info.Holder());
+    String v = toWebCoreString(name);
+
+    // Call getNamedElements twice, first time check if it has a value
+    // and let HTMLFormElement update its cache.
+    // See issue: 867404
+    {
+        Vector<RefPtr<Node> > elements;
+        imp->getNamedElements(v, elements);
+        if (elements.isEmpty())
+            return v8::Handle<v8::Value>();
+    }
+
+    // Second call may return different results from the first call,
+    // but if the first the size cannot be zero.
+    Vector<RefPtr<Node> > elements;
+    imp->getNamedElements(v, elements);
+    ASSERT(!elements.isEmpty());
+
+    if (elements.size() == 1)
+        return V8Proxy::NodeToV8Object(elements.at(0).get());
+
+    NodeList* collection = new V8NamedNodesCollection(elements);
+    return V8Proxy::ToV8Object(V8ClassIndex::NODELIST, collection);
+}
+
+} // namespace WebCore
index 1f2c6f3..628634d 100644 (file)
@@ -43,10 +43,8 @@ ACCESSOR_GETTER(HTMLInputElementSelectionStart)
     v8::Handle<v8::Object> holder = info.Holder();
     HTMLInputElement* imp = V8Proxy::DOMWrapperToNode<HTMLInputElement>(holder);
 
-    if (!imp->canHaveSelection()) {
-        V8Proxy::ThrowError(V8Proxy::TYPE_ERROR, "Accessing selectionStart on an input element that cannot have a selection.");
-        return v8::Undefined();
-    }
+    if (!imp->canHaveSelection())
+        return throwError("Accessing selectionStart on an input element that cannot have a selection.");
 
     int v = imp->selectionStart();
     return v8::Integer::New(v);
@@ -59,7 +57,7 @@ ACCESSOR_SETTER(HTMLInputElementSelectionStart)
     HTMLInputElement* imp = V8Proxy::DOMWrapperToNode<HTMLInputElement>(holder);
 
     if (!imp->canHaveSelection()) {
-        V8Proxy::ThrowError(V8Proxy::TYPE_ERROR, "Accessing selectionStart on an input element that cannot have a selection.");
+        throwError("Accessing selectionStart on an input element that cannot have a selection.");
         return;
     }
     imp->setSelectionStart(value->Int32Value());
@@ -71,10 +69,8 @@ ACCESSOR_GETTER(HTMLInputElementSelectionEnd)
     v8::Handle<v8::Object> holder = info.Holder();
     HTMLInputElement* imp = V8Proxy::DOMWrapperToNode<HTMLInputElement>(holder);
 
-    if (!imp->canHaveSelection()) {
-        V8Proxy::ThrowError(V8Proxy::TYPE_ERROR, "Accessing selectionEnd on an input element that cannot have a selection.");
-        return v8::Undefined();
-    }
+    if (!imp->canHaveSelection())
+        return throwError("Accessing selectionEnd on an input element that cannot have a selection.");
 
     int v = imp->selectionEnd();
     return v8::Integer::New(v);
@@ -87,9 +83,10 @@ ACCESSOR_SETTER(HTMLInputElementSelectionEnd)
     HTMLInputElement* imp = V8Proxy::DOMWrapperToNode<HTMLInputElement>(holder);
 
     if (!imp->canHaveSelection()) {
-        V8Proxy::ThrowError(V8Proxy::TYPE_ERROR, "Accessing selectionEnd on an input element that cannot have a selection.");
+        throwError("Accessing selectionEnd on an input element that cannot have a selection.");
         return;
     }
+
     imp->setSelectionEnd(value->Int32Value());
 }
 
@@ -99,10 +96,9 @@ CALLBACK_FUNC_DECL(HTMLInputElementSetSelectionRange)
     v8::Handle<v8::Object> holder = args.Holder();
     HTMLInputElement* imp = V8Proxy::DOMWrapperToNode<HTMLInputElement>(holder);
 
-    if (!imp->canHaveSelection()) {
-        V8Proxy::ThrowError(V8Proxy::TYPE_ERROR, "Calling setSelectionRange on an input element that cannot have a selection.");
-        return v8::Undefined();
-    }
+    if (!imp->canHaveSelection())
+        return throwError("Calling setSelectionRange on an input element that cannot have a selection.");
+
     int start = args[0]->Int32Value();
     int end = args[1]->Int32Value();
 
index 65d5e8f..c8f7f6e 100644 (file)
 #include "config.h"
 #include "HTMLOptionsCollection.h"
 
+#include "HTMLOptionElement.h"
+#include "HTMLSelectElement.h"
 #include "ExceptionCode.h"
 
 #include "V8Binding.h"
 #include "V8CustomBinding.h"
+#include "V8HTMLOptionElement.h"
+#include "V8HTMLSelectElementCustom.h"
 #include "V8Proxy.h"
 
 namespace WebCore {
 
+CALLBACK_FUNC_DECL(HTMLOptionsCollectionRemove)
+{
+    INC_STATS("DOM.HTMLOptionsCollection.remove()");
+    HTMLOptionsCollection* imp = V8Proxy::ToNativeObject<HTMLOptionsCollection>(V8ClassIndex::HTMLOPTIONSCOLLECTION, args.Holder());
+    HTMLSelectElement* base = static_cast<HTMLSelectElement*>(imp->base());
+    return removeElement(base, args);
+}
+
+CALLBACK_FUNC_DECL(HTMLOptionsCollectionAdd)
+{
+    INC_STATS("DOM.HTMLOptionsCollection.add()");
+    if (!V8HTMLOptionElement::HasInstance(args[0])) {
+        V8Proxy::SetDOMException(TYPE_MISMATCH_ERR);
+        return v8::Undefined();
+    }
+    HTMLOptionsCollection* imp = V8Proxy::ToNativeObject<HTMLOptionsCollection>(V8ClassIndex::HTMLOPTIONSCOLLECTION, args.Holder());
+    HTMLOptionElement* option = V8Proxy::DOMWrapperToNode<HTMLOptionElement>(args[0]);
+
+    ExceptionCode ec = 0;
+    if (args.Length() < 2)
+        imp->add(option, ec);
+    else {
+        bool ok;
+        v8::TryCatch try_catch;
+        int index = ToInt32(args[1], ok);
+
+        if (try_catch.HasCaught())
+            return v8::Undefined();
+
+        if (!ok)
+            ec = TYPE_MISMATCH_ERR;
+        else
+            imp->add(option, index, ec);
+    }
+
+    if (ec != 0)
+        V8Proxy::SetDOMException(ec);
+
+    return v8::Undefined();
+}
+
 ACCESSOR_GETTER(HTMLOptionsCollectionLength)
 {
     INC_STATS("DOM.HTMLOptionsCollection.length._get");
@@ -64,6 +109,7 @@ ACCESSOR_SETTER(HTMLOptionsCollectionLength)
     }
     if (!ec)
         imp->setLength(value->Uint32Value(), ec);
+
     V8Proxy::SetDOMException(ec);
 }
 
diff --git a/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp
new file mode 100644 (file)
index 0000000..97f7726
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2009 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.
+ */
+
+#include "config.h"
+#include "V8HTMLSelectElementCustom.h"
+
+#include "HTMLSelectElement.h"
+#include "HTMLOptionElement.h"
+
+#include "V8Binding.h"
+#include "V8CustomBinding.h"
+#include "V8HTMLOptionElement.h"
+#include "V8Proxy.h"
+
+namespace WebCore {
+
+CALLBACK_FUNC_DECL(HTMLSelectElementRemove)
+{
+    INC_STATS("DOM.HTMLSelectElement.remove");
+    HTMLSelectElement* imp = V8Proxy::DOMWrapperToNode<HTMLSelectElement>(args.Holder());
+    return removeElement(imp, args);
+}
+
+v8::Handle<v8::Value> removeElement(HTMLSelectElement* imp, const v8::Arguments& args) 
+{
+    if (V8HTMLOptionElement::HasInstance(args[0])) {
+        HTMLOptionElement* element = V8Proxy::DOMWrapperToNode<HTMLOptionElement>(args[0]);
+        imp->remove(element->index());
+        return v8::Undefined();
+    }
+
+    imp->remove(ToInt32(args[0]));
+    return v8::Undefined();
+}
+
+} // namespace WebCore
diff --git a/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.h b/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.h
new file mode 100644 (file)
index 0000000..b956ed8
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2008, 2009 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.
+ */
+
+#ifndef V8HTMLSelectElementCustom_h
+#define V8HTMLSelectElementCustom_h
+
+#include <v8.h>
+
+namespace WebCore {
+
+    class HTMLSelectElement;
+
+    v8::Handle<v8::Value> removeElement(HTMLSelectElement*, const v8::Arguments&);
+
+} // namespace WebCore
+
+#endif // V8HTMLSelectElementCustom_h
diff --git a/WebCore/bindings/v8/custom/V8NamedNodesCollection.cpp b/WebCore/bindings/v8/custom/V8NamedNodesCollection.cpp
new file mode 100644 (file)
index 0000000..0723498
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright (c) 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.
+
+#include "config.h"
+#include "V8NamedNodesCollection.h"
+
+#include "Element.h"
+#include "NamedAttrMap.h"
+
+namespace WebCore {
+
+Node* V8NamedNodesCollection::item(unsigned index) const
+{
+    if (index < m_nodes.size())
+        return m_nodes[index].get();
+    return 0;
+}
+
+Node* V8NamedNodesCollection::itemWithName(const AtomicString& id) const
+{
+    for (unsigned i = 0; i < m_nodes.size(); ++i) {
+        Node* node = m_nodes[i].get();
+        if (node->hasAttributes() && node->attributes()->id() == id)
+            return node;
+    }
+    return 0;
+}
+
+}  // namespace WebCore
diff --git a/WebCore/bindings/v8/custom/V8NamedNodesCollection.h b/WebCore/bindings/v8/custom/V8NamedNodesCollection.h
new file mode 100644 (file)
index 0000000..d13b7a8
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+* Copyright (C) 2009 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.
+*/
+
+#ifndef V8NamedNodesCollection_h
+#define V8NamedNodesCollection_h
+
+#include "Node.h"
+#include "NodeList.h"
+#include <wtf/RefPtr.h>
+#include <wtf/Vector.h>
+
+namespace WebCore {
+
+    class V8NamedNodesCollection : public NodeList {
+    public:
+        explicit V8NamedNodesCollection(const Vector<RefPtr<Node> >& nodes)
+            : m_nodes(nodes) { }
+        virtual unsigned length() const { return m_nodes.size(); }
+        virtual Node* item(unsigned) const;
+        virtual Node* itemWithName(const AtomicString&) const;
+
+    private:
+        Vector<RefPtr<Node> > m_nodes;
+    };
+
+}  // namespace WebCore
+
+#endif  // V8NamedNodesCollection_h