From 56f32e51acde0c806770521ced124627c4644ac2 Mon Sep 17 00:00:00 2001 From: "dglazkov@chromium.org" Date: Wed, 11 Feb 2009 22:35:19 +0000 Subject: [PATCH] 2009-02-11 Dimitri Glazkov 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 | 32 ++++ .../v8/custom/V8HTMLCollectionCustom.cpp | 140 ++++++++++++++++++ .../v8/custom/V8HTMLFormElementCustom.cpp | 70 +++++++++ .../v8/custom/V8HTMLInputElementCustom.cpp | 24 ++- .../custom/V8HTMLOptionsCollectionCustom.cpp | 46 ++++++ .../v8/custom/V8HTMLSelectElementCustom.cpp | 63 ++++++++ .../v8/custom/V8HTMLSelectElementCustom.h | 45 ++++++ .../v8/custom/V8NamedNodesCollection.cpp | 55 +++++++ .../v8/custom/V8NamedNodesCollection.h | 55 +++++++ 9 files changed, 516 insertions(+), 14 deletions(-) create mode 100644 WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp create mode 100644 WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp create mode 100644 WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp create mode 100644 WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.h create mode 100644 WebCore/bindings/v8/custom/V8NamedNodesCollection.cpp create mode 100644 WebCore/bindings/v8/custom/V8NamedNodesCollection.h diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog index 690e07fbea15..24b6b581290b 100644 --- a/WebCore/ChangeLog +++ b/WebCore/ChangeLog @@ -1,3 +1,35 @@ +2009-02-11 Dimitri Glazkov + + 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 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 index 000000000000..97a3b4f7eeba --- /dev/null +++ b/WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp @@ -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 getNamedItems(HTMLCollection* collection, String name) +{ + Vector > namedItems; + collection->namedItems(name, namedItems); + + if (!namedItems.size()) + return v8::Handle(); + + 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 getItem(HTMLCollection* collection, v8::Handle argument) +{ + v8::Local index = argument->ToArrayIndex(); + if (index.IsEmpty()) { + v8::Handle result = getNamedItems(collection, toWebCoreString(argument->ToString())); + + if (result.IsEmpty()) + return v8::Undefined(); + + return result; + } + + RefPtr 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 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(); + + // Finally, search the DOM structure. + HTMLCollection* imp = V8Proxy::ToNativeObject(V8ClassIndex::HTMLCOLLECTION, info.Holder()); + return getNamedItems(imp, toWebCoreString(name)); +} + +CALLBACK_FUNC_DECL(HTMLCollectionItem) +{ + INC_STATS("DOM.HTMLCollection.item()"); + HTMLCollection* imp = V8Proxy::ToNativeObject(V8ClassIndex::HTMLCOLLECTION, args.Holder()); + return getItem(imp, args[0]); +} + +CALLBACK_FUNC_DECL(HTMLCollectionNamedItem) +{ + INC_STATS("DOM.HTMLCollection.namedItem()"); + HTMLCollection* imp = V8Proxy::ToNativeObject(V8ClassIndex::HTMLCOLLECTION, args.Holder()); + v8::Handle 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(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 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 index 000000000000..454bbc0cb93d --- /dev/null +++ b/WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp @@ -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(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 > elements; + imp->getNamedElements(v, elements); + if (elements.isEmpty()) + return v8::Handle(); + } + + // Second call may return different results from the first call, + // but if the first the size cannot be zero. + Vector > 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 diff --git a/WebCore/bindings/v8/custom/V8HTMLInputElementCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLInputElementCustom.cpp index 1f2c6f3ac865..628634d2af37 100644 --- a/WebCore/bindings/v8/custom/V8HTMLInputElementCustom.cpp +++ b/WebCore/bindings/v8/custom/V8HTMLInputElementCustom.cpp @@ -43,10 +43,8 @@ ACCESSOR_GETTER(HTMLInputElementSelectionStart) v8::Handle holder = info.Holder(); HTMLInputElement* imp = V8Proxy::DOMWrapperToNode(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(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 holder = info.Holder(); HTMLInputElement* imp = V8Proxy::DOMWrapperToNode(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(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 holder = args.Holder(); HTMLInputElement* imp = V8Proxy::DOMWrapperToNode(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(); diff --git a/WebCore/bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp index 65d5e8f0d88d..c8f7f6ee196d 100644 --- a/WebCore/bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp +++ b/WebCore/bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp @@ -31,14 +31,59 @@ #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(V8ClassIndex::HTMLOPTIONSCOLLECTION, args.Holder()); + HTMLSelectElement* base = static_cast(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(V8ClassIndex::HTMLOPTIONSCOLLECTION, args.Holder()); + HTMLOptionElement* option = V8Proxy::DOMWrapperToNode(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 index 000000000000..97f772604778 --- /dev/null +++ b/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp @@ -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(args.Holder()); + return removeElement(imp, args); +} + +v8::Handle removeElement(HTMLSelectElement* imp, const v8::Arguments& args) +{ + if (V8HTMLOptionElement::HasInstance(args[0])) { + HTMLOptionElement* element = V8Proxy::DOMWrapperToNode(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 index 000000000000..b956ed8ef86f --- /dev/null +++ b/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.h @@ -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 + +namespace WebCore { + + class HTMLSelectElement; + + v8::Handle 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 index 000000000000..07234983fea3 --- /dev/null +++ b/WebCore/bindings/v8/custom/V8NamedNodesCollection.cpp @@ -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 index 000000000000..d13b7a8cf296 --- /dev/null +++ b/WebCore/bindings/v8/custom/V8NamedNodesCollection.h @@ -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 +#include + +namespace WebCore { + + class V8NamedNodesCollection : public NodeList { + public: + explicit V8NamedNodesCollection(const Vector >& 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 > m_nodes; + }; + +} // namespace WebCore + +#endif // V8NamedNodesCollection_h -- 2.36.0