1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef HTMLDataListOptionsCollection_h
6#define HTMLDataListOptionsCollection_h
7
8#include "core/html/HTMLCollection.h"
9#include "core/html/HTMLOptionElement.h"
10
11namespace blink {
12
13class HTMLDataListOptionsCollection : public HTMLCollection {
14public:
15    static PassRefPtrWillBeRawPtr<HTMLDataListOptionsCollection> create(ContainerNode& ownerNode, CollectionType type)
16    {
17        ASSERT_UNUSED(type, type == DataListOptions);
18        return adoptRefWillBeNoop(new HTMLDataListOptionsCollection(ownerNode));
19    }
20
21    HTMLOptionElement* item(unsigned offset) const { return toHTMLOptionElement(HTMLCollection::item(offset)); }
22
23    bool elementMatches(const HTMLElement&) const;
24private:
25    explicit HTMLDataListOptionsCollection(ContainerNode& ownerNode)
26        : HTMLCollection(ownerNode, DataListOptions, DoesNotOverrideItemAfter)
27    { }
28};
29
30DEFINE_TYPE_CASTS(HTMLDataListOptionsCollection, LiveNodeListBase, collection, collection->type() == DataListOptions, collection.type() == DataListOptions);
31
32inline bool HTMLDataListOptionsCollection::elementMatches(const HTMLElement& element) const
33{
34    if (isHTMLOptionElement(element)) {
35        const HTMLOptionElement& option = toHTMLOptionElement(element);
36        if (!option.isDisabledFormControl() && !option.value().isEmpty())
37            return true;
38    }
39    return false;
40}
41
42} // namespace blink
43
44#endif // HTMLDataListOptionsCollection_h
45