All pastes #33567 Raw Edit

Anonymous

public text v1 · immutable
#33567 ·published 2005-12-13 20:34 UTC
rendered paste body
Index: ephy-embed-single.c
===================================================================
RCS file: /cvs/gnome/epiphany/embed/ephy-embed-single.c,v
retrieving revision 1.40
diff -u -r1.40 ephy-embed-single.c
--- ephy-embed-single.c	18 Nov 2005 19:24:16 -0000	1.40
+++ ephy-embed-single.c	13 Dec 2005 20:29:45 -0000
@@ -124,6 +124,26 @@
 		      G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE);
 
 /**
+ * EphyEmbedSingle::should-load:
+ * @single:
+ * @url: The url to be checked
+ * @content_type: what the url is pointing to
+ *
+ * The ::should-load signal is emitted when an url is requested. Returning TRUE means
+ * that the url is accepted. Otherwise, the url is rejected and therefore not loaded.
+ **/
+	g_signal_new ("should-load",
+		      EPHY_TYPE_EMBED_SINGLE,
+		      G_SIGNAL_RUN_LAST,
+		      G_STRUCT_OFFSET (EphyEmbedSingleIface, should_load),
+		      g_signal_accumulator_true_handled, NULL,
+		      ephy_marshal_BOOLEAN__STRING_UINT,
+		      G_TYPE_BOOLEAN,
+		      2,
+		      G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE,
+		      G_TYPE_UINT | G_SIGNAL_TYPE_STATIC_SCOPE);
+
+/**
  * EphyEmbedSingle::add-search-engine
  * @single:
  * @url: The url of the search engine definition file
Index: ephy-embed-single.h
===================================================================
RCS file: /cvs/gnome/epiphany/embed/ephy-embed-single.h,v
retrieving revision 1.34
diff -u -r1.34 ephy-embed-single.h
--- ephy-embed-single.h	18 Nov 2005 19:24:16 -0000	1.34
+++ ephy-embed-single.h	13 Dec 2005 20:29:46 -0000
@@ -58,6 +58,10 @@
 					const char *icon_url,
 					const char *title);
 
+        gboolean (* should_load) (EphyEmbedSingle *single,
+				  const char *url,
+				  guint content_type);
+
 	/* Methods */
 
 	GtkWidget *	  (* open_window)	(EphyEmbedSingle *single,
Index: mozilla/EphyContentPolicy.cpp
===================================================================
RCS file: /cvs/gnome/epiphany/embed/mozilla/EphyContentPolicy.cpp,v
retrieving revision 1.17
diff -u -r1.17 EphyContentPolicy.cpp
--- mozilla/EphyContentPolicy.cpp	19 Nov 2005 13:21:57 -0000	1.17
+++ mozilla/EphyContentPolicy.cpp	13 Dec 2005 20:29:46 -0000
@@ -76,17 +76,28 @@
 
 	*aDecision = nsIContentPolicy::ACCEPT;
 
-	PRBool isHttp = PR_FALSE, isHttps = PR_FALSE;
-	aContentLocation->SchemeIs ("http", &isHttp);
-	aContentLocation->SchemeIs ("https", &isHttps);
-	if (isHttp || isHttps) return NS_OK;
-
 	/* We have to always allow these, else forms and scrollbars break */
 	PRBool isChrome = PR_FALSE, isResource = PR_FALSE;
 	aContentLocation->SchemeIs ("chrome", &isChrome);
 	aContentLocation->SchemeIs ("resource", &isResource);
 	if (isChrome || isResource) return NS_OK;
 
+	gboolean result = FALSE;
+	nsEmbedCString spec;
+	aContentLocation->GetSpec(spec);
+
+	g_signal_emit_by_name (mEmbedSingle, "should-load", spec.get (), aContentType, &result);
+	if (result)
+	{
+		*aDecision = nsIContentPolicy::REJECT_REQUEST;
+		return NS_OK;
+	}
+
+	PRBool isHttp = PR_FALSE, isHttps = PR_FALSE;
+	aContentLocation->SchemeIs ("http", &isHttp);
+	aContentLocation->SchemeIs ("https", &isHttps);
+	if (isHttp || isHttps) return NS_OK;
+
 	nsEmbedCString contentSpec;
 	aContentLocation->GetSpec (contentSpec);
 	if (strcmp (contentSpec.get(), "about:blank") == 0) return NS_OK;
@@ -155,7 +166,6 @@
 	{
 		*_retval = PR_FALSE;
 	}
-
 	return NS_OK;
 }
 
--------------------------------------------------------------------------------------
adblock extension
--------------------------------------------------------------------------------------
static gboolean
ephy_adblock_extension_should_load_cb (GObject *object, 
				       const char *url,
				       AdUriCheckType type,
				       EphyAdblockExtension *extension)
{
	return ad_uri_tester_test_uri (extension->priv->tester, url, type);
}

--------------------------------------------------------------------------------------
page-info extension
--------------------------------------------------------------------------------------
Index: page-info-dialog.c
===================================================================
RCS file: /cvs/gnome/epiphany-extensions/extensions/page-info/page-info-dialog.c,v
retrieving revision 1.50
diff -u -r1.50 page-info-dialog.c
--- page-info-dialog.c  30 Oct 2005 19:21:11 -0000      1.50
+++ page-info-dialog.c  13 Dec 2005 20:33:19 -0000
@@ -33,8 +33,10 @@

 #include <epiphany/ephy-embed-persist.h>
 #include <epiphany/ephy-embed-factory.h>
+#include <epiphany/ephy-embed-single.h>
 #include <epiphany/ephy-state.h>
 #include <ephy-dnd.h>
