Hi all,

I'm happy to announce that the new update of Wine Gecko packages is almost there. It took long time since last beta to get to RC point from beta, not only because of many changes on our side, but mostly because of delays in Mozilla release process. We've done everything I've hoped to be done (and even more than I expected). I'm also happy that it was much better tested than previous times (mostly because they were available for so long). So far I'm aware of only one regression in Outlook that probably won't block the release because it seems to be a problem on Wine side (I can't be sure as I wasn't able to reproduce it so far). If I've missed something, please let me know.

I'd appreciate help with testing. Builds are on Sourceforge [1]. To use it, just grab MSI files and put it into the directory where usually CAB files would go and apply the attached patch. Please let me know about any regression you notice.


* CHANGES *

- The CAB file is created without external dependencies
Thanks to Alexandre for cabinet work.

- We use MSI installers
Thanks to Hans for winemsibuilder and preparing scripts that made it possible.

- winedbg works with Gecko debug builds
Thanks to Eric for many fixes to dbghelp/winedbg. Once he will merge his work to Wine, we will be able to use winedbg for comfortable Gecko debugging

- win64 build now works
- a few bug fixes
- I've got rid of some Gecko ugly things like using API hooks


* FURTHER PLANS *

Firefox 4 RC1 came out yesterday and is expected to be the final build (so far nothing that would require another RC was found). Mozilla estimates release to be out in a week or two. I'm tempted to not wait and release early next week (so that it will live in Git for at least a few days before Wine release), but we will see how it will work. If we'd find any new blocker, it would most likely mean that we will release a week later.


* FOR PACKAGERS *

