Merge branch 'master' of git://git.netsurf-browser.org/netsurf

This commit is contained in:
Michael Drake 2013-01-03 11:57:23 +00:00
commit 70d83baa6d
13 changed files with 255 additions and 115 deletions

View File

@ -20,6 +20,7 @@ JSAPI_BINDING_location := javascript/jsapi/location.bnd
JSAPI_BINDING_htmlcollection := javascript/jsapi/htmlcollection.bnd
JSAPI_BINDING_nodelist := javascript/jsapi/nodelist.bnd
JSAPI_BINDING_text := javascript/jsapi/text.bnd
JSAPI_BINDING_comment := javascript/jsapi/comment.bnd
JSAPI_BINDING_node := javascript/jsapi/node.bnd
JSAPI_BINDING_event := javascript/jsapi/event.bnd

View File

@ -2410,9 +2410,9 @@ char *urldb_get_cookie(nsurl *url, bool include_http_only)
const char *path;
char *ret;
lwc_string *scheme;
bool target_is_secure;
time_t now;
int i;
bool match;
assert(url != NULL);
@ -2425,7 +2425,15 @@ char *urldb_get_cookie(nsurl *url, bool include_http_only)
if (!p)
return NULL;
scheme = p->scheme;
scheme = nsurl_get_component(url, NSURL_SCHEME);
if (scheme == NULL)
scheme = lwc_string_ref(corestring_lwc_http);
if (lwc_string_caseless_isequal(scheme, corestring_lwc_https,
&target_is_secure) != lwc_error_ok)
return NULL;
lwc_string_unref(scheme);
matched_cookies = malloc(matched_cookies_size *
sizeof(struct cookie_internal_data *));
@ -2484,11 +2492,7 @@ char *urldb_get_cookie(nsurl *url, bool include_http_only)
/* cookie has expired => ignore */
continue;
if (c->secure && lwc_string_isequal(
q->scheme,
corestring_lwc_https,
&match) &&
match == false)
if (c->secure && target_is_secure == false)
/* secure cookie for insecure host.
* ignore */
continue;
@ -2523,11 +2527,7 @@ char *urldb_get_cookie(nsurl *url, bool include_http_only)
/* cookie has expired => ignore */
continue;
if (c->secure && lwc_string_isequal(
q->scheme,
corestring_lwc_https,
&match) &&
match == false)
if (c->secure && target_is_secure == false)
/* Secure cookie for insecure server
* => ignore */
continue;
@ -2567,10 +2567,7 @@ char *urldb_get_cookie(nsurl *url, bool include_http_only)
/* paths don't match => ignore */
continue;
if (c->secure && lwc_string_isequal(p->scheme,
corestring_lwc_https,
&match) &&
match == false)
if (c->secure && target_is_secure == false)
/* Secure cookie for insecure server
* => ignore */
continue;
@ -2601,10 +2598,7 @@ char *urldb_get_cookie(nsurl *url, bool include_http_only)
/* paths don't match => ignore */
continue;
if (c->secure && lwc_string_isequal(scheme,
corestring_lwc_https,
&match) &&
match == false)
if (c->secure && target_is_secure == false)
/* secure cookie for insecure host. ignore */
continue;
@ -2698,6 +2692,19 @@ bool urldb_set_cookie(const char *header, nsurl *url, nsurl *referer)
return false;
}
/* If HTTPS, store cookie using HTTP */
if (lwc_string_caseless_isequal(scheme, corestring_lwc_https,
&match) != lwc_error_ok) {
lwc_string_unref(scheme);
nsurl_unref(urlt);
return false;
}
if (match) {
lwc_string_unref(scheme);
scheme = lwc_string_ref(corestring_lwc_http);
}
path = nsurl_get_component(url, NSURL_PATH);
if (path == NULL) {
lwc_string_unref(scheme);

View File

@ -0,0 +1,47 @@
/* Binding to generate Comment 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
*/
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 <dom/dom.h>
#include "utils/config.h"
#include "utils/log.h"
#include "render/html_internal.h"
#include "javascript/jsapi.h"
#include "comment.h"
%}
#include "dom.bnd"
binding comment {
type js_libdom; /* the binding type */
interface Comment; /* Web IDL interface to generate */
private "dom_comment *" node;
private "struct html_content *" htmlc;
}
api finalise %{
if (private != NULL) {
dom_node_unref(private->node);
}
%}

