/* Binding to generate Navigator interface * * Copyright 2012 Vincent Sanders * * 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 "; 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 #include #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 | "" | "NetSurf" | Browsers named other than * | | | "Netscape", "Mozilla", * | | | "Netscape Navigator", * | | | "Microsoft Internet Explorer" * | | | often other browser have * | | | "(compatible with Netscape)" * | | | append. * ------------+-----------------+--------------+------------------------------ * appVersion | " ()"| "" | Actually just the version * | | | number e.g "3.0". * ------------+-----------------+--------------+------------------------------ * language | "" | "" | The language the frontend is * | | | configured for * ------------+-----------------+--------------+------------------------------ * platform | " " | " " | 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 %{ jsretval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, NAVIGATOR_APPNAME)); %} getter appCodeName %{ jsretval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, NAVIGATOR_APPCODENAME)); %} getter appVersion %{ jsretval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, netsurf_version)); %} getter language %{ const char *alang = nsoption_charp(accept_language); if (alang != NULL) { jsretval = STRING_TO_JSVAL(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); jsretval = STRING_TO_JSVAL(JS_NewStringCopyN(cx, platstr, platstrlen - 1)); free(platstr); } } %} getter userAgent %{ jsretval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, user_agent_string())); %}