+#include <epiphany/ephy-shell.h>

 /* non-installed ephy headers */
 #include "ephy-gui.h"
@@ -48,6 +50,7 @@
 #include <gtk/gtktreeview.h>
 #include <gtk/gtktreeselection.h>
 #include <gtk/gtkcellrenderertext.h>
+#include <gtk/gtkcellrenderertoggle.h>
 #include <gtk/gtkaction.h>
 #include <gtk/gtkactiongroup.h>
 #include <gtk/gtkuimanager.h>
@@ -891,6 +894,7 @@

 enum
 {
+       COL_MEDIUM_BLOCKED,
        COL_MEDIUM_URL,
        COL_MEDIUM_TYPE,
         COL_MEDIUM_TYPE_TEXT,
@@ -902,6 +906,7 @@

 enum
 {
+       TV_COL_MEDIUM_BLOCKED,
        TV_COL_MEDIUM_URL,
         TV_COL_MEDIUM_TYPE_TEXT,
        TV_COL_MEDIUM_ALT,
@@ -1200,7 +1205,8 @@
        g_signal_connect (box, "realize",
                          G_CALLBACK (page_info_media_box_realize_cb), dialog);

-       liststore = gtk_list_store_new (7,
+       liststore = gtk_list_store_new (8,
+                                       G_TYPE_BOOLEAN,
                                        G_TYPE_STRING,
                                        G_TYPE_INT,
                                        G_TYPE_STRING,
@@ -1233,6 +1239,16 @@
                                                        media_treeview_selection_changed_cb,
                                                page, NULL);

+       renderer = gtk_cell_renderer_toggle_new ();
+       gtk_tree_view_insert_column_with_attributes (treeview,
+                                                    TV_COL_MEDIUM_BLOCKED, _("Blocked"),
+                                                    renderer,
+                                                    "active", COL_MEDIUM_BLOCKED,
+                                                    NULL);
+       column = gtk_tree_view_get_column (treeview, COL_MEDIUM_BLOCKED);
+       gtk_tree_view_column_set_reorderable (column, TRUE);
+       gtk_tree_view_column_set_sort_column_id (column, TV_COL_MEDIUM_BLOCKED);+
        renderer = gtk_cell_renderer_text_new ();
        gtk_tree_view_insert_column_with_attributes (treeview,
                                                     TV_COL_MEDIUM_URL,
@@ -1337,7 +1353,11 @@
        PageInfoDialog *dialog = ipage->dialog;
        GtkListStore *store = tpage->store;
        GtkTreeIter iter;
-       GList *media, *l;
+       GList *media, *l;
+       GObject *single;
+       gboolean result;
+
+       single = ephy_embed_shell_get_embed_single (embed_shell);

        media = dialog->priv->page_info->media;

@@ -1345,8 +1365,11 @@
        {
                EmbedPageMedium *media = (EmbedPageMedium *) l->data;

+               g_signal_emit_by_name (single, "should-load", media->url, 3U, &result);
+
                gtk_list_store_append (store, &iter);
                gtk_list_store_set (store, &iter,
+                                   COL_MEDIUM_BLOCKED, result,
                                    COL_MEDIUM_URL, media->url,
                                    COL_MEDIUM_TYPE_TEXT, mozilla_embed_type_to_string (media->type),
                                    COL_MEDIUM_ALT, media->alt,
@@ -1390,6 +1413,7 @@

 enum
 {
+       COL_LINK_BLOCKED,
        COL_LINK_URL,
        COL_LINK_TITLE,
        COL_LINK_REL
@@ -1448,7 +1472,8 @@
        treeview = GTK_TREE_VIEW (ephy_dialog_get_control
                (EPHY_DIALOG (dialog), properties[PROP_LINKS_LINK_TREEVIEW].id));

-       liststore = gtk_list_store_new (3,
+       liststore = gtk_list_store_new (4,
+                                       G_TYPE_BOOLEAN,
                                        G_TYPE_STRING,
                                        G_TYPE_STRING,
                                        G_TYPE_STRING);
@@ -1474,6 +1499,16 @@
                                 G_CALLBACK(page_info_drag_begin_cb),
                                 NULL);

+       renderer = gtk_cell_renderer_toggle_new ();
+       gtk_tree_view_insert_column_with_attributes (treeview,
+                                                    COL_LINK_BLOCKED, _("Blocked"),
+                                                    renderer,
+                                                    "active", COL_LINK_BLOCKED,+                                                    NULL);
+       column = gtk_tree_view_get_column (treeview, COL_LINK_BLOCKED);
+       gtk_tree_view_column_set_reorderable (column, TRUE);
+       gtk_tree_view_column_set_sort_column_id (column, COL_LINK_BLOCKED);
+
        renderer = gtk_cell_renderer_text_new ();
        gtk_tree_view_insert_column_with_attributes (treeview,
                                                     COL_LINK_URL,
@@ -1526,6 +1561,10 @@
        GtkListStore *store = tpage->store;
        GtkTreeIter iter;
        GList *links, *l;
+       GObject *single;
+       gboolean result;
+
+       single = ephy_embed_shell_get_embed_single (embed_shell);

        links = dialog->priv->page_info->links;

@@ -1533,8 +1572,11 @@
        {
                EmbedPageLink *link = (EmbedPageLink *) l->data;

+               g_signal_emit_by_name (single, "should-load", link->url, 1U, &result);
+
                gtk_list_store_append (store, &iter);
                gtk_list_store_set (store, &iter,
+                                   COL_LINK_BLOCKED, result,
                                    COL_LINK_URL, link->url,
                                    COL_LINK_TITLE, link->title,
                                    COL_LINK_REL, link->rel,