[epiphany] adblock: get rid of AdBlock interface



commit 9c54a252230ceaf38a3accd5504b3e4bd5959c48
Author: Xan Lopez <xan igalia com>
Date:   Tue Oct 2 22:00:09 2012 +0200

    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(-)
---
diff --git a/embed/Makefile.am b/embed/Makefile.am
index a42fec7..3e44814 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.c b/embed/ephy-adblock.c
index 78aadbf..7a06ff8 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 6e386d6..efdd5d0 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 9069f4c..501fddc 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 e88e9a0..7dda80a 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));
 }
 
 /**



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]