From 970245b28ac19472525b090ef7ed0464adb2f914 Mon Sep 17 00:00:00 2001 From: Witold Filipczyk Date: Sat, 25 Nov 2023 17:06:11 +0100 Subject: [PATCH] [protocol] protocol.cpp -> protocol.c --- src/ecmascript/ecmascript-c.cpp | 45 +++++++++++++++++++++++ src/ecmascript/ecmascript-c.h | 5 +++ src/ecmascript/ecmascript.cpp | 38 ------------------- src/ecmascript/ecmascript.h | 4 -- src/protocol/Makefile | 2 +- src/protocol/meson.build | 2 +- src/protocol/{protocol.cpp => protocol.c} | 6 ++- 7 files changed, 57 insertions(+), 45 deletions(-) rename src/protocol/{protocol.cpp => protocol.c} (98%) diff --git a/src/ecmascript/ecmascript-c.cpp b/src/ecmascript/ecmascript-c.cpp index 5430fa8d..aa549f45 100644 --- a/src/ecmascript/ecmascript-c.cpp +++ b/src/ecmascript/ecmascript-c.cpp @@ -7,11 +7,18 @@ #include "elinks.h" #include "dialogs/status.h" +#include "document/document.h" +#include "document/view.h" +#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript-c.h" #include "intl/libintl.h" +#include "protocol/uri.h" #include "session/session.h" +#include "session/task.h" +#include "util/conv.h" #include "util/memory.h" #include "util/string.h" +#include "viewer/text/view.h" extern int interpreter_count; extern int ecmascript_enabled; @@ -34,3 +41,41 @@ toggle_ecmascript(struct session *ses) } print_screen_status(ses); } + +void +ecmascript_protocol_handler(struct session *ses, struct uri *uri) +{ + struct document_view *doc_view = current_frame(ses); + struct string current_url = INIT_STRING(struri(uri), (int)strlen(struri(uri))); + char *redirect_url, *redirect_abs_url; + struct uri *redirect_uri; + + if (!doc_view) /* Blank initial document. TODO: Start at about:blank? */ + return; + assert(doc_view->vs); + if (doc_view->vs->ecmascript_fragile) + ecmascript_reset_state(doc_view->vs); + if (!doc_view->vs->ecmascript) + return; + + redirect_url = ecmascript_eval_stringback(doc_view->vs->ecmascript, + ¤t_url); + if (!redirect_url) + return; + /* XXX: This code snippet is duplicated over here, + * location_set_property(), html_a() and who knows where else. */ + redirect_abs_url = join_urls(doc_view->document->uri, + trim_chars(redirect_url, ' ', 0)); + mem_free(redirect_url); + if (!redirect_abs_url) + return; + redirect_uri = get_uri(redirect_abs_url, URI_NONE); + mem_free(redirect_abs_url); + if (!redirect_uri) + return; + + /* XXX: Is that safe to do at this point? --pasky */ + goto_uri_frame(ses, redirect_uri, doc_view->name, + CACHE_MODE_NORMAL); + done_uri(redirect_uri); +} diff --git a/src/ecmascript/ecmascript-c.h b/src/ecmascript/ecmascript-c.h index 961f2cbe..cd962f39 100644 --- a/src/ecmascript/ecmascript-c.h +++ b/src/ecmascript/ecmascript-c.h @@ -8,10 +8,15 @@ extern "C" { #endif struct session; +struct uri; int ecmascript_get_interpreter_count(void); void toggle_ecmascript(struct session *ses); +/* Takes line with the syntax javascript:. Activated when user + * follows a link with this synstax. */ +void ecmascript_protocol_handler(struct session *ses, struct uri *uri); + extern struct module ecmascript_module; #ifdef __cplusplus diff --git a/src/ecmascript/ecmascript.cpp b/src/ecmascript/ecmascript.cpp index 66a37459..5f906f2f 100644 --- a/src/ecmascript/ecmascript.cpp +++ b/src/ecmascript/ecmascript.cpp @@ -507,44 +507,6 @@ ecmascript_reset_state(struct view_state *vs) vs->ecmascript_fragile = 1; } -void -ecmascript_protocol_handler(struct session *ses, struct uri *uri) -{ - struct document_view *doc_view = current_frame(ses); - struct string current_url = INIT_STRING(struri(uri), (int)strlen(struri(uri))); - char *redirect_url, *redirect_abs_url; - struct uri *redirect_uri; - - if (!doc_view) /* Blank initial document. TODO: Start at about:blank? */ - return; - assert(doc_view->vs); - if (doc_view->vs->ecmascript_fragile) - ecmascript_reset_state(doc_view->vs); - if (!doc_view->vs->ecmascript) - return; - - redirect_url = ecmascript_eval_stringback(doc_view->vs->ecmascript, - ¤t_url); - if (!redirect_url) - return; - /* XXX: This code snippet is duplicated over here, - * location_set_property(), html_a() and who knows where else. */ - redirect_abs_url = join_urls(doc_view->document->uri, - trim_chars(redirect_url, ' ', 0)); - mem_free(redirect_url); - if (!redirect_abs_url) - return; - redirect_uri = get_uri(redirect_abs_url, URI_NONE); - mem_free(redirect_abs_url); - if (!redirect_uri) - return; - - /* XXX: Is that safe to do at this point? --pasky */ - goto_uri_frame(ses, redirect_uri, doc_view->name, - CACHE_MODE_NORMAL); - done_uri(redirect_uri); -} - void ecmascript_timeout_dialog(struct terminal *term, int max_exec_time) { diff --git a/src/ecmascript/ecmascript.h b/src/ecmascript/ecmascript.h index 9c73631a..0c637712 100644 --- a/src/ecmascript/ecmascript.h +++ b/src/ecmascript/ecmascript.h @@ -168,10 +168,6 @@ char *ecmascript_eval_stringback(struct ecmascript_interpreter *interpreter, str /* Returns -1 if undefined. */ int ecmascript_eval_boolback(struct ecmascript_interpreter *interpreter, struct string *code); -/* Takes line with the syntax javascript:. Activated when user - * follows a link with this synstax. */ -void ecmascript_protocol_handler(struct session *ses, struct uri *uri); - void ecmascript_timeout_dialog(struct terminal *term, int max_exec_time); void ecmascript_set_action(char **action, char *string); diff --git a/src/protocol/Makefile b/src/protocol/Makefile index bba86e1d..e563d765 100644 --- a/src/protocol/Makefile +++ b/src/protocol/Makefile @@ -16,6 +16,6 @@ SUBDIRS = auth file http test OBJS-$(CONFIG_DATA) += data.o -OBJS = about.o common.o date.o header.o protocol.obj proxy.o uri.o user.o +OBJS = about.o common.o date.o header.o protocol.o proxy.o uri.o user.o include $(top_srcdir)/Makefile.lib diff --git a/src/protocol/meson.build b/src/protocol/meson.build index 0dff54cf..f7da535d 100644 --- a/src/protocol/meson.build +++ b/src/protocol/meson.build @@ -35,7 +35,7 @@ subdir('http') if conf_data.get('CONFIG_DATA') srcs += files('data.c') endif -srcs += files('about.c', 'common.c', 'date.c', 'header.c', 'protocol.cpp', 'proxy.c', 'uri.c', 'user.c') +srcs += files('about.c', 'common.c', 'date.c', 'header.c', 'protocol.c', 'proxy.c', 'uri.c', 'user.c') if get_option('test') subdir('test') diff --git a/src/protocol/protocol.cpp b/src/protocol/protocol.c similarity index 98% rename from src/protocol/protocol.cpp rename to src/protocol/protocol.c index c9672c6c..930a4f86 100644 --- a/src/protocol/protocol.cpp +++ b/src/protocol/protocol.c @@ -11,7 +11,11 @@ #include "bfu/dialog.h" #include "document/view.h" -#include "ecmascript/ecmascript.h" + +#if defined(CONFIG_ECMASCRIPT_SMJS) || defined(CONFIG_QUICKJS) || defined(CONFIG_MUJS) +#include "ecmascript/ecmascript-c.h" +#endif + #include "intl/libintl.h" #include "main/module.h" #include "network/connection.h"