From 9fd64018984b6ae155dc84297dacd31e8b8f884e Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 29 Apr 2013 10:47:19 +0200 Subject: [PATCH] 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 c6a7193b384..8b5a16089e8 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 421bf8a89b4..0bbdb9d0417 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 3bae9f7681c..7eb53d3d075 100644 --- a/dlls/mshtml/mutation.c +++ b/dlls/mshtml/mutation.c @@ -19,6 +19,7 @@ #include "config.h" #include +#include #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; -- 2.11.4.GIT