From 274a76d97a878ef66155a215e1d16c33998f5597 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sun, 1 Jul 2012 10:10:00 +0100 Subject: [PATCH] Add initial navigator object creation. Basic navigator object outline ready to add methods to. The navigator object contains all the information about the browser Signed-Off-By: Vincent Sanders --- Makefile.sources | 2 +- javascript/jsapi.c | 5 ++++ javascript/jsapi.h | 33 ++++++++++++++++++++-- javascript/jsapi/navigator.c | 55 ++++++++++++++++++++++++++++++++++++ javascript/jsapi/window.c | 32 +++++++++++++++++++++ 5 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 javascript/jsapi/navigator.c diff --git a/Makefile.sources b/Makefile.sources index 0d7eb865f..3dcec40a3 100644 --- a/Makefile.sources +++ b/Makefile.sources @@ -29,7 +29,7 @@ S_DESKTOP := cookies.c history_global_core.c hotlist.c knockout.c \ # Javascript sources ifeq ($(NETSURF_USE_JS),YES) -S_JSAPI = window.c document.c console.c +S_JSAPI = window.c document.c navigator.c console.c S_JAVASCRIPT += content.c jsapi.c $(addprefix jsapi/,$(S_JSAPI)) else S_JAVASCRIPT += none.c diff --git a/javascript/jsapi.c b/javascript/jsapi.c index d0a73b34e..52321db3f 100644 --- a/javascript/jsapi.c +++ b/javascript/jsapi.c @@ -96,6 +96,7 @@ jsobject *js_newcompartment(jscontext *ctx, void *win_priv, void *doc_priv) JSContext *cx = (JSContext *)ctx; JSObject *window_obj = NULL; JSObject *document_obj; + JSObject *navigator_obj; JSObject *console_obj; if (cx == NULL) @@ -111,6 +112,10 @@ jsobject *js_newcompartment(jscontext *ctx, void *win_priv, void *doc_priv) if (document_obj == NULL) goto js_newcompartment_fail; + navigator_obj = jsapi_new_navigator(cx, window_obj); + if (navigator_obj == NULL) + goto js_newcompartment_fail; + /* @todo forms, history, location */ console_obj = jsapi_new_console(cx, window_obj); diff --git a/javascript/jsapi.h b/javascript/jsapi.h index 4024d267b..ac5ada79c 100644 --- a/javascript/jsapi.h +++ b/javascript/jsapi.h @@ -92,7 +92,7 @@ JS_NewCompartmentAndGlobalObject(JSContext *cx, #else /* #if JS_VERSION <= 180 */ /* three parameter jsapi native call */ -#define JSAPI_NATIVE(name, cx, argc, vp) jsnative_##name(cx, argc, vp) +#define JSAPI_NATIVE(name, cx, argc, vp) jsapi_native_##name(cx, argc, vp) /* three parameter function descriptor */ #define JSAPI_FS(name, nargs, flags) \ @@ -137,9 +137,38 @@ JS_NewCompartmentAndGlobalObject(JSContext *cx, #endif - +/** Create a new javascript window object + * + * @param cx The javascript context. + * @param parent The parent object or NULL for new global + * @param win_priv The private context to set on the object + * @return new javascript object or NULL on error + */ JSObject *jsapi_new_window(JSContext *cx, JSObject *parent, void *win_priv); + +/** Create a new javascript document object + * + * @param cx The javascript context. + * @param parent The parent object, usually a global window object + * @param doc_priv The private context to set on the object + * @return new javascript object or NULL on error + */ JSObject *jsapi_new_document(JSContext *cx, JSObject *parent, void *doc_priv); + +/** Create a new javascript console object + * + * @param cx The javascript context. + * @param parent The parent object, usually a global window object + * @return new javascript object or NULL on error + */ JSObject *jsapi_new_console(JSContext *cx, JSObject *parent); +/** Create a new javascript navigator object + * + * @param cx The javascript context. + * @param parent The parent object, usually a global window object + * @return new javascript object or NULL on error + */ +JSObject *jsapi_new_navigator(JSContext *cx, JSObject *parent); + #endif diff --git a/javascript/jsapi/navigator.c b/javascript/jsapi/navigator.c new file mode 100644 index 000000000..44af710ad --- /dev/null +++ b/javascript/jsapi/navigator.c @@ -0,0 +1,55 @@ +/* + * Copyright 2012 Vincent Sanders + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "javascript/jsapi.h" + +#include "utils/log.h" + +static JSFunctionSpec jsfunctions_navigator[] = { + JS_FS_END +}; + +static JSClass jsclass_navigator = +{ + "navigator", + JSCLASS_HAS_PRIVATE, + JS_PropertyStub, + JS_PropertyStub, + JS_PropertyStub, + JS_StrictPropertyStub, + JS_EnumerateStub, + JS_ResolveStub, + JS_ConvertStub, + JS_FinalizeStub, + JSCLASS_NO_OPTIONAL_MEMBERS +}; + + +JSObject *jsapi_new_navigator(JSContext *cx, JSObject *parent) +{ + return JS_InitClass(cx, + parent, + NULL, + &jsclass_navigator, + NULL, + 0, + NULL, + jsfunctions_navigator, + NULL, + NULL); +} diff --git a/javascript/jsapi/window.c b/javascript/jsapi/window.c index f1c845152..06e6cdfe8 100644 --- a/javascript/jsapi/window.c +++ b/javascript/jsapi/window.c @@ -202,8 +202,40 @@ static JSBool JSAPI_NATIVE(prompt, JSContext *cx, uintN argc, jsval *vp) return JS_TRUE; } +static JSBool JSAPI_NATIVE(close, JSContext *cx, uintN argc, jsval *vp) +{ + JSAPI_SET_RVAL(cx, vp, JSVAL_VOID); + + return JS_TRUE; +} + +static JSBool JSAPI_NATIVE(stop, JSContext *cx, uintN argc, jsval *vp) +{ + JSAPI_SET_RVAL(cx, vp, JSVAL_VOID); + + return JS_TRUE; +} + +static JSBool JSAPI_NATIVE(focus, JSContext *cx, uintN argc, jsval *vp) +{ + JSAPI_SET_RVAL(cx, vp, JSVAL_VOID); + + return JS_TRUE; +} + +static JSBool JSAPI_NATIVE(blur, JSContext *cx, uintN argc, jsval *vp) +{ + JSAPI_SET_RVAL(cx, vp, JSVAL_VOID); + + return JS_TRUE; +} + static JSFunctionSpec jsfunctions_window[] = { + JSAPI_FS(close, 0, 0), + JSAPI_FS(stop, 0, 0), + JSAPI_FS(focus, 0, 0), + JSAPI_FS(blur, 0, 0), JSAPI_FS(alert, 1, 0), JSAPI_FS(confirm, 1, 0), JSAPI_FS(prompt, 1, 0),