diff --git a/WebKit/win/ChangeLog b/WebKit/win/ChangeLog index e8bac36a1361516c99985658d79531404e9639f1..4ac19fa70def713ddfa9f36f53c67b2acdf0ba60 100644 --- a/WebKit/win/ChangeLog +++ b/WebKit/win/ChangeLog @@ -1,3 +1,94 @@ +2010-03-03 Alice Liu + + Reviewed by Jon Honeycutt. + + Add a way to get an iframe's content frame + + * DOMCoreClasses.cpp: + (DOMElement::createInstance): + Added case for DOMHTMLIFrameElement + * DOMHTMLClasses.cpp: + Adding the few DOMHTMLIFrameElement functions definitions that have + distinct implementations (all others just call parent implementation) + (DOMHTMLIFrameElement::QueryInterface): + (DOMHTMLIFrameElement::contentFrame): + * DOMHTMLClasses.h: + Most of these function declarations have definitions that just call the parent implementation + (DOMHTMLIFrameElement::DOMHTMLIFrameElement): + (DOMHTMLIFrameElement::AddRef): + (DOMHTMLIFrameElement::Release): + (DOMHTMLIFrameElement::throwException): + (DOMHTMLIFrameElement::callWebScriptMethod): + (DOMHTMLIFrameElement::evaluateWebScript): + (DOMHTMLIFrameElement::removeWebScriptKey): + (DOMHTMLIFrameElement::stringRepresentation): + (DOMHTMLIFrameElement::webScriptValueAtIndex): + (DOMHTMLIFrameElement::setWebScriptValueAtIndex): + (DOMHTMLIFrameElement::setException): + (DOMHTMLIFrameElement::nodeName): + (DOMHTMLIFrameElement::nodeValue): + (DOMHTMLIFrameElement::setNodeValue): + (DOMHTMLIFrameElement::nodeType): + (DOMHTMLIFrameElement::parentNode): + (DOMHTMLIFrameElement::childNodes): + (DOMHTMLIFrameElement::firstChild): + (DOMHTMLIFrameElement::lastChild): + (DOMHTMLIFrameElement::previousSibling): + (DOMHTMLIFrameElement::nextSibling): + (DOMHTMLIFrameElement::attributes): + (DOMHTMLIFrameElement::ownerDocument): + (DOMHTMLIFrameElement::insertBefore): + (DOMHTMLIFrameElement::replaceChild): + (DOMHTMLIFrameElement::removeChild): + (DOMHTMLIFrameElement::appendChild): + (DOMHTMLIFrameElement::hasChildNodes): + (DOMHTMLIFrameElement::cloneNode): + (DOMHTMLIFrameElement::normalize): + (DOMHTMLIFrameElement::isSupported): + (DOMHTMLIFrameElement::namespaceURI): + (DOMHTMLIFrameElement::prefix): + (DOMHTMLIFrameElement::setPrefix): + (DOMHTMLIFrameElement::localName): + (DOMHTMLIFrameElement::hasAttributes): + (DOMHTMLIFrameElement::isSameNode): + (DOMHTMLIFrameElement::isEqualNode): + (DOMHTMLIFrameElement::textContent): + (DOMHTMLIFrameElement::setTextContent): + (DOMHTMLIFrameElement::tagName): + (DOMHTMLIFrameElement::getAttribute): + (DOMHTMLIFrameElement::setAttribute): + (DOMHTMLIFrameElement::removeAttribute): + (DOMHTMLIFrameElement::getAttributeNode): + (DOMHTMLIFrameElement::setAttributeNode): + (DOMHTMLIFrameElement::removeAttributeNode): + (DOMHTMLIFrameElement::getElementsByTagName): + (DOMHTMLIFrameElement::getAttributeNS): + (DOMHTMLIFrameElement::setAttributeNS): + (DOMHTMLIFrameElement::removeAttributeNS): + (DOMHTMLIFrameElement::getAttributeNodeNS): + (DOMHTMLIFrameElement::setAttributeNodeNS): + (DOMHTMLIFrameElement::getElementsByTagNameNS): + (DOMHTMLIFrameElement::hasAttribute): + (DOMHTMLIFrameElement::hasAttributeNS): + (DOMHTMLIFrameElement::focus): + (DOMHTMLIFrameElement::blur): + (DOMHTMLIFrameElement::idName): + (DOMHTMLIFrameElement::setIdName): + (DOMHTMLIFrameElement::title): + (DOMHTMLIFrameElement::setTitle): + (DOMHTMLIFrameElement::lang): + (DOMHTMLIFrameElement::setLang): + (DOMHTMLIFrameElement::dir): + (DOMHTMLIFrameElement::setDir): + (DOMHTMLIFrameElement::className): + (DOMHTMLIFrameElement::setClassName): + (DOMHTMLIFrameElement::innerHTML): + (DOMHTMLIFrameElement::setInnerHTML): + (DOMHTMLIFrameElement::innerText): + (DOMHTMLIFrameElement::setInnerText): + * Interfaces/DOMHTML.idl: + Added IDOMHTMLIFrameElement interface + 2010-03-03 Chris Marrin Reviewed by Simon Fraser. diff --git a/WebKit/win/DOMCoreClasses.cpp b/WebKit/win/DOMCoreClasses.cpp index 3a979fab96d979978f57b57de664e8e6e41ed666..4e8af6101f4f877b5d6e41f51688d1e21bf2223f 100644 --- a/WebKit/win/DOMCoreClasses.cpp +++ b/WebKit/win/DOMCoreClasses.cpp @@ -1336,14 +1336,17 @@ IDOMElement* DOMElement::createInstance(WebCore::Element* e) if (e->hasTagName(formTag)) { DOMHTMLFormElement* newElement = new DOMHTMLFormElement(e); hr = newElement->QueryInterface(IID_IDOMElement, (void**)&domElement); - } else if (e->hasTagName(selectTag)) { - DOMHTMLSelectElement* newElement = new DOMHTMLSelectElement(e); + } else if (e->hasTagName(iframeTag)) { + DOMHTMLIFrameElement* newElement = new DOMHTMLIFrameElement(e); + hr = newElement->QueryInterface(IID_IDOMElement, (void**)&domElement); + } else if (e->hasTagName(inputTag)) { + DOMHTMLInputElement* newElement = new DOMHTMLInputElement(e); hr = newElement->QueryInterface(IID_IDOMElement, (void**)&domElement); } else if (e->hasTagName(optionTag)) { DOMHTMLOptionElement* newElement = new DOMHTMLOptionElement(e); hr = newElement->QueryInterface(IID_IDOMElement, (void**)&domElement); - } else if (e->hasTagName(inputTag)) { - DOMHTMLInputElement* newElement = new DOMHTMLInputElement(e); + } else if (e->hasTagName(selectTag)) { + DOMHTMLSelectElement* newElement = new DOMHTMLSelectElement(e); hr = newElement->QueryInterface(IID_IDOMElement, (void**)&domElement); } else if (e->hasTagName(textareaTag)) { DOMHTMLTextAreaElement* newElement = new DOMHTMLTextAreaElement(e); diff --git a/WebKit/win/DOMHTMLClasses.cpp b/WebKit/win/DOMHTMLClasses.cpp index 4889ba9ddca70b070398f5e5a1888766962dbbef..f9634ff8fc38ac61d8e35f673148153f8528ec53 100644 --- a/WebKit/win/DOMHTMLClasses.cpp +++ b/WebKit/win/DOMHTMLClasses.cpp @@ -27,6 +27,7 @@ #include "WebKitDLL.h" #include "DOMHTMLClasses.h" #include "COMPtr.h" +#include "WebFrame.h" #pragma warning(push, 0) #include @@ -36,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -1587,3 +1589,33 @@ HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::isUserEdited( *result = TRUE; return S_OK; } + +// DOMHTMLIFrameElement - IUnknown -------------------------------------------------- + +HRESULT STDMETHODCALLTYPE DOMHTMLIFrameElement::QueryInterface(REFIID riid, void** ppvObject) +{ + *ppvObject = 0; + if (IsEqualGUID(riid, IID_IDOMHTMLIFrameElement)) + *ppvObject = static_cast(this); + else + return DOMHTMLElement::QueryInterface(riid, ppvObject); + + AddRef(); + return S_OK; +} + +// DOMHTMLIFrameElement ------------------------------------------------------------- + +HRESULT STDMETHODCALLTYPE DOMHTMLIFrameElement::contentFrame( + /* [retval][out] */ IWebFrame **result) +{ + if (!result) + return E_POINTER; + *result = 0; + ASSERT(m_element && m_element->hasTagName(iframeTag)); + HTMLIFrameElement* iFrameElement = static_cast(m_element); + COMPtr webFrame = kit(iFrameElement->contentFrame()); + if (!webFrame) + return E_FAIL; + return webFrame.copyRefTo(result); +} diff --git a/WebKit/win/DOMHTMLClasses.h b/WebKit/win/DOMHTMLClasses.h index f520c3c4ea4399da2a6accd0d27033d2e678cd2e..baeecc91de9a2e42e8562c1c1a16a6a5db39484f 100644 --- a/WebKit/win/DOMHTMLClasses.h +++ b/WebKit/win/DOMHTMLClasses.h @@ -2356,4 +2356,266 @@ public: /* [retval][out] */ BOOL *result); }; +class DOMHTMLIFrameElement : public DOMHTMLElement, public IDOMHTMLIFrameElement +{ +protected: + DOMHTMLIFrameElement(); +public: + DOMHTMLIFrameElement(WebCore::Element* e) : DOMHTMLElement(e) {} + + // IUnknown + virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject); + virtual ULONG STDMETHODCALLTYPE AddRef(void) { return DOMHTMLElement::AddRef(); } + virtual ULONG STDMETHODCALLTYPE Release(void) { return DOMHTMLElement::Release(); } + + // IWebScriptObject + virtual HRESULT STDMETHODCALLTYPE throwException( + /* [in] */ BSTR exceptionMessage, + /* [retval][out] */ BOOL *result) { return DOMHTMLElement::throwException(exceptionMessage, result); } + + virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod( + /* [in] */ BSTR name, + /* [size_is][in] */ const VARIANT args[ ], + /* [in] */ int cArgs, + /* [retval][out] */ VARIANT *result) { return DOMHTMLElement::callWebScriptMethod(name, args, cArgs, result); } + + virtual HRESULT STDMETHODCALLTYPE evaluateWebScript( + /* [in] */ BSTR script, + /* [retval][out] */ VARIANT *result) { return DOMHTMLElement::evaluateWebScript(script, result); } + + virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey( + /* [in] */ BSTR name) { return DOMHTMLElement::removeWebScriptKey(name); } + + virtual HRESULT STDMETHODCALLTYPE stringRepresentation( + /* [retval][out] */ BSTR* stringRepresentation) { return DOMHTMLElement::stringRepresentation(stringRepresentation); } + + virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex( + /* [in] */ unsigned int index, + /* [retval][out] */ VARIANT *result) { return DOMHTMLElement::webScriptValueAtIndex(index, result); } + + virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex( + /* [in] */ unsigned int index, + /* [in] */ VARIANT val) { return DOMHTMLElement::setWebScriptValueAtIndex(index, val); } + + virtual HRESULT STDMETHODCALLTYPE setException( + /* [in] */ BSTR description) { return DOMHTMLElement::setException(description); } + + // IDOMNode + virtual HRESULT STDMETHODCALLTYPE nodeName( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::nodeName(result); } + + virtual HRESULT STDMETHODCALLTYPE nodeValue( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::nodeValue(result); } + + virtual HRESULT STDMETHODCALLTYPE setNodeValue( + /* [in] */ BSTR value) { return DOMHTMLElement::setNodeValue(value); } + + virtual HRESULT STDMETHODCALLTYPE nodeType( + /* [retval][out] */ unsigned short *result) { return DOMHTMLElement::nodeType(result); } + + virtual HRESULT STDMETHODCALLTYPE parentNode( + /* [retval][out] */ IDOMNode **result) { return DOMHTMLElement::parentNode(result); } + + virtual HRESULT STDMETHODCALLTYPE childNodes( + /* [retval][out] */ IDOMNodeList **result) { return DOMHTMLElement::childNodes(result); } + + virtual HRESULT STDMETHODCALLTYPE firstChild( + /* [retval][out] */ IDOMNode **result) { return DOMHTMLElement::firstChild(result); } + + virtual HRESULT STDMETHODCALLTYPE lastChild( + /* [retval][out] */ IDOMNode **result) { return DOMHTMLElement::lastChild(result); } + + virtual HRESULT STDMETHODCALLTYPE previousSibling( + /* [retval][out] */ IDOMNode **result) { return DOMHTMLElement::previousSibling(result); } + + virtual HRESULT STDMETHODCALLTYPE nextSibling( + /* [retval][out] */ IDOMNode **result) { return DOMHTMLElement::nextSibling(result); } + + virtual HRESULT STDMETHODCALLTYPE attributes( + /* [retval][out] */ IDOMNamedNodeMap **result) { return DOMHTMLElement::attributes(result); } + + virtual HRESULT STDMETHODCALLTYPE ownerDocument( + /* [retval][out] */ IDOMDocument **result) { return DOMHTMLElement::ownerDocument(result); } + + virtual HRESULT STDMETHODCALLTYPE insertBefore( + /* [in] */ IDOMNode *newChild, + /* [in] */ IDOMNode *refChild, + /* [retval][out] */ IDOMNode **result) { return DOMHTMLElement::insertBefore(newChild, refChild, result); } + + virtual HRESULT STDMETHODCALLTYPE replaceChild( + /* [in] */ IDOMNode *newChild, + /* [in] */ IDOMNode *oldChild, + /* [retval][out] */ IDOMNode **result) { return DOMHTMLElement::replaceChild(newChild, oldChild, result); } + + virtual HRESULT STDMETHODCALLTYPE removeChild( + /* [in] */ IDOMNode *oldChild, + /* [retval][out] */ IDOMNode **result) { return DOMHTMLElement::removeChild(oldChild, result); } + + virtual HRESULT STDMETHODCALLTYPE appendChild( + /* [in] */ IDOMNode *oldChild, + /* [retval][out] */ IDOMNode **result) { return DOMHTMLElement::appendChild(oldChild, result); } + + virtual HRESULT STDMETHODCALLTYPE hasChildNodes( + /* [retval][out] */ BOOL *result) { return DOMHTMLElement::hasChildNodes(result); } + + virtual HRESULT STDMETHODCALLTYPE cloneNode( + /* [in] */ BOOL deep, + /* [retval][out] */ IDOMNode **result) { return DOMHTMLElement::cloneNode(deep, result); } + + virtual HRESULT STDMETHODCALLTYPE normalize( void) { return DOMHTMLElement::normalize(); } + + virtual HRESULT STDMETHODCALLTYPE isSupported( + /* [in] */ BSTR feature, + /* [in] */ BSTR version, + /* [retval][out] */ BOOL *result) { return DOMHTMLElement::isSupported(feature, version, result); } + + virtual HRESULT STDMETHODCALLTYPE namespaceURI( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::namespaceURI(result); } + + virtual HRESULT STDMETHODCALLTYPE prefix( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::prefix(result); } + + virtual HRESULT STDMETHODCALLTYPE setPrefix( + /* [in] */ BSTR prefix) { return DOMHTMLElement::setPrefix(prefix); } + + virtual HRESULT STDMETHODCALLTYPE localName( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::localName(result); } + + virtual HRESULT STDMETHODCALLTYPE hasAttributes( + /* [retval][out] */ BOOL *result) { return DOMHTMLElement::hasAttributes(result); } + + virtual HRESULT STDMETHODCALLTYPE isSameNode( + /* [in] */ IDOMNode* other, + /* [retval][out] */ BOOL* result) { return DOMHTMLElement::isSameNode(other, result); } + + virtual HRESULT STDMETHODCALLTYPE isEqualNode( + /* [in] */ IDOMNode* other, + /* [retval][out] */ BOOL* result) { return DOMHTMLElement::isEqualNode(other, result); } + + virtual HRESULT STDMETHODCALLTYPE textContent( + /* [retval][out] */ BSTR* result) { return DOMHTMLElement::textContent(result); } + + virtual HRESULT STDMETHODCALLTYPE setTextContent( + /* [in] */ BSTR text) { return DOMHTMLElement::setTextContent(text); } + + // IDOMElement + virtual HRESULT STDMETHODCALLTYPE tagName( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::tagName(result); } + + virtual HRESULT STDMETHODCALLTYPE getAttribute( + /* [in] */ BSTR name, + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::getAttribute(name, result); } + + virtual HRESULT STDMETHODCALLTYPE setAttribute( + /* [in] */ BSTR name, + /* [in] */ BSTR value) { return DOMHTMLElement::setAttribute(name, value); } + + virtual HRESULT STDMETHODCALLTYPE removeAttribute( + /* [in] */ BSTR name) { return DOMHTMLElement::removeAttribute(name); } + + virtual HRESULT STDMETHODCALLTYPE getAttributeNode( + /* [in] */ BSTR name, + /* [retval][out] */ IDOMAttr **result) { return DOMHTMLElement::getAttributeNode(name, result); } + + virtual HRESULT STDMETHODCALLTYPE setAttributeNode( + /* [in] */ IDOMAttr *newAttr, + /* [retval][out] */ IDOMAttr **result) { return DOMHTMLElement::setAttributeNode(newAttr, result); } + + virtual HRESULT STDMETHODCALLTYPE removeAttributeNode( + /* [in] */ IDOMAttr *oldAttr, + /* [retval][out] */ IDOMAttr **result) { return DOMHTMLElement::removeAttributeNode(oldAttr, result); } + + virtual HRESULT STDMETHODCALLTYPE getElementsByTagName( + /* [in] */ BSTR name, + /* [retval][out] */ IDOMNodeList **result) { return DOMHTMLElement::getElementsByTagName(name, result); } + + virtual HRESULT STDMETHODCALLTYPE getAttributeNS( + /* [in] */ BSTR namespaceURI, + /* [in] */ BSTR localName, + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::getAttributeNS(namespaceURI, localName, result); } + + virtual HRESULT STDMETHODCALLTYPE setAttributeNS( + /* [in] */ BSTR namespaceURI, + /* [in] */ BSTR qualifiedName, + /* [in] */ BSTR value) { return DOMHTMLElement::setAttributeNS(namespaceURI, qualifiedName, value); } + + virtual HRESULT STDMETHODCALLTYPE removeAttributeNS( + /* [in] */ BSTR namespaceURI, + /* [in] */ BSTR localName) { return DOMHTMLElement::removeAttributeNS(namespaceURI, localName); } + + virtual HRESULT STDMETHODCALLTYPE getAttributeNodeNS( + /* [in] */ BSTR namespaceURI, + /* [in] */ BSTR localName, + /* [retval][out] */ IDOMAttr **result) { return DOMHTMLElement::getAttributeNodeNS(namespaceURI, localName, result); } + + virtual HRESULT STDMETHODCALLTYPE setAttributeNodeNS( + /* [in] */ IDOMAttr *newAttr, + /* [retval][out] */ IDOMAttr **result) { return DOMHTMLElement::setAttributeNodeNS(newAttr, result); } + + virtual HRESULT STDMETHODCALLTYPE getElementsByTagNameNS( + /* [in] */ BSTR namespaceURI, + /* [in] */ BSTR localName, + /* [retval][out] */ IDOMNodeList **result) { return DOMHTMLElement::getElementsByTagNameNS(namespaceURI, localName, result); } + + virtual HRESULT STDMETHODCALLTYPE hasAttribute( + /* [in] */ BSTR name, + /* [retval][out] */ BOOL *result) { return DOMHTMLElement::hasAttribute(name, result); } + + virtual HRESULT STDMETHODCALLTYPE hasAttributeNS( + /* [in] */ BSTR namespaceURI, + /* [in] */ BSTR localName, + /* [retval][out] */ BOOL *result) { return DOMHTMLElement::hasAttributeNS(namespaceURI, localName, result); } + + virtual HRESULT STDMETHODCALLTYPE focus( void) { return DOMHTMLElement::focus(); } + + virtual HRESULT STDMETHODCALLTYPE blur( void) { return DOMHTMLElement::blur(); } + + // IDOMHTMLElement + virtual HRESULT STDMETHODCALLTYPE idName( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::idName(result); } + + virtual HRESULT STDMETHODCALLTYPE setIdName( + /* [in] */ BSTR idName) { return DOMHTMLElement::setIdName(idName); } + + virtual HRESULT STDMETHODCALLTYPE title( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::title(result); } + + virtual HRESULT STDMETHODCALLTYPE setTitle( + /* [in] */ BSTR title) { return DOMHTMLElement::setTitle(title); } + + virtual HRESULT STDMETHODCALLTYPE lang( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::lang(result); } + + virtual HRESULT STDMETHODCALLTYPE setLang( + /* [in] */ BSTR lang) { return DOMHTMLElement::setLang(lang); } + + virtual HRESULT STDMETHODCALLTYPE dir( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::dir(result); } + + virtual HRESULT STDMETHODCALLTYPE setDir( + /* [in] */ BSTR dir) { return DOMHTMLElement::setDir(dir); } + + virtual HRESULT STDMETHODCALLTYPE className( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::className(result); } + + virtual HRESULT STDMETHODCALLTYPE setClassName( + /* [in] */ BSTR className) { return DOMHTMLElement::setClassName(className); } + + virtual HRESULT STDMETHODCALLTYPE innerHTML( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::innerHTML(result); } + + virtual HRESULT STDMETHODCALLTYPE setInnerHTML( + /* [in] */ BSTR html) { return DOMHTMLElement::setInnerHTML(html); } + + virtual HRESULT STDMETHODCALLTYPE innerText( + /* [retval][out] */ BSTR *result) { return DOMHTMLElement::innerText(result); } + + virtual HRESULT STDMETHODCALLTYPE setInnerText( + /* [in] */ BSTR text) { return DOMHTMLElement::setInnerText(text); } + + // IDOMHTMLIFrameElement + virtual HRESULT STDMETHODCALLTYPE contentFrame( + /* [retval][out] */ IWebFrame **result); +}; + #endif diff --git a/WebKit/win/Interfaces/DOMHTML.idl b/WebKit/win/Interfaces/DOMHTML.idl index 7ccb682e9fd07f6c9ee373f38ccfad7eb8c20456..0ee651b3f6c9df4cf5eff83d6582994f00a9b05c 100644 --- a/WebKit/win/Interfaces/DOMHTML.idl +++ b/WebKit/win/Interfaces/DOMHTML.idl @@ -37,6 +37,7 @@ interface IDOMDocument; interface IDOMElement; interface IDOMNode; interface IDOMNodeList; +interface IWebFrame; /* @interface DOMHTMLCollection : DOMObject @@ -933,3 +934,17 @@ interface IDOMHTMLTextAreaElement : IDOMHTMLElement */ HRESULT select(); } + +/* + @interface DOMHTMLIFrameElement : DOMHTMLElement +*/ +[ + object, + oleautomation, + uuid(8CFFB1DA-7BA5-4cf7-B7E6-80583354855B), + pointer_default(unique) +] +interface IDOMHTMLIFrameElement : IDOMHTMLElement +{ + HRESULT contentFrame([out, retval] IWebFrame** result); +}