From 9c54a252230ceaf38a3accd5504b3e4bd5959c48 Mon Sep 17 00:00:00 2001 From: Xan Lopez Date: Tue, 2 Oct 2012 22:00:09 +0200 Subject: 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 --- embed/Makefile.am | 2 - embed/ephy-adblock-extension.c | 119 ----------------------------------------- embed/ephy-adblock-extension.h | 55 ------------------- embed/ephy-adblock.c | 106 +++++++++++++++++++++++------------- embed/ephy-adblock.h | 109 +++++++++++++++++++------------------ embed/ephy-embed-shell.c | 14 +++-- src/ephy-shell.c | 8 --- 7 files changed, 135 insertions(+), 278 deletions(-) delete mode 100644 embed/ephy-adblock-extension.c delete mode 100644 embed/ephy-adblock-extension.h 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 -#include - -#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 -#include - -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 +#include + +#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 can be included directly." -#endif - #ifndef EPHY_ADBLOCK_H #define EPHY_ADBLOCK_H #include "ephy-embed.h" + #include +#include 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 - 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 + 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 diff --git a/src/ephy-shell.c b/src/ephy-shell.c index e88e9a086..7dda80ad3 100644 --- a/src/ephy-shell.c +++ b/src/ephy-shell.c @@ -23,7 +23,6 @@ #include "config.h" #include "ephy-shell.h" -#include "ephy-adblock-extension.h" #include "ephy-adblock-manager.h" #include "ephy-bookmarks-editor.h" #include "ephy-bookmarks-import.h" @@ -1057,8 +1056,6 @@ ephy_shell_get_prefs_dialog (EphyShell *shell) void _ephy_shell_create_instance (EphyEmbedShellMode mode) { - EphyAdBlockManager *adblock_manager; - g_assert (ephy_shell == NULL); ephy_shell = EPHY_SHELL (g_object_new (EPHY_TYPE_SHELL, @@ -1067,11 +1064,6 @@ _ephy_shell_create_instance (EphyEmbedShellMode mode) NULL)); /* FIXME weak ref */ g_assert (ephy_shell != NULL); - - /* FIXME not the best place to have this */ - adblock_manager = EPHY_ADBLOCK_MANAGER (ephy_embed_shell_get_adblock_manager (embed_shell)); - ephy_adblock_manager_set_blocker (adblock_manager, - g_object_new (EPHY_TYPE_ADBLOCK_EXTENSION, NULL)); } /** -- cgit v1.2.3