diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index e746fb0bf71..048b4ae02b1 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -26,6 +26,7 @@ #include "windef.h" #include "winbase.h" #include "winuser.h" +#include "wininet.h" #include "ole2.h" #include "perhist.h" #include "mshtmdid.h" @@ -617,8 +618,42 @@ static HRESULT WINAPI HTMLDocument_put_cookie(IHTMLDocument2 *iface, BSTR v) static HRESULT WINAPI HTMLDocument_get_cookie(IHTMLDocument2 *iface, BSTR *p) { HTMLDocument *This = HTMLDOC_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + DWORD size; + BOOL bret; + + TRACE("(%p)->(%p)\n", This, p); + + size = 0; + bret = InternetGetCookieExW(This->window->url, NULL, NULL, &size, 0, NULL); + if(!bret) { + switch(GetLastError()) { + case ERROR_INSUFFICIENT_BUFFER: + break; + case ERROR_NO_MORE_ITEMS: + *p = NULL; + return S_OK; + default: + FIXME("InternetGetCookieExW failed: %u\n", GetLastError()); + return HRESULT_FROM_WIN32(GetLastError()); + } + } + + if(!size) { + *p = NULL; + return S_OK; + } + + *p = SysAllocStringLen(NULL, size-1); + if(!*p) + return E_OUTOFMEMORY; + + bret = InternetGetCookieExW(This->window->url, NULL, *p, &size, 0, NULL); + if(!bret) { + ERR("InternetGetCookieExW failed: %u\n", GetLastError()); + return E_FAIL; + } + + return S_OK; } static HRESULT WINAPI HTMLDocument_put_expando(IHTMLDocument2 *iface, VARIANT_BOOL v)