[epiphany] adblock: get rid of AdBlock interface
- From: Xan Lopez <xan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany] adblock: get rid of AdBlock interface
- Date: Tue, 2 Oct 2012 21:23:36 +0000 (UTC)
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]