Hi all,

We're nearing the time for the next Gecko update. Beta builds are done and available on Sourceforge [1]. To use them, you need to download the .cab file, put it as you usually do into the right directory (most likely wine_gecko-1.2.0-beta1-x86.cab, see [2] for details) and apply the attached patch to recent Wine git version.

The plan for release is other than we usually did and we have still some work to do. I hope to do the release short after Firefox 4 release, which is scheduled for the end of February. Firefox is nearing final beta and we will branch together with RC branch for Firefox 4. This should give us more stability in the code base than we usually had. We've never succeeded in avoiding regressions with the new Gecko releases and I hope to improve this situation. This early beta build is one part of the plan. It would be great if you could use it for some time or try some apps with it. I'm most interested in reports about regression, but also general stability and improvements.

* Changes

- We use Firefox 4 beta11pre codebase
- Some regression caused by integration with new parser are fixed (affected among others CS4 installer, STO, EQ2) - IO fixes for custom protocol handlers, mostly affecting .chm files and Outlook

If you hit a blank-page bug, some page elements don't work or just a crash, there is a big chance that this build will fix it. Of course it's always nice to test everything regardless if it's currently working or not.

* TODO

- win64 fix
It currently crashes, that's a regression. I've decided to do the beta release anyways, but it's an obvious blocker for further releases. I've put win64 builds on Sourceforge in case anyone is interested in looking at them, but the problem seems to be in the build, not in Wine.

- MSI packages
This beta still uses .cab files done on Windows. We're planning to do some work on it with Hans and Alexandre so that the final release will use MSI files.

- dbghelp fixes
winedbg has problems with debug info from Gecko debug build, making debugging possibilities quite limited and backtraces lacking most of the calls. This is not related to Gecko release itself, but still it would be great to have it fixed.

- Getting rid of ugly hacks that Firefox uses
Esp. API hooks. I don't think it's acceptable for us.

- Tests and fixes
The more tests, the better. I really hope to get community help here.

* For packagers

If you're considering building the next Gecko release yourself, it's probably a good idea to try the compilation now. It requires very recent mingw-w64, so a package update (or creating a new package if it's not yet available for the distro) will most likely be needed.

Thanks,
    Jacek


[1] http://sourceforge.net/projects/wine/files/Wine%20Gecko/1.2.0-beta1/
[2] http://wiki.winehq.org/Gecko


diff --git a/dlls/appwiz.cpl/addons.c b/dlls/appwiz.cpl/addons.c
index d19af66..e1f98af 100644
--- a/dlls/appwiz.cpl/addons.c
+++ b/dlls/appwiz.cpl/addons.c
@@ -50,7 +50,7 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(appwizcpl);
 
-#define GECKO_VERSION "1.1.0"
+#define GECKO_VERSION "1.2.0-beta1"
 
 #ifdef __i386__
 #define ARCH_STRING "x86"
diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c
index c4f7945..12ae351 100644
--- a/dlls/mshtml/mutation.c
+++ b/dlls/mshtml/mutation.c
@@ -305,9 +305,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 +319,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;
 }
@@ -557,12 +575,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 +657,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 +670,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 = {
diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl
index 4248768..52c889e 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-beta1\"")
 cpp_quote("#define GECKO_VERSION_STRING \"Wine Gecko \" GECKO_VERSION")
 
 import "wtypes.idl";
@@ -148,8 +148,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 +473,7 @@ interface nsIHttpChannel : nsIChannel
 
 [
     object,
-    uuid(91dbb42a-dffc-4f47-8b27-9579c0d92c3f),
+    uuid(9fb2a161-d075-4bf2-b07a-26bac650cc81),
     local
 ]
 interface nsIHttpChannelInternal : nsISupports
@@ -483,6 +487,8 @@ interface nsIHttpChannelInternal : nsISupports
     nsresult GetForceAllowThirdPartyCookie(PRBool 
*aForceAllowThirdPartyCookie);
     nsresult SetForceAllowThirdPartyCookie(PRBool aForceAllowThirdPartyCookie);
     nsresult GetCanceled(PRBool *aCanceled);
+    nsresult GetChannelIsForDownload(PRBool *aChannelIsForDownload);
+    nsresult SetChannelIsForDownload(PRBool aChannelIsForDownload);
 }
 
 [
@@ -920,7 +926,7 @@ interface nsIDOMDocument : nsIDOMNode
 
 [
     object,
-    uuid(7485b35e-d215-42a0-8a67-896f86c8afd9),
+    uuid(92f2c6f8-3668-4a47-8251-2a900afe11fa),
     local
 ]
 interface nsIDOMNSDocument : nsISupports
@@ -937,6 +943,7 @@ 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();
@@ -1204,32 +1211,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
@@ -1238,6 +1249,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);
@@ -1247,19 +1260,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);
@@ -1274,6 +1302,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);
@@ -1332,7 +1365,7 @@ interface nsIDOMHTMLOptionsCollection : nsISupports
 
 [
     object,
-    uuid(110a4b15-e0a2-48d7-8e59-d8d94ef510ad),
+    uuid(e3c6d960-972c-4a5e-a8f4-6ca65d578abf),
     local
 ]
 interface nsIDOMHTMLSelectElement : nsIDOMHTMLElement
@@ -1364,6 +1397,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);
 }
 
 [
@@ -1642,7 +1680,7 @@ interface nsIDOMHTMLFrameElement : nsIDOMHTMLElement
 
 [
     object,
-    uuid(a6cf90ac-15b3-11d2-932e-00805f8add32),
+    uuid(9b93aab4-7fe8-4f79-9ad2-0623178a0c46),
     local
 ]
 interface nsIDOMHTMLObjectElement : nsIDOMHTMLElement
@@ -1683,6 +1721,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);
 }
 
 [
@@ -2596,7 +2639,7 @@ interface nsIController : nsISupports
 
 [
     object,
-    uuid(dd254504-e273-4923-9ec1-d8421a6635f1),
+    uuid(71afb9e6-e8a7-475d-89c4-e46221ebe1a4),
     local
 ]
 interface nsIContent : nsISupports
@@ -2606,7 +2649,7 @@ interface nsIContent : nsISupports
 
 [
     object,
-    uuid(b2274bc3-4a1c-4e64-8de4-3bc650288438),
+    uuid(c38a7935-c854-4df7-8fd4-a26f0d279f31),
     local
 ]
 interface nsIDocument : nsISupports
@@ -2796,7 +2839,7 @@ interface nsIHTMLEditor : nsISupports
 
 [
     object,
-    uuid(bf6db598-3833-400b-9e53-ec220cb2496c),
+    uuid(98cdbcc4-2d81-4191-a63f-b6c52085edbc),
     local
 ]
 interface nsIDocShell : nsISupports
@@ -2879,6 +2922,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);
 }
 
 [
@@ -2908,20 +2954,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,
@@ -2931,7 +3026,7 @@ 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);
 }
 
 /* Parts of npapi.h */
@@ -3064,6 +3159,7 @@ interface nsIPluginInstance : nsISupports
 {
     typedef void *JSContext;
     typedef void *JSObject;
+    typedef void *gfxASurface;
 
     nsresult Initialize(nsIPluginInstanceOwner *aOwner, const char *aMIMEType);
     nsresult Start();
@@ -3093,6 +3189,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 492f845..6fde0b2 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