Jacek Caban : mshtml: Pass proper JSContext to nsIDOMHTMLDocument:: Write and Open.
Alexandre Julliard
julliard at winehq.org
Mon Apr 29 13:55:24 CDT 2013
Module: wine
Branch: master
Commit: 9fd64018984b6ae155dc84297dacd31e8b8f884e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9fd64018984b6ae155dc84297dacd31e8b8f884e
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Apr 29 10:47:19 2013 +0200
mshtml: Pass proper JSContext to nsIDOMHTMLDocument::Write and Open.
---
dlls/mshtml/htmldoc.c | 9 ++++++---
dlls/mshtml/mshtml_private.h | 1 +
dlls/mshtml/mutation.c | 17 +++++++++++++++++
3 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index c6a7193..8b5a160 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -833,6 +833,7 @@ static HRESULT WINAPI HTMLDocument_get_nameProp(IHTMLDocument2 *iface, BSTR *p)
static HRESULT document_write(HTMLDocument *This, SAFEARRAY *psarray, BOOL ln)
{
VARIANT *var, tmp;
+ JSContext *jsctx;
nsAString nsstr;
ULONG i, argc;
nsresult nsres;
@@ -859,6 +860,7 @@ static HRESULT document_write(HTMLDocument *This, SAFEARRAY *psarray, BOOL ln)
V_VT(&tmp) = VT_EMPTY;
+ jsctx = get_context_from_document(This->doc_node->nsdoc);
argc = psarray->rgsabound[0].cElements;
for(i=0; i < argc; i++) {
if(V_VT(var+i) == VT_BSTR) {
@@ -873,9 +875,9 @@ static HRESULT document_write(HTMLDocument *This, SAFEARRAY *psarray, BOOL ln)
}
if(!ln || i != argc-1)
- nsres = nsIDOMHTMLDocument_Write(This->doc_node->nsdoc, &nsstr, NULL /* FIXME! */);
+ nsres = nsIDOMHTMLDocument_Write(This->doc_node->nsdoc, &nsstr, jsctx);
else
- nsres = nsIDOMHTMLDocument_Writeln(This->doc_node->nsdoc, &nsstr, NULL /* FIXME! */);
+ nsres = nsIDOMHTMLDocument_Writeln(This->doc_node->nsdoc, &nsstr, jsctx);
nsAString_Finish(&nsstr);
if(V_VT(var+i) != VT_BSTR)
VariantClear(&tmp);
@@ -930,7 +932,8 @@ static HRESULT WINAPI HTMLDocument_open(IHTMLDocument2 *iface, BSTR url, VARIANT
|| V_VT(&features) != VT_ERROR || V_VT(&replace) != VT_ERROR)
FIXME("unsupported args\n");
- nsres = nsIDOMHTMLDocument_Open(This->doc_node->nsdoc, NULL, NULL, NULL, NULL, 0, &tmp);
+ nsres = nsIDOMHTMLDocument_Open(This->doc_node->nsdoc, NULL, NULL, NULL,
+ get_context_from_document(This->doc_node->nsdoc), 0, &tmp);
if(NS_FAILED(nsres)) {
ERR("Open failed: %08x\n", nsres);
return E_FAIL;
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 421bf8a..0bbdb9d 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -781,6 +781,7 @@ void NSContainer_Release(NSContainer*) DECLSPEC_HIDDEN;
void init_mutation(nsIComponentManager*) DECLSPEC_HIDDEN;
void init_document_mutation(HTMLDocumentNode*) DECLSPEC_HIDDEN;
void release_document_mutation(HTMLDocumentNode*) DECLSPEC_HIDDEN;
+JSContext *get_context_from_document(nsIDOMHTMLDocument*) DECLSPEC_HIDDEN;
void HTMLDocument_LockContainer(HTMLDocumentObj*,BOOL) DECLSPEC_HIDDEN;
void show_context_menu(HTMLDocumentObj*,DWORD,POINT*,IDispatch*) DECLSPEC_HIDDEN;
diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c
index 3bae9f7..7eb53d3 100644
--- a/dlls/mshtml/mutation.c
+++ b/dlls/mshtml/mutation.c
@@ -19,6 +19,7 @@
#include "config.h"
#include <stdarg.h>
+#include <assert.h>
#define COBJMACROS
@@ -775,6 +776,22 @@ void release_document_mutation(HTMLDocumentNode *doc)
nsIDocument_Release(nsdoc);
}
+JSContext *get_context_from_document(nsIDOMHTMLDocument *nsdoc)
+{
+ nsIDocument *doc;
+ JSContext *ctx;
+ nsresult nsres;
+
+ nsres = nsIDOMHTMLDocument_QueryInterface(nsdoc, &IID_nsIDocument, (void**)&doc);
+ assert(nsres == NS_OK);
+
+ ctx = nsIContentUtils_GetContextFromDocument(content_utils, doc);
+ nsIDocument_Release(doc);
+
+ TRACE("ret %p\n", ctx);
+ return ctx;
+}
+
void init_mutation(nsIComponentManager *component_manager)
{
nsIFactory *factory;
More information about the wine-cvs
mailing list