From ac286c4a95f280fb9546f80f0e256543faa8354a Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Mon, 29 Oct 2012 20:09:29 +0000 Subject: add binding for window class --- javascript/jsapi/bindings/htmldocument.bnd | 2 +- javascript/jsapi/bindings/window.bnd | 130 +++++++++++++++++++++++++++++ 2 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 javascript/jsapi/bindings/window.bnd (limited to 'javascript/jsapi') diff --git a/javascript/jsapi/bindings/htmldocument.bnd b/javascript/jsapi/bindings/htmldocument.bnd index 44f8ee6aa..c90114162 100644 --- a/javascript/jsapi/bindings/htmldocument.bnd +++ b/javascript/jsapi/bindings/htmldocument.bnd @@ -1,4 +1,4 @@ -/* test binding to generate htmldocument */ +/* Binding to generate htmldocument */ #include "dom.bnd" diff --git a/javascript/jsapi/bindings/window.bnd b/javascript/jsapi/bindings/window.bnd new file mode 100644 index 000000000..c56838530 --- /dev/null +++ b/javascript/jsapi/bindings/window.bnd @@ -0,0 +1,130 @@ +/* binding to generate window */ + +#include "dom.bnd" + +webidlfile "html.idl"; + +hdrcomment "Part of NetSurf Project"; + +preamble %{ + +#include + +#include "utils/config.h" +#include "utils/log.h" + +#include "javascript/jsapi.h" +#include "javascript/jsapi/binding.h" + +%} + +operation confirm %{ + warn_user(message, NULL); +%} + +operation alert %{ + warn_user(message, NULL); +%} + +operation prompt %{ + warn_user(message, NULL); +%} + +api init %{ + JSObject *user_proto; + + prototype = JS_NewCompartmentAndGlobalObject(cx, &JSClass_Window, NULL); + if (prototype == NULL) { + return NULL; + } + + /** @todo reconsider global object handling. future + * editions of spidermonkey appear to be removing the + * idea of a global so we probably need to handle + * global object references internally + */ + + /* set the contexts global */ + JS_SetGlobalObject(cx, prototype); + + /* Populate the global object with the standard globals, like + * Object and Array. + */ + if (!JS_InitStandardClasses(cx, prototype)) { + return NULL; + } + + /* add functions to prototype */ + if (!JS_DefineFunctions(cx, prototype, jsclass_functions)) { + return NULL; + } + + /* add properties to prototype */ + if (!JS_DefineProperties(cx, prototype, jsclass_properties)) + return NULL; + + /* Initialises all the user javascript classes to make their + * prototypes available. + */ + /** @todo should we be managing these prototype objects ourselves */ + user_proto = jsapi_InitClass_Document(cx, prototype); + if (user_proto == NULL) { + return NULL; + } +%} + +api new %{ + /* @todo sort out windows that are not globals */ + assert(parent == NULL); + + /* the window object is the global so its prototype *is* the instance */ + newobject = prototype; + + /* instantiate the subclasses off the window global */ + private->document = jsapi_new_Document(cx, + NULL, + newobject, + htmlc->document, + htmlc); + if (private->document == NULL) { + free(private); + return NULL; + } + +/* + private->navigator_obj = jsapi_new_Navigator(cx, window); + if (private->navigator_obj == NULL) { + free(private); + return NULL; + } +*/ + /** @todo forms, history, location */ + + private->console = jsapi_new_Console(cx, newobject); + if (private->console == NULL) { + free(private); + return NULL; + } + + LOG(("Created new window object %p", newobject)); +%} + + +binding window { + type js_libdom; /* the binding type */ + + interface Window; /* Web IDL interface to generate */ + + /* private are parameters to constructor stored in private + * context structure. + * + * internal are value stored in private context structure but not + * passed to constructor. + */ + private "struct browser_window *" bw; + private "struct html_content *" htmlc; + internal "JSObject *" document; + internal "JSObject *" navigator; + internal "JSObject *" console; + +} -- cgit v1.2.3