Jacek Caban : mshtml: Add IHTMLAnchorElement::get_protocol implementation.

Alexandre Julliard julliard at winehq.org
Tue Mar 19 17:09:21 CDT 2019


Module: wine
Branch: master
Commit: 971ee04c7f079d69ddf5c4686891b45974c5be19
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=971ee04c7f079d69ddf5c4686891b45974c5be19

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Mar 19 18:12:54 2019 +0100

mshtml: Add IHTMLAnchorElement::get_protocol implementation.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/htmlanchor.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 52 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c
index 2f53a3b..a4f8606 100644
--- a/dlls/mshtml/htmlanchor.c
+++ b/dlls/mshtml/htmlanchor.c
@@ -174,6 +174,27 @@ HRESULT handle_link_click_event(HTMLElement *element, nsAString *href_str, nsASt
     return hres;
 }
 
+static IUri *get_anchor_uri(HTMLAnchorElement *anchor)
+{
+    nsAString href_str;
+    IUri *uri = NULL;
+    nsresult nsres;
+
+    nsAString_Init(&href_str, NULL);
+    nsres = nsIDOMHTMLAnchorElement_GetHref(anchor->nsanchor, &href_str);
+    if(NS_SUCCEEDED(nsres)) {
+        const PRUnichar *href;
+
+        nsAString_GetData(&href_str, &href);
+        create_uri(href, 0, &uri);
+    }else {
+        ERR("GetHref failed: %08x\n", nsres);
+    }
+
+    nsAString_Finish(&href_str);
+    return uri;
+}
+
 static inline HTMLAnchorElement *impl_from_IHTMLAnchorElement(IHTMLAnchorElement *iface)
 {
     return CONTAINING_RECORD(iface, HTMLAnchorElement, IHTMLAnchorElement_iface);
@@ -481,8 +502,37 @@ static HRESULT WINAPI HTMLAnchorElement_put_protocol(IHTMLAnchorElement *iface,
 static HRESULT WINAPI HTMLAnchorElement_get_protocol(IHTMLAnchorElement *iface, BSTR *p)
 {
     HTMLAnchorElement *This = impl_from_IHTMLAnchorElement(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    BSTR scheme;
+    size_t len;
+    IUri *uri;
+    HRESULT hres;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    uri = get_anchor_uri(This);
+    if(!uri) {
+        WARN("Could not create IUri\n");
+        *p = NULL;
+        return S_OK;
+    }
+
+    hres = IUri_GetSchemeName(uri, &scheme);
+    IUri_Release(uri);
+    if(FAILED(hres))
+        return hres;
+
+    len = SysStringLen(scheme);
+    if(len) {
+        *p = SysAllocStringLen(scheme, len + 1);
+        if(*p)
+            (*p)[len] = ':';
+        else
+            hres = E_OUTOFMEMORY;
+    }else {
+        *p = NULL;
+    }
+    SysFreeString(scheme);
+    return hres;
 }
 
 static HRESULT WINAPI HTMLAnchorElement_put_search(IHTMLAnchorElement *iface, BSTR v)




More information about the wine-cvs mailing list