netsurf: branch vince/disccache updated. release/3.0-1113-g45c3adb
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/45c3adba5a683a744329c...
...commit http://git.netsurf-browser.org/netsurf.git/commit/45c3adba5a683a744329c56...
...tree http://git.netsurf-browser.org/netsurf.git/tree/45c3adba5a683a744329c5644...
The branch, vince/disccache has been updated
discards bd5499c9a5a2de91bf606cd62927c3f9bb7f258b (commit)
discards b351e3146b8a2700e0ca511d7c75a02ab9189912 (commit)
discards bb9f91caf9c16db960456efd843013236d02cbc7 (commit)
discards cd5331747fdd432ecb6eab27b9553e3364702247 (commit)
via 45c3adba5a683a744329c564448140252e1b48d7 (commit)
via d3d09fbf3291d2bd9c260d1989692dd97d78e294 (commit)
via de715b09d297dd42c3690a178157a3b77c011946 (commit)
via d54104cd79efc6f4a2a6d4c123e251b325bccee7 (commit)
via f4fc7cf38c78ddb6a157b5b850d739747cef505e (commit)
via ef6b20fe83895279e5e78b336f357ff657f46407 (commit)
via 42be1ffa7b2975fc264bfc9187a8d2da2d1dccb9 (commit)
via 2f66b6f6e296edf6e05a78d44a686d195c5a36fe (commit)
via 49bed056dd016ed74a7ed5cc988e9bdf17738c7f (commit)
via 76b5378996c681ad1311e57a4c7c49dd465e634b (commit)
via 5087fde086ab45981547582355ba06ae2c73c286 (commit)
via 80fcfa7bce759f90d1e10af5e5c6d9da1a13a9ac (commit)
via f69f7b5ee77c1e39fc32cd65e923511cb80f67b0 (commit)
via cbf423d4c60ff145246851dd36315833a8581c5b (commit)
via 55a96a7eeeaa44bb1dece9e5e09ae6127c3ece48 (commit)
via c384c5dd3e6ec53bd8aabe62bfcf39b9aa2ef7e1 (commit)
via 7fa641616b4c1c2ef8b209618d4b158d45e370c4 (commit)
via e975b355f54212adfcd6b3a8e32fede621098a31 (commit)
via a6fd3284050532f43261ddce8972e03e6669bd94 (commit)
via 709665e5c050085fd5e250ae0534ea057df2ffda (commit)
via 802fb8a77ee26249f8fa8d43249eb59a5bec43ab (commit)
via 36e0715dfb5411a9719f3ca4a032a6d75c267c36 (commit)
via e1b5332192f85945e86ec5f581d4914b0c9601b0 (commit)
via 4aa59f538276ce9413121d6d2e6eeed8ae5c0900 (commit)
via a23b1f34d352fc216b2677a7d3d06baa8bf57595 (commit)
via af014bce99d4990f1a0cbb1a779127de0f716a90 (commit)
via 9720c024832c96d917de933b95c87cf2e4f867bf (commit)
via 8df71860d729ee023e6a8697d87390ea495da763 (commit)
via 7f2c9777887544c5bb66f86b866824e6338596c8 (commit)
via 3d2e416ea94167a5c49ff89e02cf385c73207dd3 (commit)
via 56b2770722d3001d57368a9f267aa5ce8426ecac (commit)
via 4259c04fe64ecc3d1366f30aee2d43b9dcdb9c2b (commit)
via bd5102676a54e55cbe5cc90b2ade0e1334c2e3e0 (commit)
via ce41b8d43181edde71240e48b4c44a1c8c021ef0 (commit)
via ea79e85fcd109a5bf5f222cece8435305fc8626a (commit)
via 987218e144f95e1917f1eb8956fed8a712ec3a70 (commit)
via 3d7cd77982d79ff798a92ebe7f3c0b2a52042cdf (commit)
via 2cd2e5b0541e7067c908e88f446b7cc56095253b (commit)
via 2c727e03d0cd669c069d767105a9927094037b76 (commit)
via 6ccf13839b86f9af6c67c252d040741d13ed9c01 (commit)
via 5e495f0ab973d6fb7b5b209b6cd8a8684358bf46 (commit)
via 616335c9ca63fcdc625e02469c5adbdc14535ca2 (commit)
via 11b152c915820e6112c4aa0f97e561e56913a726 (commit)
via efc4a837372ed939e05a0df23cf785a93a3a6d28 (commit)
via 5f517cc714ccfcc639c52b47108e9ae27759a7c0 (commit)
via 8deb9ec25c6146803e3d74c1b2e00425159fd17e (commit)
via ec7a02e550b1c83abecc0f9103ea86e1cfb989ea (commit)
via a505ea49dfd42f7196f64bf8bc4cb957ac1a9b35 (commit)
via 22d15380f40b82f7d1660648ec13af094643a3ca (commit)
via 022a303d6043ed5843458c696c2d035e7f4b66fd (commit)
via e33737ef235dd321e51aa543c5136f1b6f741e55 (commit)
via 3697f543d6573ecf41108b1cf036a64b046cc8be (commit)
via 43c3caa4699e6658ea0c23295e27efdeb08d87a7 (commit)
via 72b5bc85f27478ce63679df5543b6eef363189e3 (commit)
via 41d70c741f31e8c04c774fb5b2b90d284e4d8668 (commit)
via 7a81fe9165bfde355c462514c0f2a74a811aa5da (commit)
via 7794f3fb1412c1921f57a519379dcb77a3f5cee7 (commit)
via 8bc3a8032008a255e72e4c4dc88d391b7073814c (commit)
via 2cc6b04a4936f8fbc5b5216aa66bad69b4f22438 (commit)
via cf84e557fa22ed22671e7d3dc5af8792d115a551 (commit)
via 41d7084356e0dd1616d771b260ef8c88319cc7f2 (commit)
via f5f7dc99319179dcce9e13b2b13cf7da7eb643ae (commit)
via 665f724a364b0579ee96aa10f7aed1dc25e2f524 (commit)
via cd9268761cb9929e397a0f0df135f3ad550ee7a5 (commit)
via bf3ed6a67f85928dcfb82a5ea706e3ffed8357a2 (commit)
via b937ed1d8d0ec0bf6448a840f4d658452d359db0 (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (bd5499c9a5a2de91bf606cd62927c3f9bb7f258b)
\
N -- N -- N (45c3adba5a683a744329c564448140252e1b48d7)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=45c3adba5a683a74432...
commit 45c3adba5a683a744329c564448140252e1b48d7
Author: Vincent Sanders <vince(a)netsurf-browser.org>
Commit: Vincent Sanders <vince(a)netsurf-browser.org>
persistant store now used and deals with faliure
diff --git a/content/llcache.c b/content/llcache.c
index f658380..49a8ccd 100644
--- a/content/llcache.c
+++ b/content/llcache.c
@@ -38,7 +38,8 @@
#include "content/urldb.h"
/** Define to enable tracing of llcache operations. */
-#undef LLCACHE_TRACE
+//#undef LLCACHE_TRACE
+#define LLCACHE_TRACE 1
/** State of a low-level cache object fetch */
typedef enum {
@@ -102,6 +103,7 @@ typedef enum {
typedef struct {
time_t req_time; /**< Time of request */
time_t res_time; /**< Time of response */
+ time_t fin_time; /**< Time of request completion */
time_t date; /**< Date: response header */
time_t expires; /**< Expires: response header */
#define INVALID_AGE -1
@@ -139,7 +141,7 @@ struct llcache_object {
size_t source_len; /**< Byte length of source data */
size_t source_alloc; /**< Allocated size of source buffer */
- llcache_store_state store_state;
+ llcache_store_state store_state; /**< where the data for the object is stored */
llcache_object_user *users; /**< List of users */
@@ -155,6 +157,13 @@ struct llcache_object {
llcache_header *headers; /**< Fetch headers */
size_t num_headers; /**< Number of fetch headers */
+
+ /* Instrumentation. These elemnts are strictly for information
+ * to improve the cache performance and to provide performace
+ * metrics. The values are non-authorative and must not be used to
+ * determine object lifetime etc.
+ */
+ time_t last_used; /**< time the last user was removed from the object */
};
struct llcache_s {
@@ -273,6 +282,11 @@ static nserror llcache_object_remove_user(llcache_object *object,
user->next = user->prev = NULL;
+ /* record the time the last user was removed from the object */
+ if (object->users == NULL) {
+ object->last_used = time(NULL);
+ }
+
#ifdef LLCACHE_TRACE
LOG(("Removing user %p from %p", user, object));
#endif
@@ -712,6 +726,7 @@ static nserror llcache_object_refetch(llcache_object *object)
/* Reset cache control data */
llcache_invalidate_cache_control_data(object);
object->cache.req_time = time(NULL);
+ object->cache.fin_time = object->cache.req_time;
/* Reset fetch state */
object->fetch.state = LLCACHE_FETCH_INIT;
@@ -968,6 +983,7 @@ static nserror llcache_object_clone_cache_data(llcache_object *source,
destination->cache.req_time = source->cache.req_time;
destination->cache.res_time = source->cache.res_time;
+ destination->cache.fin_time = source->cache.fin_time;
if (source->cache.date != 0)
destination->cache.date = source->cache.date;
@@ -991,6 +1007,27 @@ static nserror llcache_object_clone_cache_data(llcache_object *source,
}
/**
+ * Remove a low-level cache object from a cache list
+ *
+ * \param object Object to remove
+ * \param list List to remove from
+ * \return NSERROR_OK
+ */
+static nserror llcache_object_remove_from_list(llcache_object *object,
+ llcache_object **list)
+{
+ if (object == *list)
+ *list = object->next;
+ else
+ object->prev->next = object->next;
+
+ if (object->next != NULL)
+ object->next->prev = object->prev;
+
+ return NSERROR_OK;
+}
+
+/**
* Retrieve a potentially cached object
*
* \param url URL of object to retrieve
@@ -1001,9 +1038,13 @@ static nserror llcache_object_clone_cache_data(llcache_object *source,
* \param result Pointer to location to recieve retrieved object
* \return NSERROR_OK on success, appropriate error otherwise
*/
-static nserror llcache_object_retrieve_from_cache(nsurl *url, uint32_t flags,
- nsurl *referer, const llcache_post_data *post,
- uint32_t redirect_count, llcache_object **result)
+static nserror
+llcache_object_retrieve_from_cache(nsurl *url,
+ uint32_t flags,
+ nsurl *referer,
+ const llcache_post_data *post,
+ uint32_t redirect_count,
+ llcache_object **result)
{
nserror error;
llcache_object *obj, *newest = NULL;
@@ -1034,6 +1075,45 @@ static nserror llcache_object_retrieve_from_cache(nsurl *url, uint32_t flags,
/* The client needs to catch up with the object's state.
* This will occur the next time that llcache_poll is called.
*/
+
+ /* the objects source data may be in the persiatant store */
+ if ((obj->store_state == LLCACHE_STORE_DISC) &&
+ (obj->source_data == NULL)) {
+ int remaining;
+ error = guit->llcache->retrieve(obj->url,
+ &remaining,
+ &obj->source_data,
+ &obj->source_len);
+ if (error != NSERROR_OK) {
+ /* persistant store failed, destroy
+ * cache object and re-retch
+ */
+#ifdef LLCACHE_TRACE
+ LOG(("Persistant retrival failed for %p", obj));
+#endif
+
+ llcache_object_remove_from_list(obj,
+ &llcache->cached_objects);
+ llcache_object_destroy(obj);
+
+ /* Create new object */
+ error = llcache_object_new(url, &obj);
+ if (error != NSERROR_OK)
+ return error;
+
+ /* Attempt to kick-off fetch */
+ error = llcache_object_fetch(obj, flags,
+ referer, post,
+ redirect_count);
+ if (error != NSERROR_OK) {
+ llcache_object_destroy(obj);
+ return error;
+ }
+
+ /* Add new object to cache */
+ llcache_object_add_to_list(obj, &llcache->cached_objects);
+ }
+ }
} else if (newest != NULL) {
/* Found a candidate object but it needs freshness validation */
@@ -1642,9 +1722,9 @@ static nserror llcache_fetch_ssl_error(llcache_object *object)
/**
- * possibly push objects to disc cache.
+ * possibly push objects data to persiatant storage.
*/
-static void llcache_discwrite(void *p)
+static void llcache_persist(void *p)
{
llcache_object *object, *next;
int remaining_lifetime;
@@ -1656,7 +1736,7 @@ static void llcache_discwrite(void *p)
remaining_lifetime = llcache_object_rfc2616_remaining_lifetime(&object->cache);
- /* cachable objects with no pending fetches, not
+ /* cacehable objects with no pending fetches, not
* already on disc and with sufficient lifetime to
* make disc cache worthwile
*/
@@ -1688,7 +1768,7 @@ static void llcache_discwrite(void *p)
if (object != NULL) {
/* schedule completion of cache write */
- schedule(100, llcache_discwrite, NULL);
+ schedule(100, llcache_persist, NULL);
}
}
@@ -1794,7 +1874,10 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
llcache_object_cache_update(object);
- schedule(500, llcache_discwrite, NULL);
+ /* record when the fetch finished */
+ object->cache.fin_time = time(NULL);
+
+ schedule(500, llcache_persist, NULL);
}
break;
@@ -1904,26 +1987,6 @@ static llcache_object_user *llcache_object_find_user(const llcache_handle *handl
return user;
}
-/**
- * Remove a low-level cache object from a cache list
- *
- * \param object Object to remove
- * \param list List to remove from
- * \return NSERROR_OK
- */
-static nserror llcache_object_remove_from_list(llcache_object *object,
- llcache_object **list)
-{
- if (object == *list)
- *list = object->next;
- else
- object->prev->next = object->next;
-
- if (object->next != NULL)
- object->next->prev = object->prev;
-
- return NSERROR_OK;
-}
/**
* Determine if a low-level cache object resides in a given list
@@ -2235,7 +2298,21 @@ static nserror llcache_object_snapshot(llcache_object *object,
return NSERROR_OK;
}
-
+/**
+ * construct a sorted list of objects available for cleaning operations
+ *
+ * The list contains fresh cacheable objects with no users or pending
+ * fetches. Any objects with a remaining lifetime less than cache poll
+ * time are simply not considered, they will become stale before the
+ * next cache poll and removed.
+ *
+ * The list is sorted by:
+ */
+/*static struct victim_list*
+build_candidate_list()
+{
+}
+*/
/******************************************************************************
* Public API *
@@ -2255,15 +2332,10 @@ void llcache_clean(void)
LOG(("Attempting cache clean"));
#endif
- /* Candidates for cleaning are (in order of priority):
- *
- * 1) Uncacheable objects with no users
- * 2) Stale cacheable objects with no users or pending fetches
- * 3) Fresh cacheable objects with no users or pending fetches
- */
-
- /* 1) Uncacheable objects with no users or fetches */
- for (object = llcache->uncached_objects; object != NULL; object = next) {
+ /* Uncacheable objects with no users or fetches */
+ for (object = llcache->uncached_objects;
+ object != NULL;
+ object = next) {
next = object->next;
/* The candidate count of uncacheable objects is always 0 */
@@ -2282,8 +2354,11 @@ void llcache_clean(void)
}
}
- /* 2) Stale cacheable objects with no users or pending fetches */
- for (object = llcache->cached_objects; object != NULL; object = next) {
+
+ /* Stale cacheable objects with no users or pending fetches */
+ for (object = llcache->cached_objects;
+ object != NULL;
+ object = next) {
next = object->next;
remaining_lifetime = llcache_object_rfc2616_remaining_lifetime(&object->cache);
@@ -2295,7 +2370,10 @@ void llcache_clean(void)
if (remaining_lifetime > 0) {
/* object is fresh */
- llcache_size += object->source_len + sizeof(*object);
+ llcache_size += sizeof(*object);
+ if (object->source_data != NULL) {
+ llcache_size += object->source_len;
+ }
} else {
/* object is not fresh */
#ifdef LLCACHE_TRACE
@@ -2306,32 +2384,67 @@ void llcache_clean(void)
llcache_object_destroy(object);
}
} else {
+ /* object has users */
llcache_size += object->source_len + sizeof(*object);
}
}
- /* 3) Fresh cacheable objects with no users or pending
- * fetches, only if the cache exceeds the configured size.
+ /* if the cache limit is exceeded try to make some objects
+ * persistant so their RAM can be reclaimed in the next
+ * step */
+ if (llcache->limit < llcache_size) {
+ llcache_persist(NULL);
+ }
+
+ /* Fresh cacheable objects with no users, no pending fetches
+ * and pushed to persistant store while the cache exceeds
+ * the configured size.
*/
- if (llcache->limit < llcache_size) {
- for (object = llcache->cached_objects; object != NULL;
- object = next) {
- next = object->next;
-
- if ((object->users == NULL) &&
- (object->candidate_count == 0) &&
- (object->fetch.fetch == NULL) &&
- (object->fetch.outstanding_query == false)) {
+ for (object = llcache->cached_objects;
+ ((llcache->limit < llcache_size) && (object != NULL));
+ object = next) {
+ next = object->next;
+ if ((object->users == NULL) &&
+ (object->candidate_count == 0) &&
+ (object->fetch.fetch == NULL) &&
+ (object->fetch.outstanding_query == false) &&
+ (object->store_state == LLCACHE_STORE_DISC)) {
+ free(object->source_data);
+ object->source_data = NULL;
+
+ llcache_size -= object->source_len;
#ifdef LLCACHE_TRACE
- LOG(("Found victim %p", object));
+ LOG(("Freeing source data for %p len:%d",
+ object,
+ object->source_len));
#endif
- llcache_size -=
- object->source_len + sizeof(*object);
+ }
+ }
- llcache_object_remove_from_list(object,
+ /* Fresh cacheable objects with no users or pending
+ * fetches while the cache exceeds the configured size.
+ */
+ for (object = llcache->cached_objects;
+ ((llcache->limit < llcache_size) && (object != NULL));
+ object = next) {
+ next = object->next;
+
+ if ((object->users == NULL) &&
+ (object->candidate_count == 0) &&
+ (object->fetch.fetch == NULL) &&
+ (object->fetch.outstanding_query == false) &&
+ (object->store_state == LLCACHE_STORE_RAM)) {
+#ifdef LLCACHE_TRACE
+ LOG(("destroying cacahable object:%p len:%d age:%d",
+ object,
+ object->source_len,
+ time(NULL) - object->last_used));
+#endif
+ llcache_size -= object->source_len + sizeof(*object);
+
+ llcache_object_remove_from_list(object,
&llcache->cached_objects);
- llcache_object_destroy(object);
- }
+ llcache_object_destroy(object);
}
}
diff --git a/content/llcache.h b/content/llcache.h
index 3d8232c..1faba81 100644
--- a/content/llcache.h
+++ b/content/llcache.h
@@ -131,6 +131,12 @@ typedef struct {
} data;
} llcache_query;
+/** operation table */
+struct gui_llcache_table {
+ nserror (*persist)(struct nsurl *url, int remaining, const uint8_t *data, const size_t datalen);
+ nserror (*retrieve)(struct nsurl *url, int *remaining_out, uint8_t **data_out, size_t *datalen_out);
+};
+
/**
* Response handler for fetch-related queries
*
diff --git a/desktop/gui.h b/desktop/gui.h
index bcf4963..1a84bd4 100644
--- a/desktop/gui.h
+++ b/desktop/gui.h
@@ -467,10 +467,8 @@ struct gui_browser_table {
};
-struct gui_llcache_table {
- nserror (*persist)(struct nsurl *url, int remaining, const uint8_t *data, size_t datalen);
- nserror (*retrieve)(struct nsurl *url, int *remaining_out, const uint8_t **data_out, size_t *datalen_out);
-};
+
+struct gui_llcache_table;
/** Graphical user interface function table
*
diff --git a/desktop/gui_factory.c b/desktop/gui_factory.c
index f8be89a..e7d2994 100644
--- a/desktop/gui_factory.c
+++ b/desktop/gui_factory.c
@@ -343,12 +343,12 @@ static nserror verify_utf8_register(struct gui_utf8_table *gut)
return NSERROR_OK;
}
-static nserror gui_default_persist(nsurl *url, int remaining, const uint8_t *data, size_t datalen)
+static nserror gui_default_persist(nsurl *url, int remaining, const uint8_t *data, const size_t datalen)
{
return NSERROR_SAVE_FAILED;
}
-static nserror gui_default_retrieve(nsurl *url, int *remaining_out, const uint8_t **data_out, size_t *datalen_out)
+static nserror gui_default_retrieve(nsurl *url, int *remaining_out, uint8_t **data_out, size_t *datalen_out)
{
return NSERROR_NOT_FOUND;
}
diff --git a/gtk/llcache.c b/gtk/llcache.c
index 56d6d12..ef00641 100644
--- a/gtk/llcache.c
+++ b/gtk/llcache.c
@@ -19,18 +19,19 @@
#include "utils/nsurl.h"
#include "utils/log.h"
#include "desktop/gui.h"
+#include "content/llcache.h"
#include "gtk/llcache.h"
static nserror
-persist(nsurl *url, int remaining, const uint8_t *data, size_t datalen)
+persist(nsurl *url, int remaining, const uint8_t *data, const size_t datalen)
{
LOG(("Writing cache file for url:%s", nsurl_access(url)));
return NSERROR_OK;
}
static nserror
-retrieve(nsurl *url, int *remaining_out, const uint8_t **data_out, size_t *datalen_out)
+retrieve(nsurl *url, int *remaining_out, uint8_t **data_out, size_t *datalen_out)
{
return NSERROR_NOT_FOUND;
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=d3d09fbf3291d2bd9c2...
commit d3d09fbf3291d2bd9c260d1989692dd97d78e294
Author: Vincent Sanders <vince(a)netsurf-browser.org>
Commit: Vincent Sanders <vince(a)netsurf-browser.org>
use llcache operation table and move stub to gtk
diff --git a/content/llcache.c b/content/llcache.c
index 3fbe5ec..f658380 100644
--- a/content/llcache.c
+++ b/content/llcache.c
@@ -23,17 +23,19 @@
#include <stdlib.h>
#include <string.h>
#include <time.h>
-
#include <curl/curl.h>
-#include "content/fetch.h"
-#include "content/llcache.h"
-#include "content/urldb.h"
#include "utils/corestrings.h"
#include "utils/log.h"
#include "utils/messages.h"
#include "utils/nsurl.h"
#include "utils/utils.h"
+#include "utils/schedule.h"
+#include "desktop/gui_factory.h"
+
+#include "content/fetch.h"
+#include "content/llcache.h"
+#include "content/urldb.h"
/** Define to enable tracing of llcache operations. */
#undef LLCACHE_TRACE
@@ -1638,14 +1640,6 @@ static nserror llcache_fetch_ssl_error(llcache_object *object)
#define LLCACHE_MIN_DISC_LIFETIME 3600
#define LLCACHE_MAX_DISC_BANDWIDTH (512*1024)
-static nserror write_llcache_file(nsurl *url,
- int remaining,
- const uint8_t *data,
- size_t datalen)
-{
- LOG(("Writing cache file for url:%s", nsurl_access(url)));
- return NSERROR_OK;
-}
/**
* possibly push objects to disc cache.
@@ -1672,7 +1666,7 @@ static void llcache_discwrite(void *p)
(object->store_state == LLCACHE_STORE_RAM) &&
(remaining_lifetime > LLCACHE_MIN_DISC_LIFETIME)) {
/* ok found an object to write */
- ret = write_llcache_file(object->url,
+ ret = guit->llcache->persist(object->url,
remaining_lifetime,
object->source_data,
object->source_len);
diff --git a/gtk/Makefile.target b/gtk/Makefile.target
index ec19d1b..df9ac73 100644
--- a/gtk/Makefile.target
+++ b/gtk/Makefile.target
@@ -110,7 +110,7 @@ S_GTK := font_pango.c bitmap.c gui.c schedule.c thumbnail.c plotters.c \
treeview.c scaffolding.c gdk.c completion.c login.c throbber.c \
selection.c history.c window.c fetch.c download.c menu.c \
print.c search.c tabs.c theme.c toolbar.c gettext.c \
- compat.c cookies.c hotlist.c \
+ compat.c cookies.c hotlist.c llcache.c \
$(addprefix dialogs/,preferences.c about.c source.c)
S_GTK := $(addprefix gtk/,$(S_GTK)) $(addprefix utils/,container.c)
diff --git a/gtk/gui.c b/gtk/gui.c
index a3bf57c..1399fb9 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -69,6 +69,7 @@
#include "gtk/window.h"
#include "gtk/schedule.h"
#include "gtk/selection.h"
+#include "gtk/llcache.h"
#include "render/form.h"
#include "utils/filepath.h"
@@ -1014,6 +1015,7 @@ int main(int argc, char** argv)
.clipboard = nsgtk_clipboard_table,
.download = nsgtk_download_table,
.fetch = nsgtk_fetch_table,
+ .llcache = nsgtk_llcache_table,
};
/* check home directory is available */
diff --git a/gtk/llcache.c b/gtk/llcache.c
new file mode 100644
index 0000000..56d6d12
--- /dev/null
+++ b/gtk/llcache.c
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2014 Vincent Sanders <vince(a)netsurf-browser.org>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "utils/nsurl.h"
+#include "utils/log.h"
+#include "desktop/gui.h"
+
+#include "gtk/llcache.h"
+
+static nserror
+persist(nsurl *url, int remaining, const uint8_t *data, size_t datalen)
+{
+ LOG(("Writing cache file for url:%s", nsurl_access(url)));
+ return NSERROR_OK;
+}
+
+static nserror
+retrieve(nsurl *url, int *remaining_out, const uint8_t **data_out, size_t *datalen_out)
+{
+ return NSERROR_NOT_FOUND;
+}
+
+static struct gui_llcache_table llcache_table = {
+ .persist = persist,
+ .retrieve = retrieve,
+};
+
+struct gui_llcache_table *nsgtk_llcache_table = &llcache_table;
diff --git a/gtk/llcache.h b/gtk/llcache.h
new file mode 100644
index 0000000..6afdfe9
--- /dev/null
+++ b/gtk/llcache.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2014 Vincent Sanders <vince(a)netsurf-browser.org>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GTK_LLCACHE_H
+#define GTK_LLCACHE_H
+
+extern struct gui_llcache_table* nsgtk_llcache_table;
+
+#endif
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=de715b09d297dd42c36...
commit de715b09d297dd42c3690a178157a3b77c011946
Author: Vincent Sanders <vince(a)netsurf-browser.org>
Commit: Vincent Sanders <vince(a)netsurf-browser.org>
add llcache operation table
diff --git a/content/llcache.c b/content/llcache.c
index a97d3cc..3fbe5ec 100644
--- a/content/llcache.c
+++ b/content/llcache.c
@@ -1638,7 +1638,10 @@ static nserror llcache_fetch_ssl_error(llcache_object *object)
#define LLCACHE_MIN_DISC_LIFETIME 3600
#define LLCACHE_MAX_DISC_BANDWIDTH (512*1024)
-nserror write_llcache_file(nsurl *url, const uint8_t *data, size_t datalen)
+static nserror write_llcache_file(nsurl *url,
+ int remaining,
+ const uint8_t *data,
+ size_t datalen)
{
LOG(("Writing cache file for url:%s", nsurl_access(url)));
return NSERROR_OK;
@@ -1670,12 +1673,19 @@ static void llcache_discwrite(void *p)
(remaining_lifetime > LLCACHE_MIN_DISC_LIFETIME)) {
/* ok found an object to write */
ret = write_llcache_file(object->url,
+ remaining_lifetime,
object->source_data,
object->source_len);
- if (ret == NSERROR_OK) {
- object->store_state = LLCACHE_STORE_DISC;
- size_written += object->source_len;
+ if (ret != NSERROR_OK) {
+ /* as there has been a serialisation
+ * error, give up on making any more
+ * objects persistant for now.
+ */
+ return;
}
+ object->store_state = LLCACHE_STORE_DISC;
+ size_written += object->source_len;
+
if (size_written > LLCACHE_MAX_DISC_BANDWIDTH) {
break;
}
diff --git a/desktop/gui.h b/desktop/gui.h
index 85f1265..bcf4963 100644
--- a/desktop/gui.h
+++ b/desktop/gui.h
@@ -467,6 +467,10 @@ struct gui_browser_table {
};
+struct gui_llcache_table {
+ nserror (*persist)(struct nsurl *url, int remaining, const uint8_t *data, size_t datalen);
+ nserror (*retrieve)(struct nsurl *url, int *remaining_out, const uint8_t **data_out, size_t *datalen_out);
+};
/** Graphical user interface function table
*
@@ -500,6 +504,14 @@ struct gui_table {
* implies the local encoding is utf8.
*/
struct gui_utf8_table *utf8;
+
+ /** Low level cache table
+ *
+ * Used by the low level cache to push objects to persistant
+ * storage. The table is optional and may be NULL which
+ * disables persistant caching of objects
+ */
+ struct gui_llcache_table *llcache;
};
diff --git a/desktop/gui_factory.c b/desktop/gui_factory.c
index 8996ab5..f8be89a 100644
--- a/desktop/gui_factory.c
+++ b/desktop/gui_factory.c
@@ -343,6 +343,40 @@ static nserror verify_utf8_register(struct gui_utf8_table *gut)
return NSERROR_OK;
}
+static nserror gui_default_persist(nsurl *url, int remaining, const uint8_t *data, size_t datalen)
+{
+ return NSERROR_SAVE_FAILED;
+}
+
+static nserror gui_default_retrieve(nsurl *url, int *remaining_out, const uint8_t **data_out, size_t *datalen_out)
+{
+ return NSERROR_NOT_FOUND;
+}
+
+static struct gui_llcache_table default_llcache_table = {
+ .persist = gui_default_persist,
+ .retrieve = gui_default_retrieve,
+};
+
+/** verify clipboard table is valid */
+static nserror verify_llcache_register(struct gui_llcache_table *glt)
+{
+ /* check table is present */
+ if (glt == NULL) {
+ return NSERROR_BAD_PARAMETER;
+ }
+
+ /* mandantory operations */
+ if (glt->persist == NULL) {
+ return NSERROR_BAD_PARAMETER;
+ }
+ if (glt->retrieve == NULL) {
+ return NSERROR_BAD_PARAMETER;
+ }
+ return NSERROR_OK;
+}
+
+
static nsurl *gui_default_get_resource_url(const char *path)
{
return NULL;
@@ -529,6 +563,16 @@ nserror gui_factory_register(struct gui_table *gt)
return err;
}
+ /* llcache table */
+ if (gt->llcache == NULL) {
+ /* set default clipboard table */
+ gt->llcache = &default_llcache_table;
+ }
+ err = verify_llcache_register(gt->llcache);
+ if (err != NSERROR_OK) {
+ return err;
+ }
+
guit = gt;
return NSERROR_OK;
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=d54104cd79efc6f4a2a...
commit d54104cd79efc6f4a2a6d4c123e251b325bccee7
Author: Vincent Sanders <vince(a)netsurf-browser.org>
Commit: Vincent Sanders <vince(a)netsurf-browser.org>
get the candidate cache object writeout functional
diff --git a/content/llcache.c b/content/llcache.c
index 414e0b6..a97d3cc 100644
--- a/content/llcache.c
+++ b/content/llcache.c
@@ -1635,6 +1635,59 @@ static nserror llcache_fetch_ssl_error(llcache_object *object)
return error;
}
+#define LLCACHE_MIN_DISC_LIFETIME 3600
+#define LLCACHE_MAX_DISC_BANDWIDTH (512*1024)
+
+nserror write_llcache_file(nsurl *url, const uint8_t *data, size_t datalen)
+{
+ LOG(("Writing cache file for url:%s", nsurl_access(url)));
+ return NSERROR_OK;
+}
+
+/**
+ * possibly push objects to disc cache.
+ */
+static void llcache_discwrite(void *p)
+{
+ llcache_object *object, *next;
+ int remaining_lifetime;
+ nserror ret;
+ size_t size_written;
+
+ for (object = llcache->cached_objects; object != NULL; object = next) {
+ next = object->next;
+
+ remaining_lifetime = llcache_object_rfc2616_remaining_lifetime(&object->cache);
+
+ /* cachable objects with no pending fetches, not
+ * already on disc and with sufficient lifetime to
+ * make disc cache worthwile
+ */
+ if ((object->candidate_count == 0) &&
+ (object->fetch.fetch == NULL) &&
+ (object->fetch.outstanding_query == false) &&
+ (object->store_state == LLCACHE_STORE_RAM) &&
+ (remaining_lifetime > LLCACHE_MIN_DISC_LIFETIME)) {
+ /* ok found an object to write */
+ ret = write_llcache_file(object->url,
+ object->source_data,
+ object->source_len);
+ if (ret == NSERROR_OK) {
+ object->store_state = LLCACHE_STORE_DISC;
+ size_written += object->source_len;
+ }
+ if (size_written > LLCACHE_MAX_DISC_BANDWIDTH) {
+ break;
+ }
+ }
+ }
+
+ if (object != NULL) {
+ /* schedule completion of cache write */
+ schedule(100, llcache_discwrite, NULL);
+ }
+}
+
/**
* Handler for fetch events
*
@@ -1737,6 +1790,7 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
llcache_object_cache_update(object);
+ schedule(500, llcache_discwrite, NULL);
}
break;
@@ -2177,55 +2231,7 @@ static nserror llcache_object_snapshot(llcache_object *object,
return NSERROR_OK;
}
-#define LLCACHE_MIN_DISC_LIFETIME 3600
-#define LLCACHE_MAX_DISC_BANDWIDTH (1024*1024)
-
-nserror write_llcache_file(nsurl *url, const uint8_t *data, size_t datalen)
-{
- LOG(("Writing cache file for url:%s", nsurl_access(url)));
- return NSERROR_OK;
-}
-
-/** possibly push objects to disc */
-void llcache_discwrite(void)
-{
- llcache_object *object, *next;
- int remaining_lifetime;
- nserror ret;
- size_t size_written;
-
- for (object = llcache->cached_objects; object != NULL; object = next) {
- next = object->next;
-
- remaining_lifetime = llcache_object_rfc2616_remaining_lifetime(&object->cache);
- /* cachable objects with no pending fetches, not
- * already on disc and with sufficient lifetime to
- * make disc cache worthwile
- */
- if ((object->candidate_count == 0) &&
- (object->fetch.fetch == NULL) &&
- (object->fetch.outstanding_query == false) &&
- (object_store_state == LLCACHE_STORE_RAM) &&
- (remaining_lifetime > LLCACHE_MIN_DISC_LIFETIME)) {
- /* ok found an object to write */
- ret = write_llcache_object(object->url,
- object->source_data,
- object->source_len);
- if (ret == NSERROR_OK) {
- object->store_state = LLCACHE_STORE_DISC;
- size_written += object->source_len;
- }
- if (size_written > LLCACHE_MAX_DISC_BANDWIDTH) {
- break;
- }
- }
- }
-
- if (object != NULL) {
- /* schedule completion of cache write */
- }
-}
/******************************************************************************
* Public API *
diff --git a/utils/schedule.h b/utils/schedule.h
index b5fe386..a75db85 100644
--- a/utils/schedule.h
+++ b/utils/schedule.h
@@ -26,6 +26,16 @@
/* In platform specific schedule.c. */
typedef void (*schedule_callback_fn)(void *p);
+/**
+ * Schedule a callback.
+ *
+ * \param t interval before the callback should be made / cs
+ * \param callback callback function
+ * \param p user parameter, passed to callback function
+ *
+ * The callback function will be called as soon as possible after t cs have
+ * passed.
+ */
void schedule(int t, schedule_callback_fn callback, void *p);
void schedule_remove(schedule_callback_fn callback, void *p);
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=f4fc7cf38c78ddb6a15...
commit f4fc7cf38c78ddb6a157b5b850d739747cef505e
Author: Vincent Sanders <vince(a)netsurf-browser.org>
Commit: Vincent Sanders <vince(a)netsurf-browser.org>
add first cut of discwrite
diff --git a/content/llcache.c b/content/llcache.c
index e4baec6..414e0b6 100644
--- a/content/llcache.c
+++ b/content/llcache.c
@@ -75,7 +75,7 @@ typedef struct llcache_object_user {
typedef struct {
uint32_t flags; /**< Fetch flags */
nsurl *referer; /**< Referring URL, or NULL if none */
- llcache_post_data *post; /**< POST data, or NULL for GET */
+ llcache_post_data *post; /**< POST data, or NULL for GET */
struct fetch *fetch; /**< Fetch handle for this object */
@@ -116,32 +116,43 @@ typedef struct {
char *value; /**< Header value */
} llcache_header;
+/** Current status of objects data */
+typedef enum {
+ LLCACHE_STORE_RAM = 0, /**< sourec data is stored in RAM only */
+ LLCACHE_STORE_MMAP, /**< source data is mmaped (implies on disc too) */
+ LLCACHE_STORE_DISC, /**< source data is stored on disc */
+} llcache_store_state;
+
/** Low-level cache object */
/** \todo Consider whether a list is a sane container */
struct llcache_object {
- llcache_object *prev; /**< Previous in list */
- llcache_object *next; /**< Next in list */
+ llcache_object *prev; /**< Previous in list */
+ llcache_object *next; /**< Next in list */
+
+ nsurl *url; /**< Post-redirect URL for object */
+ bool has_query; /**< URL has a query segment */
- nsurl *url; /**< Post-redirect URL for object */
- bool has_query; /**< URL has a query segment */
-
/** \todo We need a generic dynamic buffer object */
- uint8_t *source_data; /**< Source data for object */
- size_t source_len; /**< Byte length of source data */
- size_t source_alloc; /**< Allocated size of source buffer */
+ uint8_t *source_data; /**< Source data for object */
+ size_t source_len; /**< Byte length of source data */
+ size_t source_alloc; /**< Allocated size of source buffer */
- llcache_object_user *users; /**< List of users */
+ llcache_store_state store_state;
- llcache_fetch_ctx fetch; /**< Fetch context for object */
+ llcache_object_user *users; /**< List of users */
- llcache_cache_control cache; /**< Cache control data for object */
- llcache_object *candidate; /**< Object to use, if fetch determines
- * that it is still fresh */
- uint32_t candidate_count; /**< Count of objects this is a
- * candidate for */
+ llcache_fetch_ctx fetch; /**< Fetch context for object */
- llcache_header *headers; /**< Fetch headers */
- size_t num_headers; /**< Number of fetch headers */
+ llcache_cache_control cache; /**< Cache control data for object */
+ llcache_object *candidate; /**< Object to use, if fetch determines
+ * that it is still fresh
+ */
+ uint32_t candidate_count; /**< Count of objects this is a
+ * candidate for
+ */
+
+ llcache_header *headers; /**< Fetch headers */
+ size_t num_headers; /**< Number of fetch headers */
};
struct llcache_s {
@@ -222,10 +233,10 @@ static nserror llcache_object_user_destroy(llcache_object_user *user)
#ifdef LLCACHE_TRACE
LOG(("Destroyed user %p", user));
#endif
-
+
assert(user->next == NULL);
assert(user->prev == NULL);
-
+
if (user->handle != NULL)
free(user->handle);
@@ -241,7 +252,7 @@ static nserror llcache_object_user_destroy(llcache_object_user *user)
* \param user User to remove
* \return NSERROR_OK.
*/
-static nserror llcache_object_remove_user(llcache_object *object,
+static nserror llcache_object_remove_user(llcache_object *object,
llcache_object_user *user)
{
assert(user != NULL);
@@ -249,7 +260,7 @@ static nserror llcache_object_remove_user(llcache_object *object,
assert(object->users != NULL);
assert(user->handle == NULL || user->handle->object == object);
assert((user->prev != NULL) || (object->users == user));
-
+
if (user == object->users)
object->users = user->next;
else
@@ -257,9 +268,9 @@ static nserror llcache_object_remove_user(llcache_object *object,
if (user->next != NULL)
user->next->prev = user->prev;
-
+
user->next = user->prev = NULL;
-
+
#ifdef LLCACHE_TRACE
LOG(("Removing user %p from %p", user, object));
#endif
@@ -279,7 +290,7 @@ static nserror llcache_send_event_to_users(llcache_object *object,
{
nserror error = NSERROR_OK;
llcache_object_user *user, *next_user;
-
+
user = object->users;
while (user != NULL) {
user->iterator_target = true;
@@ -301,7 +312,7 @@ static nserror llcache_send_event_to_users(llcache_object *object,
user = next_user;
}
-
+
return error;
}
@@ -336,7 +347,7 @@ static nserror llcache_object_new(nsurl *url, llcache_object **result)
* \param clone Pointer to location to receive clone
* \return NSERROR_OK on success, appropriate error otherwise
*/
-static nserror llcache_post_data_clone(const llcache_post_data *orig,
+static nserror llcache_post_data_clone(const llcache_post_data *orig,
llcache_post_data **clone)
{
llcache_post_data *post_clone;
@@ -379,7 +390,7 @@ static nserror llcache_post_data_clone(const llcache_post_data *orig,
* \param value Pointer to location to receive header value
* \return NSERROR_OK on success, appropriate error otherwise
*/
-static nserror llcache_fetch_split_header(const uint8_t *data, size_t len,
+static nserror llcache_fetch_split_header(const uint8_t *data, size_t len,
char **name, char **value)
{
char *n, *v;
@@ -408,8 +419,8 @@ static nserror llcache_fetch_split_header(const uint8_t *data, size_t len,
}
/* Strip trailing whitespace from name */
- while (colon > data && (colon[-1] == ' ' ||
- colon[-1] == '\t' || colon[-1] == '\r' ||
+ while (colon > data && (colon[-1] == ' ' ||
+ colon[-1] == '\t' || colon[-1] == '\r' ||
colon[-1] == '\n'))
colon--;
@@ -425,12 +436,12 @@ static nserror llcache_fetch_split_header(const uint8_t *data, size_t len,
/* Skip over colon and any subsequent whitespace */
do {
colon++;
- } while (*colon == ' ' || *colon == '\t' ||
+ } while (*colon == ' ' || *colon == '\t' ||
*colon == '\r' || *colon == '\n');
/* Strip trailing whitespace from value */
- while (len > 0 && (data[len - 1] == ' ' ||
- data[len - 1] == '\t' ||
+ while (len > 0 && (data[len - 1] == ' ' ||
+ data[len - 1] == '\t' ||
data[len - 1] == '\r' ||
data[len - 1] == '\n')) {
len--;
@@ -459,11 +470,11 @@ static nserror llcache_fetch_split_header(const uint8_t *data, size_t len,
* \param value Pointer to location to receive header value
* \return NSERROR_OK on success, appropriate error otherwise
*
- * \note This function also has the side-effect of updating
+ * \note This function also has the side-effect of updating
* the cache control data for the object if an interesting
* header is encountered
*/
-static nserror llcache_fetch_parse_header(llcache_object *object,
+static nserror llcache_fetch_parse_header(llcache_object *object,
const uint8_t *data, size_t len, char **name, char **value)
{
nserror error;
@@ -499,13 +510,13 @@ static nserror llcache_fetch_parse_header(llcache_object *object,
while (*comma != '\0' && *comma != ',')
comma++;
- if (8 < comma - start && (strncasecmp(start,
- "no-cache", 8) == 0 ||
+ if (8 < comma - start && (strncasecmp(start,
+ "no-cache", 8) == 0 ||
strncasecmp(start, "no-store", 8) == 0))
/* When we get a disk cache we should
* distinguish between these two */
object->cache.no_cache = LLCACHE_VALIDATE_ALWAYS;
- else if (7 < comma - start &&
+ else if (7 < comma - start &&
strncasecmp(start, "max-age", 7) == 0) {
/* Find '=' */
while (start < comma && *start != '=')
@@ -547,7 +558,7 @@ static nserror llcache_fetch_parse_header(llcache_object *object,
#undef SKIP_ST
- return NSERROR_OK;
+ return NSERROR_OK;
}
/* Destroy headers */
@@ -581,7 +592,7 @@ static inline void llcache_invalidate_cache_control_data(llcache_object *object)
* \param len Byte length of header
* \return NSERROR_OK on success, appropriate error otherwise
*/
-static nserror llcache_fetch_process_header(llcache_object *object,
+static nserror llcache_fetch_process_header(llcache_object *object,
const uint8_t *data, size_t len)
{
nserror error;
@@ -589,14 +600,14 @@ static nserror llcache_fetch_process_header(llcache_object *object,
llcache_header *temp;
/* The headers for multiple HTTP responses may be delivered to us if
- * the fetch layer receives a 401 response for which it has
+ * the fetch layer receives a 401 response for which it has
* authentication credentials. This will result in a silent re-request
* after which we'll receive the actual response headers for the
* object we want to fetch (assuming that the credentials were correct
* of course)
*
- * Therefore, if the header is an HTTP response start marker, then we
- * must discard any headers we've read so far, reset the cache data
+ * Therefore, if the header is an HTTP response start marker, then we
+ * must discard any headers we've read so far, reset the cache data
* that we might have computed, and start again.
*/
/** \todo Properly parse the response line */
@@ -617,7 +628,7 @@ static nserror llcache_fetch_process_header(llcache_object *object,
}
/* Append header data to the object's headers array */
- temp = realloc(object->headers, (object->num_headers + 1) *
+ temp = realloc(object->headers, (object->num_headers + 1) *
sizeof(llcache_header));
if (temp == NULL) {
free(name);
@@ -642,7 +653,7 @@ static nserror llcache_fetch_process_header(llcache_object *object,
* \return NSERROR_OK on success, appropriate error otherwise
*
* \pre The fetch parameters in object->fetch must be populated
- */
+ */
static nserror llcache_object_refetch(llcache_object *object)
{
const char *urlenc = NULL;
@@ -663,7 +674,7 @@ static nserror llcache_object_refetch(llcache_object *object)
return NSERROR_NOMEM;
if (object->cache.etag != NULL) {
- const size_t len = SLEN("If-None-Match: ") +
+ const size_t len = SLEN("If-None-Match: ") +
strlen(object->cache.etag) + 1;
headers[header_idx] = malloc(len);
@@ -739,7 +750,7 @@ static nserror llcache_object_refetch(llcache_object *object)
* \return NSERROR_OK on success, appropriate error otherwise
*
* \pre object::url must contain the URL to fetch
- * \pre If there is a freshness validation candidate,
+ * \pre If there is a freshness validation candidate,
* object::candidate and object::cache must be filled in
* \pre There must not be a fetch in progress for \a object
*/
@@ -913,7 +924,7 @@ static bool llcache_object_is_fresh(const llcache_object *object)
* - it was not forbidden from being returned from the cache
* unvalidated.
*
- * - it has remaining lifetime or still being fetched.
+ * - it has remaining lifetime or still being fetched.
*/
return ((cd->no_cache == LLCACHE_VALIDATE_FRESH) &&
((remaining_lifetime > 0) ||
@@ -970,7 +981,7 @@ static nserror llcache_object_clone_cache_data(llcache_object *source,
if (source->cache.no_cache != LLCACHE_VALIDATE_FRESH)
destination->cache.no_cache = source->cache.no_cache;
-
+
if (source->cache.last_modified != 0)
destination->cache.last_modified = source->cache.last_modified;
@@ -1002,7 +1013,7 @@ static nserror llcache_object_retrieve_from_cache(nsurl *url, uint32_t flags,
/* Search for the most recently fetched matching object */
for (obj = llcache->cached_objects; obj != NULL; obj = obj->next) {
- if ((newest == NULL ||
+ if ((newest == NULL ||
obj->cache.req_time > newest->cache.req_time) &&
nsurl_compare(obj->url, url,
NSURL_COMPLETE) == true) {
@@ -1038,7 +1049,7 @@ static nserror llcache_object_retrieve_from_cache(nsurl *url, uint32_t flags,
if (error != NSERROR_OK) {
llcache_object_destroy(obj);
return error;
- }
+ }
/* Record candidate, so we can fall back if it is still fresh */
newest->candidate_count++;
@@ -1135,7 +1146,7 @@ static nserror llcache_object_retrieve(nsurl *url, uint32_t flags,
}
/* Attempt to kick-off fetch */
- error = llcache_object_fetch(obj, flags, referer, post,
+ error = llcache_object_fetch(obj, flags, referer, post,
redirect_count);
if (error != NSERROR_OK) {
llcache_object_destroy(obj);
@@ -1155,17 +1166,17 @@ static nserror llcache_object_retrieve(nsurl *url, uint32_t flags,
/* Returned object is already in the cached list */
}
-
+
obj->has_query = has_query;
#ifdef LLCACHE_TRACE
LOG(("Retrieved %p", obj));
#endif
-
+
*result = obj;
-
+
nsurl_unref(defragmented_url);
-
+
return NSERROR_OK;
}
@@ -1225,13 +1236,13 @@ static nserror llcache_fetch_redirect(llcache_object *object, const char *target
/* Abort fetch for this object */
fetch_abort(object->fetch.fetch);
object->fetch.fetch = NULL;
-
+
/* Invalidate the cache control data */
llcache_invalidate_cache_control_data(object);
/* And mark it complete */
object->fetch.state = LLCACHE_FETCH_COMPLETE;
-
+
/* Forcibly stop redirecting if we've followed too many redirects */
#define REDIRECT_LIMIT 10
if (object->fetch.redirect_count > REDIRECT_LIMIT) {
@@ -1239,7 +1250,7 @@ static nserror llcache_fetch_redirect(llcache_object *object, const char *target
event.type = LLCACHE_EVENT_ERROR;
event.data.msg = messages_get("BadRedirect");
-
+
return llcache_send_event_to_users(object, &event);
}
#undef REDIRECT_LIMIT
@@ -1306,7 +1317,7 @@ static nserror llcache_fetch_redirect(llcache_object *object, const char *target
/* Attempt to fetch target URL */
error = llcache_object_retrieve(url, object->fetch.flags,
- object->fetch.referer, post,
+ object->fetch.referer, post,
object->fetch.redirect_count + 1, &dest);
/* No longer require url */
@@ -1326,7 +1337,7 @@ static nserror llcache_fetch_redirect(llcache_object *object, const char *target
/* Dest is now our object */
*replacement = dest;
- return NSERROR_OK;
+ return NSERROR_OK;
}
/**
@@ -1373,14 +1384,14 @@ static nserror llcache_fetch_notmodified(llcache_object *object,
object->candidate->candidate_count--;
/* Clone our cache control data into the candidate */
- llcache_object_clone_cache_data(object, object->candidate,
+ llcache_object_clone_cache_data(object, object->candidate,
false);
/* Bring candidate's cache data up to date */
llcache_object_cache_update(object->candidate);
/* Revert no-cache to normal, if required */
- if (object->candidate->cache.no_cache ==
+ if (object->candidate->cache.no_cache ==
LLCACHE_VALIDATE_ONCE) {
- object->candidate->cache.no_cache =
+ object->candidate->cache.no_cache =
LLCACHE_VALIDATE_FRESH;
}
@@ -1415,7 +1426,7 @@ static nserror llcache_fetch_notmodified(llcache_object *object,
* \param len Byte length of data
* \return NSERROR_OK on success, appropriate error otherwise.
*/
-static nserror llcache_fetch_process_data(llcache_object *object, const uint8_t *data,
+static nserror llcache_fetch_process_data(llcache_object *object, const uint8_t *data,
size_t len)
{
/* Resize source buffer if it's too small */
@@ -1464,7 +1475,7 @@ static nserror llcache_query_handle_response(bool proceed, void *cbpw)
event.type = LLCACHE_EVENT_ERROR;
/** \todo More appropriate error message */
event.data.msg = messages_get("FetchFailed");
-
+
return llcache_send_event_to_users(object, &event);
}
@@ -1511,7 +1522,7 @@ static nserror llcache_fetch_auth(llcache_object *object, const char *realm)
object->fetch.outstanding_query = true;
- error = llcache->query_cb(&query, llcache->query_cb_pw,
+ error = llcache->query_cb(&query, llcache->query_cb_pw,
llcache_query_handle_response, object);
} else {
llcache_event event;
@@ -1523,7 +1534,7 @@ static nserror llcache_fetch_auth(llcache_object *object, const char *realm)
event.type = LLCACHE_EVENT_ERROR;
/** \todo More appropriate error message */
event.data.msg = messages_get("FetchFailed");
-
+
error = llcache_send_event_to_users(object, &event);
}
} else {
@@ -1578,7 +1589,7 @@ static nserror llcache_fetch_cert_error(llcache_object *object,
event.type = LLCACHE_EVENT_ERROR;
/** \todo More appropriate error message */
event.data.msg = messages_get("FetchFailed");
-
+
error = llcache_send_event_to_users(object, &event);
}
@@ -1612,7 +1623,7 @@ static nserror llcache_fetch_ssl_error(llcache_object *object)
event.type = LLCACHE_EVENT_ERROR;
/** \todo More appropriate error message */
event.data.msg = messages_get("FetchFailed");
-
+
error = llcache_send_event_to_users(object, &event);
} else {
/* Flag that we've tried to downgrade, so that if the
@@ -1645,8 +1656,8 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
/* Received a fetch header */
object->fetch.state = LLCACHE_FETCH_HEADERS;
- error = llcache_fetch_process_header(object,
- msg->data.header_or_data.buf,
+ error = llcache_fetch_process_header(object,
+ msg->data.header_or_data.buf,
msg->data.header_or_data.len);
break;
@@ -1660,7 +1671,7 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
object->candidate = NULL;
}
- error = llcache_fetch_redirect(object,
+ error = llcache_fetch_redirect(object,
msg->data.redirect, &object);
break;
case FETCH_NOTMODIFIED:
@@ -1672,7 +1683,7 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
case FETCH_DATA:
/* Received some data */
if (object->fetch.state != LLCACHE_FETCH_DATA) {
- /* On entry into this state, check if we need to
+ /* On entry into this state, check if we need to
* invalidate the cache control data. We are guaranteed
* to have received all response headers.
*
@@ -1687,7 +1698,7 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
long http_code = fetch_http_code(object->fetch.fetch);
if ((http_code != 200 && http_code != 203) ||
- (object->has_query &&
+ (object->has_query &&
(object->cache.max_age == INVALID_AGE &&
object->cache.expires == 0))) {
/* Invalidate cache control data */
@@ -1703,7 +1714,7 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
object->fetch.state = LLCACHE_FETCH_DATA;
- error = llcache_fetch_process_data(object,
+ error = llcache_fetch_process_data(object,
msg->data.header_or_data.buf,
msg->data.header_or_data.len);
break;
@@ -1716,7 +1727,7 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
object->fetch.fetch = NULL;
/* Shrink source buffer to required size */
- temp = realloc(object->source_data,
+ temp = realloc(object->source_data,
object->source_len);
/* If source_len is 0, then temp may be NULL */
if (temp != NULL || object->source_len == 0) {
@@ -1725,6 +1736,7 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
}
llcache_object_cache_update(object);
+
}
break;
@@ -1748,9 +1760,9 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
event.type = LLCACHE_EVENT_ERROR;
event.data.msg = msg->data.error;
-
+
error = llcache_send_event_to_users(object, &event);
-
+
break;
case FETCH_PROGRESS:
/* Progress update */
@@ -1758,7 +1770,7 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
event.data.msg = msg->data.progress;
error = llcache_send_event_to_users(object, &event);
-
+
break;
/* Events requiring action */
@@ -1782,8 +1794,8 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
object->candidate = NULL;
}
- error = llcache_fetch_cert_error(object,
- msg->data.cert_err.certs,
+ error = llcache_fetch_cert_error(object,
+ msg->data.cert_err.certs,
msg->data.cert_err.num_certs);
break;
case FETCH_SSL_ERR:
@@ -1892,7 +1904,7 @@ static nserror llcache_object_notify_users(llcache_object *object)
#endif
/**
- * State transitions and event emission for users.
+ * State transitions and event emission for users.
* Rows: user state. Cols: object state.
*
* User\Obj INIT HEADERS DATA COMPLETE
@@ -1924,8 +1936,8 @@ static nserror llcache_object_notify_users(llcache_object *object)
user->iterator_target = true;
/* A note on the computation of next_user:
- *
- * Within this loop, we may make a number of calls to
+ *
+ * Within this loop, we may make a number of calls to
* client code. Our contract with clients is that they
* can do whatever they like from within their callback
* handlers. This is so that we limit the pain of
@@ -1936,7 +1948,7 @@ static nserror llcache_object_notify_users(llcache_object *object)
* user list. In the common case, the user they attempt
* to remove is the current iteration target, and we
* already protect against that causing problems here.
- * However, no such protection exists if the client
+ * However, no such protection exists if the client
* attempts to remove other users from this object's
* user list.
*
@@ -1957,13 +1969,13 @@ static nserror llcache_object_notify_users(llcache_object *object)
emitted_notify = true;
}
- LOG(("User %p state: %d Object state: %d",
+ LOG(("User %p state: %d Object state: %d",
user, handle->state, objstate));
}
#endif
/* User: INIT, Obj: HEADERS, DATA, COMPLETE => User->HEADERS */
- if (handle->state == LLCACHE_FETCH_INIT &&
+ if (handle->state == LLCACHE_FETCH_INIT &&
objstate > LLCACHE_FETCH_INIT) {
handle->state = LLCACHE_FETCH_HEADERS;
}
@@ -1991,7 +2003,7 @@ static nserror llcache_object_notify_users(llcache_object *object)
/* User requested replay */
handle->state = LLCACHE_FETCH_HEADERS;
- /* Continue with the next user -- we'll
+ /* Continue with the next user -- we'll
* reemit the event next time round */
user->iterator_target = false;
next_user = user->next;
@@ -2010,15 +2022,15 @@ static nserror llcache_object_notify_users(llcache_object *object)
/* Construct HAD_DATA event */
event.type = LLCACHE_EVENT_HAD_DATA;
- event.data.data.buf =
+ event.data.data.buf =
object->source_data + handle->bytes;
- event.data.data.len =
+ event.data.data.len =
object->source_len - handle->bytes;
/* Update record of last byte emitted */
- if (object->fetch.flags &
+ if (object->fetch.flags &
LLCACHE_RETRIEVE_STREAM_DATA) {
- /* Streaming, so reset to zero to
+ /* Streaming, so reset to zero to
* minimise amount of cached source data.
* Additionally, we don't support replay
* when streaming. */
@@ -2044,7 +2056,7 @@ static nserror llcache_object_notify_users(llcache_object *object)
/* User requested replay */
handle->bytes = orig_handle_read;
- /* Continue with the next user -- we'll
+ /* Continue with the next user -- we'll
* reemit the data next time round */
user->iterator_target = false;
next_user = user->next;
@@ -2077,7 +2089,7 @@ static nserror llcache_object_notify_users(llcache_object *object)
/* User requested replay */
handle->state = LLCACHE_FETCH_DATA;
- /* Continue with the next user -- we'll
+ /* Continue with the next user -- we'll
* reemit the event next time round */
user->iterator_target = false;
next_user = user->next;
@@ -2116,37 +2128,37 @@ static nserror llcache_object_snapshot(llcache_object *object,
{
llcache_object *newobj;
nserror error;
-
+
error = llcache_object_new(object->url, &newobj);
-
+
if (error != NSERROR_OK)
return error;
-
+
newobj->has_query = object->has_query;
newobj->source_alloc = newobj->source_len = object->source_len;
-
+
if (object->source_len > 0) {
newobj->source_data = malloc(newobj->source_alloc);
if (newobj->source_data == NULL) {
llcache_object_destroy(newobj);
return NSERROR_NOMEM;
}
- memcpy(newobj->source_data, object->source_data,
+ memcpy(newobj->source_data, object->source_data,
newobj->source_len);
}
-
+
if (object->num_headers > 0) {
- newobj->headers = calloc(sizeof(llcache_header),
+ newobj->headers = calloc(sizeof(llcache_header),
object->num_headers);
if (newobj->headers == NULL) {
llcache_object_destroy(newobj);
return NSERROR_NOMEM;
}
while (newobj->num_headers < object->num_headers) {
- llcache_header *nh =
+ llcache_header *nh =
&(newobj->headers[newobj->num_headers]);
- llcache_header *oh =
+ llcache_header *oh =
&(object->headers[newobj->num_headers]);
newobj->num_headers += 1;
nh->name = strdup(oh->name);
@@ -2157,14 +2169,63 @@ static nserror llcache_object_snapshot(llcache_object *object,
}
}
}
-
+
newobj->fetch.state = LLCACHE_FETCH_COMPLETE;
-
+
*snapshot = newobj;
-
+
+ return NSERROR_OK;
+}
+
+#define LLCACHE_MIN_DISC_LIFETIME 3600
+#define LLCACHE_MAX_DISC_BANDWIDTH (1024*1024)
+
+nserror write_llcache_file(nsurl *url, const uint8_t *data, size_t datalen)
+{
+ LOG(("Writing cache file for url:%s", nsurl_access(url)));
return NSERROR_OK;
}
+/** possibly push objects to disc */
+void llcache_discwrite(void)
+{
+ llcache_object *object, *next;
+ int remaining_lifetime;
+ nserror ret;
+ size_t size_written;
+
+ for (object = llcache->cached_objects; object != NULL; object = next) {
+ next = object->next;
+
+ remaining_lifetime = llcache_object_rfc2616_remaining_lifetime(&object->cache);
+
+ /* cachable objects with no pending fetches, not
+ * already on disc and with sufficient lifetime to
+ * make disc cache worthwile
+ */
+ if ((object->candidate_count == 0) &&
+ (object->fetch.fetch == NULL) &&
+ (object->fetch.outstanding_query == false) &&
+ (object_store_state == LLCACHE_STORE_RAM) &&
+ (remaining_lifetime > LLCACHE_MIN_DISC_LIFETIME)) {
+ /* ok found an object to write */
+ ret = write_llcache_object(object->url,
+ object->source_data,
+ object->source_len);
+ if (ret == NSERROR_OK) {
+ object->store_state = LLCACHE_STORE_DISC;
+ size_written += object->source_len;
+ }
+ if (size_written > LLCACHE_MAX_DISC_BANDWIDTH) {
+ break;
+ }
+ }
+ }
+
+ if (object != NULL) {
+ /* schedule completion of cache write */
+ }
+}
/******************************************************************************
* Public API *
@@ -2185,7 +2246,7 @@ void llcache_clean(void)
#endif
/* Candidates for cleaning are (in order of priority):
- *
+ *
* 1) Uncacheable objects with no users
* 2) Stale cacheable objects with no users or pending fetches
* 3) Fresh cacheable objects with no users or pending fetches
@@ -2196,14 +2257,14 @@ void llcache_clean(void)
next = object->next;
/* The candidate count of uncacheable objects is always 0 */
- if ((object->users == NULL) &&
+ if ((object->users == NULL) &&
(object->candidate_count == 0) &&
(object->fetch.fetch == NULL) &&
(object->fetch.outstanding_query == false)) {
#ifdef LLCACHE_TRACE
LOG(("Found victim %p", object));
#endif
- llcache_object_remove_from_list(object,
+ llcache_object_remove_from_list(object,
&llcache->uncached_objects);
llcache_object_destroy(object);
} else {
@@ -2243,18 +2304,18 @@ void llcache_clean(void)
* fetches, only if the cache exceeds the configured size.
*/
if (llcache->limit < llcache_size) {
- for (object = llcache->cached_objects; object != NULL;
+ for (object = llcache->cached_objects; object != NULL;
object = next) {
next = object->next;
- if ((object->users == NULL) &&
+ if ((object->users == NULL) &&
(object->candidate_count == 0) &&
(object->fetch.fetch == NULL) &&
(object->fetch.outstanding_query == false)) {
#ifdef LLCACHE_TRACE
LOG(("Found victim %p", object));
#endif
- llcache_size -=
+ llcache_size -=
object->source_len + sizeof(*object);
llcache_object_remove_from_list(object,
@@ -2271,7 +2332,7 @@ void llcache_clean(void)
}
/* See llcache.h for documentation */
-nserror
+nserror
llcache_initialise(llcache_query_callback cb, void *pw, uint32_t llcache_limit)
{
llcache = calloc(1, sizeof(struct llcache_s));
@@ -2330,7 +2391,7 @@ void llcache_finalise(void)
}
/* Fetch system has already been destroyed */
- object->fetch.fetch = NULL;
+ object->fetch.fetch = NULL;
llcache_object_destroy(object);
}
@@ -2343,11 +2404,11 @@ void llcache_finalise(void)
nserror llcache_poll(void)
{
llcache_object *object;
-
+
fetch_poll();
-
+
/* Catch new users up with state of objects */
- for (object = llcache->cached_objects; object != NULL;
+ for (object = llcache->cached_objects; object != NULL;
object = object->next) {
llcache_object_notify_users(object);
}
@@ -2415,7 +2476,7 @@ nserror llcache_handle_release(llcache_handle *handle)
assert(user != NULL);
if (user->iterator_target) {
- /* Can't remove / delete user object if it's
+ /* Can't remove / delete user object if it's
* the target of an iterator */
user->queued_for_delete = true;
} else {
@@ -2425,8 +2486,8 @@ nserror llcache_handle_release(llcache_handle *handle)
error = llcache_object_user_destroy(user);
}
}
-
- return error;
+
+ return error;
}
/* See llcache.h for documentation */
@@ -2434,14 +2495,14 @@ nserror llcache_handle_clone(llcache_handle *handle, llcache_handle **result)
{
nserror error;
llcache_object_user *newuser;
-
+
error = llcache_object_user_new(handle->cb, handle->pw, &newuser);
if (error == NSERROR_OK) {
llcache_object_add_user(handle->object, newuser);
newuser->handle->state = handle->state;
*result = newuser->handle;
}
-
+
return error;
}
@@ -2452,13 +2513,13 @@ nserror llcache_handle_abort(llcache_handle *handle)
llcache_object *object = handle->object, *newobject;
nserror error = NSERROR_OK;
bool all_alone = true;
-
+
/* Determine if we are the only user */
if (user->prev != NULL)
all_alone = false;
if (user->next != NULL)
all_alone = false;
-
+
if (all_alone == false) {
/* We must snapshot this object */
error = llcache_object_snapshot(object, &newobject);
@@ -2468,7 +2529,7 @@ nserror llcache_handle_abort(llcache_handle *handle)
/* Move across to the new object */
if (user->iterator_target) {
/* User is current iterator target, clone it */
- llcache_object_user *newuser =
+ llcache_object_user *newuser =
calloc(1, sizeof(llcache_object_user));
if (newuser == NULL) {
llcache_object_destroy(newobject);
@@ -2487,9 +2548,9 @@ nserror llcache_handle_abort(llcache_handle *handle)
llcache_object_remove_user(object, user);
llcache_object_add_user(newobject, user);
}
-
+
/* Add new object to uncached list */
- llcache_object_add_to_list(newobject,
+ llcache_object_add_to_list(newobject,
&llcache->uncached_objects);
} else {
/* We're the only user, so abort any fetch in progress */
@@ -2497,13 +2558,13 @@ nserror llcache_handle_abort(llcache_handle *handle)
fetch_abort(object->fetch.fetch);
object->fetch.fetch = NULL;
}
-
+
object->fetch.state = LLCACHE_FETCH_COMPLETE;
-
+
/* Invalidate cache control data */
llcache_invalidate_cache_control_data(object);
}
-
+
return error;
}
@@ -2519,7 +2580,7 @@ nserror llcache_handle_force_stream(llcache_handle *handle)
/* Forcibly uncache this object */
if (llcache_object_in_list(object, llcache->cached_objects)) {
- llcache_object_remove_from_list(object,
+ llcache_object_remove_from_list(object,
&llcache->cached_objects);
llcache_object_add_to_list(object, &llcache->uncached_objects);
}
@@ -2532,8 +2593,8 @@ nserror llcache_handle_force_stream(llcache_handle *handle)
/* See llcache.h for documentation */
nserror llcache_handle_invalidate_cache_data(llcache_handle *handle)
{
- if (handle->object != NULL && handle->object->fetch.fetch == NULL &&
- handle->object->cache.no_cache ==
+ if (handle->object != NULL && handle->object->fetch.fetch == NULL &&
+ handle->object->cache.no_cache ==
LLCACHE_VALIDATE_FRESH) {
handle->object->cache.no_cache = LLCACHE_VALIDATE_ONCE;
}
@@ -2557,7 +2618,7 @@ const uint8_t *llcache_handle_get_source_data(const llcache_handle *handle,
}
/* See llcache.h for documentation */
-const char *llcache_handle_get_header(const llcache_handle *handle,
+const char *llcache_handle_get_header(const llcache_handle *handle,
const char *key)
{
const llcache_object *object = handle->object;
@@ -2576,9 +2637,8 @@ const char *llcache_handle_get_header(const llcache_handle *handle,
}
/* See llcache.h for documentation */
-bool llcache_handle_references_same_object(const llcache_handle *a,
+bool llcache_handle_references_same_object(const llcache_handle *a,
const llcache_handle *b)
{
return a->object == b->object;
}
-
-----------------------------------------------------------------------
Summary of changes:
amiga/agclass/amigaguide_class.c | 30 +++-
amiga/agclass/amigaguide_class.h | 7 +-
amiga/arexx.c | 20 +--
amiga/context_menu.c | 39 ++---
amiga/download.c | 4 +-
amiga/file.c | 4 +-
amiga/gui.c | 354 +++++++++++++++----------------------
amiga/gui.h | 1 +
amiga/gui_options.c | 4 +-
amiga/gui_options.h | 1 +
amiga/help.c | 19 ++-
amiga/help.h | 6 +-
amiga/history_local.c | 4 +-
amiga/menu.c | 9 +-
amiga/print.c | 7 +-
amiga/tree.c | 3 +-
atari/about.c | 3 +-
atari/ctxmenu.c | 16 +-
atari/deskmenu.c | 12 +-
atari/gui.c | 13 +-
atari/rootwin.c | 8 +-
atari/rootwin.h | 2 +-
atari/toolbar.c | 9 +-
beos/gui.cpp | 2 +-
beos/scaffolding.cpp | 23 +--
beos/window.cpp | 8 +-
cocoa/BookmarksController.m | 6 +-
cocoa/BrowserView.m | 16 +-
cocoa/BrowserViewController.m | 12 +-
cocoa/BrowserWindowController.m | 5 +-
cocoa/FormSelectMenu.m | 4 +-
cocoa/HistoryView.m | 2 +-
cocoa/NetSurfAppDelegate.m | 12 +-
cocoa/NetsurfApp.m | 3 +-
cocoa/gui.m | 12 +-
content/llcache.c | 233 +++++++++++++++++++-------
content/llcache.h | 6 +
desktop/browser.c | 326 +++++++++++++++++++++++------------
desktop/browser.h | 127 ++++++++++----
desktop/browser_private.h | 13 ++
desktop/frames.c | 11 +-
desktop/global_history.c | 17 +-
desktop/gui.h | 31 +++-
desktop/gui_factory.c | 4 +-
desktop/hotlist.c | 17 +-
desktop/local_history.c | 42 +++--
desktop/local_history.h | 30 ++--
desktop/searchweb.c | 5 +-
framebuffer/gui.c | 73 ++++----
framebuffer/localhistory.c | 2 +-
gtk/dialogs/about.c | 6 +-
gtk/dialogs/preferences.c | 11 +-
gtk/dialogs/source.c | 6 +-
gtk/gui.c | 9 +-
gtk/llcache.c | 5 +-
gtk/scaffolding.c | 91 ++++------
gtk/search.c | 38 ++--
gtk/toolbar.c | 21 +--
gtk/window.c | 68 ++++----
javascript/jsapi/location.bnd | 7 +-
monkey/browser.c | 15 +-
render/box_textarea.c | 2 +-
render/form.c | 43 +++--
render/form.h | 10 +-
render/html.c | 41 ++++-
render/html_interaction.c | 8 +-
render/html_internal.h | 1 +
riscos/dialog.c | 3 +-
riscos/gui.c | 13 +-
riscos/gui/url_bar.c | 3 +-
riscos/history.c | 2 +-
riscos/iconbar.c | 7 +-
riscos/uri.c | 3 +-
riscos/url_complete.c | 3 +-
riscos/url_protocol.c | 3 +-
riscos/window.c | 178 ++++++--------------
test/Makefile | 6 +-
test/nsurl.c | 38 ++++-
utils/corestrings.c | 12 ++
utils/corestrings.h | 3 +
utils/errors.h | 2 +
utils/nsurl.c | 78 ++++++---
windows/gui.c | 19 +--
windows/localhistory.c | 3 +-
windows/main.c | 3 +-
85 files changed, 1297 insertions(+), 1081 deletions(-)
diff --git a/amiga/agclass/amigaguide_class.c b/amiga/agclass/amigaguide_class.c
index dfac7ad..fa88dd6 100755
--- a/amiga/agclass/amigaguide_class.c
+++ b/amiga/agclass/amigaguide_class.c
@@ -34,7 +34,7 @@ uint32 om_set(Class *, Object *, struct opSet *);
uint32 om_get(Class *, Object *, struct opGet *);
uint32 agm_open(Class *, Object *, Msg);
uint32 agm_close(Class *, Object *, Msg);
-
+uint32 agm_process(Class *, Object *, Msg);
/* *************************** class initialization and disposal ***************************** */
@@ -107,6 +107,9 @@ static uint32 dispatchAGClass(Class *cl, Object *o, Msg msg)
case AGM_CLOSE:
return agm_close(cl, o, msg);
+ case AGM_PROCESS:
+ return agm_process(cl, o, msg);
+
default:
return IIntuition->IDoSuperMethodA(cl, o, msg);
}
@@ -289,6 +292,11 @@ uint32 om_get(Class *cl, Object *o, struct opGet *msg)
retVal = 1;
break;
+ case AMIGAGUIDE_Signal:
+ *(msg->opg_Storage) = (uint32)lod->agSignal;
+ retVal = 1;
+ break;
+
default:
retVal = IIntuition->IDoSuperMethodA(cl, o, (Msg)msg);
}
@@ -344,3 +352,23 @@ uint32 agm_close(Class *cl, Object *o, Msg msg)
return (uint32)lod->agHandle;
}
+
+
+uint32 agm_process(Class *cl, Object *o, Msg msg)
+{
+ struct localObjectData *lod = (struct localObjectData *)INST_DATA(cl, o);
+
+ if (lod->agHandle) {
+ while ( (lod->agm = IAmigaGuide->GetAmigaGuideMsg(lod->agHandle)) ) {
+ switch(lod->agm->agm_Type) {
+ default:
+ //printf("%d\n", lod->agm->agm_Type);
+ break;
+ }
+ }
+ IAmigaGuide->ReplyAmigaGuideMsg(lod->agm);
+ }
+
+ return (uint32)lod->agHandle;
+}
+
diff --git a/amiga/agclass/amigaguide_class.h b/amiga/agclass/amigaguide_class.h
index f122f35..ee7e55e 100755
--- a/amiga/agclass/amigaguide_class.h
+++ b/amiga/agclass/amigaguide_class.h
@@ -27,10 +27,13 @@
#define AMIGAGUIDE_BaseName (AMIGAGUIDE_Dummy + 4) // Basename of the application that opens the help file.
#define AMIGAGUIDE_ContextArray (AMIGAGUIDE_Dummy + 5) // Context node array (must be NULL-terminated).
#define AMIGAGUIDE_ContextID (AMIGAGUIDE_Dummy + 6) // Index value of the node to display.
+#define AMIGAGUIDE_Signal (AMIGAGUIDE_Dummy + 7) // Signal mask to wait on
// method definition
-#define AGM_OPEN WM_OPEN
-#define AGM_CLOSE WM_CLOSE
+#define AGM_Dummy AMIGAGUIDE_Dummy + 100
+#define AGM_OPEN AGM_Dummy + 1
+#define AGM_CLOSE AGM_Dummy + 2
+#define AGM_PROCESS AGM_Dummy + 3
// function prototypes
Class *initAGClass(void);
diff --git a/amiga/arexx.c b/amiga/arexx.c
index 472aea1..240aafe 100644
--- a/amiga/arexx.c
+++ b/amiga/arexx.c
@@ -248,8 +248,7 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(curbw,
url,
NULL,
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -257,9 +256,8 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
}
else if(cmd->ac_ArgList[2])
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
bw,
@@ -267,8 +265,7 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
}
else if(cmd->ac_ArgList[1])
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -281,16 +278,14 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
}
else
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -510,8 +505,7 @@ STATIC VOID rx_home(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/context_menu.c b/amiga/context_menu.c
index 1aa8f7a..c7e438f 100644
--- a/amiga/context_menu.c
+++ b/amiga/context_menu.c
@@ -598,8 +598,8 @@ void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y)
ctxmenuhook.h_SubEntry = NULL;
ctxmenuhook.h_Data = gwin;
- ctxmenuobj = NewObject( POPUPMENU_GetClass(), NULL,
- PMA_MenuHandler, &ctxmenuhook,
+ ctxmenuobj = NewObject( POPUPMENU_GetClass(), NULL,
+ PMA_MenuHandler, &ctxmenuhook,
TAG_DONE);
if(gwin->bw && gwin->bw->history &&
@@ -707,7 +707,7 @@ void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y)
static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved)
{
- int32 itemid = 0;
+ int32 itemid = 0;
struct gui_window_2 *gwin = hook->h_Data;
APTR userdata = NULL;
struct browser_window *bw;
@@ -718,10 +718,9 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
nsurl *url;
nserror error;
- if(GetAttrs(item,PMIA_ID,&itemid,
- PMIA_UserData,&userdata,
- TAG_DONE))
- {
+ if(GetAttrs(item, PMIA_ID, &itemid,
+ PMIA_UserData, &userdata,
+ TAG_DONE)) {
switch(itemid)
{
case CMID_SELECTFILE:
@@ -780,8 +779,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
case CMID_URLOPENWIN:
error = nsurl_create(userdata, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY,
url,
hlcache_handle_get_url(gwin->bw->current_content),
gwin->bw,
@@ -799,9 +797,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
case CMID_URLOPENTAB:
error = nsurl_create(userdata, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY | BW_CREATE_TAB,
url,
hlcache_handle_get_url(gwin->bw->current_content),
gwin->bw,
@@ -824,8 +820,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
hlcache_handle_get_url(gwin->bw->current_content),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -839,8 +834,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
hlcache_handle_get_url(userdata),
hlcache_handle_get_url(gwin->bw->current_content),
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -856,8 +850,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
hlcache_handle_get_url(gwin->bw->current_content),
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -917,7 +910,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
}
else
{
- history_go(gwin->bw, gwin->bw->history,
+ history_go(gwin->bw->history,
(struct history_entry *)userdata, false);
}
break;
@@ -932,8 +925,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1003,8 +995,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1282,7 +1273,7 @@ static uint32 ami_popup_hook(struct Hook *hook,Object *item,APTR reserved)
if(GetAttr(PMIA_ID, item, &itemid))
{
- form_select_process_selection(gwin->shared->bw->current_content,gwin->shared->control,itemid);
+ form_select_process_selection(gwin->shared->control,itemid);
}
return itemid;
diff --git a/amiga/download.c b/amiga/download.c
index a65fad9..0f8ae4c 100644
--- a/amiga/download.c
+++ b/amiga/download.c
@@ -274,14 +274,14 @@ static void gui_download_window_done(struct gui_download_window *dw)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
nsurl_unref(url);
}
}
+ ami_try_quit(); /* In case the only window open was this download */
}
static void gui_download_window_error(struct gui_download_window *dw,
diff --git a/amiga/file.c b/amiga/file.c
index 9500b40..91d3755 100644
--- a/amiga/file.c
+++ b/amiga/file.c
@@ -22,6 +22,7 @@
#include "amiga/filetype.h"
#include "amiga/icon.h"
#include "amiga/iff_dr2d.h"
+#include "amiga/misc.h"
#include "amiga/save_pdf.h"
#include "amiga/theme.h"
@@ -103,8 +104,7 @@ void ami_file_open(struct gui_window_2 *gwin)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/gui.c b/amiga/gui.c
index e482f52..a949150 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -164,6 +164,7 @@ Class *urlStringClass;
BOOL locked_screen = FALSE;
BOOL screen_closed = FALSE;
ULONG screen_signal = -1;
+
struct MsgPort *applibport = NULL;
ULONG applibsig = 0;
BOOL refresh_search_ico = FALSE;
@@ -442,8 +443,6 @@ void ami_open_resources(void)
TAG_DONE))) die(messages_get("NoMemory"));
ami_file_req_init();
- ami_help_init(NULL);
- screen_signal = AllocSignal(-1); /* for screen closure notification */
}
static UWORD ami_system_colour_scrollbar_fgpen(struct DrawInfo *drinfo)
@@ -700,7 +699,6 @@ void gui_init(int argc, char** argv)
BPTR lock = 0;
ami_open_resources(); /* alloc ports/asl reqs, open libraries/devices */
- ami_print_init();
ami_clipboard_init();
ami_openurl_open();
@@ -766,14 +764,17 @@ void ami_openscreen(void)
}
}
+ screen_signal = AllocSignal(-1);
+ LOG(("Screen signal %d", screen_signal));
scrn = OpenScreenTags(NULL,
SA_DisplayID, id,
SA_Title, nsscreentitle,
SA_Type, PUBLICSCREEN,
SA_PubName, "NetSurf",
+ SA_PubSig, screen_signal,
+ SA_PubTask, FindTask(0),
SA_LikeWorkbench, TRUE,
SA_Compositing, compositing,
- SA_PubSig, screen_signal,
TAG_DONE);
if(scrn)
@@ -908,8 +909,7 @@ static void gui_init2(int argc, char** argv)
if(temp_homepage_url && notalreadyrunning) {
error = nsurl_create(temp_homepage_url, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -954,8 +954,7 @@ static void gui_init2(int argc, char** argv)
if (error == NSERROR_OK) {
if(!first)
{
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -965,8 +964,7 @@ static void gui_init2(int argc, char** argv)
}
else
{
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY,
url,
NULL,
bw,
@@ -1048,8 +1046,7 @@ static void gui_init2(int argc, char** argv)
if(!bw && (nsoption_bool(startup_no_window) == false)) {
error = nsurl_create(nsoption_charp(homepage_url), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -1068,12 +1065,12 @@ void ami_gui_history(struct gui_window_2 *gwin, bool back)
if(back == true)
{
if(browser_window_back_available(gwin->bw))
- history_back(gwin->bw, gwin->bw->history);
+ history_back(gwin->bw->history, false);
}
else
{
if(browser_window_forward_available(gwin->bw))
- history_forward(gwin->bw, gwin->bw->history);
+ history_forward(gwin->bw->history, false);
}
ami_update_buttons(gwin);
@@ -1483,121 +1480,60 @@ void ami_handle_msg(void)
gwin = node->objstruct;
- if(node->Type == AMINS_TVWINDOW)
- {
- if(ami_tree_event((struct treeview_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ if(node->Type == AMINS_TVWINDOW) {
+ if(ami_tree_event((struct treeview_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_FINDWINDOW)
- {
- if(ami_search_event())
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_FINDWINDOW) {
+ if(ami_search_event()) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_HISTORYWINDOW)
- {
- if(ami_history_event((struct history_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_HISTORYWINDOW) {
+ if(ami_history_event((struct history_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_PRINTWINDOW)
- {
- if(ami_print_event((struct ami_print_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_PRINTWINDOW) {
+ if(ami_print_event((struct ami_print_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_GUIOPTSWINDOW)
- {
- if(ami_gui_opts_event())
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit with conditions ;) */
- if(scrn) ami_try_quit();
- }
+ } else if(node->Type == AMINS_GUIOPTSWINDOW) {
+ if(ami_gui_opts_event()) {
+ /* last window possibly closed, so exit with conditions ;) */
+ if(scrn) ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_DLWINDOW)
- {
- if(ami_download_window_event((struct gui_download_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_DLWINDOW) {
+ if(ami_download_window_event((struct gui_download_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_LOGINWINDOW)
- {
- if(ami_401login_event((struct gui_login_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_LOGINWINDOW) {
+ if(ami_401login_event((struct gui_login_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
@@ -1823,6 +1759,7 @@ void ami_handle_msg(void)
switch(result & WMHI_GADGETMASK)
{
case GID_TABS:
+ if(gwin->objects[GID_TABS] == NULL) break;
GetAttrs(gwin->objects[GID_TABS],
CLICKTAB_NodeClosed, &tabnode, TAG_DONE);
if(tabnode)
@@ -1862,8 +1799,7 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1889,8 +1825,7 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1907,8 +1842,7 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1995,8 +1929,7 @@ void ami_handle_msg(void)
error = nsurl_create(nsoption_charp(homepage_url), &urlns);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY,
urlns,
NULL,
gwin->bw,
@@ -2017,9 +1950,8 @@ void ami_handle_msg(void)
error = nsurl_create(nsoption_charp(homepage_url), &urlns);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
urlns,
NULL,
gwin->bw,
@@ -2183,7 +2115,7 @@ void ami_handle_msg(void)
break;
case RAWKEY_HELP: // help
- ami_help_open(AMI_HELP_GUI);
+ ami_help_open(AMI_HELP_GUI, scrn);
break;
}
}
@@ -2391,8 +2323,7 @@ void ami_handle_appmsg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -2401,9 +2332,8 @@ void ami_handle_appmsg(void)
}
else
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
gwin->bw,
@@ -2432,8 +2362,7 @@ void ami_handle_appmsg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -2442,9 +2371,8 @@ void ami_handle_appmsg(void)
}
else
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
gwin->bw,
@@ -2483,8 +2411,7 @@ void ami_handle_applib(void)
error = nsurl_create(nsoption_charp(homepage_url), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2507,8 +2434,7 @@ void ami_handle_applib(void)
error = nsurl_create(tempurl, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2563,13 +2489,13 @@ void ami_get_msg(void)
ULONG signal;
struct TimerRequest *timermsg = NULL;
struct MsgPort *printmsgport = ami_print_get_msgport();
- ULONG printsig = 1L << printmsgport->mp_SigBit;
- ULONG signalmask = winsignal | appsig | schedulesig | rxsig | printsig | applibsig | ctrlcsig;
+ ULONG printsig = 0;
+ ULONG helpsignal = ami_help_signal();
+ if(printmsgport) printsig = 1L << printmsgport->mp_SigBit;
+ ULONG signalmask = winsignal | appsig | schedulesig | rxsig | printsig | applibsig | ctrlcsig | helpsignal;
+
+ signal = Wait(signalmask);
- signal = Wait(signalmask);
-/*
-printf("sig recvd %ld (%ld %ld %ld %ld %ld %ld)\n", signal, winsignal , appsig , schedulesig , rxsig , printsig , applibsig);
-*/
if(signal & winsignal)
ami_handle_msg();
@@ -2582,25 +2508,23 @@ printf("sig recvd %ld (%ld %ld %ld %ld %ld %ld)\n", signal, winsignal , appsig ,
if(signal & applibsig)
ami_handle_applib();
- if(signal & printsig)
- {
+ if(signal & printsig) {
while(GetMsg(printmsgport)); //ReplyMsg
ami_print_cont();
}
- if(signal & schedulesig)
- {
- if(timermsg = (struct TimerRequest *)GetMsg(msgport))
- {
+ if(signal & schedulesig) {
+ if(timermsg = (struct TimerRequest *)GetMsg(msgport)) {
ReplyMsg((struct Message *)timermsg);
schedule_run(FALSE);
}
}
+ if(signal & helpsignal)
+ ami_help_process();
+
if(signal & ctrlcsig)
- {
ami_quit_netsurf_delayed();
- }
}
static void ami_gui_fetch_callback(void *p)
@@ -2694,61 +2618,51 @@ void ami_switch_tab(struct gui_window_2 *gwin,bool redraw)
gwin->bw->window->scrollx, gwin->bw->window->scrolly);
gwin->redraw_scroll = false;
- browser_window_refresh_url_bar(gwin->bw,
- hlcache_handle_get_url(gwin->bw->current_content), gwin->bw->frag_id);
+ browser_window_refresh_url_bar(gwin->bw);
ami_gui_update_hotlist_button(gwin);
}
}
-void ami_try_quit(void)
-{
- if(nsoption_bool(close_no_quit) == false)
- {
- netsurf_quit = true;
- return;
- }
- else
- {
- if(locked_screen == FALSE)
- if(CloseScreen(scrn)) scrn = NULL;
- }
-}
-
void ami_quit_netsurf(void)
{
struct nsObject *node;
struct nsObject *nnode;
struct gui_window_2 *gwin;
- if(!IsMinListEmpty(window_list))
- {
+ if(!IsMinListEmpty(window_list)) {
node = (struct nsObject *)GetHead((struct List *)window_list);
- do
- {
+ do {
nnode=(struct nsObject *)GetSucc((struct Node *)node);
gwin = node->objstruct;
- switch(node->Type)
- {
+ switch(node->Type) {
case AMINS_TVWINDOW:
ami_tree_close((struct treeview_window *)gwin);
break;
case AMINS_WINDOW:
+ /* This also closes windows that are attached to the
+ * gui_window, such as local history and find. */
ShowWindow(gwin->win, WINDOW_BACKMOST);
ami_close_all_tabs(gwin);
break;
- }
+ case AMINS_GUIOPTSWINDOW:
+ ami_gui_opts_close();
+ break;
+
+ case AMINS_DLWINDOW:
+ ami_download_window_abort((struct gui_download_window *)gwin);
+ break;
+ }
} while(node = nnode);
win_destroyed = true;
}
- if(IsMinListEmpty(window_list))
- {
+ if(IsMinListEmpty(window_list)) {
/* last window closed, so exit */
netsurf_quit = true;
}
@@ -2780,22 +2694,50 @@ void ami_quit_netsurf_delayed(void)
}
}
-void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
+void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen, BOOL donotwait)
{
- ULONG scrnsig = 1 << screen_signal;
-
if(scrn == NULL) return;
- if(CloseScreen(scrn)) return;
+ if(CloseScreen(scrn) == TRUE) {
+ if(locked_screen == FALSE) {
+ FreeSignal(screen_signal);
+ screen_signal = -1;
+ scrn = NULL;
+ }
+ return;
+ }
if(locked_screen == TRUE) return;
+ if(donotwait == TRUE) return;
/* If this is our own screen, wait for visitor windows to close */
- LOG(("Waiting for visitor windows to close... (signal)"));
- Wait(scrnsig);
+ if(screen_signal != -1) {
+ ULONG scrnsig = 1 << screen_signal;
+ LOG(("Waiting for visitor windows to close... (signal)"));
+ Wait(scrnsig);
+ }
while (CloseScreen(scrn) == FALSE) {
- LOG(("Still waiting for visitor windows to close... (polling)"));
+ LOG(("Waiting for visitor windows to close... (polling)"));
Delay(50);
}
+
+ FreeSignal(screen_signal);
+ screen_signal = -1;
+ scrn = NULL;
+}
+
+void ami_try_quit(void)
+{
+ if(!IsMinListEmpty(window_list)) return;
+
+ if(nsoption_bool(close_no_quit) == false)
+ {
+ netsurf_quit = true;
+ return;
+ }
+ else
+ {
+ ami_gui_close_screen(scrn, locked_screen, TRUE);
+ }
}
static void gui_quit(void)
@@ -2818,11 +2760,11 @@ static void gui_quit(void)
ami_free_layers(&browserglob);
ami_close_fonts();
+ ami_help_free();
LOG(("Closing screen"));
- ami_gui_close_screen(scrn, locked_screen);
+ ami_gui_close_screen(scrn, locked_screen, FALSE);
FreeVec(nsscreentitle);
- FreeSignal(screen_signal);
LOG(("Freeing menu items"));
ami_context_menu_free();
@@ -2833,16 +2775,12 @@ static void gui_quit(void)
LOG(("Freeing clipboard"));
ami_clipboard_free();
- ami_print_free();
-
FreeSysObject(ASOT_PORT,appport);
FreeSysObject(ASOT_PORT,sport);
- ami_help_free();
ami_file_req_free();
-
ami_openurl_close();
- FreeStringClass(urlStringClass);
+ FreeStringClass(urlStringClass);
if(IApplication) DropInterface((struct Interface *)IApplication);
if(ApplicationBase) CloseLibrary(ApplicationBase);
@@ -3151,6 +3089,11 @@ void ami_toggletabbar(struct gui_window_2 *gwin, bool show)
IDoMethod(gwin->objects[GID_TABLAYOUT], LM_REMOVECHILD,
gwin->win, gwin->objects[GID_ADDTAB]);
+
+ /* NB: We are NULLing these, but not disposing them as
+ * that causes an Intuition deadlock (TODO) */
+ gwin->objects[GID_TABS] = NULL;
+ gwin->objects[GID_ADDTAB] = NULL;
}
FlushLayoutDomainCache((struct Gadget *)gwin->objects[GID_MAIN]);
@@ -3199,9 +3142,8 @@ nserror ami_gui_new_blank_tab(struct gui_window_2 *gwin)
error = nsurl_create(nsoption_charp(homepage_url), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
gwin->bw,
@@ -3212,17 +3154,14 @@ nserror ami_gui_new_blank_tab(struct gui_window_2 *gwin)
warn_user(messages_get_errorcode(error), 0);
return error;
}
-
- history_destroy(bw->history);
- bw->history = history_create();
return NSERROR_OK;
}
static struct gui_window *
gui_window_create(struct browser_window *bw,
- struct browser_window *clone,
- bool new_tab)
+ struct gui_window *existing,
+ gui_window_create_flags flags)
{
struct gui_window *g = NULL;
bool closegadg=TRUE;
@@ -3242,19 +3181,16 @@ gui_window_create(struct browser_window *bw,
if (!scrn) ami_openscreenfirst();
- if (nsoption_bool(kiosk_mode)) new_tab = false;
+ if (nsoption_bool(kiosk_mode)) flags &= ~GW_CREATE_TAB;
if (nsoption_bool(resize_with_contents)) idcmp_sizeverify = 0;
bw->scale = 1.0;
- if(clone)
+ if(existing)
{
- if(clone->window)
- {
- curx=clone->window->shared->win->LeftEdge;
- cury=clone->window->shared->win->TopEdge;
- curw=clone->window->shared->win->Width;
- curh=clone->window->shared->win->Height;
- }
+ curx=existing->shared->win->LeftEdge;
+ cury=existing->shared->win->TopEdge;
+ curw=existing->shared->win->Width;
+ curh=existing->shared->win->Height;
}
g = AllocVecTags(sizeof(struct gui_window), AVT_ClearWithValue, 0, TAG_DONE);
@@ -3268,9 +3204,9 @@ gui_window_create(struct browser_window *bw,
NewList(&g->dllist);
g->deferred_rects = NewObjList();
- if(new_tab && clone)
+ if((flags & GW_CREATE_TAB) && existing)
{
- g->shared = clone->window->shared;
+ g->shared = existing->shared;
g->tab = g->shared->next_tab;
if((g->shared->tabs == 1) && (nsoption_bool(tab_always_show) == false))
@@ -3293,12 +3229,12 @@ gui_window_create(struct browser_window *bw,
}
else
{
- struct Node *insert_after = clone->window->tab_node;
+ struct Node *insert_after = existing->tab_node;
- if(clone->window->last_new_tab)
- insert_after = clone->window->last_new_tab;
+ if(existing->last_new_tab)
+ insert_after = existing->last_new_tab;
Insert(&g->shared->tab_list, g->tab_node, insert_after);
- clone->window->last_new_tab = g->tab_node;
+ existing->last_new_tab = g->tab_node;
}
RefreshSetGadgetAttrs((struct Gadget *)g->shared->objects[GID_TABS],
@@ -4964,8 +4900,7 @@ void ami_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg
GetSpeedButtonNodeAttrs(node, SBNA_UserData, (ULONG *)&url, TAG_DONE);
if(gwin->key_state & BROWSER_MOUSE_MOD_2) {
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_TAB,
+ browser_window_create(BW_CREATE_TAB,
url,
NULL,
gwin->bw,
@@ -4974,8 +4909,7 @@ void ami_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/gui.h b/amiga/gui.h
index 9470660..ad18750 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -153,6 +153,7 @@ struct gui_window
void ami_get_msg(void);
void ami_close_all_tabs(struct gui_window_2 *gwin);
+void ami_try_quit(void);
void ami_quit_netsurf(void);
void ami_schedule_redraw(struct gui_window_2 *gwin, bool full_redraw);
STRPTR ami_locale_langs(void);
diff --git a/amiga/gui_options.c b/amiga/gui_options.c
index a5568da..d3f7130 100755
--- a/amiga/gui_options.c
+++ b/amiga/gui_options.c
@@ -1930,10 +1930,10 @@ BOOL ami_gui_opts_event(void)
case WMHI_GADGETHELP:
if((result & WMHI_GADGETMASK) == 0) {
/* Pointer not over our window */
- ami_help_open(AMI_HELP_MAIN);
+ ami_help_open(AMI_HELP_MAIN, scrn);
} else {
/* TODO: Make this sensitive to the tab the user is currently on */
- ami_help_open(AMI_HELP_PREFS);
+ ami_help_open(AMI_HELP_PREFS, scrn);
}
break;
diff --git a/amiga/gui_options.h b/amiga/gui_options.h
index 0fd0715..2b57769 100755
--- a/amiga/gui_options.h
+++ b/amiga/gui_options.h
@@ -20,6 +20,7 @@
#define AMIGA_GUI_OPTIONS_H
void ami_gui_opts_open(void);
BOOL ami_gui_opts_event(void);
+void ami_gui_opts_close(void);
char *current_user_options;
#endif
diff --git a/amiga/help.c b/amiga/help.c
index 214e59d..f094c70 100755
--- a/amiga/help.c
+++ b/amiga/help.c
@@ -45,8 +45,9 @@ void ami_help_init(struct Screen *screen)
TAG_DONE);
}
-void ami_help_open(ULONG node)
+void ami_help_open(ULONG node, struct Screen *screen)
{
+ if(AmigaGuideObject == NULL) ami_help_init(screen);
SetAttrs(AmigaGuideObject, AMIGAGUIDE_ContextID, node, TAG_DONE);
IDoMethod(AmigaGuideObject, AGM_OPEN, NULL);
}
@@ -62,5 +63,21 @@ void ami_help_free(void)
void ami_help_new_screen(struct Screen *screen)
{
+ if(AmigaGuideObject == NULL) return;
SetAttrs(AmigaGuideObject, AMIGAGUIDE_Screen, screen, TAG_DONE);
}
+
+ULONG ami_help_signal(void)
+{
+ ULONG ag_sig = 0;
+ if(AmigaGuideObject)
+ GetAttr(AMIGAGUIDE_Signal, AmigaGuideObject, &ag_sig);
+ return ag_sig;
+}
+
+void ami_help_process(void)
+{
+ ULONG ret = IDoMethod(AmigaGuideObject, AGM_PROCESS, NULL);
+ //printf("ret = %d\n", ret); // should be NULL if closed
+}
+
diff --git a/amiga/help.h b/amiga/help.h
index 4baa2a0..e405edd 100755
--- a/amiga/help.h
+++ b/amiga/help.h
@@ -29,8 +29,10 @@ enum {
struct Screen;
-void ami_help_init(struct Screen *screen);
-void ami_help_open(ULONG node);
+void ami_help_open(ULONG node, struct Screen *screen);
void ami_help_free(void);
void ami_help_new_screen(struct Screen *screen);
+ULONG ami_help_signal(void);
+void ami_help_process(void);
#endif
+
diff --git a/amiga/history_local.c b/amiga/history_local.c
index b5aba38..3eda887 100755
--- a/amiga/history_local.c
+++ b/amiga/history_local.c
@@ -210,13 +210,13 @@ bool ami_history_click(struct history_window *hw,uint16 code)
switch(code)
{
case SELECTUP:
- history_click(hw->bw,history_current,x,y,false);
+ history_click(history_current,x,y,false);
ami_history_redraw(hw);
ami_schedule_redraw(hw->bw->window->shared, true);
break;
case MIDDLEUP:
- history_click(hw->bw,history_current,x,y,true);
+ history_click(history_current,x,y,true);
ami_history_redraw(hw);
break;
diff --git a/amiga/menu.c b/amiga/menu.c
index 26f5c2b..014f21c 100644
--- a/amiga/menu.c
+++ b/amiga/menu.c
@@ -698,8 +698,7 @@ static void ami_menu_item_project_newwin(struct Hook *hook, APTR window, struct
error = nsurl_create(nsoption_charp(homepage_url), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -811,8 +810,7 @@ static void ami_menu_item_project_about(struct Hook *hook, APTR window, struct I
if(url) {
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -1036,8 +1034,7 @@ static void ami_menu_item_hotlist_entries(struct Hook *hook, APTR window, struct
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/print.c b/amiga/print.c
index 4bfce13..93dde35 100644
--- a/amiga/print.c
+++ b/amiga/print.c
@@ -378,7 +378,8 @@ void ami_print(struct hlcache_handle *c, int copies)
double height, print_height;
float scale = nsoption_int(print_scale) / 100.0;
- if(!ami_print_info.msgport) return;
+ if(ami_print_info.msgport == NULL)
+ ami_print_init();
if(!(ami_print_info.PReq =
(struct IODRPTagsReq *)AllocSysObjectTags(ASOT_IOREQUEST,
@@ -450,7 +451,8 @@ struct MsgPort *ami_print_init(void)
void ami_print_free(void)
{
- FreeSysObject(ASOT_PORT,ami_print_info.msgport);
+ FreeSysObject(ASOT_PORT, ami_print_info.msgport);
+ ami_print_info.msgport = NULL;
}
struct MsgPort *ami_print_get_msgport(void)
@@ -491,6 +493,7 @@ void ami_print_end(void)
glob = &browserglob;
ami_print_close_device();
+ ami_print_free();
}
void ami_print_close_device(void)
diff --git a/amiga/tree.c b/amiga/tree.c
index 42eae4f..8cffdb2 100644
--- a/amiga/tree.c
+++ b/amiga/tree.c
@@ -322,8 +322,7 @@ void ami_tree_drag_end(struct treeview_window *twin, int x, int y)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/atari/about.c b/atari/about.c
index f09dfb3..6e98058 100644
--- a/atari/about.c
+++ b/atari/about.c
@@ -170,8 +170,7 @@ void atari_about_show(void)
if (goto_url != NULL) {
nserr = nsurl_create(goto_url, &url);
if (nserr == NSERROR_OK) {
- nserr = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ nserr = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/atari/ctxmenu.c b/atari/ctxmenu.c
index ae918c6..aeed475 100644
--- a/atari/ctxmenu.c
+++ b/atari/ctxmenu.c
@@ -238,8 +238,7 @@ void context_popup(struct gui_window * gw, short x, short y)
gw->browser->bw,
hlcache_handle_get_url(ctx->ccdata.object),
hlcache_handle_get_url(gw->browser->bw->current_content),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL
@@ -258,8 +257,7 @@ void context_popup(struct gui_window * gw, short x, short y)
gw->browser->bw,
url,
hlcache_handle_get_url(gw->browser->bw->current_content),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL
@@ -293,11 +291,11 @@ void context_popup(struct gui_window * gw, short x, short y)
nsurl *url;
nserror error;
- error = nsurl_create(ctx->ccdata.link_url, &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
- url,
+ error = nsurl_create(ctx->ccdata.link_url, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(
+ BW_CREATE_HISTORY | BW_CREATE_CLONE,
+ url,
hlcache_handle_get_url(gw->browser->bw->current_content),
gw->browser->bw,
NULL
diff --git a/atari/deskmenu.c b/atari/deskmenu.c
index a119408..6a8376d 100644
--- a/atari/deskmenu.c
+++ b/atari/deskmenu.c
@@ -170,8 +170,7 @@ static void __CDECL menu_about(short item, short title, void *data)
error = nsurl_create(buf, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -202,8 +201,7 @@ static void __CDECL menu_new_win(short item, short title, void *data)
/* create an initial browser window */
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -224,8 +222,7 @@ static void __CDECL menu_open_url(short item, short title, void *data)
gw = input_window;
if( gw == NULL ) {
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ browser_window_create(BW_CREATE_HISTORY,
NULL,
NULL,
NULL,
@@ -256,8 +253,7 @@ static void __CDECL menu_open_file(short item, short title, void *data)
error = nsurl_create(urltxt, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/atari/gui.c b/atari/gui.c
index afd3be5..fe927e2 100644
--- a/atari/gui.c
+++ b/atari/gui.c
@@ -211,11 +211,11 @@ static void gui_poll(bool active)
static struct gui_window *
gui_window_create(struct browser_window *bw,
- struct browser_window *clone,
- bool new_tab) {
+ struct gui_window *existing,
+ gui_window_create_flags flags) {
struct gui_window *gw=NULL;
- LOG(( "gw: %p, BW: %p, clone %p, tab: %d\n" , gw, bw, clone,
- (int)new_tab
+ LOG(( "gw: %p, BW: %p, existing %p, flags: %d\n" , gw, bw, existing,
+ (int)flags
));
gw = calloc(1, sizeof(struct gui_window));
@@ -223,7 +223,7 @@ gui_window_create(struct browser_window *bw,
return NULL;
LOG(("new window: %p, bw: %p\n", gw, bw));
- window_create(gw, bw, clone, WIDGET_STATUSBAR|WIDGET_TOOLBAR|WIDGET_RESIZE\
+ window_create(gw, bw, existing, WIDGET_STATUSBAR|WIDGET_TOOLBAR|WIDGET_RESIZE\
|WIDGET_SCROLL);
if (gw->root->win) {
GRECT pos = {
@@ -1172,8 +1172,7 @@ int main(int argc, char** argv)
/* create an initial browser window */
ret = nsurl_create(addr, &url);
if (ret == NSERROR_OK) {
- ret = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ ret = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/atari/rootwin.c b/atari/rootwin.c
index 8942263..5fc2905 100755
--- a/atari/rootwin.c
+++ b/atari/rootwin.c
@@ -230,7 +230,7 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
int window_create(struct gui_window * gw,
struct browser_window * bw,
- struct browser_window * clone,
+ struct gui_window * existing,
unsigned long inflags)
{
int err = 0;
@@ -294,8 +294,8 @@ int window_create(struct gui_window * gw,
assert(gw->browser);
gw->browser->bw = bw;
- if(clone)
- gw->browser->bw->scale = clone->scale;
+ if(existing)
+ gw->browser->bw->scale = existing->browser->bw->scale;
else
gw->browser->bw->scale = 1;
@@ -1537,7 +1537,7 @@ static void on_file_dropped(ROOTWIN *rootwin, short msg[8])
if ((tmp_url != NULL)
&& nsurl_create(tmp_url, &ns_url) == NSERROR_OK) {
browser_window_navigate(gw->browser->bw, ns_url, NULL,
- BROWSER_WINDOW_HISTORY | BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL, NULL, NULL);
nsurl_unref(ns_url);
}
diff --git a/atari/rootwin.h b/atari/rootwin.h
index d2cd04a..a5b22c9 100755
--- a/atari/rootwin.h
+++ b/atari/rootwin.h
@@ -46,7 +46,7 @@ enum browser_area_e {
/* Creates an normal Browser window with [toolbar], [statusbar] */
int window_create(struct gui_window * gw,
struct browser_window * bw,
- struct browser_window * clone,
+ struct gui_window * existing,
unsigned long flags );
/* Destroys WinDom part of gui_window */
int window_destroy(ROOTWIN *rootwin);
diff --git a/atari/toolbar.c b/atari/toolbar.c
index f40c07a..aa6aa91 100644
--- a/atari/toolbar.c
+++ b/atari/toolbar.c
@@ -715,7 +715,7 @@ bool toolbar_key_input(struct s_toolbar *tb, short nkc)
warn_user("NoMemory", 0);
} else {
browser_window_navigate(gw->browser->bw, url, NULL,
- BROWSER_WINDOW_HISTORY | BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL, NULL, NULL);
nsurl_unref(url);
}
@@ -948,7 +948,7 @@ void toolbar_back_click(struct s_toolbar *tb)
assert(bw != NULL);
if( history_back_available(bw->history) )
- history_back(bw, bw->history);
+ history_back(bw->history, false);
}
void toolbar_reload_click(struct s_toolbar *tb)
@@ -975,7 +975,7 @@ void toolbar_forward_click(struct s_toolbar *tb)
assert(bw != NULL);
if (history_forward_available(bw->history))
- history_forward(bw, bw->history);
+ history_forward(bw->history, false);
}
void toolbar_home_click(struct s_toolbar *tb)
@@ -1001,8 +1001,7 @@ void toolbar_home_click(struct s_toolbar *tb)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/beos/gui.cpp b/beos/gui.cpp
index c2eadaa..b40e6bd 100644
--- a/beos/gui.cpp
+++ b/beos/gui.cpp
@@ -645,7 +645,7 @@ static void gui_init(int argc, char** argv)
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
error = browser_window_create((browser_window_nav_flags)
- (BROWSER_WINDOW_VERIFIABLE | BROWSER_WINDOW_HISTORY),
+ BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/beos/scaffolding.cpp b/beos/scaffolding.cpp
index c673f19..628debc 100644
--- a/beos/scaffolding.cpp
+++ b/beos/scaffolding.cpp
@@ -888,10 +888,10 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
if (/*message->WasDropped() &&*/ i == 0) {
browser_window_navigate(bw, nsurl, NULL,
(browser_window_nav_flags)
- (BROWSER_WINDOW_HISTORY | BROWSER_WINDOW_VERIFIABLE),
+ (BW_NAVIGATE_HISTORY),
NULL, NULL, NULL);
} else {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE,
nsurl,
NULL,
bw,
@@ -915,7 +915,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
for (i = 1; message->FindString("argv", i, &urltxt) >= B_OK; i++) {
error = nsurl_create(urltxt.String(), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE,
url,
NULL,
bw,
@@ -949,8 +949,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
nsurl,
NULL,
- (browser_window_nav_flags)(BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY | BW_NAVIGATE_UNVERIFIABLE),
NULL,
NULL,
NULL);
@@ -976,7 +975,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
case 'back':
if (!history_back_available(bw->history))
break;
- history_back(bw, bw->history);
+ history_back(bw->history, false);
nsbeos_window_update_back_forward(scaffold);
break;
case B_NETPOSITIVE_FORWARD:
@@ -984,7 +983,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
case 'forw':
if (!history_forward_available(bw->history))
break;
- history_forward(bw, bw->history);
+ history_forward(bw->history, false);
nsbeos_window_update_back_forward(scaffold);
break;
case B_NETPOSITIVE_STOP:
@@ -1020,8 +1019,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
url,
NULL,
- (browser_window_nav_flags)(BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
NULL,
NULL,
NULL);
@@ -1049,8 +1047,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
url,
NULL,
- (browser_window_nav_flags)(BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
NULL,
NULL,
NULL);
@@ -1133,7 +1130,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
error = nsurl_create(text.String(), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE,
url,
NULL,
bw,
@@ -1269,7 +1266,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
if (nserr == NSERROR_OK) {
nserr = browser_window_navigate(bw,
url, NULL,
- (browser_window_nav_flags)(BROWSER_WINDOW_HISTORY | BROWSER_WINDOW_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
NULL, NULL, NULL);
nsurl_unref(url);
}
diff --git a/beos/window.cpp b/beos/window.cpp
index 2302793..8975c18 100644
--- a/beos/window.cpp
+++ b/beos/window.cpp
@@ -337,8 +337,8 @@ float nsbeos_get_scale_for_gui(struct gui_window *g)
/* Create a gui_window */
static struct gui_window *gui_window_create(struct browser_window *bw,
- struct browser_window *clone,
- bool new_tab)
+ struct gui_window *existing,
+ gui_window_create_flags flags)
{
struct gui_window *g; /**< what we're creating to return */
@@ -353,8 +353,8 @@ static struct gui_window *gui_window_create(struct browser_window *bw,
g->bw = bw;
g->mouse.state = 0;
g->current_pointer = GUI_POINTER_DEFAULT;
- if (clone != NULL)
- bw->scale = clone->scale;
+ if (existing != NULL)
+ bw->scale = existing->bw->scale;
else
bw->scale = (float) nsoption_int(scale) / 100;
diff --git a/cocoa/BookmarksController.m b/cocoa/BookmarksController.m
index 7d7173f..64c2ef3 100644
--- a/cocoa/BookmarksController.m
+++ b/cocoa/BookmarksController.m
@@ -142,14 +142,12 @@ static const char *cocoa_hotlist_path( void )
error = browser_window_navigate([tab browser],
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
} else {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/cocoa/BrowserView.m b/cocoa/BrowserView.m
index 2421412..092c1bf 100644
--- a/cocoa/BrowserView.m
+++ b/cocoa/BrowserView.m
@@ -581,9 +581,9 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
error = nsurl_create([[sender representedObject] UTF8String], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB |
+ BW_CREATE_CLONE,
url,
NULL,
browser,
@@ -602,8 +602,8 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
error = nsurl_create([[sender representedObject] UTF8String], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
url,
NULL,
browser,
@@ -623,8 +623,7 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
browser_window_navigate(browser,
url,
NULL,
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -688,8 +687,7 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
browser_window_navigate(browser,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
diff --git a/cocoa/BrowserViewController.m b/cocoa/BrowserViewController.m
index 5cc3d4c..4870446 100644
--- a/cocoa/BrowserViewController.m
+++ b/cocoa/BrowserViewController.m
@@ -79,8 +79,7 @@
browser_window_navigate(browser,
urlns,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -118,7 +117,7 @@
- (IBAction) goBack: (id) sender;
{
if (browser && history_back_available( browser->history )) {
- history_back(browser, browser->history);
+ history_back(browser->history, false);
[self updateBackForward];
}
}
@@ -126,7 +125,7 @@
- (IBAction) goForward: (id) sender;
{
if (browser && history_forward_available( browser->history )) {
- history_forward(browser, browser->history);
+ history_forward(browser->history, false);
[self updateBackForward];
}
}
@@ -141,8 +140,7 @@
error = browser_window_navigate(browser,
urlns,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -316,7 +314,7 @@ static bool history_add_menu_item_cb( const struct history *history, int x0, int
- (IBAction) historyItemSelected: (id) sender;
{
struct history_entry *entry = [[sender representedObject] pointerValue];
- history_go( browser, browser->history, entry, false );
+ history_go( browser->history, entry, false );
[self updateBackForward];
}
diff --git a/cocoa/BrowserWindowController.m b/cocoa/BrowserWindowController.m
index 36b7164..1d70778 100644
--- a/cocoa/BrowserWindowController.m
+++ b/cocoa/BrowserWindowController.m
@@ -161,9 +161,8 @@
error = nsurl_create(NETSURF_HOMEPAGE, &url);
}
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
[activeBrowser browser],
diff --git a/cocoa/FormSelectMenu.m b/cocoa/FormSelectMenu.m
index 3aaeae5..d1548b2 100644
--- a/cocoa/FormSelectMenu.m
+++ b/cocoa/FormSelectMenu.m
@@ -19,7 +19,7 @@
#import "cocoa/FormSelectMenu.h"
#import "cocoa/coordinates.h"
-#import "desktop/browser_private.h"
+#import "desktop/browser.h"
#import "render/form.h"
@interface FormSelectMenu ()
@@ -87,7 +87,7 @@
- (void) itemSelected: (id) sender;
{
- form_select_process_selection( browser->current_content, control, [sender tag] );
+ form_select_process_selection( control, [sender tag] );
}
- (void) menuDidClose: (NSMenu *) sender;
diff --git a/cocoa/HistoryView.m b/cocoa/HistoryView.m
index 45f7fac..c718165 100644
--- a/cocoa/HistoryView.m
+++ b/cocoa/HistoryView.m
@@ -72,7 +72,7 @@
{
const NSPoint location = [self convertPoint: [theEvent locationInWindow] fromView: nil];
const bool newWindow = [theEvent modifierFlags] & NSCommandKeyMask;
- if (history_click( browser, browser->history,
+ if (history_click( browser->history,
cocoa_pt_to_px( location.x ), cocoa_pt_to_px( location.y ),
newWindow )) {
[browserView setHistoryVisible: NO];
diff --git a/cocoa/NetSurfAppDelegate.m b/cocoa/NetSurfAppDelegate.m
index c326c9d..e173535 100644
--- a/cocoa/NetSurfAppDelegate.m
+++ b/cocoa/NetSurfAppDelegate.m
@@ -51,8 +51,7 @@
}
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -75,8 +74,7 @@
for (NSURL *url in [openPanel URLs]) {
error = nsurl_create([[url absoluteString] UTF8String], &u);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
u,
NULL,
NULL,
@@ -98,8 +96,7 @@
error = nsurl_create([urlAsString UTF8String], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -182,8 +179,7 @@
error = nsurl_create([[urltxt absoluteString] UTF8String], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/cocoa/NetsurfApp.m b/cocoa/NetsurfApp.m
index 5c35911..8842422 100644
--- a/cocoa/NetsurfApp.m
+++ b/cocoa/NetsurfApp.m
@@ -231,8 +231,7 @@ int main( int argc, char **argv )
error = nsurl_create(argv[i], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/cocoa/gui.m b/cocoa/gui.m
index 416849d..eba3301 100644
--- a/cocoa/gui.m
+++ b/cocoa/gui.m
@@ -64,21 +64,21 @@ static void gui_poll(bool active)
struct browser_window;
static struct gui_window *gui_window_create(struct browser_window *bw,
- struct browser_window *clone,
- bool new_tab)
+ struct gui_window *existing,
+ gui_window_create_flags flags)
{
BrowserWindowController *window = nil;
- if (clone != NULL) {
- bw->scale = clone->scale;
- window = [(BrowserViewController *)(clone->window) windowController];
+ if (existing != NULL) {
+ bw->scale = (float) nsoption_int(scale) / 100;
+ window = [(BrowserViewController *)(existing) windowController];
} else {
bw->scale = (float) nsoption_int(scale) / 100;
}
BrowserViewController *result = [[BrowserViewController alloc] initWithBrowser: bw];
- if (!new_tab || nil == window) {
+ if (!(flags & GW_CREATE_TAB) || nil == window) {
window = [[[BrowserWindowController alloc] init] autorelease];
[[window window] makeKeyAndOrderFront: nil];
}
diff --git a/content/llcache.c b/content/llcache.c
index f658380..49a8ccd 100644
--- a/content/llcache.c
+++ b/content/llcache.c
@@ -38,7 +38,8 @@
#include "content/urldb.h"
/** Define to enable tracing of llcache operations. */
-#undef LLCACHE_TRACE
+//#undef LLCACHE_TRACE
+#define LLCACHE_TRACE 1
/** State of a low-level cache object fetch */
typedef enum {
@@ -102,6 +103,7 @@ typedef enum {
typedef struct {
time_t req_time; /**< Time of request */
time_t res_time; /**< Time of response */
+ time_t fin_time; /**< Time of request completion */
time_t date; /**< Date: response header */
time_t expires; /**< Expires: response header */
#define INVALID_AGE -1
@@ -139,7 +141,7 @@ struct llcache_object {
size_t source_len; /**< Byte length of source data */
size_t source_alloc; /**< Allocated size of source buffer */
- llcache_store_state store_state;
+ llcache_store_state store_state; /**< where the data for the object is stored */
llcache_object_user *users; /**< List of users */
@@ -155,6 +157,13 @@ struct llcache_object {
llcache_header *headers; /**< Fetch headers */
size_t num_headers; /**< Number of fetch headers */
+
+ /* Instrumentation. These elemnts are strictly for information
+ * to improve the cache performance and to provide performace
+ * metrics. The values are non-authorative and must not be used to
+ * determine object lifetime etc.
+ */
+ time_t last_used; /**< time the last user was removed from the object */
};
struct llcache_s {
@@ -273,6 +282,11 @@ static nserror llcache_object_remove_user(llcache_object *object,
user->next = user->prev = NULL;
+ /* record the time the last user was removed from the object */
+ if (object->users == NULL) {
+ object->last_used = time(NULL);
+ }
+
#ifdef LLCACHE_TRACE
LOG(("Removing user %p from %p", user, object));
#endif
@@ -712,6 +726,7 @@ static nserror llcache_object_refetch(llcache_object *object)
/* Reset cache control data */
llcache_invalidate_cache_control_data(object);
object->cache.req_time = time(NULL);
+ object->cache.fin_time = object->cache.req_time;
/* Reset fetch state */
object->fetch.state = LLCACHE_FETCH_INIT;
@@ -968,6 +983,7 @@ static nserror llcache_object_clone_cache_data(llcache_object *source,
destination->cache.req_time = source->cache.req_time;
destination->cache.res_time = source->cache.res_time;
+ destination->cache.fin_time = source->cache.fin_time;
if (source->cache.date != 0)
destination->cache.date = source->cache.date;
@@ -991,6 +1007,27 @@ static nserror llcache_object_clone_cache_data(llcache_object *source,
}
/**
+ * Remove a low-level cache object from a cache list
+ *
+ * \param object Object to remove
+ * \param list List to remove from
+ * \return NSERROR_OK
+ */
+static nserror llcache_object_remove_from_list(llcache_object *object,
+ llcache_object **list)
+{
+ if (object == *list)
+ *list = object->next;
+ else
+ object->prev->next = object->next;
+
+ if (object->next != NULL)
+ object->next->prev = object->prev;
+
+ return NSERROR_OK;
+}
+
+/**
* Retrieve a potentially cached object
*
* \param url URL of object to retrieve
@@ -1001,9 +1038,13 @@ static nserror llcache_object_clone_cache_data(llcache_object *source,
* \param result Pointer to location to recieve retrieved object
* \return NSERROR_OK on success, appropriate error otherwise
*/
-static nserror llcache_object_retrieve_from_cache(nsurl *url, uint32_t flags,
- nsurl *referer, const llcache_post_data *post,
- uint32_t redirect_count, llcache_object **result)
+static nserror
+llcache_object_retrieve_from_cache(nsurl *url,
+ uint32_t flags,
+ nsurl *referer,
+ const llcache_post_data *post,
+ uint32_t redirect_count,
+ llcache_object **result)
{
nserror error;
llcache_object *obj, *newest = NULL;
@@ -1034,6 +1075,45 @@ static nserror llcache_object_retrieve_from_cache(nsurl *url, uint32_t flags,
/* The client needs to catch up with the object's state.
* This will occur the next time that llcache_poll is called.
*/
+
+ /* the objects source data may be in the persiatant store */
+ if ((obj->store_state == LLCACHE_STORE_DISC) &&
+ (obj->source_data == NULL)) {
+ int remaining;
+ error = guit->llcache->retrieve(obj->url,
+ &remaining,
+ &obj->source_data,
+ &obj->source_len);
+ if (error != NSERROR_OK) {
+ /* persistant store failed, destroy
+ * cache object and re-retch
+ */
+#ifdef LLCACHE_TRACE
+ LOG(("Persistant retrival failed for %p", obj));
+#endif
+
+ llcache_object_remove_from_list(obj,
+ &llcache->cached_objects);
+ llcache_object_destroy(obj);
+
+ /* Create new object */
+ error = llcache_object_new(url, &obj);
+ if (error != NSERROR_OK)
+ return error;
+
+ /* Attempt to kick-off fetch */
+ error = llcache_object_fetch(obj, flags,
+ referer, post,
+ redirect_count);
+ if (error != NSERROR_OK) {
+ llcache_object_destroy(obj);
+ return error;
+ }
+
+ /* Add new object to cache */
+ llcache_object_add_to_list(obj, &llcache->cached_objects);
+ }
+ }
} else if (newest != NULL) {
/* Found a candidate object but it needs freshness validation */
@@ -1642,9 +1722,9 @@ static nserror llcache_fetch_ssl_error(llcache_object *object)
/**
- * possibly push objects to disc cache.
+ * possibly push objects data to persiatant storage.
*/
-static void llcache_discwrite(void *p)
+static void llcache_persist(void *p)
{
llcache_object *object, *next;
int remaining_lifetime;
@@ -1656,7 +1736,7 @@ static void llcache_discwrite(void *p)
remaining_lifetime = llcache_object_rfc2616_remaining_lifetime(&object->cache);
- /* cachable objects with no pending fetches, not
+ /* cacehable objects with no pending fetches, not
* already on disc and with sufficient lifetime to
* make disc cache worthwile
*/
@@ -1688,7 +1768,7 @@ static void llcache_discwrite(void *p)
if (object != NULL) {
/* schedule completion of cache write */
- schedule(100, llcache_discwrite, NULL);
+ schedule(100, llcache_persist, NULL);
}
}
@@ -1794,7 +1874,10 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
llcache_object_cache_update(object);
- schedule(500, llcache_discwrite, NULL);
+ /* record when the fetch finished */
+ object->cache.fin_time = time(NULL);
+
+ schedule(500, llcache_persist, NULL);
}
break;
@@ -1904,26 +1987,6 @@ static llcache_object_user *llcache_object_find_user(const llcache_handle *handl
return user;
}
-/**
- * Remove a low-level cache object from a cache list
- *
- * \param object Object to remove
- * \param list List to remove from
- * \return NSERROR_OK
- */
-static nserror llcache_object_remove_from_list(llcache_object *object,
- llcache_object **list)
-{
- if (object == *list)
- *list = object->next;
- else
- object->prev->next = object->next;
-
- if (object->next != NULL)
- object->next->prev = object->prev;
-
- return NSERROR_OK;
-}
/**
* Determine if a low-level cache object resides in a given list
@@ -2235,7 +2298,21 @@ static nserror llcache_object_snapshot(llcache_object *object,
return NSERROR_OK;
}
-
+/**
+ * construct a sorted list of objects available for cleaning operations
+ *
+ * The list contains fresh cacheable objects with no users or pending
+ * fetches. Any objects with a remaining lifetime less than cache poll
+ * time are simply not considered, they will become stale before the
+ * next cache poll and removed.
+ *
+ * The list is sorted by:
+ */
+/*static struct victim_list*
+build_candidate_list()
+{
+}
+*/
/******************************************************************************
* Public API *
@@ -2255,15 +2332,10 @@ void llcache_clean(void)
LOG(("Attempting cache clean"));
#endif
- /* Candidates for cleaning are (in order of priority):
- *
- * 1) Uncacheable objects with no users
- * 2) Stale cacheable objects with no users or pending fetches
- * 3) Fresh cacheable objects with no users or pending fetches
- */
-
- /* 1) Uncacheable objects with no users or fetches */
- for (object = llcache->uncached_objects; object != NULL; object = next) {
+ /* Uncacheable objects with no users or fetches */
+ for (object = llcache->uncached_objects;
+ object != NULL;
+ object = next) {
next = object->next;
/* The candidate count of uncacheable objects is always 0 */
@@ -2282,8 +2354,11 @@ void llcache_clean(void)
}
}
- /* 2) Stale cacheable objects with no users or pending fetches */
- for (object = llcache->cached_objects; object != NULL; object = next) {
+
+ /* Stale cacheable objects with no users or pending fetches */
+ for (object = llcache->cached_objects;
+ object != NULL;
+ object = next) {
next = object->next;
remaining_lifetime = llcache_object_rfc2616_remaining_lifetime(&object->cache);
@@ -2295,7 +2370,10 @@ void llcache_clean(void)
if (remaining_lifetime > 0) {
/* object is fresh */
- llcache_size += object->source_len + sizeof(*object);
+ llcache_size += sizeof(*object);
+ if (object->source_data != NULL) {
+ llcache_size += object->source_len;
+ }
} else {
/* object is not fresh */
#ifdef LLCACHE_TRACE
@@ -2306,32 +2384,67 @@ void llcache_clean(void)
llcache_object_destroy(object);
}
} else {
+ /* object has users */
llcache_size += object->source_len + sizeof(*object);
}
}
- /* 3) Fresh cacheable objects with no users or pending
- * fetches, only if the cache exceeds the configured size.
+ /* if the cache limit is exceeded try to make some objects
+ * persistant so their RAM can be reclaimed in the next
+ * step */
+ if (llcache->limit < llcache_size) {
+ llcache_persist(NULL);
+ }
+
+ /* Fresh cacheable objects with no users, no pending fetches
+ * and pushed to persistant store while the cache exceeds
+ * the configured size.
*/
- if (llcache->limit < llcache_size) {
- for (object = llcache->cached_objects; object != NULL;
- object = next) {
- next = object->next;
-
- if ((object->users == NULL) &&
- (object->candidate_count == 0) &&
- (object->fetch.fetch == NULL) &&
- (object->fetch.outstanding_query == false)) {
+ for (object = llcache->cached_objects;
+ ((llcache->limit < llcache_size) && (object != NULL));
+ object = next) {
+ next = object->next;
+ if ((object->users == NULL) &&
+ (object->candidate_count == 0) &&
+ (object->fetch.fetch == NULL) &&
+ (object->fetch.outstanding_query == false) &&
+ (object->store_state == LLCACHE_STORE_DISC)) {
+ free(object->source_data);
+ object->source_data = NULL;
+
+ llcache_size -= object->source_len;
#ifdef LLCACHE_TRACE
- LOG(("Found victim %p", object));
+ LOG(("Freeing source data for %p len:%d",
+ object,
+ object->source_len));
#endif
- llcache_size -=
- object->source_len + sizeof(*object);
+ }
+ }
- llcache_object_remove_from_list(object,
+ /* Fresh cacheable objects with no users or pending
+ * fetches while the cache exceeds the configured size.
+ */
+ for (object = llcache->cached_objects;
+ ((llcache->limit < llcache_size) && (object != NULL));
+ object = next) {
+ next = object->next;
+
+ if ((object->users == NULL) &&
+ (object->candidate_count == 0) &&
+ (object->fetch.fetch == NULL) &&
+ (object->fetch.outstanding_query == false) &&
+ (object->store_state == LLCACHE_STORE_RAM)) {
+#ifdef LLCACHE_TRACE
+ LOG(("destroying cacahable object:%p len:%d age:%d",
+ object,
+ object->source_len,
+ time(NULL) - object->last_used));
+#endif
+ llcache_size -= object->source_len + sizeof(*object);
+
+ llcache_object_remove_from_list(object,
&llcache->cached_objects);
- llcache_object_destroy(object);
- }
+ llcache_object_destroy(object);
}
}
diff --git a/content/llcache.h b/content/llcache.h
index 3d8232c..1faba81 100644
--- a/content/llcache.h
+++ b/content/llcache.h
@@ -131,6 +131,12 @@ typedef struct {
} data;
} llcache_query;
+/** operation table */
+struct gui_llcache_table {
+ nserror (*persist)(struct nsurl *url, int remaining, const uint8_t *data, const size_t datalen);
+ nserror (*retrieve)(struct nsurl *url, int *remaining_out, uint8_t **data_out, size_t *datalen_out);
+};
+
/**
* Response handler for fetch-related queries
*
diff --git a/desktop/browser.c b/desktop/browser.c
index f46d50e..ca60e9e 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -295,7 +295,7 @@ bool browser_window_redraw_ready(struct browser_window *bw)
return true;
}
-/* exported interface, documented in browser.h */
+/* exported interface, documented in browser_private.h */
void browser_window_update_extent(struct browser_window *bw)
{
if (bw->window != NULL)
@@ -690,62 +690,81 @@ static bool slow_script(void *ctx)
}
/* exported interface, documented in desktop/browser.h */
-
-nserror
-browser_window_create(enum browser_window_nav_flags flags,
- nsurl *url,
- nsurl *referrer,
- struct browser_window *clone,
- struct browser_window **ret_bw)
+nserror browser_window_create(enum browser_window_create_flags flags,
+ nsurl *url, nsurl *referrer,
+ struct browser_window *existing,
+ struct browser_window **bw)
{
- struct browser_window *bw;
- struct browser_window *top;
-
- /* caller must provide window to clone or be adding to history */
- assert(clone ||
- ((flags & BROWSER_WINDOW_HISTORY) != 0));
+ gui_window_create_flags gw_flags = GW_CREATE_NONE;
+ struct browser_window *ret;
+
+ /* Check parameters */
+ if (flags & (BW_CREATE_TAB | BW_CREATE_CLONE)) {
+ if (existing == NULL) {
+ assert(0 && "Failed: No existing window provided.");
+ return NSERROR_BAD_PARAMETER;
+ }
+ }
+ if (!(flags & BW_CREATE_HISTORY)) {
+ if (!(flags & BW_CREATE_CLONE) || existing == NULL) {
+ assert(0 && "Failed: Must have existing for history.");
+ return NSERROR_BAD_PARAMETER;
+ }
+ }
- if ((bw = calloc(1, sizeof(struct browser_window))) == NULL) {
+ if ((ret = calloc(1, sizeof(struct browser_window))) == NULL) {
warn_user("NoMemory", 0);
return NSERROR_NOMEM;
}
/* new javascript context for window */
- bw->jsctx = js_newcontext(nsoption_int(script_timeout),
+ ret->jsctx = js_newcontext(nsoption_int(script_timeout),
slow_script,
NULL);
/* Initialise common parts */
- browser_window_initialise_common(bw, clone);
+ browser_window_initialise_common(flags, ret, existing);
/* window characteristics */
- bw->browser_window_type = BROWSER_WINDOW_NORMAL;
- bw->scrolling = SCROLLING_YES;
- bw->border = true;
- bw->no_resize = true;
- bw->last_action = wallclock();
- bw->focus = bw;
-
- /* gui window */
- /* from the front end's pov, it clones the top level browser window,
- * so find that. */
- top = browser_window_get_root(clone);
-
- bw->window = guit->window->create(bw, top, ((flags & BROWSER_WINDOW_TAB) != 0));
-
- if (bw->window == NULL) {
- browser_window_destroy(bw);
+ ret->browser_window_type = BROWSER_WINDOW_NORMAL;
+ ret->scrolling = SCROLLING_YES;
+ ret->border = true;
+ ret->no_resize = true;
+ ret->last_action = wallclock();
+ ret->focus = ret;
+
+ /* The existing gui_window is on the top-level existing
+ * browser_window. */
+ existing = browser_window_get_root(existing);
+
+ /* Set up gui_window creation flags */
+ if (flags & BW_CREATE_TAB)
+ gw_flags |= GW_CREATE_TAB;
+ if (flags & BW_CREATE_CLONE)
+ gw_flags |= GW_CREATE_CLONE;
+
+ ret->window = guit->window->create(ret,
+ (existing != NULL) ? existing->window : NULL,
+ gw_flags);
+
+ if (ret->window == NULL) {
+ browser_window_destroy(ret);
return NSERROR_BAD_PARAMETER;
}
if (url != NULL) {
- flags |= BROWSER_WINDOW_VERIFIABLE;
- browser_window_navigate(bw, url, referrer, flags, NULL, NULL, NULL);
+ enum browser_window_nav_flags nav_flags = BW_NAVIGATE_NONE;
+ if (flags & BW_CREATE_UNVERIFIABLE)
+ nav_flags |= BW_NAVIGATE_UNVERIFIABLE;
+ if (flags & BW_CREATE_HISTORY)
+ nav_flags |= BW_NAVIGATE_HISTORY;
+ browser_window_navigate(ret, url, referrer, nav_flags, NULL,
+ NULL, NULL);
}
- if (ret_bw != NULL) {
- *ret_bw = bw;
+ if (bw != NULL) {
+ *bw = ret;
}
return NSERROR_OK;
@@ -755,18 +774,21 @@ browser_window_create(enum browser_window_nav_flags flags,
/**
* Initialise common parts of a browser window
*
- * \param bw The window to initialise
- * \param clone The window to clone, or NULL if none
+ * \param flags Flags to control operation
+ * \param bw The window to initialise
+ * \param existing The existing window if cloning, else NULL
*/
-void browser_window_initialise_common(struct browser_window *bw,
- struct browser_window *clone)
+void browser_window_initialise_common(enum browser_window_create_flags flags,
+ struct browser_window *bw, struct browser_window *existing)
{
assert(bw);
- if (!clone)
- bw->history = history_create();
- else
- bw->history = history_clone(clone->history);
+ if (flags & BW_CREATE_CLONE) {
+ assert(existing != NULL);
+ bw->history = history_clone(existing->history, bw);
+ } else {
+ bw->history = history_create(bw);
+ }
/* window characteristics */
bw->refresh_interval = -1;
@@ -1087,7 +1109,7 @@ static void browser_window_refresh(void *p)
nsurl *url;
nsurl *refresh;
hlcache_handle *parent = NULL;
- enum browser_window_nav_flags flags = BROWSER_WINDOW_NONE;
+ enum browser_window_nav_flags flags = BW_NAVIGATE_UNVERIFIABLE;
assert(bw->current_content != NULL &&
(content_get_status(bw->current_content) ==
@@ -1106,7 +1128,7 @@ static void browser_window_refresh(void *p)
url = hlcache_handle_get_url(bw->current_content);
if ((url == NULL) || (nsurl_compare(url, refresh, NSURL_COMPLETE))) {
- flags |= BROWSER_WINDOW_HISTORY;
+ flags |= BW_NAVIGATE_HISTORY;
}
/* Treat an (almost) immediate refresh in a top-level browser window as
@@ -1117,7 +1139,7 @@ static void browser_window_refresh(void *p)
* all.
*/
if (bw->refresh_interval <= 100 && bw->parent == NULL) {
- flags |= BROWSER_WINDOW_VERIFIABLE;
+ flags &= ~BW_NAVIGATE_UNVERIFIABLE;
} else {
parent = bw->current_content;
}
@@ -1175,9 +1197,7 @@ static nserror browser_window_callback(hlcache_handle *c,
browser_window_convert_to_download(bw, event->data.download);
if (bw->current_content != NULL) {
- browser_window_refresh_url_bar(bw,
- hlcache_handle_get_url(bw->current_content),
- bw->frag_id);
+ browser_window_refresh_url_bar(bw);
}
break;
@@ -1227,9 +1247,7 @@ static nserror browser_window_callback(hlcache_handle *c,
if (bw->window != NULL) {
guit->window->new_content(bw->window);
- browser_window_refresh_url_bar(bw,
- hlcache_handle_get_url(bw->current_content),
- bw->frag_id);
+ browser_window_refresh_url_bar(bw);
}
/* new content; set scroll_to_top */
@@ -1697,6 +1715,70 @@ void browser_window_destroy(struct browser_window *bw)
}
+/**
+ * Update URL bar for a given browser window to given URL
+ *
+ * \param bw Browser window to update URL bar for.
+ * \param url URL for content displayed by bw including any fragment.
+ */
+
+static inline void browser_window_refresh_url_bar_internal(
+ struct browser_window *bw, nsurl *url)
+{
+ assert(bw);
+ assert(url);
+
+ if (bw->parent != NULL) {
+ /* Not root window; don't set a URL in GUI URL bar */
+ return;
+ }
+
+ guit->window->set_url(bw->window, nsurl_access(url));
+}
+
+
+/**
+ * Update URL bar for a given browser window to bw's content's URL
+ *
+ * \param bw Browser window to update URL bar for.
+ */
+
+void browser_window_refresh_url_bar(struct browser_window *bw)
+{
+ assert(bw);
+
+ if (bw->parent != NULL) {
+ /* Not root window; don't set a URL in GUI URL bar */
+ return;
+ }
+
+ if (bw->current_content == NULL) {
+ /* TODO: set "about:blank"? */
+ return;
+ }
+
+ if (bw->frag_id == NULL) {
+ browser_window_refresh_url_bar_internal(bw,
+ hlcache_handle_get_url(bw->current_content));
+ } else {
+ nsurl *display_url;
+ nserror error;
+
+ /* Combine URL and Fragment */
+ error = nsurl_refragment(
+ hlcache_handle_get_url(bw->current_content),
+ bw->frag_id, &display_url);
+ if (error != NSERROR_OK) {
+ warn_user("NoMemory", 0);
+ return;
+ }
+
+ browser_window_refresh_url_bar_internal(bw, display_url);
+ nsurl_unref(display_url);
+ }
+}
+
+
/* exported interface documented in desktop/browser.h */
nserror browser_window_navigate(struct browser_window *bw,
nsurl *url,
@@ -1730,7 +1812,7 @@ nserror browser_window_navigate(struct browser_window *bw,
}
/* Set up retrieval parameters */
- if ((flags & BROWSER_WINDOW_VERIFIABLE) != 0) {
+ if (!(flags & BW_NAVIGATE_UNVERIFIABLE)) {
fetch_flags |= LLCACHE_RETRIEVE_VERIFIABLE;
}
@@ -1754,7 +1836,7 @@ nserror browser_window_navigate(struct browser_window *bw,
}
/* Get download out of the way */
- if ((flags & BROWSER_WINDOW_DOWNLOAD) != 0) {
+ if ((flags & BW_NAVIGATE_DOWNLOAD) != 0) {
error = browser_window_download(bw,
url,
referrer,
@@ -1799,7 +1881,7 @@ nserror browser_window_navigate(struct browser_window *bw,
nsurl_unref(referrer);
}
- if ((flags & BROWSER_WINDOW_HISTORY) != 0) {
+ if ((flags & BW_NAVIGATE_HISTORY) != 0) {
history_add(bw->history,
bw->current_content, bw->frag_id);
}
@@ -1807,10 +1889,7 @@ nserror browser_window_navigate(struct browser_window *bw,
browser_window_update(bw, false);
if (bw->current_content != NULL) {
- browser_window_refresh_url_bar(bw,
- hlcache_handle_get_url(
- bw->current_content),
- bw->frag_id);
+ browser_window_refresh_url_bar(bw);
}
return NSERROR_OK;
}
@@ -1823,10 +1902,10 @@ nserror browser_window_navigate(struct browser_window *bw,
LOG(("Loading '%s'", nsurl_access(url)));
browser_window_set_status(bw, messages_get("Loading"));
- bw->history_add = (flags & BROWSER_WINDOW_HISTORY);
+ bw->history_add = (flags & BW_NAVIGATE_HISTORY);
/* Verifiable fetches may trigger a download */
- if ((flags & BROWSER_WINDOW_VERIFIABLE) != 0) {
+ if (!(flags & BW_NAVIGATE_UNVERIFIABLE)) {
fetch_flags |= HLCACHE_RETRIEVE_MAY_DOWNLOAD;
}
@@ -1842,7 +1921,7 @@ nserror browser_window_navigate(struct browser_window *bw,
case NSERROR_OK:
bw->loading_content = c;
browser_window_start_throbber(bw);
- browser_window_refresh_url_bar(bw, url, NULL);
+ browser_window_refresh_url_bar_internal(bw, url);
break;
case NSERROR_NO_FETCH_HANDLER: /* no handler for this type */
@@ -1870,6 +1949,69 @@ nserror browser_window_navigate(struct browser_window *bw,
}
+/* Exported interface, documented in browser.h */
+nsurl * browser_window_get_url(struct browser_window *bw)
+{
+ assert(bw != NULL);
+
+ if (bw->current_content != NULL) {
+ return hlcache_handle_get_url(bw->current_content);
+
+ } else if (bw->loading_content != NULL) {
+ /* TODO: should we return this? */
+ return hlcache_handle_get_url(bw->loading_content);
+ }
+
+ return corestring_nsurl_about_blank;
+}
+
+
+/* Exported interface, documented in browser.h */
+struct history * browser_window_get_history(struct browser_window *bw)
+{
+ assert(bw != NULL);
+
+ return bw->history;
+}
+
+
+/* Exported interface, documented in browser.h */
+bool browser_window_has_content(struct browser_window *bw)
+{
+ assert(bw != NULL);
+
+ if (bw->current_content == NULL) {
+ return false;
+ }
+
+ return true;
+}
+
+
+/* Exported interface, documented in browser.h */
+nserror browser_window_get_extents(struct browser_window *bw, bool scaled,
+ int *width, int *height)
+{
+ assert(bw != NULL);
+
+ if (bw->current_content == NULL) {
+ *width = 0;
+ *height = 0;
+ return NSERROR_BAD_CONTENT;
+ }
+
+ *width = content_get_width(bw->current_content);
+ *height = content_get_height(bw->current_content);
+
+ if (scaled) {
+ *width *= bw->scale;
+ *height *= bw->scale;
+ }
+
+ return NSERROR_OK;
+}
+
+
/*
* Get the dimensions of the area a browser window occupies
*
@@ -2074,9 +2216,7 @@ void browser_window_stop(struct browser_window *bw)
}
if (bw->current_content != NULL) {
- browser_window_refresh_url_bar(bw,
- hlcache_handle_get_url(bw->current_content),
- bw->frag_id);
+ browser_window_refresh_url_bar(bw);
}
browser_window_stop_throbber(bw);
@@ -2128,7 +2268,7 @@ void browser_window_reload(struct browser_window *bw, bool all)
browser_window_navigate(bw,
hlcache_handle_get_url(bw->current_content),
NULL,
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_NONE,
NULL,
NULL,
NULL);
@@ -2314,46 +2454,6 @@ float browser_window_get_scale(struct browser_window *bw)
}
-/**
- * Update URL bar for a given browser window to given URL
- *
- * \param bw Browser window to update URL bar for.
- * \param url URL for content displayed by bw, excluding any fragment.
- * \param frag Additional fragment. May be NULL if none.
- */
-
-void browser_window_refresh_url_bar(struct browser_window *bw, nsurl *url,
- lwc_string *frag)
-{
- assert(bw);
- assert(url);
-
- if (bw->parent != NULL) {
- /* Not root window; don't set a URL in GUI URL bar */
- return;
- }
-
- if (frag == NULL) {
- /* With no fragment, we may as well pass url straight through
- * saving a malloc, copy, free cycle.
- */
- guit->window->set_url(bw->window, nsurl_access(url));
- } else {
- nsurl *display_url;
- nserror error;
-
- error = nsurl_refragment(url, frag, &display_url);
- if (error != NSERROR_OK) {
- warn_user("NoMemory", 0);
- return;
- }
-
- guit->window->set_url(bw->window, nsurl_access(display_url));
- nsurl_unref(display_url);
- }
-}
-
-
static void browser_window_find_target_internal(struct browser_window *bw,
const char *target, int depth, struct browser_window *page,
int *rdepth, struct browser_window **bw_target)
@@ -2454,8 +2554,9 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
* OR
* - button_2 opens in new tab and the link target is "_blank"
*/
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_TAB |
+ BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
NULL,
NULL,
bw,
@@ -2481,7 +2582,8 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
* - button_2 doesn't open in new tabs and the link target is
* "_blank"
*/
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
NULL,
NULL,
bw,
@@ -2520,7 +2622,7 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
if (!nsoption_bool(target_blank))
return bw;
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY,
NULL,
NULL,
bw,
diff --git a/desktop/browser.h b/desktop/browser.h
index 549570f..ca99a5d 100644
--- a/desktop/browser.h
+++ b/desktop/browser.h
@@ -62,37 +62,69 @@ typedef enum {
extern bool browser_reformat_pending;
-/** flags to browser window go */
+/** flags to browser_window_create */
+enum browser_window_create_flags {
+ /** No flags set */
+ BW_CREATE_NONE = 0,
+
+ /** this will form a new history node (don't set for back/reload/etc) */
+ BW_CREATE_HISTORY = (1 << 0),
+
+ /** New gui_window to be tab in same window as "existing" gui_window */
+ BW_CREATE_TAB = (1 << 1),
+
+ /** New gui_window to be clone of "existing" gui_window */
+ BW_CREATE_CLONE = (1 << 2),
+
+ /** Window not opened by user interaction (e.g. JS popup)
+ *
+ * rfc2965:
+ * A transaction is verifiable if the user, or a
+ * user-designated agent, has the option to review
+ * the request-URI prior to its use in the transaction.
+ * A transaction is unverifiable if the user does not
+ * have that option.
+ */
+ BW_CREATE_UNVERIFIABLE = (1 << 3),
+};
+
+/** flags to browser_window_navigate */
enum browser_window_nav_flags {
- BROWSER_WINDOW_NONE = 0,
+ /** No flags set */
+ BW_NAVIGATE_NONE = 0,
+
/** this will form a new history node (don't set for back/reload/etc) */
- BROWSER_WINDOW_HISTORY = 1,
+ BW_NAVIGATE_HISTORY = (1 << 0),
+
/** download rather than render the uri */
- BROWSER_WINDOW_DOWNLOAD = 2,
- /** this transaction is verifiable */
- BROWSER_WINDOW_VERIFIABLE = 4,
- /** open a new tab rather than a new window */
- BROWSER_WINDOW_TAB = 8,
+ BW_NAVIGATE_DOWNLOAD = (1 << 1),
+
+ /** Transation not caused by user interaction (e.g. JS-caused)
+ *
+ * rfc2965:
+ * A transaction is verifiable if the user, or a
+ * user-designated agent, has the option to review
+ * the request-URI prior to its use in the transaction.
+ * A transaction is unverifiable if the user does not
+ * have that option.
+ */
+ BW_NAVIGATE_UNVERIFIABLE = (1 << 2)
};
-void browser_window_initialise_common(struct browser_window *bw,
- struct browser_window *clone);
-
/**
* Create and open a new root browser window with the given page.
*
- * \param flags Flags to control operation
- * \param url URL to start fetching in the new window or NULL for blank
- * \param referer The referring uri or NULL if none
- * \param clone The browser window to clone
- * \param bw pointer to created browser window or untouched on error.
- * \return error code
+ * \param flags Flags to control operation
+ * \param url URL to fetch in the new window or NULL for blank
+ * \param referer The referring uri or NULL if none
+ * \param existing The an existing bw or NULL, required for some flags.
+ * \param bw Updated to created browser window or untouched on error.
+ * \return NSERROR_OK, or appropriate error otherwise.
*/
-nserror browser_window_create(enum browser_window_nav_flags flags,
- nsurl *url,
- nsurl *referrer,
- struct browser_window *clone,
- struct browser_window **bw);
+nserror browser_window_create(enum browser_window_create_flags flags,
+ nsurl *url, nsurl *referrer,
+ struct browser_window *existing,
+ struct browser_window **bw);
/**
* Start fetching a page in a browser window.
@@ -119,6 +151,46 @@ nserror browser_window_navigate(struct browser_window *bw,
struct fetch_multipart_data *post_multipart,
struct hlcache_handle *parent);
+/**
+ * Get a browser window's URL.
+ *
+ * \param bw browser window
+ * \return pointer to nsurl. Doesn't create a ref for caller.
+ *
+ * Note: guaranteed to return a valid nsurl ptr, never returns NULL.
+ */
+nsurl * browser_window_get_url(struct browser_window *bw);
+
+/**
+ * Get a browser window's history object.
+ *
+ * \param bw browser window
+ * \return pointer browser window's history object
+ *
+ * Clients need history object to make use of the history_* functions.
+ */
+struct history * browser_window_get_history(struct browser_window *bw);
+
+/**
+ * Get a browser window's content extents.
+ *
+ * \param bw browser window
+ * \param scaled whether to apply current browser window scale
+ * \param width updated to content width extent in px
+ * \param width updated to content height extent in px
+ * \return NSERROR_OK, or appropriate error otherwise.
+ */
+nserror browser_window_get_extents(struct browser_window *bw, bool scaled,
+ int *width, int *height);
+
+/**
+ * Find out if a browser window is currently showing a content.
+ *
+ * \param bw browser window
+ * \return true iff browser window is showing a content, else false.
+ */
+bool browser_window_has_content(struct browser_window *bw);
+
void browser_window_get_dimensions(struct browser_window *bw,
int *width, int *height, bool scaled);
void browser_window_set_dimensions(struct browser_window *bw,
@@ -177,8 +249,7 @@ bool browser_window_drop_file_at_point(struct browser_window *bw,
void browser_window_set_gadget_filename(struct browser_window *bw,
struct form_control *gadget, const char *fn);
-void browser_window_refresh_url_bar(struct browser_window *bw, nsurl *url,
- lwc_string *frag);
+void browser_window_refresh_url_bar(struct browser_window *bw);
void browser_window_mouse_click(struct browser_window *bw,
browser_mouse_state mouse, int x, int y);
@@ -245,14 +316,6 @@ bool browser_window_redraw(struct browser_window *bw, int x, int y,
bool browser_window_redraw_ready(struct browser_window *bw);
/**
- * Update the extent of the inside of a browser window to that of the current
- * content
- *
- * \param bw browser_window to update the extent of
- */
-void browser_window_update_extent(struct browser_window *bw);
-
-/**
* Get the position of the current browser window with respect to the root or
* parent browser window
*
diff --git a/desktop/browser_private.h b/desktop/browser_private.h
index 4412f4b..9007007 100644
--- a/desktop/browser_private.h
+++ b/desktop/browser_private.h
@@ -163,4 +163,17 @@ struct browser_window {
int status_miss; /**< Number of times status was really updated. */
};
+
+
+void browser_window_initialise_common(enum browser_window_create_flags flags,
+ struct browser_window *bw, struct browser_window *existing);
+
+/**
+ * Update the extent of the inside of a browser window to that of the current
+ * content
+ *
+ * \param bw browser_window to update the extent of
+ */
+void browser_window_update_extent(struct browser_window *bw);
+
#endif
diff --git a/desktop/frames.c b/desktop/frames.c
index 354c70d..ab5f817 100644
--- a/desktop/frames.c
+++ b/desktop/frames.c
@@ -209,7 +209,8 @@ void browser_window_create_iframes(struct browser_window *bw,
window = &(bw->iframes[index++]);
/* Initialise common parts */
- browser_window_initialise_common(window, NULL);
+ browser_window_initialise_common(BW_CREATE_NONE,
+ window, NULL);
/* window characteristics */
window->browser_window_type = BROWSER_WINDOW_IFRAME;
@@ -251,7 +252,7 @@ void browser_window_create_iframes(struct browser_window *bw,
browser_window_navigate(window,
cur->url,
hlcache_handle_get_url(bw->current_content),
- BROWSER_WINDOW_NONE,
+ BW_NAVIGATE_UNVERIFIABLE,
NULL,
NULL,
bw->current_content);
@@ -314,7 +315,8 @@ void browser_window_create_frameset(struct browser_window *bw,
window = &bw->children[index];
/* Initialise common parts */
- browser_window_initialise_common(window, NULL);
+ browser_window_initialise_common(BW_CREATE_NONE,
+ window, NULL);
/* window characteristics */
if (frame->children)
@@ -387,7 +389,8 @@ void browser_window_create_frameset(struct browser_window *bw,
browser_window_navigate(window,
frame->url,
hlcache_handle_get_url(parent),
- BROWSER_WINDOW_HISTORY,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_UNVERIFIABLE,
NULL,
NULL,
parent);
diff --git a/desktop/global_history.c b/desktop/global_history.c
index 9d0e47e..c29b051 100644
--- a/desktop/global_history.c
+++ b/desktop/global_history.c
@@ -676,23 +676,22 @@ static nserror global_history_tree_node_entry_cb(
case TREE_MSG_NODE_LAUNCH:
{
nserror error;
- struct browser_window *clone = NULL;
- enum browser_window_nav_flags flags =
- BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB;
+ struct browser_window *existing = NULL;
+ enum browser_window_create_flags flags =
+ BW_CREATE_HISTORY;
- /* TODO: Set clone window, to window that new tab appears in */
+ /* TODO: Set existing to window that new tab appears in */
if (msg.data.node_launch.mouse &
(BROWSER_MOUSE_MOD_1 | BROWSER_MOUSE_MOD_2) ||
- clone == NULL) {
+ existing == NULL) {
/* Shift or Ctrl launch, open in new window rather
* than tab. */
- flags ^= BROWSER_WINDOW_TAB;
+ /* TODO: flags ^= BW_CREATE_TAB; */
}
- error = browser_window_create(flags, e->url, NULL, clone, NULL);
+ error = browser_window_create(flags, e->url, NULL,
+ existing, NULL);
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
}
diff --git a/desktop/gui.h b/desktop/gui.h
index 42a1ae5..1a84bd4 100644
--- a/desktop/gui.h
+++ b/desktop/gui.h
@@ -54,6 +54,12 @@ typedef enum {
GDRAGGING_OTHER
} gui_drag_type;
+typedef enum {
+ GW_CREATE_NONE = 0, /* New window */
+ GW_CREATE_CLONE = (1 << 0), /* Clone existing window */
+ GW_CREATE_TAB = (1 << 1) /* In same window as existing */
+} gui_window_create_flags;
+
struct gui_window;
struct gui_download_window;
struct browser_window;
@@ -77,8 +83,23 @@ struct gui_window_table {
/* Mandantory entries */
- /** create a gui window for a browsing context */
- struct gui_window *(*create)(struct browser_window *bw, struct browser_window *clone, bool new_tab);
+ /**
+ * Create and open a gui window for a browsing context.
+ *
+ * \param bw bw to create gui_window for
+ * \param existing an existing gui_window, may be NULL
+ * \param flags flags for gui window creation
+ * \return gui window, or NULL on error
+ *
+ * If GW_CREATE_CLONE or GW_CREATE_TAB flags are set, existing is
+ * non-NULL.
+ *
+ * Front end's gui_window must include a reference to the
+ * browser window passed in the bw param.
+ */
+ struct gui_window *(*create)(struct browser_window *bw,
+ struct gui_window *existing,
+ gui_window_create_flags flags);
/** destroy previously created gui window */
void (*destroy)(struct gui_window *g);
@@ -446,10 +467,8 @@ struct gui_browser_table {
};
-struct gui_llcache_table {
- nserror (*persist)(struct nsurl *url, int remaining, const uint8_t *data, size_t datalen);
- nserror (*retrieve)(struct nsurl *url, int *remaining_out, const uint8_t **data_out, size_t *datalen_out);
-};
+
+struct gui_llcache_table;
/** Graphical user interface function table
*
diff --git a/desktop/gui_factory.c b/desktop/gui_factory.c
index f8be89a..e7d2994 100644
--- a/desktop/gui_factory.c
+++ b/desktop/gui_factory.c
@@ -343,12 +343,12 @@ static nserror verify_utf8_register(struct gui_utf8_table *gut)
return NSERROR_OK;
}
-static nserror gui_default_persist(nsurl *url, int remaining, const uint8_t *data, size_t datalen)
+static nserror gui_default_persist(nsurl *url, int remaining, const uint8_t *data, const size_t datalen)
{
return NSERROR_SAVE_FAILED;
}
-static nserror gui_default_retrieve(nsurl *url, int *remaining_out, const uint8_t **data_out, size_t *datalen_out)
+static nserror gui_default_retrieve(nsurl *url, int *remaining_out, uint8_t **data_out, size_t *datalen_out)
{
return NSERROR_NOT_FOUND;
}
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 219a348..6814f8d 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -472,23 +472,22 @@ static nserror hotlist_tree_node_entry_cb(
case TREE_MSG_NODE_LAUNCH:
{
nserror error;
- struct browser_window *clone = NULL;
- enum browser_window_nav_flags flags =
- BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB;
+ struct browser_window *existing = NULL;
+ enum browser_window_create_flags flags =
+ BW_CREATE_HISTORY;
- /* TODO: Set clone window, to window that new tab appears in */
+ /* TODO: Set existing to window that new tab appears in */
if (msg.data.node_launch.mouse &
(BROWSER_MOUSE_MOD_1 | BROWSER_MOUSE_MOD_2) ||
- clone == NULL) {
+ existing == NULL) {
/* Shift or Ctrl launch, open in new window rather
* than tab. */
- flags ^= BROWSER_WINDOW_TAB;
+ /* TODO: flags ^= BW_CREATE_TAB; */
}
- error = browser_window_create(flags, e->url, NULL, clone, NULL);
+ error = browser_window_create(flags, e->url, NULL,
+ existing, NULL);
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
}
diff --git a/desktop/local_history.c b/desktop/local_history.c
index 9829f51..687d4c7 100644
--- a/desktop/local_history.c
+++ b/desktop/local_history.c
@@ -78,6 +78,8 @@ struct history {
int width;
/** Height of layout. */
int height;
+ /** Browser window that local history belongs to */
+ struct browser_window *bw;
};
static struct history_entry *history_clone_entry(struct history *history,
@@ -102,7 +104,7 @@ static bool history_enumerate_entry(const struct history *history,
* \return pointer to an opaque history structure, 0 on failure.
*/
-struct history *history_create(void)
+struct history *history_create(struct browser_window *bw)
{
struct history *history;
@@ -113,6 +115,7 @@ struct history *history_create(void)
}
history->width = RIGHT_MARGIN / 2;
history->height = BOTTOM_MARGIN / 2;
+ history->bw = bw;
return history;
}
@@ -125,12 +128,13 @@ struct history *history_create(void)
* \return pointer to an opaque history structure, 0 on failure.
*/
-struct history *history_clone(struct history *history)
+struct history *history_clone(struct history *history,
+ struct browser_window *bw)
{
struct history *new_history;
if (!history->start)
- return history_create();
+ return history_create(bw);
new_history = malloc(sizeof *history);
if (!new_history)
@@ -146,6 +150,8 @@ struct history *history_clone(struct history *history)
return 0;
}
+ new_history->bw = bw;
+
return new_history;
}
@@ -370,13 +376,14 @@ void history_free_entry(struct history_entry *entry)
*
* \param bw browser window
* \param history history of the window
+ * \param new_window whether to open in new window
*/
-void history_back(struct browser_window *bw, struct history *history)
+void history_back(struct history *history, bool new_window)
{
if (!history || !history->current || !history->current->back)
return;
- history_go(bw, history, history->current->back, false);
+ history_go(history, history->current->back, new_window);
}
@@ -385,13 +392,14 @@ void history_back(struct browser_window *bw, struct history *history)
*
* \param bw browser window
* \param history history of the window
+ * \param new_window whether to open in new window
*/
-void history_forward(struct browser_window *bw, struct history *history)
+void history_forward(struct history *history, bool new_window)
{
if (!history || !history->current || !history->current->forward_pref)
return;
- history_go(bw, history, history->current->forward_pref, false);
+ history_go(history, history->current->forward_pref, new_window);
}
@@ -422,9 +430,7 @@ bool history_forward_available(struct history *history)
/* Documented in local_history.h */
-void history_go(struct browser_window *bw,
- struct history *history,
- struct history_entry *entry,
+void history_go(struct history *history, struct history_entry *entry,
bool new_window)
{
nsurl *url;
@@ -451,16 +457,13 @@ void history_go(struct browser_window *bw,
current = history->current;
history->current = entry;
- browser_window_create(BROWSER_WINDOW_VERIFIABLE,
- url,
- NULL,
- bw,
- NULL);
+ browser_window_create(BW_CREATE_CLONE,
+ url, NULL, history->bw, NULL);
history->current = current;
} else {
history->current = entry;
- browser_window_navigate(bw, url, NULL,
- BROWSER_WINDOW_VERIFIABLE, NULL, NULL, NULL);
+ browser_window_navigate(history->bw, url, NULL,
+ BW_NAVIGATE_NONE, NULL, NULL, NULL);
}
nsurl_unref(url);
@@ -702,8 +705,7 @@ bool history_redraw_entry(struct history *history,
* \return true if action was taken, false if click was not on an entry
*/
-bool history_click(struct browser_window *bw, struct history *history,
- int x, int y, bool new_window)
+bool history_click(struct history *history, int x, int y, bool new_window)
{
struct history_entry *entry;
@@ -713,7 +715,7 @@ bool history_click(struct browser_window *bw, struct history *history,
if (entry == history->current)
return false;
- history_go(bw, history, entry, new_window);
+ history_go(history, entry, new_window);
return true;
}
diff --git a/desktop/local_history.h b/desktop/local_history.h
index c4faa85..b3e177b 100644
--- a/desktop/local_history.h
+++ b/desktop/local_history.h
@@ -32,14 +32,15 @@ struct browser_window;
struct history_entry;
struct redraw_context;
-struct history *history_create(void);
-struct history *history_clone(struct history *history);
+struct history *history_create(struct browser_window *bw);
+struct history *history_clone(struct history *history,
+ struct browser_window *bw);
void history_add(struct history *history, struct hlcache_handle *content,
lwc_string *frag_id);
void history_update(struct history *history, struct hlcache_handle *content);
void history_destroy(struct history *history);
-void history_back(struct browser_window *bw, struct history *history);
-void history_forward(struct browser_window *bw, struct history *history);
+void history_back(struct history *history, bool new_window);
+void history_forward(struct history *history, bool new_window);
bool history_back_available(struct history *history);
bool history_forward_available(struct history *history);
void history_size(struct history *history, int *width, int *height);
@@ -47,8 +48,7 @@ bool history_redraw(struct history *history, const struct redraw_context *ctx);
bool history_redraw_rectangle(struct history *history,
int x0, int y0, int x1, int y1, int x, int y,
const struct redraw_context *ctx);
-bool history_click(struct browser_window *bw, struct history *history,
- int x, int y, bool new_window);
+bool history_click(struct history *history, int x, int y, bool new_window);
const char *history_position_url(struct history *history, int x, int y);
/**
@@ -59,9 +59,10 @@ const char *history_position_url(struct history *history, int x, int y);
* \param entry Current history entry
* \return true to continue enumeration, false to cancel enumeration
*/
-typedef bool (*history_enumerate_cb)(const struct history *history, int x0, int y0,
- int x1, int y1,
- const struct history_entry *entry, void *user_data);
+typedef bool (*history_enumerate_cb)(const struct history *history,
+ int x0, int y0,
+ int x1, int y1,
+ const struct history_entry *entry, void *user_data);
/**
* Enumerate all entries in the history.
@@ -71,7 +72,8 @@ typedef bool (*history_enumerate_cb)(const struct history *history, int x0, int
* \param cb callback function
* \param user_data context pointer passed to cb
*/
-void history_enumerate(const struct history *history, history_enumerate_cb cb, void *user_data);
+void history_enumerate(const struct history *history,
+ history_enumerate_cb cb, void *user_data);
/**
* Enumerate all entries that will be reached by the 'forward' button
@@ -81,7 +83,7 @@ void history_enumerate(const struct history *history, history_enumerate_cb cb, v
* \param user_data Data passed to the callback
*/
void history_enumerate_forward( struct history *history,
- history_enumerate_cb cb, void *user_data );
+ history_enumerate_cb cb, void *user_data);
/**
* Enumerate all entries that will be reached by the 'back' button
@@ -91,7 +93,7 @@ void history_enumerate_forward( struct history *history,
* \param user_data Data passed to the callback
*/
void history_enumerate_back( struct history *history,
- history_enumerate_cb cb, void *user_data );
+ history_enumerate_cb cb, void *user_data);
/**
* Returns the URL to a history entry
@@ -125,7 +127,7 @@ const char *history_entry_get_title(const struct history_entry *entry);
* \param entry entry to open
* \param new_window open entry in new window
*/
-void history_go(struct browser_window *bw, struct history *history,
- struct history_entry *entry, bool new_window);
+void history_go(struct history *history, struct history_entry *entry,
+ bool new_window);
#endif
diff --git a/desktop/searchweb.c b/desktop/searchweb.c
index bdcb2ba..368ad05 100644
--- a/desktop/searchweb.c
+++ b/desktop/searchweb.c
@@ -71,9 +71,8 @@ bool search_web_new_window(struct browser_window *bw, const char *searchterm)
error = nsurl_create(urltxt, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
bw,
diff --git a/framebuffer/gui.c b/framebuffer/gui.c
index 678010d..5b4f7a6 100644
--- a/framebuffer/gui.c
+++ b/framebuffer/gui.c
@@ -124,9 +124,8 @@ static void
widget_scroll_y(struct gui_window *gw, int y, bool abs)
{
struct browser_widget_s *bwidget = fbtk_get_userpw(gw->browser);
- int content_height;
+ int content_width, content_height;
int height;
- float scale = gw->bw->scale;
LOG(("window scroll"));
if (abs) {
@@ -135,7 +134,8 @@ widget_scroll_y(struct gui_window *gw, int y, bool abs)
bwidget->pany += y;
}
- content_height = content_get_height(gw->bw->current_content) * scale;
+ browser_window_get_extents(gw->bw, true,
+ &content_width, &content_height);
height = fbtk_get_height(gw->browser);
@@ -162,9 +162,8 @@ static void
widget_scroll_x(struct gui_window *gw, int x, bool abs)
{
struct browser_widget_s *bwidget = fbtk_get_userpw(gw->browser);
- int content_width;
+ int content_width, content_height;
int width;
- float scale = gw->bw->scale;
if (abs) {
bwidget->panx = x - bwidget->scrollx;
@@ -172,7 +171,8 @@ widget_scroll_x(struct gui_window *gw, int x, bool abs)
bwidget->panx += x;
}
- content_width = content_get_width(gw->bw->current_content) * scale;
+ browser_window_get_extents(gw->bw, true,
+ &content_width, &content_height);
width = fbtk_get_width(gw->browser);
@@ -331,6 +331,7 @@ fb_redraw(fbtk_widget_t *widget,
.plot = &fb_plotters
};
nsfb_t *nsfb = fbtk_get_nsfb(widget);
+ float scale = browser_window_get_scale(bw);
LOG(("%d,%d to %d,%d",
bwidget->redraw_box.x0,
@@ -356,8 +357,8 @@ fb_redraw(fbtk_widget_t *widget,
clip.y1 = bwidget->redraw_box.y1;
browser_window_redraw(bw,
- (x - bwidget->scrollx) / bw->scale,
- (y - bwidget->scrolly) / bw->scale,
+ (x - bwidget->scrollx) / scale,
+ (y - bwidget->scrolly) / scale,
&clip, &ctx);
if (fbtk_get_caret(widget, &caret_x, &caret_y, &caret_h)) {
@@ -601,7 +602,7 @@ fb_browser_window_click(fbtk_widget_t *widget, fbtk_callback_info *cbi)
struct gui_window *gw = cbi->context;
struct browser_widget_s *bwidget = fbtk_get_userpw(widget);
browser_mouse_state mouse;
- float scale = gw->bw->scale;
+ float scale = browser_window_get_scale(gw->bw);
int x = (cbi->x + bwidget->scrollx) / scale;
int y = (cbi->y + bwidget->scrolly) / scale;
unsigned int time_now;
@@ -753,8 +754,9 @@ fb_browser_window_move(fbtk_widget_t *widget, fbtk_callback_info *cbi)
browser_mouse_state mouse = 0;
struct gui_window *gw = cbi->context;
struct browser_widget_s *bwidget = fbtk_get_userpw(widget);
- int x = (cbi->x + bwidget->scrollx) / gw->bw->scale;
- int y = (cbi->y + bwidget->scrolly) / gw->bw->scale;
+ float scale = browser_window_get_scale(gw->bw);
+ int x = (cbi->x + bwidget->scrollx) / scale;
+ int y = (cbi->y + bwidget->scrolly) / scale;
if (gui_drag.state == GUI_DRAG_PRESSED &&
(abs(x - gui_drag.x) > 5 ||
@@ -987,7 +989,7 @@ fb_leftarrow_click(fbtk_widget_t *widget, fbtk_callback_info *cbi)
return 0;
if (history_back_available(bw->history))
- history_back(bw, bw->history);
+ history_back(bw->history, false);
fb_update_back_forward(gw);
@@ -1005,7 +1007,7 @@ fb_rightarrow_click(fbtk_widget_t *widget, fbtk_callback_info *cbi)
return 0;
if (history_forward_available(bw->history))
- history_forward(bw, bw->history);
+ history_forward(bw->history, false);
fb_update_back_forward(gw);
return 1;
@@ -1092,14 +1094,8 @@ fb_url_enter(void *pw, char *text)
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
} else {
- browser_window_navigate(bw,
- url,
- NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
- NULL,
- NULL,
- NULL);
+ browser_window_navigate(bw, url, NULL, BW_NAVIGATE_HISTORY,
+ NULL, NULL, NULL);
nsurl_unref(url);
}
@@ -1505,8 +1501,8 @@ create_normal_browser_window(struct gui_window *gw, int furniture_width)
static struct gui_window *
gui_window_create(struct browser_window *bw,
- struct browser_window *clone,
- bool new_tab)
+ struct gui_window *existing,
+ gui_window_create_flags flags)
{
struct gui_window *gw;
@@ -1515,8 +1511,7 @@ gui_window_create(struct browser_window *bw,
if (gw == NULL)
return NULL;
- /* seems we need to associate the gui window with the underlying
- * browser window
+ /* associate the gui window with the underlying browser window
*/
gw->bw = bw;
@@ -1558,9 +1553,10 @@ static bool
gui_window_get_scroll(struct gui_window *g, int *sx, int *sy)
{
struct browser_widget_s *bwidget = fbtk_get_userpw(g->browser);
+ float scale = browser_window_get_scale(g->bw);
- *sx = bwidget->scrollx / g->bw->scale;
- *sy = bwidget->scrolly / g->bw->scale;
+ *sx = bwidget->scrollx / scale;
+ *sy = bwidget->scrolly / scale;
return true;
}
@@ -1569,11 +1565,12 @@ static void
gui_window_set_scroll(struct gui_window *gw, int sx, int sy)
{
struct browser_widget_s *bwidget = fbtk_get_userpw(gw->browser);
+ float scale = browser_window_get_scale(gw->bw);
assert(bwidget);
- widget_scroll_x(gw, sx * gw->bw->scale, true);
- widget_scroll_y(gw, sy * gw->bw->scale, true);
+ widget_scroll_x(gw, sx * scale, true);
+ widget_scroll_y(gw, sy * scale, true);
}
@@ -1583,26 +1580,27 @@ gui_window_get_dimensions(struct gui_window *g,
int *height,
bool scaled)
{
+ float scale = browser_window_get_scale(g->bw);
+
*width = fbtk_get_width(g->browser);
*height = fbtk_get_height(g->browser);
if (scaled) {
- *width /= g->bw->scale;
- *height /= g->bw->scale;
+ *width /= scale;
+ *height /= scale;
}
}
static void
gui_window_update_extent(struct gui_window *gw)
{
- float scale = gw->bw->scale;
+ int w, h;
+ browser_window_get_extents(gw->bw, true, &w, &h);
- fbtk_set_scroll_parameters(gw->hscroll, 0,
- content_get_width(gw->bw->current_content) * scale,
+ fbtk_set_scroll_parameters(gw->hscroll, 0, w,
fbtk_get_width(gw->browser), 100);
- fbtk_set_scroll_parameters(gw->vscroll, 0,
- content_get_height(gw->bw->current_content) * scale,
+ fbtk_set_scroll_parameters(gw->vscroll, 0, h,
fbtk_get_height(gw->browser), 100);
}
@@ -1870,8 +1868,7 @@ main(int argc, char** argv)
ret = nsurl_create(feurl, &url);
if (ret == NSERROR_OK) {
- ret = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ ret = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/framebuffer/localhistory.c b/framebuffer/localhistory.c
index d482098..bb2736d 100644
--- a/framebuffer/localhistory.c
+++ b/framebuffer/localhistory.c
@@ -97,7 +97,7 @@ localhistory_click(fbtk_widget_t *widget, fbtk_callback_info *cbi)
if (cbi->event->type != NSFB_EVENT_KEY_UP)
return 0;
- history_click(glh->bw, glh->bw->history, cbi->x, cbi->y, false);
+ history_click(glh->bw->history, cbi->x, cbi->y, false);
fbtk_set_mapping(glh->window, false);
diff --git a/gtk/dialogs/about.c b/gtk/dialogs/about.c
index eb662c8..2cd2f34 100644
--- a/gtk/dialogs/about.c
+++ b/gtk/dialogs/about.c
@@ -37,8 +37,7 @@ nsgtk_about_dialog_credits(GtkWidget *button, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -60,8 +59,7 @@ nsgtk_about_dialog_licence(GtkWidget *button, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/gtk/dialogs/preferences.c b/gtk/dialogs/preferences.c
index b0a8293..a8ff674 100644
--- a/gtk/dialogs/preferences.c
+++ b/gtk/dialogs/preferences.c
@@ -22,10 +22,9 @@
#include "utils/log.h"
#include "utils/utils.h"
#include "utils/messages.h"
-#include "desktop/browser_private.h"
+#include "desktop/browser.h"
#include "utils/nsoption.h"
#include "desktop/searchweb.h"
-#include "content/hlcache.h"
#include "gtk/compat.h"
#include "gtk/window.h"
@@ -894,13 +893,7 @@ ENTRY_SIGNALS(entryHomePageURL, homepage_url)
G_MODULE_EXPORT void
nsgtk_preferences_setCurrentPage_clicked(GtkButton *button, struct ppref *priv)
{
- const gchar *url;
-
- if (priv->bw != NULL) {
- url = nsurl_access(hlcache_handle_get_url(priv->bw->current_content));
- } else {
- url = "about:blank";
- }
+ const gchar *url = nsurl_access(browser_window_get_url(priv->bw));
if (priv->entryHomePageURL != NULL) {
gtk_entry_set_text(GTK_ENTRY(priv->entryHomePageURL), url);
diff --git a/gtk/dialogs/source.c b/gtk/dialogs/source.c
index a30cc67..326e3fb 100644
--- a/gtk/dialogs/source.c
+++ b/gtk/dialogs/source.c
@@ -199,8 +199,7 @@ void nsgtk_source_dialog_init(GtkWindow *parent, struct browser_window *bw)
return;
}
- thiswindow->url = strdup(nsurl_access(hlcache_handle_get_url(
- bw->current_content)));
+ thiswindow->url = strdup(nsurl_access(browser_window_get_url(bw)));
if (thiswindow->url == NULL) {
free(thiswindow);
free(data);
@@ -314,8 +313,7 @@ void nsgtk_source_tab_init(GtkWindow *parent, struct browser_window *bw)
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
} else {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_TAB,
url,
NULL,
bw,
diff --git a/gtk/gui.c b/gtk/gui.c
index 1ebef6d..1399fb9 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -44,7 +44,7 @@
#include "content/fetchers/resource.h"
#include "content/hlcache.h"
#include "content/urldb.h"
-#include "desktop/browser_private.h"
+#include "desktop/browser.h"
#include "desktop/gui.h"
#include "desktop/netsurf.h"
#include "utils/nsoption.h"
@@ -463,8 +463,7 @@ static void gui_init(int argc, char** argv, char **respath)
/* create an initial browser window */
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -612,8 +611,8 @@ static void gui_quit(void)
static void nsgtk_select_menu_clicked(GtkCheckMenuItem *checkmenuitem,
gpointer user_data)
{
- form_select_process_selection(select_menu_bw->current_content,
- select_menu_control, (intptr_t)user_data);
+ form_select_process_selection(select_menu_control,
+ (intptr_t)user_data);
}
static void gui_create_form_select_menu(struct browser_window *bw,
diff --git a/gtk/llcache.c b/gtk/llcache.c
index 56d6d12..ef00641 100644
--- a/gtk/llcache.c
+++ b/gtk/llcache.c
@@ -19,18 +19,19 @@
#include "utils/nsurl.h"
#include "utils/log.h"
#include "desktop/gui.h"
+#include "content/llcache.h"
#include "gtk/llcache.h"
static nserror
-persist(nsurl *url, int remaining, const uint8_t *data, size_t datalen)
+persist(nsurl *url, int remaining, const uint8_t *data, const size_t datalen)
{
LOG(("Writing cache file for url:%s", nsurl_access(url)));
return NSERROR_OK;
}
static nserror
-retrieve(nsurl *url, int *remaining_out, const uint8_t **data_out, size_t *datalen_out)
+retrieve(nsurl *url, int *remaining_out, uint8_t **data_out, size_t *datalen_out)
{
return NSERROR_NOT_FOUND;
}
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index 91cbe1d..e9ef9a4 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -303,11 +303,7 @@ static void nsgtk_window_update_back_forward(struct gtk_scaffolding *g)
nsgtk_scaffolding_set_sensitivity(g);
/* update the url bar, particularly necessary when tabbing */
- if (bw->current_content != NULL &&
- hlcache_handle_get_url(bw->current_content) != NULL)
- browser_window_refresh_url_bar(bw,
- hlcache_handle_get_url(bw->current_content),
- bw->frag_id);
+ browser_window_refresh_url_bar(bw);
/* update the local history window, as well as queuing a redraw
* for it.
@@ -441,8 +437,7 @@ gboolean nsgtk_window_url_activate_event(GtkWidget *widget, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -554,8 +549,7 @@ static void nsgtk_openfile_open(const char *filename)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -582,7 +576,7 @@ MULTIHANDLER(newwindow)
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
bw,
@@ -615,8 +609,8 @@ nserror nsgtk_scaffolding_new_tab(struct gui_window *gw)
}
}
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
bw,
@@ -671,8 +665,7 @@ static gboolean nsgtk_filter_directory(const GtkFileFilterInfo *info,
MULTIHANDLER(savepage)
{
- if (nsgtk_get_browser_window(g->top_level)->current_content
- == NULL)
+ if (!browser_window_has_content(nsgtk_get_browser_window(g->top_level)))
return FALSE;
GtkWidget *fc = gtk_file_chooser_dialog_new(
@@ -691,8 +684,8 @@ MULTIHANDLER(savepage)
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fc), filter);
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fc), filter);
- res = url_nice(nsurl_access(hlcache_handle_get_url(nsgtk_get_browser_window(
- g->top_level)->current_content)), &path, false);
+ res = url_nice(nsurl_access(browser_window_get_url(
+ nsgtk_get_browser_window(g->top_level))), &path, false);
if (res != URL_FUNC_OK) {
path = strdup(messages_get("SaveText"));
if (path == NULL) {
@@ -751,7 +744,7 @@ MULTIHANDLER(pdf)
LOG(("Print preview (generating PDF) started."));
- res = url_nice(nsurl_access(hlcache_handle_get_url(bw->current_content)),
+ res = url_nice(nsurl_access(browser_window_get_url(bw)),
&url_name, true);
if (res != URL_FUNC_OK) {
warn_user(messages_get(res == URL_FUNC_NOMEM ? "NoMemory"
@@ -813,8 +806,7 @@ MULTIHANDLER(pdf)
MULTIHANDLER(plaintext)
{
- if (nsgtk_get_browser_window(g->top_level)->current_content
- == NULL)
+ if (!browser_window_has_content(nsgtk_get_browser_window(g->top_level)))
return FALSE;
GtkWidget *fc = gtk_file_chooser_dialog_new(
@@ -826,8 +818,9 @@ MULTIHANDLER(plaintext)
char *filename;
url_func_result res;
- res = url_nice(nsurl_access(hlcache_handle_get_url(nsgtk_get_browser_window(
- g->top_level)->current_content)), &filename, false);
+ res = url_nice(nsurl_access(browser_window_get_url(
+ nsgtk_get_browser_window(g->top_level))),
+ &filename, false);
if (res != URL_FUNC_OK) {
filename = strdup(messages_get("SaveText"));
if (filename == NULL) {
@@ -964,8 +957,7 @@ MENUHANDLER(savelink)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -991,12 +983,9 @@ MENUHANDLER(link_openwin)
error = nsurl_create(current_menu_ctx.link_url, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
- url,
- NULL,
- bw,
- NULL);
+ error = browser_window_create(
+ BW_CREATE_CLONE | BW_CREATE_HISTORY,
+ url, NULL, bw, NULL);
nsurl_unref(url);
}
if (error != NSERROR_OK) {
@@ -1024,13 +1013,9 @@ MENUHANDLER(link_opentab)
error = nsurl_create(current_menu_ctx.link_url, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
- url,
- NULL,
- bw,
- NULL);
+ error = browser_window_create(BW_CREATE_CLONE |
+ BW_CREATE_HISTORY | BW_CREATE_TAB,
+ url, NULL, bw, NULL);
nsurl_unref(url);
}
if (error != NSERROR_OK) {
@@ -1427,7 +1412,7 @@ MULTIHANDLER(back)
nsgtk_search_set_forward_state(true, bw);
nsgtk_search_set_back_state(true, bw);
- history_back(bw, bw->history);
+ history_back(bw->history, false);
nsgtk_window_update_back_forward(g);
return TRUE;
@@ -1447,7 +1432,7 @@ MULTIHANDLER(forward)
nsgtk_search_set_forward_state(true, bw);
nsgtk_search_set_back_state(true, bw);
- history_forward(bw, bw->history);
+ history_forward(bw->history, false);
nsgtk_window_update_back_forward(g);
return TRUE;
@@ -1471,8 +1456,7 @@ MULTIHANDLER(home)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1524,10 +1508,9 @@ MULTIHANDLER(addbookmarks)
{
struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- if (bw == NULL || bw->current_content == NULL ||
- hlcache_handle_get_url(bw->current_content) == NULL)
+ if (bw == NULL || !browser_window_has_content(bw))
return TRUE;
- hotlist_add_url(hlcache_handle_get_url(bw->current_content));
+ hotlist_add_url(browser_window_get_url(bw));
return TRUE;
}
@@ -1589,8 +1572,7 @@ MULTIHANDLER(contents)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1611,8 +1593,7 @@ MULTIHANDLER(guide)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1633,8 +1614,7 @@ MULTIHANDLER(info)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1747,8 +1727,7 @@ static gboolean nsgtk_history_button_press_event(GtkWidget *widget,
LOG(("X=%g, Y=%g", event->x, event->y));
- history_click(bw, bw->history,
- event->x, event->y, false);
+ history_click(bw->history, event->x, event->y, false);
return TRUE;
}
@@ -2541,13 +2520,9 @@ void nsgtk_scaffolding_initial_sensitivity(struct gtk_scaffolding *g)
*/
static bool is_menu_over_link(struct gtk_scaffolding *g, gdouble x, gdouble y)
{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-
- if ((bw->current_content != NULL) &&
- (content_get_type(bw->current_content) == CONTENT_HTML)) {
- browser_window_get_contextual_content(bw, x, y,
- ¤t_menu_ctx);
- }
+ browser_window_get_contextual_content(
+ nsgtk_get_browser_window(g->top_level),
+ x, y, ¤t_menu_ctx);
if (current_menu_ctx.link_url == NULL)
return false;
diff --git a/gtk/search.c b/gtk/search.c
index d4fbadc..4e3c2ff 100644
--- a/gtk/search.c
+++ b/gtk/search.c
@@ -32,7 +32,7 @@
#include "utils/config.h"
#include "content/content.h"
#include "content/hlcache.h"
-#include "desktop/browser_private.h"
+#include "desktop/browser.h"
#include "desktop/gui.h"
#include "desktop/search.h"
#include "desktop/searchweb.h"
@@ -57,8 +57,8 @@ static struct gui_search_callbacks nsgtk_search_callbacks = {
gboolean nsgtk_search_forward_button_clicked(GtkWidget *widget, gpointer data)
{
struct gtk_scaffolding *g = (struct gtk_scaffolding *)data;
- struct browser_window *bw = nsgtk_get_browser_window(
- nsgtk_scaffolding_top_level(g));
+ struct gui_window *gw = nsgtk_scaffolding_top_level(g);
+ struct browser_window *bw = nsgtk_get_browser_window(gw);
assert(bw);
@@ -70,7 +70,7 @@ gboolean nsgtk_search_forward_button_clicked(GtkWidget *widget, gpointer data)
nsgtk_scaffolding_search(g)->checkAll)) ?
SEARCH_FLAG_SHOWALL : 0);
- browser_window_search(bw, &nsgtk_search_callbacks, (void *)bw, flags,
+ browser_window_search(bw, &nsgtk_search_callbacks, (void *)gw, flags,
gtk_entry_get_text(nsgtk_scaffolding_search(g)->entry));
return TRUE;
}
@@ -80,8 +80,8 @@ gboolean nsgtk_search_forward_button_clicked(GtkWidget *widget, gpointer data)
gboolean nsgtk_search_back_button_clicked(GtkWidget *widget, gpointer data)
{
struct gtk_scaffolding *g = (struct gtk_scaffolding *)data;
- struct browser_window *bw = nsgtk_get_browser_window(
- nsgtk_scaffolding_top_level(g));
+ struct gui_window *gw = nsgtk_scaffolding_top_level(g);
+ struct browser_window *bw = nsgtk_get_browser_window(gw);
assert(bw);
@@ -93,7 +93,7 @@ gboolean nsgtk_search_back_button_clicked(GtkWidget *widget, gpointer data)
nsgtk_scaffolding_search(g)->checkAll)) ?
SEARCH_FLAG_SHOWALL : 0);
- browser_window_search(bw, &nsgtk_search_callbacks, (void *)bw, flags,
+ browser_window_search(bw, &nsgtk_search_callbacks, (void *)gw, flags,
gtk_entry_get_text(nsgtk_scaffolding_search(g)->entry));
return TRUE;
}
@@ -112,8 +112,8 @@ gboolean nsgtk_search_close_button_clicked(GtkWidget *widget, gpointer data)
gboolean nsgtk_search_entry_changed(GtkWidget *widget, gpointer data)
{
nsgtk_scaffolding *g = (nsgtk_scaffolding *)data;
- struct browser_window *bw = nsgtk_get_browser_window(
- nsgtk_scaffolding_top_level(g));
+ struct gui_window *gw = nsgtk_scaffolding_top_level(g);
+ struct browser_window *bw = nsgtk_get_browser_window(gw);
assert(bw != NULL);
@@ -128,7 +128,7 @@ gboolean nsgtk_search_entry_changed(GtkWidget *widget, gpointer data)
nsgtk_scaffolding_search(g)->checkAll)) ?
SEARCH_FLAG_SHOWALL : 0);
- browser_window_search(bw, &nsgtk_search_callbacks, (void *)bw, flags,
+ browser_window_search(bw, &nsgtk_search_callbacks, (void *)gw, flags,
gtk_entry_get_text(nsgtk_scaffolding_search(g)->entry));
return TRUE;
}
@@ -138,8 +138,8 @@ gboolean nsgtk_search_entry_changed(GtkWidget *widget, gpointer data)
gboolean nsgtk_search_entry_activate(GtkWidget *widget, gpointer data)
{
nsgtk_scaffolding *g = (nsgtk_scaffolding *)data;
- struct browser_window *bw = nsgtk_get_browser_window(
- nsgtk_scaffolding_top_level(g));
+ struct gui_window *gw = nsgtk_scaffolding_top_level(g);
+ struct browser_window *bw = nsgtk_get_browser_window(gw);
assert(bw);
@@ -151,7 +151,7 @@ gboolean nsgtk_search_entry_activate(GtkWidget *widget, gpointer data)
nsgtk_scaffolding_search(g)->checkAll)) ?
SEARCH_FLAG_SHOWALL : 0);
- browser_window_search(bw, &nsgtk_search_callbacks, (void *)bw, flags,
+ browser_window_search(bw, &nsgtk_search_callbacks, (void *)gw, flags,
gtk_entry_get_text(nsgtk_scaffolding_search(g)->entry));
return FALSE;
}
@@ -238,9 +238,9 @@ void nsgtk_search_add_recent(const char *string, void *p)
void nsgtk_search_set_forward_state(bool active, void *p)
{
- struct browser_window *bw = (struct browser_window *)p;
- if ((bw != NULL) && (bw->window != NULL)) {
- struct gtk_scaffolding *g = nsgtk_get_scaffold(bw->window);
+ struct gui_window *gw = (struct gui_window *)p;
+ if (gw != NULL && nsgtk_get_browser_window(gw) != NULL) {
+ struct gtk_scaffolding *g = nsgtk_get_scaffold(gw);
gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_search(
g)->buttons[1]), active);
}
@@ -254,9 +254,9 @@ void nsgtk_search_set_forward_state(bool active, void *p)
void nsgtk_search_set_back_state(bool active, void *p)
{
- struct browser_window *bw = (struct browser_window *)p;
- if ((bw != NULL) && (bw->window != NULL)) {
- struct gtk_scaffolding *g = nsgtk_get_scaffold(bw->window);
+ struct gui_window *gw = (struct gui_window *)p;
+ if (gw != NULL && nsgtk_get_browser_window(gw) != NULL) {
+ struct gtk_scaffolding *g = nsgtk_get_scaffold(gw);
gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_search(
g)->buttons[0]), active);
}
diff --git a/gtk/toolbar.c b/gtk/toolbar.c
index 8cff4ed..d4a197b 100644
--- a/gtk/toolbar.c
+++ b/gtk/toolbar.c
@@ -18,12 +18,11 @@
#include <gtk/gtk.h>
-#include "desktop/browser_private.h"
+#include "desktop/browser.h"
#include "desktop/searchweb.h"
#include "utils/log.h"
#include "utils/messages.h"
#include "utils/utils.h"
-#include "content/hlcache.h"
#include "gtk/toolbar.h"
#include "gtk/gui.h"
@@ -422,21 +421,9 @@ void nsgtk_toolbar_close(nsgtk_scaffolding *g)
nsgtk_window_get_signalhandler(
nsgtk_scaffolding_top_level(list),
NSGTK_WINDOW_SIGNAL_REDRAW));
- if ((nsgtk_get_browser_window(nsgtk_scaffolding_top_level(
- list))->current_content != NULL) &&
- (hlcache_handle_get_url(nsgtk_get_browser_window(
- nsgtk_scaffolding_top_level(list))->
- current_content) != NULL))
- browser_window_refresh_url_bar(
- nsgtk_get_browser_window(
- nsgtk_scaffolding_top_level(list)),
- hlcache_handle_get_url(
- nsgtk_get_browser_window(
- nsgtk_scaffolding_top_level(list))->
- current_content),
- nsgtk_get_browser_window(
- nsgtk_scaffolding_top_level(list))->
- frag_id);
+ browser_window_refresh_url_bar(
+ nsgtk_get_browser_window(
+ nsgtk_scaffolding_top_level(list)));
if (list != g)
gtk_widget_set_sensitive(GTK_WIDGET(
diff --git a/gtk/window.c b/gtk/window.c
index 015ef4d..038622d 100644
--- a/gtk/window.c
+++ b/gtk/window.c
@@ -155,7 +155,7 @@ struct gui_window *nsgtk_window_iterate(struct gui_window *g)
float nsgtk_get_scale_for_gui(struct gui_window *g)
{
- return g->bw->scale;
+ return browser_window_get_scale(g->bw);
}
#if GTK_CHECK_VERSION(3,0,0)
@@ -304,7 +304,8 @@ static gboolean nsgtk_window_motion_notify_event(GtkWidget *widget,
g->mouse.state ^= BROWSER_MOUSE_MOD_2;
browser_window_mouse_track(g->bw, g->mouse.state,
- event->x / g->bw->scale, event->y / g->bw->scale);
+ event->x / browser_window_get_scale(g->bw),
+ event->y / browser_window_get_scale(g->bw));
return TRUE;
}
@@ -318,8 +319,8 @@ static gboolean nsgtk_window_button_press_event(GtkWidget *widget,
gtk_widget_hide(GTK_WIDGET(nsgtk_scaffolding_history_window(
g->scaffold)->window));
- g->mouse.pressed_x = event->x / g->bw->scale;
- g->mouse.pressed_y = event->y / g->bw->scale;
+ g->mouse.pressed_x = event->x / browser_window_get_scale(g->bw);
+ g->mouse.pressed_y = event->y / browser_window_get_scale(g->bw);
switch (event->button) {
case 1: /* Left button, usually. Pass to core as BUTTON 1. */
@@ -385,11 +386,12 @@ static gboolean nsgtk_window_button_release_event(GtkWidget *widget,
if (g->mouse.state & (BROWSER_MOUSE_CLICK_1 | BROWSER_MOUSE_CLICK_2)) {
browser_window_mouse_click(g->bw, g->mouse.state,
- event->x / g->bw->scale,
- event->y / g->bw->scale);
+ event->x / browser_window_get_scale(g->bw),
+ event->y / browser_window_get_scale(g->bw));
} else {
- browser_window_mouse_track(g->bw, 0, event->x / g->bw->scale,
- event->y / g->bw->scale);
+ browser_window_mouse_track(g->bw, 0,
+ event->x / browser_window_get_scale(g->bw),
+ event->y / browser_window_get_scale(g->bw));
}
g->mouse.state = 0;
@@ -440,9 +442,9 @@ nsgtk_window_scroll_event(GtkWidget *widget,
deltay *= nsgtk_adjustment_get_step_increment(vscroll);
if (browser_window_scroll_at_point(g->bw,
- event->x / g->bw->scale,
- event->y / g->bw->scale,
- deltax, deltay) != true) {
+ event->x / browser_window_get_scale(g->bw),
+ event->y / browser_window_get_scale(g->bw),
+ deltax, deltay) != true) {
/* core did not handle event so change adjustments */
@@ -661,8 +663,8 @@ static void window_destroy(GtkWidget *widget, gpointer data)
/* Core interface documented in desktop/gui.h to create a gui_window */
static struct gui_window *
gui_window_create(struct browser_window *bw,
- struct browser_window *clone,
- bool new_tab)
+ struct gui_window *existing,
+ gui_window_create_flags flags)
{
struct gui_window *g; /**< what we're creating to return */
GError* error = NULL;
@@ -691,16 +693,17 @@ gui_window_create(struct browser_window *bw,
g->bw = bw;
g->mouse.state = 0;
g->current_pointer = GUI_POINTER_DEFAULT;
- if (clone != NULL) {
- bw->scale = clone->scale;
+ if (flags & GW_CREATE_CLONE) {
+ assert(existing != NULL);
+ bw->scale = existing->bw->scale;
} else {
- bw->scale = (float) nsoption_int(scale) / 100.0;
+ bw->scale = nsoption_int(scale) / 100;
}
/* attach scaffold */
- if (new_tab) {
- assert(clone != NULL);
- g->scaffold = clone->window->scaffold;
+ if (flags & GW_CREATE_TAB) {
+ assert(existing != NULL);
+ g->scaffold = existing->scaffold;
} else {
/* Now construct and attach a scaffold */
g->scaffold = nsgtk_new_scaffolding(g);
@@ -944,18 +947,19 @@ static void gui_window_redraw_window(struct gui_window *g)
static void gui_window_update_box(struct gui_window *g, const struct rect *rect)
{
int sx, sy;
- hlcache_handle *c = g->bw->current_content;
+ float scale;
- if (c == NULL)
+ if (!browser_window_has_content(g->bw))
return;
gui_window_get_scroll(g, &sx, &sy);
+ scale = browser_window_get_scale(g->bw);
gtk_widget_queue_draw_area(GTK_WIDGET(g->layout),
- rect->x0 * g->bw->scale - sx,
- rect->y0 * g->bw->scale - sy,
- (rect->x1 - rect->x0) * g->bw->scale,
- (rect->y1 - rect->y0) * g->bw->scale);
+ rect->x0 * scale - sx,
+ rect->y0 * scale - sy,
+ (rect->x1 - rect->x0) * scale,
+ (rect->y1 - rect->y0) * scale);
}
static void gui_window_set_status(struct gui_window *g, const char *text)
@@ -993,12 +997,11 @@ static void gui_window_set_scroll(struct gui_window *g, int sx, int sy)
static void gui_window_update_extent(struct gui_window *g)
{
- if (!g->bw->current_content)
- return;
+ int w, h;
- gtk_layout_set_size(g->layout,
- content_get_width(g->bw->current_content) * g->bw->scale,
- content_get_height(g->bw->current_content) * g->bw->scale);
+ if (browser_window_get_extents(g->bw, true, &w, &h) == NSERROR_OK) {
+ gtk_layout_set_size(g->layout, w, h);
+ }
}
static GdkCursor *nsgtk_create_menu_cursor(void)
@@ -1125,8 +1128,9 @@ static void gui_window_get_dimensions(struct gui_window *g, int *width, int *hei
*height = alloc.height;
if (scaled) {
- *width /= g->bw->scale;
- *height /= g->bw->scale;
+ float scale = browser_window_get_scale(g->bw);
+ *width /= scale;
+ *height /= scale;
}
LOG(("width: %i", *width));
LOG(("height: %i", *height));
diff --git a/javascript/jsapi/location.bnd b/javascript/jsapi/location.bnd
index af76836..f64f633 100644
--- a/javascript/jsapi/location.bnd
+++ b/javascript/jsapi/location.bnd
@@ -62,8 +62,7 @@ operation assign %{
browser_window_navigate(bw,
joined,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -84,7 +83,7 @@ operation replace %{
browser_window_navigate(bw,
joined,
NULL,
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_NONE,
NULL,
NULL,
NULL);
@@ -129,7 +128,7 @@ setter href %{
browser_window_navigate(bw,
joined,
NULL,
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_NONE,
NULL,
NULL,
NULL);
diff --git a/monkey/browser.c b/monkey/browser.c
index 85e25d9..e61d6de 100644
--- a/monkey/browser.c
+++ b/monkey/browser.c
@@ -89,8 +89,8 @@ monkey_kill_browser_windows(void)
static struct gui_window *
gui_window_create(struct browser_window *bw,
- struct browser_window *clone,
- bool new_tab)
+ struct gui_window *existing,
+ gui_window_create_flags flags)
{
struct gui_window *ret = calloc(sizeof(*ret), 1);
if (ret == NULL)
@@ -102,8 +102,9 @@ gui_window_create(struct browser_window *bw,
ret->width = 800;
ret->height = 600;
- fprintf(stdout, "WINDOW NEW WIN %u FOR %p CLONE %p NEWTAB %s\n",
- ret->win_num, bw, clone, new_tab ? "TRUE" : "FALSE");
+ fprintf(stdout, "WINDOW NEW WIN %u FOR %p EXISTING %p NEWTAB %s CLONE %s\n",
+ ret->win_num, bw, existing, flags & GW_CREATE_TAB ? "TRUE" : "FALSE",
+ flags & GW_CREATE_CLONE ? "TRUE" : "FALSE");
fprintf(stdout, "WINDOW SIZE WIN %u WIDTH %d HEIGHT %d\n",
ret->win_num, ret->width, ret->height);
@@ -349,8 +350,7 @@ monkey_window_handle_new(int argc, char **argv)
error = nsurl_create(argv[2], &url);
}
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -409,8 +409,7 @@ monkey_window_handle_go(int argc, char **argv)
browser_window_navigate(gw->bw,
url,
ref_url,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/render/box_textarea.c b/render/box_textarea.c
index 099dcc8..298406a 100644
--- a/render/box_textarea.c
+++ b/render/box_textarea.c
@@ -206,7 +206,7 @@ static void box_textarea_callback(void *data, struct textarea_msg *msg)
break;
case TEXTAREA_MSG_TEXT_MODIFIED:
- form_gadget_update_value(d->html, gadget,
+ form_gadget_update_value(gadget,
strndup(msg->data.modified.text,
msg->data.modified.len));
break;
diff --git a/render/form.c b/render/form.c
index 905401a..d02240f 100644
--- a/render/form.c
+++ b/render/form.c
@@ -103,6 +103,7 @@ static void form_select_menu_scroll_callback(void *client_data,
* \param method method and enctype
* \param charset acceptable encodings for form submission, or NULL
* \param doc_charset encoding of containing document, or NULL
+ * \param html HTML content containing form
* \return a new structure, or NULL on memory exhaustion
*/
struct form *form_new(void *node, const char *action, const char *target,
@@ -153,6 +154,18 @@ struct form *form_new(void *node, const char *action, const char *target,
return form;
}
+
+/**
+ * Set form's html content, so it can ask to redraw.
+ *
+ * \param form form to set html content for
+ * \param html html content for form
+ */
+void form_set_html_content(struct form *f, struct html_content *html)
+{
+ f->html = html;
+}
+
/**
* Free a form, and any controls it owns.
*
@@ -1381,14 +1394,12 @@ static void form__select_process_selection(html_content *html,
}
-void form_select_process_selection(hlcache_handle *h,
- struct form_control *control, int item)
+void form_select_process_selection(struct form_control *control, int item)
{
- assert(h != NULL);
+ assert(control != NULL);
+ assert(control->form != NULL);
- form__select_process_selection(
- (html_content *)hlcache_handle_get_content(h),
- control, item);
+ form__select_process_selection(control->form->html, control, item);
}
/**
@@ -1616,12 +1627,10 @@ void form_select_menu_callback(void *client_data,
* \param radio form control of type GADGET_RADIO
*/
-void form_radio_set(html_content *html,
- struct form_control *radio)
+void form_radio_set(struct form_control *radio)
{
struct form_control *control;
- assert(html);
assert(radio);
if (!radio->form)
return;
@@ -1641,13 +1650,13 @@ void form_radio_set(html_content *html,
if (control->selected) {
control->selected = false;
dom_html_input_element_set_checked(control->node, false);
- html__redraw_a_box(html, control->box);
+ html__redraw_a_box(radio->form->html, control->box);
}
}
radio->selected = true;
dom_html_input_element_set_checked(radio->node, true);
- html__redraw_a_box(html, radio->box);
+ html__redraw_a_box(radio->form->html, radio->box);
}
@@ -1702,8 +1711,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_query,
page_url,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1723,8 +1731,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_url,
page_url,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
data,
NULL,
NULL);
@@ -1734,8 +1741,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_url,
page_url,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
success,
NULL);
@@ -1748,8 +1754,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
free(data);
}
-void form_gadget_update_value(struct html_content *html,
- struct form_control *control, char *value)
+void form_gadget_update_value(struct form_control *control, char *value)
{
switch (control->type) {
case GADGET_HIDDEN:
diff --git a/render/form.h b/render/form.h
index 84377a5..21829b9 100644
--- a/render/form.h
+++ b/render/form.h
@@ -46,6 +46,7 @@ typedef enum {
/** HTML form. */
struct form {
+ struct html_content *html; /**< HTML content containing form */
void *node; /**< Corresponding DOM node */
char *action; /**< Absolute URL to submit to. */
@@ -156,6 +157,7 @@ typedef void(*select_menu_redraw_callback)(void *client_data,
struct form *form_new(void *node, const char *action, const char *target,
form_method method, const char *charset,
const char *doc_charset);
+void form_set_html_content(struct form *f, struct html_content *html);
void form_free(struct form *form);
struct form_control *form_new_control(void *node, form_control_type type);
void form_add_control(struct form *form, struct form_control *control);
@@ -187,13 +189,11 @@ void form_select_mouse_drag_end(struct form_control *control,
browser_mouse_state mouse, int x, int y);
void form_select_get_dimensions(struct form_control *control,
int *width, int *height);
-void form_select_process_selection(struct hlcache_handle *h,
- struct form_control *control, int item);
+void form_select_process_selection(struct form_control *control, int item);
void form_submit(nsurl *page_url, struct browser_window *target,
struct form *form, struct form_control *submit_button);
-void form_radio_set(struct html_content *html, struct form_control *radio);
+void form_radio_set(struct form_control *radio);
-void form_gadget_update_value(struct html_content *html,
- struct form_control *control, char *value);
+void form_gadget_update_value(struct form_control *control, char *value);
#endif
diff --git a/render/html.c b/render/html.c
index f9d8858..8d3daf1 100644
--- a/render/html.c
+++ b/render/html.c
@@ -731,6 +731,7 @@ html_create_html_data(html_content *c, const http_parameter *params)
dom_hubbub_error error;
c->parser = NULL;
+ c->parse_completed = false;
c->document = NULL;
c->quirks = DOM_DOCUMENT_QUIRKS_MODE_NONE;
c->encoding = NULL;
@@ -1070,16 +1071,35 @@ html_begin_conversion(html_content *htmlc)
dom_string *node_name = NULL;
dom_hubbub_error error;
- LOG(("Completing parse"));
- /* complete parsing */
- error = dom_hubbub_parser_completed(htmlc->parser);
- if (error != DOM_HUBBUB_OK) {
- LOG(("Parsing failed"));
+ /* The act of completing the parse can result in additional data
+ * being flushed through the parser. This may result in new style or
+ * script nodes, upon which the conversion depends. Thus, once we
+ * have completed the parse, we must check again to see if we can
+ * begin the conversion. If we can't, we must stop and wait for the
+ * new styles/scripts to be processed. Once they have been processed,
+ * we will be called again to begin the conversion for real. Thus,
+ * we must also ensure that we don't attempt to complete the parse
+ * multiple times, so store a flag to indicate that parsing is
+ * complete to avoid repeating the completion pointlessly.
+ */
+ if (htmlc->parse_completed == false) {
+ LOG(("Completing parse"));
+ /* complete parsing */
+ error = dom_hubbub_parser_completed(htmlc->parser);
+ if (error != DOM_HUBBUB_OK) {
+ LOG(("Parsing failed"));
+
+ content_broadcast_errorcode(&htmlc->base,
+ libdom_hubbub_error_to_nserror(error));
- content_broadcast_errorcode(&htmlc->base,
- libdom_hubbub_error_to_nserror(error));
+ return false;
+ }
+ htmlc->parse_completed = true;
+ }
- return false;
+ if (html_can_begin_conversion(htmlc) == false) {
+ /* We can't proceed (see commentary above) */
+ return true;
}
/* Give up processing if we've been aborted */
@@ -1182,6 +1202,9 @@ html_begin_conversion(html_content *htmlc)
return false;
}
}
+
+ /* Tell each form what content its in, so it can redraw */
+ form_set_html_content(f, htmlc);
}
dom_node_unref(html);
@@ -1780,7 +1803,7 @@ static void html__set_file_gadget_filename(struct content *c,
return;
}
- form_gadget_update_value(html, gadget, utf8_fn);
+ form_gadget_update_value(gadget, utf8_fn);
/* corestring_dom___ns_key_file_name_node_data */
if (dom_node_set_user_data((dom_node *)file_box->gadget->node,
diff --git a/render/html_interaction.c b/render/html_interaction.c
index 5304c02..a2baf2d 100644
--- a/render/html_interaction.c
+++ b/render/html_interaction.c
@@ -671,7 +671,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
case GADGET_RADIO:
status = messages_get("FormRadio");
if (mouse & BROWSER_MOUSE_CLICK_1)
- form_radio_set(html, gadget);
+ form_radio_set(gadget);
break;
case GADGET_IMAGE:
if (mouse & BROWSER_MOUSE_CLICK_1) {
@@ -823,8 +823,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
browser_window_navigate(bw,
url,
content_get_url(c),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -1003,8 +1002,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
browser_window_navigate(browser_window_find_target(bw, target, mouse),
url,
content_get_url(c),
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/render/html_internal.h b/render/html_internal.h
index 43fce9b..e7768e3 100644
--- a/render/html_internal.h
+++ b/render/html_internal.h
@@ -71,6 +71,7 @@ typedef struct html_content {
struct content base;
dom_hubbub_parser *parser; /**< Parser object handle */
+ bool parse_completed; /**< Whether the parse has been completed */
/** Document tree */
dom_document *document;
diff --git a/riscos/dialog.c b/riscos/dialog.c
index 4347023..d259c87 100644
--- a/riscos/dialog.c
+++ b/riscos/dialog.c
@@ -775,8 +775,7 @@ bool ro_gui_dialog_openurl_apply(wimp_w w) {
error = nsurl_create(url2, &url);
free(url2);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/riscos/gui.c b/riscos/gui.c
index 83add25..1663c17 100644
--- a/riscos/gui.c
+++ b/riscos/gui.c
@@ -941,8 +941,7 @@ static void gui_init2(int argc, char** argv)
errorns = nsurl_create(url, &urlns);
if (errorns == NSERROR_OK) {
- errorns = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ errorns = browser_window_create(BW_CREATE_HISTORY,
urlns,
NULL,
NULL,
@@ -1516,8 +1515,7 @@ void ro_msg_dataload(wimp_message *message)
error = browser_window_navigate(g->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1529,9 +1527,7 @@ void ro_msg_dataload(wimp_message *message)
ro_gui_hotlist_url_drop(message, urltxt);
#endif
} else {
- error = browser_window_create(
- BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -1906,8 +1902,7 @@ void ro_msg_dataopen(wimp_message *message)
free(url);
if (error == NSERROR_OK) {
/* create a new window with the file */
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
urlns,
NULL,
NULL,
diff --git a/riscos/gui/url_bar.c b/riscos/gui/url_bar.c
index 304a6bf..b757df3 100644
--- a/riscos/gui/url_bar.c
+++ b/riscos/gui/url_bar.c
@@ -857,8 +857,7 @@ bool ro_gui_url_bar_menu_select(struct url_bar *url_bar, wimp_i i,
browser_window_navigate(g->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/riscos/history.c b/riscos/history.c
index a4aedc6..959f4ce 100644
--- a/riscos/history.c
+++ b/riscos/history.c
@@ -348,7 +348,7 @@ bool ro_gui_history_click(wimp_pointer *pointer)
x = (pointer->pos.x - (state.visible.x0 - state.xscroll)) / 2;
y = -(pointer->pos.y - (state.visible.y1 - state.yscroll)) / 2;
- history_click(history_bw, history_current, x, y,
+ history_click(history_current, x, y,
pointer->buttons == wimp_CLICK_ADJUST);
return true;
diff --git a/riscos/iconbar.c b/riscos/iconbar.c
index 7e3d732..e0949b3 100644
--- a/riscos/iconbar.c
+++ b/riscos/iconbar.c
@@ -135,8 +135,7 @@ bool ro_gui_iconbar_click(wimp_pointer *pointer)
/* create an initial browser window */
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -206,9 +205,7 @@ bool ro_gui_iconbar_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_CONTENTS:
error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(
- BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/riscos/uri.c b/riscos/uri.c
index 70f75bc..bf789ee 100644
--- a/riscos/uri.c
+++ b/riscos/uri.c
@@ -74,8 +74,7 @@ void ro_uri_message_received(wimp_message *msg)
error = nsurl_create(uri_requested, &url);
free(uri_requested);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/riscos/url_complete.c b/riscos/url_complete.c
index 01774f6..4a5d2d5 100644
--- a/riscos/url_complete.c
+++ b/riscos/url_complete.c
@@ -734,8 +734,7 @@ bool ro_gui_url_complete_click(wimp_pointer *pointer)
browser_window_navigate(g->bw,
url_complete_matches[url_complete_matches_selection],
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/riscos/url_protocol.c b/riscos/url_protocol.c
index 171b620..76d4031 100644
--- a/riscos/url_protocol.c
+++ b/riscos/url_protocol.c
@@ -126,8 +126,7 @@ void ro_url_message_received(wimp_message *message)
}
/* create new browser window */
- errorns = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ errorns = browser_window_create(BW_CREATE_HISTORY,
nsurl,
NULL,
NULL,
diff --git a/riscos/window.c b/riscos/window.c
index 0116a97..bf05298 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -135,8 +135,6 @@ static bool ro_gui_window_navigate_up(struct gui_window *g, const char *url);
static void ro_gui_window_action_home(struct gui_window *g);
static void ro_gui_window_action_new_window(struct gui_window *g);
static void ro_gui_window_action_local_history(struct gui_window *g);
-static void ro_gui_window_action_navigate_back_new(struct gui_window *g);
-static void ro_gui_window_action_navigate_forward_new(struct gui_window *g);
static void ro_gui_window_action_save(struct gui_window *g,
gui_save_type save_type);
static void ro_gui_window_action_search(struct gui_window *g);
@@ -154,8 +152,9 @@ static void ro_gui_window_update_theme(void *data, bool ok);
static bool ro_gui_window_import_text(struct gui_window *g,
const char *filename);
-static void ro_gui_window_clone_options(struct browser_window *new_bw,
- struct browser_window *old_bw);
+static void ro_gui_window_clone_options(
+ struct gui_window *new_gui,
+ struct gui_window *old_gui);
static bool ro_gui_window_prepare_form_select_menu(struct browser_window *bw,
struct form_control *control);
@@ -402,14 +401,15 @@ static void gui_window_place_caret(struct gui_window *g, int x, int y, int heigh
/**
* Create and open a new browser window.
*
- * \param bw The browser window structure to update
- * \param clone The browser window to clone options from, or NULL for default
- * \param new_tab Determines if new browser context should be a tab or window.
- * \return A gui window, or NULL on error and error reported
+ * \param bw bw to create gui_window for
+ * \param existing an existing gui_window, may be NULL
+ * \param flags flags for gui window creation
+ * \return gui window, or NULL on error
*/
static struct gui_window *gui_window_create(struct browser_window *bw,
- struct browser_window *clone, bool new_tab)
+ struct gui_window *existing,
+ gui_window_create_flags flags)
{
int screen_width, screen_height, win_width, win_height, scroll_width;
static int window_count = 2;
@@ -418,7 +418,6 @@ static struct gui_window *gui_window_create(struct browser_window *bw,
os_error *error;
bool open_centred = true;
struct gui_window *g;
- struct browser_window *top;
g = malloc(sizeof *g);
if (!g) {
@@ -435,9 +434,10 @@ static struct gui_window *gui_window_create(struct browser_window *bw,
g->iconise_icon = -1;
/* Set the window position */
- if (clone && clone->window && nsoption_bool(window_size_clone)) {
- for (top = clone; top->parent; top = top->parent);
- state.w = top->window->window;
+ if (existing != NULL &&
+ flags & GW_CREATE_CLONE &&
+ nsoption_bool(window_size_clone)) {
+ state.w = existing->window;
error = xwimp_get_window_state(&state);
if (error) {
LOG(("xwimp_get_window_state: 0x%x: %s",
@@ -596,7 +596,8 @@ static struct gui_window *gui_window_create(struct browser_window *bw,
/* Set the window options */
bw->window = g;
- ro_gui_window_clone_options(bw, clone);
+ bw->scale = ((float)nsoption_int(scale)) / 100;
+ ro_gui_window_clone_options(g, existing);
ro_gui_window_update_toolbar_buttons(g);
/* Open the window at the top of the stack */
@@ -1320,11 +1321,9 @@ void gui_window_set_extent(struct gui_window *g, int width, int height)
{
int screen_width;
int toolbar_height = 0;
- hlcache_handle *h;
wimp_window_state state;
os_error *error;
- h = g->bw->current_content;
if (g->toolbar)
toolbar_height = ro_toolbar_full_height(g->toolbar);
@@ -1356,9 +1355,11 @@ void gui_window_set_extent(struct gui_window *g, int width, int height)
height -= ro_get_hscroll_height(g->window);
height -= ro_get_title_height(g->window);
}
- if (h) {
- width = max(width, content_get_width(h) * 2 * g->bw->scale);
- height = max(height, content_get_height(h) * 2 * g->bw->scale);
+ if (browser_window_has_content(g->bw)) {
+ int w, h;
+ browser_window_get_extents(g->bw, true, &w, &h);
+ width = max(width, w * 2);
+ height = max(height, h * 2);
}
os_box extent = { 0, -height, width, toolbar_height };
error = xwimp_set_extent(g->window, &extent);
@@ -1779,15 +1780,12 @@ bool ro_gui_window_click(wimp_pointer *pointer)
bool ro_gui_window_keypress(wimp_key *key)
{
struct gui_window *g;
- hlcache_handle *h;
uint32_t c = (uint32_t) key->c;
g = (struct gui_window *) ro_gui_wimp_event_get_user_data(key->w);
if (g == NULL)
return false;
- h = g->bw->current_content;
-
/* First send the key to the browser window, eg. form fields. */
if ((unsigned)c < 0x20 || (0x7f <= c && c <= 0x9f) ||
@@ -1925,8 +1923,7 @@ bool ro_gui_window_handle_local_keypress(struct gui_window *g, wimp_key *key,
{
error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2675,8 +2672,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_CONTENTS:
error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2688,8 +2684,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_GUIDE:
error = nsurl_create("http://www.netsurf-browser.org/documentation/guide", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2701,8 +2696,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_INFORMATION:
error = nsurl_create("http://www.netsurf-browser.org/documentation/info", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2714,8 +2708,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_CREDITS:
error = nsurl_create("about:credits", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2727,8 +2720,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_LICENCE:
error = nsurl_create("about:licence", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2839,8 +2831,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
error = browser_window_navigate(bw,
url,
hlcache_handle_get_url(h),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -2853,8 +2844,9 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
if (current_menu_url != NULL) {
error = nsurl_create(current_menu_url, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(
+ BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
url,
hlcache_handle_get_url(h),
bw,
@@ -2947,11 +2939,11 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
break;
case BROWSER_NAVIGATE_BACK:
if (bw != NULL && bw->history != NULL)
- history_back(bw, bw->history);
+ history_back(bw->history, false);
break;
case BROWSER_NAVIGATE_FORWARD:
if (bw != NULL && bw->history != NULL)
- history_forward(bw, bw->history);
+ history_forward(bw->history, false);
break;
case BROWSER_NAVIGATE_UP:
if (bw != NULL && h != NULL)
@@ -3645,20 +3637,22 @@ void ro_gui_window_toolbar_click(void *data,
switch (action.button) {
case TOOLBAR_BUTTON_BACK:
if (g->bw != NULL && g->bw->history != NULL)
- history_back(g->bw, g->bw->history);
+ history_back(g->bw->history, false);
break;
case TOOLBAR_BUTTON_BACK_NEW:
- ro_gui_window_action_navigate_back_new(g);
+ if (g->bw != NULL && g->bw->history != NULL)
+ history_back(g->bw->history, true);
break;
case TOOLBAR_BUTTON_FORWARD:
if (g->bw != NULL && g->bw->history != NULL)
- history_forward(g->bw, g->bw->history);
+ history_forward(g->bw->history, false);
break;
case TOOLBAR_BUTTON_FORWARD_NEW:
- ro_gui_window_action_navigate_forward_new(g);
+ if (g->bw != NULL && g->bw->history != NULL)
+ history_forward(g->bw->history, true);
break;
case TOOLBAR_BUTTON_STOP:
@@ -3728,7 +3722,8 @@ void ro_gui_window_toolbar_click(void *data,
hlcache_handle *h = g->bw->current_content;
nserror error;
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(
+ BW_CREATE_HISTORY | BW_CREATE_CLONE,
NULL,
NULL,
g->bw,
@@ -4010,8 +4005,7 @@ void ro_gui_window_launch_url(struct gui_window *g, const char *url1)
browser_window_navigate(g->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY | BW_NAVIGATE_UNVERIFIABLE,
NULL,
NULL,
NULL);
@@ -4051,8 +4045,7 @@ bool ro_gui_window_navigate_up(struct gui_window *g, const char *url)
browser_window_navigate(g->bw,
parent,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -4088,8 +4081,7 @@ void ro_gui_window_action_home(struct gui_window *g)
error = browser_window_navigate(g->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -4102,62 +4094,6 @@ void ro_gui_window_action_home(struct gui_window *g)
/**
- * Navigate back from a browser window into a new window.
- *
- * \param *g The browser window to act on.
- */
-
-void ro_gui_window_action_navigate_back_new(struct gui_window *g)
-{
- struct browser_window *new_bw;
- nserror error;
-
- if (g == NULL || g->bw == NULL)
- return;
-
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
- NULL,
- NULL,
- g->bw,
- &new_bw);
-
- if (error != NSERROR_OK) {
- warn_user(messages_get_errorcode(error), 0);
- } else {
- history_back(new_bw, new_bw->history);
- }
-}
-
-
-/**
- * Navigate forward from a browser window into a new window.
- *
- * \param *g The browser window to act on.
- */
-
-void ro_gui_window_action_navigate_forward_new(struct gui_window *g)
-{
- struct browser_window *new_bw;
- nserror error;
-
- if (g == NULL || g->bw == NULL)
- return;
-
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
- NULL,
- NULL,
- g->bw,
- &new_bw);
-
- if (error != NSERROR_OK) {
- warn_user(messages_get_errorcode(error), 0);
- } else {
- history_forward(new_bw, new_bw->history);
- }
-}
-
-
-/**
* Open a new browser window.
*
* \param *g The browser window to act on.
@@ -4170,7 +4106,7 @@ void ro_gui_window_action_new_window(struct gui_window *g)
if (g == NULL || g->bw == NULL || g->bw->current_content == NULL)
return;
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE,
hlcache_handle_get_url(g->bw->current_content),
NULL,
g->bw,
@@ -4693,29 +4629,19 @@ bool ro_gui_window_import_text(struct gui_window *g, const char *filename)
/**
* Clones a browser window's options.
*
- * \param new_bw the new browser window
- * \param old_bw the browser window to clone from, or NULL for default
+ * \param new_gui the new gui window
+ * \param old_gui the gui window to clone from, or NULL for default
*/
-void ro_gui_window_clone_options(struct browser_window *new_bw,
- struct browser_window *old_bw)
+void ro_gui_window_clone_options(
+ struct gui_window *new_gui,
+ struct gui_window *old_gui)
{
- struct gui_window *old_gui = NULL;
- struct gui_window *new_gui;
-
- assert(new_bw);
-
- /* Get our GUIs
- */
- new_gui = new_bw->window;
-
- if (old_bw)
- old_gui = old_bw->window;
+ assert(new_gui);
/* Clone the basic options
*/
if (!old_gui) {
- new_bw->scale = ((float)nsoption_int(scale)) / 100;
new_gui->option.buffer_animations = nsoption_bool(buffer_animations);
new_gui->option.buffer_everything = nsoption_bool(buffer_everything);
} else {
@@ -4919,9 +4845,7 @@ void ro_gui_window_process_form_select_menu(struct gui_window *g,
assert(g != NULL);
if (selection->items[0] >= 0)
- form_select_process_selection(
- ro_gui_select_menu_bw->current_content,
- gui_form_select_control,
+ form_select_process_selection(gui_form_select_control,
selection->items[0]);
}
diff --git a/test/Makefile b/test/Makefile
index ecd2b50..acf9d4e 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -22,9 +22,9 @@ urldbtest_SRCS := content/urldb.c utils/url.c utils/utils.c utils/log.c \
urldbtest_CFLAGS := $(shell pkg-config --cflags libwapcaplet libdom) -O2
urldbtest_LDFLAGS := $(shell pkg-config --libs libwapcaplet libdom)
-nsurl_SRCS := utils/log.c utils/nsurl.c test/nsurl.c
-nsurl_CFLAGS := $(shell pkg-config --cflags libwapcaplet)
-nsurl_LDFLAGS := $(shell pkg-config --libs libwapcaplet)
+nsurl_SRCS := utils/corestrings.c utils/log.c utils/nsurl.c test/nsurl.c
+nsurl_CFLAGS := $(shell pkg-config --cflags libwapcaplet libdom)
+nsurl_LDFLAGS := $(shell pkg-config --libs libwapcaplet libdom)
nsoption_SRCS := utils/log.c utils/nsoption.c test/nsoption.c
nsoption_CFLAGS := -Dnsgtk
diff --git a/test/nsurl.c b/test/nsurl.c
index 66bc057..3e859d9 100644
--- a/test/nsurl.c
+++ b/test/nsurl.c
@@ -6,12 +6,10 @@
#include <libwapcaplet/libwapcaplet.h>
#include "desktop/netsurf.h"
+#include "utils/corestrings.h"
#include "utils/log.h"
#include "utils/nsurl.h"
-/* desktop/netsurf.h */
-bool verbose_log = true;
-
struct test_pairs {
const char* test;
const char* res;
@@ -30,9 +28,10 @@ static void netsurf_lwc_iterator(lwc_string *str, void *pw)
}
static const struct test_pairs create_tests[] = {
- { "http:", "http:" },
- { "http:/", "http:" },
- { "http://", "http:" },
+ { "", NULL },
+ { "http:", NULL },
+ { "http:/", NULL },
+ { "http://", NULL },
{ "http:a", "http://a/" },
{ "http:a/", "http://a/" },
{ "http:a/b", "http://a/b" },
@@ -182,6 +181,13 @@ int main(void)
const struct test_triplets *ttest;
int passed = 0;
int count = 0;
+ nserror err;
+
+ verbose_log = true;
+
+ if (corestrings_init() != NSERROR_OK) {
+ assert(0 && "Failed to init corestrings.");
+ }
/* Create base URL */
if (nsurl_create("http://a/b/c/d;p?q", &base) != NSERROR_OK) {
@@ -228,8 +234,22 @@ int main(void)
/* Create tests */
LOG(("Testing nsurl_create"));
for (test = create_tests; test->test != NULL; test++) {
- if (nsurl_create(test->test, &base) != NSERROR_OK) {
- LOG(("Failed to create URL:\n\t\t%s.", test->test));
+ err = nsurl_create(test->test, &base);
+ if (err != NSERROR_OK || test->res == NULL) {
+ if (test->res == NULL && err != NSERROR_OK) {
+ LOG(("\tPASS: \"%s\"\t--> BAD INPUT",
+ test->test));
+ passed++;
+ } else if (test->res != NULL && err != NSERROR_OK) {
+ LOG(("Failed to create URL:\n\t\t%s.",
+ test->test));
+ } else {
+ LOG(("\tFAIL: \"%s\"\t--> %s",
+ test->test, nsurl_access(base)));
+ LOG(("\t\tExpecting BAD INPUT"));
+ }
+ if (err == NSERROR_OK)
+ nsurl_unref(base);
} else {
if (strcmp(nsurl_access(base), test->res) == 0) {
LOG(("\tPASS: \"%s\"\t--> %s",
@@ -286,6 +306,8 @@ int main(void)
LOG(("Failed %d out of %d", count - passed, count));
}
+ corestrings_fini();
+
LOG(("Remaining lwc strings:"));
lwc_iterate_strings(netsurf_lwc_iterator, NULL);
diff --git a/utils/corestrings.c b/utils/corestrings.c
index c51a38f..db6d72e 100644
--- a/utils/corestrings.c
+++ b/utils/corestrings.c
@@ -268,6 +268,9 @@ dom_string *corestring_dom___ns_key_libcss_node_data;
dom_string *corestring_dom___ns_key_file_name_node_data;
dom_string *corestring_dom___ns_key_image_coords_node_data;
+/* nsurl URLs */
+nsurl *corestring_nsurl_about_blank;
+
/*
* Free the core strings
*/
@@ -535,6 +538,10 @@ void corestrings_fini(void)
CSS_DOM_STRING_UNREF(__ns_key_file_name_node_data);
CSS_DOM_STRING_UNREF(__ns_key_image_coords_node_data);
#undef CSS_DOM_STRING_UNREF
+
+ /* nsurl URLs */
+ if (corestring_nsurl_about_blank != NULL)
+ nsurl_unref(corestring_nsurl_about_blank);
}
@@ -856,6 +863,11 @@ nserror corestrings_init(void)
goto error;
}
+ error = nsurl_create("about:blank", &corestring_nsurl_about_blank);
+ if (error != NSERROR_OK) {
+ goto error;
+ }
+
return NSERROR_OK;
error:
diff --git a/utils/corestrings.h b/utils/corestrings.h
index 1f34ada..2a1f88b 100644
--- a/utils/corestrings.h
+++ b/utils/corestrings.h
@@ -24,6 +24,7 @@
#define NETSURF_UTILS_CORESTRINGS_H_
#include <libwapcaplet/libwapcaplet.h>
+#include "utils/nsurl.h"
#include "utils/errors.h"
nserror corestrings_init(void);
@@ -279,5 +280,7 @@ extern struct dom_string *corestring_dom___ns_key_libcss_node_data;
extern struct dom_string *corestring_dom___ns_key_file_name_node_data;
extern struct dom_string *corestring_dom___ns_key_image_coords_node_data;
+/* URLs */
+extern nsurl *corestring_nsurl_about_blank;
#endif
diff --git a/utils/errors.h b/utils/errors.h
index 244de0a..c38e4b9 100644
--- a/utils/errors.h
+++ b/utils/errors.h
@@ -67,6 +67,8 @@ typedef enum {
NSERROR_BAD_URL, /**< Bad URL */
+ NSERROR_BAD_CONTENT, /**< Bad Content */
+
NSERROR_FRAME_DEPTH /**< Exceeded frame depth */
} nserror;
diff --git a/utils/nsurl.c b/utils/nsurl.c
index 77cbc6d..f053bce 100644
--- a/utils/nsurl.c
+++ b/utils/nsurl.c
@@ -1221,6 +1221,39 @@ static void nsurl_calc_hash(nsurl *url)
}
+/**
+ * Destroy components
+ *
+ * \param c url components
+ */
+static void nsurl_destroy_components(struct nsurl_components *c)
+{
+ if (c->scheme)
+ lwc_string_unref(c->scheme);
+
+ if (c->username)
+ lwc_string_unref(c->username);
+
+ if (c->password)
+ lwc_string_unref(c->password);
+
+ if (c->host)
+ lwc_string_unref(c->host);
+
+ if (c->port)
+ lwc_string_unref(c->port);
+
+ if (c->path)
+ lwc_string_unref(c->path);
+
+ if (c->query)
+ lwc_string_unref(c->query);
+
+ if (c->fragment)
+ lwc_string_unref(c->fragment);
+}
+
+
#ifdef NSURL_DEBUG
/**
* Dump a NetSurf URL's internal components
@@ -1272,6 +1305,7 @@ nserror nsurl_create(const char * const url_s, nsurl **url)
struct nsurl_component_lengths str_len = { 0, 0, 0, 0, 0, 0, 0, 0 };
enum nsurl_string_flags str_flags = 0;
nserror e = NSERROR_OK;
+ bool match;
assert(url_s != NULL);
@@ -1300,8 +1334,22 @@ nserror nsurl_create(const char * const url_s, nsurl **url)
/* Finished with buffer */
free(buff);
- if (e != NSERROR_OK)
+ if (e != NSERROR_OK) {
+ nsurl_destroy_components(&c);
return NSERROR_NOMEM;
+ }
+
+ /* Validate URL */
+ if ((lwc_string_isequal(c.scheme, corestring_lwc_http,
+ &match) == lwc_error_ok && match == true) ||
+ (lwc_string_isequal(c.scheme, corestring_lwc_https,
+ &match) == lwc_error_ok && match == true)) {
+ /* http, https must have host */
+ if (c.host == NULL) {
+ nsurl_destroy_components(&c);
+ return NSERROR_BAD_URL;
+ }
+ }
/* Get the string length and find which parts of url are present */
nsurl__get_string_data(&c, NSURL_WITH_FRAGMENT, &length,
@@ -1309,8 +1357,10 @@ nserror nsurl_create(const char * const url_s, nsurl **url)
/* Create NetSurf URL object */
*url = malloc(sizeof(nsurl) + length + 1); /* Add 1 for \0 */
- if (*url == NULL)
+ if (*url == NULL) {
+ nsurl_destroy_components(&c);
return NSERROR_NOMEM;
+ }
(*url)->components = c;
(*url)->length = length;
@@ -1353,29 +1403,7 @@ void nsurl_unref(nsurl *url)
#endif
/* Release lwc strings */
- if (url->components.scheme)
- lwc_string_unref(url->components.scheme);
-
- if (url->components.username)
- lwc_string_unref(url->components.username);
-
- if (url->components.password)
- lwc_string_unref(url->components.password);
-
- if (url->components.host)
- lwc_string_unref(url->components.host);
-
- if (url->components.port)
- lwc_string_unref(url->components.port);
-
- if (url->components.path)
- lwc_string_unref(url->components.path);
-
- if (url->components.query)
- lwc_string_unref(url->components.query);
-
- if (url->components.fragment)
- lwc_string_unref(url->components.fragment);
+ nsurl_destroy_components(&url->components);
/* Free the NetSurf URL */
free(url);
diff --git a/windows/gui.c b/windows/gui.c
index 6ac4f61..2559bf2 100644
--- a/windows/gui.c
+++ b/windows/gui.c
@@ -133,8 +133,7 @@ nsws_window_go(HWND hwnd, const char *urltxt)
browser_window_navigate(gw->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -762,7 +761,7 @@ nsws_window_command(HWND hwnd,
break;
case IDM_FILE_OPEN_WINDOW:
- browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ browser_window_create(BW_CREATE_NONE,
NULL,
NULL,
gw->bw,
@@ -853,7 +852,7 @@ nsws_window_command(HWND hwnd,
case IDM_NAV_BACK:
if ((gw->bw != NULL) &&
(history_back_available(gw->bw->history))) {
- history_back(gw->bw, gw->bw->history);
+ history_back(gw->bw->history, false);
}
nsws_window_update_forward_back(gw);
break;
@@ -861,7 +860,7 @@ nsws_window_command(HWND hwnd,
case IDM_NAV_FORWARD:
if ((gw->bw != NULL) &&
(history_forward_available(gw->bw->history))) {
- history_forward(gw->bw, gw->bw->history);
+ history_forward(gw->bw->history, false);
}
nsws_window_update_forward_back(gw);
break;
@@ -876,8 +875,7 @@ nsws_window_command(HWND hwnd,
browser_window_navigate(gw->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1045,8 +1043,7 @@ nsws_window_command(HWND hwnd,
browser_window_navigate(gw->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1232,8 +1229,8 @@ static HWND nsws_window_create(struct gui_window *gw)
*/
static struct gui_window *
gui_window_create(struct browser_window *bw,
- struct browser_window *clone,
- bool new_tab)
+ struct gui_window *existing,
+ gui_window_create_flags flags)
{
struct gui_window *gw;
diff --git a/windows/localhistory.c b/windows/localhistory.c
index 0b29871..d2be2c3 100644
--- a/windows/localhistory.c
+++ b/windows/localhistory.c
@@ -167,8 +167,7 @@ nsws_localhistory_event_callback(HWND hwnd, UINT msg,
x = GET_X_LPARAM(lparam);
y = GET_Y_LPARAM(lparam);
- if (history_click(gw->bw,
- gw->bw->history,
+ if (history_click(gw->bw->history,
gw->localhistory->hscroll + x,
gw->localhistory->vscroll + y,
false)) {
diff --git a/windows/main.c b/windows/main.c
index 6a53e0c..19cd44a 100644
--- a/windows/main.c
+++ b/windows/main.c
@@ -189,8 +189,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hLastInstance, LPSTR lpcli, int ncmd)
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
--
NetSurf Browser
9 years, 1 month
netsurf: branch master updated. release/3.0-1108-gef6b20f
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/ef6b20fe83895279e5e78...
...commit http://git.netsurf-browser.org/netsurf.git/commit/ef6b20fe83895279e5e78b3...
...tree http://git.netsurf-browser.org/netsurf.git/tree/ef6b20fe83895279e5e78b336...
The branch, master has been updated
via ef6b20fe83895279e5e78b336f357ff657f46407 (commit)
via 42be1ffa7b2975fc264bfc9187a8d2da2d1dccb9 (commit)
from 2f66b6f6e296edf6e05a78d44a686d195c5a36fe (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=ef6b20fe83895279e5e...
commit ef6b20fe83895279e5e78b336f357ff657f46407
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Update test suite for corestrings and log module changes. Update test data for rejection of hostless http(s) urls.
diff --git a/test/Makefile b/test/Makefile
index ecd2b50..acf9d4e 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -22,9 +22,9 @@ urldbtest_SRCS := content/urldb.c utils/url.c utils/utils.c utils/log.c \
urldbtest_CFLAGS := $(shell pkg-config --cflags libwapcaplet libdom) -O2
urldbtest_LDFLAGS := $(shell pkg-config --libs libwapcaplet libdom)
-nsurl_SRCS := utils/log.c utils/nsurl.c test/nsurl.c
-nsurl_CFLAGS := $(shell pkg-config --cflags libwapcaplet)
-nsurl_LDFLAGS := $(shell pkg-config --libs libwapcaplet)
+nsurl_SRCS := utils/corestrings.c utils/log.c utils/nsurl.c test/nsurl.c
+nsurl_CFLAGS := $(shell pkg-config --cflags libwapcaplet libdom)
+nsurl_LDFLAGS := $(shell pkg-config --libs libwapcaplet libdom)
nsoption_SRCS := utils/log.c utils/nsoption.c test/nsoption.c
nsoption_CFLAGS := -Dnsgtk
diff --git a/test/nsurl.c b/test/nsurl.c
index 66bc057..3e859d9 100644
--- a/test/nsurl.c
+++ b/test/nsurl.c
@@ -6,12 +6,10 @@
#include <libwapcaplet/libwapcaplet.h>
#include "desktop/netsurf.h"
+#include "utils/corestrings.h"
#include "utils/log.h"
#include "utils/nsurl.h"
-/* desktop/netsurf.h */
-bool verbose_log = true;
-
struct test_pairs {
const char* test;
const char* res;
@@ -30,9 +28,10 @@ static void netsurf_lwc_iterator(lwc_string *str, void *pw)
}
static const struct test_pairs create_tests[] = {
- { "http:", "http:" },
- { "http:/", "http:" },
- { "http://", "http:" },
+ { "", NULL },
+ { "http:", NULL },
+ { "http:/", NULL },
+ { "http://", NULL },
{ "http:a", "http://a/" },
{ "http:a/", "http://a/" },
{ "http:a/b", "http://a/b" },
@@ -182,6 +181,13 @@ int main(void)
const struct test_triplets *ttest;
int passed = 0;
int count = 0;
+ nserror err;
+
+ verbose_log = true;
+
+ if (corestrings_init() != NSERROR_OK) {
+ assert(0 && "Failed to init corestrings.");
+ }
/* Create base URL */
if (nsurl_create("http://a/b/c/d;p?q", &base) != NSERROR_OK) {
@@ -228,8 +234,22 @@ int main(void)
/* Create tests */
LOG(("Testing nsurl_create"));
for (test = create_tests; test->test != NULL; test++) {
- if (nsurl_create(test->test, &base) != NSERROR_OK) {
- LOG(("Failed to create URL:\n\t\t%s.", test->test));
+ err = nsurl_create(test->test, &base);
+ if (err != NSERROR_OK || test->res == NULL) {
+ if (test->res == NULL && err != NSERROR_OK) {
+ LOG(("\tPASS: \"%s\"\t--> BAD INPUT",
+ test->test));
+ passed++;
+ } else if (test->res != NULL && err != NSERROR_OK) {
+ LOG(("Failed to create URL:\n\t\t%s.",
+ test->test));
+ } else {
+ LOG(("\tFAIL: \"%s\"\t--> %s",
+ test->test, nsurl_access(base)));
+ LOG(("\t\tExpecting BAD INPUT"));
+ }
+ if (err == NSERROR_OK)
+ nsurl_unref(base);
} else {
if (strcmp(nsurl_access(base), test->res) == 0) {
LOG(("\tPASS: \"%s\"\t--> %s",
@@ -286,6 +306,8 @@ int main(void)
LOG(("Failed %d out of %d", count - passed, count));
}
+ corestrings_fini();
+
LOG(("Remaining lwc strings:"));
lwc_iterate_strings(netsurf_lwc_iterator, NULL);
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=42be1ffa7b2975fc264...
commit 42be1ffa7b2975fc264bfc9187a8d2da2d1dccb9
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Reject creation of http(s) urls without hosts.
diff --git a/utils/nsurl.c b/utils/nsurl.c
index 77cbc6d..f053bce 100644
--- a/utils/nsurl.c
+++ b/utils/nsurl.c
@@ -1221,6 +1221,39 @@ static void nsurl_calc_hash(nsurl *url)
}
+/**
+ * Destroy components
+ *
+ * \param c url components
+ */
+static void nsurl_destroy_components(struct nsurl_components *c)
+{
+ if (c->scheme)
+ lwc_string_unref(c->scheme);
+
+ if (c->username)
+ lwc_string_unref(c->username);
+
+ if (c->password)
+ lwc_string_unref(c->password);
+
+ if (c->host)
+ lwc_string_unref(c->host);
+
+ if (c->port)
+ lwc_string_unref(c->port);
+
+ if (c->path)
+ lwc_string_unref(c->path);
+
+ if (c->query)
+ lwc_string_unref(c->query);
+
+ if (c->fragment)
+ lwc_string_unref(c->fragment);
+}
+
+
#ifdef NSURL_DEBUG
/**
* Dump a NetSurf URL's internal components
@@ -1272,6 +1305,7 @@ nserror nsurl_create(const char * const url_s, nsurl **url)
struct nsurl_component_lengths str_len = { 0, 0, 0, 0, 0, 0, 0, 0 };
enum nsurl_string_flags str_flags = 0;
nserror e = NSERROR_OK;
+ bool match;
assert(url_s != NULL);
@@ -1300,8 +1334,22 @@ nserror nsurl_create(const char * const url_s, nsurl **url)
/* Finished with buffer */
free(buff);
- if (e != NSERROR_OK)
+ if (e != NSERROR_OK) {
+ nsurl_destroy_components(&c);
return NSERROR_NOMEM;
+ }
+
+ /* Validate URL */
+ if ((lwc_string_isequal(c.scheme, corestring_lwc_http,
+ &match) == lwc_error_ok && match == true) ||
+ (lwc_string_isequal(c.scheme, corestring_lwc_https,
+ &match) == lwc_error_ok && match == true)) {
+ /* http, https must have host */
+ if (c.host == NULL) {
+ nsurl_destroy_components(&c);
+ return NSERROR_BAD_URL;
+ }
+ }
/* Get the string length and find which parts of url are present */
nsurl__get_string_data(&c, NSURL_WITH_FRAGMENT, &length,
@@ -1309,8 +1357,10 @@ nserror nsurl_create(const char * const url_s, nsurl **url)
/* Create NetSurf URL object */
*url = malloc(sizeof(nsurl) + length + 1); /* Add 1 for \0 */
- if (*url == NULL)
+ if (*url == NULL) {
+ nsurl_destroy_components(&c);
return NSERROR_NOMEM;
+ }
(*url)->components = c;
(*url)->length = length;
@@ -1353,29 +1403,7 @@ void nsurl_unref(nsurl *url)
#endif
/* Release lwc strings */
- if (url->components.scheme)
- lwc_string_unref(url->components.scheme);
-
- if (url->components.username)
- lwc_string_unref(url->components.username);
-
- if (url->components.password)
- lwc_string_unref(url->components.password);
-
- if (url->components.host)
- lwc_string_unref(url->components.host);
-
- if (url->components.port)
- lwc_string_unref(url->components.port);
-
- if (url->components.path)
- lwc_string_unref(url->components.path);
-
- if (url->components.query)
- lwc_string_unref(url->components.query);
-
- if (url->components.fragment)
- lwc_string_unref(url->components.fragment);
+ nsurl_destroy_components(&url->components);
/* Free the NetSurf URL */
free(url);
-----------------------------------------------------------------------
Summary of changes:
test/Makefile | 6 ++--
test/nsurl.c | 38 ++++++++++++++++++++++------
utils/nsurl.c | 78 ++++++++++++++++++++++++++++++++++++++------------------
3 files changed, 86 insertions(+), 36 deletions(-)
diff --git a/test/Makefile b/test/Makefile
index ecd2b50..acf9d4e 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -22,9 +22,9 @@ urldbtest_SRCS := content/urldb.c utils/url.c utils/utils.c utils/log.c \
urldbtest_CFLAGS := $(shell pkg-config --cflags libwapcaplet libdom) -O2
urldbtest_LDFLAGS := $(shell pkg-config --libs libwapcaplet libdom)
-nsurl_SRCS := utils/log.c utils/nsurl.c test/nsurl.c
-nsurl_CFLAGS := $(shell pkg-config --cflags libwapcaplet)
-nsurl_LDFLAGS := $(shell pkg-config --libs libwapcaplet)
+nsurl_SRCS := utils/corestrings.c utils/log.c utils/nsurl.c test/nsurl.c
+nsurl_CFLAGS := $(shell pkg-config --cflags libwapcaplet libdom)
+nsurl_LDFLAGS := $(shell pkg-config --libs libwapcaplet libdom)
nsoption_SRCS := utils/log.c utils/nsoption.c test/nsoption.c
nsoption_CFLAGS := -Dnsgtk
diff --git a/test/nsurl.c b/test/nsurl.c
index 66bc057..3e859d9 100644
--- a/test/nsurl.c
+++ b/test/nsurl.c
@@ -6,12 +6,10 @@
#include <libwapcaplet/libwapcaplet.h>
#include "desktop/netsurf.h"
+#include "utils/corestrings.h"
#include "utils/log.h"
#include "utils/nsurl.h"
-/* desktop/netsurf.h */
-bool verbose_log = true;
-
struct test_pairs {
const char* test;
const char* res;
@@ -30,9 +28,10 @@ static void netsurf_lwc_iterator(lwc_string *str, void *pw)
}
static const struct test_pairs create_tests[] = {
- { "http:", "http:" },
- { "http:/", "http:" },
- { "http://", "http:" },
+ { "", NULL },
+ { "http:", NULL },
+ { "http:/", NULL },
+ { "http://", NULL },
{ "http:a", "http://a/" },
{ "http:a/", "http://a/" },
{ "http:a/b", "http://a/b" },
@@ -182,6 +181,13 @@ int main(void)
const struct test_triplets *ttest;
int passed = 0;
int count = 0;
+ nserror err;
+
+ verbose_log = true;
+
+ if (corestrings_init() != NSERROR_OK) {
+ assert(0 && "Failed to init corestrings.");
+ }
/* Create base URL */
if (nsurl_create("http://a/b/c/d;p?q", &base) != NSERROR_OK) {
@@ -228,8 +234,22 @@ int main(void)
/* Create tests */
LOG(("Testing nsurl_create"));
for (test = create_tests; test->test != NULL; test++) {
- if (nsurl_create(test->test, &base) != NSERROR_OK) {
- LOG(("Failed to create URL:\n\t\t%s.", test->test));
+ err = nsurl_create(test->test, &base);
+ if (err != NSERROR_OK || test->res == NULL) {
+ if (test->res == NULL && err != NSERROR_OK) {
+ LOG(("\tPASS: \"%s\"\t--> BAD INPUT",
+ test->test));
+ passed++;
+ } else if (test->res != NULL && err != NSERROR_OK) {
+ LOG(("Failed to create URL:\n\t\t%s.",
+ test->test));
+ } else {
+ LOG(("\tFAIL: \"%s\"\t--> %s",
+ test->test, nsurl_access(base)));
+ LOG(("\t\tExpecting BAD INPUT"));
+ }
+ if (err == NSERROR_OK)
+ nsurl_unref(base);
} else {
if (strcmp(nsurl_access(base), test->res) == 0) {
LOG(("\tPASS: \"%s\"\t--> %s",
@@ -286,6 +306,8 @@ int main(void)
LOG(("Failed %d out of %d", count - passed, count));
}
+ corestrings_fini();
+
LOG(("Remaining lwc strings:"));
lwc_iterate_strings(netsurf_lwc_iterator, NULL);
diff --git a/utils/nsurl.c b/utils/nsurl.c
index 77cbc6d..f053bce 100644
--- a/utils/nsurl.c
+++ b/utils/nsurl.c
@@ -1221,6 +1221,39 @@ static void nsurl_calc_hash(nsurl *url)
}
+/**
+ * Destroy components
+ *
+ * \param c url components
+ */
+static void nsurl_destroy_components(struct nsurl_components *c)
+{
+ if (c->scheme)
+ lwc_string_unref(c->scheme);
+
+ if (c->username)
+ lwc_string_unref(c->username);
+
+ if (c->password)
+ lwc_string_unref(c->password);
+
+ if (c->host)
+ lwc_string_unref(c->host);
+
+ if (c->port)
+ lwc_string_unref(c->port);
+
+ if (c->path)
+ lwc_string_unref(c->path);
+
+ if (c->query)
+ lwc_string_unref(c->query);
+
+ if (c->fragment)
+ lwc_string_unref(c->fragment);
+}
+
+
#ifdef NSURL_DEBUG
/**
* Dump a NetSurf URL's internal components
@@ -1272,6 +1305,7 @@ nserror nsurl_create(const char * const url_s, nsurl **url)
struct nsurl_component_lengths str_len = { 0, 0, 0, 0, 0, 0, 0, 0 };
enum nsurl_string_flags str_flags = 0;
nserror e = NSERROR_OK;
+ bool match;
assert(url_s != NULL);
@@ -1300,8 +1334,22 @@ nserror nsurl_create(const char * const url_s, nsurl **url)
/* Finished with buffer */
free(buff);
- if (e != NSERROR_OK)
+ if (e != NSERROR_OK) {
+ nsurl_destroy_components(&c);
return NSERROR_NOMEM;
+ }
+
+ /* Validate URL */
+ if ((lwc_string_isequal(c.scheme, corestring_lwc_http,
+ &match) == lwc_error_ok && match == true) ||
+ (lwc_string_isequal(c.scheme, corestring_lwc_https,
+ &match) == lwc_error_ok && match == true)) {
+ /* http, https must have host */
+ if (c.host == NULL) {
+ nsurl_destroy_components(&c);
+ return NSERROR_BAD_URL;
+ }
+ }
/* Get the string length and find which parts of url are present */
nsurl__get_string_data(&c, NSURL_WITH_FRAGMENT, &length,
@@ -1309,8 +1357,10 @@ nserror nsurl_create(const char * const url_s, nsurl **url)
/* Create NetSurf URL object */
*url = malloc(sizeof(nsurl) + length + 1); /* Add 1 for \0 */
- if (*url == NULL)
+ if (*url == NULL) {
+ nsurl_destroy_components(&c);
return NSERROR_NOMEM;
+ }
(*url)->components = c;
(*url)->length = length;
@@ -1353,29 +1403,7 @@ void nsurl_unref(nsurl *url)
#endif
/* Release lwc strings */
- if (url->components.scheme)
- lwc_string_unref(url->components.scheme);
-
- if (url->components.username)
- lwc_string_unref(url->components.username);
-
- if (url->components.password)
- lwc_string_unref(url->components.password);
-
- if (url->components.host)
- lwc_string_unref(url->components.host);
-
- if (url->components.port)
- lwc_string_unref(url->components.port);
-
- if (url->components.path)
- lwc_string_unref(url->components.path);
-
- if (url->components.query)
- lwc_string_unref(url->components.query);
-
- if (url->components.fragment)
- lwc_string_unref(url->components.fragment);
+ nsurl_destroy_components(&url->components);
/* Free the NetSurf URL */
free(url);
--
NetSurf Browser
9 years, 1 month
netsurf: branch master updated. release/3.0-1106-g2f66b6f
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/2f66b6f6e296edf6e05a7...
...commit http://git.netsurf-browser.org/netsurf.git/commit/2f66b6f6e296edf6e05a78d...
...tree http://git.netsurf-browser.org/netsurf.git/tree/2f66b6f6e296edf6e05a78d44...
The branch, master has been updated
via 2f66b6f6e296edf6e05a78d44a686d195c5a36fe (commit)
from 49bed056dd016ed74a7ed5cc988e9bdf17738c7f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=2f66b6f6e296edf6e05...
commit 2f66b6f6e296edf6e05a78d44a686d195c5a36fe
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Fix builds.
diff --git a/amiga/gui.c b/amiga/gui.c
index 1bcc36c..a949150 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2362,8 +2362,7 @@ void ami_handle_appmsg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/cocoa/BrowserViewController.m b/cocoa/BrowserViewController.m
index 8678620..4870446 100644
--- a/cocoa/BrowserViewController.m
+++ b/cocoa/BrowserViewController.m
@@ -79,8 +79,7 @@
browser_window_navigate(browser,
urlns,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -141,8 +140,7 @@
error = browser_window_navigate(browser,
urlns,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
-----------------------------------------------------------------------
Summary of changes:
amiga/gui.c | 3 +--
cocoa/BrowserViewController.m | 6 ++----
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/amiga/gui.c b/amiga/gui.c
index 1bcc36c..a949150 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2362,8 +2362,7 @@ void ami_handle_appmsg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/cocoa/BrowserViewController.m b/cocoa/BrowserViewController.m
index 8678620..4870446 100644
--- a/cocoa/BrowserViewController.m
+++ b/cocoa/BrowserViewController.m
@@ -79,8 +79,7 @@
browser_window_navigate(browser,
urlns,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -141,8 +140,7 @@
error = browser_window_navigate(browser,
urlns,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
--
NetSurf Browser
9 years, 1 month
netsurf: branch master updated. release/3.0-1105-g49bed05
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/49bed056dd016ed74a7ed...
...commit http://git.netsurf-browser.org/netsurf.git/commit/49bed056dd016ed74a7ed5c...
...tree http://git.netsurf-browser.org/netsurf.git/tree/49bed056dd016ed74a7ed5cc9...
The branch, master has been updated
via 49bed056dd016ed74a7ed5cc988e9bdf17738c7f (commit)
from 76b5378996c681ad1311e57a4c7c49dd465e634b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=49bed056dd016ed74a7...
commit 49bed056dd016ed74a7ed5cc988e9bdf17738c7f
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Make browser_window_navigate (un)verifiable flag match browser_window_create.
diff --git a/amiga/arexx.c b/amiga/arexx.c
index 515ee6d..240aafe 100644
--- a/amiga/arexx.c
+++ b/amiga/arexx.c
@@ -248,8 +248,7 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(curbw,
url,
NULL,
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -279,8 +278,7 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -507,8 +505,7 @@ STATIC VOID rx_home(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/context_menu.c b/amiga/context_menu.c
index 0662a2c..c7e438f 100644
--- a/amiga/context_menu.c
+++ b/amiga/context_menu.c
@@ -820,8 +820,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
hlcache_handle_get_url(gwin->bw->current_content),
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -835,8 +834,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
hlcache_handle_get_url(userdata),
hlcache_handle_get_url(gwin->bw->current_content),
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -852,8 +850,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
hlcache_handle_get_url(gwin->bw->current_content),
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -928,8 +925,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -999,8 +995,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/download.c b/amiga/download.c
index 1d10e92..0f8ae4c 100644
--- a/amiga/download.c
+++ b/amiga/download.c
@@ -274,8 +274,7 @@ static void gui_download_window_done(struct gui_download_window *dw)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
diff --git a/amiga/file.c b/amiga/file.c
index 9d4fa6b..91d3755 100644
--- a/amiga/file.c
+++ b/amiga/file.c
@@ -104,8 +104,7 @@ void ami_file_open(struct gui_window_2 *gwin)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/gui.c b/amiga/gui.c
index 92d668a..1bcc36c 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -1799,8 +1799,7 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1826,8 +1825,7 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1844,8 +1842,7 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -2326,8 +2323,7 @@ void ami_handle_appmsg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -4914,8 +4910,7 @@ void ami_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/menu.c b/amiga/menu.c
index 9b3c44d..014f21c 100644
--- a/amiga/menu.c
+++ b/amiga/menu.c
@@ -1034,8 +1034,7 @@ static void ami_menu_item_hotlist_entries(struct Hook *hook, APTR window, struct
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/tree.c b/amiga/tree.c
index 38b6338..8cffdb2 100644
--- a/amiga/tree.c
+++ b/amiga/tree.c
@@ -322,8 +322,7 @@ void ami_tree_drag_end(struct treeview_window *twin, int x, int y)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/atari/ctxmenu.c b/atari/ctxmenu.c
index 37c96ef..aeed475 100644
--- a/atari/ctxmenu.c
+++ b/atari/ctxmenu.c
@@ -238,8 +238,7 @@ void context_popup(struct gui_window * gw, short x, short y)
gw->browser->bw,
hlcache_handle_get_url(ctx->ccdata.object),
hlcache_handle_get_url(gw->browser->bw->current_content),
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL
@@ -258,8 +257,7 @@ void context_popup(struct gui_window * gw, short x, short y)
gw->browser->bw,
url,
hlcache_handle_get_url(gw->browser->bw->current_content),
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL
diff --git a/atari/rootwin.c b/atari/rootwin.c
index 4ab7442..5fc2905 100755
--- a/atari/rootwin.c
+++ b/atari/rootwin.c
@@ -1537,7 +1537,7 @@ static void on_file_dropped(ROOTWIN *rootwin, short msg[8])
if ((tmp_url != NULL)
&& nsurl_create(tmp_url, &ns_url) == NSERROR_OK) {
browser_window_navigate(gw->browser->bw, ns_url, NULL,
- BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL, NULL, NULL);
nsurl_unref(ns_url);
}
diff --git a/atari/toolbar.c b/atari/toolbar.c
index 1c3126b..aa6aa91 100644
--- a/atari/toolbar.c
+++ b/atari/toolbar.c
@@ -715,7 +715,7 @@ bool toolbar_key_input(struct s_toolbar *tb, short nkc)
warn_user("NoMemory", 0);
} else {
browser_window_navigate(gw->browser->bw, url, NULL,
- BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL, NULL, NULL);
nsurl_unref(url);
}
@@ -1001,8 +1001,7 @@ void toolbar_home_click(struct s_toolbar *tb)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/beos/scaffolding.cpp b/beos/scaffolding.cpp
index 1561cb2..628debc 100644
--- a/beos/scaffolding.cpp
+++ b/beos/scaffolding.cpp
@@ -888,7 +888,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
if (/*message->WasDropped() &&*/ i == 0) {
browser_window_navigate(bw, nsurl, NULL,
(browser_window_nav_flags)
- (BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE),
+ (BW_NAVIGATE_HISTORY),
NULL, NULL, NULL);
} else {
error = browser_window_create(BW_CREATE_CLONE,
@@ -949,7 +949,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
nsurl,
NULL,
- (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY | BW_NAVIGATE_UNVERIFIABLE),
NULL,
NULL,
NULL);
@@ -1019,8 +1019,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
url,
NULL,
- (browser_window_nav_flags)(BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
NULL,
NULL,
NULL);
@@ -1048,8 +1047,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
url,
NULL,
- (browser_window_nav_flags)(BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
NULL,
NULL,
NULL);
@@ -1268,7 +1266,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
if (nserr == NSERROR_OK) {
nserr = browser_window_navigate(bw,
url, NULL,
- (browser_window_nav_flags)(BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
NULL, NULL, NULL);
nsurl_unref(url);
}
diff --git a/cocoa/BookmarksController.m b/cocoa/BookmarksController.m
index 4ba66dd..64c2ef3 100644
--- a/cocoa/BookmarksController.m
+++ b/cocoa/BookmarksController.m
@@ -142,8 +142,7 @@ static const char *cocoa_hotlist_path( void )
error = browser_window_navigate([tab browser],
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/cocoa/BrowserView.m b/cocoa/BrowserView.m
index d525832..092c1bf 100644
--- a/cocoa/BrowserView.m
+++ b/cocoa/BrowserView.m
@@ -623,8 +623,7 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
browser_window_navigate(browser,
url,
NULL,
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -688,8 +687,7 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
browser_window_navigate(browser,
url,
NULL,
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
diff --git a/desktop/browser.c b/desktop/browser.c
index 9bff58b..ca60e9e 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -755,8 +755,8 @@ nserror browser_window_create(enum browser_window_create_flags flags,
if (url != NULL) {
enum browser_window_nav_flags nav_flags = BW_NAVIGATE_NONE;
- if (!(flags & BW_CREATE_UNVERIFIABLE))
- nav_flags |= BW_NAVIGATE_VERIFIABLE;
+ if (flags & BW_CREATE_UNVERIFIABLE)
+ nav_flags |= BW_NAVIGATE_UNVERIFIABLE;
if (flags & BW_CREATE_HISTORY)
nav_flags |= BW_NAVIGATE_HISTORY;
browser_window_navigate(ret, url, referrer, nav_flags, NULL,
@@ -1109,7 +1109,7 @@ static void browser_window_refresh(void *p)
nsurl *url;
nsurl *refresh;
hlcache_handle *parent = NULL;
- enum browser_window_nav_flags flags = BW_NAVIGATE_NONE;
+ enum browser_window_nav_flags flags = BW_NAVIGATE_UNVERIFIABLE;
assert(bw->current_content != NULL &&
(content_get_status(bw->current_content) ==
@@ -1139,7 +1139,7 @@ static void browser_window_refresh(void *p)
* all.
*/
if (bw->refresh_interval <= 100 && bw->parent == NULL) {
- flags |= BW_NAVIGATE_VERIFIABLE;
+ flags &= ~BW_NAVIGATE_UNVERIFIABLE;
} else {
parent = bw->current_content;
}
@@ -1812,7 +1812,7 @@ nserror browser_window_navigate(struct browser_window *bw,
}
/* Set up retrieval parameters */
- if ((flags & BW_NAVIGATE_VERIFIABLE) != 0) {
+ if (!(flags & BW_NAVIGATE_UNVERIFIABLE)) {
fetch_flags |= LLCACHE_RETRIEVE_VERIFIABLE;
}
@@ -1905,7 +1905,7 @@ nserror browser_window_navigate(struct browser_window *bw,
bw->history_add = (flags & BW_NAVIGATE_HISTORY);
/* Verifiable fetches may trigger a download */
- if ((flags & BW_NAVIGATE_VERIFIABLE) != 0) {
+ if (!(flags & BW_NAVIGATE_UNVERIFIABLE)) {
fetch_flags |= HLCACHE_RETRIEVE_MAY_DOWNLOAD;
}
@@ -2268,7 +2268,7 @@ void browser_window_reload(struct browser_window *bw, bool all)
browser_window_navigate(bw,
hlcache_handle_get_url(bw->current_content),
NULL,
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_NONE,
NULL,
NULL,
NULL);
diff --git a/desktop/browser.h b/desktop/browser.h
index 4cb8e01..ca99a5d 100644
--- a/desktop/browser.h
+++ b/desktop/browser.h
@@ -76,7 +76,15 @@ enum browser_window_create_flags {
/** New gui_window to be clone of "existing" gui_window */
BW_CREATE_CLONE = (1 << 2),
- /** Window not opened by user interaction (e.g. JS popup) */
+ /** Window not opened by user interaction (e.g. JS popup)
+ *
+ * rfc2965:
+ * A transaction is verifiable if the user, or a
+ * user-designated agent, has the option to review
+ * the request-URI prior to its use in the transaction.
+ * A transaction is unverifiable if the user does not
+ * have that option.
+ */
BW_CREATE_UNVERIFIABLE = (1 << 3),
};
@@ -91,8 +99,16 @@ enum browser_window_nav_flags {
/** download rather than render the uri */
BW_NAVIGATE_DOWNLOAD = (1 << 1),
- /** this transaction is verifiable */
- BW_NAVIGATE_VERIFIABLE = (1 << 2)
+ /** Transation not caused by user interaction (e.g. JS-caused)
+ *
+ * rfc2965:
+ * A transaction is verifiable if the user, or a
+ * user-designated agent, has the option to review
+ * the request-URI prior to its use in the transaction.
+ * A transaction is unverifiable if the user does not
+ * have that option.
+ */
+ BW_NAVIGATE_UNVERIFIABLE = (1 << 2)
};
/**
diff --git a/desktop/frames.c b/desktop/frames.c
index 153c78e..ab5f817 100644
--- a/desktop/frames.c
+++ b/desktop/frames.c
@@ -252,7 +252,7 @@ void browser_window_create_iframes(struct browser_window *bw,
browser_window_navigate(window,
cur->url,
hlcache_handle_get_url(bw->current_content),
- BW_NAVIGATE_NONE,
+ BW_NAVIGATE_UNVERIFIABLE,
NULL,
NULL,
bw->current_content);
@@ -389,7 +389,8 @@ void browser_window_create_frameset(struct browser_window *bw,
browser_window_navigate(window,
frame->url,
hlcache_handle_get_url(parent),
- BW_NAVIGATE_HISTORY,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_UNVERIFIABLE,
NULL,
NULL,
parent);
diff --git a/desktop/local_history.c b/desktop/local_history.c
index 569fa44..687d4c7 100644
--- a/desktop/local_history.c
+++ b/desktop/local_history.c
@@ -463,7 +463,7 @@ void history_go(struct history *history, struct history_entry *entry,
} else {
history->current = entry;
browser_window_navigate(history->bw, url, NULL,
- BW_NAVIGATE_VERIFIABLE, NULL, NULL, NULL);
+ BW_NAVIGATE_NONE, NULL, NULL, NULL);
}
nsurl_unref(url);
diff --git a/framebuffer/gui.c b/framebuffer/gui.c
index 09dcdce..5b4f7a6 100644
--- a/framebuffer/gui.c
+++ b/framebuffer/gui.c
@@ -1094,14 +1094,8 @@ fb_url_enter(void *pw, char *text)
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
} else {
- browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
- NULL,
- NULL,
- NULL);
+ browser_window_navigate(bw, url, NULL, BW_NAVIGATE_HISTORY,
+ NULL, NULL, NULL);
nsurl_unref(url);
}
diff --git a/gtk/dialogs/about.c b/gtk/dialogs/about.c
index 1ebcb28..2cd2f34 100644
--- a/gtk/dialogs/about.c
+++ b/gtk/dialogs/about.c
@@ -37,8 +37,7 @@ nsgtk_about_dialog_credits(GtkWidget *button, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -60,8 +59,7 @@ nsgtk_about_dialog_licence(GtkWidget *button, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index cd54548..e9ef9a4 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -437,8 +437,7 @@ gboolean nsgtk_window_url_activate_event(GtkWidget *widget, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -550,8 +549,7 @@ static void nsgtk_openfile_open(const char *filename)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -959,8 +957,7 @@ MENUHANDLER(savelink)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -1459,8 +1456,7 @@ MULTIHANDLER(home)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1576,8 +1572,7 @@ MULTIHANDLER(contents)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1598,8 +1593,7 @@ MULTIHANDLER(guide)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1620,8 +1614,7 @@ MULTIHANDLER(info)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/javascript/jsapi/location.bnd b/javascript/jsapi/location.bnd
index ef71e1d..f64f633 100644
--- a/javascript/jsapi/location.bnd
+++ b/javascript/jsapi/location.bnd
@@ -62,8 +62,7 @@ operation assign %{
browser_window_navigate(bw,
joined,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -84,7 +83,7 @@ operation replace %{
browser_window_navigate(bw,
joined,
NULL,
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_NONE,
NULL,
NULL,
NULL);
@@ -129,7 +128,7 @@ setter href %{
browser_window_navigate(bw,
joined,
NULL,
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_NONE,
NULL,
NULL,
NULL);
diff --git a/monkey/browser.c b/monkey/browser.c
index 4895543..e61d6de 100644
--- a/monkey/browser.c
+++ b/monkey/browser.c
@@ -409,8 +409,7 @@ monkey_window_handle_go(int argc, char **argv)
browser_window_navigate(gw->bw,
url,
ref_url,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/render/form.c b/render/form.c
index 3c54b41..d02240f 100644
--- a/render/form.c
+++ b/render/form.c
@@ -1711,8 +1711,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_query,
page_url,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1732,8 +1731,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_url,
page_url,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
data,
NULL,
NULL);
@@ -1743,8 +1741,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_url,
page_url,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
success,
NULL);
diff --git a/render/html_interaction.c b/render/html_interaction.c
index 55eed76..a2baf2d 100644
--- a/render/html_interaction.c
+++ b/render/html_interaction.c
@@ -823,8 +823,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
browser_window_navigate(bw,
url,
content_get_url(c),
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -1003,8 +1002,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
browser_window_navigate(browser_window_find_target(bw, target, mouse),
url,
content_get_url(c),
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/riscos/gui.c b/riscos/gui.c
index e382635..1663c17 100644
--- a/riscos/gui.c
+++ b/riscos/gui.c
@@ -1515,8 +1515,7 @@ void ro_msg_dataload(wimp_message *message)
error = browser_window_navigate(g->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/riscos/gui/url_bar.c b/riscos/gui/url_bar.c
index 18bcb31..b757df3 100644
--- a/riscos/gui/url_bar.c
+++ b/riscos/gui/url_bar.c
@@ -857,8 +857,7 @@ bool ro_gui_url_bar_menu_select(struct url_bar *url_bar, wimp_i i,
browser_window_navigate(g->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/riscos/url_complete.c b/riscos/url_complete.c
index 6d99016..4a5d2d5 100644
--- a/riscos/url_complete.c
+++ b/riscos/url_complete.c
@@ -734,8 +734,7 @@ bool ro_gui_url_complete_click(wimp_pointer *pointer)
browser_window_navigate(g->bw,
url_complete_matches[url_complete_matches_selection],
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/riscos/window.c b/riscos/window.c
index 27fdb39..bf05298 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -2831,8 +2831,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
error = browser_window_navigate(bw,
url,
hlcache_handle_get_url(h),
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -4006,7 +4005,7 @@ void ro_gui_window_launch_url(struct gui_window *g, const char *url1)
browser_window_navigate(g->bw,
url,
NULL,
- BW_CREATE_HISTORY,
+ BW_NAVIGATE_HISTORY | BW_NAVIGATE_UNVERIFIABLE,
NULL,
NULL,
NULL);
@@ -4046,8 +4045,7 @@ bool ro_gui_window_navigate_up(struct gui_window *g, const char *url)
browser_window_navigate(g->bw,
parent,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -4083,8 +4081,7 @@ void ro_gui_window_action_home(struct gui_window *g)
error = browser_window_navigate(g->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/windows/gui.c b/windows/gui.c
index 51038a7..2559bf2 100644
--- a/windows/gui.c
+++ b/windows/gui.c
@@ -133,8 +133,7 @@ nsws_window_go(HWND hwnd, const char *urltxt)
browser_window_navigate(gw->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -876,8 +875,7 @@ nsws_window_command(HWND hwnd,
browser_window_navigate(gw->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1045,8 +1043,7 @@ nsws_window_command(HWND hwnd,
browser_window_navigate(gw->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
-----------------------------------------------------------------------
Summary of changes:
amiga/arexx.c | 9 +++------
amiga/context_menu.c | 15 +++++----------
amiga/download.c | 3 +--
amiga/file.c | 3 +--
amiga/gui.c | 15 +++++----------
amiga/menu.c | 3 +--
amiga/tree.c | 3 +--
atari/ctxmenu.c | 6 ++----
atari/rootwin.c | 2 +-
atari/toolbar.c | 5 ++---
beos/scaffolding.cpp | 12 +++++-------
cocoa/BookmarksController.m | 3 +--
cocoa/BrowserView.m | 6 ++----
desktop/browser.c | 14 +++++++-------
desktop/browser.h | 22 +++++++++++++++++++---
desktop/frames.c | 5 +++--
desktop/local_history.c | 2 +-
framebuffer/gui.c | 10 ++--------
gtk/dialogs/about.c | 6 ++----
gtk/scaffolding.c | 21 +++++++--------------
javascript/jsapi/location.bnd | 7 +++----
monkey/browser.c | 3 +--
render/form.c | 9 +++------
render/html_interaction.c | 6 ++----
riscos/gui.c | 3 +--
riscos/gui/url_bar.c | 3 +--
riscos/url_complete.c | 3 +--
riscos/window.c | 11 ++++-------
windows/gui.c | 9 +++------
29 files changed, 90 insertions(+), 129 deletions(-)
diff --git a/amiga/arexx.c b/amiga/arexx.c
index 515ee6d..240aafe 100644
--- a/amiga/arexx.c
+++ b/amiga/arexx.c
@@ -248,8 +248,7 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(curbw,
url,
NULL,
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -279,8 +278,7 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -507,8 +505,7 @@ STATIC VOID rx_home(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/context_menu.c b/amiga/context_menu.c
index 0662a2c..c7e438f 100644
--- a/amiga/context_menu.c
+++ b/amiga/context_menu.c
@@ -820,8 +820,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
hlcache_handle_get_url(gwin->bw->current_content),
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -835,8 +834,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
hlcache_handle_get_url(userdata),
hlcache_handle_get_url(gwin->bw->current_content),
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -852,8 +850,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
hlcache_handle_get_url(gwin->bw->current_content),
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -928,8 +925,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -999,8 +995,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/download.c b/amiga/download.c
index 1d10e92..0f8ae4c 100644
--- a/amiga/download.c
+++ b/amiga/download.c
@@ -274,8 +274,7 @@ static void gui_download_window_done(struct gui_download_window *dw)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
diff --git a/amiga/file.c b/amiga/file.c
index 9d4fa6b..91d3755 100644
--- a/amiga/file.c
+++ b/amiga/file.c
@@ -104,8 +104,7 @@ void ami_file_open(struct gui_window_2 *gwin)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/gui.c b/amiga/gui.c
index 92d668a..1bcc36c 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -1799,8 +1799,7 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1826,8 +1825,7 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1844,8 +1842,7 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -2326,8 +2323,7 @@ void ami_handle_appmsg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -4914,8 +4910,7 @@ void ami_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/menu.c b/amiga/menu.c
index 9b3c44d..014f21c 100644
--- a/amiga/menu.c
+++ b/amiga/menu.c
@@ -1034,8 +1034,7 @@ static void ami_menu_item_hotlist_entries(struct Hook *hook, APTR window, struct
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/amiga/tree.c b/amiga/tree.c
index 38b6338..8cffdb2 100644
--- a/amiga/tree.c
+++ b/amiga/tree.c
@@ -322,8 +322,7 @@ void ami_tree_drag_end(struct treeview_window *twin, int x, int y)
browser_window_navigate(gwin->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/atari/ctxmenu.c b/atari/ctxmenu.c
index 37c96ef..aeed475 100644
--- a/atari/ctxmenu.c
+++ b/atari/ctxmenu.c
@@ -238,8 +238,7 @@ void context_popup(struct gui_window * gw, short x, short y)
gw->browser->bw,
hlcache_handle_get_url(ctx->ccdata.object),
hlcache_handle_get_url(gw->browser->bw->current_content),
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL
@@ -258,8 +257,7 @@ void context_popup(struct gui_window * gw, short x, short y)
gw->browser->bw,
url,
hlcache_handle_get_url(gw->browser->bw->current_content),
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL
diff --git a/atari/rootwin.c b/atari/rootwin.c
index 4ab7442..5fc2905 100755
--- a/atari/rootwin.c
+++ b/atari/rootwin.c
@@ -1537,7 +1537,7 @@ static void on_file_dropped(ROOTWIN *rootwin, short msg[8])
if ((tmp_url != NULL)
&& nsurl_create(tmp_url, &ns_url) == NSERROR_OK) {
browser_window_navigate(gw->browser->bw, ns_url, NULL,
- BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL, NULL, NULL);
nsurl_unref(ns_url);
}
diff --git a/atari/toolbar.c b/atari/toolbar.c
index 1c3126b..aa6aa91 100644
--- a/atari/toolbar.c
+++ b/atari/toolbar.c
@@ -715,7 +715,7 @@ bool toolbar_key_input(struct s_toolbar *tb, short nkc)
warn_user("NoMemory", 0);
} else {
browser_window_navigate(gw->browser->bw, url, NULL,
- BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL, NULL, NULL);
nsurl_unref(url);
}
@@ -1001,8 +1001,7 @@ void toolbar_home_click(struct s_toolbar *tb)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/beos/scaffolding.cpp b/beos/scaffolding.cpp
index 1561cb2..628debc 100644
--- a/beos/scaffolding.cpp
+++ b/beos/scaffolding.cpp
@@ -888,7 +888,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
if (/*message->WasDropped() &&*/ i == 0) {
browser_window_navigate(bw, nsurl, NULL,
(browser_window_nav_flags)
- (BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE),
+ (BW_NAVIGATE_HISTORY),
NULL, NULL, NULL);
} else {
error = browser_window_create(BW_CREATE_CLONE,
@@ -949,7 +949,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
nsurl,
NULL,
- (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY | BW_NAVIGATE_UNVERIFIABLE),
NULL,
NULL,
NULL);
@@ -1019,8 +1019,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
url,
NULL,
- (browser_window_nav_flags)(BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
NULL,
NULL,
NULL);
@@ -1048,8 +1047,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
url,
NULL,
- (browser_window_nav_flags)(BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
NULL,
NULL,
NULL);
@@ -1268,7 +1266,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
if (nserr == NSERROR_OK) {
nserr = browser_window_navigate(bw,
url, NULL,
- (browser_window_nav_flags)(BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
NULL, NULL, NULL);
nsurl_unref(url);
}
diff --git a/cocoa/BookmarksController.m b/cocoa/BookmarksController.m
index 4ba66dd..64c2ef3 100644
--- a/cocoa/BookmarksController.m
+++ b/cocoa/BookmarksController.m
@@ -142,8 +142,7 @@ static const char *cocoa_hotlist_path( void )
error = browser_window_navigate([tab browser],
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/cocoa/BrowserView.m b/cocoa/BrowserView.m
index d525832..092c1bf 100644
--- a/cocoa/BrowserView.m
+++ b/cocoa/BrowserView.m
@@ -623,8 +623,7 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
browser_window_navigate(browser,
url,
NULL,
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -688,8 +687,7 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
browser_window_navigate(browser,
url,
NULL,
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
diff --git a/desktop/browser.c b/desktop/browser.c
index 9bff58b..ca60e9e 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -755,8 +755,8 @@ nserror browser_window_create(enum browser_window_create_flags flags,
if (url != NULL) {
enum browser_window_nav_flags nav_flags = BW_NAVIGATE_NONE;
- if (!(flags & BW_CREATE_UNVERIFIABLE))
- nav_flags |= BW_NAVIGATE_VERIFIABLE;
+ if (flags & BW_CREATE_UNVERIFIABLE)
+ nav_flags |= BW_NAVIGATE_UNVERIFIABLE;
if (flags & BW_CREATE_HISTORY)
nav_flags |= BW_NAVIGATE_HISTORY;
browser_window_navigate(ret, url, referrer, nav_flags, NULL,
@@ -1109,7 +1109,7 @@ static void browser_window_refresh(void *p)
nsurl *url;
nsurl *refresh;
hlcache_handle *parent = NULL;
- enum browser_window_nav_flags flags = BW_NAVIGATE_NONE;
+ enum browser_window_nav_flags flags = BW_NAVIGATE_UNVERIFIABLE;
assert(bw->current_content != NULL &&
(content_get_status(bw->current_content) ==
@@ -1139,7 +1139,7 @@ static void browser_window_refresh(void *p)
* all.
*/
if (bw->refresh_interval <= 100 && bw->parent == NULL) {
- flags |= BW_NAVIGATE_VERIFIABLE;
+ flags &= ~BW_NAVIGATE_UNVERIFIABLE;
} else {
parent = bw->current_content;
}
@@ -1812,7 +1812,7 @@ nserror browser_window_navigate(struct browser_window *bw,
}
/* Set up retrieval parameters */
- if ((flags & BW_NAVIGATE_VERIFIABLE) != 0) {
+ if (!(flags & BW_NAVIGATE_UNVERIFIABLE)) {
fetch_flags |= LLCACHE_RETRIEVE_VERIFIABLE;
}
@@ -1905,7 +1905,7 @@ nserror browser_window_navigate(struct browser_window *bw,
bw->history_add = (flags & BW_NAVIGATE_HISTORY);
/* Verifiable fetches may trigger a download */
- if ((flags & BW_NAVIGATE_VERIFIABLE) != 0) {
+ if (!(flags & BW_NAVIGATE_UNVERIFIABLE)) {
fetch_flags |= HLCACHE_RETRIEVE_MAY_DOWNLOAD;
}
@@ -2268,7 +2268,7 @@ void browser_window_reload(struct browser_window *bw, bool all)
browser_window_navigate(bw,
hlcache_handle_get_url(bw->current_content),
NULL,
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_NONE,
NULL,
NULL,
NULL);
diff --git a/desktop/browser.h b/desktop/browser.h
index 4cb8e01..ca99a5d 100644
--- a/desktop/browser.h
+++ b/desktop/browser.h
@@ -76,7 +76,15 @@ enum browser_window_create_flags {
/** New gui_window to be clone of "existing" gui_window */
BW_CREATE_CLONE = (1 << 2),
- /** Window not opened by user interaction (e.g. JS popup) */
+ /** Window not opened by user interaction (e.g. JS popup)
+ *
+ * rfc2965:
+ * A transaction is verifiable if the user, or a
+ * user-designated agent, has the option to review
+ * the request-URI prior to its use in the transaction.
+ * A transaction is unverifiable if the user does not
+ * have that option.
+ */
BW_CREATE_UNVERIFIABLE = (1 << 3),
};
@@ -91,8 +99,16 @@ enum browser_window_nav_flags {
/** download rather than render the uri */
BW_NAVIGATE_DOWNLOAD = (1 << 1),
- /** this transaction is verifiable */
- BW_NAVIGATE_VERIFIABLE = (1 << 2)
+ /** Transation not caused by user interaction (e.g. JS-caused)
+ *
+ * rfc2965:
+ * A transaction is verifiable if the user, or a
+ * user-designated agent, has the option to review
+ * the request-URI prior to its use in the transaction.
+ * A transaction is unverifiable if the user does not
+ * have that option.
+ */
+ BW_NAVIGATE_UNVERIFIABLE = (1 << 2)
};
/**
diff --git a/desktop/frames.c b/desktop/frames.c
index 153c78e..ab5f817 100644
--- a/desktop/frames.c
+++ b/desktop/frames.c
@@ -252,7 +252,7 @@ void browser_window_create_iframes(struct browser_window *bw,
browser_window_navigate(window,
cur->url,
hlcache_handle_get_url(bw->current_content),
- BW_NAVIGATE_NONE,
+ BW_NAVIGATE_UNVERIFIABLE,
NULL,
NULL,
bw->current_content);
@@ -389,7 +389,8 @@ void browser_window_create_frameset(struct browser_window *bw,
browser_window_navigate(window,
frame->url,
hlcache_handle_get_url(parent),
- BW_NAVIGATE_HISTORY,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_UNVERIFIABLE,
NULL,
NULL,
parent);
diff --git a/desktop/local_history.c b/desktop/local_history.c
index 569fa44..687d4c7 100644
--- a/desktop/local_history.c
+++ b/desktop/local_history.c
@@ -463,7 +463,7 @@ void history_go(struct history *history, struct history_entry *entry,
} else {
history->current = entry;
browser_window_navigate(history->bw, url, NULL,
- BW_NAVIGATE_VERIFIABLE, NULL, NULL, NULL);
+ BW_NAVIGATE_NONE, NULL, NULL, NULL);
}
nsurl_unref(url);
diff --git a/framebuffer/gui.c b/framebuffer/gui.c
index 09dcdce..5b4f7a6 100644
--- a/framebuffer/gui.c
+++ b/framebuffer/gui.c
@@ -1094,14 +1094,8 @@ fb_url_enter(void *pw, char *text)
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
} else {
- browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
- NULL,
- NULL,
- NULL);
+ browser_window_navigate(bw, url, NULL, BW_NAVIGATE_HISTORY,
+ NULL, NULL, NULL);
nsurl_unref(url);
}
diff --git a/gtk/dialogs/about.c b/gtk/dialogs/about.c
index 1ebcb28..2cd2f34 100644
--- a/gtk/dialogs/about.c
+++ b/gtk/dialogs/about.c
@@ -37,8 +37,7 @@ nsgtk_about_dialog_credits(GtkWidget *button, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -60,8 +59,7 @@ nsgtk_about_dialog_licence(GtkWidget *button, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index cd54548..e9ef9a4 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -437,8 +437,7 @@ gboolean nsgtk_window_url_activate_event(GtkWidget *widget, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -550,8 +549,7 @@ static void nsgtk_openfile_open(const char *filename)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -959,8 +957,7 @@ MENUHANDLER(savelink)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -1459,8 +1456,7 @@ MULTIHANDLER(home)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1576,8 +1572,7 @@ MULTIHANDLER(contents)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1598,8 +1593,7 @@ MULTIHANDLER(guide)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1620,8 +1614,7 @@ MULTIHANDLER(info)
browser_window_navigate(bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/javascript/jsapi/location.bnd b/javascript/jsapi/location.bnd
index ef71e1d..f64f633 100644
--- a/javascript/jsapi/location.bnd
+++ b/javascript/jsapi/location.bnd
@@ -62,8 +62,7 @@ operation assign %{
browser_window_navigate(bw,
joined,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -84,7 +83,7 @@ operation replace %{
browser_window_navigate(bw,
joined,
NULL,
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_NONE,
NULL,
NULL,
NULL);
@@ -129,7 +128,7 @@ setter href %{
browser_window_navigate(bw,
joined,
NULL,
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_NONE,
NULL,
NULL,
NULL);
diff --git a/monkey/browser.c b/monkey/browser.c
index 4895543..e61d6de 100644
--- a/monkey/browser.c
+++ b/monkey/browser.c
@@ -409,8 +409,7 @@ monkey_window_handle_go(int argc, char **argv)
browser_window_navigate(gw->bw,
url,
ref_url,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/render/form.c b/render/form.c
index 3c54b41..d02240f 100644
--- a/render/form.c
+++ b/render/form.c
@@ -1711,8 +1711,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_query,
page_url,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1732,8 +1731,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_url,
page_url,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
data,
NULL,
NULL);
@@ -1743,8 +1741,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_url,
page_url,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
success,
NULL);
diff --git a/render/html_interaction.c b/render/html_interaction.c
index 55eed76..a2baf2d 100644
--- a/render/html_interaction.c
+++ b/render/html_interaction.c
@@ -823,8 +823,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
browser_window_navigate(bw,
url,
content_get_url(c),
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -1003,8 +1002,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
browser_window_navigate(browser_window_find_target(bw, target, mouse),
url,
content_get_url(c),
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/riscos/gui.c b/riscos/gui.c
index e382635..1663c17 100644
--- a/riscos/gui.c
+++ b/riscos/gui.c
@@ -1515,8 +1515,7 @@ void ro_msg_dataload(wimp_message *message)
error = browser_window_navigate(g->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/riscos/gui/url_bar.c b/riscos/gui/url_bar.c
index 18bcb31..b757df3 100644
--- a/riscos/gui/url_bar.c
+++ b/riscos/gui/url_bar.c
@@ -857,8 +857,7 @@ bool ro_gui_url_bar_menu_select(struct url_bar *url_bar, wimp_i i,
browser_window_navigate(g->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/riscos/url_complete.c b/riscos/url_complete.c
index 6d99016..4a5d2d5 100644
--- a/riscos/url_complete.c
+++ b/riscos/url_complete.c
@@ -734,8 +734,7 @@ bool ro_gui_url_complete_click(wimp_pointer *pointer)
browser_window_navigate(g->bw,
url_complete_matches[url_complete_matches_selection],
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/riscos/window.c b/riscos/window.c
index 27fdb39..bf05298 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -2831,8 +2831,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
error = browser_window_navigate(bw,
url,
hlcache_handle_get_url(h),
- BW_NAVIGATE_DOWNLOAD |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD,
NULL,
NULL,
NULL);
@@ -4006,7 +4005,7 @@ void ro_gui_window_launch_url(struct gui_window *g, const char *url1)
browser_window_navigate(g->bw,
url,
NULL,
- BW_CREATE_HISTORY,
+ BW_NAVIGATE_HISTORY | BW_NAVIGATE_UNVERIFIABLE,
NULL,
NULL,
NULL);
@@ -4046,8 +4045,7 @@ bool ro_gui_window_navigate_up(struct gui_window *g, const char *url)
browser_window_navigate(g->bw,
parent,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -4083,8 +4081,7 @@ void ro_gui_window_action_home(struct gui_window *g)
error = browser_window_navigate(g->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
diff --git a/windows/gui.c b/windows/gui.c
index 51038a7..2559bf2 100644
--- a/windows/gui.c
+++ b/windows/gui.c
@@ -133,8 +133,7 @@ nsws_window_go(HWND hwnd, const char *urltxt)
browser_window_navigate(gw->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -876,8 +875,7 @@ nsws_window_command(HWND hwnd,
browser_window_navigate(gw->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
@@ -1045,8 +1043,7 @@ nsws_window_command(HWND hwnd,
browser_window_navigate(gw->bw,
url,
NULL,
- BW_NAVIGATE_HISTORY |
- BW_NAVIGATE_VERIFIABLE,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
NULL);
--
NetSurf Browser
9 years, 1 month
netsurf: branch master updated. release/3.0-1104-g76b5378
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/76b5378996c681ad1311e...
...commit http://git.netsurf-browser.org/netsurf.git/commit/76b5378996c681ad1311e57...
...tree http://git.netsurf-browser.org/netsurf.git/tree/76b5378996c681ad1311e57a4...
The branch, master has been updated
via 76b5378996c681ad1311e57a4c7c49dd465e634b (commit)
via 5087fde086ab45981547582355ba06ae2c73c286 (commit)
from 80fcfa7bce759f90d1e10af5e5c6d9da1a13a9ac (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=76b5378996c681ad131...
commit 76b5378996c681ad1311e57a4c7c49dd465e634b
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Add some explanation for the future.
diff --git a/amiga/gui.c b/amiga/gui.c
index 83f2c46..92d668a 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2648,6 +2648,8 @@ void ami_quit_netsurf(void)
break;
case AMINS_WINDOW:
+ /* This also closes windows that are attached to the
+ * gui_window, such as local history and find. */
ShowWindow(gwin->win, WINDOW_BACKMOST);
ami_close_all_tabs(gwin);
break;
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=5087fde086ab4598154...
commit 5087fde086ab45981547582355ba06ae2c73c286
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Force downloads to abort on quit
diff --git a/amiga/gui.c b/amiga/gui.c
index 5234a76..83f2c46 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2635,17 +2635,14 @@ void ami_quit_netsurf(void)
struct nsObject *nnode;
struct gui_window_2 *gwin;
- if(!IsMinListEmpty(window_list))
- {
+ if(!IsMinListEmpty(window_list)) {
node = (struct nsObject *)GetHead((struct List *)window_list);
- do
- {
+ do {
nnode=(struct nsObject *)GetSucc((struct Node *)node);
gwin = node->objstruct;
- switch(node->Type)
- {
+ switch(node->Type) {
case AMINS_TVWINDOW:
ami_tree_close((struct treeview_window *)gwin);
break;
@@ -2658,15 +2655,17 @@ void ami_quit_netsurf(void)
case AMINS_GUIOPTSWINDOW:
ami_gui_opts_close();
break;
- }
+ case AMINS_DLWINDOW:
+ ami_download_window_abort((struct gui_download_window *)gwin);
+ break;
+ }
} while(node = nnode);
win_destroyed = true;
}
- if(IsMinListEmpty(window_list))
- {
+ if(IsMinListEmpty(window_list)) {
/* last window closed, so exit */
netsurf_quit = true;
}
-----------------------------------------------------------------------
Summary of changes:
amiga/gui.c | 19 ++++++++++---------
1 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/amiga/gui.c b/amiga/gui.c
index 5234a76..92d668a 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2635,22 +2635,21 @@ void ami_quit_netsurf(void)
struct nsObject *nnode;
struct gui_window_2 *gwin;
- if(!IsMinListEmpty(window_list))
- {
+ if(!IsMinListEmpty(window_list)) {
node = (struct nsObject *)GetHead((struct List *)window_list);
- do
- {
+ do {
nnode=(struct nsObject *)GetSucc((struct Node *)node);
gwin = node->objstruct;
- switch(node->Type)
- {
+ switch(node->Type) {
case AMINS_TVWINDOW:
ami_tree_close((struct treeview_window *)gwin);
break;
case AMINS_WINDOW:
+ /* This also closes windows that are attached to the
+ * gui_window, such as local history and find. */
ShowWindow(gwin->win, WINDOW_BACKMOST);
ami_close_all_tabs(gwin);
break;
@@ -2658,15 +2657,17 @@ void ami_quit_netsurf(void)
case AMINS_GUIOPTSWINDOW:
ami_gui_opts_close();
break;
- }
+ case AMINS_DLWINDOW:
+ ami_download_window_abort((struct gui_download_window *)gwin);
+ break;
+ }
} while(node = nnode);
win_destroyed = true;
}
- if(IsMinListEmpty(window_list))
- {
+ if(IsMinListEmpty(window_list)) {
/* last window closed, so exit */
netsurf_quit = true;
}
--
NetSurf Browser
9 years, 1 month
netsurf: branch master updated. release/3.0-1102-g80fcfa7
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/80fcfa7bce759f90d1e10...
...commit http://git.netsurf-browser.org/netsurf.git/commit/80fcfa7bce759f90d1e10af...
...tree http://git.netsurf-browser.org/netsurf.git/tree/80fcfa7bce759f90d1e10af5e...
The branch, master has been updated
via 80fcfa7bce759f90d1e10af5e5c6d9da1a13a9ac (commit)
via f69f7b5ee77c1e39fc32cd65e923511cb80f67b0 (commit)
via cbf423d4c60ff145246851dd36315833a8581c5b (commit)
via 55a96a7eeeaa44bb1dece9e5e09ae6127c3ece48 (commit)
via c384c5dd3e6ec53bd8aabe62bfcf39b9aa2ef7e1 (commit)
via 7fa641616b4c1c2ef8b209618d4b158d45e370c4 (commit)
via e975b355f54212adfcd6b3a8e32fede621098a31 (commit)
from a6fd3284050532f43261ddce8972e03e6669bd94 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=80fcfa7bce759f90d1e...
commit 80fcfa7bce759f90d1e10af5e5c6d9da1a13a9ac
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Tidy-up; ami_try_quit is checking the window list now
diff --git a/amiga/gui.c b/amiga/gui.c
index 63d3557..5234a76 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -1480,121 +1480,60 @@ void ami_handle_msg(void)
gwin = node->objstruct;
- if(node->Type == AMINS_TVWINDOW)
- {
- if(ami_tree_event((struct treeview_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ if(node->Type == AMINS_TVWINDOW) {
+ if(ami_tree_event((struct treeview_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_FINDWINDOW)
- {
- if(ami_search_event())
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_FINDWINDOW) {
+ if(ami_search_event()) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_HISTORYWINDOW)
- {
- if(ami_history_event((struct history_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_HISTORYWINDOW) {
+ if(ami_history_event((struct history_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_PRINTWINDOW)
- {
- if(ami_print_event((struct ami_print_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_PRINTWINDOW) {
+ if(ami_print_event((struct ami_print_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_GUIOPTSWINDOW)
- {
- if(ami_gui_opts_event())
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit with conditions ;) */
- if(scrn) ami_try_quit();
- }
+ } else if(node->Type == AMINS_GUIOPTSWINDOW) {
+ if(ami_gui_opts_event()) {
+ /* last window possibly closed, so exit with conditions ;) */
+ if(scrn) ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_DLWINDOW)
- {
- if(ami_download_window_event((struct gui_download_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_DLWINDOW) {
+ if(ami_download_window_event((struct gui_download_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_LOGINWINDOW)
- {
- if(ami_401login_event((struct gui_login_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_LOGINWINDOW) {
+ if(ami_401login_event((struct gui_login_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=f69f7b5ee77c1e39fc3...
commit f69f7b5ee77c1e39fc32cd65e923511cb80f67b0
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Fix warning
diff --git a/amiga/file.c b/amiga/file.c
index 8cf460f..9d4fa6b 100644
--- a/amiga/file.c
+++ b/amiga/file.c
@@ -22,6 +22,7 @@
#include "amiga/filetype.h"
#include "amiga/icon.h"
#include "amiga/iff_dr2d.h"
+#include "amiga/misc.h"
#include "amiga/save_pdf.h"
#include "amiga/theme.h"
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=cbf423d4c60ff145246...
commit cbf423d4c60ff145246851dd36315833a8581c5b
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Try quitting after downloading if there are no windows open
diff --git a/amiga/download.c b/amiga/download.c
index a716d38..1d10e92 100644
--- a/amiga/download.c
+++ b/amiga/download.c
@@ -282,6 +282,7 @@ static void gui_download_window_done(struct gui_download_window *dw)
nsurl_unref(url);
}
}
+ ami_try_quit(); /* In case the only window open was this download */
}
static void gui_download_window_error(struct gui_download_window *dw,
diff --git a/amiga/gui.c b/amiga/gui.c
index 995c6f8..63d3557 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2792,6 +2792,8 @@ void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen, BOOL donotwai
void ami_try_quit(void)
{
+ if(!IsMinListEmpty(window_list)) return;
+
if(nsoption_bool(close_no_quit) == false)
{
netsurf_quit = true;
diff --git a/amiga/gui.h b/amiga/gui.h
index 9470660..ad18750 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -153,6 +153,7 @@ struct gui_window
void ami_get_msg(void);
void ami_close_all_tabs(struct gui_window_2 *gwin);
+void ami_try_quit(void);
void ami_quit_netsurf(void);
void ami_schedule_redraw(struct gui_window_2 *gwin, bool full_redraw);
STRPTR ami_locale_langs(void);
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=55a96a7eeeaa44bb1de...
commit 55a96a7eeeaa44bb1dece9e5e09ae6127c3ece48
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
screen_signal should be reset to -1
diff --git a/amiga/gui.c b/amiga/gui.c
index 3206d6f..995c6f8 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2765,7 +2765,7 @@ void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen, BOOL donotwai
if(CloseScreen(scrn) == TRUE) {
if(locked_screen == FALSE) {
FreeSignal(screen_signal);
- screen_signal = NULL;
+ screen_signal = -1;
scrn = NULL;
}
return;
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=c384c5dd3e6ec53bd8a...
commit c384c5dd3e6ec53bd8aabe62bfcf39b9aa2ef7e1
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Force the GUI opts window closed on quit
diff --git a/amiga/gui.c b/amiga/gui.c
index 6c44dc6..3206d6f 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2715,6 +2715,10 @@ void ami_quit_netsurf(void)
ShowWindow(gwin->win, WINDOW_BACKMOST);
ami_close_all_tabs(gwin);
break;
+
+ case AMINS_GUIOPTSWINDOW:
+ ami_gui_opts_close();
+ break;
}
} while(node = nnode);
diff --git a/amiga/gui_options.h b/amiga/gui_options.h
index 0fd0715..2b57769 100755
--- a/amiga/gui_options.h
+++ b/amiga/gui_options.h
@@ -20,6 +20,7 @@
#define AMIGA_GUI_OPTIONS_H
void ami_gui_opts_open(void);
BOOL ami_gui_opts_event(void);
+void ami_gui_opts_close(void);
char *current_user_options;
#endif
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=7fa641616b4c1c2ef8b...
commit 7fa641616b4c1c2ef8b209618d4b158d45e370c4
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Free help before attempting to close the screen, as it doesn't consider itself a visitor window.
diff --git a/amiga/gui.c b/amiga/gui.c
index c5ef669..6c44dc6 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2819,6 +2819,7 @@ static void gui_quit(void)
ami_free_layers(&browserglob);
ami_close_fonts();
+ ami_help_free();
LOG(("Closing screen"));
ami_gui_close_screen(scrn, locked_screen, FALSE);
@@ -2836,9 +2837,7 @@ static void gui_quit(void)
FreeSysObject(ASOT_PORT,appport);
FreeSysObject(ASOT_PORT,sport);
- ami_help_free();
ami_file_req_free();
-
ami_openurl_close();
FreeStringClass(urlStringClass);
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=e975b355f54212adfcd...
commit e975b355f54212adfcd6b3a8e32fede621098a31
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Don't wait for the screen to close unless we're actually quitting.
diff --git a/amiga/gui.c b/amiga/gui.c
index fc33b1f..c5ef669 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2755,7 +2755,7 @@ void ami_quit_netsurf_delayed(void)
}
}
-void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
+void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen, BOOL donotwait)
{
if(scrn == NULL) return;
if(CloseScreen(scrn) == TRUE) {
@@ -2767,6 +2767,7 @@ void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
return;
}
if(locked_screen == TRUE) return;
+ if(donotwait == TRUE) return;
/* If this is our own screen, wait for visitor windows to close */
if(screen_signal != -1) {
@@ -2794,7 +2795,7 @@ void ami_try_quit(void)
}
else
{
- ami_gui_close_screen(scrn, locked_screen);
+ ami_gui_close_screen(scrn, locked_screen, TRUE);
}
}
@@ -2820,7 +2821,7 @@ static void gui_quit(void)
ami_close_fonts();
LOG(("Closing screen"));
- ami_gui_close_screen(scrn, locked_screen);
+ ami_gui_close_screen(scrn, locked_screen, FALSE);
FreeVec(nsscreentitle);
LOG(("Freeing menu items"));
-----------------------------------------------------------------------
Summary of changes:
amiga/download.c | 1 +
amiga/file.c | 1 +
amiga/gui.c | 137 +++++++++++++++-----------------------------------
amiga/gui.h | 1 +
amiga/gui_options.h | 1 +
5 files changed, 45 insertions(+), 96 deletions(-)
diff --git a/amiga/download.c b/amiga/download.c
index a716d38..1d10e92 100644
--- a/amiga/download.c
+++ b/amiga/download.c
@@ -282,6 +282,7 @@ static void gui_download_window_done(struct gui_download_window *dw)
nsurl_unref(url);
}
}
+ ami_try_quit(); /* In case the only window open was this download */
}
static void gui_download_window_error(struct gui_download_window *dw,
diff --git a/amiga/file.c b/amiga/file.c
index 8cf460f..9d4fa6b 100644
--- a/amiga/file.c
+++ b/amiga/file.c
@@ -22,6 +22,7 @@
#include "amiga/filetype.h"
#include "amiga/icon.h"
#include "amiga/iff_dr2d.h"
+#include "amiga/misc.h"
#include "amiga/save_pdf.h"
#include "amiga/theme.h"
diff --git a/amiga/gui.c b/amiga/gui.c
index fc33b1f..5234a76 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -1480,121 +1480,60 @@ void ami_handle_msg(void)
gwin = node->objstruct;
- if(node->Type == AMINS_TVWINDOW)
- {
- if(ami_tree_event((struct treeview_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ if(node->Type == AMINS_TVWINDOW) {
+ if(ami_tree_event((struct treeview_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_FINDWINDOW)
- {
- if(ami_search_event())
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_FINDWINDOW) {
+ if(ami_search_event()) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_HISTORYWINDOW)
- {
- if(ami_history_event((struct history_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_HISTORYWINDOW) {
+ if(ami_history_event((struct history_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_PRINTWINDOW)
- {
- if(ami_print_event((struct ami_print_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_PRINTWINDOW) {
+ if(ami_print_event((struct ami_print_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_GUIOPTSWINDOW)
- {
- if(ami_gui_opts_event())
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit with conditions ;) */
- if(scrn) ami_try_quit();
- }
+ } else if(node->Type == AMINS_GUIOPTSWINDOW) {
+ if(ami_gui_opts_event()) {
+ /* last window possibly closed, so exit with conditions ;) */
+ if(scrn) ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_DLWINDOW)
- {
- if(ami_download_window_event((struct gui_download_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_DLWINDOW) {
+ if(ami_download_window_event((struct gui_download_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
- }
- else if(node->Type == AMINS_LOGINWINDOW)
- {
- if(ami_401login_event((struct gui_login_window *)gwin))
- {
- if(IsMinListEmpty(window_list))
- {
- /* last window closed, so exit */
- ami_try_quit();
- }
+ } else if(node->Type == AMINS_LOGINWINDOW) {
+ if(ami_401login_event((struct gui_login_window *)gwin)) {
+ ami_try_quit();
break;
- }
- else
- {
+ } else {
node = nnode;
continue;
}
@@ -2715,6 +2654,10 @@ void ami_quit_netsurf(void)
ShowWindow(gwin->win, WINDOW_BACKMOST);
ami_close_all_tabs(gwin);
break;
+
+ case AMINS_GUIOPTSWINDOW:
+ ami_gui_opts_close();
+ break;
}
} while(node = nnode);
@@ -2755,18 +2698,19 @@ void ami_quit_netsurf_delayed(void)
}
}
-void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
+void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen, BOOL donotwait)
{
if(scrn == NULL) return;
if(CloseScreen(scrn) == TRUE) {
if(locked_screen == FALSE) {
FreeSignal(screen_signal);
- screen_signal = NULL;
+ screen_signal = -1;
scrn = NULL;
}
return;
}
if(locked_screen == TRUE) return;
+ if(donotwait == TRUE) return;
/* If this is our own screen, wait for visitor windows to close */
if(screen_signal != -1) {
@@ -2787,6 +2731,8 @@ void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
void ami_try_quit(void)
{
+ if(!IsMinListEmpty(window_list)) return;
+
if(nsoption_bool(close_no_quit) == false)
{
netsurf_quit = true;
@@ -2794,7 +2740,7 @@ void ami_try_quit(void)
}
else
{
- ami_gui_close_screen(scrn, locked_screen);
+ ami_gui_close_screen(scrn, locked_screen, TRUE);
}
}
@@ -2818,9 +2764,10 @@ static void gui_quit(void)
ami_free_layers(&browserglob);
ami_close_fonts();
+ ami_help_free();
LOG(("Closing screen"));
- ami_gui_close_screen(scrn, locked_screen);
+ ami_gui_close_screen(scrn, locked_screen, FALSE);
FreeVec(nsscreentitle);
LOG(("Freeing menu items"));
@@ -2835,9 +2782,7 @@ static void gui_quit(void)
FreeSysObject(ASOT_PORT,appport);
FreeSysObject(ASOT_PORT,sport);
- ami_help_free();
ami_file_req_free();
-
ami_openurl_close();
FreeStringClass(urlStringClass);
diff --git a/amiga/gui.h b/amiga/gui.h
index 9470660..ad18750 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -153,6 +153,7 @@ struct gui_window
void ami_get_msg(void);
void ami_close_all_tabs(struct gui_window_2 *gwin);
+void ami_try_quit(void);
void ami_quit_netsurf(void);
void ami_schedule_redraw(struct gui_window_2 *gwin, bool full_redraw);
STRPTR ami_locale_langs(void);
diff --git a/amiga/gui_options.h b/amiga/gui_options.h
index 0fd0715..2b57769 100755
--- a/amiga/gui_options.h
+++ b/amiga/gui_options.h
@@ -20,6 +20,7 @@
#define AMIGA_GUI_OPTIONS_H
void ami_gui_opts_open(void);
BOOL ami_gui_opts_event(void);
+void ami_gui_opts_close(void);
char *current_user_options;
#endif
--
NetSurf Browser
9 years, 1 month
netsurf: branch master updated. release/3.0-1095-ga6fd328
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/a6fd3284050532f43261d...
...commit http://git.netsurf-browser.org/netsurf.git/commit/a6fd3284050532f43261ddc...
...tree http://git.netsurf-browser.org/netsurf.git/tree/a6fd3284050532f43261ddce8...
The branch, master has been updated
via a6fd3284050532f43261ddce8972e03e6669bd94 (commit)
via 709665e5c050085fd5e250ae0534ea057df2ffda (commit)
via 802fb8a77ee26249f8fa8d43249eb59a5bec43ab (commit)
via 36e0715dfb5411a9719f3ca4a032a6d75c267c36 (commit)
via e1b5332192f85945e86ec5f581d4914b0c9601b0 (commit)
via 4aa59f538276ce9413121d6d2e6eeed8ae5c0900 (commit)
from a23b1f34d352fc216b2677a7d3d06baa8bf57595 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=a6fd3284050532f4326...
commit a6fd3284050532f43261ddce8972e03e6669bd94
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Comment out debug for now
diff --git a/amiga/agclass/amigaguide_class.c b/amiga/agclass/amigaguide_class.c
index 770c317..fa88dd6 100755
--- a/amiga/agclass/amigaguide_class.c
+++ b/amiga/agclass/amigaguide_class.c
@@ -362,7 +362,7 @@ uint32 agm_process(Class *cl, Object *o, Msg msg)
while ( (lod->agm = IAmigaGuide->GetAmigaGuideMsg(lod->agHandle)) ) {
switch(lod->agm->agm_Type) {
default:
- printf("%d\n", lod->agm->agm_Type);
+ //printf("%d\n", lod->agm->agm_Type);
break;
}
}
diff --git a/amiga/help.c b/amiga/help.c
index 079071b..f094c70 100755
--- a/amiga/help.c
+++ b/amiga/help.c
@@ -78,6 +78,6 @@ ULONG ami_help_signal(void)
void ami_help_process(void)
{
ULONG ret = IDoMethod(AmigaGuideObject, AGM_PROCESS, NULL);
- printf("ret = %d\n", ret); // should be NULL if closed
+ //printf("ret = %d\n", ret); // should be NULL if closed
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=709665e5c050085fd5e...
commit 709665e5c050085fd5e250ae0534ea057df2ffda
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Ensure we always free the screen notification signal
diff --git a/amiga/gui.c b/amiga/gui.c
index af0b06d..fc33b1f 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2759,7 +2759,11 @@ void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
{
if(scrn == NULL) return;
if(CloseScreen(scrn) == TRUE) {
- if(locked_screen == FALSE) scrn = NULL;
+ if(locked_screen == FALSE) {
+ FreeSignal(screen_signal);
+ screen_signal = NULL;
+ scrn = NULL;
+ }
return;
}
if(locked_screen == TRUE) return;
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=802fb8a77ee26249f8f...
commit 802fb8a77ee26249f8fa8d43249eb59a5bec43ab
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Need to get, rather than set, the signal
diff --git a/amiga/help.c b/amiga/help.c
index 4e58bca..079071b 100755
--- a/amiga/help.c
+++ b/amiga/help.c
@@ -71,7 +71,7 @@ ULONG ami_help_signal(void)
{
ULONG ag_sig = 0;
if(AmigaGuideObject)
- SetAttrs(AmigaGuideObject, AMIGAGUIDE_Signal, &ag_sig, TAG_DONE);
+ GetAttr(AMIGAGUIDE_Signal, AmigaGuideObject, &ag_sig);
return ag_sig;
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=36e0715dfb5411a9719...
commit 36e0715dfb5411a9719f3ca4a032a6d75c267c36
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Get and process AmigaGuide help messages
diff --git a/amiga/gui.c b/amiga/gui.c
index d3b7574..af0b06d 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2556,8 +2556,9 @@ void ami_get_msg(void)
struct TimerRequest *timermsg = NULL;
struct MsgPort *printmsgport = ami_print_get_msgport();
ULONG printsig = 0;
+ ULONG helpsignal = ami_help_signal();
if(printmsgport) printsig = 1L << printmsgport->mp_SigBit;
- ULONG signalmask = winsignal | appsig | schedulesig | rxsig | printsig | applibsig | ctrlcsig;
+ ULONG signalmask = winsignal | appsig | schedulesig | rxsig | printsig | applibsig | ctrlcsig | helpsignal;
signal = Wait(signalmask);
@@ -2573,25 +2574,23 @@ void ami_get_msg(void)
if(signal & applibsig)
ami_handle_applib();
- if(signal & printsig)
- {
+ if(signal & printsig) {
while(GetMsg(printmsgport)); //ReplyMsg
ami_print_cont();
}
- if(signal & schedulesig)
- {
- if(timermsg = (struct TimerRequest *)GetMsg(msgport))
- {
+ if(signal & schedulesig) {
+ if(timermsg = (struct TimerRequest *)GetMsg(msgport)) {
ReplyMsg((struct Message *)timermsg);
schedule_run(FALSE);
}
}
+ if(signal & helpsignal)
+ ami_help_process();
+
if(signal & ctrlcsig)
- {
ami_quit_netsurf_delayed();
- }
}
static void ami_gui_fetch_callback(void *p)
@@ -2778,6 +2777,7 @@ void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
}
FreeSignal(screen_signal);
+ screen_signal = -1;
scrn = NULL;
}
diff --git a/amiga/help.c b/amiga/help.c
index 24eaa7d..4e58bca 100755
--- a/amiga/help.c
+++ b/amiga/help.c
@@ -66,3 +66,18 @@ void ami_help_new_screen(struct Screen *screen)
if(AmigaGuideObject == NULL) return;
SetAttrs(AmigaGuideObject, AMIGAGUIDE_Screen, screen, TAG_DONE);
}
+
+ULONG ami_help_signal(void)
+{
+ ULONG ag_sig = 0;
+ if(AmigaGuideObject)
+ SetAttrs(AmigaGuideObject, AMIGAGUIDE_Signal, &ag_sig, TAG_DONE);
+ return ag_sig;
+}
+
+void ami_help_process(void)
+{
+ ULONG ret = IDoMethod(AmigaGuideObject, AGM_PROCESS, NULL);
+ printf("ret = %d\n", ret); // should be NULL if closed
+}
+
diff --git a/amiga/help.h b/amiga/help.h
index ce3a462..e405edd 100755
--- a/amiga/help.h
+++ b/amiga/help.h
@@ -32,4 +32,7 @@ struct Screen;
void ami_help_open(ULONG node, struct Screen *screen);
void ami_help_free(void);
void ami_help_new_screen(struct Screen *screen);
+ULONG ami_help_signal(void);
+void ami_help_process(void);
#endif
+
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=e1b5332192f85945e86...
commit e1b5332192f85945e86ec5f581d4914b0c9601b0
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Add ability to process AmigaGuide messages whilst the help system is running
diff --git a/amiga/agclass/amigaguide_class.c b/amiga/agclass/amigaguide_class.c
index dfac7ad..770c317 100755
--- a/amiga/agclass/amigaguide_class.c
+++ b/amiga/agclass/amigaguide_class.c
@@ -34,7 +34,7 @@ uint32 om_set(Class *, Object *, struct opSet *);
uint32 om_get(Class *, Object *, struct opGet *);
uint32 agm_open(Class *, Object *, Msg);
uint32 agm_close(Class *, Object *, Msg);
-
+uint32 agm_process(Class *, Object *, Msg);
/* *************************** class initialization and disposal ***************************** */
@@ -107,6 +107,9 @@ static uint32 dispatchAGClass(Class *cl, Object *o, Msg msg)
case AGM_CLOSE:
return agm_close(cl, o, msg);
+ case AGM_PROCESS:
+ return agm_process(cl, o, msg);
+
default:
return IIntuition->IDoSuperMethodA(cl, o, msg);
}
@@ -289,6 +292,11 @@ uint32 om_get(Class *cl, Object *o, struct opGet *msg)
retVal = 1;
break;
+ case AMIGAGUIDE_Signal:
+ *(msg->opg_Storage) = (uint32)lod->agSignal;
+ retVal = 1;
+ break;
+
default:
retVal = IIntuition->IDoSuperMethodA(cl, o, (Msg)msg);
}
@@ -344,3 +352,23 @@ uint32 agm_close(Class *cl, Object *o, Msg msg)
return (uint32)lod->agHandle;
}
+
+
+uint32 agm_process(Class *cl, Object *o, Msg msg)
+{
+ struct localObjectData *lod = (struct localObjectData *)INST_DATA(cl, o);
+
+ if (lod->agHandle) {
+ while ( (lod->agm = IAmigaGuide->GetAmigaGuideMsg(lod->agHandle)) ) {
+ switch(lod->agm->agm_Type) {
+ default:
+ printf("%d\n", lod->agm->agm_Type);
+ break;
+ }
+ }
+ IAmigaGuide->ReplyAmigaGuideMsg(lod->agm);
+ }
+
+ return (uint32)lod->agHandle;
+}
+
diff --git a/amiga/agclass/amigaguide_class.h b/amiga/agclass/amigaguide_class.h
index f122f35..ee7e55e 100755
--- a/amiga/agclass/amigaguide_class.h
+++ b/amiga/agclass/amigaguide_class.h
@@ -27,10 +27,13 @@
#define AMIGAGUIDE_BaseName (AMIGAGUIDE_Dummy + 4) // Basename of the application that opens the help file.
#define AMIGAGUIDE_ContextArray (AMIGAGUIDE_Dummy + 5) // Context node array (must be NULL-terminated).
#define AMIGAGUIDE_ContextID (AMIGAGUIDE_Dummy + 6) // Index value of the node to display.
+#define AMIGAGUIDE_Signal (AMIGAGUIDE_Dummy + 7) // Signal mask to wait on
// method definition
-#define AGM_OPEN WM_OPEN
-#define AGM_CLOSE WM_CLOSE
+#define AGM_Dummy AMIGAGUIDE_Dummy + 100
+#define AGM_OPEN AGM_Dummy + 1
+#define AGM_CLOSE AGM_Dummy + 2
+#define AGM_PROCESS AGM_Dummy + 3
// function prototypes
Class *initAGClass(void);
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=4aa59f538276ce94131...
commit 4aa59f538276ce9413121d6d2e6eeed8ae5c0900
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
SA_PubSig needs setting at screen open time.
Potentially this fixes a screen closure problem.
diff --git a/amiga/gui.c b/amiga/gui.c
index 137e159..d3b7574 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -163,6 +163,7 @@ Class *urlStringClass;
BOOL locked_screen = FALSE;
BOOL screen_closed = FALSE;
+ULONG screen_signal = -1;
struct MsgPort *applibport = NULL;
ULONG applibsig = 0;
@@ -763,11 +764,15 @@ void ami_openscreen(void)
}
}
+ screen_signal = AllocSignal(-1);
+ LOG(("Screen signal %d", screen_signal));
scrn = OpenScreenTags(NULL,
SA_DisplayID, id,
SA_Title, nsscreentitle,
SA_Type, PUBLICSCREEN,
SA_PubName, "NetSurf",
+ SA_PubSig, screen_signal,
+ SA_PubTask, FindTask(0),
SA_LikeWorkbench, TRUE,
SA_Compositing, compositing,
TAG_DONE);
@@ -2686,20 +2691,6 @@ void ami_switch_tab(struct gui_window_2 *gwin,bool redraw)
}
}
-void ami_try_quit(void)
-{
- if(nsoption_bool(close_no_quit) == false)
- {
- netsurf_quit = true;
- return;
- }
- else
- {
- if(locked_screen == FALSE)
- if(CloseScreen(scrn)) scrn = NULL;
- }
-}
-
void ami_quit_netsurf(void)
{
struct nsObject *node;
@@ -2767,16 +2758,16 @@ void ami_quit_netsurf_delayed(void)
void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
{
- ULONG screen_signal = -1;
-
if(scrn == NULL) return;
- if(CloseScreen(scrn)) return;
+ if(CloseScreen(scrn) == TRUE) {
+ if(locked_screen == FALSE) scrn = NULL;
+ return;
+ }
if(locked_screen == TRUE) return;
/* If this is our own screen, wait for visitor windows to close */
- if((screen_signal = AllocSignal(-1)) != -1) {
+ if(screen_signal != -1) {
ULONG scrnsig = 1 << screen_signal;
- SetScreenAttr(scrn, SA_PubSig, (APTR)screen_signal, sizeof(ULONG));
LOG(("Waiting for visitor windows to close... (signal)"));
Wait(scrnsig);
}
@@ -2787,6 +2778,20 @@ void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
}
FreeSignal(screen_signal);
+ scrn = NULL;
+}
+
+void ami_try_quit(void)
+{
+ if(nsoption_bool(close_no_quit) == false)
+ {
+ netsurf_quit = true;
+ return;
+ }
+ else
+ {
+ ami_gui_close_screen(scrn, locked_screen);
+ }
}
static void gui_quit(void)
-----------------------------------------------------------------------
Summary of changes:
amiga/agclass/amigaguide_class.c | 30 +++++++++++++++++-
amiga/agclass/amigaguide_class.h | 7 +++-
amiga/gui.c | 65 +++++++++++++++++++++----------------
amiga/help.c | 15 +++++++++
amiga/help.h | 3 ++
5 files changed, 89 insertions(+), 31 deletions(-)
diff --git a/amiga/agclass/amigaguide_class.c b/amiga/agclass/amigaguide_class.c
index dfac7ad..fa88dd6 100755
--- a/amiga/agclass/amigaguide_class.c
+++ b/amiga/agclass/amigaguide_class.c
@@ -34,7 +34,7 @@ uint32 om_set(Class *, Object *, struct opSet *);
uint32 om_get(Class *, Object *, struct opGet *);
uint32 agm_open(Class *, Object *, Msg);
uint32 agm_close(Class *, Object *, Msg);
-
+uint32 agm_process(Class *, Object *, Msg);
/* *************************** class initialization and disposal ***************************** */
@@ -107,6 +107,9 @@ static uint32 dispatchAGClass(Class *cl, Object *o, Msg msg)
case AGM_CLOSE:
return agm_close(cl, o, msg);
+ case AGM_PROCESS:
+ return agm_process(cl, o, msg);
+
default:
return IIntuition->IDoSuperMethodA(cl, o, msg);
}
@@ -289,6 +292,11 @@ uint32 om_get(Class *cl, Object *o, struct opGet *msg)
retVal = 1;
break;
+ case AMIGAGUIDE_Signal:
+ *(msg->opg_Storage) = (uint32)lod->agSignal;
+ retVal = 1;
+ break;
+
default:
retVal = IIntuition->IDoSuperMethodA(cl, o, (Msg)msg);
}
@@ -344,3 +352,23 @@ uint32 agm_close(Class *cl, Object *o, Msg msg)
return (uint32)lod->agHandle;
}
+
+
+uint32 agm_process(Class *cl, Object *o, Msg msg)
+{
+ struct localObjectData *lod = (struct localObjectData *)INST_DATA(cl, o);
+
+ if (lod->agHandle) {
+ while ( (lod->agm = IAmigaGuide->GetAmigaGuideMsg(lod->agHandle)) ) {
+ switch(lod->agm->agm_Type) {
+ default:
+ //printf("%d\n", lod->agm->agm_Type);
+ break;
+ }
+ }
+ IAmigaGuide->ReplyAmigaGuideMsg(lod->agm);
+ }
+
+ return (uint32)lod->agHandle;
+}
+
diff --git a/amiga/agclass/amigaguide_class.h b/amiga/agclass/amigaguide_class.h
index f122f35..ee7e55e 100755
--- a/amiga/agclass/amigaguide_class.h
+++ b/amiga/agclass/amigaguide_class.h
@@ -27,10 +27,13 @@
#define AMIGAGUIDE_BaseName (AMIGAGUIDE_Dummy + 4) // Basename of the application that opens the help file.
#define AMIGAGUIDE_ContextArray (AMIGAGUIDE_Dummy + 5) // Context node array (must be NULL-terminated).
#define AMIGAGUIDE_ContextID (AMIGAGUIDE_Dummy + 6) // Index value of the node to display.
+#define AMIGAGUIDE_Signal (AMIGAGUIDE_Dummy + 7) // Signal mask to wait on
// method definition
-#define AGM_OPEN WM_OPEN
-#define AGM_CLOSE WM_CLOSE
+#define AGM_Dummy AMIGAGUIDE_Dummy + 100
+#define AGM_OPEN AGM_Dummy + 1
+#define AGM_CLOSE AGM_Dummy + 2
+#define AGM_PROCESS AGM_Dummy + 3
// function prototypes
Class *initAGClass(void);
diff --git a/amiga/gui.c b/amiga/gui.c
index 137e159..fc33b1f 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -163,6 +163,7 @@ Class *urlStringClass;
BOOL locked_screen = FALSE;
BOOL screen_closed = FALSE;
+ULONG screen_signal = -1;
struct MsgPort *applibport = NULL;
ULONG applibsig = 0;
@@ -763,11 +764,15 @@ void ami_openscreen(void)
}
}
+ screen_signal = AllocSignal(-1);
+ LOG(("Screen signal %d", screen_signal));
scrn = OpenScreenTags(NULL,
SA_DisplayID, id,
SA_Title, nsscreentitle,
SA_Type, PUBLICSCREEN,
SA_PubName, "NetSurf",
+ SA_PubSig, screen_signal,
+ SA_PubTask, FindTask(0),
SA_LikeWorkbench, TRUE,
SA_Compositing, compositing,
TAG_DONE);
@@ -2551,8 +2556,9 @@ void ami_get_msg(void)
struct TimerRequest *timermsg = NULL;
struct MsgPort *printmsgport = ami_print_get_msgport();
ULONG printsig = 0;
+ ULONG helpsignal = ami_help_signal();
if(printmsgport) printsig = 1L << printmsgport->mp_SigBit;
- ULONG signalmask = winsignal | appsig | schedulesig | rxsig | printsig | applibsig | ctrlcsig;
+ ULONG signalmask = winsignal | appsig | schedulesig | rxsig | printsig | applibsig | ctrlcsig | helpsignal;
signal = Wait(signalmask);
@@ -2568,25 +2574,23 @@ void ami_get_msg(void)
if(signal & applibsig)
ami_handle_applib();
- if(signal & printsig)
- {
+ if(signal & printsig) {
while(GetMsg(printmsgport)); //ReplyMsg
ami_print_cont();
}
- if(signal & schedulesig)
- {
- if(timermsg = (struct TimerRequest *)GetMsg(msgport))
- {
+ if(signal & schedulesig) {
+ if(timermsg = (struct TimerRequest *)GetMsg(msgport)) {
ReplyMsg((struct Message *)timermsg);
schedule_run(FALSE);
}
}
+ if(signal & helpsignal)
+ ami_help_process();
+
if(signal & ctrlcsig)
- {
ami_quit_netsurf_delayed();
- }
}
static void ami_gui_fetch_callback(void *p)
@@ -2686,20 +2690,6 @@ void ami_switch_tab(struct gui_window_2 *gwin,bool redraw)
}
}
-void ami_try_quit(void)
-{
- if(nsoption_bool(close_no_quit) == false)
- {
- netsurf_quit = true;
- return;
- }
- else
- {
- if(locked_screen == FALSE)
- if(CloseScreen(scrn)) scrn = NULL;
- }
-}
-
void ami_quit_netsurf(void)
{
struct nsObject *node;
@@ -2767,16 +2757,20 @@ void ami_quit_netsurf_delayed(void)
void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
{
- ULONG screen_signal = -1;
-
if(scrn == NULL) return;
- if(CloseScreen(scrn)) return;
+ if(CloseScreen(scrn) == TRUE) {
+ if(locked_screen == FALSE) {
+ FreeSignal(screen_signal);
+ screen_signal = NULL;
+ scrn = NULL;
+ }
+ return;
+ }
if(locked_screen == TRUE) return;
/* If this is our own screen, wait for visitor windows to close */
- if((screen_signal = AllocSignal(-1)) != -1) {
+ if(screen_signal != -1) {
ULONG scrnsig = 1 << screen_signal;
- SetScreenAttr(scrn, SA_PubSig, (APTR)screen_signal, sizeof(ULONG));
LOG(("Waiting for visitor windows to close... (signal)"));
Wait(scrnsig);
}
@@ -2787,6 +2781,21 @@ void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
}
FreeSignal(screen_signal);
+ screen_signal = -1;
+ scrn = NULL;
+}
+
+void ami_try_quit(void)
+{
+ if(nsoption_bool(close_no_quit) == false)
+ {
+ netsurf_quit = true;
+ return;
+ }
+ else
+ {
+ ami_gui_close_screen(scrn, locked_screen);
+ }
}
static void gui_quit(void)
diff --git a/amiga/help.c b/amiga/help.c
index 24eaa7d..f094c70 100755
--- a/amiga/help.c
+++ b/amiga/help.c
@@ -66,3 +66,18 @@ void ami_help_new_screen(struct Screen *screen)
if(AmigaGuideObject == NULL) return;
SetAttrs(AmigaGuideObject, AMIGAGUIDE_Screen, screen, TAG_DONE);
}
+
+ULONG ami_help_signal(void)
+{
+ ULONG ag_sig = 0;
+ if(AmigaGuideObject)
+ GetAttr(AMIGAGUIDE_Signal, AmigaGuideObject, &ag_sig);
+ return ag_sig;
+}
+
+void ami_help_process(void)
+{
+ ULONG ret = IDoMethod(AmigaGuideObject, AGM_PROCESS, NULL);
+ //printf("ret = %d\n", ret); // should be NULL if closed
+}
+
diff --git a/amiga/help.h b/amiga/help.h
index ce3a462..e405edd 100755
--- a/amiga/help.h
+++ b/amiga/help.h
@@ -32,4 +32,7 @@ struct Screen;
void ami_help_open(ULONG node, struct Screen *screen);
void ami_help_free(void);
void ami_help_new_screen(struct Screen *screen);
+ULONG ami_help_signal(void);
+void ami_help_process(void);
#endif
+
--
NetSurf Browser
9 years, 1 month
netsurf: branch master updated. release/3.0-1089-ga23b1f3
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/a23b1f34d352fc216b267...
...commit http://git.netsurf-browser.org/netsurf.git/commit/a23b1f34d352fc216b2677a...
...tree http://git.netsurf-browser.org/netsurf.git/tree/a23b1f34d352fc216b2677a7d...
The branch, master has been updated
via a23b1f34d352fc216b2677a7d3d06baa8bf57595 (commit)
from af014bce99d4990f1a0cbb1a779127de0f716a90 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=a23b1f34d352fc216b2...
commit a23b1f34d352fc216b2677a7d3d06baa8bf57595
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Missed a file.
diff --git a/cocoa/BrowserViewController.m b/cocoa/BrowserViewController.m
index 7c77b7c..8678620 100644
--- a/cocoa/BrowserViewController.m
+++ b/cocoa/BrowserViewController.m
@@ -79,8 +79,8 @@
browser_window_navigate(browser,
urlns,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -141,8 +141,8 @@
error = browser_window_navigate(browser,
urlns,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
-----------------------------------------------------------------------
Summary of changes:
cocoa/BrowserViewController.m | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/cocoa/BrowserViewController.m b/cocoa/BrowserViewController.m
index 7c77b7c..8678620 100644
--- a/cocoa/BrowserViewController.m
+++ b/cocoa/BrowserViewController.m
@@ -79,8 +79,8 @@
browser_window_navigate(browser,
urlns,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -141,8 +141,8 @@
error = browser_window_navigate(browser,
urlns,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
--
NetSurf Browser
9 years, 1 month
netsurf: branch master updated. release/3.0-1088-gaf014bc
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/af014bce99d4990f1a0cb...
...commit http://git.netsurf-browser.org/netsurf.git/commit/af014bce99d4990f1a0cbb1...
...tree http://git.netsurf-browser.org/netsurf.git/tree/af014bce99d4990f1a0cbb1a7...
The branch, master has been updated
via af014bce99d4990f1a0cbb1a779127de0f716a90 (commit)
from 9720c024832c96d917de933b95c87cf2e4f867bf (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=af014bce99d4990f1a0...
commit af014bce99d4990f1a0cbb1a779127de0f716a90
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Allow tab creation without history clone. Changes browser_window_create and browser_window_navigate flags.
diff --git a/amiga/arexx.c b/amiga/arexx.c
index 472aea1..515ee6d 100644
--- a/amiga/arexx.c
+++ b/amiga/arexx.c
@@ -248,8 +248,8 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(curbw,
url,
NULL,
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -257,9 +257,8 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
}
else if(cmd->ac_ArgList[2])
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
bw,
@@ -267,8 +266,7 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
}
else if(cmd->ac_ArgList[1])
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -281,16 +279,15 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
}
else
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -510,8 +507,8 @@ STATIC VOID rx_home(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/amiga/context_menu.c b/amiga/context_menu.c
index a1ce624..0662a2c 100644
--- a/amiga/context_menu.c
+++ b/amiga/context_menu.c
@@ -779,8 +779,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
case CMID_URLOPENWIN:
error = nsurl_create(userdata, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY,
url,
hlcache_handle_get_url(gwin->bw->current_content),
gwin->bw,
@@ -798,9 +797,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
case CMID_URLOPENTAB:
error = nsurl_create(userdata, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY | BW_CREATE_TAB,
url,
hlcache_handle_get_url(gwin->bw->current_content),
gwin->bw,
@@ -823,8 +820,8 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
hlcache_handle_get_url(gwin->bw->current_content),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -838,8 +835,8 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
hlcache_handle_get_url(userdata),
hlcache_handle_get_url(gwin->bw->current_content),
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -855,8 +852,8 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
hlcache_handle_get_url(gwin->bw->current_content),
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -931,8 +928,8 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1002,8 +999,8 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/amiga/download.c b/amiga/download.c
index a65fad9..a716d38 100644
--- a/amiga/download.c
+++ b/amiga/download.c
@@ -274,8 +274,8 @@ static void gui_download_window_done(struct gui_download_window *dw)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/amiga/file.c b/amiga/file.c
index 9500b40..8cf460f 100644
--- a/amiga/file.c
+++ b/amiga/file.c
@@ -103,8 +103,8 @@ void ami_file_open(struct gui_window_2 *gwin)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/amiga/gui.c b/amiga/gui.c
index aebdf3a..137e159 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -904,8 +904,7 @@ static void gui_init2(int argc, char** argv)
if(temp_homepage_url && notalreadyrunning) {
error = nsurl_create(temp_homepage_url, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -950,8 +949,7 @@ static void gui_init2(int argc, char** argv)
if (error == NSERROR_OK) {
if(!first)
{
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -961,8 +959,7 @@ static void gui_init2(int argc, char** argv)
}
else
{
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY,
url,
NULL,
bw,
@@ -1044,8 +1041,7 @@ static void gui_init2(int argc, char** argv)
if(!bw && (nsoption_bool(startup_no_window) == false)) {
error = nsurl_create(nsoption_charp(homepage_url), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -1859,8 +1855,8 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1886,8 +1882,8 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1904,8 +1900,8 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1992,8 +1988,7 @@ void ami_handle_msg(void)
error = nsurl_create(nsoption_charp(homepage_url), &urlns);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY,
urlns,
NULL,
gwin->bw,
@@ -2014,9 +2009,8 @@ void ami_handle_msg(void)
error = nsurl_create(nsoption_charp(homepage_url), &urlns);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
urlns,
NULL,
gwin->bw,
@@ -2388,8 +2382,8 @@ void ami_handle_appmsg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -2398,9 +2392,8 @@ void ami_handle_appmsg(void)
}
else
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
gwin->bw,
@@ -2429,8 +2422,8 @@ void ami_handle_appmsg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -2439,9 +2432,8 @@ void ami_handle_appmsg(void)
}
else
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
gwin->bw,
@@ -2480,8 +2472,7 @@ void ami_handle_applib(void)
error = nsurl_create(nsoption_charp(homepage_url), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2504,8 +2495,7 @@ void ami_handle_applib(void)
error = nsurl_create(tempurl, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -3202,9 +3192,8 @@ nserror ami_gui_new_blank_tab(struct gui_window_2 *gwin)
error = nsurl_create(nsoption_charp(homepage_url), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
gwin->bw,
@@ -3216,10 +3205,6 @@ nserror ami_gui_new_blank_tab(struct gui_window_2 *gwin)
return error;
}
- /* Front end /really/ should not be doing this. */
- history_destroy(bw->history);
- bw->history = history_create(bw);
-
return NSERROR_OK;
}
@@ -4965,8 +4950,7 @@ void ami_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg
GetSpeedButtonNodeAttrs(node, SBNA_UserData, (ULONG *)&url, TAG_DONE);
if(gwin->key_state & BROWSER_MOUSE_MOD_2) {
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_TAB,
+ browser_window_create(BW_CREATE_TAB,
url,
NULL,
gwin->bw,
@@ -4975,8 +4959,8 @@ void ami_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/amiga/menu.c b/amiga/menu.c
index 26f5c2b..9b3c44d 100644
--- a/amiga/menu.c
+++ b/amiga/menu.c
@@ -698,8 +698,7 @@ static void ami_menu_item_project_newwin(struct Hook *hook, APTR window, struct
error = nsurl_create(nsoption_charp(homepage_url), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -811,8 +810,7 @@ static void ami_menu_item_project_about(struct Hook *hook, APTR window, struct I
if(url) {
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -1036,8 +1034,8 @@ static void ami_menu_item_hotlist_entries(struct Hook *hook, APTR window, struct
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/amiga/tree.c b/amiga/tree.c
index 42eae4f..38b6338 100644
--- a/amiga/tree.c
+++ b/amiga/tree.c
@@ -322,8 +322,8 @@ void ami_tree_drag_end(struct treeview_window *twin, int x, int y)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/atari/about.c b/atari/about.c
index f09dfb3..6e98058 100644
--- a/atari/about.c
+++ b/atari/about.c
@@ -170,8 +170,7 @@ void atari_about_show(void)
if (goto_url != NULL) {
nserr = nsurl_create(goto_url, &url);
if (nserr == NSERROR_OK) {
- nserr = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ nserr = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/atari/ctxmenu.c b/atari/ctxmenu.c
index ae918c6..37c96ef 100644
--- a/atari/ctxmenu.c
+++ b/atari/ctxmenu.c
@@ -238,8 +238,8 @@ void context_popup(struct gui_window * gw, short x, short y)
gw->browser->bw,
hlcache_handle_get_url(ctx->ccdata.object),
hlcache_handle_get_url(gw->browser->bw->current_content),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL
@@ -258,8 +258,8 @@ void context_popup(struct gui_window * gw, short x, short y)
gw->browser->bw,
url,
hlcache_handle_get_url(gw->browser->bw->current_content),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL
@@ -293,11 +293,11 @@ void context_popup(struct gui_window * gw, short x, short y)
nsurl *url;
nserror error;
- error = nsurl_create(ctx->ccdata.link_url, &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
- url,
+ error = nsurl_create(ctx->ccdata.link_url, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(
+ BW_CREATE_HISTORY | BW_CREATE_CLONE,
+ url,
hlcache_handle_get_url(gw->browser->bw->current_content),
gw->browser->bw,
NULL
diff --git a/atari/deskmenu.c b/atari/deskmenu.c
index a119408..6a8376d 100644
--- a/atari/deskmenu.c
+++ b/atari/deskmenu.c
@@ -170,8 +170,7 @@ static void __CDECL menu_about(short item, short title, void *data)
error = nsurl_create(buf, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -202,8 +201,7 @@ static void __CDECL menu_new_win(short item, short title, void *data)
/* create an initial browser window */
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -224,8 +222,7 @@ static void __CDECL menu_open_url(short item, short title, void *data)
gw = input_window;
if( gw == NULL ) {
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ browser_window_create(BW_CREATE_HISTORY,
NULL,
NULL,
NULL,
@@ -256,8 +253,7 @@ static void __CDECL menu_open_file(short item, short title, void *data)
error = nsurl_create(urltxt, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/atari/gui.c b/atari/gui.c
index e43aecb..fe927e2 100644
--- a/atari/gui.c
+++ b/atari/gui.c
@@ -1172,8 +1172,7 @@ int main(int argc, char** argv)
/* create an initial browser window */
ret = nsurl_create(addr, &url);
if (ret == NSERROR_OK) {
- ret = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ ret = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/atari/rootwin.c b/atari/rootwin.c
index be9846f..4ab7442 100755
--- a/atari/rootwin.c
+++ b/atari/rootwin.c
@@ -1537,7 +1537,7 @@ static void on_file_dropped(ROOTWIN *rootwin, short msg[8])
if ((tmp_url != NULL)
&& nsurl_create(tmp_url, &ns_url) == NSERROR_OK) {
browser_window_navigate(gw->browser->bw, ns_url, NULL,
- BROWSER_WINDOW_HISTORY | BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE,
NULL, NULL, NULL);
nsurl_unref(ns_url);
}
diff --git a/atari/toolbar.c b/atari/toolbar.c
index 9a49fbf..1c3126b 100644
--- a/atari/toolbar.c
+++ b/atari/toolbar.c
@@ -715,7 +715,7 @@ bool toolbar_key_input(struct s_toolbar *tb, short nkc)
warn_user("NoMemory", 0);
} else {
browser_window_navigate(gw->browser->bw, url, NULL,
- BROWSER_WINDOW_HISTORY | BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE,
NULL, NULL, NULL);
nsurl_unref(url);
}
@@ -1001,8 +1001,8 @@ void toolbar_home_click(struct s_toolbar *tb)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/beos/gui.cpp b/beos/gui.cpp
index c2eadaa..b40e6bd 100644
--- a/beos/gui.cpp
+++ b/beos/gui.cpp
@@ -645,7 +645,7 @@ static void gui_init(int argc, char** argv)
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
error = browser_window_create((browser_window_nav_flags)
- (BROWSER_WINDOW_VERIFIABLE | BROWSER_WINDOW_HISTORY),
+ BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/beos/scaffolding.cpp b/beos/scaffolding.cpp
index 0a362ce..1561cb2 100644
--- a/beos/scaffolding.cpp
+++ b/beos/scaffolding.cpp
@@ -888,10 +888,10 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
if (/*message->WasDropped() &&*/ i == 0) {
browser_window_navigate(bw, nsurl, NULL,
(browser_window_nav_flags)
- (BROWSER_WINDOW_HISTORY | BROWSER_WINDOW_VERIFIABLE),
+ (BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE),
NULL, NULL, NULL);
} else {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE,
nsurl,
NULL,
bw,
@@ -915,7 +915,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
for (i = 1; message->FindString("argv", i, &urltxt) >= B_OK; i++) {
error = nsurl_create(urltxt.String(), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE,
url,
NULL,
bw,
@@ -949,8 +949,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
nsurl,
NULL,
- (browser_window_nav_flags)(BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
NULL,
NULL,
NULL);
@@ -1020,8 +1019,8 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
url,
NULL,
- (browser_window_nav_flags)(BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE),
NULL,
NULL,
NULL);
@@ -1049,8 +1048,8 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
url,
NULL,
- (browser_window_nav_flags)(BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE),
NULL,
NULL,
NULL);
@@ -1133,7 +1132,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
error = nsurl_create(text.String(), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE,
url,
NULL,
bw,
@@ -1269,7 +1268,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
if (nserr == NSERROR_OK) {
nserr = browser_window_navigate(bw,
url, NULL,
- (browser_window_nav_flags)(BROWSER_WINDOW_HISTORY | BROWSER_WINDOW_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE),
NULL, NULL, NULL);
nsurl_unref(url);
}
diff --git a/cocoa/BookmarksController.m b/cocoa/BookmarksController.m
index 7d7173f..4ba66dd 100644
--- a/cocoa/BookmarksController.m
+++ b/cocoa/BookmarksController.m
@@ -142,14 +142,13 @@ static const char *cocoa_hotlist_path( void )
error = browser_window_navigate([tab browser],
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
} else {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/cocoa/BrowserView.m b/cocoa/BrowserView.m
index 2421412..d525832 100644
--- a/cocoa/BrowserView.m
+++ b/cocoa/BrowserView.m
@@ -581,9 +581,9 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
error = nsurl_create([[sender representedObject] UTF8String], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB |
+ BW_CREATE_CLONE,
url,
NULL,
browser,
@@ -602,8 +602,8 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
error = nsurl_create([[sender representedObject] UTF8String], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
url,
NULL,
browser,
@@ -623,8 +623,8 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
browser_window_navigate(browser,
url,
NULL,
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -688,8 +688,8 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
browser_window_navigate(browser,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/cocoa/BrowserWindowController.m b/cocoa/BrowserWindowController.m
index 36b7164..1d70778 100644
--- a/cocoa/BrowserWindowController.m
+++ b/cocoa/BrowserWindowController.m
@@ -161,9 +161,8 @@
error = nsurl_create(NETSURF_HOMEPAGE, &url);
}
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
[activeBrowser browser],
diff --git a/cocoa/NetSurfAppDelegate.m b/cocoa/NetSurfAppDelegate.m
index c326c9d..e173535 100644
--- a/cocoa/NetSurfAppDelegate.m
+++ b/cocoa/NetSurfAppDelegate.m
@@ -51,8 +51,7 @@
}
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -75,8 +74,7 @@
for (NSURL *url in [openPanel URLs]) {
error = nsurl_create([[url absoluteString] UTF8String], &u);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
u,
NULL,
NULL,
@@ -98,8 +96,7 @@
error = nsurl_create([urlAsString UTF8String], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -182,8 +179,7 @@
error = nsurl_create([[urltxt absoluteString] UTF8String], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/cocoa/NetsurfApp.m b/cocoa/NetsurfApp.m
index 5c35911..8842422 100644
--- a/cocoa/NetsurfApp.m
+++ b/cocoa/NetsurfApp.m
@@ -231,8 +231,7 @@ int main( int argc, char **argv )
error = nsurl_create(argv[i], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/desktop/browser.c b/desktop/browser.c
index 5a6cfc7..9bff58b 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -690,66 +690,81 @@ static bool slow_script(void *ctx)
}
/* exported interface, documented in desktop/browser.h */
-
-nserror
-browser_window_create(enum browser_window_nav_flags flags,
- nsurl *url,
- nsurl *referrer,
- struct browser_window *clone,
- struct browser_window **ret_bw)
-{
- struct browser_window *bw;
-
- /* caller must provide window to clone or be adding to history */
- assert(clone ||
- ((flags & BROWSER_WINDOW_HISTORY) != 0));
+nserror browser_window_create(enum browser_window_create_flags flags,
+ nsurl *url, nsurl *referrer,
+ struct browser_window *existing,
+ struct browser_window **bw)
+{
+ gui_window_create_flags gw_flags = GW_CREATE_NONE;
+ struct browser_window *ret;
+
+ /* Check parameters */
+ if (flags & (BW_CREATE_TAB | BW_CREATE_CLONE)) {
+ if (existing == NULL) {
+ assert(0 && "Failed: No existing window provided.");
+ return NSERROR_BAD_PARAMETER;
+ }
+ }
+ if (!(flags & BW_CREATE_HISTORY)) {
+ if (!(flags & BW_CREATE_CLONE) || existing == NULL) {
+ assert(0 && "Failed: Must have existing for history.");
+ return NSERROR_BAD_PARAMETER;
+ }
+ }
- if ((bw = calloc(1, sizeof(struct browser_window))) == NULL) {
+ if ((ret = calloc(1, sizeof(struct browser_window))) == NULL) {
warn_user("NoMemory", 0);
return NSERROR_NOMEM;
}
/* new javascript context for window */
- bw->jsctx = js_newcontext(nsoption_int(script_timeout),
+ ret->jsctx = js_newcontext(nsoption_int(script_timeout),
slow_script,
NULL);
/* Initialise common parts */
- browser_window_initialise_common(bw, clone);
+ browser_window_initialise_common(flags, ret, existing);
/* window characteristics */
- bw->browser_window_type = BROWSER_WINDOW_NORMAL;
- bw->scrolling = SCROLLING_YES;
- bw->border = true;
- bw->no_resize = true;
- bw->last_action = wallclock();
- bw->focus = bw;
-
- /* gui window */
- /* from the front end's pov, it clones the top level browser window,
- * so find that. */
- clone = browser_window_get_root(clone);
-
- bw->window = guit->window->create(bw,
- (clone != NULL) ? clone->window : NULL,
- ((flags & BROWSER_WINDOW_TAB) ?
- GW_CREATE_TAB : GW_CREATE_NONE) |
- ((clone != NULL) ?
- GW_CREATE_CLONE : GW_CREATE_NONE));
-
- if (bw->window == NULL) {
- browser_window_destroy(bw);
+ ret->browser_window_type = BROWSER_WINDOW_NORMAL;
+ ret->scrolling = SCROLLING_YES;
+ ret->border = true;
+ ret->no_resize = true;
+ ret->last_action = wallclock();
+ ret->focus = ret;
+
+ /* The existing gui_window is on the top-level existing
+ * browser_window. */
+ existing = browser_window_get_root(existing);
+
+ /* Set up gui_window creation flags */
+ if (flags & BW_CREATE_TAB)
+ gw_flags |= GW_CREATE_TAB;
+ if (flags & BW_CREATE_CLONE)
+ gw_flags |= GW_CREATE_CLONE;
+
+ ret->window = guit->window->create(ret,
+ (existing != NULL) ? existing->window : NULL,
+ gw_flags);
+
+ if (ret->window == NULL) {
+ browser_window_destroy(ret);
return NSERROR_BAD_PARAMETER;
}
if (url != NULL) {
- flags |= BROWSER_WINDOW_VERIFIABLE;
- browser_window_navigate(bw, url, referrer, flags, NULL, NULL, NULL);
+ enum browser_window_nav_flags nav_flags = BW_NAVIGATE_NONE;
+ if (!(flags & BW_CREATE_UNVERIFIABLE))
+ nav_flags |= BW_NAVIGATE_VERIFIABLE;
+ if (flags & BW_CREATE_HISTORY)
+ nav_flags |= BW_NAVIGATE_HISTORY;
+ browser_window_navigate(ret, url, referrer, nav_flags, NULL,
+ NULL, NULL);
}
- if (ret_bw != NULL) {
- *ret_bw = bw;
+ if (bw != NULL) {
+ *bw = ret;
}
return NSERROR_OK;
@@ -759,18 +774,21 @@ browser_window_create(enum browser_window_nav_flags flags,
/**
* Initialise common parts of a browser window
*
- * \param bw The window to initialise
- * \param clone The window to clone, or NULL if none
+ * \param flags Flags to control operation
+ * \param bw The window to initialise
+ * \param existing The existing window if cloning, else NULL
*/
-void browser_window_initialise_common(struct browser_window *bw,
- struct browser_window *clone)
+void browser_window_initialise_common(enum browser_window_create_flags flags,
+ struct browser_window *bw, struct browser_window *existing)
{
assert(bw);
- if (!clone)
+ if (flags & BW_CREATE_CLONE) {
+ assert(existing != NULL);
+ bw->history = history_clone(existing->history, bw);
+ } else {
bw->history = history_create(bw);
- else
- bw->history = history_clone(clone->history, bw);
+ }
/* window characteristics */
bw->refresh_interval = -1;
@@ -1091,7 +1109,7 @@ static void browser_window_refresh(void *p)
nsurl *url;
nsurl *refresh;
hlcache_handle *parent = NULL;
- enum browser_window_nav_flags flags = BROWSER_WINDOW_NONE;
+ enum browser_window_nav_flags flags = BW_NAVIGATE_NONE;
assert(bw->current_content != NULL &&
(content_get_status(bw->current_content) ==
@@ -1110,7 +1128,7 @@ static void browser_window_refresh(void *p)
url = hlcache_handle_get_url(bw->current_content);
if ((url == NULL) || (nsurl_compare(url, refresh, NSURL_COMPLETE))) {
- flags |= BROWSER_WINDOW_HISTORY;
+ flags |= BW_NAVIGATE_HISTORY;
}
/* Treat an (almost) immediate refresh in a top-level browser window as
@@ -1121,7 +1139,7 @@ static void browser_window_refresh(void *p)
* all.
*/
if (bw->refresh_interval <= 100 && bw->parent == NULL) {
- flags |= BROWSER_WINDOW_VERIFIABLE;
+ flags |= BW_NAVIGATE_VERIFIABLE;
} else {
parent = bw->current_content;
}
@@ -1794,7 +1812,7 @@ nserror browser_window_navigate(struct browser_window *bw,
}
/* Set up retrieval parameters */
- if ((flags & BROWSER_WINDOW_VERIFIABLE) != 0) {
+ if ((flags & BW_NAVIGATE_VERIFIABLE) != 0) {
fetch_flags |= LLCACHE_RETRIEVE_VERIFIABLE;
}
@@ -1818,7 +1836,7 @@ nserror browser_window_navigate(struct browser_window *bw,
}
/* Get download out of the way */
- if ((flags & BROWSER_WINDOW_DOWNLOAD) != 0) {
+ if ((flags & BW_NAVIGATE_DOWNLOAD) != 0) {
error = browser_window_download(bw,
url,
referrer,
@@ -1863,7 +1881,7 @@ nserror browser_window_navigate(struct browser_window *bw,
nsurl_unref(referrer);
}
- if ((flags & BROWSER_WINDOW_HISTORY) != 0) {
+ if ((flags & BW_NAVIGATE_HISTORY) != 0) {
history_add(bw->history,
bw->current_content, bw->frag_id);
}
@@ -1884,10 +1902,10 @@ nserror browser_window_navigate(struct browser_window *bw,
LOG(("Loading '%s'", nsurl_access(url)));
browser_window_set_status(bw, messages_get("Loading"));
- bw->history_add = (flags & BROWSER_WINDOW_HISTORY);
+ bw->history_add = (flags & BW_NAVIGATE_HISTORY);
/* Verifiable fetches may trigger a download */
- if ((flags & BROWSER_WINDOW_VERIFIABLE) != 0) {
+ if ((flags & BW_NAVIGATE_VERIFIABLE) != 0) {
fetch_flags |= HLCACHE_RETRIEVE_MAY_DOWNLOAD;
}
@@ -2250,7 +2268,7 @@ void browser_window_reload(struct browser_window *bw, bool all)
browser_window_navigate(bw,
hlcache_handle_get_url(bw->current_content),
NULL,
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -2536,8 +2554,9 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
* OR
* - button_2 opens in new tab and the link target is "_blank"
*/
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_TAB |
+ BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
NULL,
NULL,
bw,
@@ -2563,7 +2582,8 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
* - button_2 doesn't open in new tabs and the link target is
* "_blank"
*/
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
NULL,
NULL,
bw,
@@ -2602,7 +2622,7 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
if (!nsoption_bool(target_blank))
return bw;
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY,
NULL,
NULL,
bw,
diff --git a/desktop/browser.h b/desktop/browser.h
index 39f8b89..4cb8e01 100644
--- a/desktop/browser.h
+++ b/desktop/browser.h
@@ -62,42 +62,53 @@ typedef enum {
extern bool browser_reformat_pending;
-/** flags to browser window go */
+/** flags to browser_window_create */
+enum browser_window_create_flags {
+ /** No flags set */
+ BW_CREATE_NONE = 0,
+
+ /** this will form a new history node (don't set for back/reload/etc) */
+ BW_CREATE_HISTORY = (1 << 0),
+
+ /** New gui_window to be tab in same window as "existing" gui_window */
+ BW_CREATE_TAB = (1 << 1),
+
+ /** New gui_window to be clone of "existing" gui_window */
+ BW_CREATE_CLONE = (1 << 2),
+
+ /** Window not opened by user interaction (e.g. JS popup) */
+ BW_CREATE_UNVERIFIABLE = (1 << 3),
+};
+
+/** flags to browser_window_navigate */
enum browser_window_nav_flags {
/** No flags set */
- BROWSER_WINDOW_NONE = 0,
+ BW_NAVIGATE_NONE = 0,
/** this will form a new history node (don't set for back/reload/etc) */
- BROWSER_WINDOW_HISTORY = (1 << 0),
+ BW_NAVIGATE_HISTORY = (1 << 0),
/** download rather than render the uri */
- BROWSER_WINDOW_DOWNLOAD = (1 << 1),
+ BW_NAVIGATE_DOWNLOAD = (1 << 1),
/** this transaction is verifiable */
- BROWSER_WINDOW_VERIFIABLE = (1 << 2),
-
- /** New gui_window to be tab in same window as "existing" gui_window */
- BROWSER_WINDOW_TAB = (1 << 3),
-
- /** New gui_window to be clone of "existing" gui_window */
- BROWSER_WINDOW_CLONE = (1 << 4)
+ BW_NAVIGATE_VERIFIABLE = (1 << 2)
};
/**
* Create and open a new root browser window with the given page.
*
- * \param flags Flags to control operation
- * \param url URL to start fetching in the new window or NULL for blank
- * \param referer The referring uri or NULL if none
- * \param clone The browser window to clone
- * \param bw pointer to created browser window or untouched on error.
- * \return error code
+ * \param flags Flags to control operation
+ * \param url URL to fetch in the new window or NULL for blank
+ * \param referer The referring uri or NULL if none
+ * \param existing The an existing bw or NULL, required for some flags.
+ * \param bw Updated to created browser window or untouched on error.
+ * \return NSERROR_OK, or appropriate error otherwise.
*/
-nserror browser_window_create(enum browser_window_nav_flags flags,
- nsurl *url,
- nsurl *referrer,
- struct browser_window *clone,
- struct browser_window **bw);
+nserror browser_window_create(enum browser_window_create_flags flags,
+ nsurl *url, nsurl *referrer,
+ struct browser_window *existing,
+ struct browser_window **bw);
/**
* Start fetching a page in a browser window.
diff --git a/desktop/browser_private.h b/desktop/browser_private.h
index 34891f3..9007007 100644
--- a/desktop/browser_private.h
+++ b/desktop/browser_private.h
@@ -165,8 +165,8 @@ struct browser_window {
-void browser_window_initialise_common(struct browser_window *bw,
- struct browser_window *clone);
+void browser_window_initialise_common(enum browser_window_create_flags flags,
+ struct browser_window *bw, struct browser_window *existing);
/**
* Update the extent of the inside of a browser window to that of the current
diff --git a/desktop/frames.c b/desktop/frames.c
index 354c70d..153c78e 100644
--- a/desktop/frames.c
+++ b/desktop/frames.c
@@ -209,7 +209,8 @@ void browser_window_create_iframes(struct browser_window *bw,
window = &(bw->iframes[index++]);
/* Initialise common parts */
- browser_window_initialise_common(window, NULL);
+ browser_window_initialise_common(BW_CREATE_NONE,
+ window, NULL);
/* window characteristics */
window->browser_window_type = BROWSER_WINDOW_IFRAME;
@@ -251,7 +252,7 @@ void browser_window_create_iframes(struct browser_window *bw,
browser_window_navigate(window,
cur->url,
hlcache_handle_get_url(bw->current_content),
- BROWSER_WINDOW_NONE,
+ BW_NAVIGATE_NONE,
NULL,
NULL,
bw->current_content);
@@ -314,7 +315,8 @@ void browser_window_create_frameset(struct browser_window *bw,
window = &bw->children[index];
/* Initialise common parts */
- browser_window_initialise_common(window, NULL);
+ browser_window_initialise_common(BW_CREATE_NONE,
+ window, NULL);
/* window characteristics */
if (frame->children)
@@ -387,7 +389,7 @@ void browser_window_create_frameset(struct browser_window *bw,
browser_window_navigate(window,
frame->url,
hlcache_handle_get_url(parent),
- BROWSER_WINDOW_HISTORY,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
parent);
diff --git a/desktop/global_history.c b/desktop/global_history.c
index 9d0e47e..c29b051 100644
--- a/desktop/global_history.c
+++ b/desktop/global_history.c
@@ -676,23 +676,22 @@ static nserror global_history_tree_node_entry_cb(
case TREE_MSG_NODE_LAUNCH:
{
nserror error;
- struct browser_window *clone = NULL;
- enum browser_window_nav_flags flags =
- BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB;
+ struct browser_window *existing = NULL;
+ enum browser_window_create_flags flags =
+ BW_CREATE_HISTORY;
- /* TODO: Set clone window, to window that new tab appears in */
+ /* TODO: Set existing to window that new tab appears in */
if (msg.data.node_launch.mouse &
(BROWSER_MOUSE_MOD_1 | BROWSER_MOUSE_MOD_2) ||
- clone == NULL) {
+ existing == NULL) {
/* Shift or Ctrl launch, open in new window rather
* than tab. */
- flags ^= BROWSER_WINDOW_TAB;
+ /* TODO: flags ^= BW_CREATE_TAB; */
}
- error = browser_window_create(flags, e->url, NULL, clone, NULL);
+ error = browser_window_create(flags, e->url, NULL,
+ existing, NULL);
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
}
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 219a348..6814f8d 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -472,23 +472,22 @@ static nserror hotlist_tree_node_entry_cb(
case TREE_MSG_NODE_LAUNCH:
{
nserror error;
- struct browser_window *clone = NULL;
- enum browser_window_nav_flags flags =
- BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB;
+ struct browser_window *existing = NULL;
+ enum browser_window_create_flags flags =
+ BW_CREATE_HISTORY;
- /* TODO: Set clone window, to window that new tab appears in */
+ /* TODO: Set existing to window that new tab appears in */
if (msg.data.node_launch.mouse &
(BROWSER_MOUSE_MOD_1 | BROWSER_MOUSE_MOD_2) ||
- clone == NULL) {
+ existing == NULL) {
/* Shift or Ctrl launch, open in new window rather
* than tab. */
- flags ^= BROWSER_WINDOW_TAB;
+ /* TODO: flags ^= BW_CREATE_TAB; */
}
- error = browser_window_create(flags, e->url, NULL, clone, NULL);
+ error = browser_window_create(flags, e->url, NULL,
+ existing, NULL);
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
}
diff --git a/desktop/local_history.c b/desktop/local_history.c
index b26f266..569fa44 100644
--- a/desktop/local_history.c
+++ b/desktop/local_history.c
@@ -150,6 +150,8 @@ struct history *history_clone(struct history *history,
return 0;
}
+ new_history->bw = bw;
+
return new_history;
}
@@ -455,13 +457,13 @@ void history_go(struct history *history, struct history_entry *entry,
current = history->current;
history->current = entry;
- browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ browser_window_create(BW_CREATE_CLONE,
url, NULL, history->bw, NULL);
history->current = current;
} else {
history->current = entry;
browser_window_navigate(history->bw, url, NULL,
- BROWSER_WINDOW_VERIFIABLE, NULL, NULL, NULL);
+ BW_NAVIGATE_VERIFIABLE, NULL, NULL, NULL);
}
nsurl_unref(url);
diff --git a/desktop/searchweb.c b/desktop/searchweb.c
index bdcb2ba..368ad05 100644
--- a/desktop/searchweb.c
+++ b/desktop/searchweb.c
@@ -71,9 +71,8 @@ bool search_web_new_window(struct browser_window *bw, const char *searchterm)
error = nsurl_create(urltxt, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
bw,
diff --git a/framebuffer/gui.c b/framebuffer/gui.c
index dc81a57..09dcdce 100644
--- a/framebuffer/gui.c
+++ b/framebuffer/gui.c
@@ -1097,8 +1097,8 @@ fb_url_enter(void *pw, char *text)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1874,8 +1874,7 @@ main(int argc, char** argv)
ret = nsurl_create(feurl, &url);
if (ret == NSERROR_OK) {
- ret = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ ret = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/gtk/dialogs/about.c b/gtk/dialogs/about.c
index eb662c8..1ebcb28 100644
--- a/gtk/dialogs/about.c
+++ b/gtk/dialogs/about.c
@@ -37,8 +37,8 @@ nsgtk_about_dialog_credits(GtkWidget *button, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -60,8 +60,8 @@ nsgtk_about_dialog_licence(GtkWidget *button, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/gtk/dialogs/source.c b/gtk/dialogs/source.c
index 4f1839d..326e3fb 100644
--- a/gtk/dialogs/source.c
+++ b/gtk/dialogs/source.c
@@ -313,8 +313,7 @@ void nsgtk_source_tab_init(GtkWindow *parent, struct browser_window *bw)
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
} else {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_TAB,
url,
NULL,
bw,
diff --git a/gtk/gui.c b/gtk/gui.c
index 11140ce..a3bf57c 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -462,8 +462,7 @@ static void gui_init(int argc, char** argv, char **respath)
/* create an initial browser window */
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index c4ea674..cd54548 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -437,8 +437,8 @@ gboolean nsgtk_window_url_activate_event(GtkWidget *widget, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -550,8 +550,8 @@ static void nsgtk_openfile_open(const char *filename)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -578,7 +578,7 @@ MULTIHANDLER(newwindow)
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
bw,
@@ -611,8 +611,8 @@ nserror nsgtk_scaffolding_new_tab(struct gui_window *gw)
}
}
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
bw,
@@ -959,8 +959,8 @@ MENUHANDLER(savelink)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -986,12 +986,9 @@ MENUHANDLER(link_openwin)
error = nsurl_create(current_menu_ctx.link_url, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
- url,
- NULL,
- bw,
- NULL);
+ error = browser_window_create(
+ BW_CREATE_CLONE | BW_CREATE_HISTORY,
+ url, NULL, bw, NULL);
nsurl_unref(url);
}
if (error != NSERROR_OK) {
@@ -1019,13 +1016,9 @@ MENUHANDLER(link_opentab)
error = nsurl_create(current_menu_ctx.link_url, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
- url,
- NULL,
- bw,
- NULL);
+ error = browser_window_create(BW_CREATE_CLONE |
+ BW_CREATE_HISTORY | BW_CREATE_TAB,
+ url, NULL, bw, NULL);
nsurl_unref(url);
}
if (error != NSERROR_OK) {
@@ -1466,8 +1459,8 @@ MULTIHANDLER(home)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1583,8 +1576,8 @@ MULTIHANDLER(contents)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1605,8 +1598,8 @@ MULTIHANDLER(guide)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1627,8 +1620,8 @@ MULTIHANDLER(info)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/javascript/jsapi/location.bnd b/javascript/jsapi/location.bnd
index af76836..ef71e1d 100644
--- a/javascript/jsapi/location.bnd
+++ b/javascript/jsapi/location.bnd
@@ -62,8 +62,8 @@ operation assign %{
browser_window_navigate(bw,
joined,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -84,7 +84,7 @@ operation replace %{
browser_window_navigate(bw,
joined,
NULL,
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -129,7 +129,7 @@ setter href %{
browser_window_navigate(bw,
joined,
NULL,
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/monkey/browser.c b/monkey/browser.c
index 9be06dc..4895543 100644
--- a/monkey/browser.c
+++ b/monkey/browser.c
@@ -350,8 +350,7 @@ monkey_window_handle_new(int argc, char **argv)
error = nsurl_create(argv[2], &url);
}
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -410,8 +409,8 @@ monkey_window_handle_go(int argc, char **argv)
browser_window_navigate(gw->bw,
url,
ref_url,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/render/form.c b/render/form.c
index 50629c2..3c54b41 100644
--- a/render/form.c
+++ b/render/form.c
@@ -1711,8 +1711,8 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_query,
page_url,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1732,8 +1732,8 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_url,
page_url,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
data,
NULL,
NULL);
@@ -1743,8 +1743,8 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_url,
page_url,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
success,
NULL);
diff --git a/render/html_interaction.c b/render/html_interaction.c
index 4d797a0..55eed76 100644
--- a/render/html_interaction.c
+++ b/render/html_interaction.c
@@ -823,8 +823,8 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
browser_window_navigate(bw,
url,
content_get_url(c),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1003,8 +1003,8 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
browser_window_navigate(browser_window_find_target(bw, target, mouse),
url,
content_get_url(c),
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/riscos/dialog.c b/riscos/dialog.c
index 4347023..d259c87 100644
--- a/riscos/dialog.c
+++ b/riscos/dialog.c
@@ -775,8 +775,7 @@ bool ro_gui_dialog_openurl_apply(wimp_w w) {
error = nsurl_create(url2, &url);
free(url2);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/riscos/gui.c b/riscos/gui.c
index 83add25..e382635 100644
--- a/riscos/gui.c
+++ b/riscos/gui.c
@@ -941,8 +941,7 @@ static void gui_init2(int argc, char** argv)
errorns = nsurl_create(url, &urlns);
if (errorns == NSERROR_OK) {
- errorns = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ errorns = browser_window_create(BW_CREATE_HISTORY,
urlns,
NULL,
NULL,
@@ -1516,8 +1515,8 @@ void ro_msg_dataload(wimp_message *message)
error = browser_window_navigate(g->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1529,9 +1528,7 @@ void ro_msg_dataload(wimp_message *message)
ro_gui_hotlist_url_drop(message, urltxt);
#endif
} else {
- error = browser_window_create(
- BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -1906,8 +1903,7 @@ void ro_msg_dataopen(wimp_message *message)
free(url);
if (error == NSERROR_OK) {
/* create a new window with the file */
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
urlns,
NULL,
NULL,
diff --git a/riscos/gui/url_bar.c b/riscos/gui/url_bar.c
index 304a6bf..18bcb31 100644
--- a/riscos/gui/url_bar.c
+++ b/riscos/gui/url_bar.c
@@ -857,8 +857,8 @@ bool ro_gui_url_bar_menu_select(struct url_bar *url_bar, wimp_i i,
browser_window_navigate(g->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/riscos/iconbar.c b/riscos/iconbar.c
index 7e3d732..e0949b3 100644
--- a/riscos/iconbar.c
+++ b/riscos/iconbar.c
@@ -135,8 +135,7 @@ bool ro_gui_iconbar_click(wimp_pointer *pointer)
/* create an initial browser window */
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -206,9 +205,7 @@ bool ro_gui_iconbar_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_CONTENTS:
error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(
- BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/riscos/uri.c b/riscos/uri.c
index 70f75bc..bf789ee 100644
--- a/riscos/uri.c
+++ b/riscos/uri.c
@@ -74,8 +74,7 @@ void ro_uri_message_received(wimp_message *msg)
error = nsurl_create(uri_requested, &url);
free(uri_requested);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/riscos/url_complete.c b/riscos/url_complete.c
index 01774f6..6d99016 100644
--- a/riscos/url_complete.c
+++ b/riscos/url_complete.c
@@ -734,8 +734,8 @@ bool ro_gui_url_complete_click(wimp_pointer *pointer)
browser_window_navigate(g->bw,
url_complete_matches[url_complete_matches_selection],
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/riscos/url_protocol.c b/riscos/url_protocol.c
index 171b620..76d4031 100644
--- a/riscos/url_protocol.c
+++ b/riscos/url_protocol.c
@@ -126,8 +126,7 @@ void ro_url_message_received(wimp_message *message)
}
/* create new browser window */
- errorns = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ errorns = browser_window_create(BW_CREATE_HISTORY,
nsurl,
NULL,
NULL,
diff --git a/riscos/window.c b/riscos/window.c
index f638b34..27fdb39 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -1923,8 +1923,7 @@ bool ro_gui_window_handle_local_keypress(struct gui_window *g, wimp_key *key,
{
error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2673,8 +2672,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_CONTENTS:
error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2686,8 +2684,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_GUIDE:
error = nsurl_create("http://www.netsurf-browser.org/documentation/guide", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2699,8 +2696,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_INFORMATION:
error = nsurl_create("http://www.netsurf-browser.org/documentation/info", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2712,8 +2708,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_CREDITS:
error = nsurl_create("about:credits", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2725,8 +2720,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_LICENCE:
error = nsurl_create("about:licence", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2837,8 +2831,8 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
error = browser_window_navigate(bw,
url,
hlcache_handle_get_url(h),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -2851,8 +2845,9 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
if (current_menu_url != NULL) {
error = nsurl_create(current_menu_url, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(
+ BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
url,
hlcache_handle_get_url(h),
bw,
@@ -3728,7 +3723,8 @@ void ro_gui_window_toolbar_click(void *data,
hlcache_handle *h = g->bw->current_content;
nserror error;
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(
+ BW_CREATE_HISTORY | BW_CREATE_CLONE,
NULL,
NULL,
g->bw,
@@ -4010,8 +4006,7 @@ void ro_gui_window_launch_url(struct gui_window *g, const char *url1)
browser_window_navigate(g->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_CREATE_HISTORY,
NULL,
NULL,
NULL);
@@ -4051,8 +4046,8 @@ bool ro_gui_window_navigate_up(struct gui_window *g, const char *url)
browser_window_navigate(g->bw,
parent,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -4088,8 +4083,8 @@ void ro_gui_window_action_home(struct gui_window *g)
error = browser_window_navigate(g->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -4114,7 +4109,7 @@ void ro_gui_window_action_new_window(struct gui_window *g)
if (g == NULL || g->bw == NULL || g->bw->current_content == NULL)
return;
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE,
hlcache_handle_get_url(g->bw->current_content),
NULL,
g->bw,
diff --git a/windows/gui.c b/windows/gui.c
index 46a557a..51038a7 100644
--- a/windows/gui.c
+++ b/windows/gui.c
@@ -133,8 +133,8 @@ nsws_window_go(HWND hwnd, const char *urltxt)
browser_window_navigate(gw->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -762,7 +762,7 @@ nsws_window_command(HWND hwnd,
break;
case IDM_FILE_OPEN_WINDOW:
- browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ browser_window_create(BW_CREATE_NONE,
NULL,
NULL,
gw->bw,
@@ -876,8 +876,8 @@ nsws_window_command(HWND hwnd,
browser_window_navigate(gw->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1045,8 +1045,8 @@ nsws_window_command(HWND hwnd,
browser_window_navigate(gw->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/windows/main.c b/windows/main.c
index 6a53e0c..19cd44a 100644
--- a/windows/main.c
+++ b/windows/main.c
@@ -189,8 +189,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hLastInstance, LPSTR lpcli, int ncmd)
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
-----------------------------------------------------------------------
Summary of changes:
amiga/arexx.c | 23 +++----
amiga/context_menu.c | 27 +++----
amiga/download.c | 4 +-
amiga/file.c | 4 +-
amiga/gui.c | 72 ++++++++------------
amiga/menu.c | 10 +--
amiga/tree.c | 4 +-
atari/about.c | 3 +-
atari/ctxmenu.c | 18 +++---
atari/deskmenu.c | 12 +--
atari/gui.c | 3 +-
atari/rootwin.c | 2 +-
atari/toolbar.c | 6 +-
beos/gui.cpp | 2 +-
beos/scaffolding.cpp | 21 +++---
cocoa/BookmarksController.m | 7 +-
cocoa/BrowserView.m | 18 +++---
cocoa/BrowserWindowController.m | 5 +-
cocoa/NetSurfAppDelegate.m | 12 +--
cocoa/NetsurfApp.m | 3 +-
desktop/browser.c | 142 ++++++++++++++++++++++-----------------
desktop/browser.h | 55 +++++++++------
desktop/browser_private.h | 4 +-
desktop/frames.c | 10 ++-
desktop/global_history.c | 17 ++---
desktop/hotlist.c | 17 ++---
desktop/local_history.c | 6 +-
desktop/searchweb.c | 5 +-
framebuffer/gui.c | 7 +-
gtk/dialogs/about.c | 8 +-
gtk/dialogs/source.c | 3 +-
gtk/gui.c | 3 +-
gtk/scaffolding.c | 53 ++++++--------
javascript/jsapi/location.bnd | 8 +-
monkey/browser.c | 7 +-
render/form.c | 12 ++--
render/html_interaction.c | 8 +-
riscos/dialog.c | 3 +-
riscos/gui.c | 14 ++---
riscos/gui/url_bar.c | 4 +-
riscos/iconbar.c | 7 +--
riscos/uri.c | 3 +-
riscos/url_complete.c | 4 +-
riscos/url_protocol.c | 3 +-
riscos/window.c | 43 +++++-------
windows/gui.c | 14 ++--
windows/main.c | 3 +-
47 files changed, 343 insertions(+), 376 deletions(-)
diff --git a/amiga/arexx.c b/amiga/arexx.c
index 472aea1..515ee6d 100644
--- a/amiga/arexx.c
+++ b/amiga/arexx.c
@@ -248,8 +248,8 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(curbw,
url,
NULL,
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -257,9 +257,8 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
}
else if(cmd->ac_ArgList[2])
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
bw,
@@ -267,8 +266,7 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
}
else if(cmd->ac_ArgList[1])
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -281,16 +279,15 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
}
else
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -510,8 +507,8 @@ STATIC VOID rx_home(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/amiga/context_menu.c b/amiga/context_menu.c
index a1ce624..0662a2c 100644
--- a/amiga/context_menu.c
+++ b/amiga/context_menu.c
@@ -779,8 +779,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
case CMID_URLOPENWIN:
error = nsurl_create(userdata, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY,
url,
hlcache_handle_get_url(gwin->bw->current_content),
gwin->bw,
@@ -798,9 +797,7 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
case CMID_URLOPENTAB:
error = nsurl_create(userdata, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY | BW_CREATE_TAB,
url,
hlcache_handle_get_url(gwin->bw->current_content),
gwin->bw,
@@ -823,8 +820,8 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
hlcache_handle_get_url(gwin->bw->current_content),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -838,8 +835,8 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
hlcache_handle_get_url(userdata),
hlcache_handle_get_url(gwin->bw->current_content),
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -855,8 +852,8 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
hlcache_handle_get_url(gwin->bw->current_content),
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -931,8 +928,8 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1002,8 +999,8 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/amiga/download.c b/amiga/download.c
index a65fad9..a716d38 100644
--- a/amiga/download.c
+++ b/amiga/download.c
@@ -274,8 +274,8 @@ static void gui_download_window_done(struct gui_download_window *dw)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/amiga/file.c b/amiga/file.c
index 9500b40..8cf460f 100644
--- a/amiga/file.c
+++ b/amiga/file.c
@@ -103,8 +103,8 @@ void ami_file_open(struct gui_window_2 *gwin)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/amiga/gui.c b/amiga/gui.c
index aebdf3a..137e159 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -904,8 +904,7 @@ static void gui_init2(int argc, char** argv)
if(temp_homepage_url && notalreadyrunning) {
error = nsurl_create(temp_homepage_url, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -950,8 +949,7 @@ static void gui_init2(int argc, char** argv)
if (error == NSERROR_OK) {
if(!first)
{
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -961,8 +959,7 @@ static void gui_init2(int argc, char** argv)
}
else
{
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY,
url,
NULL,
bw,
@@ -1044,8 +1041,7 @@ static void gui_init2(int argc, char** argv)
if(!bw && (nsoption_bool(startup_no_window) == false)) {
error = nsurl_create(nsoption_charp(homepage_url), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -1859,8 +1855,8 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1886,8 +1882,8 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1904,8 +1900,8 @@ void ami_handle_msg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1992,8 +1988,7 @@ void ami_handle_msg(void)
error = nsurl_create(nsoption_charp(homepage_url), &urlns);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY,
urlns,
NULL,
gwin->bw,
@@ -2014,9 +2009,8 @@ void ami_handle_msg(void)
error = nsurl_create(nsoption_charp(homepage_url), &urlns);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
urlns,
NULL,
gwin->bw,
@@ -2388,8 +2382,8 @@ void ami_handle_appmsg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -2398,9 +2392,8 @@ void ami_handle_appmsg(void)
}
else
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
gwin->bw,
@@ -2429,8 +2422,8 @@ void ami_handle_appmsg(void)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -2439,9 +2432,8 @@ void ami_handle_appmsg(void)
}
else
{
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
gwin->bw,
@@ -2480,8 +2472,7 @@ void ami_handle_applib(void)
error = nsurl_create(nsoption_charp(homepage_url), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2504,8 +2495,7 @@ void ami_handle_applib(void)
error = nsurl_create(tempurl, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -3202,9 +3192,8 @@ nserror ami_gui_new_blank_tab(struct gui_window_2 *gwin)
error = nsurl_create(nsoption_charp(homepage_url), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
gwin->bw,
@@ -3216,10 +3205,6 @@ nserror ami_gui_new_blank_tab(struct gui_window_2 *gwin)
return error;
}
- /* Front end /really/ should not be doing this. */
- history_destroy(bw->history);
- bw->history = history_create(bw);
-
return NSERROR_OK;
}
@@ -4965,8 +4950,7 @@ void ami_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg
GetSpeedButtonNodeAttrs(node, SBNA_UserData, (ULONG *)&url, TAG_DONE);
if(gwin->key_state & BROWSER_MOUSE_MOD_2) {
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_TAB,
+ browser_window_create(BW_CREATE_TAB,
url,
NULL,
gwin->bw,
@@ -4975,8 +4959,8 @@ void ami_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/amiga/menu.c b/amiga/menu.c
index 26f5c2b..9b3c44d 100644
--- a/amiga/menu.c
+++ b/amiga/menu.c
@@ -698,8 +698,7 @@ static void ami_menu_item_project_newwin(struct Hook *hook, APTR window, struct
error = nsurl_create(nsoption_charp(homepage_url), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -811,8 +810,7 @@ static void ami_menu_item_project_about(struct Hook *hook, APTR window, struct I
if(url) {
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -1036,8 +1034,8 @@ static void ami_menu_item_hotlist_entries(struct Hook *hook, APTR window, struct
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/amiga/tree.c b/amiga/tree.c
index 42eae4f..38b6338 100644
--- a/amiga/tree.c
+++ b/amiga/tree.c
@@ -322,8 +322,8 @@ void ami_tree_drag_end(struct treeview_window *twin, int x, int y)
browser_window_navigate(gwin->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/atari/about.c b/atari/about.c
index f09dfb3..6e98058 100644
--- a/atari/about.c
+++ b/atari/about.c
@@ -170,8 +170,7 @@ void atari_about_show(void)
if (goto_url != NULL) {
nserr = nsurl_create(goto_url, &url);
if (nserr == NSERROR_OK) {
- nserr = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ nserr = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/atari/ctxmenu.c b/atari/ctxmenu.c
index ae918c6..37c96ef 100644
--- a/atari/ctxmenu.c
+++ b/atari/ctxmenu.c
@@ -238,8 +238,8 @@ void context_popup(struct gui_window * gw, short x, short y)
gw->browser->bw,
hlcache_handle_get_url(ctx->ccdata.object),
hlcache_handle_get_url(gw->browser->bw->current_content),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL
@@ -258,8 +258,8 @@ void context_popup(struct gui_window * gw, short x, short y)
gw->browser->bw,
url,
hlcache_handle_get_url(gw->browser->bw->current_content),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL
@@ -293,11 +293,11 @@ void context_popup(struct gui_window * gw, short x, short y)
nsurl *url;
nserror error;
- error = nsurl_create(ctx->ccdata.link_url, &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
- url,
+ error = nsurl_create(ctx->ccdata.link_url, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(
+ BW_CREATE_HISTORY | BW_CREATE_CLONE,
+ url,
hlcache_handle_get_url(gw->browser->bw->current_content),
gw->browser->bw,
NULL
diff --git a/atari/deskmenu.c b/atari/deskmenu.c
index a119408..6a8376d 100644
--- a/atari/deskmenu.c
+++ b/atari/deskmenu.c
@@ -170,8 +170,7 @@ static void __CDECL menu_about(short item, short title, void *data)
error = nsurl_create(buf, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -202,8 +201,7 @@ static void __CDECL menu_new_win(short item, short title, void *data)
/* create an initial browser window */
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -224,8 +222,7 @@ static void __CDECL menu_open_url(short item, short title, void *data)
gw = input_window;
if( gw == NULL ) {
- browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ browser_window_create(BW_CREATE_HISTORY,
NULL,
NULL,
NULL,
@@ -256,8 +253,7 @@ static void __CDECL menu_open_file(short item, short title, void *data)
error = nsurl_create(urltxt, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/atari/gui.c b/atari/gui.c
index e43aecb..fe927e2 100644
--- a/atari/gui.c
+++ b/atari/gui.c
@@ -1172,8 +1172,7 @@ int main(int argc, char** argv)
/* create an initial browser window */
ret = nsurl_create(addr, &url);
if (ret == NSERROR_OK) {
- ret = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ ret = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/atari/rootwin.c b/atari/rootwin.c
index be9846f..4ab7442 100755
--- a/atari/rootwin.c
+++ b/atari/rootwin.c
@@ -1537,7 +1537,7 @@ static void on_file_dropped(ROOTWIN *rootwin, short msg[8])
if ((tmp_url != NULL)
&& nsurl_create(tmp_url, &ns_url) == NSERROR_OK) {
browser_window_navigate(gw->browser->bw, ns_url, NULL,
- BROWSER_WINDOW_HISTORY | BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE,
NULL, NULL, NULL);
nsurl_unref(ns_url);
}
diff --git a/atari/toolbar.c b/atari/toolbar.c
index 9a49fbf..1c3126b 100644
--- a/atari/toolbar.c
+++ b/atari/toolbar.c
@@ -715,7 +715,7 @@ bool toolbar_key_input(struct s_toolbar *tb, short nkc)
warn_user("NoMemory", 0);
} else {
browser_window_navigate(gw->browser->bw, url, NULL,
- BROWSER_WINDOW_HISTORY | BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE,
NULL, NULL, NULL);
nsurl_unref(url);
}
@@ -1001,8 +1001,8 @@ void toolbar_home_click(struct s_toolbar *tb)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/beos/gui.cpp b/beos/gui.cpp
index c2eadaa..b40e6bd 100644
--- a/beos/gui.cpp
+++ b/beos/gui.cpp
@@ -645,7 +645,7 @@ static void gui_init(int argc, char** argv)
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
error = browser_window_create((browser_window_nav_flags)
- (BROWSER_WINDOW_VERIFIABLE | BROWSER_WINDOW_HISTORY),
+ BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/beos/scaffolding.cpp b/beos/scaffolding.cpp
index 0a362ce..1561cb2 100644
--- a/beos/scaffolding.cpp
+++ b/beos/scaffolding.cpp
@@ -888,10 +888,10 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
if (/*message->WasDropped() &&*/ i == 0) {
browser_window_navigate(bw, nsurl, NULL,
(browser_window_nav_flags)
- (BROWSER_WINDOW_HISTORY | BROWSER_WINDOW_VERIFIABLE),
+ (BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE),
NULL, NULL, NULL);
} else {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE,
nsurl,
NULL,
bw,
@@ -915,7 +915,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
for (i = 1; message->FindString("argv", i, &urltxt) >= B_OK; i++) {
error = nsurl_create(urltxt.String(), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE,
url,
NULL,
bw,
@@ -949,8 +949,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
nsurl,
NULL,
- (browser_window_nav_flags)(BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY),
NULL,
NULL,
NULL);
@@ -1020,8 +1019,8 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
url,
NULL,
- (browser_window_nav_flags)(BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE),
NULL,
NULL,
NULL);
@@ -1049,8 +1048,8 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_navigate(bw,
url,
NULL,
- (browser_window_nav_flags)(BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE),
NULL,
NULL,
NULL);
@@ -1133,7 +1132,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
error = nsurl_create(text.String(), &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE,
url,
NULL,
bw,
@@ -1269,7 +1268,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
if (nserr == NSERROR_OK) {
nserr = browser_window_navigate(bw,
url, NULL,
- (browser_window_nav_flags)(BROWSER_WINDOW_HISTORY | BROWSER_WINDOW_VERIFIABLE),
+ (browser_window_nav_flags)(BW_NAVIGATE_HISTORY | BW_NAVIGATE_VERIFIABLE),
NULL, NULL, NULL);
nsurl_unref(url);
}
diff --git a/cocoa/BookmarksController.m b/cocoa/BookmarksController.m
index 7d7173f..4ba66dd 100644
--- a/cocoa/BookmarksController.m
+++ b/cocoa/BookmarksController.m
@@ -142,14 +142,13 @@ static const char *cocoa_hotlist_path( void )
error = browser_window_navigate([tab browser],
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
} else {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/cocoa/BrowserView.m b/cocoa/BrowserView.m
index 2421412..d525832 100644
--- a/cocoa/BrowserView.m
+++ b/cocoa/BrowserView.m
@@ -581,9 +581,9 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
error = nsurl_create([[sender representedObject] UTF8String], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB |
+ BW_CREATE_CLONE,
url,
NULL,
browser,
@@ -602,8 +602,8 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
error = nsurl_create([[sender representedObject] UTF8String], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
url,
NULL,
browser,
@@ -623,8 +623,8 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
browser_window_navigate(browser,
url,
NULL,
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -688,8 +688,8 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
browser_window_navigate(browser,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/cocoa/BrowserWindowController.m b/cocoa/BrowserWindowController.m
index 36b7164..1d70778 100644
--- a/cocoa/BrowserWindowController.m
+++ b/cocoa/BrowserWindowController.m
@@ -161,9 +161,8 @@
error = nsurl_create(NETSURF_HOMEPAGE, &url);
}
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
[activeBrowser browser],
diff --git a/cocoa/NetSurfAppDelegate.m b/cocoa/NetSurfAppDelegate.m
index c326c9d..e173535 100644
--- a/cocoa/NetSurfAppDelegate.m
+++ b/cocoa/NetSurfAppDelegate.m
@@ -51,8 +51,7 @@
}
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -75,8 +74,7 @@
for (NSURL *url in [openPanel URLs]) {
error = nsurl_create([[url absoluteString] UTF8String], &u);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
u,
NULL,
NULL,
@@ -98,8 +96,7 @@
error = nsurl_create([urlAsString UTF8String], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -182,8 +179,7 @@
error = nsurl_create([[urltxt absoluteString] UTF8String], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/cocoa/NetsurfApp.m b/cocoa/NetsurfApp.m
index 5c35911..8842422 100644
--- a/cocoa/NetsurfApp.m
+++ b/cocoa/NetsurfApp.m
@@ -231,8 +231,7 @@ int main( int argc, char **argv )
error = nsurl_create(argv[i], &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/desktop/browser.c b/desktop/browser.c
index 5a6cfc7..9bff58b 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -690,66 +690,81 @@ static bool slow_script(void *ctx)
}
/* exported interface, documented in desktop/browser.h */
-
-nserror
-browser_window_create(enum browser_window_nav_flags flags,
- nsurl *url,
- nsurl *referrer,
- struct browser_window *clone,
- struct browser_window **ret_bw)
-{
- struct browser_window *bw;
-
- /* caller must provide window to clone or be adding to history */
- assert(clone ||
- ((flags & BROWSER_WINDOW_HISTORY) != 0));
+nserror browser_window_create(enum browser_window_create_flags flags,
+ nsurl *url, nsurl *referrer,
+ struct browser_window *existing,
+ struct browser_window **bw)
+{
+ gui_window_create_flags gw_flags = GW_CREATE_NONE;
+ struct browser_window *ret;
+
+ /* Check parameters */
+ if (flags & (BW_CREATE_TAB | BW_CREATE_CLONE)) {
+ if (existing == NULL) {
+ assert(0 && "Failed: No existing window provided.");
+ return NSERROR_BAD_PARAMETER;
+ }
+ }
+ if (!(flags & BW_CREATE_HISTORY)) {
+ if (!(flags & BW_CREATE_CLONE) || existing == NULL) {
+ assert(0 && "Failed: Must have existing for history.");
+ return NSERROR_BAD_PARAMETER;
+ }
+ }
- if ((bw = calloc(1, sizeof(struct browser_window))) == NULL) {
+ if ((ret = calloc(1, sizeof(struct browser_window))) == NULL) {
warn_user("NoMemory", 0);
return NSERROR_NOMEM;
}
/* new javascript context for window */
- bw->jsctx = js_newcontext(nsoption_int(script_timeout),
+ ret->jsctx = js_newcontext(nsoption_int(script_timeout),
slow_script,
NULL);
/* Initialise common parts */
- browser_window_initialise_common(bw, clone);
+ browser_window_initialise_common(flags, ret, existing);
/* window characteristics */
- bw->browser_window_type = BROWSER_WINDOW_NORMAL;
- bw->scrolling = SCROLLING_YES;
- bw->border = true;
- bw->no_resize = true;
- bw->last_action = wallclock();
- bw->focus = bw;
-
- /* gui window */
- /* from the front end's pov, it clones the top level browser window,
- * so find that. */
- clone = browser_window_get_root(clone);
-
- bw->window = guit->window->create(bw,
- (clone != NULL) ? clone->window : NULL,
- ((flags & BROWSER_WINDOW_TAB) ?
- GW_CREATE_TAB : GW_CREATE_NONE) |
- ((clone != NULL) ?
- GW_CREATE_CLONE : GW_CREATE_NONE));
-
- if (bw->window == NULL) {
- browser_window_destroy(bw);
+ ret->browser_window_type = BROWSER_WINDOW_NORMAL;
+ ret->scrolling = SCROLLING_YES;
+ ret->border = true;
+ ret->no_resize = true;
+ ret->last_action = wallclock();
+ ret->focus = ret;
+
+ /* The existing gui_window is on the top-level existing
+ * browser_window. */
+ existing = browser_window_get_root(existing);
+
+ /* Set up gui_window creation flags */
+ if (flags & BW_CREATE_TAB)
+ gw_flags |= GW_CREATE_TAB;
+ if (flags & BW_CREATE_CLONE)
+ gw_flags |= GW_CREATE_CLONE;
+
+ ret->window = guit->window->create(ret,
+ (existing != NULL) ? existing->window : NULL,
+ gw_flags);
+
+ if (ret->window == NULL) {
+ browser_window_destroy(ret);
return NSERROR_BAD_PARAMETER;
}
if (url != NULL) {
- flags |= BROWSER_WINDOW_VERIFIABLE;
- browser_window_navigate(bw, url, referrer, flags, NULL, NULL, NULL);
+ enum browser_window_nav_flags nav_flags = BW_NAVIGATE_NONE;
+ if (!(flags & BW_CREATE_UNVERIFIABLE))
+ nav_flags |= BW_NAVIGATE_VERIFIABLE;
+ if (flags & BW_CREATE_HISTORY)
+ nav_flags |= BW_NAVIGATE_HISTORY;
+ browser_window_navigate(ret, url, referrer, nav_flags, NULL,
+ NULL, NULL);
}
- if (ret_bw != NULL) {
- *ret_bw = bw;
+ if (bw != NULL) {
+ *bw = ret;
}
return NSERROR_OK;
@@ -759,18 +774,21 @@ browser_window_create(enum browser_window_nav_flags flags,
/**
* Initialise common parts of a browser window
*
- * \param bw The window to initialise
- * \param clone The window to clone, or NULL if none
+ * \param flags Flags to control operation
+ * \param bw The window to initialise
+ * \param existing The existing window if cloning, else NULL
*/
-void browser_window_initialise_common(struct browser_window *bw,
- struct browser_window *clone)
+void browser_window_initialise_common(enum browser_window_create_flags flags,
+ struct browser_window *bw, struct browser_window *existing)
{
assert(bw);
- if (!clone)
+ if (flags & BW_CREATE_CLONE) {
+ assert(existing != NULL);
+ bw->history = history_clone(existing->history, bw);
+ } else {
bw->history = history_create(bw);
- else
- bw->history = history_clone(clone->history, bw);
+ }
/* window characteristics */
bw->refresh_interval = -1;
@@ -1091,7 +1109,7 @@ static void browser_window_refresh(void *p)
nsurl *url;
nsurl *refresh;
hlcache_handle *parent = NULL;
- enum browser_window_nav_flags flags = BROWSER_WINDOW_NONE;
+ enum browser_window_nav_flags flags = BW_NAVIGATE_NONE;
assert(bw->current_content != NULL &&
(content_get_status(bw->current_content) ==
@@ -1110,7 +1128,7 @@ static void browser_window_refresh(void *p)
url = hlcache_handle_get_url(bw->current_content);
if ((url == NULL) || (nsurl_compare(url, refresh, NSURL_COMPLETE))) {
- flags |= BROWSER_WINDOW_HISTORY;
+ flags |= BW_NAVIGATE_HISTORY;
}
/* Treat an (almost) immediate refresh in a top-level browser window as
@@ -1121,7 +1139,7 @@ static void browser_window_refresh(void *p)
* all.
*/
if (bw->refresh_interval <= 100 && bw->parent == NULL) {
- flags |= BROWSER_WINDOW_VERIFIABLE;
+ flags |= BW_NAVIGATE_VERIFIABLE;
} else {
parent = bw->current_content;
}
@@ -1794,7 +1812,7 @@ nserror browser_window_navigate(struct browser_window *bw,
}
/* Set up retrieval parameters */
- if ((flags & BROWSER_WINDOW_VERIFIABLE) != 0) {
+ if ((flags & BW_NAVIGATE_VERIFIABLE) != 0) {
fetch_flags |= LLCACHE_RETRIEVE_VERIFIABLE;
}
@@ -1818,7 +1836,7 @@ nserror browser_window_navigate(struct browser_window *bw,
}
/* Get download out of the way */
- if ((flags & BROWSER_WINDOW_DOWNLOAD) != 0) {
+ if ((flags & BW_NAVIGATE_DOWNLOAD) != 0) {
error = browser_window_download(bw,
url,
referrer,
@@ -1863,7 +1881,7 @@ nserror browser_window_navigate(struct browser_window *bw,
nsurl_unref(referrer);
}
- if ((flags & BROWSER_WINDOW_HISTORY) != 0) {
+ if ((flags & BW_NAVIGATE_HISTORY) != 0) {
history_add(bw->history,
bw->current_content, bw->frag_id);
}
@@ -1884,10 +1902,10 @@ nserror browser_window_navigate(struct browser_window *bw,
LOG(("Loading '%s'", nsurl_access(url)));
browser_window_set_status(bw, messages_get("Loading"));
- bw->history_add = (flags & BROWSER_WINDOW_HISTORY);
+ bw->history_add = (flags & BW_NAVIGATE_HISTORY);
/* Verifiable fetches may trigger a download */
- if ((flags & BROWSER_WINDOW_VERIFIABLE) != 0) {
+ if ((flags & BW_NAVIGATE_VERIFIABLE) != 0) {
fetch_flags |= HLCACHE_RETRIEVE_MAY_DOWNLOAD;
}
@@ -2250,7 +2268,7 @@ void browser_window_reload(struct browser_window *bw, bool all)
browser_window_navigate(bw,
hlcache_handle_get_url(bw->current_content),
NULL,
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -2536,8 +2554,9 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
* OR
* - button_2 opens in new tab and the link target is "_blank"
*/
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_TAB |
+ BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
NULL,
NULL,
bw,
@@ -2563,7 +2582,8 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
* - button_2 doesn't open in new tabs and the link target is
* "_blank"
*/
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
NULL,
NULL,
bw,
@@ -2602,7 +2622,7 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
if (!nsoption_bool(target_blank))
return bw;
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE | BW_CREATE_HISTORY,
NULL,
NULL,
bw,
diff --git a/desktop/browser.h b/desktop/browser.h
index 39f8b89..4cb8e01 100644
--- a/desktop/browser.h
+++ b/desktop/browser.h
@@ -62,42 +62,53 @@ typedef enum {
extern bool browser_reformat_pending;
-/** flags to browser window go */
+/** flags to browser_window_create */
+enum browser_window_create_flags {
+ /** No flags set */
+ BW_CREATE_NONE = 0,
+
+ /** this will form a new history node (don't set for back/reload/etc) */
+ BW_CREATE_HISTORY = (1 << 0),
+
+ /** New gui_window to be tab in same window as "existing" gui_window */
+ BW_CREATE_TAB = (1 << 1),
+
+ /** New gui_window to be clone of "existing" gui_window */
+ BW_CREATE_CLONE = (1 << 2),
+
+ /** Window not opened by user interaction (e.g. JS popup) */
+ BW_CREATE_UNVERIFIABLE = (1 << 3),
+};
+
+/** flags to browser_window_navigate */
enum browser_window_nav_flags {
/** No flags set */
- BROWSER_WINDOW_NONE = 0,
+ BW_NAVIGATE_NONE = 0,
/** this will form a new history node (don't set for back/reload/etc) */
- BROWSER_WINDOW_HISTORY = (1 << 0),
+ BW_NAVIGATE_HISTORY = (1 << 0),
/** download rather than render the uri */
- BROWSER_WINDOW_DOWNLOAD = (1 << 1),
+ BW_NAVIGATE_DOWNLOAD = (1 << 1),
/** this transaction is verifiable */
- BROWSER_WINDOW_VERIFIABLE = (1 << 2),
-
- /** New gui_window to be tab in same window as "existing" gui_window */
- BROWSER_WINDOW_TAB = (1 << 3),
-
- /** New gui_window to be clone of "existing" gui_window */
- BROWSER_WINDOW_CLONE = (1 << 4)
+ BW_NAVIGATE_VERIFIABLE = (1 << 2)
};
/**
* Create and open a new root browser window with the given page.
*
- * \param flags Flags to control operation
- * \param url URL to start fetching in the new window or NULL for blank
- * \param referer The referring uri or NULL if none
- * \param clone The browser window to clone
- * \param bw pointer to created browser window or untouched on error.
- * \return error code
+ * \param flags Flags to control operation
+ * \param url URL to fetch in the new window or NULL for blank
+ * \param referer The referring uri or NULL if none
+ * \param existing The an existing bw or NULL, required for some flags.
+ * \param bw Updated to created browser window or untouched on error.
+ * \return NSERROR_OK, or appropriate error otherwise.
*/
-nserror browser_window_create(enum browser_window_nav_flags flags,
- nsurl *url,
- nsurl *referrer,
- struct browser_window *clone,
- struct browser_window **bw);
+nserror browser_window_create(enum browser_window_create_flags flags,
+ nsurl *url, nsurl *referrer,
+ struct browser_window *existing,
+ struct browser_window **bw);
/**
* Start fetching a page in a browser window.
diff --git a/desktop/browser_private.h b/desktop/browser_private.h
index 34891f3..9007007 100644
--- a/desktop/browser_private.h
+++ b/desktop/browser_private.h
@@ -165,8 +165,8 @@ struct browser_window {
-void browser_window_initialise_common(struct browser_window *bw,
- struct browser_window *clone);
+void browser_window_initialise_common(enum browser_window_create_flags flags,
+ struct browser_window *bw, struct browser_window *existing);
/**
* Update the extent of the inside of a browser window to that of the current
diff --git a/desktop/frames.c b/desktop/frames.c
index 354c70d..153c78e 100644
--- a/desktop/frames.c
+++ b/desktop/frames.c
@@ -209,7 +209,8 @@ void browser_window_create_iframes(struct browser_window *bw,
window = &(bw->iframes[index++]);
/* Initialise common parts */
- browser_window_initialise_common(window, NULL);
+ browser_window_initialise_common(BW_CREATE_NONE,
+ window, NULL);
/* window characteristics */
window->browser_window_type = BROWSER_WINDOW_IFRAME;
@@ -251,7 +252,7 @@ void browser_window_create_iframes(struct browser_window *bw,
browser_window_navigate(window,
cur->url,
hlcache_handle_get_url(bw->current_content),
- BROWSER_WINDOW_NONE,
+ BW_NAVIGATE_NONE,
NULL,
NULL,
bw->current_content);
@@ -314,7 +315,8 @@ void browser_window_create_frameset(struct browser_window *bw,
window = &bw->children[index];
/* Initialise common parts */
- browser_window_initialise_common(window, NULL);
+ browser_window_initialise_common(BW_CREATE_NONE,
+ window, NULL);
/* window characteristics */
if (frame->children)
@@ -387,7 +389,7 @@ void browser_window_create_frameset(struct browser_window *bw,
browser_window_navigate(window,
frame->url,
hlcache_handle_get_url(parent),
- BROWSER_WINDOW_HISTORY,
+ BW_NAVIGATE_HISTORY,
NULL,
NULL,
parent);
diff --git a/desktop/global_history.c b/desktop/global_history.c
index 9d0e47e..c29b051 100644
--- a/desktop/global_history.c
+++ b/desktop/global_history.c
@@ -676,23 +676,22 @@ static nserror global_history_tree_node_entry_cb(
case TREE_MSG_NODE_LAUNCH:
{
nserror error;
- struct browser_window *clone = NULL;
- enum browser_window_nav_flags flags =
- BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB;
+ struct browser_window *existing = NULL;
+ enum browser_window_create_flags flags =
+ BW_CREATE_HISTORY;
- /* TODO: Set clone window, to window that new tab appears in */
+ /* TODO: Set existing to window that new tab appears in */
if (msg.data.node_launch.mouse &
(BROWSER_MOUSE_MOD_1 | BROWSER_MOUSE_MOD_2) ||
- clone == NULL) {
+ existing == NULL) {
/* Shift or Ctrl launch, open in new window rather
* than tab. */
- flags ^= BROWSER_WINDOW_TAB;
+ /* TODO: flags ^= BW_CREATE_TAB; */
}
- error = browser_window_create(flags, e->url, NULL, clone, NULL);
+ error = browser_window_create(flags, e->url, NULL,
+ existing, NULL);
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
}
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 219a348..6814f8d 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -472,23 +472,22 @@ static nserror hotlist_tree_node_entry_cb(
case TREE_MSG_NODE_LAUNCH:
{
nserror error;
- struct browser_window *clone = NULL;
- enum browser_window_nav_flags flags =
- BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB;
+ struct browser_window *existing = NULL;
+ enum browser_window_create_flags flags =
+ BW_CREATE_HISTORY;
- /* TODO: Set clone window, to window that new tab appears in */
+ /* TODO: Set existing to window that new tab appears in */
if (msg.data.node_launch.mouse &
(BROWSER_MOUSE_MOD_1 | BROWSER_MOUSE_MOD_2) ||
- clone == NULL) {
+ existing == NULL) {
/* Shift or Ctrl launch, open in new window rather
* than tab. */
- flags ^= BROWSER_WINDOW_TAB;
+ /* TODO: flags ^= BW_CREATE_TAB; */
}
- error = browser_window_create(flags, e->url, NULL, clone, NULL);
+ error = browser_window_create(flags, e->url, NULL,
+ existing, NULL);
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
}
diff --git a/desktop/local_history.c b/desktop/local_history.c
index b26f266..569fa44 100644
--- a/desktop/local_history.c
+++ b/desktop/local_history.c
@@ -150,6 +150,8 @@ struct history *history_clone(struct history *history,
return 0;
}
+ new_history->bw = bw;
+
return new_history;
}
@@ -455,13 +457,13 @@ void history_go(struct history *history, struct history_entry *entry,
current = history->current;
history->current = entry;
- browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ browser_window_create(BW_CREATE_CLONE,
url, NULL, history->bw, NULL);
history->current = current;
} else {
history->current = entry;
browser_window_navigate(history->bw, url, NULL,
- BROWSER_WINDOW_VERIFIABLE, NULL, NULL, NULL);
+ BW_NAVIGATE_VERIFIABLE, NULL, NULL, NULL);
}
nsurl_unref(url);
diff --git a/desktop/searchweb.c b/desktop/searchweb.c
index bdcb2ba..368ad05 100644
--- a/desktop/searchweb.c
+++ b/desktop/searchweb.c
@@ -71,9 +71,8 @@ bool search_web_new_window(struct browser_window *bw, const char *searchterm)
error = nsurl_create(urltxt, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
bw,
diff --git a/framebuffer/gui.c b/framebuffer/gui.c
index dc81a57..09dcdce 100644
--- a/framebuffer/gui.c
+++ b/framebuffer/gui.c
@@ -1097,8 +1097,8 @@ fb_url_enter(void *pw, char *text)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1874,8 +1874,7 @@ main(int argc, char** argv)
ret = nsurl_create(feurl, &url);
if (ret == NSERROR_OK) {
- ret = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ ret = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/gtk/dialogs/about.c b/gtk/dialogs/about.c
index eb662c8..1ebcb28 100644
--- a/gtk/dialogs/about.c
+++ b/gtk/dialogs/about.c
@@ -37,8 +37,8 @@ nsgtk_about_dialog_credits(GtkWidget *button, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -60,8 +60,8 @@ nsgtk_about_dialog_licence(GtkWidget *button, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/gtk/dialogs/source.c b/gtk/dialogs/source.c
index 4f1839d..326e3fb 100644
--- a/gtk/dialogs/source.c
+++ b/gtk/dialogs/source.c
@@ -313,8 +313,7 @@ void nsgtk_source_tab_init(GtkWindow *parent, struct browser_window *bw)
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
} else {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_TAB,
url,
NULL,
bw,
diff --git a/gtk/gui.c b/gtk/gui.c
index 11140ce..a3bf57c 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -462,8 +462,7 @@ static void gui_init(int argc, char** argv, char **respath)
/* create an initial browser window */
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index c4ea674..cd54548 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -437,8 +437,8 @@ gboolean nsgtk_window_url_activate_event(GtkWidget *widget, gpointer data)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -550,8 +550,8 @@ static void nsgtk_openfile_open(const char *filename)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -578,7 +578,7 @@ MULTIHANDLER(newwindow)
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
bw,
@@ -611,8 +611,8 @@ nserror nsgtk_scaffolding_new_tab(struct gui_window *gw)
}
}
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_TAB,
+ error = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
url,
NULL,
bw,
@@ -959,8 +959,8 @@ MENUHANDLER(savelink)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -986,12 +986,9 @@ MENUHANDLER(link_openwin)
error = nsurl_create(current_menu_ctx.link_url, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
- url,
- NULL,
- bw,
- NULL);
+ error = browser_window_create(
+ BW_CREATE_CLONE | BW_CREATE_HISTORY,
+ url, NULL, bw, NULL);
nsurl_unref(url);
}
if (error != NSERROR_OK) {
@@ -1019,13 +1016,9 @@ MENUHANDLER(link_opentab)
error = nsurl_create(current_menu_ctx.link_url, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_TAB,
- url,
- NULL,
- bw,
- NULL);
+ error = browser_window_create(BW_CREATE_CLONE |
+ BW_CREATE_HISTORY | BW_CREATE_TAB,
+ url, NULL, bw, NULL);
nsurl_unref(url);
}
if (error != NSERROR_OK) {
@@ -1466,8 +1459,8 @@ MULTIHANDLER(home)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1583,8 +1576,8 @@ MULTIHANDLER(contents)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1605,8 +1598,8 @@ MULTIHANDLER(guide)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1627,8 +1620,8 @@ MULTIHANDLER(info)
browser_window_navigate(bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/javascript/jsapi/location.bnd b/javascript/jsapi/location.bnd
index af76836..ef71e1d 100644
--- a/javascript/jsapi/location.bnd
+++ b/javascript/jsapi/location.bnd
@@ -62,8 +62,8 @@ operation assign %{
browser_window_navigate(bw,
joined,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -84,7 +84,7 @@ operation replace %{
browser_window_navigate(bw,
joined,
NULL,
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -129,7 +129,7 @@ setter href %{
browser_window_navigate(bw,
joined,
NULL,
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/monkey/browser.c b/monkey/browser.c
index 9be06dc..4895543 100644
--- a/monkey/browser.c
+++ b/monkey/browser.c
@@ -350,8 +350,7 @@ monkey_window_handle_new(int argc, char **argv)
error = nsurl_create(argv[2], &url);
}
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -410,8 +409,8 @@ monkey_window_handle_go(int argc, char **argv)
browser_window_navigate(gw->bw,
url,
ref_url,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/render/form.c b/render/form.c
index 50629c2..3c54b41 100644
--- a/render/form.c
+++ b/render/form.c
@@ -1711,8 +1711,8 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_query,
page_url,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1732,8 +1732,8 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_url,
page_url,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
data,
NULL,
NULL);
@@ -1743,8 +1743,8 @@ void form_submit(nsurl *page_url, struct browser_window *target,
browser_window_navigate(target,
action_url,
page_url,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
success,
NULL);
diff --git a/render/html_interaction.c b/render/html_interaction.c
index 4d797a0..55eed76 100644
--- a/render/html_interaction.c
+++ b/render/html_interaction.c
@@ -823,8 +823,8 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
browser_window_navigate(bw,
url,
content_get_url(c),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1003,8 +1003,8 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
browser_window_navigate(browser_window_find_target(bw, target, mouse),
url,
content_get_url(c),
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/riscos/dialog.c b/riscos/dialog.c
index 4347023..d259c87 100644
--- a/riscos/dialog.c
+++ b/riscos/dialog.c
@@ -775,8 +775,7 @@ bool ro_gui_dialog_openurl_apply(wimp_w w) {
error = nsurl_create(url2, &url);
free(url2);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/riscos/gui.c b/riscos/gui.c
index 83add25..e382635 100644
--- a/riscos/gui.c
+++ b/riscos/gui.c
@@ -941,8 +941,7 @@ static void gui_init2(int argc, char** argv)
errorns = nsurl_create(url, &urlns);
if (errorns == NSERROR_OK) {
- errorns = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ errorns = browser_window_create(BW_CREATE_HISTORY,
urlns,
NULL,
NULL,
@@ -1516,8 +1515,8 @@ void ro_msg_dataload(wimp_message *message)
error = browser_window_navigate(g->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1529,9 +1528,7 @@ void ro_msg_dataload(wimp_message *message)
ro_gui_hotlist_url_drop(message, urltxt);
#endif
} else {
- error = browser_window_create(
- BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -1906,8 +1903,7 @@ void ro_msg_dataopen(wimp_message *message)
free(url);
if (error == NSERROR_OK) {
/* create a new window with the file */
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
urlns,
NULL,
NULL,
diff --git a/riscos/gui/url_bar.c b/riscos/gui/url_bar.c
index 304a6bf..18bcb31 100644
--- a/riscos/gui/url_bar.c
+++ b/riscos/gui/url_bar.c
@@ -857,8 +857,8 @@ bool ro_gui_url_bar_menu_select(struct url_bar *url_bar, wimp_i i,
browser_window_navigate(g->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/riscos/iconbar.c b/riscos/iconbar.c
index 7e3d732..e0949b3 100644
--- a/riscos/iconbar.c
+++ b/riscos/iconbar.c
@@ -135,8 +135,7 @@ bool ro_gui_iconbar_click(wimp_pointer *pointer)
/* create an initial browser window */
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -206,9 +205,7 @@ bool ro_gui_iconbar_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_CONTENTS:
error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(
- BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/riscos/uri.c b/riscos/uri.c
index 70f75bc..bf789ee 100644
--- a/riscos/uri.c
+++ b/riscos/uri.c
@@ -74,8 +74,7 @@ void ro_uri_message_received(wimp_message *msg)
error = nsurl_create(uri_requested, &url);
free(uri_requested);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
diff --git a/riscos/url_complete.c b/riscos/url_complete.c
index 01774f6..6d99016 100644
--- a/riscos/url_complete.c
+++ b/riscos/url_complete.c
@@ -734,8 +734,8 @@ bool ro_gui_url_complete_click(wimp_pointer *pointer)
browser_window_navigate(g->bw,
url_complete_matches[url_complete_matches_selection],
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/riscos/url_protocol.c b/riscos/url_protocol.c
index 171b620..76d4031 100644
--- a/riscos/url_protocol.c
+++ b/riscos/url_protocol.c
@@ -126,8 +126,7 @@ void ro_url_message_received(wimp_message *message)
}
/* create new browser window */
- errorns = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ errorns = browser_window_create(BW_CREATE_HISTORY,
nsurl,
NULL,
NULL,
diff --git a/riscos/window.c b/riscos/window.c
index f638b34..27fdb39 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -1923,8 +1923,7 @@ bool ro_gui_window_handle_local_keypress(struct gui_window *g, wimp_key *key,
{
error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2673,8 +2672,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_CONTENTS:
error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2686,8 +2684,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_GUIDE:
error = nsurl_create("http://www.netsurf-browser.org/documentation/guide", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2699,8 +2696,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_INFORMATION:
error = nsurl_create("http://www.netsurf-browser.org/documentation/info", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2712,8 +2708,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_CREDITS:
error = nsurl_create("about:credits", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2725,8 +2720,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case HELP_OPEN_LICENCE:
error = nsurl_create("about:licence", &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
@@ -2837,8 +2831,8 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
error = browser_window_navigate(bw,
url,
hlcache_handle_get_url(h),
- BROWSER_WINDOW_DOWNLOAD |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_DOWNLOAD |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -2851,8 +2845,9 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
if (current_menu_url != NULL) {
error = nsurl_create(current_menu_url, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(
+ BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
url,
hlcache_handle_get_url(h),
bw,
@@ -3728,7 +3723,8 @@ void ro_gui_window_toolbar_click(void *data,
hlcache_handle *h = g->bw->current_content;
nserror error;
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(
+ BW_CREATE_HISTORY | BW_CREATE_CLONE,
NULL,
NULL,
g->bw,
@@ -4010,8 +4006,7 @@ void ro_gui_window_launch_url(struct gui_window *g, const char *url1)
browser_window_navigate(g->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_CREATE_HISTORY,
NULL,
NULL,
NULL);
@@ -4051,8 +4046,8 @@ bool ro_gui_window_navigate_up(struct gui_window *g, const char *url)
browser_window_navigate(g->bw,
parent,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -4088,8 +4083,8 @@ void ro_gui_window_action_home(struct gui_window *g)
error = browser_window_navigate(g->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -4114,7 +4109,7 @@ void ro_gui_window_action_new_window(struct gui_window *g)
if (g == NULL || g->bw == NULL || g->bw->current_content == NULL)
return;
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ error = browser_window_create(BW_CREATE_CLONE,
hlcache_handle_get_url(g->bw->current_content),
NULL,
g->bw,
diff --git a/windows/gui.c b/windows/gui.c
index 46a557a..51038a7 100644
--- a/windows/gui.c
+++ b/windows/gui.c
@@ -133,8 +133,8 @@ nsws_window_go(HWND hwnd, const char *urltxt)
browser_window_navigate(gw->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -762,7 +762,7 @@ nsws_window_command(HWND hwnd,
break;
case IDM_FILE_OPEN_WINDOW:
- browser_window_create(BROWSER_WINDOW_VERIFIABLE,
+ browser_window_create(BW_CREATE_NONE,
NULL,
NULL,
gw->bw,
@@ -876,8 +876,8 @@ nsws_window_command(HWND hwnd,
browser_window_navigate(gw->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
@@ -1045,8 +1045,8 @@ nsws_window_command(HWND hwnd,
browser_window_navigate(gw->bw,
url,
NULL,
- BROWSER_WINDOW_HISTORY |
- BROWSER_WINDOW_VERIFIABLE,
+ BW_NAVIGATE_HISTORY |
+ BW_NAVIGATE_VERIFIABLE,
NULL,
NULL,
NULL);
diff --git a/windows/main.c b/windows/main.c
index 6a53e0c..19cd44a 100644
--- a/windows/main.c
+++ b/windows/main.c
@@ -189,8 +189,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hLastInstance, LPSTR lpcli, int ncmd)
error = nsurl_create(addr, &url);
if (error == NSERROR_OK) {
- error = browser_window_create(BROWSER_WINDOW_VERIFIABLE |
- BROWSER_WINDOW_HISTORY,
+ error = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
NULL,
--
NetSurf Browser
9 years, 1 month
netsurf-website: branch master updated. f70cd96fc8b7baaaccd4c2afb3d6ea92013c27b3
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf-website.git/shortlog/f70cd96fc8b7b...
...commit http://git.netsurf-browser.org/netsurf-website.git/commit/f70cd96fc8b7baa...
...tree http://git.netsurf-browser.org/netsurf-website.git/tree/f70cd96fc8b7baaac...
The branch, master has been updated
via f70cd96fc8b7baaaccd4c2afb3d6ea92013c27b3 (commit)
from 36fdfbf3badb03c4340dc4fb2bc905d01847c8a2 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf-website.git/commit/?id=f70cd96fc8b...
commit f70cd96fc8b7baaaccd4c2afb3d6ea92013c27b3
Author: John-Mark Bell <jmb(a)netsurf-browser.org>
Commit: John-Mark Bell <jmb(a)netsurf-browser.org>
Purge references to bugs mail alias.
diff --git a/contact/index.en b/contact/index.en
index 4fc3991..660c239 100644
--- a/contact/index.en
+++ b/contact/index.en
@@ -97,8 +97,6 @@
<dl>
<dt><a href="mailto:help@netsurf-browser.org">help(a)netsurf-browser.org</a></dt>
<dd>For general queries about NetSurf.</dd>
-<dt><a href="mailto:bugs@netsurf-browser.org">bugs(a)netsurf-browser.org</a></dt>
-<dd>For bug reports about NetSurf.</dd>
<dt><a href="mailto:security@netsurf-browser.org">security(a)netsurf-browser.org</a></dt>
<dd>For reporting any security issues found in NetSurf.</dd>
</dl>
-----------------------------------------------------------------------
Summary of changes:
contact/index.en | 2 --
1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/contact/index.en b/contact/index.en
index 4fc3991..660c239 100644
--- a/contact/index.en
+++ b/contact/index.en
@@ -97,8 +97,6 @@
<dl>
<dt><a href="mailto:help@netsurf-browser.org">help(a)netsurf-browser.org</a></dt>
<dd>For general queries about NetSurf.</dd>
-<dt><a href="mailto:bugs@netsurf-browser.org">bugs(a)netsurf-browser.org</a></dt>
-<dd>For bug reports about NetSurf.</dd>
<dt><a href="mailto:security@netsurf-browser.org">security(a)netsurf-browser.org</a></dt>
<dd>For reporting any security issues found in NetSurf.</dd>
</dl>
--
NetSurf website source for *.netsurf-browser.org
9 years, 1 month