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