aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
authorPriit Laes <plaes@plaes.org>2009-07-29 18:08:26 +0800
committerPriit Laes <plaes@plaes.org>2009-07-29 18:08:26 +0800
commitfc57712dbb7afbf0112c0ea471a86e0acb5462b7 (patch)
treee06f80c402a9aaa2f8489a906b5a9be7dbdc0ed4 /embed
parenta7d3b959e7af9b8fc3e93bdb3082cc1273bbd247 (diff)
downloadgsoc2013-epiphany-fc57712dbb7afbf0112c0ea471a86e0acb5462b7.tar
gsoc2013-epiphany-fc57712dbb7afbf0112c0ea471a86e0acb5462b7.tar.gz
gsoc2013-epiphany-fc57712dbb7afbf0112c0ea471a86e0acb5462b7.tar.bz2
gsoc2013-epiphany-fc57712dbb7afbf0112c0ea471a86e0acb5462b7.tar.lz
gsoc2013-epiphany-fc57712dbb7afbf0112c0ea471a86e0acb5462b7.tar.xz
gsoc2013-epiphany-fc57712dbb7afbf0112c0ea471a86e0acb5462b7.tar.zst
gsoc2013-epiphany-fc57712dbb7afbf0112c0ea471a86e0acb5462b7.zip
Revert "Move Epiphany to solely use GnomeKeyring for password management."
This reverts commit f453c807afecdc210410eeb9f389ca50d0764a7c.
Diffstat (limited to 'embed')
-rw-r--r--embed/Makefile.am2
-rw-r--r--embed/downloader-view.c8
-rw-r--r--embed/ephy-embed-single.c38
-rw-r--r--embed/ephy-password-manager.c218
-rw-r--r--embed/ephy-password-manager.h101
5 files changed, 365 insertions, 2 deletions
diff --git a/embed/Makefile.am b/embed/Makefile.am
index f4a49983e..b1f23303b 100644
--- a/embed/Makefile.am
+++ b/embed/Makefile.am
@@ -26,6 +26,7 @@ INST_H_FILES = \
ephy-embed-shell.h \
ephy-embed-utils.h \
ephy-history.h \
+ ephy-password-manager.h \
ephy-permission-manager.h \
ephy-web-view.h
@@ -50,6 +51,7 @@ libephyembed_la_SOURCES = \
ephy-encodings.c \
ephy-favicon-cache.c \
ephy-history.c \
+ ephy-password-manager.c \
ephy-permission-manager.c \
ephy-embed-prefs.c \
ephy-web-view.c \
diff --git a/embed/downloader-view.c b/embed/downloader-view.c
index 8eae89fa5..36b25fbe5 100644
--- a/embed/downloader-view.c
+++ b/embed/downloader-view.c
@@ -661,6 +661,10 @@ downloader_view_add_download (DownloaderView *dv,
#endif
GValue visible = {0, };
+#ifdef HAVE_LIBNOTIFY
+ char *downloading;
+#endif
+
/* dv may be unrefed inside update_download_row if the file
* downloaded completely while the user was choosing where to
* put it, so we need to protect it
@@ -706,7 +710,6 @@ downloader_view_add_download (DownloaderView *dv,
{
#ifdef HAVE_LIBNOTIFY
- char *downloading;
char *name = ephy_download_get_name (download);
downloading = g_strdup_printf(_("The file “%s” has been added to the downloads queue."),
name);
@@ -889,7 +892,7 @@ downloader_view_build_ui (DownloaderView *dv)
gtk_tree_view_column_set_cell_data_func(column, renderer, progress_cell_data_func, NULL, NULL);
gtk_tree_view_column_set_sort_column_id (column, COL_PERCENT);
- /* Remaining time column */
+ /* Remainng time column */
renderer = gtk_cell_renderer_text_new ();
g_object_set (renderer, "xalign", 0.5, NULL);
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW(priv->treeview),
@@ -1004,6 +1007,7 @@ downloader_view_remove_download (DownloaderView *dv, WebKitDownload *download)
update_status_icon (dv);
/* Close the dialog if there are no more downloads */
+
if (!g_hash_table_size (dv->priv->downloads_hash))
{
g_object_unref (dv);
diff --git a/embed/ephy-embed-single.c b/embed/ephy-embed-single.c
index f3f99965d..b41850a2a 100644
--- a/embed/ephy-embed-single.c
+++ b/embed/ephy-embed-single.c
@@ -26,6 +26,7 @@
#include "ephy-file-helpers.h"
#include "ephy-marshal.h"
#include "ephy-signal-accumulator.h"
+#include "ephy-password-manager.h"
#include "ephy-permission-manager.h"
#ifdef ENABLE_CERTIFICATE_MANAGER
@@ -49,6 +50,7 @@ enum {
static void ephy_embed_single_init (EphyEmbedSingle *single);
static void ephy_embed_single_class_init (EphyEmbedSingleClass *klass);
static void ephy_permission_manager_iface_init (EphyPermissionManagerIface *iface);
+static void ephy_password_manager_iface_init (EphyPasswordManagerIface *iface);
#ifdef ENABLE_CERTIFICATE_MANAGER
static void ephy_certificate_manager_iface_init (EphyCertificateManagerIface *iface);
#endif
@@ -94,12 +96,16 @@ ephy_embed_single_set_property (GObject *object,
#ifdef ENABLE_CERTIFICATE_MANAGER
G_DEFINE_TYPE_WITH_CODE (EphyEmbedSingle, ephy_embed_single, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (EPHY_TYPE_PASSWORD_MANAGER,
+ ephy_password_manager_iface_init)
G_IMPLEMENT_INTERFACE (EPHY_TYPE_CERTIFICATE_MANAGER,
ephy_certificate_manager_iface_init)
G_IMPLEMENT_INTERFACE (EPHY_TYPE_PERMISSION_MANAGER,
ephy_permission_manager_iface_init))
#else
G_DEFINE_TYPE_WITH_CODE (EphyEmbedSingle, ephy_embed_single, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (EPHY_TYPE_PASSWORD_MANAGER,
+ ephy_password_manager_iface_init)
G_IMPLEMENT_INTERFACE (EPHY_TYPE_PERMISSION_MANAGER,
ephy_permission_manager_iface_init))
#endif
@@ -283,6 +289,38 @@ ephy_permission_manager_iface_init (EphyPermissionManagerIface *iface)
iface->list = impl_permission_manager_list;
}
+static GList *
+impl_list_passwords (EphyPasswordManager *manager)
+{
+ return NULL;
+}
+
+static void
+impl_remove_password (EphyPasswordManager *manager,
+ EphyPasswordInfo *info)
+{
+}
+
+static void
+impl_remove_all_passwords (EphyPasswordManager *manager)
+{
+}
+
+static void
+impl_add_password (EphyPasswordManager *manager,
+ EphyPasswordInfo *info)
+{
+}
+
+static void
+ephy_password_manager_iface_init (EphyPasswordManagerIface *iface)
+{
+ iface->add = impl_add_password;
+ iface->remove = impl_remove_password;
+ iface->remove_all = impl_remove_all_passwords;
+ iface->list = impl_list_passwords;
+}
+
#ifdef ENABLE_CERTIFICATE_MANAGER
static gboolean
diff --git a/embed/ephy-password-manager.c b/embed/ephy-password-manager.c
new file mode 100644
index 000000000..aa757c7e4
--- /dev/null
+++ b/embed/ephy-password-manager.c
@@ -0,0 +1,218 @@
+/*
+ * Copyright © 2003 Marco Pesenti Gritti
+ * Copyright © 2003 Christian Persch
+ *
+ * This program 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; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+
+#include "ephy-password-manager.h"
+#include "ephy-marshal.h"
+#include "ephy-debug.h"
+
+/* EphyPasswordInfo */
+
+GType
+ephy_password_info_get_type (void)
+{
+ static GType type = 0;
+
+ if (G_UNLIKELY (type == 0))
+ {
+ type = g_boxed_type_register_static ("EphyPasswordInfo",
+ (GBoxedCopyFunc) ephy_password_info_copy,
+ (GBoxedFreeFunc) ephy_password_info_free);
+ }
+
+ return type;
+}
+
+/**
+ * ephy_password_info_new:
+ * @host: a host name
+ * @username: a user name
+ * @password: a password, or NULL
+ *
+ * Generates a new #EphyPasswordInfo.
+ *
+ * Return value: the new password info.
+ **/
+EphyPasswordInfo *
+ephy_password_info_new (const char *host,
+ const char *username,
+ const char *password)
+{
+ EphyPasswordInfo *info = g_slice_new0 (EphyPasswordInfo);
+
+ info->host = g_strdup (host);
+ info->username = g_strdup (username);
+ info->password = g_strdup (password);
+
+ return info;
+}
+
+/**
+ * ephy_password_info_copy:
+ * @info: a #EphyPasswordInfo
+ *
+ * Return value: a copy of @info
+ **/
+EphyPasswordInfo *
+ephy_password_info_copy (const EphyPasswordInfo *info)
+{
+ EphyPasswordInfo *copy = g_slice_new0 (EphyPasswordInfo);
+
+ copy->host = g_strdup (info->host);
+ copy->username = g_strdup (info->username);
+ copy->password = g_strdup (info->password);
+ copy->httpRealm = g_strdup (info->httpRealm);
+ copy->passwordField = g_strdup (info->passwordField);
+ copy->usernameField = g_strdup (info->usernameField);
+ copy->formSubmitURL = g_strdup (info->formSubmitURL);
+
+ return copy;
+}
+
+/**
+ * ephy_password_info_free:
+ * @info:
+ *
+ * Frees @info.
+ **/
+void
+ephy_password_info_free (EphyPasswordInfo *info)
+{
+ if (info != NULL)
+ {
+ g_free (info->host);
+ g_free (info->username);
+ g_free (info->password);
+ g_slice_free (EphyPasswordInfo, info);
+ }
+}
+
+/* EphyPasswordManager */
+
+static void ephy_password_manager_base_init (gpointer g_class);
+
+GType
+ephy_password_manager_get_type (void)
+{
+ static GType type = 0;
+
+ if (G_UNLIKELY (type == 0))
+ {
+ const GTypeInfo our_info =
+ {
+ sizeof (EphyPasswordManagerIface),
+ ephy_password_manager_base_init,
+ NULL,
+ };
+
+ type = g_type_register_static (G_TYPE_INTERFACE,
+ "EphyPasswordManager",
+ &our_info,
+ (GTypeFlags) 0);
+ }
+
+ return type;
+}
+
+static void
+ephy_password_manager_base_init (gpointer g_class)
+{
+ static gboolean initialised = FALSE;
+
+ if (initialised == FALSE)
+ {
+ /**
+ * EphyPasswordManager::changed
+ * @manager: the #EphyPermissionManager
+ *
+ * The ::passwords-changed signal is emitted when the list of passwords
+ * has changed.
+ */
+ g_signal_new ("passwords-changed",
+ EPHY_TYPE_PASSWORD_MANAGER,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (EphyPasswordManagerIface, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ initialised = TRUE;
+ }
+}
+
+/**
+ * ephy_password_manager_add_password:
+ * @manager: the #EphyPasswordManager
+ * @info: a #EphyPasswordInfo
+ *
+ * Adds the password entry @info to the the passwords database.
+ **/
+void
+ephy_password_manager_add_password (EphyPasswordManager *manager,
+ EphyPasswordInfo *info)
+{
+ EphyPasswordManagerIface *iface = EPHY_PASSWORD_MANAGER_GET_IFACE (manager);
+ iface->add (manager, info);
+}
+
+/**
+ * ephy_password_manager_remove_password:
+ * @manager: the #EphyPasswordManager
+ * @info: a #EphyPasswordInfo
+ *
+ * Removes the password entry @info from the passwords database.
+ **/
+void
+ephy_password_manager_remove_password (EphyPasswordManager *manager,
+ EphyPasswordInfo *info)
+{
+ EphyPasswordManagerIface *iface = EPHY_PASSWORD_MANAGER_GET_IFACE (manager);
+ iface->remove (manager, info);
+}
+
+/**
+ * ephy_password_manager_remove_all_passwords:
+ * @manager: the #EphyPasswordManager
+ *
+ * Removes all the password entries from the password database.
+ **/
+void
+ephy_password_manager_remove_all_passwords (EphyPasswordManager *manager)
+{
+ EphyPasswordManagerIface *iface = EPHY_PASSWORD_MANAGER_GET_IFACE (manager);
+ iface->remove_all (manager);
+}
+
+/**
+ * ephy_password_manager_list_passwords:
+ * @manager: the #EphyPasswordManager
+ *
+ * Lists all password entries in the passwords database.
+ *
+ * Return value: the list of password entries
+ **/
+GList *
+ephy_password_manager_list_passwords(EphyPasswordManager *manager)
+{
+ EphyPasswordManagerIface *iface = EPHY_PASSWORD_MANAGER_GET_IFACE (manager);
+ return iface->list (manager);
+}
diff --git a/embed/ephy-password-manager.h b/embed/ephy-password-manager.h
new file mode 100644
index 000000000..8e8b7bc3b
--- /dev/null
+++ b/embed/ephy-password-manager.h
@@ -0,0 +1,101 @@
+/*
+ * Copyright © 2003 Marco Pesenti Gritti
+ * Copyright © 2003 Christian Persch
+ *
+ * This program 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; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if !defined (__EPHY_EPIPHANY_H_INSIDE__) && !defined (EPIPHANY_COMPILATION)
+#error "Only <epiphany/epiphany.h> can be included directly."
+#endif
+
+#ifndef EPHY_PASSWORD_MANAGER_H
+#define EPHY_PASSWORD_MANAGER_H
+
+#include <glib-object.h>
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+#define EPHY_TYPE_PASSWORD_MANAGER (ephy_password_manager_get_type ())
+#define EPHY_PASSWORD_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EPHY_TYPE_PASSWORD_MANAGER, EphyPasswordManager))
+#define EPHY_PASSWORD_MANAGER_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EPHY_TYPE_PASSWORD_MANAGER, EphyPasswordManagerIface))
+#define EPHY_IS_PASSWORD_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EPHY_TYPE_PASSWORD_MANAGER))
+#define EPHY_IS_PASSWORD_MANAGER_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EPHY_TYPE_PASSWORD_MANAGER))
+#define EPHY_PASSWORD_MANAGER_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EPHY_TYPE_PASSWORD_MANAGER, EphyPasswordManagerIface))
+
+#define EPHY_TYPE_PASSWORD_INFO (ephy_password_info_get_type ())
+
+typedef struct _EphyPasswordManager EphyPasswordManager;
+typedef struct _EphyPasswordManagerIface EphyPasswordManagerIface;
+
+typedef struct
+{
+ char *host;
+ char *username;
+ char *password;
+
+ char *httpRealm;
+ char *formSubmitURL;
+ char *usernameField;
+ char *passwordField;
+} EphyPasswordInfo;
+
+struct _EphyPasswordManagerIface
+{
+ GTypeInterface base_iface;
+
+ /* Signals */
+ void (* changed) (EphyPasswordManager *manager);
+
+ /* Methods */
+ void (* add) (EphyPasswordManager *manager,
+ EphyPasswordInfo *info);
+ void (* remove) (EphyPasswordManager *manager,
+ EphyPasswordInfo *info);
+ void (* remove_all) (EphyPasswordManager *manager);
+ GList * (* list) (EphyPasswordManager *manager);
+};
+
+/* EphyPasswordInfo */
+
+GType ephy_password_info_get_type (void);
+
+EphyPasswordInfo *ephy_password_info_new (const char *host,
+ const char *username,
+ const char *password);
+
+EphyPasswordInfo *ephy_password_info_copy (const EphyPasswordInfo *info);
+
+void ephy_password_info_free (EphyPasswordInfo *info);
+
+/* EphyPasswordManager */
+
+GType ephy_password_manager_get_type (void);
+
+void ephy_password_manager_add_password (EphyPasswordManager *manager,
+ EphyPasswordInfo *info);
+
+void ephy_password_manager_remove_password (EphyPasswordManager *manager,
+ EphyPasswordInfo *info);
+
+void ephy_password_manager_remove_all_passwords (EphyPasswordManager *manager);
+
+GList * ephy_password_manager_list_passwords (EphyPasswordManager *manager);
+
+G_END_DECLS
+
+#endif