Jacek Caban : urlmon: Added support for javascript URIs.

Alexandre Julliard julliard at winehq.org
Fri Jul 22 10:15:59 CDT 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jul 22 14:44:26 2011 +0200

urlmon: Added support for javascript URIs.

---

 dlls/urlmon/tests/uri.c |   76 ++++++++++++++++++++++++++++++++++++++++++++++-
 dlls/urlmon/uri.c       |   18 +++++++++++
 2 files changed, 93 insertions(+), 1 deletions(-)

diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c
index 477722f..a11b9d0 100644
--- a/dlls/urlmon/tests/uri.c
+++ b/dlls/urlmon/tests/uri.c
@@ -4192,7 +4192,81 @@ static const uri_properties uri_tests[] = {
             {URLZONE_INVALID,E_NOTIMPL,FALSE}
         }
     },
-
+    {   "javascript:void", 0, S_OK, FALSE,
+        {
+            {"javascript:void",S_OK},
+            {"",S_FALSE},
+            {"javascript:void",S_OK},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"void",S_OK},
+            {"void",S_OK},
+            {"",S_FALSE},
+            {"javascript:void",S_OK},
+            {"javascript",S_OK},
+            {"",S_FALSE},
+            {"",S_FALSE}
+        },
+        {
+            {Uri_HOST_UNKNOWN,S_OK},
+            {0,S_FALSE},
+            {URL_SCHEME_JAVASCRIPT,S_OK},
+            {URLZONE_INVALID,E_NOTIMPL}
+        }
+    },
+    {   "javascript://undefined", 0, S_OK, FALSE,
+        {
+            {"javascript://undefined",S_OK},
+            {"",S_FALSE},
+            {"javascript://undefined",S_OK},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"//undefined",S_OK},
+            {"//undefined",S_OK},
+            {"",S_FALSE},
+            {"javascript://undefined",S_OK},
+            {"javascript",S_OK},
+            {"",S_FALSE},
+            {"",S_FALSE}
+        },
+        {
+            {Uri_HOST_UNKNOWN,S_OK},
+            {0,S_FALSE},
+            {URL_SCHEME_JAVASCRIPT,S_OK},
+            {URLZONE_INVALID,E_NOTIMPL}
+        }
+    },
+    {   "JavaSCript:escape('/\\?#?')", 0, S_OK, FALSE,
+        {
+            {"javascript:escape('/\\?#?')",S_OK},
+            {"",S_FALSE},
+            {"javascript:escape('/\\?#?')",S_OK},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"escape('/\\?#?')",S_OK},
+            {"escape('/\\?#?')",S_OK},
+            {"",S_FALSE},
+            {"JavaSCript:escape('/\\?#?')",S_OK},
+            {"javascript",S_OK},
+            {"",S_FALSE},
+            {"",S_FALSE}
+        },
+        {
+            {Uri_HOST_UNKNOWN,S_OK},
+            {0,S_FALSE},
+            {URL_SCHEME_JAVASCRIPT,S_OK},
+            {URLZONE_INVALID,E_NOTIMPL}
+        }
+    }
 };
 
 typedef struct _invalid_uri {
diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c
index 33d0eb2..4586f9d 100644
--- a/dlls/urlmon/uri.c
+++ b/dlls/urlmon/uri.c
@@ -2068,6 +2068,15 @@ static BOOL parse_path_opaque(const WCHAR **ptr, parse_data *data, DWORD flags)
 static BOOL parse_hierpart(const WCHAR **ptr, parse_data *data, DWORD flags) {
     const WCHAR *start = *ptr;
 
+    /* For javascript: URIs, simply set everything as a path */
+    if(data->scheme_type == URL_SCHEME_JAVASCRIPT) {
+        data->path = *ptr;
+        data->path_len = strlenW(*ptr);
+        data->is_opaque = TRUE;
+        *ptr += data->path_len;
+        return TRUE;
+    }
+
     /* Checks if the authority information needs to be parsed. */
     if(is_hierarchical_uri(ptr, data)) {
         /* Only treat it as a hierarchical URI if the scheme_type is known or
@@ -3079,6 +3088,15 @@ static BOOL canonicalize_path_opaque(const parse_data *data, Uri *uri, DWORD fla
 
     uri->path_start = uri->canon_len;
 
+    /* For javascript: URIs, simply copy path part withoutany canonicalization */
+    if(data->scheme_type == URL_SCHEME_JAVASCRIPT) {
+        if(!computeOnly)
+            memcpy(uri->canon_uri+uri->canon_len, data->path, data->path_len*sizeof(WCHAR));
+        uri->path_len = data->path_len;
+        uri->canon_len += data->path_len;
+        return TRUE;
+    }
+
     /* Windows doesn't allow a "//" to appear after the scheme
      * of a URI, if it's an opaque URI.
      */




More information about the wine-cvs mailing list