aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
authorXan Lopez <xan@igalia.com>2012-10-03 04:00:09 +0800
committerXan Lopez <xan@igalia.com>2012-10-03 05:21:15 +0800
commit9c54a252230ceaf38a3accd5504b3e4bd5959c48 (patch)
tree6a8c33d4e4e322c2352f71974bf488359c6fc7f7 /embed
parent7b72dcabf03b0d989da6cb42f4b5adccba54aa33 (diff)
downloadgsoc2013-epiphany-9c54a252230ceaf38a3accd5504b3e4bd5959c48.tar
gsoc2013-epiphany-9c54a252230ceaf38a3accd5504b3e4bd5959c48.tar.gz
gsoc2013-epiphany-9c54a252230ceaf38a3accd5504b3e4bd5959c48.tar.bz2
gsoc2013-epiphany-9c54a252230ceaf38a3accd5504b3e4bd5959c48.tar.lz
gsoc2013-epiphany-9c54a252230ceaf38a3accd5504b3e4bd5959c48.tar.xz
gsoc2013-epiphany-9c54a252230ceaf38a3accd5504b3e4bd5959c48.tar.zst
gsoc2013-epiphany-9c54a252230ceaf38a3accd5504b3e4bd5959c48.zip
adblock: get rid of AdBlock interface
No need for this now, just make EphyAdBlock a concrete class implementing the adblock functionality. https://bugzilla.gnome.org/show_bug.cgi?id=681657
Diffstat (limited to 'embed')
-rw-r--r--embed/Makefile.am2
-rw-r--r--embed/ephy-adblock-extension.c119
-rw-r--r--embed/ephy-adblock-extension.h55
-rw-r--r--embed/ephy-adblock.c106
-rw-r--r--embed/ephy-adblock.h109
-rw-r--r--embed/ephy-embed-shell.c14
6 files changed, 135 insertions, 270 deletions
diff --git a/embed/Makefile.am b/embed/Makefile.am
index a42fec7b0..3e44814fb 100644
--- a/embed/Makefile.am
+++ b/embed/Makefile.am
@@ -9,7 +9,6 @@ header_DATA = \
NOINST_H_FILES = \
ephy-about-handler.h \
- ephy-adblock-extension.h \
ephy-embed-dialog.h \
ephy-embed-private.h \
ephy-encoding.h \
@@ -41,7 +40,6 @@ BUILT_SOURCES = \
libephyembed_la_SOURCES = \
ephy-about-handler.c \
ephy-adblock.c \
- ephy-adblock-extension.c \
ephy-adblock-manager.c \
ephy-download.c \
ephy-embed.c \
diff --git a/embed/ephy-adblock-extension.c b/embed/ephy-adblock-extension.c
deleted file mode 100644
index c51aa4f52..000000000
--- a/embed/ephy-adblock-extension.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright © 2011 Igalia S.L.
- *
- * 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.
- *
- * Some parts of this file based on the previous 'adblock' extension,
- * licensed with the GNU General Public License 2 and later versions,
- * Copyright (C) 2003 Marco Pesenti Gritti, Christian Persch.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "config.h"
-#include "ephy-adblock-extension.h"
-
-#include "ephy-adblock.h"
-#include "ephy-adblock-manager.h"
-#include "ephy-debug.h"
-#include "ephy-embed-shell.h"
-#include "ephy-file-helpers.h"
-#include "uri-tester.h"
-
-#include <glib/gi18n-lib.h>
-#include <gtk/gtk.h>
-
-#define EPHY_ADBLOCK_EXTENSION_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_ADBLOCK_EXTENSION, EphyAdblockExtensionPrivate))
-
-struct EphyAdblockExtensionPrivate
-{
- UriTester *tester;
-};
-
-static void ephy_adblock_adblock_iface_init (EphyAdBlockIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (EphyAdblockExtension,
- ephy_adblock_extension,
- G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (EPHY_TYPE_ADBLOCK,
- ephy_adblock_adblock_iface_init))
-
-/* Private functions. */
-
-static void
-ephy_adblock_extension_init (EphyAdblockExtension *extension)
-{
- LOG ("EphyAdblockExtension initialising");
-
- extension->priv = EPHY_ADBLOCK_EXTENSION_GET_PRIVATE (extension);
- extension->priv->tester = uri_tester_new ();
-}
-
-static void
-ephy_adblock_extension_dispose (GObject *object)
-{
- EphyAdblockExtension *extension = NULL;
-
- LOG ("EphyAdblockExtension disposing");
-
- extension = EPHY_ADBLOCK_EXTENSION (object);
- g_clear_object (&extension->priv->tester);
-
- G_OBJECT_CLASS (ephy_adblock_extension_parent_class)->dispose (object);
-}
-
-static void
-ephy_adblock_extension_finalize (GObject *object)
-{
- LOG ("EphyAdblockExtension finalising");
-
- G_OBJECT_CLASS (ephy_adblock_extension_parent_class)->finalize (object);
-}
-
-static void
-ephy_adblock_extension_class_init (EphyAdblockExtensionClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = ephy_adblock_extension_dispose;
- object_class->finalize = ephy_adblock_extension_finalize;
-
- g_type_class_add_private (object_class, sizeof (EphyAdblockExtensionPrivate));
-}
-
-static gboolean
-ephy_adblock_impl_should_load (EphyAdBlock *blocker,
- EphyEmbed *embed,
- const char *url,
- AdUriCheckType type)
-{
- EphyAdblockExtension *self = NULL;
- EphyWebView* web_view = NULL;
- const char *address = NULL;
-
- LOG ("ephy_adblock_impl_should_load checking %s", url);
-
- self = EPHY_ADBLOCK_EXTENSION (blocker);
- g_return_val_if_fail (self != NULL, TRUE);
-
- web_view = ephy_embed_get_web_view (embed);
- address = ephy_web_view_get_address (web_view);
-
- return !uri_tester_test_uri (self->priv->tester, url, address, type);
-}
-
-static void
-ephy_adblock_adblock_iface_init (EphyAdBlockIface *iface)
-{
- iface->should_load = ephy_adblock_impl_should_load;
-}
diff --git a/embed/ephy-adblock-extension.h b/embed/ephy-adblock-extension.h
deleted file mode 100644
index 46bea1bca..000000000
--- a/embed/ephy-adblock-extension.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright © 2011 Igalia S.L.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef EPHY_ADBLOCK_EXTENSION_H
-#define EPHY_ADBLOCK_EXTENSION_H
-
-#include <glib-object.h>
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-#define EPHY_TYPE_ADBLOCK_EXTENSION (ephy_adblock_extension_get_type ())
-#define EPHY_ADBLOCK_EXTENSION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EPHY_TYPE_ADBLOCK_EXTENSION, EphyAdblockExtension))
-#define EPHY_ADBLOCK_EXTENSION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EPHY_TYPE_ADBLOCK_EXTENSION, EphyAdblockExtensionClass))
-#define EPHY_IS_ADBLOCK_EXTENSION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EPHY_TYPE_ADBLOCK_EXTENSION))
-#define EPHY_IS_ADBLOCK_EXTENSION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EPHY_TYPE_ADBLOCK_EXTENSION))
-#define EPHY_ADBLOCK_EXTENSION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EPHY_TYPE_ADBLOCK_EXTENSION, EphyAdblockExtensionClass))
-
-typedef struct EphyAdblockExtension EphyAdblockExtension;
-typedef struct EphyAdblockExtensionClass EphyAdblockExtensionClass;
-typedef struct EphyAdblockExtensionPrivate EphyAdblockExtensionPrivate;
-
-struct EphyAdblockExtensionClass
-{
- GObjectClass parent_class;
-};
-
-struct EphyAdblockExtension
-{
- GObject parent_instance;
-
- /*< private >*/
- EphyAdblockExtensionPrivate *priv;
-};
-
-GType ephy_adblock_extension_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/embed/ephy-adblock.c b/embed/ephy-adblock.c
index 78aadbf3e..7a06ff8c6 100644
--- a/embed/ephy-adblock.c
+++ b/embed/ephy-adblock.c
@@ -1,13 +1,16 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/*
- * Copyright © 2003 Marco Pesenti Gritti
- * Copyright © 2003 Christian Persch
- * Copyright © 2005 Jean-François Rameau
+ * Copyright © 2011, 2012 Igalia S.L.
*
* 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.
*
+ * Some parts of this file based on the previous 'adblock' extension,
+ * licensed with the GNU General Public License 2 and later versions,
+ * Copyright (C) 2003 Marco Pesenti Gritti, Christian Persch.
+ *
* 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
@@ -15,48 +18,79 @@
*
* 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.
- *
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "config.h"
-
#include "ephy-adblock.h"
-GType
-ephy_adblock_get_type (void)
+#include "ephy-adblock-manager.h"
+#include "ephy-debug.h"
+#include "ephy-embed-shell.h"
+#include "ephy-file-helpers.h"
+#include "uri-tester.h"
+
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+
+#define EPHY_ADBLOCK_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_ADBLOCK, EphyAdBlockPrivate))
+
+struct EphyAdBlockPrivate
{
- static GType type = 0;
-
- if (G_UNLIKELY (type == 0))
- {
- const GTypeInfo our_info =
- {
- sizeof (EphyAdBlockIface),
- NULL,
- NULL,
- };
-
- type = g_type_register_static (G_TYPE_INTERFACE,
- "EphyAdBlock",
- &our_info, 0);
- }
-
- return type;
+ UriTester *tester;
+};
+
+G_DEFINE_TYPE (EphyAdBlock, ephy_adblock, G_TYPE_OBJECT)
+
+/* Private functions. */
+
+static void
+ephy_adblock_init (EphyAdBlock *adblock)
+{
+ LOG ("EphyAdblock initialising");
+
+ adblock->priv = EPHY_ADBLOCK_GET_PRIVATE (adblock);
+ adblock->priv->tester = uri_tester_new ();
+}
+
+static void
+ephy_adblock_dispose (GObject *object)
+{
+ EphyAdBlock *adblock = NULL;
+
+ LOG ("EphyAdblock disposing");
+
+ adblock = EPHY_ADBLOCK (object);
+ g_clear_object (&adblock->priv->tester);
+
+ G_OBJECT_CLASS (ephy_adblock_parent_class)->dispose (object);
+}
+
+static void
+ephy_adblock_class_init (EphyAdBlockClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = ephy_adblock_dispose;
+
+ g_type_class_add_private (object_class, sizeof (EphyAdBlockPrivate));
}
gboolean
ephy_adblock_should_load (EphyAdBlock *adblock,
- EphyEmbed *embed,
- const char *url,
- AdUriCheckType check_type)
+ EphyEmbed *embed,
+ const char *url,
+ AdUriCheckType type)
{
- EphyAdBlockIface *iface = EPHY_ADBLOCK_GET_IFACE (adblock);
-
- if (iface->should_load)
- {
- return iface->should_load (adblock, embed, url, check_type);
- }
-
- return TRUE;
+ EphyWebView* web_view = NULL;
+ const char *address = NULL;
+
+ g_return_val_if_fail (adblock != NULL, TRUE);
+ g_return_val_if_fail (embed != NULL, TRUE);
+ g_return_val_if_fail (url, TRUE);
+
+ web_view = ephy_embed_get_web_view (embed);
+ address = ephy_web_view_get_address (web_view);
+
+ return !uri_tester_test_uri (adblock->priv->tester, url, address, type);
}
diff --git a/embed/ephy-adblock.h b/embed/ephy-adblock.h
index 6e386d6e7..efdd5d06f 100644
--- a/embed/ephy-adblock.h
+++ b/embed/ephy-adblock.h
@@ -1,7 +1,6 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/*
- * Copyright © 2003 Marco Pesenti Gritti
- * Copyright © 2003 Christian Persch
- * Copyright © 2005 Jean-François Rameau
+ * Copyright © 2011, 2012 Igalia S.L.
*
* 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
@@ -15,78 +14,78 @@
*
* 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.
- *
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#if !defined (__EPHY_EPIPHANY_H_INSIDE__) && !defined (EPIPHANY_COMPILATION)
-#error "Only <epiphany/epiphany.h> can be included directly."
-#endif
-
#ifndef EPHY_ADBLOCK_H
#define EPHY_ADBLOCK_H
#include "ephy-embed.h"
+
#include <glib-object.h>
+#include <glib.h>
G_BEGIN_DECLS
-#define EPHY_TYPE_ADBLOCK (ephy_adblock_get_type ())
-#define EPHY_ADBLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EPHY_TYPE_ADBLOCK, EphyAdBlock))
-#define EPHY_ADBLOCK_IFACE(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EPHY_TYPE_ADBLOCK, EphyAdBlockIface))
-#define EPHY_IS_ADBLOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EPHY_TYPE_ADBLOCK))
-#define EPHY_IS_ADBLOCK_IFACE(class) (G_TYPE_CHECK_CLASS_TYPE ((class), EPHY_TYPE_ADBLOCK))
-#define EPHY_ADBLOCK_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EPHY_TYPE_ADBLOCK, EphyAdBlockIface))
+#define EPHY_TYPE_ADBLOCK (ephy_adblock_get_type ())
+#define EPHY_ADBLOCK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EPHY_TYPE_ADBLOCK, EphyAdBlock))
+#define EPHY_ADBLOCK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EPHY_TYPE_ADBLOCK, EphyAdBlockClass))
+#define EPHY_IS_ADBLOCK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EPHY_TYPE_ADBLOCK))
+#define EPHY_IS_ADBLOCK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EPHY_TYPE_ADBLOCK))
+#define EPHY_ADBLOCK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EPHY_TYPE_ADBLOCK, EphyAdBlockClass))
typedef enum
{
- AD_URI_CHECK_TYPE_OTHER = 1U,
- AD_URI_CHECK_TYPE_SCRIPT = 2U, /* Indicates an executable script
- (such as JavaScript) */
- AD_URI_CHECK_TYPE_IMAGE = 3U, /* Indicates an image (e.g., IMG
- elements) */
- AD_URI_CHECK_TYPE_STYLESHEET = 4U, /* Indicates a stylesheet (e.g.,
- STYLE elements) */
- AD_URI_CHECK_TYPE_OBJECT = 5U, /* Indicates a generic object
- (plugin-handled content
- typically falls under this
- category) */
- AD_URI_CHECK_TYPE_DOCUMENT = 6U, /* Indicates a document at the
- top-level (i.e., in a
- browser) */
- AD_URI_CHECK_TYPE_SUBDOCUMENT = 7U, /* Indicates a document contained
- within another document (e.g.,
- IFRAMEs, FRAMES, and OBJECTs) */
- AD_URI_CHECK_TYPE_REFRESH = 8U, /* Indicates a timed refresh */
-
- AD_URI_CHECK_TYPE_XBEL = 9U, /* Indicates an XBL binding request,
- triggered either by -moz-binding CSS
- property or Document.addBinding method */
- AD_URI_CHECK_TYPE_PING = 10U, /* Indicates a ping triggered by a click on
- <A PING="..."> element */
- AD_URI_CHECK_TYPE_XMLHTTPREQUEST = 11U, /* Indicates a XMLHttpRequest */
- AD_URI_CHECK_TYPE_OBJECT_SUBREQUEST = 12U /* Indicates a request by a plugin */
+ AD_URI_CHECK_TYPE_OTHER = 1U,
+ AD_URI_CHECK_TYPE_SCRIPT = 2U, /* Indicates an executable script
+ (such as JavaScript) */
+ AD_URI_CHECK_TYPE_IMAGE = 3U, /* Indicates an image (e.g., IMG
+ elements) */
+ AD_URI_CHECK_TYPE_STYLESHEET = 4U, /* Indicates a stylesheet (e.g.,
+ STYLE elements) */
+ AD_URI_CHECK_TYPE_OBJECT = 5U, /* Indicates a generic object
+ (plugin-handled content
+ typically falls under this
+ category) */
+ AD_URI_CHECK_TYPE_DOCUMENT = 6U, /* Indicates a document at the
+ top-level (i.e., in a
+ browser) */
+ AD_URI_CHECK_TYPE_SUBDOCUMENT = 7U, /* Indicates a document contained
+ within another document (e.g.,
+ IFRAMEs, FRAMES, and OBJECTs) */
+ AD_URI_CHECK_TYPE_REFRESH = 8U, /* Indicates a timed refresh */
+ AD_URI_CHECK_TYPE_XBEL = 9U, /* Indicates an XBL binding request,
+ triggered either by -moz-binding CSS
+ property or Document.addBinding method */
+ AD_URI_CHECK_TYPE_PING = 10U, /* Indicates a ping triggered by a click on
+ <A PING="..."> element */
+ AD_URI_CHECK_TYPE_XMLHTTPREQUEST = 11U, /* Indicates a XMLHttpRequest */
+ AD_URI_CHECK_TYPE_OBJECT_SUBREQUEST = 12U /* Indicates a request by a plugin */
} AdUriCheckType;
-typedef struct _EphyAdBlock EphyAdBlock;
-typedef struct _EphyAdBlockIface EphyAdBlockIface;
-
-struct _EphyAdBlockIface
+typedef struct EphyAdBlock EphyAdBlock;
+typedef struct EphyAdBlockClass EphyAdBlockClass;
+typedef struct EphyAdBlockPrivate EphyAdBlockPrivate;
+
+struct EphyAdBlockClass
+{
+ GObjectClass parent_class;
+};
+
+struct EphyAdBlock
{
- GTypeInterface base_iface;
+ GObject parent_instance;
- gboolean (* should_load) (EphyAdBlock *adblock,
- EphyEmbed *embed,
- const char *url,
- AdUriCheckType check_type);
+ /*< private >*/
+ EphyAdBlockPrivate *priv;
};
-GType ephy_adblock_get_type (void);
+GType ephy_adblock_get_type (void);
-gboolean ephy_adblock_should_load (EphyAdBlock *adblock,
- EphyEmbed *embed,
- const char *url,
- AdUriCheckType check_type);
+gboolean ephy_adblock_should_load (EphyAdBlock *adblock,
+ EphyEmbed *embed,
+ const char *url,
+ AdUriCheckType type);
G_END_DECLS
diff --git a/embed/ephy-embed-shell.c b/embed/ephy-embed-shell.c
index 9069f4cc8..501fddca0 100644
--- a/embed/ephy-embed-shell.c
+++ b/embed/ephy-embed-shell.c
@@ -411,12 +411,20 @@ ephy_embed_shell_get_default (void)
GObject *
ephy_embed_shell_get_adblock_manager (EphyEmbedShell *shell)
{
+ EphyEmbedShellPrivate *priv;
+
g_return_val_if_fail (EPHY_IS_EMBED_SHELL (shell), NULL);
- if (shell->priv->adblock_manager == NULL)
- shell->priv->adblock_manager = g_object_new (EPHY_TYPE_ADBLOCK_MANAGER, NULL);
+ priv = shell->priv;
+
+ if (priv->adblock_manager == NULL) {
+ priv->adblock_manager = g_object_new (EPHY_TYPE_ADBLOCK_MANAGER, NULL);
+
+ ephy_adblock_manager_set_blocker (priv->adblock_manager,
+ g_object_new (EPHY_TYPE_ADBLOCK, NULL));
+ }
- return G_OBJECT (shell->priv->adblock_manager);
+ return G_OBJECT (priv->adblock_manager);
}
void