Jacek Caban : mshtml: Use URLDownloadToFile to download Gecko package file.

Alexandre Julliard julliard at winehq.org
Mon Oct 4 11:04:02 CDT 2010


Module: wine
Branch: master
Commit: a9b4f82c7c27ffad39934503e3accdff4607f63c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a9b4f82c7c27ffad39934503e3accdff4607f63c

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Oct  1 15:31:05 2010 +0200

mshtml: Use URLDownloadToFile to download Gecko package file.

---

 dlls/mshtml/install.c |   92 +++++++------------------------------------------
 1 files changed, 13 insertions(+), 79 deletions(-)

diff --git a/dlls/mshtml/install.c b/dlls/mshtml/install.c
index 243788e..c635893 100644
--- a/dlls/mshtml/install.c
+++ b/dlls/mshtml/install.c
@@ -63,30 +63,8 @@ static const WCHAR mshtml_keyW[] =
      '\\','M','S','H','T','M','L',0};
 
 static HWND install_dialog = NULL;
-static LPWSTR tmp_file_name = NULL;
-static HANDLE tmp_file = INVALID_HANDLE_VALUE;
 static LPWSTR url = NULL;
 
-static void clean_up(void)
-{
-    if(tmp_file != INVALID_HANDLE_VALUE)
-        CloseHandle(tmp_file);
-
-    if(tmp_file_name) {
-        DeleteFileW(tmp_file_name);
-        heap_free(tmp_file_name);
-        tmp_file_name = NULL;
-    }
-
-    if(tmp_file != INVALID_HANDLE_VALUE) {
-        CloseHandle(tmp_file);
-        tmp_file = INVALID_HANDLE_VALUE;
-    }
-
-    if(install_dialog)
-        EndDialog(install_dialog, 0);
-}
-
 static void set_status(DWORD id)
 {
     HWND status = GetDlgItem(install_dialog, ID_DWL_STATUS);
@@ -174,13 +152,10 @@ static BOOL install_cab(LPCWSTR file_name)
     heap_free(file_name_a);
     if(FAILED(hres)) {
         ERR("Could not extract package: %08x\n", hres);
-        clean_up();
         return FALSE;
     }
 
     set_registry(install_dir);
-    clean_up();
-
     return TRUE;
 }
 
@@ -313,26 +288,7 @@ static ULONG WINAPI InstallCallback_Release(IBindStatusCallback *iface)
 static HRESULT WINAPI InstallCallback_OnStartBinding(IBindStatusCallback *iface,
         DWORD dwReserved, IBinding *pib)
 {
-    WCHAR tmp_dir[MAX_PATH];
-
     set_status(IDS_DOWNLOADING);
-
-    GetTempPathW(sizeof(tmp_dir)/sizeof(WCHAR), tmp_dir);
-
-    tmp_file_name = heap_alloc(MAX_PATH*sizeof(WCHAR));
-    GetTempFileNameW(tmp_dir, NULL, 0, tmp_file_name);
-
-    TRACE("creating temp file %s\n", debugstr_w(tmp_file_name));
-
-    tmp_file = CreateFileW(tmp_file_name, GENERIC_WRITE, 0, NULL, 
-                           CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
-
-    if(tmp_file == INVALID_HANDLE_VALUE) {
-        ERR("Could not create file: %d\n", GetLastError());
-        clean_up();
-        return E_FAIL;
-    }
-
     return S_OK;
 }
 
@@ -366,17 +322,10 @@ static HRESULT WINAPI InstallCallback_OnStopBinding(IBindStatusCallback *iface,
 {
     if(FAILED(hresult)) {
         ERR("Binding failed %08x\n", hresult);
-        clean_up();
         return S_OK;
     }
 
-    CloseHandle(tmp_file);
-    tmp_file = INVALID_HANDLE_VALUE;
-
     set_status(IDS_INSTALLING);
-
-    install_cab(tmp_file_name);
-
     return S_OK;
 }
 
@@ -391,21 +340,8 @@ static HRESULT WINAPI InstallCallback_GetBindInfo(IBindStatusCallback *iface,
 static HRESULT WINAPI InstallCallback_OnDataAvailable(IBindStatusCallback *iface, DWORD grfBSCF,
         DWORD dwSize, FORMATETC* pformatetc, STGMEDIUM* pstgmed)
 {
-    IStream *str = pstgmed->u.pstm;
-    BYTE buf[1024];
-    DWORD size;
-    HRESULT hres;
-
-    do {
-        DWORD written;
-
-        size = 0;
-        hres = IStream_Read(str, buf, sizeof(buf), &size);
-        if(size)
-            WriteFile(tmp_file, buf, size, &written, NULL);
-    }while(hres == S_OK);
-
-    return S_OK;
+    ERR("\n");
+    return E_NOTIMPL;
 }
 
 static HRESULT WINAPI InstallCallback_OnObjectAvailable(IBindStatusCallback *iface,
@@ -477,27 +413,23 @@ static LPWSTR get_url(void)
 
 static DWORD WINAPI download_proc(PVOID arg)
 {
-    IMoniker *mon;
-    IBindCtx *bctx;
-    IStream *str = NULL;
+    WCHAR tmp_dir[MAX_PATH], tmp_file[MAX_PATH];
     HRESULT hres;
 
-    CreateURLMoniker(NULL, url, &mon);
-    heap_free(url);
-    url = NULL;
+    GetTempPathW(sizeof(tmp_dir)/sizeof(WCHAR), tmp_dir);
+    GetTempFileNameW(tmp_dir, NULL, 0, tmp_file);
 
-    CreateAsyncBindCtx(0, &InstallCallback, 0, &bctx);
+    TRACE("using temp file %s\n", debugstr_w(tmp_file));
 
-    hres = IMoniker_BindToStorage(mon, bctx, NULL, &IID_IStream, (void**)&str);
-    IBindCtx_Release(bctx);
+    hres = URLDownloadToFileW(NULL, url, tmp_file, 0, &InstallCallback);
     if(FAILED(hres)) {
-        ERR("BindToStorage failed: %08x\n", hres);
+        ERR("URLDownloadToFile failed: %08x\n", hres);
         return 0;
     }
 
-    if(str)
-        IStream_Release(str);
-
+    install_cab(tmp_file);
+    DeleteFileW(tmp_file);
+    EndDialog(install_dialog, 0);
     return 0;
 }
 
@@ -552,6 +484,8 @@ BOOL install_wine_gecko(BOOL silent)
             DialogBoxW(hInst, MAKEINTRESOURCEW(ID_DWL_DIALOG), 0, installer_proc);
     }
 
+    heap_free(url);
+    url = NULL;
     ReleaseSemaphore(hsem, 1, NULL);
     CloseHandle(hsem);
 




More information about the wine-cvs mailing list