Index: chrome/browser/views/collected_cookies_win.cc |
diff --git a/chrome/browser/views/collected_cookies_win.cc b/chrome/browser/views/collected_cookies_win.cc |
index b5e5c3ca1e0917a0b6612b6c531913812a31d1f8..1a7f4055e56d59e5430fef27f81110be09cb7407 100644 |
--- a/chrome/browser/views/collected_cookies_win.cc |
+++ b/chrome/browser/views/collected_cookies_win.cc |
@@ -6,12 +6,13 @@ |
#include "app/l10n_util.h" |
#include "chrome/browser/cookies_tree_model.h" |
+#include "chrome/browser/profile.h" |
#include "chrome/browser/tab_contents/tab_contents.h" |
#include "chrome/common/notification_service.h" |
#include "grit/generated_resources.h" |
#include "grit/locale_settings.h" |
#include "views/controls/label.h" |
-#include "views/controls/tree/tree_view.h" |
+#include "views/controls/button/native_button.h" |
#include "views/standard_layout.h" |
#include "views/window/window.h" |
@@ -32,7 +33,14 @@ void ShowCollectedCookiesDialog(gfx::NativeWindow parent_window, |
CollectedCookiesWin::CollectedCookiesWin(gfx::NativeWindow parent_window, |
TabContents* tab_contents) |
- : tab_contents_(tab_contents) { |
+ : tab_contents_(tab_contents), |
+ allowed_label_(NULL), |
+ blocked_label_(NULL), |
+ allowed_cookies_tree_(NULL), |
+ blocked_cookies_tree_(NULL), |
+ block_allowed_button_(NULL), |
+ allow_blocked_button_(NULL), |
+ for_session_blocked_button_(NULL) { |
TabSpecificContentSettings* content_settings = |
tab_contents->GetTabSpecificContentSettings(); |
registrar_.Add(this, NotificationType::COLLECTED_COOKIES_SHOWN, |
@@ -59,6 +67,7 @@ void CollectedCookiesWin::Init() { |
content_settings->GetAllowedCookiesTreeModel()); |
allowed_cookies_tree_ = new views::TreeView(); |
allowed_cookies_tree_->SetModel(allowed_cookies_tree_model_.get()); |
+ allowed_cookies_tree_->SetController(this); |
allowed_cookies_tree_->SetRootShown(false); |
allowed_cookies_tree_->SetEditable(false); |
allowed_cookies_tree_->set_lines_at_root(true); |
@@ -71,6 +80,7 @@ void CollectedCookiesWin::Init() { |
content_settings->GetBlockedCookiesTreeModel()); |
blocked_cookies_tree_ = new views::TreeView(); |
blocked_cookies_tree_->SetModel(blocked_cookies_tree_model_.get()); |
+ blocked_cookies_tree_->SetController(this); |
blocked_cookies_tree_->SetRootShown(false); |
blocked_cookies_tree_->SetEditable(false); |
blocked_cookies_tree_->set_lines_at_root(true); |
@@ -86,6 +96,14 @@ void CollectedCookiesWin::Init() { |
column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1, |
GridLayout::USE_PREF, 0, 0); |
+ const int three_columns_layout_id = 1; |
+ column_set = layout->AddColumnSet(three_columns_layout_id); |
+ column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
+ GridLayout::USE_PREF, 0, 0); |
+ column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing); |
+ column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
+ GridLayout::USE_PREF, 0, 0); |
+ |
layout->StartRow(0, single_column_layout_id); |
layout->AddView(allowed_label_); |
@@ -93,6 +111,13 @@ void CollectedCookiesWin::Init() { |
layout->StartRow(1, single_column_layout_id); |
layout->AddView( |
allowed_cookies_tree_, 1, 1, GridLayout::FILL, GridLayout::FILL); |
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); |
+ |
+ layout->StartRow(0, single_column_layout_id); |
+ block_allowed_button_ = new views::NativeButton( |
+ this, l10n_util::GetString(IDS_COLLECTED_COOKIES_BLOCK_BUTTON)); |
+ layout->AddView( |
+ block_allowed_button_, 1, 1, GridLayout::LEADING, GridLayout::CENTER); |
layout->AddPaddingRow(0, kUnrelatedControlVerticalSpacing); |
layout->StartRow(0, single_column_layout_id); |
@@ -102,10 +127,21 @@ void CollectedCookiesWin::Init() { |
layout->StartRow(1, single_column_layout_id); |
layout->AddView( |
blocked_cookies_tree_, 1, 1, GridLayout::FILL, GridLayout::FILL); |
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); |
+ |
+ layout->StartRow(0, three_columns_layout_id); |
+ allow_blocked_button_ = new views::NativeButton( |
+ this, l10n_util::GetString(IDS_COLLECTED_COOKIES_ALLOW_BUTTON)); |
+ layout->AddView(allow_blocked_button_); |
+ for_session_blocked_button_ = new views::NativeButton( |
+ this, l10n_util::GetString(IDS_COLLECTED_COOKIES_SESSION_ONLY_BUTTON)); |
+ layout->AddView(for_session_blocked_button_); |
+ |
+ EnableControls(); |
} |
/////////////////////////////////////////////////////////////////////////////// |
-// views::DialogDelegate implementation. |
+// ConstrainedDialogDelegate implementation. |
std::wstring CollectedCookiesWin::GetWindowTitle() const { |
return l10n_util::GetString(IDS_COLLECTED_COOKIES_DIALOG_TITLE); |
@@ -128,14 +164,32 @@ bool CollectedCookiesWin::Cancel() { |
return true; |
} |
-/////////////////////////////////////////////////////////////////////////////// |
-// views::WindowDelegate implementation. |
- |
views::View* CollectedCookiesWin::GetContentsView() { |
return this; |
} |
/////////////////////////////////////////////////////////////////////////////// |
+// views::ButtonListener implementation. |
+ |
+void CollectedCookiesWin::ButtonPressed(views::Button* sender, |
+ const views::Event& event) { |
+ if (sender == block_allowed_button_) |
+ AddContentException(allowed_cookies_tree_, CONTENT_SETTING_BLOCK); |
+ else if (sender == allow_blocked_button_) |
+ AddContentException(blocked_cookies_tree_, CONTENT_SETTING_ALLOW); |
+ else if (sender == for_session_blocked_button_) |
+ AddContentException(blocked_cookies_tree_, CONTENT_SETTING_SESSION_ONLY); |
+} |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
+// views::View implementation. |
+ |
+void CollectedCookiesWin::OnTreeViewSelectionChanged( |
+ views::TreeView* tree_view) { |
+ EnableControls(); |
+} |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
// views::View implementation. |
gfx::Size CollectedCookiesWin::GetPreferredSize() { |
@@ -145,6 +199,44 @@ gfx::Size CollectedCookiesWin::GetPreferredSize() { |
} |
/////////////////////////////////////////////////////////////////////////////// |
+// CollectedCookiesWin, private methods. |
+ |
+void CollectedCookiesWin::EnableControls() { |
+ bool enable_allowed_buttons = false; |
+ TreeModelNode* node = allowed_cookies_tree_->GetSelectedNode(); |
+ if (node) { |
+ CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node); |
+ if (cookie_node->GetDetailedInfo().node_type == |
+ CookieTreeNode::DetailedInfo::TYPE_ORIGIN) { |
+ enable_allowed_buttons = static_cast<CookieTreeOriginNode*>( |
+ cookie_node)->CanCreateContentException(); |
+ } |
+ } |
+ block_allowed_button_->SetEnabled(enable_allowed_buttons); |
+ |
+ bool enable_blocked_buttons = false; |
+ node = blocked_cookies_tree_->GetSelectedNode(); |
+ if (node) { |
+ CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node); |
+ if (cookie_node->GetDetailedInfo().node_type == |
+ CookieTreeNode::DetailedInfo::TYPE_ORIGIN) { |
+ enable_blocked_buttons = static_cast<CookieTreeOriginNode*>( |
+ cookie_node)->CanCreateContentException(); |
+ } |
+ } |
+ allow_blocked_button_->SetEnabled(enable_blocked_buttons); |
+ for_session_blocked_button_->SetEnabled(enable_blocked_buttons); |
+} |
+ |
+void CollectedCookiesWin::AddContentException(views::TreeView* tree_view, |
+ ContentSetting setting) { |
+ CookieTreeOriginNode* origin_node = |
+ static_cast<CookieTreeOriginNode*>(tree_view->GetSelectedNode()); |
+ origin_node->CreateContentException( |
+ tab_contents_->profile()->GetHostContentSettingsMap(), setting); |
+} |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
// NotificationObserver implementation. |
void CollectedCookiesWin::Observe(NotificationType type, |