Jacek Caban : mshtml: Split IPersistMoniker::Load.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri May 11 07:28:03 CDT 2007
Module: wine
Branch: master
Commit: 09adb8cf051ac76df81260afd68a99974c2bbd6c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=09adb8cf051ac76df81260afd68a99974c2bbd6c
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri May 11 13:16:15 2007 +0200
mshtml: Split IPersistMoniker::Load.
---
dlls/mshtml/persist.c | 192 ++++++++++++++++++++++++++-----------------------
1 files changed, 101 insertions(+), 91 deletions(-)
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 6b9ef8d..a2b6f73 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -39,86 +39,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
-static HRESULT get_doc_string(HTMLDocument *This, char **str, DWORD *len)
-{
- nsIDOMDocument *nsdoc;
- nsIDOMNode *nsnode;
- LPCWSTR strw;
- nsAString nsstr;
- nsresult nsres;
-
- if(!This->nscontainer) {
- WARN("no nscontainer, returning NULL\n");
- return S_OK;
- }
-
- nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
- if(NS_FAILED(nsres)) {
- ERR("GetDocument failed: %08x\n", nsres);
- return E_FAIL;
- }
-
- nsres = nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMNode, (void**)&nsnode);
- nsIDOMDocument_Release(nsdoc);
- if(NS_FAILED(nsres)) {
- ERR("Could not get nsIDOMNode failed: %08x\n", nsres);
- return E_FAIL;
- }
-
- nsAString_Init(&nsstr, NULL);
- nsnode_to_nsstring(nsnode, &nsstr);
- nsIDOMNode_Release(nsnode);
-
- nsAString_GetData(&nsstr, &strw, NULL);
- TRACE("%s\n", debugstr_w(strw));
-
- *len = WideCharToMultiByte(CP_ACP, 0, strw, -1, NULL, 0, NULL, NULL);
- *str = mshtml_alloc(*len);
- WideCharToMultiByte(CP_ACP, 0, strw, -1, *str, *len, NULL, NULL);
-
- nsAString_Finish(&nsstr);
-
- return S_OK;
-}
-
-/**********************************************************
- * IPersistMoniker implementation
- */
-
-#define PERSISTMON_THIS(iface) DEFINE_THIS(HTMLDocument, PersistMoniker, iface)
-
-static HRESULT WINAPI PersistMoniker_QueryInterface(IPersistMoniker *iface, REFIID riid,
- void **ppvObject)
-{
- HTMLDocument *This = PERSISTMON_THIS(iface);
- return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppvObject);
-}
-
-static ULONG WINAPI PersistMoniker_AddRef(IPersistMoniker *iface)
-{
- HTMLDocument *This = PERSISTMON_THIS(iface);
- return IHTMLDocument2_AddRef(HTMLDOC(This));
-}
-
-static ULONG WINAPI PersistMoniker_Release(IPersistMoniker *iface)
-{
- HTMLDocument *This = PERSISTMON_THIS(iface);
- return IHTMLDocument2_Release(HTMLDOC(This));
-}
-
-static HRESULT WINAPI PersistMoniker_GetClassID(IPersistMoniker *iface, CLSID *pClassID)
-{
- HTMLDocument *This = PERSISTMON_THIS(iface);
- return IPersist_GetClassID(PERSIST(This), pClassID);
-}
-
-static HRESULT WINAPI PersistMoniker_IsDirty(IPersistMoniker *iface)
-{
- HTMLDocument *This = PERSISTMON_THIS(iface);
- FIXME("(%p)\n", This);
- return E_NOTIMPL;
-}
-
static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
{
nsIInputStream *ret = NULL;
@@ -193,18 +113,14 @@ static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
return ret;
}
-static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAvailable,
- IMoniker *pimkName, LPBC pibc, DWORD grfMode)
+static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc)
{
- HTMLDocument *This = PERSISTMON_THIS(iface);
BSCallback *bscallback;
LPOLESTR url = NULL;
task_t *task;
HRESULT hres;
nsresult nsres;
- TRACE("(%p)->(%x %p %p %08x)\n", This, fFullyAvailable, pimkName, pibc, grfMode);
-
if(pibc) {
IUnknown *unk = NULL;
@@ -240,7 +156,7 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
HTMLDocument_LockContainer(This, TRUE);
- hres = IMoniker_GetDisplayName(pimkName, pibc, NULL, &url);
+ hres = IMoniker_GetDisplayName(mon, pibc, NULL, &url);
if(FAILED(hres)) {
WARN("GetDiaplayName failed: %08x\n", hres);
return hres;
@@ -285,7 +201,7 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
}
}
- bscallback = create_bscallback(pimkName);
+ bscallback = create_bscallback(mon);
if(This->frame) {
task = mshtml_alloc(sizeof(task_t));
@@ -328,12 +244,106 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
}
set_document_bscallback(This, bscallback);
- hres = start_binding(bscallback);
-
IBindStatusCallback_Release(STATUSCLB(bscallback));
CoTaskMemFree(url);
- return hres;
+ return S_OK;
+}
+
+static HRESULT get_doc_string(HTMLDocument *This, char **str, DWORD *len)
+{
+ nsIDOMDocument *nsdoc;
+ nsIDOMNode *nsnode;
+ LPCWSTR strw;
+ nsAString nsstr;
+ nsresult nsres;
+
+ if(!This->nscontainer) {
+ WARN("no nscontainer, returning NULL\n");
+ return S_OK;
+ }
+
+ nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
+ if(NS_FAILED(nsres)) {
+ ERR("GetDocument failed: %08x\n", nsres);
+ return E_FAIL;
+ }
+
+ nsres = nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMNode, (void**)&nsnode);
+ nsIDOMDocument_Release(nsdoc);
+ if(NS_FAILED(nsres)) {
+ ERR("Could not get nsIDOMNode failed: %08x\n", nsres);
+ return E_FAIL;
+ }
+
+ nsAString_Init(&nsstr, NULL);
+ nsnode_to_nsstring(nsnode, &nsstr);
+ nsIDOMNode_Release(nsnode);
+
+ nsAString_GetData(&nsstr, &strw, NULL);
+ TRACE("%s\n", debugstr_w(strw));
+
+ *len = WideCharToMultiByte(CP_ACP, 0, strw, -1, NULL, 0, NULL, NULL);
+ *str = mshtml_alloc(*len);
+ WideCharToMultiByte(CP_ACP, 0, strw, -1, *str, *len, NULL, NULL);
+
+ nsAString_Finish(&nsstr);
+
+ return S_OK;
+}
+
+
+/**********************************************************
+ * IPersistMoniker implementation
+ */
+
+#define PERSISTMON_THIS(iface) DEFINE_THIS(HTMLDocument, PersistMoniker, iface)
+
+static HRESULT WINAPI PersistMoniker_QueryInterface(IPersistMoniker *iface, REFIID riid,
+ void **ppvObject)
+{
+ HTMLDocument *This = PERSISTMON_THIS(iface);
+ return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppvObject);
+}
+
+static ULONG WINAPI PersistMoniker_AddRef(IPersistMoniker *iface)
+{
+ HTMLDocument *This = PERSISTMON_THIS(iface);
+ return IHTMLDocument2_AddRef(HTMLDOC(This));
+}
+
+static ULONG WINAPI PersistMoniker_Release(IPersistMoniker *iface)
+{
+ HTMLDocument *This = PERSISTMON_THIS(iface);
+ return IHTMLDocument2_Release(HTMLDOC(This));
+}
+
+static HRESULT WINAPI PersistMoniker_GetClassID(IPersistMoniker *iface, CLSID *pClassID)
+{
+ HTMLDocument *This = PERSISTMON_THIS(iface);
+ return IPersist_GetClassID(PERSIST(This), pClassID);
+}
+
+static HRESULT WINAPI PersistMoniker_IsDirty(IPersistMoniker *iface)
+{
+ HTMLDocument *This = PERSISTMON_THIS(iface);
+ FIXME("(%p)\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAvailable,
+ IMoniker *pimkName, LPBC pibc, DWORD grfMode)
+{
+ HTMLDocument *This = PERSISTMON_THIS(iface);
+ HRESULT hres;
+
+ TRACE("(%p)->(%x %p %p %08x)\n", This, fFullyAvailable, pimkName, pibc, grfMode);
+
+ hres = set_moniker(This, pimkName, pibc);
+ if(FAILED(hres))
+ return hres;
+
+ return start_binding(This->bscallback);
}
static HRESULT WINAPI PersistMoniker_Save(IPersistMoniker *iface, IMoniker *pimkName,
@@ -529,7 +539,7 @@ static ULONG WINAPI PersistStreamInit_AddRef(IPersistStreamInit *iface)
static ULONG WINAPI PersistStreamInit_Release(IPersistStreamInit *iface)
{
HTMLDocument *This = PERSTRINIT_THIS(iface);
- return IHTMLDocument2_AddRef(HTMLDOC(This));
+ return IHTMLDocument2_Release(HTMLDOC(This));
}
static HRESULT WINAPI PersistStreamInit_GetClassID(IPersistStreamInit *iface, CLSID *pClassID)
More information about the wine-cvs
mailing list