diff --git a/src/document/html/parser/link.c b/src/document/html/parser/link.c index d0bdfc168..f9d7fa8ec 100644 --- a/src/document/html/parser/link.c +++ b/src/document/html/parser/link.c @@ -492,6 +492,7 @@ html_iframe_do(char *a, char *object_src, html_context->options->framename, html_context); } +#if 0 char *url2 = join_urls(html_context->base_href, url); uri = get_uri(url2, URI_BASE); @@ -501,7 +502,7 @@ html_iframe_do(char *a, char *object_src, done_uri(uri); mem_free(url2); } - +#endif mem_free(name); mem_free(url); } diff --git a/src/document/renderer.c b/src/document/renderer.c index 1aca82c8b..9771178c2 100644 --- a/src/document/renderer.c +++ b/src/document/renderer.c @@ -208,6 +208,7 @@ process_snippets(struct ecmascript_interpreter *interpreter, ecmascript_eval(interpreter, &code, NULL); } } + check_for_rerender(interpreter, "eval"); } #endif diff --git a/src/ecmascript/ecmascript.c b/src/ecmascript/ecmascript.c index b73643626..1f305a965 100644 --- a/src/ecmascript/ecmascript.c +++ b/src/ecmascript/ecmascript.c @@ -12,11 +12,15 @@ #include "config/home.h" #include "config/options.h" #include "document/document.h" +#include "document/renderer.h" #include "document/view.h" +#include "document/xml/renderer.h" +#include "document/xml/renderer2.h" #include "ecmascript/ecmascript.h" #include "ecmascript/spidermonkey.h" #include "intl/gettext/libintl.h" #include "main/module.h" +#include "main/select.h" #include "main/timer.h" #include "osdep/osdep.h" #include "protocol/protocol.h" @@ -240,6 +244,47 @@ ecmascript_get_interpreter_count(void) return interpreter_count; } +static void +delayed_reload(void *data) +{ + struct delayed_rel *rel = data; + + assert(rel); + reset_document(rel->document); + render_xhtml_document(rel->cached, rel->document, NULL); + sort_links(rel->document); + //draw_formatted(rel->ses, 0); + mem_free(rel); +} + +void +check_for_rerender(struct ecmascript_interpreter *interpreter, const char* text) +{ + if (interpreter->changed) { + struct document_view *doc_view = interpreter->vs->doc_view; + struct document *document = doc_view->document; + struct session *ses = doc_view->session; + struct cache_entry *cached = document->cached; + struct fragment *f = get_cache_fragment(cached); + + //fprintf(stderr, "%s\n", text); + + if (document->dom) { + interpreter->changed = false; + + struct delayed_rel *rel = mem_calloc(1, sizeof(*rel)); + + if (rel) { + rel->cached = cached; + rel->document = document; + rel->ses = ses; + object_lock(document); + register_bottom_half(delayed_reload, rel); + } + } + } +} + void ecmascript_eval(struct ecmascript_interpreter *interpreter, struct string *code, struct string *ret) @@ -277,6 +322,9 @@ ecmascript_eval_stringback(struct ecmascript_interpreter *interpreter, interpreter->backend_nesting++; result = spidermonkey_eval_stringback(interpreter, code); interpreter->backend_nesting--; + + check_for_rerender(interpreter, "stringback"); + return result; } @@ -292,6 +340,9 @@ ecmascript_eval_boolback(struct ecmascript_interpreter *interpreter, interpreter->backend_nesting++; result = spidermonkey_eval_boolback(interpreter, code); interpreter->backend_nesting--; + + check_for_rerender(interpreter, "boolback"); + return result; } @@ -438,6 +489,7 @@ ecmascript_timeout_handler(void *i) /* The expired timer ID has now been erased. */ ecmascript_eval(interpreter, &interpreter->code, NULL); + check_for_rerender(interpreter, "handler"); } /* Timer callback for @interpreter->vs->doc_view->document->timeout. @@ -455,6 +507,7 @@ ecmascript_timeout_handler2(void *i) /* The expired timer ID has now been erased. */ ecmascript_call_function(interpreter, interpreter->fun, NULL); + check_for_rerender(interpreter, "handler2"); } diff --git a/src/ecmascript/ecmascript.h b/src/ecmascript/ecmascript.h index d1e57ed7d..a49c4919c 100644 --- a/src/ecmascript/ecmascript.h +++ b/src/ecmascript/ecmascript.h @@ -111,6 +111,8 @@ void ecmascript_set_timeout2(struct ecmascript_interpreter *interpreter, JS::Han int get_ecmascript_enable(struct ecmascript_interpreter *interpreter); +void check_for_rerender(struct ecmascript_interpreter *interpreter, const char* text); + extern char *console_log_filename; extern char *local_storage_filename; diff --git a/src/ecmascript/spidermonkey.c b/src/ecmascript/spidermonkey.c index 280800816..7740e08da 100644 --- a/src/ecmascript/spidermonkey.c +++ b/src/ecmascript/spidermonkey.c @@ -362,7 +362,6 @@ spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter) goto release_and_fail; } - JS_SetCompartmentPrivate(js::GetContextCompartment(ctx), interpreter); return ctx; @@ -426,7 +425,6 @@ spidermonkey_check_for_exception(JSContext *ctx) { * on each site with javascript enabled */ JS_ClearPendingException(ctx); } - } void @@ -439,47 +437,6 @@ free_document(void *doc) delete docu; } -static void -delayed_reload(void *data) -{ - struct delayed_rel *rel = data; - - assert(rel); - reset_document(rel->document); - render_xhtml_document(rel->cached, rel->document, NULL); - sort_links(rel->document); - draw_formatted(rel->ses, 0); - mem_free(rel); -} - -static void -check_for_rerender(struct ecmascript_interpreter *interpreter, const char* text) -{ - if (interpreter->changed) { - struct document_view *doc_view = interpreter->vs->doc_view; - struct document *document = doc_view->document; - struct session *ses = doc_view->session; - struct cache_entry *cached = document->cached; - struct fragment *f = get_cache_fragment(cached); - - //fprintf(stderr, "%s\n", text); - - if (document->dom) { - interpreter->changed = false; - - struct delayed_rel *rel = mem_calloc(1, sizeof(*rel)); - - if (rel) { - rel->cached = cached; - rel->document = document; - rel->ses = ses; - object_lock(document); - register_bottom_half(delayed_reload, rel); - } - } - } -} - void spidermonkey_eval(struct ecmascript_interpreter *interpreter, struct string *code, struct string *ret) @@ -509,8 +466,6 @@ spidermonkey_eval(struct ecmascript_interpreter *interpreter, done_heartbeat(interpreter->heartbeat); JS_LeaveCompartment(ctx, comp); JS_EndRequest(ctx); - - check_for_rerender(interpreter, "eval"); } void @@ -537,8 +492,6 @@ spidermonkey_call_function(struct ecmascript_interpreter *interpreter, done_heartbeat(interpreter->heartbeat); JS_LeaveCompartment(ctx, comp); JS_EndRequest(ctx); - - check_for_rerender(interpreter, "call function"); } @@ -584,12 +537,9 @@ spidermonkey_eval_stringback(struct ecmascript_interpreter *interpreter, JS_LeaveCompartment(ctx, comp); JS_EndRequest(ctx); - check_for_rerender(interpreter, "eval stringback"); - return result; } - int spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter, struct string *code) @@ -638,8 +588,6 @@ spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter, JS_LeaveCompartment(ctx, comp); JS_EndRequest(ctx); - check_for_rerender(interpreter, "eval boolback"); - return result; }