Jacek Caban : urlmon: Added UrlMkGetSessionOption implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jul 17 07:00:20 CDT 2006


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sun Jul 16 21:40:33 2006 +0200

urlmon: Added UrlMkGetSessionOption implementation.

---

 dlls/urlmon/session.c     |   55 +++++++++++++++++++++++++++++++++++++++++++++
 dlls/urlmon/tests/misc.c  |   41 ++++++++++++++++++++++++++++++++++
 dlls/urlmon/urlmon_main.c |   11 ---------
 3 files changed, 96 insertions(+), 11 deletions(-)

diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c
index af07afc..dd0cd27 100644
--- a/dlls/urlmon/session.c
+++ b/dlls/urlmon/session.c
@@ -323,3 +323,58 @@ HRESULT WINAPI CoInternetGetSession(DWOR
     *ppIInternetSession = &InternetSession;
     return S_OK;
 }
+
+/**************************************************************************
+ *                 UrlMkGetSessionOption (URLMON.@)
+ */
+static BOOL get_url_encoding(HKEY root, DWORD *encoding)
+{
+    DWORD size = sizeof(DWORD), res, type;
+    HKEY hkey;
+
+    static const WCHAR wszKeyName[] = 
+        {'S','O','F','T','W','A','R','E',
+         '\\','M','i','c','r','o','s','o','f','t',
+         '\\','W','i','n','d','o','w','s',
+         '\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n',
+         '\\','I','n','t','e','r','n','e','t',' ','S','e','t','t','i','n','g','s',0};
+    static const WCHAR wszUrlEncoding[] = {'U','r','l','E','n','c','o','d','i','n','g',0};
+
+    res = RegOpenKeyW(root, wszKeyName, &hkey);
+    if(res != ERROR_SUCCESS)
+        return FALSE;
+
+    res = RegQueryValueExW(hkey, wszUrlEncoding, NULL, &type, (LPBYTE)encoding, &size);
+    RegCloseKey(hkey);
+
+    return res == ERROR_SUCCESS;
+}
+
+HRESULT WINAPI UrlMkGetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBufferLength,
+                                     DWORD* pdwBufferLength, DWORD dwReserved)
+{
+    TRACE("(%lx, %p, %ld, %p)\n", dwOption, pBuffer, dwBufferLength, pdwBufferLength);
+
+    if(dwReserved)
+        WARN("dwReserved = %ld\n", dwReserved);
+
+    switch(dwOption) {
+    case URLMON_OPTION_URL_ENCODING: {
+        DWORD encoding = 0;
+
+        if(!pBuffer || dwBufferLength < sizeof(DWORD) || !pdwBufferLength)
+            return E_INVALIDARG;
+
+        if(!get_url_encoding(HKEY_CURRENT_USER, &encoding))
+            get_url_encoding(HKEY_LOCAL_MACHINE, &encoding);
+
+        *pdwBufferLength = sizeof(DWORD);
+        *(DWORD*)pBuffer = encoding ? URL_ENCODING_DISABLE_UTF8 : URL_ENCODING_ENABLE_UTF8;
+        return S_OK;
+    }
+    default:
+        FIXME("unsupported option %lx\n", dwOption);
+    }
+
+    return E_INVALIDARG;
+}
diff --git a/dlls/urlmon/tests/misc.c b/dlls/urlmon/tests/misc.c
index 6e034c0..14b3fa4 100644
--- a/dlls/urlmon/tests/misc.c
+++ b/dlls/urlmon/tests/misc.c
@@ -953,6 +953,46 @@ static void test_ReleaseBindInfo(void)
     ok(bi.pUnk == &unk, "bi.pUnk=%p, expected %p\n", bi.pUnk, &unk);
 }
 
+static void test_UrlMkGetSessionOption(void)
+{
+    DWORD encoding, size;
+    HRESULT hres;
+
+    size = encoding = 0xdeadbeef;
+    hres = UrlMkGetSessionOption(URLMON_OPTION_URL_ENCODING, &encoding,
+                                 sizeof(encoding), &size, 0);
+    ok(hres == S_OK, "UrlMkGetSessionOption failed: %08lx\n", hres);
+    ok(encoding != 0xdeadbeef, "encoding not changed\n");
+    ok(size == sizeof(encoding), "size=%ld\n", size);
+
+    size = encoding = 0xdeadbeef;
+    hres = UrlMkGetSessionOption(URLMON_OPTION_URL_ENCODING, &encoding,
+                                 sizeof(encoding)+1, &size, 0);
+    ok(hres == S_OK, "UrlMkGetSessionOption failed: %08lx\n", hres);
+    ok(encoding != 0xdeadbeef, "encoding not changed\n");
+    ok(size == sizeof(encoding), "size=%ld\n", size);
+
+    size = encoding = 0xdeadbeef;
+    hres = UrlMkGetSessionOption(URLMON_OPTION_URL_ENCODING, &encoding,
+                                 sizeof(encoding)-1, &size, 0);
+    ok(hres == E_INVALIDARG, "UrlMkGetSessionOption failed: %08lx\n", hres);
+    ok(encoding == 0xdeadbeef, "encoding = %08lx, exepcted 0xdeadbeef\n", encoding);
+    ok(size == 0xdeadbeef, "size=%ld\n", size);
+
+    size = encoding = 0xdeadbeef;
+    hres = UrlMkGetSessionOption(URLMON_OPTION_URL_ENCODING, NULL,
+                                 sizeof(encoding)-1, &size, 0);
+    ok(hres == E_INVALIDARG, "UrlMkGetSessionOption failed: %08lx\n", hres);
+    ok(encoding == 0xdeadbeef, "encoding = %08lx, exepcted 0xdeadbeef\n", encoding);
+    ok(size == 0xdeadbeef, "size=%ld\n", size);
+
+    encoding = 0xdeadbeef;
+    hres = UrlMkGetSessionOption(URLMON_OPTION_URL_ENCODING, &encoding,
+                                 sizeof(encoding)-1, NULL, 0);
+    ok(hres == E_INVALIDARG, "UrlMkGetSessionOption failed: %08lx\n", hres);
+    ok(encoding == 0xdeadbeef, "encoding = %08lx, exepcted 0xdeadbeef\n", encoding);
+}
+
 START_TEST(misc)
 {
     OleInitialize(NULL);
@@ -967,6 +1007,7 @@ START_TEST(misc)
     test_ZoneManager();
     test_NameSpace();
     test_ReleaseBindInfo();
+    test_UrlMkGetSessionOption();
 
     OleUninitialize();
 }
diff --git a/dlls/urlmon/urlmon_main.c b/dlls/urlmon/urlmon_main.c
index f35624a..f4c51d8 100644
--- a/dlls/urlmon/urlmon_main.c
+++ b/dlls/urlmon/urlmon_main.c
@@ -283,17 +283,6 @@ HRESULT WINAPI UrlMkSetSessionOption(DWO
     return S_OK;
 }
 
-/**************************************************************************
- *                 UrlMkGetSessionOption (URLMON.@)
- */
-HRESULT WINAPI UrlMkGetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBufferLength,
-                                        DWORD* pdwBufferLength, DWORD dwReserved)
-{
-    FIXME("(%#lx, %p, %#lx, %p): stub\n", dwOption, pBuffer, dwBufferLength, pdwBufferLength);
-
-    return S_OK;
-}
-
 static const CHAR Agent[] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)";
 
 /**************************************************************************




More information about the wine-cvs mailing list