diff options
Diffstat (limited to 'javascript/jsapi/navigator.bnd')
-rw-r--r-- | javascript/jsapi/navigator.bnd | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/javascript/jsapi/navigator.bnd b/javascript/jsapi/navigator.bnd new file mode 100644 index 000000000..e63e9a9fd --- /dev/null +++ b/javascript/jsapi/navigator.bnd @@ -0,0 +1,120 @@ +/* Binding to generate Navigator interface + * + * Copyright 2012 Vincent Sanders <vince@netsurf-browser.org> + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * Released under the terms of the MIT License, + * http://www.opensource.org/licenses/mit-license + */ + +#include "dom.bnd" + +webidlfile "html.idl"; + +hdrcomment "Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>"; +hdrcomment "This file is part of NetSurf, http://www.netsurf-browser.org/"; +hdrcomment "Released under the terms of the MIT License,"; +hdrcomment " http://www.opensource.org/licenses/mit-license"; + +preamble %{ + +#include <assert.h> +#include <stdlib.h> + +#include "desktop/netsurf.h" +#include "desktop/options.h" + +#include "utils/config.h" +#include "utils/useragent.h" +#include "utils/log.h" +#include "utils/utsname.h" + +#include "javascript/jsapi.h" +#include "javascript/jsapi/binding.h" + +/* + * navigator properties for netsurf + * + * Property | Everyone else | NetSurf | Notes + * ------------+-----------------+--------------+------------------------------ + * appCodeName | "Mozilla" | "NetSurf" | This is kinda a pointless + * | | | constant as everyone returns + * | | | "Mozilla" which is dumb + * ------------+-----------------+--------------+------------------------------ + * appName | "<Browsername>" | "NetSurf" | Browsers named other than + * | | | "Netscape", "Mozilla", + * | | | "Netscape Navigator", + * | | | "Microsoft Internet Explorer" + * | | | often other browser have + * | | | "(compatible with Netscape)" + * | | | append. + * ------------+-----------------+--------------+------------------------------ + * appVersion | "<ver> (<type>)"| "<ver>" | Actually just the version + * | | | number e.g "3.0". + * ------------+-----------------+--------------+------------------------------ + * language | "<lang>" | "<lang>" | The language the frontend is + * | | | configured for + * ------------+-----------------+--------------+------------------------------ + * platform | "<krn> <hw>" | "<krn> <hw>" | Efectively uname -s -i, + * | | | eg "Linux x86_64" + * ------------+-----------------+--------------+------------------------------ + * userAgent | "Mozilla/5.0 (" | "NetSurf" | The usual useragent string + * | | | with excessive lies + * ------------+-----------------+--------------+------------------------------ + */ + +#define NAVIGATOR_APPNAME "NetSurf" +#define NAVIGATOR_APPCODENAME "NetSurf" +%} + +binding navigator { + type js_libdom; /* the binding type */ + + interface Navigator; /* Web IDL interface to generate */ + +} + +getter appName %{ + jsret = JS_NewStringCopyZ(cx, NAVIGATOR_APPNAME); +%} + +getter appCodeName %{ + jsret = JS_NewStringCopyZ(cx, NAVIGATOR_APPCODENAME); +%} + +getter appVersion %{ + jsret = JS_NewStringCopyZ(cx, netsurf_version); +%} + +getter language %{ + const char *alang = nsoption_charp(accept_language); + + if (alang != NULL) { + jsret = JS_NewStringCopyZ(cx, alang); + } + +%} + +getter platform %{ + struct utsname *cutsname; + + cutsname = malloc(sizeof(struct utsname)); + + if ((cutsname != NULL) && (uname(cutsname) >= 0)) { + char *platstr; + int platstrlen; + + platstrlen = strlen(cutsname->sysname) + strlen(cutsname->machine) + 2; + platstr = malloc(platstrlen); + if (platstr != NULL) { + snprintf(platstr, platstrlen, "%s %s", cutsname->sysname, cutsname->machine); + jsret = JS_NewStringCopyN(cx, platstr, platstrlen - 1); + free(platstr); + } + } +%} + +getter userAgent %{ + jsret = JS_NewStringCopyZ(cx, user_agent_string()); +%} |