summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/app/generated_resources.grd23
-rw-r--r--chrome/browser/cookies_tree_model.cc25
-rw-r--r--chrome/browser/cookies_tree_model.h5
-rw-r--r--chrome/browser/gtk/collected_cookies_gtk.cc126
-rw-r--r--chrome/browser/gtk/gtk_tree.cc4
-rw-r--r--chrome/browser/gtk/gtk_tree.h21
-rw-r--r--chrome/browser/host_content_settings_map.cc2
7 files changed, 165 insertions, 41 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 8cc5e9f..039a3ae 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -6123,7 +6123,7 @@ Keep your key file in a safe place. You will need it to create new versions of y
<!-- Collected cookies window -->
<message name="IDS_COLLECTED_COOKIES_DIALOG_TITLE" desc="The title of the collect cookies dialog">
- Cookies and site data were set
+ Cookies and site data were set by page
</message>
<message name="IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_LABEL" desc="The label used to describe the cookies that were allowed">
The following cookies were set when you viewed this page:
@@ -6131,6 +6131,9 @@ Keep your key file in a safe place. You will need it to create new versions of y
<message name="IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL" desc="The label used to describe the cookies that were blocked">
The following cookies were blocked:
</message>
+ <message name="IDS_COLLECTED_COOKIES_BLOCKED_THIRD_PARTY_BLOCKING_ENABLED" desc="The label used to describe the cookies that were blocked include a note that third-party cookies were blocked without exception.">
+ The following cookies were blocked (third-party cookies are being blocked without exception):
+ </message>
<message name="IDS_COLLECTED_COOKIES_ALLOW_BUTTON" desc="A button that lets the use create a content settings exception to allow certain domains.">
Allow
</message>
@@ -6140,24 +6143,6 @@ Keep your key file in a safe place. You will need it to create new versions of y
<message name="IDS_COLLECTED_COOKIES_BLOCK_BUTTON" desc="A button that lets the use create a content settings exception to block certain domains.">
Block
</message>
- <message name="IDS_COLLECTED_COOKIES_ALLOW_RULE_CREATED" desc="A notification that is displayed when a content exception to allow cookies was created.">
- Cookies from <ph name="HOST">$1<ex>example.com</ex></ph> allowed.
- </message>
- <message name="IDS_COLLECTED_COOKIES_BLOCK_RULE_CREATED" desc="A notification that is displayed when a content exception to block cookies was created.">
- Cookies from <ph name="HOST">$1<ex>example.com</ex></ph> blocked.
- </message>
- <message name="IDS_COLLECTED_COOKIES_SESSION_RULE_CREATED" desc="A notification that is displayed when a content exception to allow cookies for session only was created.">
- Cookies from <ph name="HOST">$1<ex>example.com</ex></ph> allowed for session only.
- </message>
- <message name="IDS_COLLECTED_COOKIES_MULTIPLE_ALLOW_RULES_CREATED" desc="A notification that is displayed when multiple content exceptions to allow cookies were created.">
- Cookies from multiple sites allowed.
- </message>
- <message name="IDS_COLLECTED_COOKIES_MULTIPLE_BLOCK_RULES_CREATED" desc="A notification that is displayed when multiple content exceptions to block cookies were created.">
- Cookies from multiple sites blocked.
- </message>
- <message name="IDS_COLLECTED_COOKIES_MULTIPLE_SESSION_RULES_CREATED" desc="A notification that is displayed when multiple content exceptions to allow cookies for session only were created.">
- Cookies from multiple sites allowed for session only.
- </message>
<!-- Cookies Window -->
<message name="IDS_COOKIES_WINDOW_TITLE" desc="The title of the Cookies Window">
diff --git a/chrome/browser/cookies_tree_model.cc b/chrome/browser/cookies_tree_model.cc
index ed17c13..5f166d5 100644
--- a/chrome/browser/cookies_tree_model.cc
+++ b/chrome/browser/cookies_tree_model.cc
@@ -281,6 +281,31 @@ bool CookieTreeOriginNode::CanCreateContentException() const {
return !url_.SchemeIsFile();
}
+std::string CookieTreeOriginNode::GetCurrentContentSettingTitle(
+ HostContentSettingsMap* content_settings) const {
+ if (!CanCreateContentException())
+ return std::string();
+
+ ContentSettings settings =
+ content_settings->GetNonDefaultContentSettings(url_);
+ switch (settings.settings[CONTENT_SETTINGS_TYPE_COOKIES]) {
+ case CONTENT_SETTING_ALLOW:
+ return l10n_util::GetStringUTF8(IDS_EXCEPTIONS_ALLOW_BUTTON);
+ case CONTENT_SETTING_BLOCK:
+ return l10n_util::GetStringUTF8(IDS_EXCEPTIONS_BLOCK_BUTTON);
+ case CONTENT_SETTING_ASK:
+ return l10n_util::GetStringUTF8(IDS_EXCEPTIONS_ASK_BUTTON);
+ case CONTENT_SETTING_SESSION_ONLY:
+ return l10n_util::GetStringUTF8(IDS_EXCEPTIONS_SESSION_ONLY_BUTTON);
+ case CONTENT_SETTING_DEFAULT:
+ return std::string();
+ default:
+ NOTREACHED();
+ }
+
+ return std::string(); // not reached.
+}
+
///////////////////////////////////////////////////////////////////////////////
// CookieTreeCookiesNode, public:
diff --git a/chrome/browser/cookies_tree_model.h b/chrome/browser/cookies_tree_model.h
index faae9b5..3c6795d 100644
--- a/chrome/browser/cookies_tree_model.h
+++ b/chrome/browser/cookies_tree_model.h
@@ -168,6 +168,11 @@ class CookieTreeOriginNode : public CookieTreeNode {
// True if a content exception can be created for this origin.
bool CanCreateContentException() const;
+ // Returns a textual representation of the current content exception
+ // applying to this domain.
+ std::string GetCurrentContentSettingTitle(
+ HostContentSettingsMap* content_settings) const;
+
private:
// Pointers to the cookies, databases, local and session storage and appcache
// nodes. When we build up the tree we need to quickly get a reference to
diff --git a/chrome/browser/gtk/collected_cookies_gtk.cc b/chrome/browser/gtk/collected_cookies_gtk.cc
index 2992120..de88a63 100644
--- a/chrome/browser/gtk/collected_cookies_gtk.cc
+++ b/chrome/browser/gtk/collected_cookies_gtk.cc
@@ -6,6 +6,7 @@
#include "app/l10n_util.h"
#include "chrome/browser/cookies_tree_model.h"
+#include "chrome/browser/gtk/gtk_theme_provider.h"
#include "chrome/browser/gtk/gtk_util.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/tab_contents/tab_contents.h"
@@ -13,7 +14,68 @@
#include "grit/generated_resources.h"
namespace {
-// Height of the cookie tree view.
+class CookiesTreeAdapter : public gtk_tree::TreeAdapter {
+ public:
+ // Column ids for the tree store.
+ enum {
+ COOKIES_COL_ICON,
+ COOKIES_COL_TITLE,
+ COOKIES_COL_NODE_PTR,
+ COOKIES_COL_SETTING,
+ COOKIES_COL_STYLE,
+ COOKIES_COL_COUNT,
+ };
+
+ CookiesTreeAdapter(Delegate* delegate,
+ TreeModel* tree_model,
+ HostContentSettingsMap* host_content_settings_map)
+ : TreeAdapter(delegate, tree_model),
+ host_content_settings_map_(host_content_settings_map) {
+ g_object_unref(tree_store_);
+ tree_store_ = gtk_tree_store_new(COOKIES_COL_COUNT,
+ GDK_TYPE_PIXBUF,
+ G_TYPE_STRING,
+ G_TYPE_POINTER,
+ G_TYPE_STRING,
+ PANGO_TYPE_STYLE);
+ }
+
+ virtual ~CookiesTreeAdapter() {}
+
+ private:
+ virtual void FillRow(GtkTreeIter* iter, TreeModelNode* node) {
+ GdkPixbuf* pixbuf = NULL;
+ int icon_index = tree_model_->GetIconIndex(node);
+ if (icon_index >= 0 && icon_index < static_cast<int>(pixbufs_.size()))
+ pixbuf = pixbufs_[icon_index];
+ else
+ pixbuf = GtkThemeProvider::GetFolderIcon(true);
+ std::string setting;
+ CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node);
+ if (cookie_node->GetDetailedInfo().node_type ==
+ CookieTreeNode::DetailedInfo::TYPE_ORIGIN) {
+ CookieTreeOriginNode* origin_node = static_cast<CookieTreeOriginNode*>(
+ cookie_node);
+ setting = origin_node->GetCurrentContentSettingTitle(
+ host_content_settings_map_);
+ }
+ PangoStyle style = PANGO_STYLE_ITALIC;
+ gtk_tree_store_set(tree_store_, iter,
+ COOKIES_COL_ICON, pixbuf,
+ COOKIES_COL_TITLE, WideToUTF8(node->GetTitle()).c_str(),
+ COOKIES_COL_NODE_PTR, node,
+ COOKIES_COL_SETTING, setting.c_str(),
+ COOKIES_COL_STYLE, style,
+ -1);
+ }
+
+ HostContentSettingsMap* host_content_settings_map_;
+
+ DISALLOW_COPY_AND_ASSIGN(CookiesTreeAdapter);
+};
+
+// Widht and height of the cookie tree view.
+const int kTreeViewWidth = 450;
const int kTreeViewHeight = 150;
} // namespace
@@ -29,6 +91,9 @@ CollectedCookiesGtk::CollectedCookiesGtk(GtkWindow* parent,
}
void CollectedCookiesGtk::Init() {
+ HostContentSettingsMap* host_content_settings_map =
+ tab_contents_->profile()->GetHostContentSettingsMap();
+
dialog_ = gtk_vbox_new(FALSE, gtk_util::kContentAreaSpacing);
gtk_box_set_spacing(GTK_BOX(dialog_), gtk_util::kContentAreaSpacing);
@@ -60,10 +125,12 @@ void CollectedCookiesGtk::Init() {
allowed_cookies_tree_model_.reset(
content_settings->GetAllowedCookiesTreeModel());
allowed_cookies_tree_adapter_.reset(
- new gtk_tree::TreeAdapter(this, allowed_cookies_tree_model_.get()));
+ new CookiesTreeAdapter(this,
+ allowed_cookies_tree_model_.get(),
+ host_content_settings_map));
allowed_tree_ = gtk_tree_view_new_with_model(
GTK_TREE_MODEL(allowed_cookies_tree_adapter_->tree_store()));
- gtk_widget_set_size_request(allowed_tree_, -1, kTreeViewHeight);
+ gtk_widget_set_size_request(allowed_tree_, kTreeViewWidth, kTreeViewHeight);
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(allowed_tree_), FALSE);
gtk_tree_view_set_enable_tree_lines(GTK_TREE_VIEW(allowed_tree_), TRUE);
gtk_container_add(GTK_CONTAINER(scroll_window), allowed_tree_);
@@ -72,15 +139,24 @@ void CollectedCookiesGtk::Init() {
GtkCellRenderer* pixbuf_renderer = gtk_cell_renderer_pixbuf_new();
gtk_tree_view_column_pack_start(title_column, pixbuf_renderer, FALSE);
gtk_tree_view_column_add_attribute(title_column, pixbuf_renderer, "pixbuf",
- gtk_tree::TreeAdapter::COL_ICON);
+ CookiesTreeAdapter::COOKIES_COL_ICON);
GtkCellRenderer* title_renderer = gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start(title_column, title_renderer, TRUE);
gtk_tree_view_column_add_attribute(title_column, title_renderer, "text",
- gtk_tree::TreeAdapter::COL_TITLE);
+ CookiesTreeAdapter::COOKIES_COL_TITLE);
gtk_tree_view_column_set_title(
title_column, l10n_util::GetStringUTF8(
IDS_COOKIES_DOMAIN_COLUMN_HEADER).c_str());
+ gtk_tree_view_column_set_expand(title_column, TRUE);
gtk_tree_view_append_column(GTK_TREE_VIEW(allowed_tree_), title_column);
+ GtkTreeViewColumn* setting_column = gtk_tree_view_column_new_with_attributes(
+ l10n_util::GetStringUTF8(IDS_EXCEPTIONS_ACTION_HEADER).c_str(),
+ gtk_cell_renderer_text_new(),
+ "text", CookiesTreeAdapter::COOKIES_COL_SETTING,
+ "style", CookiesTreeAdapter::COOKIES_COL_STYLE,
+ NULL);
+ gtk_tree_view_column_set_alignment(setting_column, 1);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(allowed_tree_), setting_column);
g_signal_connect(allowed_tree_, "row-expanded",
G_CALLBACK(OnTreeViewRowExpandedThunk), this);
allowed_selection_ =
@@ -99,15 +175,27 @@ void CollectedCookiesGtk::Init() {
G_CALLBACK(OnBlockAllowedButtonClickedThunk), this);
gtk_container_add(GTK_CONTAINER(button_box), block_allowed_cookie_button_);
+ GtkWidget* separator = gtk_hseparator_new();
+ gtk_box_pack_start(GTK_BOX(dialog_), separator, TRUE, TRUE, 0);
+
// Blocked Cookie list.
cookie_list_vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing);
gtk_box_pack_start(GTK_BOX(dialog_), cookie_list_vbox, TRUE, TRUE, 0);
- label = gtk_label_new(
- l10n_util::GetStringUTF8(IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL).
- c_str());
+ if (host_content_settings_map->BlockThirdPartyCookies()) {
+ label = gtk_label_new(
+ l10n_util::GetStringUTF8(
+ IDS_COLLECTED_COOKIES_BLOCKED_THIRD_PARTY_BLOCKING_ENABLED).
+ c_str());
+ } else {
+ label = gtk_label_new(
+ l10n_util::GetStringUTF8(IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL).
+ c_str());
+ }
+ gtk_widget_set_size_request(label, kTreeViewWidth, -1);
+ gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
- gtk_box_pack_start(GTK_BOX(cookie_list_vbox), label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(cookie_list_vbox), label, TRUE, TRUE, 0);
scroll_window = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_window),
@@ -120,10 +208,12 @@ void CollectedCookiesGtk::Init() {
blocked_cookies_tree_model_.reset(
content_settings->GetBlockedCookiesTreeModel());
blocked_cookies_tree_adapter_.reset(
- new gtk_tree::TreeAdapter(this, blocked_cookies_tree_model_.get()));
+ new CookiesTreeAdapter(this,
+ blocked_cookies_tree_model_.get(),
+ host_content_settings_map));
blocked_tree_ = gtk_tree_view_new_with_model(
GTK_TREE_MODEL(blocked_cookies_tree_adapter_->tree_store()));
- gtk_widget_set_size_request(blocked_tree_, -1, kTreeViewHeight);
+ gtk_widget_set_size_request(blocked_tree_, kTreeViewWidth, kTreeViewHeight);
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(blocked_tree_), FALSE);
gtk_tree_view_set_enable_tree_lines(GTK_TREE_VIEW(blocked_tree_), TRUE);
gtk_container_add(GTK_CONTAINER(scroll_window), blocked_tree_);
@@ -132,15 +222,24 @@ void CollectedCookiesGtk::Init() {
pixbuf_renderer = gtk_cell_renderer_pixbuf_new();
gtk_tree_view_column_pack_start(title_column, pixbuf_renderer, FALSE);
gtk_tree_view_column_add_attribute(title_column, pixbuf_renderer, "pixbuf",
- gtk_tree::TreeAdapter::COL_ICON);
+ CookiesTreeAdapter::COL_ICON);
title_renderer = gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start(title_column, title_renderer, TRUE);
gtk_tree_view_column_add_attribute(title_column, title_renderer, "text",
- gtk_tree::TreeAdapter::COL_TITLE);
+ CookiesTreeAdapter::COL_TITLE);
gtk_tree_view_column_set_title(
title_column, l10n_util::GetStringUTF8(
IDS_COOKIES_DOMAIN_COLUMN_HEADER).c_str());
+ gtk_tree_view_column_set_expand(title_column, TRUE);
gtk_tree_view_append_column(GTK_TREE_VIEW(blocked_tree_), title_column);
+ setting_column = gtk_tree_view_column_new_with_attributes(
+ l10n_util::GetStringUTF8(IDS_EXCEPTIONS_ACTION_HEADER).c_str(),
+ gtk_cell_renderer_text_new(),
+ "text", CookiesTreeAdapter::COOKIES_COL_SETTING,
+ "style", CookiesTreeAdapter::COOKIES_COL_STYLE,
+ NULL);
+ gtk_tree_view_column_set_alignment(setting_column, 1);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(blocked_tree_), setting_column);
g_signal_connect(blocked_tree_, "row-expanded",
G_CALLBACK(OnTreeViewRowExpandedThunk), this);
blocked_selection_ =
@@ -268,6 +367,7 @@ void CollectedCookiesGtk::AddExceptions(GtkTreeSelection* selection,
if (node->CanCreateContentException()) {
node->CreateContentException(
tab_contents_->profile()->GetHostContentSettingsMap(), setting);
+ adapter->TreeNodeChanged(adapter->tree_model(), adapter->GetNode(&iter));
}
}
g_list_foreach(paths, reinterpret_cast<GFunc>(gtk_tree_path_free), NULL);
diff --git a/chrome/browser/gtk/gtk_tree.cc b/chrome/browser/gtk/gtk_tree.cc
index eeb4511..303df11 100644
--- a/chrome/browser/gtk/gtk_tree.cc
+++ b/chrome/browser/gtk/gtk_tree.cc
@@ -158,8 +158,8 @@ void TableAdapter::OnItemsRemoved(int start, int length) {
// TreeAdapter
TreeAdapter::TreeAdapter(Delegate* delegate, TreeModel* tree_model)
- : delegate_(delegate),
- tree_model_(tree_model) {
+ : tree_model_(tree_model),
+ delegate_(delegate) {
tree_store_ = gtk_tree_store_new(COL_COUNT,
GDK_TYPE_PIXBUF,
G_TYPE_STRING,
diff --git a/chrome/browser/gtk/gtk_tree.h b/chrome/browser/gtk/gtk_tree.h
index a302bba..550a992 100644
--- a/chrome/browser/gtk/gtk_tree.h
+++ b/chrome/browser/gtk/gtk_tree.h
@@ -66,8 +66,8 @@ class TableAdapter : public TableModelObserver {
};
// |table_model| may be NULL.
- explicit TableAdapter(Delegate* delegate, GtkListStore* list_store,
- TableModel* table_model);
+ TableAdapter(Delegate* delegate, GtkListStore* list_store,
+ TableModel* table_model);
virtual ~TableAdapter() {}
// Replace the TableModel with a different one. If the list store currenty
@@ -127,6 +127,9 @@ class TreeAdapter : public TreeModelObserver {
// Return the tree store.
GtkTreeStore* tree_store() { return tree_store_; }
+ // Return the tree model.
+ TreeModel* tree_model() { return tree_model_; }
+
// Get the TreeModelNode corresponding to iter in the tree store.
TreeModelNode* GetNode(GtkTreeIter* iter);
@@ -142,10 +145,15 @@ class TreeAdapter : public TreeModelObserver {
virtual void TreeNodeChanged(TreeModel* model, TreeModelNode* node);
// End TreeModelObserver implementation.
- private:
+ protected:
// Fill the tree store values for a given node.
- void FillRow(GtkTreeIter* iter, TreeModelNode* node);
+ virtual void FillRow(GtkTreeIter* iter, TreeModelNode* node);
+
+ GtkTreeStore* tree_store_;
+ TreeModel* tree_model_;
+ std::vector<GdkPixbuf*> pixbufs_;
+ private:
// Fill the tree store for a row and all its descendants.
void Fill(GtkTreeIter* parent_iter, TreeModelNode* parent_node);
@@ -157,9 +165,8 @@ class TreeAdapter : public TreeModelObserver {
bool GetTreeIter(TreeModelNode* node, GtkTreeIter* iter);
Delegate* delegate_;
- GtkTreeStore* tree_store_;
- TreeModel* tree_model_;
- std::vector<GdkPixbuf*> pixbufs_;
+
+ DISALLOW_COPY_AND_ASSIGN(TreeAdapter);
};
} // namespace gtk_tree
diff --git a/chrome/browser/host_content_settings_map.cc b/chrome/browser/host_content_settings_map.cc
index dabdc96..cf7d98b 100644
--- a/chrome/browser/host_content_settings_map.cc
+++ b/chrome/browser/host_content_settings_map.cc
@@ -340,6 +340,8 @@ ContentSettings HostContentSettingsMap::GetContentSettings(
const GURL& url) const {
ContentSettings output = GetNonDefaultContentSettings(url);
+ AutoLock auto_lock(lock_);
+
// Make the remaining defaults explicit.
for (int j = 0; j < CONTENT_SETTINGS_NUM_TYPES; ++j)
if (output.settings[j] == CONTENT_SETTING_DEFAULT ||