2728267cdeef6e3acaf0fb472e15d69ce3a2c17d
[WebKit-https.git] / WebKit / win / DOMHTMLClasses.cpp
1 /*
2  * Copyright (C) 2006, 2007 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 COMPUTER, 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 COMPUTER, 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 #include "config.h"
27 #include "WebKitDLL.h"
28 #include "DOMHTMLClasses.h"
29 #include "COMPtr.h"
30
31 #pragma warning(push, 0)
32 #include <WebCore/BString.h>
33 #include <WebCore/Document.h>
34 #include <WebCore/Element.h>
35 #include <WebCore/FrameView.h>
36 #include <WebCore/HTMLDocument.h>
37 #include <WebCore/HTMLFormElement.h>
38 #include <WebCore/HTMLInputElement.h>
39 #include <WebCore/HTMLNames.h>
40 #include <WebCore/HTMLOptionElement.h>
41 #include <WebCore/HTMLSelectElement.h>
42 #include <WebCore/HTMLTextAreaElement.h>
43 #include <WebCore/IntRect.h>
44 #include <WebCore/RenderObject.h>
45 #pragma warning(pop)
46
47 using namespace WebCore;
48 using namespace HTMLNames;
49
50 // DOMHTMLCollection
51
52 DOMHTMLCollection::DOMHTMLCollection(WebCore::HTMLCollection* c)
53 : m_collection(c)
54 {
55 }
56
57 IDOMHTMLCollection* DOMHTMLCollection::createInstance(WebCore::HTMLCollection* c)
58 {
59     if (!c)
60         return 0;
61
62     IDOMHTMLCollection* htmlCollection = 0;
63     DOMHTMLCollection* newCollection = new DOMHTMLCollection(c);
64     if (FAILED(newCollection->QueryInterface(IID_IDOMHTMLCollection, (void**)&htmlCollection))) {
65         delete newCollection;
66         return 0;
67     }
68
69     return htmlCollection;
70 }
71
72 // DOMHTMLCollection - IUnknown -----------------------------------------------
73
74 HRESULT STDMETHODCALLTYPE DOMHTMLCollection::QueryInterface(REFIID riid, void** ppvObject)
75 {
76     *ppvObject = 0;
77     if (IsEqualGUID(riid, IID_IDOMHTMLCollection))
78         *ppvObject = static_cast<IDOMHTMLCollection*>(this);
79     else
80         return DOMObject::QueryInterface(riid, ppvObject);
81
82     AddRef();
83     return S_OK;
84 }
85
86 // DOMHTMLCollection ----------------------------------------------------------
87
88 HRESULT STDMETHODCALLTYPE DOMHTMLCollection::length( 
89     /* [retval][out] */ UINT* result)
90 {
91     *result = 0;
92     if (!m_collection)
93         return E_POINTER;
94
95     *result = m_collection->length();
96     return S_OK;
97 }
98
99 HRESULT STDMETHODCALLTYPE DOMHTMLCollection::item( 
100     /* [in] */ UINT index,
101     /* [retval][out] */ IDOMNode** node)
102 {
103     *node = 0;
104     if (!m_collection)
105         return E_POINTER;
106
107     *node = DOMNode::createInstance(m_collection->item(index));
108     return *node ? S_OK : E_FAIL;
109 }
110
111 HRESULT STDMETHODCALLTYPE DOMHTMLCollection::namedItem( 
112     /* [in] */ BSTR /*name*/,
113     /* [retval][out] */ IDOMNode** /*node*/)
114 {
115     ASSERT_NOT_REACHED();
116     return E_NOTIMPL;
117 }
118
119 // DOMHTMLOptionsCollection - IUnknown ----------------------------------------
120
121 HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::QueryInterface(REFIID riid, void** ppvObject)
122 {
123     *ppvObject = 0;
124     if (IsEqualGUID(riid, IID_IDOMHTMLOptionsCollection))
125         *ppvObject = static_cast<IDOMHTMLOptionsCollection*>(this);
126     else
127         return DOMObject::QueryInterface(riid, ppvObject);
128
129     AddRef();
130     return S_OK;
131 }
132
133 // DOMHTMLOptionsCollection ---------------------------------------------------
134
135 HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::length( 
136     /* [retval][out] */ unsigned int* /*result*/)
137 {
138     ASSERT_NOT_REACHED();
139     return E_NOTIMPL;
140 }
141
142 HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::setLength( 
143     /* [in] */ unsigned int /*length*/)
144 {
145     ASSERT_NOT_REACHED();
146     return E_NOTIMPL;
147 }
148
149 HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::item( 
150     /* [in] */ unsigned int /*index*/,
151     /* [retval][out] */ IDOMNode** /*result*/)
152 {
153     ASSERT_NOT_REACHED();
154     return E_NOTIMPL;
155 }
156
157 HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::namedItem( 
158     /* [in] */ BSTR /*name*/,
159     /* [retval][out] */ IDOMNode* /*result*/)
160 {
161     ASSERT_NOT_REACHED();
162     return E_NOTIMPL;
163 }
164
165 // DOMHTMLDocument - IUnknown -------------------------------------------------
166
167 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::QueryInterface(REFIID riid, void** ppvObject)
168 {
169     *ppvObject = 0;
170     if (IsEqualGUID(riid, IID_IDOMHTMLDocument))
171         *ppvObject = static_cast<IDOMHTMLDocument*>(this);
172     else
173         return DOMDocument::QueryInterface(riid, ppvObject);
174
175     AddRef();
176     return S_OK;
177 }
178
179 // DOMHTMLDocument ------------------------------------------------------------
180
181 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::title( 
182         /* [retval][out] */ BSTR* /*result*/)
183 {
184     ASSERT_NOT_REACHED();
185     return E_NOTIMPL;
186 }
187     
188 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::setTitle( 
189         /* [in] */ BSTR /*title*/)
190 {
191     ASSERT_NOT_REACHED();
192     return E_NOTIMPL;
193 }
194     
195 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::referrer( 
196         /* [retval][out] */ BSTR* /*result*/)
197 {
198     ASSERT_NOT_REACHED();
199     return E_NOTIMPL;
200 }
201     
202 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::domain( 
203         /* [retval][out] */ BSTR* /*result*/)
204 {
205     ASSERT_NOT_REACHED();
206     return E_NOTIMPL;
207 }
208     
209 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::URL( 
210         /* [retval][out] */ BSTR* /*result*/)
211 {
212     ASSERT_NOT_REACHED();
213     return E_NOTIMPL;
214 }
215     
216 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::body( 
217         /* [retval][out] */ IDOMHTMLElement** bodyElement)
218 {
219     *bodyElement = 0;
220     if (!m_document || !m_document->isHTMLDocument())
221         return E_FAIL;
222
223     HTMLDocument* htmlDoc = static_cast<HTMLDocument*>(m_document);
224     COMPtr<IDOMElement> domEle = DOMHTMLElement::createInstance(htmlDoc->body());
225     if (domEle)
226         return domEle->QueryInterface(IID_IDOMHTMLElement, (void**) bodyElement);
227     return E_FAIL;
228 }
229     
230 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::setBody( 
231         /* [in] */ IDOMHTMLElement* /*body*/)
232 {
233     ASSERT_NOT_REACHED();
234     return E_NOTIMPL;
235 }
236     
237 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::images( 
238         /* [retval][out] */ IDOMHTMLCollection** /*collection*/)
239 {
240     ASSERT_NOT_REACHED();
241     return E_NOTIMPL;
242 }
243     
244 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::applets( 
245         /* [retval][out] */ IDOMHTMLCollection** /*collection*/)
246 {
247     ASSERT_NOT_REACHED();
248     return E_NOTIMPL;
249 }
250     
251 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::links( 
252         /* [retval][out] */ IDOMHTMLCollection** /*collection*/)
253 {
254     ASSERT_NOT_REACHED();
255     return E_NOTIMPL;
256 }
257     
258 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::forms( 
259         /* [retval][out] */ IDOMHTMLCollection** collection)
260 {
261     *collection = 0;
262     if (!m_document || !m_document->isHTMLDocument())
263         return E_FAIL;
264
265     HTMLDocument* htmlDoc = static_cast<HTMLDocument*>(m_document);
266     *collection = DOMHTMLCollection::createInstance(htmlDoc->forms().get());
267     return S_OK;
268 }
269     
270 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::anchors( 
271         /* [retval][out] */ IDOMHTMLCollection** /*collection*/)
272 {
273     ASSERT_NOT_REACHED();
274     return E_NOTIMPL;
275 }
276     
277 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::cookie( 
278         /* [retval][out] */ BSTR* /*result*/)
279 {
280     ASSERT_NOT_REACHED();
281     return E_NOTIMPL;
282 }
283     
284 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::setCookie( 
285         /* [in] */ BSTR /*cookie*/)
286 {
287     ASSERT_NOT_REACHED();
288     return E_NOTIMPL;
289 }
290     
291 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::open( void)
292 {
293     ASSERT_NOT_REACHED();
294     return E_NOTIMPL;
295 }
296     
297 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::close( void)
298 {
299     ASSERT_NOT_REACHED();
300     return E_NOTIMPL;
301 }
302     
303 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::write( 
304         /* [in] */ BSTR /*text*/)
305 {
306     ASSERT_NOT_REACHED();
307     return E_NOTIMPL;
308 }
309     
310 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::writeln( 
311         /* [in] */ BSTR /*text*/)
312 {
313     ASSERT_NOT_REACHED();
314     return E_NOTIMPL;
315 }
316     
317 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::getElementById_( 
318         /* [in] */ BSTR /*elementId*/,
319         /* [retval][out] */ IDOMElement** /*element*/)
320 {
321     ASSERT_NOT_REACHED();
322     return E_NOTIMPL;
323 }
324     
325 HRESULT STDMETHODCALLTYPE DOMHTMLDocument::getElementsByName( 
326         /* [in] */ BSTR /*elementName*/,
327         /* [retval][out] */ IDOMNodeList** /*nodeList*/)
328 {
329     ASSERT_NOT_REACHED();
330     return E_NOTIMPL;
331 }
332
333 // DOMHTMLElement - IUnknown --------------------------------------------------
334
335 HRESULT STDMETHODCALLTYPE DOMHTMLElement::QueryInterface(REFIID riid, void** ppvObject)
336 {
337     *ppvObject = 0;
338     if (IsEqualGUID(riid, IID_IDOMHTMLElement))
339         *ppvObject = static_cast<IDOMHTMLElement*>(this);
340     else
341         return DOMElement::QueryInterface(riid, ppvObject);
342
343     AddRef();
344     return S_OK;
345 }
346
347 // DOMHTMLElement -------------------------------------------------------------
348
349 HRESULT STDMETHODCALLTYPE DOMHTMLElement::idName( 
350         /* [retval][out] */ BSTR* /*result*/)
351 {
352     ASSERT_NOT_REACHED();
353     return E_NOTIMPL;
354 }
355     
356 HRESULT STDMETHODCALLTYPE DOMHTMLElement::setIdName( 
357         /* [in] */ BSTR /*idName*/)
358 {
359     ASSERT_NOT_REACHED();
360     return E_NOTIMPL;
361 }
362     
363 HRESULT STDMETHODCALLTYPE DOMHTMLElement::title( 
364         /* [retval][out] */ BSTR* /*result*/)
365 {
366     ASSERT_NOT_REACHED();
367     return E_NOTIMPL;
368 }
369     
370 HRESULT STDMETHODCALLTYPE DOMHTMLElement::setTitle( 
371         /* [in] */ BSTR /*title*/)
372 {
373     ASSERT_NOT_REACHED();
374     return E_NOTIMPL;
375 }
376     
377 HRESULT STDMETHODCALLTYPE DOMHTMLElement::lang( 
378         /* [retval][out] */ BSTR* /*result*/)
379 {
380     ASSERT_NOT_REACHED();
381     return E_NOTIMPL;
382 }
383     
384 HRESULT STDMETHODCALLTYPE DOMHTMLElement::setLang( 
385         /* [in] */ BSTR /*lang*/)
386 {
387     ASSERT_NOT_REACHED();
388     return E_NOTIMPL;
389 }
390     
391 HRESULT STDMETHODCALLTYPE DOMHTMLElement::dir( 
392         /* [retval][out] */ BSTR* /*result*/)
393 {
394     ASSERT_NOT_REACHED();
395     return E_NOTIMPL;
396 }
397     
398 HRESULT STDMETHODCALLTYPE DOMHTMLElement::setDir( 
399         /* [in] */ BSTR /*dir*/)
400 {
401     ASSERT_NOT_REACHED();
402     return E_NOTIMPL;
403 }
404     
405 HRESULT STDMETHODCALLTYPE DOMHTMLElement::className( 
406         /* [retval][out] */ BSTR* /*result*/)
407 {
408     ASSERT_NOT_REACHED();
409     return E_NOTIMPL;
410 }
411     
412 HRESULT STDMETHODCALLTYPE DOMHTMLElement::setClassName( 
413         /* [in] */ BSTR /*className*/)
414 {
415     ASSERT_NOT_REACHED();
416     return E_NOTIMPL;
417 }
418
419 HRESULT STDMETHODCALLTYPE DOMHTMLElement::innerHTML( 
420         /* [retval][out] */ BSTR* /*result*/)
421 {
422     ASSERT_NOT_REACHED();
423     return E_NOTIMPL;
424 }
425         
426 HRESULT STDMETHODCALLTYPE DOMHTMLElement::setInnerHTML( 
427         /* [in] */ BSTR /*html*/)
428 {
429     ASSERT_NOT_REACHED();
430     return E_NOTIMPL;
431 }
432         
433 HRESULT STDMETHODCALLTYPE DOMHTMLElement::innerText( 
434         /* [retval][out] */ BSTR* result)
435 {
436     ASSERT(m_element && m_element->isHTMLElement());
437     WebCore::String innerTextString = static_cast<HTMLElement*>(m_element)->innerText();
438     *result = BString(innerTextString.characters(), innerTextString.length()).release();
439     return S_OK;
440 }
441         
442 HRESULT STDMETHODCALLTYPE DOMHTMLElement::setInnerText( 
443         /* [in] */ BSTR text)
444 {
445     ASSERT(m_element && m_element->isHTMLElement());
446     HTMLElement* htmlEle = static_cast<HTMLElement*>(m_element);
447     WebCore::String textString(text, SysStringLen(text));
448     WebCore::ExceptionCode ec = 0;
449     htmlEle->setInnerText(textString, ec);
450     return S_OK;
451 }
452
453 // DOMHTMLFormElement - IUnknown ----------------------------------------------
454
455 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::QueryInterface(REFIID riid, void** ppvObject)
456 {
457     *ppvObject = 0;
458     if (IsEqualGUID(riid, IID_IDOMHTMLFormElement))
459         *ppvObject = static_cast<IDOMHTMLFormElement*>(this);
460     else
461         return DOMHTMLElement::QueryInterface(riid, ppvObject);
462
463     AddRef();
464     return S_OK;
465 }
466
467 // DOMHTMLFormElement ---------------------------------------------------------
468
469 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::elements( 
470         /* [retval][out] */ IDOMHTMLCollection** /*result*/)
471 {
472     ASSERT_NOT_REACHED();
473     return E_NOTIMPL;
474 }
475     
476 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::length( 
477         /* [retval][out] */ int* /*result*/)
478 {
479     ASSERT_NOT_REACHED();
480     return E_NOTIMPL;
481 }
482     
483 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::name( 
484         /* [retval][out] */ BSTR* /*result*/)
485 {
486     ASSERT_NOT_REACHED();
487     return E_NOTIMPL;
488 }
489     
490 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setName( 
491         /* [in] */ BSTR /*name*/)
492 {
493     ASSERT_NOT_REACHED();
494     return E_NOTIMPL;
495 }
496     
497 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::acceptCharset( 
498         /* [retval][out] */ BSTR* /*result*/)
499 {
500     ASSERT_NOT_REACHED();
501     return E_NOTIMPL;
502 }
503     
504 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setAcceptCharset( 
505         /* [in] */ BSTR /*acceptCharset*/)
506 {
507     ASSERT_NOT_REACHED();
508     return E_NOTIMPL;
509 }
510     
511 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::action( 
512         /* [retval][out] */ BSTR* /*result*/)
513 {
514     ASSERT_NOT_REACHED();
515     return E_NOTIMPL;
516 }
517     
518 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setAction( 
519         /* [in] */ BSTR /*action*/)
520 {
521     ASSERT_NOT_REACHED();
522     return E_NOTIMPL;
523 }
524     
525 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::encType( 
526         /* [retval][out] */ BSTR* /*result*/)
527 {
528     ASSERT_NOT_REACHED();
529     return E_NOTIMPL;
530 }
531     
532 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setEnctype( 
533         /* [retval][out] */ BSTR* /*encType*/)
534 {
535     ASSERT_NOT_REACHED();
536     return E_NOTIMPL;
537 }
538     
539 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::method( 
540         /* [retval][out] */ BSTR* /*method*/)
541 {
542     ASSERT_NOT_REACHED();
543     return E_NOTIMPL;
544 }
545     
546 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setMethod( 
547         /* [in] */ BSTR /*method*/)
548 {
549     ASSERT_NOT_REACHED();
550     return E_NOTIMPL;
551 }
552     
553 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::target( 
554         /* [retval][out] */ BSTR* /*result*/)
555 {
556     ASSERT_NOT_REACHED();
557     return E_NOTIMPL;
558 }
559     
560 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setTarget( 
561         /* [in] */ BSTR /*target*/)
562 {
563     ASSERT_NOT_REACHED();
564     return E_NOTIMPL;
565 }
566     
567 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::submit( void)
568 {
569     ASSERT_NOT_REACHED();
570     return E_NOTIMPL;
571 }
572     
573 HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::reset( void)
574 {
575     ASSERT_NOT_REACHED();
576     return E_NOTIMPL;
577 }
578
579 // DOMHTMLSelectElement - IUnknown ----------------------------------------------
580
581 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::QueryInterface(REFIID riid, void** ppvObject)
582 {
583     *ppvObject = 0;
584     if (IsEqualGUID(riid, IID_IDOMHTMLSelectElement))
585         *ppvObject = static_cast<IDOMHTMLSelectElement*>(this);
586     else if (IsEqualGUID(riid, IID_IFormsAutoFillTransitionSelect))
587         *ppvObject = static_cast<IFormsAutoFillTransitionSelect*>(this);
588     else
589         return DOMHTMLElement::QueryInterface(riid, ppvObject);
590
591     AddRef();
592     return S_OK;
593 }
594
595 // DOMHTMLSelectElement -------------------------------------------------------
596
597 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::type( 
598         /* [retval][out] */ BSTR* /*result*/)
599 {
600     ASSERT_NOT_REACHED();
601     return E_NOTIMPL;
602 }
603     
604 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::selectedIndex( 
605         /* [retval][out] */ int* /*result*/)
606 {
607     ASSERT_NOT_REACHED();
608     return E_NOTIMPL;
609 }
610     
611 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setSelectedIndx( 
612         /* [in] */ int /*selectedIndex*/)
613 {
614     ASSERT_NOT_REACHED();
615     return E_NOTIMPL;
616 }
617     
618 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::value( 
619         /* [retval][out] */ BSTR* /*result*/)
620 {
621     ASSERT_NOT_REACHED();
622     return E_NOTIMPL;
623 }
624     
625 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setValue( 
626         /* [in] */ BSTR /*value*/)
627 {
628     ASSERT_NOT_REACHED();
629     return E_NOTIMPL;
630 }
631     
632 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::length( 
633         /* [retval][out] */ int* /*result*/)
634 {
635     ASSERT_NOT_REACHED();
636     return E_NOTIMPL;
637 }
638     
639 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::form( 
640         /* [retval][out] */ IDOMHTMLFormElement** /*result*/)
641 {
642     ASSERT_NOT_REACHED();
643     return E_NOTIMPL;
644 }
645     
646 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::options( 
647         /* [retval][out] */ IDOMHTMLOptionsCollection** /*result*/)
648 {
649     ASSERT_NOT_REACHED();
650     return E_NOTIMPL;
651 }
652     
653 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::disabled( 
654         /* [retval][out] */ BOOL* /*result*/)
655 {
656     ASSERT_NOT_REACHED();
657     return E_NOTIMPL;
658 }
659     
660 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setDisabled( 
661         /* [in] */ BOOL /*disabled*/)
662 {
663     ASSERT_NOT_REACHED();
664     return E_NOTIMPL;
665 }
666     
667 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::multiple( 
668         /* [retval][out] */ BOOL* /*result*/)
669 {
670     ASSERT_NOT_REACHED();
671     return E_NOTIMPL;
672 }
673     
674 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setMultiple( 
675         /* [in] */ BOOL /*multiple*/)
676 {
677     ASSERT_NOT_REACHED();
678     return E_NOTIMPL;
679 }
680     
681 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::name( 
682         /* [retval][out] */ BSTR* /*result*/)
683 {
684     ASSERT_NOT_REACHED();
685     return E_NOTIMPL;
686 }
687     
688 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setName( 
689         /* [in] */ BSTR /*name*/)
690 {
691     ASSERT_NOT_REACHED();
692     return E_NOTIMPL;
693 }
694     
695 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::size( 
696         /* [retval][out] */ int* /*size*/)
697 {
698     ASSERT_NOT_REACHED();
699     return E_NOTIMPL;
700 }
701     
702 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setSize( 
703         /* [in] */ int /*size*/)
704 {
705     ASSERT_NOT_REACHED();
706     return E_NOTIMPL;
707 }
708     
709 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::tabIndex( 
710         /* [retval][out] */ int* /*result*/)
711 {
712     ASSERT_NOT_REACHED();
713     return E_NOTIMPL;
714 }
715     
716 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setTabIndex( 
717         /* [in] */ int /*tabIndex*/)
718 {
719     ASSERT_NOT_REACHED();
720     return E_NOTIMPL;
721 }
722     
723 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::add( 
724         /* [in] */ IDOMHTMLElement* /*element*/,
725         /* [in] */ IDOMHTMLElement* /*before*/)
726 {
727     ASSERT_NOT_REACHED();
728     return E_NOTIMPL;
729 }
730     
731 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::remove( 
732         /* [in] */ int /*index*/)
733 {
734     ASSERT_NOT_REACHED();
735     return E_NOTIMPL;
736 }
737     
738 // DOMHTMLSelectElement - IFormsAutoFillTransitionSelect ----------------------
739
740 HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::activateItemAtIndex( 
741     /* [in] */ int /*index*/)
742 {
743     ASSERT_NOT_REACHED();
744     return E_NOTIMPL;    
745 }
746
747 // DOMHTMLOptionElement - IUnknown --------------------------------------------
748
749 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::QueryInterface(REFIID riid, void** ppvObject)
750 {
751     *ppvObject = 0;
752     if (IsEqualGUID(riid, IID_IDOMHTMLOptionElement))
753         *ppvObject = static_cast<IDOMHTMLOptionElement*>(this);
754     else
755         return DOMHTMLElement::QueryInterface(riid, ppvObject);
756
757     AddRef();
758     return S_OK;
759 }
760
761 // DOMHTMLOptionElement -------------------------------------------------------
762
763 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::form( 
764         /* [retval][out] */ IDOMHTMLFormElement** /*result*/)
765 {
766     ASSERT_NOT_REACHED();
767     return E_NOTIMPL;
768 }
769     
770 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::defaultSelected( 
771         /* [retval][out] */ BOOL* /*result*/)
772 {
773     ASSERT_NOT_REACHED();
774     return E_NOTIMPL;
775 }
776     
777 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setDefaultSelected( 
778         /* [in] */ BOOL /*defaultSelected*/)
779 {
780     ASSERT_NOT_REACHED();
781     return E_NOTIMPL;
782 }
783     
784 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::text( 
785         /* [retval][out] */ BSTR* /*result*/)
786 {
787     ASSERT_NOT_REACHED();
788     return E_NOTIMPL;
789 }
790     
791 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::index( 
792         /* [retval][out] */ int* /*result*/)
793 {
794     ASSERT_NOT_REACHED();
795     return E_NOTIMPL;
796 }
797     
798 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::disabled( 
799         /* [retval][out] */ BOOL* /*result*/)
800 {
801     ASSERT_NOT_REACHED();
802     return E_NOTIMPL;
803 }
804     
805 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setDisabled( 
806         /* [in] */ BOOL /*disabled*/)
807 {
808     ASSERT_NOT_REACHED();
809     return E_NOTIMPL;
810 }
811     
812 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::label( 
813         /* [retval][out] */ BSTR* /*result*/)
814 {
815     ASSERT_NOT_REACHED();
816     return E_NOTIMPL;
817 }
818     
819 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setLabel( 
820         /* [in] */ BSTR /*label*/)
821 {
822     ASSERT_NOT_REACHED();
823     return E_NOTIMPL;
824 }
825     
826 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::selected( 
827         /* [retval][out] */ BOOL* /*result*/)
828 {
829     ASSERT_NOT_REACHED();
830     return E_NOTIMPL;
831 }
832     
833 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setSelected( 
834         /* [in] */ BOOL /*selected*/)
835 {
836     ASSERT_NOT_REACHED();
837     return E_NOTIMPL;
838 }
839     
840 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::value( 
841         /* [retval][out] */ BSTR* /*result*/)
842 {
843     ASSERT_NOT_REACHED();
844     return E_NOTIMPL;
845 }
846     
847 HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setValue( 
848         /* [in] */ BSTR /*value*/)
849 {
850     ASSERT_NOT_REACHED();
851     return E_NOTIMPL;
852 }
853
854 // DOMHTMLInputElement - IUnknown ----------------------------------------------
855
856 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::QueryInterface(REFIID riid, void** ppvObject)
857 {
858     *ppvObject = 0;
859     if (IsEqualGUID(riid, IID_IDOMHTMLInputElement))
860         *ppvObject = static_cast<IDOMHTMLInputElement*>(this);
861     else if (IsEqualGUID(riid, IID_IFormsAutoFillTransition))
862         *ppvObject = static_cast<IFormsAutoFillTransition*>(this);
863     else
864         return DOMHTMLElement::QueryInterface(riid, ppvObject);
865
866     AddRef();
867     return S_OK;
868 }
869
870 // DOMHTMLInputElement --------------------------------------------------------
871
872 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::defaultValue( 
873         /* [retval][out] */ BSTR* /*result*/)
874 {
875     ASSERT_NOT_REACHED();
876     return E_NOTIMPL;
877 }
878     
879 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setDefaultValue( 
880         /* [in] */ BSTR /*val*/)
881 {
882     ASSERT_NOT_REACHED();
883     return E_NOTIMPL;
884 }
885     
886 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::defaultChecked( 
887         /* [retval][out] */ BOOL* /*result*/)
888 {
889     ASSERT_NOT_REACHED();
890     return E_NOTIMPL;
891 }
892     
893 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setDefaultChecked( 
894         /* [in] */ BSTR /*checked*/)
895 {
896     ASSERT_NOT_REACHED();
897     return E_NOTIMPL;
898 }
899     
900 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::form( 
901         /* [retval][out] */ IDOMHTMLElement** /*result*/)
902 {
903     ASSERT_NOT_REACHED();
904     return E_NOTIMPL;
905 }
906     
907 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::accept( 
908         /* [retval][out] */ BSTR* /*result*/)
909 {
910     ASSERT_NOT_REACHED();
911     return E_NOTIMPL;
912 }
913     
914 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAccept( 
915         /* [in] */ BSTR /*accept*/)
916 {
917     ASSERT_NOT_REACHED();
918     return E_NOTIMPL;
919 }
920     
921 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::accessKey( 
922         /* [retval][out] */ BSTR* /*result*/)
923 {
924     ASSERT_NOT_REACHED();
925     return E_NOTIMPL;
926 }
927     
928 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAccessKey( 
929         /* [in] */ BSTR /*key*/)
930 {
931     ASSERT_NOT_REACHED();
932     return E_NOTIMPL;
933 }
934     
935 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::align( 
936         /* [retval][out] */ BSTR* /*result*/)
937 {
938     ASSERT_NOT_REACHED();
939     return E_NOTIMPL;
940 }
941     
942 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAlign( 
943         /* [in] */ BSTR /*align*/)
944 {
945     ASSERT_NOT_REACHED();
946     return E_NOTIMPL;
947 }
948     
949 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::alt( 
950         /* [retval][out] */ BSTR* /*result*/)
951 {
952     ASSERT_NOT_REACHED();
953     return E_NOTIMPL;
954 }
955     
956 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAlt( 
957         /* [in] */ BSTR /*alt*/)
958 {
959     ASSERT_NOT_REACHED();
960     return E_NOTIMPL;
961 }
962     
963 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::checked( 
964         /* [retval][out] */ BOOL* /*result*/)
965 {
966     ASSERT_NOT_REACHED();
967     return E_NOTIMPL;
968 }
969     
970 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setChecked( 
971         /* [in] */ BOOL /*checked*/)
972 {
973     ASSERT_NOT_REACHED();
974     return E_NOTIMPL;
975 }
976     
977 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::disabled( 
978         /* [retval][out] */ BOOL* result)
979 {
980     ASSERT(m_element && m_element->hasTagName(inputTag));
981     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
982     *result = inputElement->disabled() ? TRUE : FALSE;
983     return S_OK;
984 }
985     
986 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setDisabled( 
987         /* [in] */ BOOL /*disabled*/)
988 {
989     ASSERT_NOT_REACHED();
990     return E_NOTIMPL;
991 }
992     
993 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::maxLength( 
994         /* [retval][out] */ int* /*result*/)
995 {
996     ASSERT_NOT_REACHED();
997     return E_NOTIMPL;
998 }
999     
1000 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setMaxLength( 
1001         /* [in] */ int /*maxLength*/)
1002 {
1003     ASSERT_NOT_REACHED();
1004     return E_NOTIMPL;
1005 }
1006     
1007 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::name( 
1008         /* [retval][out] */ BSTR* /*name*/)
1009 {
1010     ASSERT_NOT_REACHED();
1011     return E_NOTIMPL;
1012 }
1013     
1014 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setName( 
1015         /* [in] */ BSTR /*name*/)
1016 {
1017     ASSERT_NOT_REACHED();
1018     return E_NOTIMPL;
1019 }
1020     
1021 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::readOnly( 
1022         /* [retval][out] */ BOOL* result)
1023 {
1024     ASSERT(m_element && m_element->hasTagName(inputTag));
1025     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
1026     *result = inputElement->readOnly() ? TRUE : FALSE;
1027     return S_OK;
1028 }
1029     
1030 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setReadOnly( 
1031         /* [in] */ BOOL /*readOnly*/)
1032 {
1033     ASSERT_NOT_REACHED();
1034     return E_NOTIMPL;
1035 }
1036     
1037 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::size( 
1038         /* [retval][out] */ unsigned int* /*result*/)
1039 {
1040     ASSERT_NOT_REACHED();
1041     return E_NOTIMPL;
1042 }
1043     
1044 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setSize( 
1045         /* [in] */ unsigned int /*size*/)
1046 {
1047     ASSERT_NOT_REACHED();
1048     return E_NOTIMPL;
1049 }
1050     
1051 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::src( 
1052         /* [retval][out] */ BSTR* /*result*/)
1053 {
1054     ASSERT_NOT_REACHED();
1055     return E_NOTIMPL;
1056 }
1057     
1058 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setSrc( 
1059         /* [in] */ BSTR /*src*/)
1060 {
1061     ASSERT_NOT_REACHED();
1062     return E_NOTIMPL;
1063 }
1064     
1065 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::tabIndex( 
1066         /* [retval][out] */ int* /*result*/)
1067 {
1068     ASSERT_NOT_REACHED();
1069     return E_NOTIMPL;
1070 }
1071     
1072 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setTabIndex( 
1073         /* [in] */ int /*tabIndex*/)
1074 {
1075     ASSERT_NOT_REACHED();
1076     return E_NOTIMPL;
1077 }
1078     
1079 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::type( 
1080         /* [retval][out] */ BSTR* /*result*/)
1081 {
1082     ASSERT_NOT_REACHED();
1083     return E_NOTIMPL;
1084 }
1085     
1086 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setType( 
1087         /* [in] */ BSTR type)
1088 {
1089     ASSERT(m_element && m_element->hasTagName(inputTag));
1090     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
1091     WebCore::String typeString(type, SysStringLen(type));
1092     inputElement->setType(typeString);
1093     return S_OK;
1094 }
1095     
1096 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::useMap( 
1097         /* [retval][out] */ BSTR* /*result*/)
1098 {
1099     ASSERT_NOT_REACHED();
1100     return E_NOTIMPL;
1101 }
1102     
1103 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setUseMap( 
1104         /* [in] */ BSTR /*useMap*/)
1105 {
1106     ASSERT_NOT_REACHED();
1107     return E_NOTIMPL;
1108 }
1109     
1110 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::value( 
1111         /* [retval][out] */ BSTR* result)
1112 {
1113     ASSERT(m_element && m_element->hasTagName(inputTag));
1114     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
1115     WebCore::String valueString = inputElement->value();
1116     *result = BString(valueString.characters(), valueString.length()).release();
1117     if (valueString.length() && !*result)
1118         return E_OUTOFMEMORY;
1119     return S_OK;
1120 }
1121     
1122 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setValue( 
1123         /* [in] */ BSTR value)
1124 {
1125     ASSERT(m_element && m_element->hasTagName(inputTag));
1126     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
1127     inputElement->setValue(String((UChar*) value, SysStringLen(value)));
1128     return S_OK;
1129 }
1130     
1131 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::select( void)
1132 {
1133     ASSERT(m_element && m_element->hasTagName(inputTag));
1134     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
1135     inputElement->select();
1136     return S_OK;
1137 }
1138     
1139 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::click( void)
1140 {
1141     ASSERT_NOT_REACHED();
1142     return E_NOTIMPL;
1143 }
1144
1145 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setSelectionStart( 
1146     /* [in] */ long start)
1147 {
1148     ASSERT(m_element && m_element->hasTagName(inputTag));
1149     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
1150     inputElement->setSelectionStart(start);
1151     return S_OK;
1152 }
1153
1154 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::selectionStart( 
1155     /* [retval][out] */ long *start)
1156 {
1157     ASSERT(m_element && m_element->hasTagName(inputTag));
1158     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
1159     *start = inputElement->selectionStart();
1160     return S_OK;
1161 }
1162
1163 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setSelectionEnd( 
1164     /* [in] */ long end)
1165 {
1166     ASSERT(m_element && m_element->hasTagName(inputTag));
1167     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
1168     inputElement->setSelectionEnd(end);
1169     return S_OK;
1170 }
1171
1172 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::selectionEnd( 
1173     /* [retval][out] */ long *end)
1174 {
1175     ASSERT(m_element && m_element->hasTagName(inputTag));
1176     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
1177     *end = inputElement->selectionEnd();
1178     return S_OK;
1179 }
1180
1181 // DOMHTMLInputElement -- IFormsAutoFillTransition ----------------------------
1182
1183 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::isTextField(
1184     /* [retval][out] */ BOOL* result)
1185 {
1186     ASSERT(m_element && m_element->hasTagName(inputTag));
1187     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
1188     *result = inputElement->isTextField() ? TRUE : FALSE;
1189     return S_OK;
1190 }
1191
1192 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::rectOnScreen( 
1193     /* [retval][out] */ LPRECT rect)
1194 {
1195     rect->left = rect->top = rect->right = rect->bottom = 0;
1196     RenderObject* renderer = m_element->renderer();
1197     FrameView* view = m_element->document()->view();
1198     if (!renderer || !view)
1199         return E_FAIL;
1200
1201     IntRect coreRect = renderer->absoluteBoundingBoxRect();
1202     coreRect.setLocation(view->contentsToWindow(coreRect.location()));
1203     rect->left = coreRect.x();
1204     rect->top = coreRect.y();
1205     rect->right = coreRect.right();
1206     rect->bottom = coreRect.bottom();
1207     return S_OK;
1208 }
1209
1210 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::replaceCharactersInRange( 
1211     /* [in] */ int /*startTarget*/,
1212     /* [in] */ int /*endTarget*/,
1213     /* [in] */ BSTR /*replacementString*/,
1214     /* [in] */ int /*index*/)
1215 {
1216     ASSERT_NOT_REACHED();
1217     return E_NOTIMPL;
1218 }
1219
1220 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::selectedRange( 
1221     /* [out] */ int* start,
1222     /* [out] */ int* end)
1223 {
1224     ASSERT(m_element && m_element->hasTagName(inputTag));
1225     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
1226     *start = inputElement->selectionStart();
1227     *end = inputElement->selectionEnd();
1228     return S_OK;
1229 }
1230
1231 HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAutofilled( 
1232     /* [in] */ BOOL filled)
1233 {
1234     ASSERT(m_element && m_element->hasTagName(inputTag));
1235     HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
1236     inputElement->setAutofilled(!!filled);
1237     return S_OK;
1238 }
1239
1240 // DOMHTMLTextAreaElement - IUnknown ----------------------------------------------
1241
1242 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::QueryInterface(REFIID riid, void** ppvObject)
1243 {
1244     *ppvObject = 0;
1245     if (IsEqualGUID(riid, IID_IDOMHTMLTextAreaElement))
1246         *ppvObject = static_cast<IDOMHTMLTextAreaElement*>(this);
1247     else
1248         return DOMHTMLElement::QueryInterface(riid, ppvObject);
1249
1250     AddRef();
1251     return S_OK;
1252 }
1253
1254 // DOMHTMLTextAreaElement -----------------------------------------------------
1255
1256 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::defaultValue( 
1257         /* [retval][out] */ BSTR* /*result*/)
1258 {
1259     ASSERT_NOT_REACHED();
1260     return E_NOTIMPL;
1261 }
1262     
1263 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setDefaultValue( 
1264         /* [in] */ BSTR /*val*/)
1265 {
1266     ASSERT_NOT_REACHED();
1267     return E_NOTIMPL;
1268 }
1269     
1270 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::form( 
1271         /* [retval][out] */ IDOMHTMLElement** /*result*/)
1272 {
1273     ASSERT_NOT_REACHED();
1274     return E_NOTIMPL;
1275 }
1276     
1277 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::accessKey( 
1278         /* [retval][out] */ BSTR* /*result*/)
1279 {
1280     ASSERT_NOT_REACHED();
1281     return E_NOTIMPL;
1282 }
1283     
1284 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setAccessKey( 
1285         /* [in] */ BSTR /*key*/)
1286 {
1287     ASSERT_NOT_REACHED();
1288     return E_NOTIMPL;
1289 }
1290     
1291 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::cols( 
1292         /* [retval][out] */ int* /*result*/)
1293 {
1294     ASSERT_NOT_REACHED();
1295     return E_NOTIMPL;
1296 }
1297     
1298 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setCols( 
1299         /* [in] */ int /*cols*/)
1300 {
1301     ASSERT_NOT_REACHED();
1302     return E_NOTIMPL;
1303 }
1304     
1305 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::disabled( 
1306         /* [retval][out] */ BOOL* /*result*/)
1307 {
1308     ASSERT_NOT_REACHED();
1309     return E_NOTIMPL;
1310 }
1311     
1312 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setDisabled( 
1313         /* [in] */ BOOL /*disabled*/)
1314 {
1315     ASSERT_NOT_REACHED();
1316     return E_NOTIMPL;
1317 }
1318     
1319 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::name( 
1320         /* [retval][out] */ BSTR* /*name*/)
1321 {
1322     ASSERT_NOT_REACHED();
1323     return E_NOTIMPL;
1324 }
1325     
1326 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setName( 
1327         /* [in] */ BSTR /*name*/)
1328 {
1329     ASSERT_NOT_REACHED();
1330     return E_NOTIMPL;
1331 }
1332     
1333 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::readOnly( 
1334         /* [retval][out] */ BOOL* /*result*/)
1335 {
1336     ASSERT_NOT_REACHED();
1337     return E_NOTIMPL;
1338 }
1339     
1340 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setReadOnly( 
1341         /* [in] */ BOOL /*readOnly*/)
1342 {
1343     ASSERT_NOT_REACHED();
1344     return E_NOTIMPL;
1345 }
1346     
1347 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::rows( 
1348         /* [retval][out] */ int* /*result*/)
1349 {
1350     ASSERT_NOT_REACHED();
1351     return E_NOTIMPL;
1352 }
1353     
1354 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setRows( 
1355         /* [in] */ int /*rows*/)
1356 {
1357     ASSERT_NOT_REACHED();
1358     return E_NOTIMPL;
1359 }
1360     
1361 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::tabIndex( 
1362         /* [retval][out] */ int* /*result*/)
1363 {
1364     ASSERT_NOT_REACHED();
1365     return E_NOTIMPL;
1366 }
1367     
1368 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setTabIndex( 
1369         /* [in] */ int /*tabIndex*/)
1370 {
1371     ASSERT_NOT_REACHED();
1372     return E_NOTIMPL;
1373 }
1374     
1375 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::type( 
1376         /* [retval][out] */ BSTR* /*result*/)
1377 {
1378     ASSERT_NOT_REACHED();
1379     return E_NOTIMPL;
1380 }
1381     
1382 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::value( 
1383         /* [retval][out] */ BSTR* result)
1384 {
1385     ASSERT(m_element && m_element->hasTagName(textareaTag));
1386     HTMLTextAreaElement* textareaElement = static_cast<HTMLTextAreaElement*>(m_element);
1387     WebCore::String valueString = textareaElement->value();
1388     *result = BString(valueString.characters(), valueString.length()).release();
1389     if (valueString.length() && !*result)
1390         return E_OUTOFMEMORY;
1391     return S_OK;
1392 }
1393     
1394 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setValue( 
1395         /* [in] */ BSTR value)
1396 {
1397     ASSERT(m_element && m_element->hasTagName(textareaTag));
1398     HTMLTextAreaElement* textareaElement = static_cast<HTMLTextAreaElement*>(m_element);
1399     textareaElement->setValue(String((UChar*) value, SysStringLen(value)));
1400     return S_OK;
1401 }
1402     
1403 HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::select( void)
1404 {
1405     ASSERT(m_element && m_element->hasTagName(textareaTag));
1406     HTMLTextAreaElement* textareaElement = static_cast<HTMLTextAreaElement*>(m_element);
1407     textareaElement->select();
1408     return S_OK;
1409 }