View File

@ -10,6 +10,57 @@
webidlfile "dom.idl";
preamble %{
#include "comment.h"
#include "text.h"
#include "htmlelement.h"
%}
prologue %{
/* CAUTION this expects all javascript Node objects private pointers
* to have private->node in the same place.
*/
static struct dom_node *jsnode_to_domnode(JSContext *cx, JSObject *jsnode)
{
struct jsclass_private *jsnode_private;
if (jsnode == NULL) {
return NULL;
}
/* element */
jsnode_private = JS_GetInstancePrivate(cx,
jsnode,
&JSClass_HTMLElement,
NULL);
if (jsnode_private != NULL) {
return (struct dom_node *)jsnode_private->node;
}
/* text */
jsnode_private = JS_GetInstancePrivate(cx,
jsnode,
&JSClass_Text,
NULL);
if (jsnode_private != NULL) {
return (struct dom_node *)jsnode_private->node;
}
/* comment */
jsnode_private = JS_GetInstancePrivate(cx,
jsnode,
&JSClass_Comment,
NULL);
if (jsnode_private != NULL) {
return (struct dom_node *)jsnode_private->node;
}
return NULL;
}
%}
/* interface Node members */
getter nodeType %{
@ -74,34 +125,26 @@ getter textContent %{
}
%}
/* interface Node { Node appendChild(Node node); } */
operation appendChild %{
struct dom_node *domnode; /* dom node from js input node */
struct dom_node *result = NULL;
dom_exception exc;
struct jsclass_private *node_private;
dom_node_type node_type;
JSLOG("appending %p", node);
/* CAUTION this expects all Node objects private pointers to
* have private->node in the same place
*/
/* text */
node_private = JS_GetInstancePrivate(cx, node, &JSClass_Text, NULL);
if (node_private == NULL) {
/* element */
node_private = JS_GetInstancePrivate(cx, node, &JSClass_HTMLElement, NULL);
}
if (node_private == NULL) {
/* type error? */
domnode = jsnode_to_domnode(cx, node);
if (domnode == NULL) {
/* should cause Error: NOT_FOUND_ERR: DOM Exception 8 */
JSLOG("Error: NOT_FOUND_ERR: DOM Exception 8");
return JS_FALSE;
}
JSLOG("appending js node %p (dom %p)", node, domnode);
/* append the found element */
exc = dom_node_append_child(private->node, node_private->node, &result);
exc = dom_node_append_child(private->node, domnode, &result);
if (exc != DOM_NO_ERR) {
JSLOG("Error: DOM Exception (libdom append child)");
return JS_FALSE;
}

View File

@ -8,8 +8,6 @@
* http://www.opensource.org/licenses/mit-license
*/
#include "dom.bnd"
webidlfile "html.idl";
hdrcomment "Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>";
@ -20,7 +18,7 @@ hdrcomment " http://www.opensource.org/licenses/mit-license";
preamble %{
#include <dom/dom.h>
#include "utils/config.h"
#include "utils/log.h"
#include "utils/corestrings.h"
@ -38,6 +36,8 @@ preamble %{
%}
#include "dom.bnd"
binding document {
type js_libdom; /* the binding type */
@ -47,10 +47,10 @@ binding document {
* context structure.
*/
private "dom_document *" node;
private "struct html_content *" htmlc;
private "struct html_content *" htmlc;
/** location instantiated on first use */
property unshared location;
property unshared location;
/* events through a single interface */
property unshared type EventHandler;
@ -70,9 +70,9 @@ getter location %{
/* already created - return it */
return JS_TRUE;
}
jsret = jsapi_new_Location(cx,
NULL,
NULL,
jsret = jsapi_new_Location(cx,
NULL,
NULL,
llcache_handle_get_url(private->htmlc->base.llcache),
private->htmlc);
%}
@ -110,7 +110,7 @@ getter documentElement %{
/* document (html) element */
exc = dom_document_get_document_element(private->node, (void *)&element);
if (exc != DOM_NO_ERR) {
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
@ -122,11 +122,11 @@ getter documentElement %{
getter head %{
dom_node *element;
dom_node *head;
dom_exception exc;
dom_exception exc;
/* document (html) element */
exc = dom_document_get_document_element(private->node, &element);
if (exc != DOM_NO_ERR) {
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
@ -142,13 +142,13 @@ getter head %{
getter body %{
dom_node *element;
dom_node *body;
dom_exception exc;
dom_exception exc;
JSLOG("Getting your body");
/* document (html) element */
exc = dom_document_get_document_element(private->node, &element);
if (exc != DOM_NO_ERR) {
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
@ -167,58 +167,58 @@ getter body %{
operation getElementById %{
dom_string *elementId_dom;
dom_element *element;
dom_exception exc;
dom_exception exc;
exc = dom_string_create((unsigned char*)elementId, elementId_len, &elementId_dom);
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
exc = dom_document_get_element_by_id(private->node, elementId_dom, &element);
dom_string_unref(elementId_dom);
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
dom_string_unref(elementId_dom);
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
if (element != NULL) {
jsret = jsapi_new_HTMLElement(cx, NULL, NULL, element, private->htmlc);
}
if (element != NULL) {
jsret = jsapi_new_HTMLElement(cx, NULL, NULL, element, private->htmlc);
}
%}
/*
/*
*
* Dom 4 says this should return a htmlcollection, libdom currently
* returns DOM 3 spec of a nodelist
* returns DOM 3 spec of a nodelist
*/
operation getElementsByTagName %{
dom_string *localName_dom;
/* dom_html_collection *collection;*/
dom_nodelist *nodelist;
dom_exception exc;
/* dom_html_collection *collection;*/
dom_nodelist *nodelist;
dom_exception exc;
exc = dom_string_create((uint8_t *)localName, localName_len, &localName_dom);
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
exc = dom_document_get_elements_by_tag_name(private->node, localName_dom, /*&collection*/&nodelist);
dom_string_unref(localName_dom);
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
exc = dom_document_get_elements_by_tag_name(private->node, localName_dom, /*&collection*/&nodelist);
dom_string_unref(localName_dom);
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
if (/*collection*/nodelist != NULL) {
/*jsret = jsapi_new_HTMLCollection(cx,
NULL,
NULL,
collection,
private->htmlc);*/
jsret = jsapi_new_NodeList(cx,
NULL,
NULL,
nodelist,
private->htmlc);
}
if (/*collection*/nodelist != NULL) {
/*jsret = jsapi_new_HTMLCollection(cx,
NULL,
NULL,
collection,
private->htmlc);*/
jsret = jsapi_new_NodeList(cx,
NULL,
NULL,
nodelist,
private->htmlc);
}
%}
@ -228,10 +228,10 @@ operation write %{
}
%}
/* in dom Document */
/* interface Document (dom) { Text createTextNode(DOMString data); } */
operation createTextNode %{
dom_string *data_dom;
dom_exception exc;
dom_exception exc;
dom_text *text;
if (data != NULL) {
@ -255,10 +255,43 @@ operation createTextNode %{
%}
/* interface Document (dom) { Comment createComment(DOMString data); } */
operation createComment %{
dom_string *data_dom;
dom_exception exc;
dom_comment *comment;
if (data != NULL) {
JSLOG("Creating string \"%s\"", data);
exc = dom_string_create((unsigned char*)data,
data_len,
&data_dom);
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
JSLOG("Creating comment object for dom string \"%s\"",
dom_string_data(data_dom));
exc = dom_document_create_comment(private->node,
data_dom,
&comment);
dom_string_unref(data_dom);
if (exc != DOM_NO_ERR) {
return JS_FALSE;
}
jsret = jsapi_new_Comment(cx, NULL, NULL, comment, private->htmlc);
}
JSLOG("returning jsobject %p", jsret);
%}
/* in dom Document */
operation createElement %{
dom_string *localName_dom;
dom_exception exc;
dom_exception exc;
dom_element *element;
if (localName != NULL) {

View File

@ -8,8 +8,6 @@
* http://www.opensource.org/licenses/mit-license
*/
#include "dom.bnd"
webidlfile "html.idl";
hdrcomment "Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>";
@ -34,6 +32,8 @@ preamble %{
%}
#include "dom.bnd"
binding htmlelement {
type js_libdom; /* the binding type */

View File

@ -8,7 +8,6 @@
* http://www.opensource.org/licenses/mit-license
*/
#include "dom.bnd"
webidlfile "html.idl";

View File

@ -8,7 +8,6 @@
* http://www.opensource.org/licenses/mit-license
*/
#include "dom.bnd"
webidlfile "html.idl";
@ -27,10 +26,11 @@ preamble %{
#include "javascript/jsapi.h"
#include "text.h"
#include "htmlelement.h"
%}
#include "dom.bnd"
binding text {
type js_libdom; /* the binding type */

View File

@ -8,9 +8,9 @@
* http://www.opensource.org/licenses/mit-license
*/
#include "dom.bnd"
webidlfile "html.idl";
webidlfile "dom.idl";
hdrcomment "Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>";
hdrcomment "This file is part of NetSurf, http://www.netsurf-browser.org/";
@ -20,7 +20,7 @@ hdrcomment " http://www.opensource.org/licenses/mit-license";
preamble %{
#include <dom/dom.h>
#include "utils/config.h"
#include "utils/log.h"
#include "utils/corestrings.h"
@ -35,6 +35,7 @@ preamble %{
#include "nodelist.h"
#include "htmldocument.h"
#include "text.h"
#include "comment.h"
#include "htmlelement.h"
#include "window.h"
#include "location.h"
@ -107,7 +108,7 @@ api init %{
return NULL;
/* Initialises all the user javascript classes to make their
* prototypes available.
* prototypes available.
*/
/** @todo should we be managing these prototype objects ourselves */
user_proto = jsapi_InitClass_Document(cx, prototype);
@ -150,6 +151,11 @@ api init %{
return NULL;
}
user_proto = jsapi_InitClass_Comment(cx, prototype);
if (user_proto == NULL) {
return NULL;
}
user_proto = jsapi_InitClass_Node(cx, prototype);
if (user_proto == NULL) {
return NULL;
@ -166,16 +172,16 @@ 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;
/* 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,
(dom_document *)dom_node_ref(htmlc->document),
htmlc);
if (private->document == NULL) {
NULL,
newobject,
(dom_document *)dom_node_ref(htmlc->document),
htmlc);
if (private->document == NULL) {
free(private);
return NULL;
}
@ -212,7 +218,7 @@ operation prompt %{
/* boolean dispatchEvent(Event event); */
operation dispatchEvent %{
/* this implementation is unique to the window object as it is
* not a "real" dom node.
* not a "real" dom node.
*/
/* caution, this must match the struct generated from event.bnd */
@ -242,7 +248,7 @@ operation dispatchEvent %{
jsret = JS_CallFunctionValue(cx, NULL, eventval, 1, event_argv, &event_rval);
}
}
}
}
%}
getter location %{
@ -261,18 +267,18 @@ getter self %{
getter EventHandler %{
/* this implementation is unique to the window object as it is
* not a dom node.
* not a dom node.
*/
JSLOG("propname[%d]=\"%s\"",
JSLOG("propname[%d]=\"%s\"",
tinyid,
jsclass_properties[tinyid].name);
%}
setter EventHandler %{
/* this implementation is unique to the window object as it is
* not a dom node.
* not a dom node.
*/
JSLOG("propname[%d]=\"%s\"",
tinyid,
JSLOG("propname[%d]=\"%s\"",
tinyid,
jsclass_properties[tinyid].name);
%}

View File

@ -212,7 +212,7 @@ convert_script_defer_cb(hlcache_handle *script,
/* Find script */
for (i = 0, s = parent->scripts; i != parent->scripts_count; i++, s++) {
if (s->type == HTML_SCRIPT_ASYNC && s->data.handle == script)
if (s->type == HTML_SCRIPT_DEFER && s->data.handle == script)
break;
}

View File

@ -93,7 +93,7 @@ RMEnsure Iconv 0.11 Error NetSurf requires Iconv 0.11 or later. This can be down
| Ensure CryptRandom
RMEnsure CryptRandom 0.12 NetSurfRMLoad System:Modules.CryptRand
RMEnsure CryptRandom 0.12 Error NetSurf requires CryptRandom 0.12 or later. This can be downloaded form http://www.riscos.info/index.php/CryptRandom
RMEnsure CryptRandom 0.12 Error NetSurf requires CryptRandom 0.12 or later. This can be downloaded from http://www.riscos.info/index.php/CryptRandom
| Disable SpecialFX, if present
Set NetSurf$SpecialFX 1

View File

@ -58,6 +58,7 @@ lwc_string *corestring_lwc_head;
lwc_string *corestring_lwc_hidden;
lwc_string *corestring_lwc_hr;
lwc_string *corestring_lwc_html;
lwc_string *corestring_lwc_http;
lwc_string *corestring_lwc_https;
lwc_string *corestring_lwc_iframe;
lwc_string *corestring_lwc_image;
@ -272,6 +273,7 @@ void corestrings_fini(void)
CSS_LWC_STRING_UNREF(hidden);
CSS_LWC_STRING_UNREF(hr);
CSS_LWC_STRING_UNREF(html);
CSS_LWC_STRING_UNREF(http);
CSS_LWC_STRING_UNREF(https);
CSS_LWC_STRING_UNREF(iframe);
CSS_LWC_STRING_UNREF(image);
@ -506,6 +508,7 @@ nserror corestrings_init(void)
CSS_LWC_STRING_INTERN(hidden);
CSS_LWC_STRING_INTERN(hr);
CSS_LWC_STRING_INTERN(html);
CSS_LWC_STRING_INTERN(http);
CSS_LWC_STRING_INTERN(https);
CSS_LWC_STRING_INTERN(iframe);
CSS_LWC_STRING_INTERN(image);
@ -638,7 +641,7 @@ nserror corestrings_init(void)
CSS_DOM_STRING_INTERN(href);
CSS_DOM_STRING_INTERN(hreflang);
CSS_DOM_STRING_INTERN(hspace);
CSS_DOM_STRING_INTERN(http_equiv);
/* http-equiv: see below */
CSS_DOM_STRING_INTERN(id);
CSS_DOM_STRING_INTERN(input);
CSS_DOM_STRING_INTERN(invalid);

View File

@ -62,6 +62,7 @@ extern lwc_string *corestring_lwc_head;
extern lwc_string *corestring_lwc_hidden;
extern lwc_string *corestring_lwc_hr;
extern lwc_string *corestring_lwc_html;
extern lwc_string *corestring_lwc_http;
extern lwc_string *corestring_lwc_https;
extern lwc_string *corestring_lwc_iframe;
extern lwc_string *corestring_lwc_image;