void NSContainer_Release(NSContainer *This) { TRACE("(%p)\n", This); ShowWindow(This->hwnd, SW_HIDE); SetParent(This->hwnd, NULL); nsIBaseWindow_SetVisibility(This->window, FALSE); nsIBaseWindow_Destroy(This->window); nsIWebBrowser_SetContainerWindow(This->webbrowser, NULL); nsIWebBrowser_Release(This->webbrowser); This->webbrowser = NULL; nsIWebNavigation_Release(This->navigation); This->navigation = NULL; nsIBaseWindow_Release(This->window); This->window = NULL; nsIWebBrowserFocus_Release(This->focus); This->focus = NULL; if(This->hwnd) { DestroyWindow(This->hwnd); This->hwnd = NULL; } nsIWebBrowserChrome_Release(NSWBCHROME(This)); }
static nsresult NSAPI nsWebBrowserChrome_QueryInterface(nsIWebBrowserChrome *iface, nsIIDRef riid, nsQIResult result) { NSContainer *This = NSWBCHROME_THIS(iface); *result = NULL; if(IsEqualGUID(&IID_nsISupports, riid)) { TRACE("(%p)->(IID_nsISupports, %p)\n", This, result); *result = NSWBCHROME(This); }else if(IsEqualGUID(&IID_nsIWebBrowserChrome, riid)) { TRACE("(%p)->(IID_nsIWebBrowserChrome, %p)\n", This, result); *result = NSWBCHROME(This); }else if(IsEqualGUID(&IID_nsIContextMenuListener, riid)) { TRACE("(%p)->(IID_nsIContextMenuListener, %p)\n", This, result); *result = NSCML(This); }else if(IsEqualGUID(&IID_nsIURIContentListener, riid)) { TRACE("(%p)->(IID_nsIURIContentListener %p)\n", This, result); *result = NSURICL(This); }else if(IsEqualGUID(&IID_nsIEmbeddingSiteWindow, riid)) { TRACE("(%p)->(IID_nsIEmbeddingSiteWindow %p)\n", This, result); *result = NSEMBWNDS(This); }else if(IsEqualGUID(&IID_nsITooltipListener, riid)) { TRACE("(%p)->(IID_nsITooltipListener %p)\n", This, result); *result = NSTOOLTIP(This); }else if(IsEqualGUID(&IID_nsIInterfaceRequestor, riid)) { TRACE("(%p)->(IID_nsIInterfaceRequestor %p)\n", This, result); *result = NSIFACEREQ(This); }else if(IsEqualGUID(&IID_nsIWeakReference, riid)) { TRACE("(%p)->(IID_nsIWeakReference %p)\n", This, result); *result = NSWEAKREF(This); }else if(IsEqualGUID(&IID_nsISupportsWeakReference, riid)) { TRACE("(%p)->(IID_nsISupportsWeakReference %p)\n", This, result); *result = NSSUPWEAKREF(This); } if(*result) { nsIWebBrowserChrome_AddRef(NSWBCHROME(This)); return NS_OK; } TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), result); return NS_NOINTERFACE; }
static nsresult NSAPI nsInterfaceRequestor_GetInterface(nsIInterfaceRequestor *iface, nsIIDRef riid, nsQIResult result) { NSContainer *This = NSIFACEREQ_THIS(iface); if(IsEqualGUID(&IID_nsIDOMWindow, riid)) { TRACE("(%p)->(IID_nsIDOMWindow %p)\n", This, result); return nsIWebBrowser_GetContentDOMWindow(This->webbrowser, (nsIDOMWindow**)result); } return nsIWebBrowserChrome_QueryInterface(NSWBCHROME(This), riid, result); }
static nsrefcnt NSAPI nsWebBrowserChrome_Release(nsIWebBrowserChrome *iface) { NSContainer *This = NSWBCHROME_THIS(iface); LONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) ref=%ld\n", This, ref); if(!ref) { if(This->parent) nsIWebBrowserChrome_Release(NSWBCHROME(This->parent)); mshtml_free(This); } return ref; }
static nsrefcnt NSAPI nsURIContentListener_Release(nsIURIContentListener *iface) { NSContainer *This = NSURICL_THIS(iface); return nsIWebBrowserChrome_Release(NSWBCHROME(This)); }
static nsrefcnt NSAPI nsContextMenuListener_AddRef(nsIContextMenuListener *iface) { NSContainer *This = NSCML_THIS(iface); return nsIWebBrowserChrome_AddRef(NSWBCHROME(This)); }
static nsresult NSAPI nsContextMenuListener_QueryInterface(nsIContextMenuListener *iface, nsIIDRef riid, nsQIResult result) { NSContainer *This = NSCML_THIS(iface); return nsIWebBrowserChrome_QueryInterface(NSWBCHROME(This), riid, result); }
static nsresult NSAPI nsInterfaceRequestor_QueryInterface(nsIInterfaceRequestor *iface, nsIIDRef riid, nsQIResult result) { NSContainer *This = NSIFACEREQ_THIS(iface); return nsIWebBrowserChrome_QueryInterface(NSWBCHROME(This), riid, result); }
static nsresult NSAPI nsTooltipListener_QueryInterface(nsITooltipListener *iface, nsIIDRef riid, nsQIResult result) { NSContainer *This = NSTOOLTIP_THIS(iface); return nsIWebBrowserChrome_QueryInterface(NSWBCHROME(This), riid, result); }
static nsrefcnt NSAPI nsSupportsWeakReference_Release(nsISupportsWeakReference *iface) { NSContainer *This = NSSUPWEAKREF_THIS(iface); return nsIWebBrowserChrome_Release(NSWBCHROME(This)); }
static nsresult NSAPI nsSupportsWeakReference_QueryInterface(nsISupportsWeakReference *iface, nsIIDRef riid, nsQIResult result) { NSContainer *This = NSSUPWEAKREF_THIS(iface); return nsIWebBrowserChrome_QueryInterface(NSWBCHROME(This), riid, result); }
static nsresult NSAPI nsWeakReference_QueryReferent(nsIWeakReference *iface, const nsIID *riid, void **result) { NSContainer *This = NSWEAKREF_THIS(iface); return nsIWebBrowserChrome_QueryInterface(NSWBCHROME(This), riid, result); }
static nsrefcnt NSAPI nsWeakReference_AddRef(nsIWeakReference *iface) { NSContainer *This = NSWEAKREF_THIS(iface); return nsIWebBrowserChrome_AddRef(NSWBCHROME(This)); }
static nsrefcnt NSAPI nsInterfaceRequestor_Release(nsIInterfaceRequestor *iface) { NSContainer *This = NSIFACEREQ_THIS(iface); return nsIWebBrowserChrome_Release(NSWBCHROME(This)); }
static nsresult NSAPI nsEmbeddingSiteWindow_QueryInterface(nsIEmbeddingSiteWindow *iface, nsIIDRef riid, nsQIResult result) { NSContainer *This = NSEMBWNDS_THIS(iface); return nsIWebBrowserChrome_QueryInterface(NSWBCHROME(This), riid, result); }
static nsrefcnt NSAPI nsEmbeddingSiteWindow_Release(nsIEmbeddingSiteWindow *iface) { NSContainer *This = NSEMBWNDS_THIS(iface); return nsIWebBrowserChrome_Release(NSWBCHROME(This)); }
NSContainer *NSContainer_Create(HTMLDocument *doc, NSContainer *parent) { nsIWebBrowserSetup *wbsetup; NSContainer *ret; nsresult nsres; if(!load_gecko()) return NULL; ret = mshtml_alloc(sizeof(NSContainer)); ret->lpWebBrowserChromeVtbl = &nsWebBrowserChromeVtbl; ret->lpContextMenuListenerVtbl = &nsContextMenuListenerVtbl; ret->lpURIContentListenerVtbl = &nsURIContentListenerVtbl; ret->lpEmbeddingSiteWindowVtbl = &nsEmbeddingSiteWindowVtbl; ret->lpTooltipListenerVtbl = &nsTooltipListenerVtbl; ret->lpInterfaceRequestorVtbl = &nsInterfaceRequestorVtbl; ret->lpWeakReferenceVtbl = &nsWeakReferenceVtbl; ret->lpSupportsWeakReferenceVtbl = &nsSupportsWeakReferenceVtbl; ret->doc = doc; ret->ref = 1; ret->bscallback = NULL; if(parent) nsIWebBrowserChrome_AddRef(NSWBCHROME(parent)); ret->parent = parent; nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr, NS_WEBBROWSER_CONTRACTID, NULL, &IID_nsIWebBrowser, (void**)&ret->webbrowser); if(NS_FAILED(nsres)) ERR("Creating WebBrowser failed: %08lx\n", nsres); nsres = nsIWebBrowser_SetContainerWindow(ret->webbrowser, NSWBCHROME(ret)); if(NS_FAILED(nsres)) ERR("SetContainerWindow failed: %08lx\n", nsres); nsres = nsIWebBrowser_QueryInterface(ret->webbrowser, &IID_nsIBaseWindow, (void**)&ret->window); if(NS_FAILED(nsres)) ERR("Could not get nsIBaseWindow interface: %08lx\n", nsres); nsres = nsIWebBrowser_QueryInterface(ret->webbrowser, &IID_nsIWebBrowserSetup, (void**)&wbsetup); if(NS_SUCCEEDED(nsres)) { nsres = nsIWebBrowserSetup_SetProperty(wbsetup, SETUP_IS_CHROME_WRAPPER, TRUE); nsIWebBrowserSetup_Release(wbsetup); if(NS_FAILED(nsres)) ERR("SetProperty(SETUP_IS_CHROME_WRAPPER) failed: %08lx\n", nsres); }else { ERR("Could not get nsIWebBrowserSetup interface\n"); } nsres = nsIWebBrowser_QueryInterface(ret->webbrowser, &IID_nsIWebNavigation, (void**)&ret->navigation); if(NS_FAILED(nsres)) ERR("Could not get nsIWebNavigation interface: %08lx\n", nsres); nsres = nsIWebBrowserFocus_QueryInterface(ret->webbrowser, &IID_nsIWebBrowserFocus, (void**)&ret->focus); if(NS_FAILED(nsres)) ERR("Could not get nsIWebBrowserFocus interface: %08lx\n", nsres); if(!nscontainer_class) register_nscontainer_class(); ret->hwnd = CreateWindowExW(0, wszNsContainer, NULL, WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, 0, 0, 100, 100, GetDesktopWindow(), NULL, hInst, ret); nsres = nsIBaseWindow_InitWindow(ret->window, ret->hwnd, NULL, 0, 0, 100, 100); if(NS_SUCCEEDED(nsres)) { nsres = nsIBaseWindow_Create(ret->window); if(NS_FAILED(nsres)) WARN("Creating window failed: %08lx\n", nsres); nsIBaseWindow_SetVisibility(ret->window, FALSE); nsIBaseWindow_SetEnabled(ret->window, FALSE); }else { ERR("InitWindow failed: %08lx\n", nsres); } nsres = nsIWebBrowser_SetParentURIContentListener(ret->webbrowser, NSURICL(ret)); if(NS_FAILED(nsres)) ERR("SetParentURIContentListener failed: %08lx\n", nsres); return ret; }
static nsrefcnt NSAPI nsTooltipListener_AddRef(nsITooltipListener *iface) { NSContainer *This = NSTOOLTIP_THIS(iface); return nsIWebBrowserChrome_AddRef(NSWBCHROME(This)); }
static nsrefcnt NSAPI nsDOMEventListener_Release(nsIDOMEventListener *iface) { NSContainer *This = NSEVENTLIST_THIS(iface)->This; return nsIWebBrowserChrome_Release(NSWBCHROME(This)); }