If you are interested in building the packager yourself from sources (so far I've heard about Debian and Fedora attempts to do so), everything is ready to support it now. Building instructions changed a bit after switching to use MSI files, but I've made things as easy as possible. Building the package itself is a matter of invoking one script with proper arguments. The tricky part is that Wine is needed for building, so we get circural build-time dependency. The script, however, makes sure that Wine doesn't need Gecko during compiling Gecko, so it shouldn't be a big problem to handle. Also, unless you manually set WINEPREFIX, the script created a temporary wineprefix directory, so there is nothing to worry if your ~/.wine is in broken state. It can also use Wine from its build dir if you set WINE_BUILD_DIR environment variable. Please let me know if there are more problems than need to be addressed and feel free to contact me if you have any questions.

Thanks,
    Jacek

[1] http://sourceforge.net/projects/wine/files/Wine%20Gecko/1.2.0-rc1/
diff --git a/dlls/appwiz.cpl/addons.c b/dlls/appwiz.cpl/addons.c
index c55806f..323d612 100644
--- a/dlls/appwiz.cpl/addons.c
+++ b/dlls/appwiz.cpl/addons.c
@@ -51,7 +51,7 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(appwizcpl);
 
-#define GECKO_VERSION "1.1.0"
+#define GECKO_VERSION "1.2.0-rc1"
 
 #ifdef __i386__
 #define ARCH_STRING "x86"
@@ -64,7 +64,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(appwizcpl);
 #define GECKO_SHA "???"
 #endif
 
-#define GECKO_FILE_NAME "wine_gecko-" GECKO_VERSION "-" ARCH_STRING ".cab"
+#define GECKO_FILE_NAME "wine_gecko-" GECKO_VERSION "-" ARCH_STRING ".msi"
 
 static const WCHAR mshtml_keyW[] =
     {'S','o','f','t','w','a','r','e',
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 6842b23..f9bc469 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -1923,7 +1923,7 @@ static void HTMLDocumentNode_destructor(HTMLDOMNode 
*iface)
         detach_plugin_host(LIST_ENTRY(list_head(&This->plugin_hosts), 
PluginHost, entry));
 
     if(This->nsdoc) {
-        release_mutation(This);
+        release_document_mutation(This);
         nsIDOMHTMLDocument_Release(This->nsdoc);
     }
 
@@ -2024,7 +2024,7 @@ HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument *nsdoc, 
HTMLDocumentObj *doc_ob
 
     nsIDOMHTMLDocument_AddRef(nsdoc);
     doc->nsdoc = nsdoc;
-    init_mutation(doc);
+    init_document_mutation(doc);
 
     HTMLDOMNode_Init(doc, &doc->node, (nsIDOMNode*)nsdoc);
     doc->node.vtbl = &HTMLDocumentNodeImplVtbl;
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 11ab878..771c38e 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -659,8 +659,9 @@ NSContainer 
*NSContainer_Create(HTMLDocumentObj*,NSContainer*);
 void NSContainer_Release(NSContainer*);
 nsresult create_chrome_window(nsIWebBrowserChrome*,nsIWebBrowserChrome**);
 
-void init_mutation(HTMLDocumentNode*);
-void release_mutation(HTMLDocumentNode*);
+void init_mutation(nsIComponentManager*);
+void init_document_mutation(HTMLDocumentNode*);
+void release_document_mutation(HTMLDocumentNode*);
 
 void HTMLDocument_LockContainer(HTMLDocumentObj*,BOOL);
 void show_context_menu(HTMLDocumentObj*,DWORD,POINT*,IDispatch*);
diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c
index 3e528bf..2117e49 100644
--- a/dlls/mshtml/mutation.c
+++ b/dlls/mshtml/mutation.c
@@ -39,6 +39,11 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
 #define IE_MAJOR_VERSION 7
 #define IE_MINOR_VERSION 0
 
+static const IID NS_ICONTENTUTILS_CID =
+    {0x762C4AE7,0xB923,0x422F,{0xB9,0x7E,0xB9,0xBF,0xC1,0xEF,0x7B,0xF0}};
+
+static nsIContentUtils *content_utils;
+
 static BOOL handle_insert_comment(HTMLDocumentNode *doc, const PRUnichar 
*comment)
 {
     DWORD len;
@@ -305,9 +310,10 @@ static nsresult run_end_load(HTMLDocumentNode *This, 
nsISupports *arg1, nsISuppo
     return NS_OK;
 }
 
-static nsresult run_insert_script(HTMLDocumentNode *doc, nsISupports 
*script_iface, nsISupports *arg)
+static nsresult run_insert_script(HTMLDocumentNode *doc, nsISupports 
*script_iface, nsISupports *parser_iface)
 {
     nsIDOMHTMLScriptElement *nsscript;
+    nsIParser *nsparser = NULL;
     nsresult nsres;
 
     TRACE("(%p)->(%p)\n", doc, script_iface);
@@ -318,7 +324,24 @@ static nsresult run_insert_script(HTMLDocumentNode *doc, 
nsISupports *script_ifa
         return nsres;
     }
 
+    if(parser_iface) {
+        nsres = nsISupports_QueryInterface(parser_iface, &IID_nsIParser, 
(void**)&nsparser);
+        if(NS_FAILED(nsres)) {
+            ERR("Could not get nsIParser iface: %08x\n", nsres);
+            nsparser = NULL;
+        }
+    }
+
+    if(nsparser)
+        nsIParser_BeginEvaluatingParserInsertedScript(nsparser);
+
     doc_insert_script(doc->basedoc.window, nsscript);
+
+    if(nsparser) {
+        nsIParser_EndEvaluatingParserInsertedScript(nsparser);
+        nsIParser_Release(nsparser);
+    }
+
     nsIDOMHTMLScriptElement_Release(nsscript);
     return NS_OK;
 }
@@ -410,9 +433,7 @@ static const nsIRunnableVtbl nsRunnableVtbl = {
 
 static void add_script_runner(HTMLDocumentNode *This, runnable_proc_t proc, 
nsISupports *arg1, nsISupports *arg2)
 {
-    nsIDOMNSDocument *nsdoc;
     nsRunnable *runnable;
-    nsresult nsres;
 
     runnable = heap_alloc_zero(sizeof(*runnable));
     if(!runnable)
@@ -433,13 +454,7 @@ static void add_script_runner(HTMLDocumentNode *This, 
runnable_proc_t proc, nsIS
         nsISupports_AddRef(arg2);
     runnable->arg2 = arg2;
 
-    nsres = nsIDOMHTMLDocument_QueryInterface(This->nsdoc, 
&IID_nsIDOMNSDocument, (void**)&nsdoc);
-    if(NS_SUCCEEDED(nsres)) {
-        nsIDOMNSDocument_WineAddScriptRunner(nsdoc, 
&runnable->nsIRunnable_iface);
-        nsIDOMNSDocument_Release(nsdoc);
-    }else {
-        ERR("Could not get nsIDOMNSDocument: %08x\n", nsres);
-    }
+    nsIContentUtils_AddScriptRunner(content_utils, 
&runnable->nsIRunnable_iface);
 
     nsIRunnable_Release(&runnable->nsIRunnable_iface);
 }
@@ -557,12 +572,12 @@ static void NSAPI 
nsDocumentObserver_EndLoad(nsIDocumentObserver *iface, nsIDocu
 }
 
 static void NSAPI nsDocumentObserver_ContentStatesChanged(nsIDocumentObserver 
*iface, nsIDocument *aDocument,
-        nsIContent *aContent1, nsIContent *aContent2, PRInt32 aStateMask)
+        nsIContent *aContent1, nsIContent *aContent2, nsEventStates aStateMask)
 {
 }
 
 static void NSAPI nsDocumentObserver_DocumentStatesChanged(nsIDocumentObserver 
*iface, nsIDocument *aDocument,
-        PRInt32 aStateMask)
+        nsEventStates aStateMask)
 {
 }
 
@@ -639,8 +654,8 @@ static void NSAPI 
nsDocumentObserver_BindToDocument(nsIDocumentObserver *iface,
     }
 }
 
-static void NSAPI nsDocumentObserver_DoneAddingChildren(nsIDocumentObserver 
*iface, nsIContent *aContent,
-        PRBool aHaveNotified)
+static nsresult NSAPI 
nsDocumentObserver_DoneAddingChildren(nsIDocumentObserver *iface, nsIContent 
*aContent,
+        PRBool aHaveNotified, nsIParser *aParser)
 {
     HTMLDocumentNode *This = impl_from_nsIDocumentObserver(iface);
     nsIDOMHTMLScriptElement *nsscript;
@@ -652,9 +667,11 @@ static void NSAPI 
nsDocumentObserver_DoneAddingChildren(nsIDocumentObserver *ifa
     if(NS_SUCCEEDED(nsres)) {
         TRACE("script node\n");
 
-        add_script_runner(This, run_insert_script, (nsISupports*)nsscript, 
NULL);
+        add_script_runner(This, run_insert_script, (nsISupports*)nsscript, 
(nsISupports*)aParser);
         nsIDOMHTMLScriptElement_Release(nsscript);
     }
+
+    return NS_OK;
 }
 
 static const nsIDocumentObserverVtbl nsDocumentObserverVtbl = {
@@ -686,34 +703,60 @@ static const nsIDocumentObserverVtbl 
nsDocumentObserverVtbl = {
     nsDocumentObserver_DoneAddingChildren
 };
 
-void init_mutation(HTMLDocumentNode *doc)
+void init_document_mutation(HTMLDocumentNode *doc)
 {
-    nsIDOMNSDocument *nsdoc;
+    nsIDocument *nsdoc;
     nsresult nsres;
 
     doc->nsIDocumentObserver_iface.lpVtbl = &nsDocumentObserverVtbl;
 
-    nsres = nsIDOMHTMLDocument_QueryInterface(doc->nsdoc, 
&IID_nsIDOMNSDocument, (void**)&nsdoc);
+    nsres = nsIDOMHTMLDocument_QueryInterface(doc->nsdoc, &IID_nsIDocument, 
(void**)&nsdoc);
     if(NS_FAILED(nsres)) {
-        ERR("Could not get nsIDOMNSDocument: %08x\n", nsres);
+        ERR("Could not get nsIDocument: %08x\n", nsres);
         return;
     }
 
-    nsIDOMNSDocument_WineAddObserver(nsdoc, &doc->nsIDocumentObserver_iface);
-    nsIDOMNSDocument_Release(nsdoc);
+    nsIContentUtils_AddDocumentObserver(content_utils, nsdoc, 
&doc->nsIDocumentObserver_iface);
+    nsIDocument_Release(nsdoc);
 }
 
-void release_mutation(HTMLDocumentNode *doc)
+void release_document_mutation(HTMLDocumentNode *doc)
 {
-    nsIDOMNSDocument *nsdoc;
+    nsIDocument *nsdoc;
     nsresult nsres;
 
-    nsres = nsIDOMHTMLDocument_QueryInterface(doc->nsdoc, 
&IID_nsIDOMNSDocument, (void**)&nsdoc);
+    nsres = nsIDOMHTMLDocument_QueryInterface(doc->nsdoc, &IID_nsIDocument, 
(void**)&nsdoc);
     if(NS_FAILED(nsres)) {
-        ERR("Could not get nsIDOMNSDocument: %08x\n", nsres);
+        ERR("Could not get nsIDocument: %08x\n", nsres);
         return;
     }
 
-    nsIDOMNSDocument_WineRemoveObserver(nsdoc, 
&doc->nsIDocumentObserver_iface);
-    nsIDOMNSDocument_Release(nsdoc);
+    nsIContentUtils_RemoveDocumentObserver(content_utils, nsdoc, 
&doc->nsIDocumentObserver_iface);
+    nsIDocument_Release(nsdoc);
+}
+
+void init_mutation(nsIComponentManager *component_manager)
+{
+    nsIFactory *factory;
+    nsresult nsres;
+
+    if(!component_manager) {
+        if(content_utils) {
+            nsIContentUtils_Release(content_utils);
+            content_utils = NULL;
+        }
+        return;
+    }
+
+    nsres = nsIComponentManager_GetClassObject(component_manager, 
&NS_ICONTENTUTILS_CID,
+            &IID_nsIFactory, (void**)&factory);
+    if(NS_FAILED(nsres)) {
+        ERR("Could not create nsIContentUtils service: %08x\n", nsres);
+        return;
+    }
+
+    nsres = nsIFactory_CreateInstance(factory, NULL, &IID_nsIContentUtils, 
(void**)&content_utils);
+    nsIFactory_Release(factory);
+    if(NS_FAILED(nsres))
+        ERR("Could not create nsIContentUtils instance: %08x\n", nsres);
 }
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index 7592b62..c2332e0 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -394,7 +394,7 @@ static BOOL load_wine_gecko_v(PRUnichar *gre_path, HKEY 
mshtml_key,
         {'G','e','c','k','o','P','a','t','h',0};
 
     if(version) {
-        /* @@ Wine registry key: HKCU\Software\Wine\MSHTML\<version> */
+        /* @@ Wine registry key: HKLM\Software\Wine\MSHTML\<version> */
         res = RegOpenKeyA(mshtml_key, version, &hkey);
         if(res != ERROR_SUCCESS)
             return FALSE;
@@ -422,8 +422,8 @@ static BOOL load_wine_gecko(PRUnichar *gre_path)
         'S','o','f','t','w','a','r','e','\\','W','i','n','e',
         '\\','M','S','H','T','M','L',0};
 
-    /* @@ Wine registry key: HKCU\Software\Wine\MSHTML */
-    res = RegOpenKeyW(HKEY_CURRENT_USER, wszMshtmlKey, &hkey);
+    /* @@ Wine registry key: HKLM\Software\Wine\MSHTML */
+    res = RegOpenKeyW(HKEY_LOCAL_MACHINE, wszMshtmlKey, &hkey);
     if(res != ERROR_SUCCESS)
         return FALSE;
 
@@ -599,6 +599,8 @@ static BOOL init_xpcom(const PRUnichar *gre_path)
     else
         ERR("NS_GetComponentRegistrar failed: %08x\n", nsres);
 
+    init_mutation(pCompMgr);
+
     nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr, 
NS_APPSTARTUPNOTIFIER_CONTRACTID,
             NULL, &IID_nsIObserver, (void**)&pStartNotif);
     if(NS_SUCCEEDED(nsres)) {
@@ -947,6 +949,7 @@ void close_gecko(void)
     TRACE("()\n");
 
     release_nsio();
+    init_mutation(NULL);
 
     if(profile_directory) {
         nsIFile_Release(profile_directory);
diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl
index 7d8b5ce..550b0aa 100644
--- a/dlls/mshtml/nsiface.idl
+++ b/dlls/mshtml/nsiface.idl
@@ -23,7 +23,7 @@
  * compatible with XPCOM, usable in C code.
  */
 
-cpp_quote("#define GECKO_VERSION \"1.1.0\"")
+cpp_quote("#define GECKO_VERSION \"1.2.0-rc1\"")
 cpp_quote("#define GECKO_VERSION_STRING \"Wine Gecko \" GECKO_VERSION")
 
 import "wtypes.idl";
@@ -87,7 +87,6 @@ interface nsIEditActionListener;
 interface nsIDocumentStateListener;
 interface nsIDOMCSSStyleSheet;
 interface nsIDOMDocumentView;
-interface nsIDocumentObserver;
 interface nsIDOMWindow;
 interface nsIDOMElement;
 
@@ -148,8 +147,12 @@ typedef nsISupports nsITransferable;
 typedef nsISupports nsIDOMHTMLHeadElement;
 typedef nsISupports nsIDOMFileList;
 typedef nsISupports nsIControllers;
+typedef nsISupports nsIDOMValidityState;
 typedef nsISupports nsIPluginInstanceOwner;
 typedef nsISupports nsIPluginStreamListener;
+typedef nsISupports nsIContentSink;
+typedef nsISupports nsIParserFilter;
+typedef nsISupports nsIDTD;
 
 [
     object,
@@ -469,7 +472,7 @@ interface nsIHttpChannel : nsIChannel
 
 [
     object,
-    uuid(91dbb42a-dffc-4f47-8b27-9579c0d92c3f),
+    uuid(9fb2a161-d075-4bf2-b07a-26bac650cc81),
     local
 ]
 interface nsIHttpChannelInternal : nsISupports
@@ -483,6 +486,8 @@ interface nsIHttpChannelInternal : nsISupports
     nsresult GetForceAllowThirdPartyCookie(PRBool 
*aForceAllowThirdPartyCookie);
     nsresult SetForceAllowThirdPartyCookie(PRBool aForceAllowThirdPartyCookie);
     nsresult GetCanceled(PRBool *aCanceled);
+    nsresult GetChannelIsForDownload(PRBool *aChannelIsForDownload);
+    nsresult SetChannelIsForDownload(PRBool aChannelIsForDownload);
 }
 
 [
@@ -934,7 +939,7 @@ interface nsIDOMDocument : nsIDOMNode
 
 [
     object,
-    uuid(7485b35e-d215-42a0-8a67-896f86c8afd9),
+    uuid(92f2c6f8-3668-4a47-8251-2a900afe11fa),
     local
 ]
 interface nsIDOMNSDocument : nsISupports
@@ -951,15 +956,11 @@ interface nsIDOMNSDocument : nsISupports
     nsresult GetReferrer(nsAString *aReferrer);
     nsresult HasFocus(PRBool *_retval);
     nsresult GetActiveElement(nsIDOMElement **aActiveElement);
+    nsresult GetCurrentScript(nsIDOMElement **aActiveElement);
     nsresult GetElementsByClassName(const nsAString *classes, nsIDOMNodeList 
**_retval);
     nsresult ElementFromPoint(float x, float y, nsIDOMElement **_retval);
     nsresult ReleaseCapture();
     nsresult MozSetImageElement(const nsAString *aImageElementId, 
nsIDOMElement *aImageElement);
-
-    /* Wine extensions */
-    nsresult WineAddObserver(nsIDocumentObserver *aObserver);
-    nsresult WineRemoveObserver(nsIDocumentObserver *aObserver);
-    nsresult WineAddScriptRunner(nsIRunnable *aRunnable);
 }
 
 [
@@ -1218,32 +1219,36 @@ interface nsIDOMHTMLBodyElement : nsIDOMHTMLElement
 
 [
     object,
-    uuid(a6cf908f-15b3-11d2-932e-00805f8add32),
+    uuid(0884ce23-e069-499e-a13c-a91c8ae0fc98),
     local
 ]
 interface nsIDOMHTMLFormElement : nsIDOMHTMLElement
 {
-    nsresult GetElements(nsIDOMHTMLCollection **aElements);
-    nsresult GetLength(PRInt32 *aLength);
     nsresult GetName(nsAString *aName);
     nsresult SetName(const nsAString *aName);
     nsresult GetAcceptCharset(nsAString *aAcceptCharset);
     nsresult SetAcceptCharset(const nsAString *aAcceptCharset);
     nsresult GetAction(nsAString *aAction);
     nsresult SetAction(const nsAString *aAction);
+    nsresult GetAutocomplete(nsAString *aAutocomplete);
+    nsresult SetAutocomplete(const nsAString *aAutocomplete);
     nsresult GetEnctype(nsAString *aEnctype);
     nsresult SetEnctype(const nsAString *aEnctype);
     nsresult GetMethod(nsAString *aMethod);
     nsresult SetMethod(const nsAString *aMethod);
+    nsresult GetNoValidate(PRBool *aNoValidate);
+    nsresult SetNoValidate(PRBool aNoValidate);
     nsresult GetTarget(nsAString *aTarget);
     nsresult SetTarget(const nsAString *aTarget);
+    nsresult GetElements(nsIDOMHTMLCollection **aElements);
+    nsresult GetLength(PRInt32 *aLength);
     nsresult Submit();
     nsresult Reset();
 }
 
 [
     object,
-    uuid(2480b6f0-094e-484f-8717-0c204ed23e69),
+    uuid(0805059d-f18f-4095-ae6b-0bf6df80b7b8),
     local
 ]
 interface nsIDOMHTMLInputElement : nsIDOMHTMLElement
@@ -1252,6 +1257,8 @@ interface nsIDOMHTMLInputElement : nsIDOMHTMLElement
     nsresult SetAccept(const nsAString *aAccept);
     nsresult GetAlt(nsAString *aAlt);
     nsresult SetAlt(const nsAString *aAlt);
+    nsresult GetAutocomplete(nsAString *aAutocomplete);
+    nsresult SetAutocomplete(const nsAString *aAutocomplete);
     nsresult GetAutofocus(PRBool *aAutofocus);
     nsresult SetAutofocus(PRBool aAutofocus);
     nsresult GetDefaultChecked(PRBool *aDefaultChecked);
@@ -1261,19 +1268,34 @@ interface nsIDOMHTMLInputElement : nsIDOMHTMLElement
     nsresult GetDisabled(PRBool *aDisabled);
     nsresult SetDisabled(PRBool aDisabled);
     nsresult GetForm(nsIDOMHTMLFormElement **aForm);
+    nsresult GetFormAction(nsAString *aFormAction);
+    nsresult SetFormAction(const nsAString *aFormAction);
+    nsresult GetFormEnctype(nsAString *aFormEnctype);
+    nsresult SetFormEnctype(const nsAString *aFormEnctype);
+    nsresult GetFormMethod(nsAString *aFormMethod);
+    nsresult SetFormMethod(const nsAString *aFormMethod);
+    nsresult GetFormNoValidate(PRBool *aFormNoValidate);
+    nsresult SetFormNoValidate(PRBool aFormNoValidate);
+    nsresult GetFormTarget(nsAString *aFormTarget);
+    nsresult SetFormTarget(const nsAString *aFormTarget);
     nsresult GetFiles(nsIDOMFileList **aFiles);
     nsresult GetIndeterminate(PRBool *aIndeterminate);
     nsresult SetIndeterminate(PRBool aIndeterminate);
+    nsresult GetList(nsIDOMHTMLElement **aList);
     nsresult GetMaxLength(PRInt32 *aMaxLength);
     nsresult SetMaxLength(PRInt32 aMaxLength);
     nsresult GetMultiple(PRBool *aMultiple);
     nsresult SetMultiple(PRBool aMultiple);
     nsresult GetName(nsAString *aName);
     nsresult SetName(const nsAString *aName);
+    nsresult GetPattern(nsAString *aPattern);
+    nsresult SetPattern(const nsAString *aPattern);
     nsresult GetPlaceholder(nsAString *aPlaceholder);
     nsresult SetPlaceholder(const nsAString *aPlaceholder);
     nsresult GetReadOnly(PRBool *aReadOnly);
     nsresult SetReadOnly(PRBool aReadOnly);
+    nsresult GetRequired(PRBool *aRequired);
+    nsresult SetRequired(PRBool aRequired);
     nsresult GetAccessKey(nsAString *aAccessKey);
     nsresult SetAccessKey(const nsAString *aAccessKey);
     nsresult GetAlign(nsAString *aAlign);
@@ -1288,6 +1310,11 @@ interface nsIDOMHTMLInputElement : nsIDOMHTMLElement
     nsresult SetDefaultValue(const nsAString *aDefaultValue);
     nsresult GetValue(nsAString *aValue);
     nsresult SetValue(const nsAString *aValue);
+    nsresult GetWillValidate(PRBool *aWillValidate);
+    nsresult GetValidity(nsIDOMValidityState **aValidity);
+    nsresult GetValidationMessage(nsAString *aValidationMessage);
+    nsresult CheckValidity(PRBool *_retval);
+    nsresult SetCustomValidity(const nsAString *error);
     nsresult Select();
     nsresult GetSelectionStart(PRInt32 *aSelectionStart);
     nsresult SetSelectionStart(PRInt32 aSelectionStart);
@@ -1346,7 +1373,7 @@ interface nsIDOMHTMLOptionsCollection : nsISupports
 
 [
     object,
-    uuid(110a4b15-e0a2-48d7-8e59-d8d94ef510ad),
+    uuid(e3c6d960-972c-4a5e-a8f4-6ca65d578abf),
     local
 ]
 interface nsIDOMHTMLSelectElement : nsIDOMHTMLElement
@@ -1378,6 +1405,11 @@ interface nsIDOMHTMLSelectElement : nsIDOMHTMLElement
     nsresult SetTabIndex(PRInt32 aTabIndex);
     nsresult Blur();
     nsresult Focus();
+    nsresult GetWillValidate(PRBool *aWillValidate);
+    nsresult GetValidity(nsIDOMValidityState **aValidity);
+    nsresult GetValidationMessage(nsAString *aValidationMessage);
+    nsresult CheckValidity(PRBool *_retval);
+    nsresult SetCustomValidity(const nsAString *error);
 }
 
 [
@@ -1656,7 +1688,7 @@ interface nsIDOMHTMLFrameElement : nsIDOMHTMLElement
 
 [
     object,
-    uuid(a6cf90ac-15b3-11d2-932e-00805f8add32),
+    uuid(9b93aab4-7fe8-4f79-9ad2-0623178a0c46),
     local
 ]
 interface nsIDOMHTMLObjectElement : nsIDOMHTMLElement
@@ -1697,6 +1729,11 @@ interface nsIDOMHTMLObjectElement : nsIDOMHTMLElement
     nsresult GetWidth(nsAString *aWidth);
     nsresult SetWidth(const nsAString *aWidth);
     nsresult GetContentDocument(nsIDOMDocument **aContentDocument);
+    nsresult GetWillValidate(PRBool *aWillValidate);
+    nsresult GetValidity(nsIDOMValidityState **aValidity);
+    nsresult GetValidationMessage(nsAString *aValidationMessage);
+    nsresult CheckValidity(PRBool *_retval);
+    nsresult SetCustomValidity(const nsAString *error);
 }
 
 [
@@ -2610,7 +2647,7 @@ interface nsIController : nsISupports
 
 [
     object,
-    uuid(dd254504-e273-4923-9ec1-d8421a6635f1),
+    uuid(71afb9e6-e8a7-475d-89c4-e46221ebe1a4),
     local
 ]
 interface nsIContent : nsISupports
@@ -2620,7 +2657,7 @@ interface nsIContent : nsISupports
 
 [
     object,
-    uuid(b2274bc3-4a1c-4e64-8de4-3bc650288438),
+    uuid(c38a7935-c854-4df7-8fd4-a26f0d279f31),
     local
 ]
 interface nsIDocument : nsISupports
@@ -2810,7 +2847,7 @@ interface nsIHTMLEditor : nsISupports
 
 [
     object,
-    uuid(bf6db598-3833-400b-9e53-ec220cb2496c),
+    uuid(98cdbcc4-2d81-4191-a63f-b6c52085edbc),
     local
 ]
 interface nsIDocShell : nsISupports
@@ -2893,6 +2930,9 @@ interface nsIDocShell : nsISupports
     nsresult GetCanExecuteScripts(PRBool *aCanExecuteScripts);
     nsresult GetIsActive(PRBool *aIsActive);
     nsresult SetIsActive(PRBool aIsActive);
+    nsresult GetHistoryID(PRUint64 *aHistoryID);
+    nsresult GetIsAppTab(PRBool *aIsAppTab);
+    nsresult SetIsAppTab(PRBool aIsAppTab);
 }
 
 [
@@ -2922,20 +2962,69 @@ interface nsIMutationObserver : nsISupports
 
 [
     object,
-    uuid(4e14e321-a4bb-49f8-a57a-2363668d14d0),
+    uuid(cbc0cbd8-bbb7-46d6-a551-378a6953a714),
+    local
+]
+interface nsIParser : nsISupports
+{
+    typedef int nsDTDMode;
+    typedef int eParserCommands;
+
+    void SetContentSink(nsIContentSink *aSink);
+    nsIContentSink *GetContentSink();
+    void GetCommand(nsACString *aCommand);
+    void SetCommand2(const char *aCommand);
+    void SetCommand(eParserCommands aParserCommand);
+    void SetDocumentCharset(const nsACString *aCharset, PRInt32 aSource);
+    void GetDocumentCharset(nsACString *oCharset, PRInt32 *oSource);
+    void SetParserFilter(nsIParserFilter *aFilter);
+    nsresult GetChannel(nsIChannel **aChannel);
+    nsresult GetDTD(nsIDTD **aDTD);
+    nsresult GetStreamListener(nsIStreamListener **aListener);
+    nsresult ContinueInterruptedParsing();
+    void BlockParser();
+    void UnblockParser();
+    PRBool IsParserEnabled();
+    PRBool IsComplete();
+    nsresult Parse(nsIURI *aURL, nsIRequestObserver *aListener, void *aKey, 
nsDTDMode aMode);
+    nsresult Parse2(const nsAString *aSourceBuffer, void *aKey, const 
nsACString *aMimeType, PRBool aLastCall, nsDTDMode aMode);
+    void *GetRootContextKey();
+    nsresult Terminate();
+    nsresult ParseFragment(const nsAString *aSourceBuffer, void *aKey, void 
/*nsTArray<nsString>*/ *aTagStack,
+            PRBool aXMLMode, const nsACString *aContentType, nsDTDMode aMode);
+    nsresult ParseFragment2(const nsAString *aSourceBuffer, nsIContent 
*aTargetNode, nsIAtom *aContextLocalName,
+            PRInt32 aContextNamespace, PRBool aQuirks);
+    nsresult BuildModel();
+    nsresult CancelParsingEvents();
+    void Reset();
+    PRBool CanInterrupt();
+    PRBool IsInsertionPointDefined();
+    void BeginEvaluatingParserInsertedScript();
+    void EndEvaluatingParserInsertedScript();
+    void MarkAsNotScriptCreated();
+    PRBool IsScriptCreated();
+}
+
+[
+    object,
+    uuid(3d005225-210f-4b07-b1d9-96020574c437),
     local
 ]
 interface nsIDocumentObserver : nsIMutationObserver
 {
     typedef int nsUpdateType;
 
+    typedef struct {
+        PRUint64 mStates;
+    } nsEventStates;
+
     void BeginUpdate(nsIDocument *aDocument, nsUpdateType aUpdateType);
     void EndUpdate(nsIDocument *aDocument, nsUpdateType aUpdateType);
     void BeginLoad(nsIDocument *aDocument);
     void EndLoad(nsIDocument *aDocument);
     void ContentStatesChanged(nsIDocument *aDocument, nsIContent *aContent1, 
nsIContent *aContent2,
-                              PRInt32 aStateMask);
-    void DocumentStatesChanged(nsIDocument* aDocument, PRInt32 aStateMask);
+                              nsEventStates aStateMask);
+    void DocumentStatesChanged(nsIDocument* aDocument, nsEventStates 
aStateMask);
     void StyleSheetAdded(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, 
PRBool aDocumentSheet);
     void StyleSheetRemoved(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, 
PRBool aDocumentSheet);
     void StyleSheetApplicableStateChanged(nsIDocument *aDocument, 
nsIStyleSheet *aStyleSheet,
@@ -2945,7 +3034,25 @@ interface nsIDocumentObserver : nsIMutationObserver
     void StyleRuleAdded(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, 
nsIStyleRule *aStyleRule);
     void StyleRuleRemoved(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, 
nsIStyleRule *aStyleRule);
     void BindToDocument(nsIDocument *aDocument, nsIContent *aContent);
-    void DoneAddingChildren(nsIContent *aContent, PRBool aHaveNotified);
+    nsresult DoneAddingChildren(nsIContent *aContent, PRBool aHaveNotified, 
nsIParser *aParser);
+}
+
+[
+    object,
+    uuid(3682dd99-8560-44f4-9b8f-ccce9d7b96fb),
+    local
+]
+interface nsIContentUtils : nsISupports
+{
+    PRBool IsSafeToRunScript();
+    PRBool ParseIntMarginValue(const nsAString *aString, nsIntMargin *result);
+    void /*already_AddRefed<nsIDocumentLoaderFactory>*/ 
FindInternalContentViewer(
+            const char *aType, int /*ContentViewerType*/ *aLoaderType);
+    nsresult AddDocumentObserver(nsIDocument *aDocument, nsIDocumentObserver 
*aObserver);
+    nsresult RemoveDocumentObserver(nsIDocument *aDocument, 
nsIDocumentObserver *aObserver);
+    nsresult AddMutationObserver(nsINode *aNode, nsIMutationObserver 
*aObserver);
+    nsresult RemoveMutationObserver(nsINode *aNode, nsIMutationObserver 
*aObserver);
+    nsresult AddScriptRunner(nsIRunnable *aRunnable);
 }
 
 /* Parts of npapi.h */
@@ -3078,6 +3185,7 @@ interface nsIPluginInstance : nsISupports
 {
     typedef void *JSContext;
     typedef void *JSObject;
+    typedef void *gfxASurface;
 
     nsresult Initialize(nsIPluginInstanceOwner *aOwner, const char *aMIMEType);
     nsresult Start();
@@ -3107,6 +3215,11 @@ interface nsIPluginInstance : nsISupports
     nsresult IsTransparent(PRBool *_retval);
     nsresult GetValueFromPlugin(NPPVariable variable, void *aValue);
     nsresult GetDrawingModel(PRInt32 *_retval);
+    nsresult AsyncSetWindow(NPWindow *aWindow);
+    nsresult NotifyPainted();
+    nsresult GetSurface(gfxASurface **aSurface);
+    nsresult UseAsyncPainting(PRBool *_retval);
+
 }
 
 [
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 327b191..e442c9f 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -1462,6 +1462,24 @@ static nsresult NSAPI 
nsHttpChannelInternal_GetCanceled(nsIHttpChannelInternal *
     return NS_ERROR_NOT_IMPLEMENTED;
 }
 
+static nsresult NSAPI 
nsHttpChannelInternal_GetChannelIsForDownload(nsIHttpChannelInternal *iface, 
PRBool *aCanceled)
+{
+    nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
+
+    FIXME("(%p)->(%p)\n", This, aCanceled);
+
+    return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+static nsresult NSAPI 
nsHttpChannelInternal_SetChannelIsForDownload(nsIHttpChannelInternal *iface, 
PRBool aCanceled)
+{
+    nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
+
+    FIXME("(%p)->(%x)\n", This, aCanceled);
+
+    return NS_ERROR_NOT_IMPLEMENTED;
+}
+
 static const nsIHttpChannelInternalVtbl nsHttpChannelInternalVtbl = {
     nsHttpChannelInternal_QueryInterface,
     nsHttpChannelInternal_AddRef,
@@ -1474,7 +1492,9 @@ static const nsIHttpChannelInternalVtbl 
nsHttpChannelInternalVtbl = {
     nsHttpChannelInternal_SetupFallbackChannel,
     nsHttpChannelInternal_GetForceAllowThirdPartyCookie,
     nsHttpChannelInternal_SetForceAllowThirdPartyCookie,
-    nsHttpChannelInternal_GetCanceled
+    nsHttpChannelInternal_GetCanceled,
+    nsHttpChannelInternal_GetChannelIsForDownload,
+    nsHttpChannelInternal_SetChannelIsForDownload
 };
 
 static BOOL ensure_uri(nsWineURI *This)
diff --git a/dlls/mshtml/tests/exectest.html b/dlls/mshtml/tests/exectest.html
index 65d3701..1d84917 100644
--- a/dlls/mshtml/tests/exectest.html
+++ b/dlls/mshtml/tests/exectest.html
@@ -15,12 +15,12 @@ ok(len === 3, "init length = " + len);
 
 document.write("<script>"
     + "var len = document.getElementsByTagName('div').length;"
-    + "external.todo_wine_ok(len === 3, 'unexpected length ' + len);"
+    + "ok(len === 3, 'unexpected length ' + len);"
     + "executed = true;"
     + "<" + "/script>");
 
 len = document.getElementsByTagName('script').length;
-external.todo_wine_ok(len === 2, "script col length = " + len);
+ok(len === 2, "script col length = " + len);
 ok(executed, "writen script not executed");
 
 external.reportSuccess();


Reply via email to