summaryrefslogtreecommitdiff
path: root/desktop/cookies.c
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-07-21 23:24:07 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2013-07-21 23:24:07 +0100
commit01159ff5896f9ac2410832c1516bbbd5ff57ae0d (patch)
tree74ff87b13808e648af507281188739355d804f9e /desktop/cookies.c
parentdce3c8c170a7394e1114f19fc5aa68007eb61324 (diff)
downloadnetsurf-01159ff5896f9ac2410832c1516bbbd5ff57ae0d.tar.gz
netsurf-01159ff5896f9ac2410832c1516bbbd5ff57ae0d.tar.bz2
Move cookies viewer module.
Diffstat (limited to 'desktop/cookies.c')
-rw-r--r--desktop/cookies.c525
1 files changed, 0 insertions, 525 deletions
diff --git a/desktop/cookies.c b/desktop/cookies.c
deleted file mode 100644
index 9f66aea1e..000000000
--- a/desktop/cookies.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/*
- * Copyright 2006 Richard Wilson <info@tinct.net>
- * Copyright 2009 Paul Blokus <paul_pl@users.sourceforge.net>
- *
- * 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/>.
- */
-
-/** \file
- * Cookies (implementation).
- */
-
-#include <assert.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include "content/content.h"
-#include "content/hlcache.h"
-#include "content/urldb.h"
-#include "desktop/cookies.h"
-#include "utils/nsoption.h"
-#include "desktop/tree.h"
-#include "utils/log.h"
-#include "utils/messages.h"
-#include "utils/schedule.h"
-#include "utils/url.h"
-#include "utils/utils.h"
-
-/** Flags for each type of cookie tree node. */
-enum tree_element_cookie {
- TREE_ELEMENT_PERSISTENT = 0x01,
- TREE_ELEMENT_VERSION = 0x02,
- TREE_ELEMENT_SECURE = 0x03,
- TREE_ELEMENT_LAST_USED = 0x04,
- TREE_ELEMENT_EXPIRES = 0x05,
- TREE_ELEMENT_PATH = 0x06,
- TREE_ELEMENT_DOMAIN = 0x07,
- TREE_ELEMENT_COMMENT = 0x08,
- TREE_ELEMENT_VALUE = 0x09,
-};
-
-static struct tree *cookies_tree;
-static struct node *cookies_tree_root;
-static bool user_delete;
-static hlcache_handle *folder_icon;
-static hlcache_handle *cookie_icon;
-
-
-/**
- * Find an entry in the cookie tree
- *
- * \param node the node to check the children of
- * \param title The title to find
- * \return Pointer to node, or NULL if not found
- */
-static struct node *cookies_find(struct node *node, const char *title)
-{
- struct node *search;
- struct node_element *element;
-
- assert(node !=NULL);
-
- for (search = tree_node_get_child(node); search;
- search = tree_node_get_next(search)) {
- element = tree_node_find_element(search, TREE_ELEMENT_TITLE,
- NULL);
- if (strcmp(title, tree_node_element_get_text(element)) == 0)
- return search;
- }
- return NULL;
-}
-
-/**
- * Callback for all cookie tree nodes.
- */
-static node_callback_resp cookies_node_callback(void *user_data, struct node_msg_data *msg_data)
-{
- struct node *node = msg_data->node;
- struct node_element *domain, *path;
- const char *domain_t, *path_t, *name_t;
- char *space;
- bool is_folder = tree_node_is_folder(node);
-
- /* we don't remove any icons here */
- if (msg_data->msg == NODE_DELETE_ELEMENT_IMG)
- return NODE_CALLBACK_HANDLED;
-
- /* let the tree handle events other than text data removal */
- if (msg_data->msg != NODE_DELETE_ELEMENT_TXT)
- return NODE_CALLBACK_NOT_HANDLED;
-
- /* check if it's a domain folder */
- if (is_folder)
- return NODE_CALLBACK_NOT_HANDLED;
-
- switch (msg_data->flag) {
- case TREE_ELEMENT_TITLE:
- if (!user_delete)
- break;
- /* get the rest of the cookie data */
- domain = tree_node_find_element(node,
- TREE_ELEMENT_DOMAIN, NULL);
- path = tree_node_find_element(node, TREE_ELEMENT_PATH,
- NULL);
-
- if ((domain != NULL) &&
- (path != NULL)) {
- domain_t = tree_node_element_get_text(domain) +
- strlen(messages_get(
- "TreeDomain")) - 4;
- space = strchr(domain_t, ' ');
- if (space != NULL)
- *space = '\0';
- path_t = tree_node_element_get_text(path) +
- strlen(messages_get("TreePath"))
- - 4;
- space = strchr(path_t, ' ');
- if (space != NULL)
- *space = '\0';
- name_t = msg_data->data.text;
- urldb_delete_cookie(domain_t, path_t, name_t);
- }
- break;
- default:
- break;
- }
-
- free(msg_data->data.text);
-
- return NODE_CALLBACK_HANDLED;
-}
-
-
-/**
- * Updates a tree entry for a cookie.
- *
- * All information is copied from the cookie_data, and as such can
- * be edited and should be freed.
- *
- * \param node The node to update
- * \param data The cookie data to use
- * \return true if node updated, or false for failure
- */
-static bool cookies_update_cookie_node(struct node *node,
- const struct cookie_data *data)
-{
- struct node_element *element;
- char buffer[32];
-
- assert(data != NULL);
-
- /* update the value text */
- element = tree_node_find_element(node, TREE_ELEMENT_VALUE, NULL);
- tree_update_element_text(cookies_tree,
- element,
- messages_get_buff("TreeValue",
- data->value != NULL ?
- data->value :
- messages_get("TreeUnused")));
-
-
- /* update the comment text */
- if ((data->comment != NULL) &&
- (strcmp(data->comment, "") != 0)) {
- element = tree_node_find_element(node, TREE_ELEMENT_COMMENT, NULL);
- tree_update_element_text(cookies_tree,
- element,
- messages_get_buff("TreeComment",
- data->comment));
- }
-
- /* update domain text */
- element = tree_node_find_element(node, TREE_ELEMENT_DOMAIN, element);
- tree_update_element_text(cookies_tree,
- element,
- messages_get_buff("TreeDomain",
- data->domain,
- data->domain_from_set ?
- messages_get("TreeHeaders") :
- ""));
-
- /* update path text */
- element = tree_node_find_element(node, TREE_ELEMENT_PATH, element);
- tree_update_element_text(cookies_tree,
- element,
- messages_get_buff("TreePath", data->path,
- data->path_from_set ?
- messages_get("TreeHeaders") :
- ""));
-
- /* update expiry text */
- element = tree_node_find_element(node, TREE_ELEMENT_EXPIRES, element);
- tree_update_element_text(cookies_tree,
- element,
- messages_get_buff("TreeExpires",
- (data->expires > 0)
- ? (data->expires == 1)
- ? messages_get("TreeSession")
- : ctime(&data->expires)
- : messages_get("TreeUnknown")));
-
- /* update last used text */
- element = tree_node_find_element(node, TREE_ELEMENT_LAST_USED, element);
- tree_update_element_text(cookies_tree,
- element,
- messages_get_buff("TreeLastUsed",
- (data->last_used > 0) ?
- ctime(&data->last_used) :
- messages_get("TreeUnknown")));
-
- /* update secure text */
- element = tree_node_find_element(node, TREE_ELEMENT_SECURE, element);
- tree_update_element_text(cookies_tree,
- element,
- messages_get_buff("TreeSecure",
- data->secure ?
- messages_get("Yes") :
- messages_get("No")));
-
- /* update version text */
- element = tree_node_find_element(node, TREE_ELEMENT_VERSION, element);
- snprintf(buffer, sizeof(buffer), "TreeVersion%i", data->version);
- tree_update_element_text(cookies_tree,
- element,
- messages_get_buff("TreeVersion",
- messages_get(buffer)));
-
- /* update persistant text */
- element = tree_node_find_element(node, TREE_ELEMENT_PERSISTENT, element);
- tree_update_element_text(cookies_tree,
- element,
- messages_get_buff("TreePersistent",
- data->no_destroy ?
- messages_get("Yes") :
- messages_get("No")));
-
- return true;
-}
-
-/**
- * Creates an empty tree entry for a cookie, and links it into the tree.
- *
- * All information is copied from the cookie_data, and as such can
- * be edited and should be freed.
- *
- * \param parent the node to link to
- * \param data the cookie data to use
- * \return the node created, or NULL for failure
- */
-static struct node *cookies_create_cookie_node(struct node *parent,
- const struct cookie_data *data)
-{
- struct node *node;
-
- node = tree_create_leaf_node(cookies_tree,
- NULL,
- data->name,
- false, false, false);
- if (node == NULL) {
- return NULL;
- }
-
- tree_set_node_user_callback(node, cookies_node_callback, NULL);
-
- tree_create_node_element(node, NODE_ELEMENT_TEXT,
- TREE_ELEMENT_PERSISTENT, false);
-
- tree_create_node_element(node, NODE_ELEMENT_TEXT,
- TREE_ELEMENT_VERSION, false);
-
- tree_create_node_element(node, NODE_ELEMENT_TEXT,
- TREE_ELEMENT_SECURE, false);
-
- tree_create_node_element(node, NODE_ELEMENT_TEXT,
- TREE_ELEMENT_LAST_USED, false);
-
- tree_create_node_element(node, NODE_ELEMENT_TEXT,
- TREE_ELEMENT_EXPIRES, false);
-
- tree_create_node_element(node, NODE_ELEMENT_TEXT,
- TREE_ELEMENT_PATH, false);
-
- tree_create_node_element(node, NODE_ELEMENT_TEXT,
- TREE_ELEMENT_DOMAIN, false);
-
- if ((data->comment) && (strcmp(data->comment, "")))
- tree_create_node_element(node, NODE_ELEMENT_TEXT,
- TREE_ELEMENT_COMMENT, false);
- tree_create_node_element(node, NODE_ELEMENT_TEXT,
- TREE_ELEMENT_VALUE, false);
- tree_set_node_icon(cookies_tree, node, cookie_icon);
-
- if (!cookies_update_cookie_node(node, data))
- {
- tree_delete_node(NULL, node, false);
- return NULL;
- }
-
- tree_link_node(cookies_tree, parent, node, false);
- return node;
-}
-
-
-/**
- * Called when scheduled event gets fired. Actually performs the update.
- */
-static void cookies_schedule_callback(const void *scheduled_data)
-{
- const struct cookie_data *data = scheduled_data;
- struct node *node = NULL;
- struct node *cookie_node = NULL;
-
- assert(data != NULL);
-
- node = cookies_find(cookies_tree_root, data->domain);
-
- if (node == NULL) {
- node = tree_create_folder_node(cookies_tree,
- cookies_tree_root,
- data->domain,
- false, false, false);
- if (node != NULL) {
- tree_set_node_user_callback(node,
- cookies_node_callback,
- NULL);
- tree_set_node_icon(cookies_tree, node, folder_icon);
- }
- }
-
- if (node != NULL) {
- cookie_node = cookies_find(node, data->name);
- if (cookie_node == NULL) {
- cookies_create_cookie_node(node, data);
- } else {
- cookies_update_cookie_node(cookie_node, data);
- }
-
- }
-}
-
-/**
- * Initialises cookies tree.
- *
- * \param data user data for the callbacks
- * \param start_redraw callback function called before every redraw
- * \param end_redraw callback function called after every redraw
- * \return true on success, false on memory exhaustion
- */
-bool cookies_initialise(struct tree *tree, const char* folder_icon_name, const char* cookie_icon_name)
-{
-
- if (tree == NULL)
- return false;
-
- folder_icon = tree_load_icon(folder_icon_name);
- cookie_icon = tree_load_icon(cookie_icon_name);
-
- /* Create an empty tree */
- cookies_tree = tree;
- cookies_tree_root = tree_get_root(cookies_tree);
-
- user_delete = false;
- urldb_iterate_cookies(cookies_schedule_update);
- tree_set_node_expanded(cookies_tree, cookies_tree_root,
- false, true, true);
-
- return true;
-}
-
-
-/**
- * Get flags with which the cookies tree should be created;
- *
- * \return the flags
- */
-unsigned int cookies_get_tree_flags(void)
-{
- return TREE_DELETE_EMPTY_DIRS;
-}
-
-
-/* exported interface documented in cookies.h */
-bool cookies_schedule_update(const struct cookie_data *data)
-{
- assert(data != NULL);
- assert(user_delete == false);
-
- if (cookies_tree_root != NULL)
- cookies_schedule_callback(data);
-
- return true;
-}
-
-
-/* exported interface documented in cookies.h */
-void cookies_remove(const struct cookie_data *data)
-{
- assert(data != NULL);
-
- if (cookies_tree_root != NULL)
- cookies_schedule_callback(data);
-}
-
-
-/**
- * Free memory and release all other resources.
- */
-void cookies_cleanup(void)
-{
- hlcache_handle_release(folder_icon);
- hlcache_handle_release(cookie_icon);
-}
-
-/* Actions to be connected to front end specific toolbars */
-
-/**
- * Delete nodes which are currently selected.
- */
-void cookies_delete_selected(void)
-{
- user_delete = true;
- tree_delete_selected_nodes(cookies_tree, cookies_tree_root);
- user_delete = false;
-}
-
-/**
- * Delete all nodes.
- */
-void cookies_delete_all(void)
-{
- bool needs_redraw = tree_get_redraw(cookies_tree);
- if (needs_redraw)
- tree_set_redraw(cookies_tree, false);
-
- user_delete = true;
- tree_set_node_selected(cookies_tree, cookies_tree_root, true, true);
- tree_delete_selected_nodes(cookies_tree, cookies_tree_root);
- user_delete = false;
-
- if (needs_redraw)
- tree_set_redraw(cookies_tree, true);
-}
-
-/**
- * Select all nodes in the tree.
- */
-void cookies_select_all(void)
-{
- tree_set_node_selected(cookies_tree, cookies_tree_root, true, true);
-}
-
-/**
- * Unselect all nodes.
- */
-void cookies_clear_selection(void)
-{
- tree_set_node_selected(cookies_tree, cookies_tree_root, true, false);
-}
-
-/**
- * Expand both domain and cookie nodes.
- */
-void cookies_expand_all(void)
-{
- tree_set_node_expanded(cookies_tree, cookies_tree_root,
- true, true, true);
-}
-
-/**
- * Expand domain nodes only.
- */
-void cookies_expand_domains(void)
-{
- tree_set_node_expanded(cookies_tree, cookies_tree_root,
- true, true, false);
-}
-
-/**
- * Expand cookie nodes only.
- */
-void cookies_expand_cookies(void)
-{
- tree_set_node_expanded(cookies_tree, cookies_tree_root,
- true, false, true);
-}
-
-/**
- * Collapse both domain and cookie nodes.
- */
-void cookies_collapse_all(void)
-{
- tree_set_node_expanded(cookies_tree, cookies_tree_root,
- false, true, true);
-}
-
-/**
- * Collapse domain nodes only.
- */
-void cookies_collapse_domains(void)
-{
- tree_set_node_expanded(cookies_tree, cookies_tree_root,
- false, true, false);
-}
-
-/**
- * Collapse cookie nodes only.
- */
-void cookies_collapse_cookies(void)
-{
- tree_set_node_expanded(cookies_tree, cookies_tree_root,
- false, false, true);
-}