mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-11-22 06:21:45 +03:00
Implement javascript scheme url script https://wiki.whatwg.org/wiki/URL_schemes
This commit is contained in:
parent
529b94be73
commit
084861a31b
@ -2707,7 +2707,7 @@ bool html_get_id_offset(hlcache_handle *h, lwc_string *frag_id, int *x, int *y)
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool html_exec(struct content *c, const char *src, size_t srclen)
|
||||
bool html_exec(struct content *c, const char *src, size_t srclen)
|
||||
{
|
||||
html_content *htmlc = (html_content *)c;
|
||||
bool result = false;
|
||||
|
@ -300,6 +300,9 @@ bool html_redraw_inline_borders(struct box *box, struct rect b,
|
||||
/* in html/html_script.c */
|
||||
dom_hubbub_error html_process_script(void *ctx, dom_node *node);
|
||||
|
||||
/* in html/html.c */
|
||||
bool html_exec(struct content *c, const char *src, size_t srclen);
|
||||
|
||||
/**
|
||||
* Attempt script execution for defer and async scripts
|
||||
*
|
||||
|
@ -572,6 +572,7 @@ struct mouse_action_state {
|
||||
ACTION_NOSEND, /**< do not send status and pointer message */
|
||||
ACTION_SUBMIT,
|
||||
ACTION_GO,
|
||||
ACTION_JS,
|
||||
} action;
|
||||
} result;
|
||||
|
||||
@ -1056,6 +1057,28 @@ html_object_mouse_action(html_content *html,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* determine if a url has a javascript scheme
|
||||
*
|
||||
* \param urm The url to check.
|
||||
* \return true if the url is a javascript scheme else false
|
||||
*/
|
||||
static bool is_javascript_navigate_url(nsurl *url)
|
||||
{
|
||||
bool is_js = false;
|
||||
lwc_string *scheme;
|
||||
|
||||
scheme = nsurl_get_component(url, NSURL_SCHEME);
|
||||
if (scheme != NULL) {
|
||||
if (scheme == corestring_lwc_javascript) {
|
||||
is_js = true;
|
||||
}
|
||||
lwc_string_unref(scheme);
|
||||
}
|
||||
return is_js;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* process mouse activity on a link
|
||||
*/
|
||||
@ -1125,13 +1148,18 @@ link_mouse_action(html_content *html,
|
||||
&msg_data);
|
||||
|
||||
} else if (mouse & (BROWSER_MOUSE_CLICK_1 | BROWSER_MOUSE_CLICK_2)) {
|
||||
mas->result.action = ACTION_GO;
|
||||
if (is_javascript_navigate_url(mas->link.url)) {
|
||||
mas->result.action = ACTION_JS;
|
||||
} else {
|
||||
mas->result.action = ACTION_GO;
|
||||
}
|
||||
}
|
||||
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* process mouse activity if it is not anything else
|
||||
*/
|
||||
@ -1296,10 +1324,11 @@ mouse_action_drag_none(html_content *html,
|
||||
browser_mouse_state mouse,
|
||||
int x, int y)
|
||||
{
|
||||
nserror res;
|
||||
struct content *c = (struct content *)html;
|
||||
union content_msg_data msg_data;
|
||||
lwc_string *path;
|
||||
|
||||
nserror res;
|
||||
/**
|
||||
* computed state
|
||||
*
|
||||
@ -1395,6 +1424,16 @@ mouse_action_drag_none(html_content *html,
|
||||
NULL);
|
||||
break;
|
||||
|
||||
case ACTION_JS:
|
||||
path = nsurl_get_component(mas.link.url, NSURL_PATH);
|
||||
if (path != NULL) {
|
||||
html_exec(c,
|
||||
lwc_string_data(path),
|
||||
lwc_string_length(path));
|
||||
lwc_string_unref(path);
|
||||
}
|
||||
break;
|
||||
|
||||
case ACTION_NOSEND:
|
||||
case ACTION_NONE:
|
||||
res = NSERROR_OK;
|
||||
|
Loading…
Reference in New Issue
Block a user