mirror of
https://github.com/netsurf-browser/netsurf
synced 2025-02-04 00:24:20 +03:00
improve cookie time display and document locale interaction
This commit is contained in:
parent
a91c7cdf04
commit
11d2921bbf
@ -16,8 +16,19 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** \file
|
||||
* Cookie Manager (implementation).
|
||||
/**
|
||||
* \file
|
||||
* Implementation of Cookie Management
|
||||
*
|
||||
* This allows users to view and remove their web cookies.
|
||||
*
|
||||
* \todo the viewing of cookies is pretty basic and it would be good
|
||||
* to apply more processing of the values and perhaps top level domain
|
||||
* suffix highlighting to give a better user information as to how the
|
||||
* cookies interact with the users sessions.
|
||||
*
|
||||
* \todo In addition to removing cookies it might be useful to allow
|
||||
* users to edit them, especially to alter expiry times.
|
||||
*/
|
||||
|
||||
|
||||
@ -205,10 +216,10 @@ static void cookie_manager_free_treeview_field_data(
|
||||
* \param value Text to set in field, ownership yielded
|
||||
* \return NSERROR_OK on success, appropriate error otherwise
|
||||
*/
|
||||
static inline nserror cookie_manager_field_builder(
|
||||
enum cookie_manager_field field,
|
||||
struct treeview_field_data *data,
|
||||
const char *value)
|
||||
static inline nserror
|
||||
cookie_manager_field_builder(enum cookie_manager_field field,
|
||||
struct treeview_field_data *data,
|
||||
const char *value)
|
||||
{
|
||||
data->field = cm_ctx.fields[field].field;
|
||||
data->value = value;
|
||||
@ -217,6 +228,46 @@ static inline nserror cookie_manager_field_builder(
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a cookie manager treeview field from given time
|
||||
*
|
||||
* The time should be converted to text in the users locacle
|
||||
*
|
||||
* \todo This should probably generate the user text using localtime
|
||||
* and strftime with the c format specifier. Currently ctime will
|
||||
* always generate output in the C locale.
|
||||
*
|
||||
* \param field Cookie manager treeview field to build
|
||||
* \param fdata Cookie manager entry field data to set
|
||||
* \param value Time to show in field
|
||||
* \return NSERROR_OK on success, appropriate error otherwise
|
||||
*/
|
||||
static inline nserror
|
||||
cookie_manager_field_builder_time(enum cookie_manager_field field,
|
||||
struct treeview_field_data *fdata,
|
||||
const time_t *value)
|
||||
{
|
||||
const char *date;
|
||||
char *date2;
|
||||
|
||||
fdata->field = cm_ctx.fields[field].field;
|
||||
|
||||
date = ctime(value);
|
||||
date2 = strdup(date);
|
||||
if (date2 == NULL) {
|
||||
fdata->value = NULL;
|
||||
fdata->value_len = 0;
|
||||
} else {
|
||||
assert(date2[24] == '\n');
|
||||
date2[24] = '\0';
|
||||
|
||||
fdata->value = date2;
|
||||
fdata->value_len = strlen(date2);
|
||||
}
|
||||
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set a cookie manager entry's data from the cookie_data.
|
||||
@ -225,13 +276,10 @@ static inline nserror cookie_manager_field_builder(
|
||||
* \param data Data associated with entry's cookie
|
||||
* \return NSERROR_OK on success, appropriate error otherwise
|
||||
*/
|
||||
static nserror cookie_manager_set_treeview_field_data(
|
||||
struct cookie_manager_entry *e,
|
||||
const struct cookie_data *data)
|
||||
static nserror
|
||||
cookie_manager_set_treeview_field_data(struct cookie_manager_entry *e,
|
||||
const struct cookie_data *data)
|
||||
{
|
||||
const char *date;
|
||||
char *date2;
|
||||
|
||||
assert(e != NULL);
|
||||
assert(data != NULL);
|
||||
|
||||
@ -246,53 +294,45 @@ static nserror cookie_manager_set_treeview_field_data(
|
||||
&e->data[COOKIE_M_PATH], strdup(data->path));
|
||||
|
||||
/* Set the Expires date field */
|
||||
date = ctime(&data->expires);
|
||||
date2 = strdup(date);
|
||||
if (date2 != NULL) {
|
||||
assert(date2[24] == '\n');
|
||||
date2[24] = '\0';
|
||||
}
|
||||
cookie_manager_field_builder(COOKIE_M_EXPIRES,
|
||||
&e->data[COOKIE_M_EXPIRES], date2);
|
||||
cookie_manager_field_builder_time(COOKIE_M_EXPIRES,
|
||||
&e->data[COOKIE_M_EXPIRES], &data->expires);
|
||||
|
||||
/* Set the Last used date field */
|
||||
date = ctime(&data->last_used);
|
||||
date2 = strdup(date);
|
||||
if (date2 != NULL) {
|
||||
assert(date2[24] == '\n');
|
||||
date2[24] = '\0';
|
||||
}
|
||||
cookie_manager_field_builder(COOKIE_M_LAST_USED,
|
||||
&e->data[COOKIE_M_LAST_USED], date2);
|
||||
cookie_manager_field_builder_time(COOKIE_M_LAST_USED,
|
||||
&e->data[COOKIE_M_LAST_USED], &data->last_used);
|
||||
|
||||
/* Set the Restrictions text */
|
||||
if (data->secure && data->http_only)
|
||||
if (data->secure && data->http_only) {
|
||||
e->data[COOKIE_M_RESTRICTIONS] = cm_ctx.values[COOKIE_M_HTTPS];
|
||||
else if (data->secure)
|
||||
} else if (data->secure) {
|
||||
e->data[COOKIE_M_RESTRICTIONS] = cm_ctx.values[COOKIE_M_SECURE];
|
||||
else if (data->http_only)
|
||||
} else if (data->http_only) {
|
||||
e->data[COOKIE_M_RESTRICTIONS] = cm_ctx.values[COOKIE_M_HTTP];
|
||||
else
|
||||
} else {
|
||||
e->data[COOKIE_M_RESTRICTIONS] = cm_ctx.values[COOKIE_M_NONE];
|
||||
}
|
||||
|
||||
/* Set the Version text */
|
||||
switch (data->version) {
|
||||
case COOKIE_NETSCAPE:
|
||||
e->data[COOKIE_M_VERSION] = cm_ctx.values[COOKIE_M_NETSCAPE];
|
||||
break;
|
||||
|
||||
case COOKIE_RFC2109:
|
||||
e->data[COOKIE_M_VERSION] = cm_ctx.values[COOKIE_M_RFC2109];
|
||||
break;
|
||||
|
||||
case COOKIE_RFC2965:
|
||||
e->data[COOKIE_M_VERSION] = cm_ctx.values[COOKIE_M_RFC2965];
|
||||
break;
|
||||
}
|
||||
|
||||
/* Set the Persistent text */
|
||||
if (data->no_destroy)
|
||||
if (data->no_destroy) {
|
||||
e->data[COOKIE_M_PERSISTENT] = cm_ctx.values[COOKIE_M_YES];
|
||||
else
|
||||
} else {
|
||||
e->data[COOKIE_M_PERSISTENT] = cm_ctx.values[COOKIE_M_NO];
|
||||
}
|
||||
|
||||
return NSERROR_OK;
|
||||
}
|
||||
@ -329,10 +369,13 @@ static nserror cookie_manager_create_cookie_node(
|
||||
return err;
|
||||
}
|
||||
|
||||
err = treeview_create_node_entry(cm_ctx.tree, &(cookie->entry),
|
||||
parent->folder, TREE_REL_FIRST_CHILD,
|
||||
cookie->data, cookie,
|
||||
cm_ctx.built ? TREE_OPTION_NONE :
|
||||
err = treeview_create_node_entry(cm_ctx.tree,
|
||||
&(cookie->entry),
|
||||
parent->folder,
|
||||
TREE_REL_FIRST_CHILD,
|
||||
cookie->data,
|
||||
cookie,
|
||||
cm_ctx.built ? TREE_OPTION_NONE :
|
||||
TREE_OPTION_SUPPRESS_RESIZE |
|
||||
TREE_OPTION_SUPPRESS_REDRAW);
|
||||
if (err != NSERROR_OK) {
|
||||
@ -677,7 +720,7 @@ static nserror cookie_manager_init_common_values(void)
|
||||
/**
|
||||
* Delete cookie manager entries (and optionally delete from urldb)
|
||||
*
|
||||
* \param e Cookie manager entry to delete.
|
||||
* \param e Cookie manager entry to delete.
|
||||
*/
|
||||
static void cookie_manager_delete_entry(struct cookie_manager_entry *e)
|
||||
{
|
||||
@ -724,6 +767,8 @@ static nserror cookie_manager_tree_node_folder_cb(
|
||||
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
static nserror cookie_manager_tree_node_entry_cb(
|
||||
struct treeview_node_msg msg, void *data)
|
||||
{
|
||||
@ -744,6 +789,8 @@ static nserror cookie_manager_tree_node_entry_cb(
|
||||
}
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
struct treeview_callback_table cm_tree_cb_t = {
|
||||
.folder = cookie_manager_tree_node_folder_cb,
|
||||
.entry = cookie_manager_tree_node_entry_cb
|
||||
|
Loading…
x
Reference in New Issue
Block a user