ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

htmlframe.c
Go to the documentation of this file.
00001 /*
00002  * Copyright 2010 Jacek Caban for CodeWeavers
00003  *
00004  * This library is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU Lesser General Public
00006  * License as published by the Free Software Foundation; either
00007  * version 2.1 of the License, or (at your option) any later version.
00008  *
00009  * This library is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012  * Lesser General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU Lesser General Public
00015  * License along with this library; if not, write to the Free Software
00016  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
00017  */
00018 
00019 #include <stdarg.h>
00020 
00021 #define COBJMACROS
00022 
00023 #include "windef.h"
00024 #include "winbase.h"
00025 #include "winuser.h"
00026 #include "ole2.h"
00027 
00028 #include "mshtml_private.h"
00029 
00030 #include "wine/debug.h"
00031 
00032 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
00033 
00034 typedef struct {
00035     HTMLFrameBase framebase;
00036     const IHTMLFrameElement3Vtbl  *lpIHTMLFrameElement3Vtbl;
00037 } HTMLFrameElement;
00038 
00039 #define HTMLFRAMEELEM3(x)   ((IHTMLFrameElement3*)  &(x)->lpIHTMLFrameElement3Vtbl)
00040 
00041 #define HTMLFRAME3_THIS(iface) DEFINE_THIS(HTMLFrameElement, IHTMLFrameElement3, iface)
00042 
00043 static HRESULT WINAPI HTMLFrameElement3_QueryInterface(IHTMLFrameElement3 *iface,
00044         REFIID riid, void **ppv)
00045 {
00046     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00047 
00048     return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->framebase.element.node), riid, ppv);
00049 }
00050 
00051 static ULONG WINAPI HTMLFrameElement3_AddRef(IHTMLFrameElement3 *iface)
00052 {
00053     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00054 
00055     return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->framebase.element.node));
00056 }
00057 
00058 static ULONG WINAPI HTMLFrameElement3_Release(IHTMLFrameElement3 *iface)
00059 {
00060     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00061 
00062     return IHTMLDOMNode_Release(HTMLDOMNODE(&This->framebase.element.node));
00063 }
00064 
00065 static HRESULT WINAPI HTMLFrameElement3_GetTypeInfoCount(IHTMLFrameElement3 *iface, UINT *pctinfo)
00066 {
00067     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00068     return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->framebase.element.node.dispex), pctinfo);
00069 }
00070 
00071 static HRESULT WINAPI HTMLFrameElement3_GetTypeInfo(IHTMLFrameElement3 *iface, UINT iTInfo,
00072         LCID lcid, ITypeInfo **ppTInfo)
00073 {
00074     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00075     return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->framebase.element.node.dispex), iTInfo, lcid, ppTInfo);
00076 }
00077 
00078 static HRESULT WINAPI HTMLFrameElement3_GetIDsOfNames(IHTMLFrameElement3 *iface, REFIID riid,
00079         LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
00080 {
00081     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00082     return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->framebase.element.node.dispex), riid, rgszNames, cNames, lcid, rgDispId);
00083 }
00084 
00085 static HRESULT WINAPI HTMLFrameElement3_Invoke(IHTMLFrameElement3 *iface, DISPID dispIdMember,
00086         REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
00087         VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
00088 {
00089     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00090     return IDispatchEx_Invoke(DISPATCHEX(&This->framebase.element.node.dispex), dispIdMember, riid,
00091             lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
00092 }
00093 
00094 static HRESULT WINAPI HTMLFrameElement3_get_contentDocument(IHTMLFrameElement3 *iface, IDispatch **p)
00095 {
00096     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00097     IHTMLDocument2 *doc;
00098     HRESULT hres;
00099 
00100     TRACE("(%p)->(%p)\n", This, p);
00101 
00102     if(!This->framebase.content_window) {
00103         FIXME("NULL window\n");
00104         return E_FAIL;
00105     }
00106 
00107     hres = IHTMLWindow2_get_document(HTMLWINDOW2(This->framebase.content_window), &doc);
00108     if(FAILED(hres))
00109         return hres;
00110 
00111     *p = doc ? (IDispatch*)doc : NULL;
00112     return S_OK;
00113 }
00114 
00115 static HRESULT WINAPI HTMLFrameElement3_put_src(IHTMLFrameElement3 *iface, BSTR v)
00116 {
00117     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00118     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
00119     return E_NOTIMPL;
00120 }
00121 
00122 static HRESULT WINAPI HTMLFrameElement3_get_src(IHTMLFrameElement3 *iface, BSTR *p)
00123 {
00124     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00125     FIXME("(%p)->(%p)\n", This, p);
00126     return E_NOTIMPL;
00127 }
00128 
00129 static HRESULT WINAPI HTMLFrameElement3_put_longDesc(IHTMLFrameElement3 *iface, BSTR v)
00130 {
00131     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00132     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
00133     return E_NOTIMPL;
00134 }
00135 
00136 static HRESULT WINAPI HTMLFrameElement3_get_longDesc(IHTMLFrameElement3 *iface, BSTR *p)
00137 {
00138     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00139     FIXME("(%p)->(%p)\n", This, p);
00140     return E_NOTIMPL;
00141 }
00142 
00143 static HRESULT WINAPI HTMLFrameElement3_put_frameBorder(IHTMLFrameElement3 *iface, BSTR v)
00144 {
00145     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00146     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
00147     return E_NOTIMPL;
00148 }
00149 
00150 static HRESULT WINAPI HTMLFrameElement3_get_frameBorder(IHTMLFrameElement3 *iface, BSTR *p)
00151 {
00152     HTMLFrameElement *This = HTMLFRAME3_THIS(iface);
00153     FIXME("(%p)->(%p)\n", This, p);
00154     return E_NOTIMPL;
00155 }
00156 
00157 #undef HTMLFRAME3_THIS
00158 
00159 static const IHTMLFrameElement3Vtbl HTMLFrameElement3Vtbl = {
00160     HTMLFrameElement3_QueryInterface,
00161     HTMLFrameElement3_AddRef,
00162     HTMLFrameElement3_Release,
00163     HTMLFrameElement3_GetTypeInfoCount,
00164     HTMLFrameElement3_GetTypeInfo,
00165     HTMLFrameElement3_GetIDsOfNames,
00166     HTMLFrameElement3_Invoke,
00167     HTMLFrameElement3_get_contentDocument,
00168     HTMLFrameElement3_put_src,
00169     HTMLFrameElement3_get_src,
00170     HTMLFrameElement3_put_longDesc,
00171     HTMLFrameElement3_get_longDesc,
00172     HTMLFrameElement3_put_frameBorder,
00173     HTMLFrameElement3_get_frameBorder
00174 };
00175 
00176 #define HTMLFRAME_NODE_THIS(iface) DEFINE_THIS2(HTMLFrameElement, framebase.element.node, iface)
00177 
00178 static HRESULT HTMLFrameElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
00179 {
00180     HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
00181 
00182     if(IsEqualGUID(&IID_IHTMLFrameElement3, riid)) {
00183         TRACE("(%p)->(IID_IHTMLFrameElement3 %p)\n", This, ppv);
00184         *ppv = HTMLFRAMEELEM3(This);
00185     }else {
00186         return HTMLFrameBase_QI(&This->framebase, riid, ppv);
00187     }
00188 
00189     IUnknown_AddRef((IUnknown*)*ppv);
00190     return S_OK;
00191 }
00192 
00193 static void HTMLFrameElement_destructor(HTMLDOMNode *iface)
00194 {
00195     HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
00196 
00197     HTMLFrameBase_destructor(&This->framebase);
00198 }
00199 
00200 static HRESULT HTMLFrameElement_get_document(HTMLDOMNode *iface, IDispatch **p)
00201 {
00202     HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
00203 
00204     if(!This->framebase.content_window || !This->framebase.content_window->doc) {
00205         *p = NULL;
00206         return S_OK;
00207     }
00208 
00209     *p = (IDispatch*)HTMLDOC(&This->framebase.content_window->doc->basedoc);
00210     IDispatch_AddRef(*p);
00211     return S_OK;
00212 }
00213 
00214 static HRESULT HTMLFrameElement_get_dispid(HTMLDOMNode *iface, BSTR name,
00215         DWORD grfdex, DISPID *pid)
00216 {
00217     HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
00218 
00219     if(!This->framebase.content_window)
00220         return DISP_E_UNKNOWNNAME;
00221 
00222     return search_window_props(This->framebase.content_window, name, grfdex, pid);
00223 }
00224 
00225 static HRESULT HTMLFrameElement_invoke(HTMLDOMNode *iface, DISPID id, LCID lcid,
00226         WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
00227 {
00228     HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
00229 
00230     if(!This->framebase.content_window) {
00231         ERR("no content window to invoke on\n");
00232         return E_FAIL;
00233     }
00234 
00235     return IDispatchEx_InvokeEx(DISPATCHEX(This->framebase.content_window), id, lcid, flags, params, res, ei, caller);
00236 }
00237 
00238 static HRESULT HTMLFrameElement_bind_to_tree(HTMLDOMNode *iface)
00239 {
00240     HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
00241     nsIDOMDocument *nsdoc;
00242     nsresult nsres;
00243     HRESULT hres;
00244 
00245     nsres = nsIDOMHTMLFrameElement_GetContentDocument(This->framebase.nsframe, &nsdoc);
00246     if(NS_FAILED(nsres) || !nsdoc) {
00247         ERR("GetContentDocument failed: %08x\n", nsres);
00248         return E_FAIL;
00249     }
00250 
00251     hres = set_frame_doc(&This->framebase, nsdoc);
00252     nsIDOMDocument_Release(nsdoc);
00253     return hres;
00254 }
00255 
00256 #undef HTMLFRAME_NODE_THIS
00257 
00258 static const NodeImplVtbl HTMLFrameElementImplVtbl = {
00259     HTMLFrameElement_QI,
00260     HTMLFrameElement_destructor,
00261     NULL,
00262     NULL,
00263     NULL,
00264     NULL,
00265     HTMLFrameElement_get_document,
00266     NULL,
00267     HTMLFrameElement_get_dispid,
00268     HTMLFrameElement_invoke,
00269     HTMLFrameElement_bind_to_tree
00270 };
00271 
00272 static const tid_t HTMLFrameElement_iface_tids[] = {
00273     HTMLELEMENT_TIDS,
00274     IHTMLFrameBase_tid,
00275     IHTMLFrameBase2_tid,
00276     IHTMLFrameElement3_tid,
00277     0
00278 };
00279 
00280 static dispex_static_data_t HTMLFrameElement_dispex = {
00281     NULL,
00282     DispHTMLFrameElement_tid,
00283     NULL,
00284     HTMLFrameElement_iface_tids
00285 };
00286 
00287 HTMLElement *HTMLFrameElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem)
00288 {
00289     HTMLFrameElement *ret;
00290 
00291     ret = heap_alloc_zero(sizeof(HTMLFrameElement));
00292 
00293     ret->framebase.element.node.vtbl = &HTMLFrameElementImplVtbl;
00294     ret->lpIHTMLFrameElement3Vtbl = &HTMLFrameElement3Vtbl;
00295 
00296     HTMLFrameBase_Init(&ret->framebase, doc, nselem, &HTMLFrameElement_dispex);
00297 
00298     return &ret->framebase.element;
00299 }

Generated on Mon May 28 2012 04:24:36 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.