Jacek Caban : mshtml: Added MHTMLDocument object implementation.
Alexandre Julliard
julliard at winehq.org
Mon Feb 6 16:31:19 CST 2017
Module: wine
Branch: master
Commit: ebee2a8346afe9f92a51064bad17751d0b17e40c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ebee2a8346afe9f92a51064bad17751d0b17e40c
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Feb 3 18:58:54 2017 +0100
mshtml: Added MHTMLDocument object implementation.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mshtml/Makefile.in | 2 +-
dlls/mshtml/htmldoc.c | 15 ++++++++++-----
dlls/mshtml/mshtml_private.h | 1 +
dlls/mshtml/persist.c | 19 +++++++++++++++++--
4 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/Makefile.in b/dlls/mshtml/Makefile.in
index e50b8f8..097ba70 100644
--- a/dlls/mshtml/Makefile.in
+++ b/dlls/mshtml/Makefile.in
@@ -1,7 +1,7 @@
MODULE = mshtml.dll
IMPORTLIB = mshtml
IMPORTS = strmiids uuid urlmon shlwapi shell32 ole32 oleaut32 user32 gdi32 advapi32
-DELAYIMPORTS = wininet
+DELAYIMPORTS = wininet inetcomm
C_SRCS = \
conpoint.c \
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 940519a..b672c2d 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -5075,7 +5075,7 @@ static dispex_static_data_t HTMLDocumentObj_dispex = {
HTMLDocumentObj_iface_tids
};
-HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
+static HRESULT create_document_object(BOOL is_mhtml, IUnknown *outer, REFIID riid, void **ppv)
{
mozIDOMWindowProxy *mozwindow;
HTMLDocumentObj *doc;
@@ -5083,8 +5083,6 @@ HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
nsresult nsres;
HRESULT hres;
- TRACE("(%p %s %p)\n", outer, debugstr_mshtml_guid(riid), ppv);
-
if(outer && !IsEqualGUID(&IID_IUnknown, riid)) {
*ppv = NULL;
return E_INVALIDARG;
@@ -5102,6 +5100,7 @@ HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
init_doc(&doc->basedoc, outer ? outer : &doc->IUnknown_outer, &doc->dispex.IDispatchEx_iface);
TargetContainer_Init(doc);
doc->basedoc.doc_obj = doc;
+ doc->is_mhtml = is_mhtml;
doc->usermode = UNKNOWN_USERMODE;
@@ -5149,8 +5148,14 @@ HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
return S_OK;
}
+HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
+{
+ TRACE("(%p %s %p)\n", outer, debugstr_mshtml_guid(riid), ppv);
+ return create_document_object(FALSE, outer, riid, ppv);
+}
+
HRESULT MHTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
{
- FIXME("(%p %s %p)\n", outer, debugstr_mshtml_guid(riid), ppv);
- return E_NOTIMPL;
+ TRACE("(%p %s %p)\n", outer, debugstr_mshtml_guid(riid), ppv);
+ return create_document_object(TRUE, outer, riid, ppv);
}
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 9c8b94c..f27b674 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -640,6 +640,7 @@ struct HTMLDocumentObj {
HWND hwnd;
HWND tooltips_hwnd;
+ BOOL is_mhtml;
BOOL request_uiactivate;
BOOL in_place_active;
BOOL ui_active;
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 2735ab5..363a955 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -29,6 +29,7 @@
#include "ole2.h"
#include "shlguid.h"
#include "idispids.h"
+#include "mimeole.h"
#define NO_SHLWAPI_REG
#include "shlwapi.h"
@@ -587,6 +588,7 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
IMoniker *pimkName, LPBC pibc, DWORD grfMode)
{
HTMLDocument *This = impl_from_IPersistMoniker(iface);
+ IMoniker *mon;
HRESULT hres;
TRACE("(%p)->(%x %p %p %08x)\n", This, fFullyAvailable, pimkName, pibc, grfMode);
@@ -620,9 +622,22 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
}
}
- prepare_for_binding(This, pimkName, FALSE);
+ if(This->doc_obj->is_mhtml) {
+ IUnknown *unk;
+
+ hres = MimeOleObjectFromMoniker(0, pimkName, pibc, &IID_IUnknown, (void**)&unk, &mon);
+ if(FAILED(hres))
+ return hres;
+ IUnknown_Release(unk);
+ pibc = NULL;
+ }else {
+ IMoniker_AddRef(mon = pimkName);
+ }
+
+ prepare_for_binding(This, mon, FALSE);
call_docview_84(This->doc_obj);
- hres = set_moniker(This->window, pimkName, NULL, pibc, NULL, TRUE);
+ hres = set_moniker(This->window, mon, NULL, pibc, NULL, TRUE);
+ IMoniker_Release(mon);
if(FAILED(hres))
return hres;
More information about the wine-cvs
mailing list