Move URL from WebCore to WTF
[WebKit-https.git] / Source / WebKitLegacy / mac / DOM / DOMHTMLSelectElement.mm
1 /*
2  * Copyright (C) 2004-2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import "DOMHTMLSelectElementInternal.h"
27
28 #import "DOMHTMLCollectionInternal.h"
29 #import "DOMHTMLElementInternal.h"
30 #import "DOMHTMLFormElementInternal.h"
31 #import "DOMHTMLOptionsCollectionInternal.h"
32 #import "DOMNodeInternal.h"
33 #import "DOMNodeListInternal.h"
34 #import "ExceptionHandlers.h"
35 #import <WebCore/HTMLCollection.h>
36 #import <WebCore/HTMLElement.h>
37 #import <WebCore/HTMLFormElement.h>
38 #import <WebCore/HTMLNames.h>
39 #import <WebCore/HTMLOptGroupElement.h>
40 #import <WebCore/HTMLOptionsCollection.h>
41 #import <WebCore/HTMLSelectElement.h>
42 #import <WebCore/JSExecState.h>
43 #import <WebCore/NameNodeList.h>
44 #import <WebCore/Node.h>
45 #import <WebCore/NodeList.h>
46 #import <WebCore/ThreadCheck.h>
47 #import <WebCore/WebScriptObjectPrivate.h>
48 #import <wtf/GetPtr.h>
49 #import <wtf/URL.h>
50
51 #define IMPL static_cast<WebCore::HTMLSelectElement*>(reinterpret_cast<WebCore::Node*>(_internal))
52
53 @implementation DOMHTMLSelectElement
54
55 - (BOOL)autofocus
56 {
57     WebCore::JSMainThreadNullState state;
58     return IMPL->hasAttributeWithoutSynchronization(WebCore::HTMLNames::autofocusAttr);
59 }
60
61 - (void)setAutofocus:(BOOL)newAutofocus
62 {
63     WebCore::JSMainThreadNullState state;
64     IMPL->setBooleanAttribute(WebCore::HTMLNames::autofocusAttr, newAutofocus);
65 }
66
67 - (BOOL)disabled
68 {
69     WebCore::JSMainThreadNullState state;
70     return IMPL->hasAttributeWithoutSynchronization(WebCore::HTMLNames::disabledAttr);
71 }
72
73 - (void)setDisabled:(BOOL)newDisabled
74 {
75     WebCore::JSMainThreadNullState state;
76     IMPL->setBooleanAttribute(WebCore::HTMLNames::disabledAttr, newDisabled);
77 }
78
79 - (DOMHTMLFormElement *)form
80 {
81     WebCore::JSMainThreadNullState state;
82     return kit(WTF::getPtr(IMPL->form()));
83 }
84
85 - (BOOL)multiple
86 {
87     WebCore::JSMainThreadNullState state;
88     return IMPL->multiple();
89 }
90
91 - (void)setMultiple:(BOOL)newMultiple
92 {
93     WebCore::JSMainThreadNullState state;
94     IMPL->setMultiple(newMultiple);
95 }
96
97 - (NSString *)name
98 {
99     WebCore::JSMainThreadNullState state;
100     return IMPL->getNameAttribute();
101 }
102
103 - (void)setName:(NSString *)newName
104 {
105     WebCore::JSMainThreadNullState state;
106     IMPL->setAttributeWithoutSynchronization(WebCore::HTMLNames::nameAttr, newName);
107 }
108
109 - (int)size
110 {
111     WebCore::JSMainThreadNullState state;
112     return IMPL->size();
113 }
114
115 - (void)setSize:(int)newSize
116 {
117     WebCore::JSMainThreadNullState state;
118     IMPL->setSize(newSize);
119 }
120
121 - (NSString *)type
122 {
123     WebCore::JSMainThreadNullState state;
124     return IMPL->type();
125 }
126
127 - (DOMHTMLOptionsCollection *)options
128 {
129     WebCore::JSMainThreadNullState state;
130     return kit(WTF::getPtr(IMPL->options()));
131 }
132
133 - (int)length
134 {
135     WebCore::JSMainThreadNullState state;
136     return IMPL->length();
137 }
138
139 - (int)selectedIndex
140 {
141     WebCore::JSMainThreadNullState state;
142     return IMPL->selectedIndex();
143 }
144
145 - (void)setSelectedIndex:(int)newSelectedIndex
146 {
147     WebCore::JSMainThreadNullState state;
148     IMPL->setSelectedIndex(newSelectedIndex);
149 }
150
151 - (NSString *)value
152 {
153     WebCore::JSMainThreadNullState state;
154     return IMPL->value();
155 }
156
157 - (void)setValue:(NSString *)newValue
158 {
159     WebCore::JSMainThreadNullState state;
160     IMPL->setValue(newValue);
161 }
162
163 - (BOOL)willValidate
164 {
165     WebCore::JSMainThreadNullState state;
166     return IMPL->willValidate();
167 }
168
169 - (DOMNode *)item:(unsigned)index
170 {
171     WebCore::JSMainThreadNullState state;
172     return kit(WTF::getPtr(IMPL->item(index)));
173 }
174
175 - (DOMNode *)namedItem:(NSString *)inName
176 {
177     WebCore::JSMainThreadNullState state;
178     return kit(WTF::getPtr(IMPL->namedItem(inName)));
179 }
180
181 - (void)add:(DOMHTMLElement *)element before:(DOMHTMLElement *)before
182 {
183     WebCore::JSMainThreadNullState state;
184     if (!element)
185         raiseTypeErrorException();
186
187     auto& coreElement = *core(element);
188     Variant<RefPtr<WebCore::HTMLOptionElement>, RefPtr<WebCore::HTMLOptGroupElement>> variantElement;
189     if (is<WebCore::HTMLOptionElement>(coreElement))
190         variantElement = &downcast<WebCore::HTMLOptionElement>(coreElement);
191     else if (is<WebCore::HTMLOptGroupElement>(coreElement))
192         variantElement = &downcast<WebCore::HTMLOptGroupElement>(coreElement);
193     else
194         raiseTypeErrorException();
195     raiseOnDOMError(IMPL->add(WTFMove(variantElement), WebCore::HTMLSelectElement::HTMLElementOrInt(core(before))));
196 }
197
198 - (void)remove:(int)index
199 {
200     WebCore::JSMainThreadNullState state;
201     IMPL->remove(index);
202 }
203
204 @end
205
206 @implementation DOMHTMLSelectElement (DOMHTMLSelectElementDeprecated)
207
208 - (void)add:(DOMHTMLElement *)element :(DOMHTMLElement *)before
209 {
210     [self add:element before:before];
211 }
212
213 @end
214
215 WebCore::HTMLSelectElement* core(DOMHTMLSelectElement *wrapper)
216 {
217     return wrapper ? reinterpret_cast<WebCore::HTMLSelectElement*>(wrapper->_internal) : 0;
218 }