OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/views/collected_cookies_win.h" | 5 #include "chrome/browser/views/collected_cookies_win.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "chrome/browser/cookies_tree_model.h" | 8 #include "chrome/browser/cookies_tree_model.h" |
| 9 #include "chrome/browser/profile.h" |
9 #include "chrome/browser/tab_contents/tab_contents.h" | 10 #include "chrome/browser/tab_contents/tab_contents.h" |
10 #include "chrome/common/notification_service.h" | 11 #include "chrome/common/notification_service.h" |
11 #include "grit/generated_resources.h" | 12 #include "grit/generated_resources.h" |
12 #include "grit/locale_settings.h" | 13 #include "grit/locale_settings.h" |
13 #include "views/controls/label.h" | 14 #include "views/controls/label.h" |
14 #include "views/controls/tree/tree_view.h" | 15 #include "views/controls/button/native_button.h" |
15 #include "views/standard_layout.h" | 16 #include "views/standard_layout.h" |
16 #include "views/window/window.h" | 17 #include "views/window/window.h" |
17 | 18 |
18 namespace browser { | 19 namespace browser { |
19 | 20 |
20 // Declared in browser_dialogs.h so others don't have to depend on our header. | 21 // Declared in browser_dialogs.h so others don't have to depend on our header. |
21 void ShowCollectedCookiesDialog(gfx::NativeWindow parent_window, | 22 void ShowCollectedCookiesDialog(gfx::NativeWindow parent_window, |
22 TabContents* tab_contents) { | 23 TabContents* tab_contents) { |
23 // Deletes itself on close. | 24 // Deletes itself on close. |
24 new CollectedCookiesWin(parent_window, tab_contents); | 25 new CollectedCookiesWin(parent_window, tab_contents); |
25 } | 26 } |
26 | 27 |
27 } // namespace browser | 28 } // namespace browser |
28 | 29 |
29 | 30 |
30 /////////////////////////////////////////////////////////////////////////////// | 31 /////////////////////////////////////////////////////////////////////////////// |
31 // CollectedCookiesWin, constructor and destructor: | 32 // CollectedCookiesWin, constructor and destructor: |
32 | 33 |
33 CollectedCookiesWin::CollectedCookiesWin(gfx::NativeWindow parent_window, | 34 CollectedCookiesWin::CollectedCookiesWin(gfx::NativeWindow parent_window, |
34 TabContents* tab_contents) | 35 TabContents* tab_contents) |
35 : tab_contents_(tab_contents) { | 36 : tab_contents_(tab_contents), |
| 37 allowed_label_(NULL), |
| 38 blocked_label_(NULL), |
| 39 allowed_cookies_tree_(NULL), |
| 40 blocked_cookies_tree_(NULL), |
| 41 block_allowed_button_(NULL), |
| 42 allow_blocked_button_(NULL), |
| 43 for_session_blocked_button_(NULL) { |
36 TabSpecificContentSettings* content_settings = | 44 TabSpecificContentSettings* content_settings = |
37 tab_contents->GetTabSpecificContentSettings(); | 45 tab_contents->GetTabSpecificContentSettings(); |
38 registrar_.Add(this, NotificationType::COLLECTED_COOKIES_SHOWN, | 46 registrar_.Add(this, NotificationType::COLLECTED_COOKIES_SHOWN, |
39 Source<TabSpecificContentSettings>(content_settings)); | 47 Source<TabSpecificContentSettings>(content_settings)); |
40 | 48 |
41 Init(); | 49 Init(); |
42 | 50 |
43 window_ = tab_contents_->CreateConstrainedDialog(this); | 51 window_ = tab_contents_->CreateConstrainedDialog(this); |
44 } | 52 } |
45 | 53 |
46 CollectedCookiesWin::~CollectedCookiesWin() { | 54 CollectedCookiesWin::~CollectedCookiesWin() { |
47 allowed_cookies_tree_->SetModel(NULL); | 55 allowed_cookies_tree_->SetModel(NULL); |
48 blocked_cookies_tree_->SetModel(NULL); | 56 blocked_cookies_tree_->SetModel(NULL); |
49 } | 57 } |
50 | 58 |
51 void CollectedCookiesWin::Init() { | 59 void CollectedCookiesWin::Init() { |
52 TabSpecificContentSettings* content_settings = | 60 TabSpecificContentSettings* content_settings = |
53 tab_contents_->GetTabSpecificContentSettings(); | 61 tab_contents_->GetTabSpecificContentSettings(); |
54 | 62 |
55 // Allowed Cookie list. | 63 // Allowed Cookie list. |
56 allowed_label_ = new views::Label( | 64 allowed_label_ = new views::Label( |
57 l10n_util::GetString(IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_LABEL)); | 65 l10n_util::GetString(IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_LABEL)); |
58 allowed_cookies_tree_model_.reset( | 66 allowed_cookies_tree_model_.reset( |
59 content_settings->GetAllowedCookiesTreeModel()); | 67 content_settings->GetAllowedCookiesTreeModel()); |
60 allowed_cookies_tree_ = new views::TreeView(); | 68 allowed_cookies_tree_ = new views::TreeView(); |
61 allowed_cookies_tree_->SetModel(allowed_cookies_tree_model_.get()); | 69 allowed_cookies_tree_->SetModel(allowed_cookies_tree_model_.get()); |
| 70 allowed_cookies_tree_->SetController(this); |
62 allowed_cookies_tree_->SetRootShown(false); | 71 allowed_cookies_tree_->SetRootShown(false); |
63 allowed_cookies_tree_->SetEditable(false); | 72 allowed_cookies_tree_->SetEditable(false); |
64 allowed_cookies_tree_->set_lines_at_root(true); | 73 allowed_cookies_tree_->set_lines_at_root(true); |
65 allowed_cookies_tree_->set_auto_expand_children(true); | 74 allowed_cookies_tree_->set_auto_expand_children(true); |
66 | 75 |
67 // Blocked Cookie list. | 76 // Blocked Cookie list. |
68 blocked_label_ = new views::Label( | 77 blocked_label_ = new views::Label( |
69 l10n_util::GetString(IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL)); | 78 l10n_util::GetString(IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL)); |
70 blocked_cookies_tree_model_.reset( | 79 blocked_cookies_tree_model_.reset( |
71 content_settings->GetBlockedCookiesTreeModel()); | 80 content_settings->GetBlockedCookiesTreeModel()); |
72 blocked_cookies_tree_ = new views::TreeView(); | 81 blocked_cookies_tree_ = new views::TreeView(); |
73 blocked_cookies_tree_->SetModel(blocked_cookies_tree_model_.get()); | 82 blocked_cookies_tree_->SetModel(blocked_cookies_tree_model_.get()); |
| 83 blocked_cookies_tree_->SetController(this); |
74 blocked_cookies_tree_->SetRootShown(false); | 84 blocked_cookies_tree_->SetRootShown(false); |
75 blocked_cookies_tree_->SetEditable(false); | 85 blocked_cookies_tree_->SetEditable(false); |
76 blocked_cookies_tree_->set_lines_at_root(true); | 86 blocked_cookies_tree_->set_lines_at_root(true); |
77 blocked_cookies_tree_->set_auto_expand_children(true); | 87 blocked_cookies_tree_->set_auto_expand_children(true); |
78 | 88 |
79 using views::GridLayout; | 89 using views::GridLayout; |
80 | 90 |
81 GridLayout* layout = CreatePanelGridLayout(this); | 91 GridLayout* layout = CreatePanelGridLayout(this); |
82 SetLayoutManager(layout); | 92 SetLayoutManager(layout); |
83 | 93 |
84 const int single_column_layout_id = 0; | 94 const int single_column_layout_id = 0; |
85 views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id); | 95 views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id); |
86 column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1, | 96 column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1, |
87 GridLayout::USE_PREF, 0, 0); | 97 GridLayout::USE_PREF, 0, 0); |
88 | 98 |
| 99 const int three_columns_layout_id = 1; |
| 100 column_set = layout->AddColumnSet(three_columns_layout_id); |
| 101 column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 102 GridLayout::USE_PREF, 0, 0); |
| 103 column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing); |
| 104 column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 105 GridLayout::USE_PREF, 0, 0); |
| 106 |
89 layout->StartRow(0, single_column_layout_id); | 107 layout->StartRow(0, single_column_layout_id); |
90 layout->AddView(allowed_label_); | 108 layout->AddView(allowed_label_); |
91 | 109 |
92 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); | 110 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); |
93 layout->StartRow(1, single_column_layout_id); | 111 layout->StartRow(1, single_column_layout_id); |
94 layout->AddView( | 112 layout->AddView( |
95 allowed_cookies_tree_, 1, 1, GridLayout::FILL, GridLayout::FILL); | 113 allowed_cookies_tree_, 1, 1, GridLayout::FILL, GridLayout::FILL); |
| 114 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); |
| 115 |
| 116 layout->StartRow(0, single_column_layout_id); |
| 117 block_allowed_button_ = new views::NativeButton( |
| 118 this, l10n_util::GetString(IDS_COLLECTED_COOKIES_BLOCK_BUTTON)); |
| 119 layout->AddView( |
| 120 block_allowed_button_, 1, 1, GridLayout::LEADING, GridLayout::CENTER); |
96 layout->AddPaddingRow(0, kUnrelatedControlVerticalSpacing); | 121 layout->AddPaddingRow(0, kUnrelatedControlVerticalSpacing); |
97 | 122 |
98 layout->StartRow(0, single_column_layout_id); | 123 layout->StartRow(0, single_column_layout_id); |
99 layout->AddView(blocked_label_); | 124 layout->AddView(blocked_label_); |
100 | 125 |
101 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); | 126 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); |
102 layout->StartRow(1, single_column_layout_id); | 127 layout->StartRow(1, single_column_layout_id); |
103 layout->AddView( | 128 layout->AddView( |
104 blocked_cookies_tree_, 1, 1, GridLayout::FILL, GridLayout::FILL); | 129 blocked_cookies_tree_, 1, 1, GridLayout::FILL, GridLayout::FILL); |
| 130 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); |
| 131 |
| 132 layout->StartRow(0, three_columns_layout_id); |
| 133 allow_blocked_button_ = new views::NativeButton( |
| 134 this, l10n_util::GetString(IDS_COLLECTED_COOKIES_ALLOW_BUTTON)); |
| 135 layout->AddView(allow_blocked_button_); |
| 136 for_session_blocked_button_ = new views::NativeButton( |
| 137 this, l10n_util::GetString(IDS_COLLECTED_COOKIES_SESSION_ONLY_BUTTON)); |
| 138 layout->AddView(for_session_blocked_button_); |
| 139 |
| 140 EnableControls(); |
105 } | 141 } |
106 | 142 |
107 /////////////////////////////////////////////////////////////////////////////// | 143 /////////////////////////////////////////////////////////////////////////////// |
108 // views::DialogDelegate implementation. | 144 // ConstrainedDialogDelegate implementation. |
109 | 145 |
110 std::wstring CollectedCookiesWin::GetWindowTitle() const { | 146 std::wstring CollectedCookiesWin::GetWindowTitle() const { |
111 return l10n_util::GetString(IDS_COLLECTED_COOKIES_DIALOG_TITLE); | 147 return l10n_util::GetString(IDS_COLLECTED_COOKIES_DIALOG_TITLE); |
112 } | 148 } |
113 | 149 |
114 int CollectedCookiesWin::GetDialogButtons() const { | 150 int CollectedCookiesWin::GetDialogButtons() const { |
115 return MessageBoxFlags::DIALOGBUTTON_CANCEL; | 151 return MessageBoxFlags::DIALOGBUTTON_CANCEL; |
116 } | 152 } |
117 | 153 |
118 std::wstring CollectedCookiesWin::GetDialogButtonLabel( | 154 std::wstring CollectedCookiesWin::GetDialogButtonLabel( |
119 MessageBoxFlags::DialogButton button) const { | 155 MessageBoxFlags::DialogButton button) const { |
120 return l10n_util::GetString(IDS_CLOSE); | 156 return l10n_util::GetString(IDS_CLOSE); |
121 } | 157 } |
122 | 158 |
123 void CollectedCookiesWin::DeleteDelegate() { | 159 void CollectedCookiesWin::DeleteDelegate() { |
124 delete this; | 160 delete this; |
125 } | 161 } |
126 | 162 |
127 bool CollectedCookiesWin::Cancel() { | 163 bool CollectedCookiesWin::Cancel() { |
128 return true; | 164 return true; |
129 } | 165 } |
130 | 166 |
131 /////////////////////////////////////////////////////////////////////////////// | |
132 // views::WindowDelegate implementation. | |
133 | |
134 views::View* CollectedCookiesWin::GetContentsView() { | 167 views::View* CollectedCookiesWin::GetContentsView() { |
135 return this; | 168 return this; |
136 } | 169 } |
137 | 170 |
138 /////////////////////////////////////////////////////////////////////////////// | 171 /////////////////////////////////////////////////////////////////////////////// |
| 172 // views::ButtonListener implementation. |
| 173 |
| 174 void CollectedCookiesWin::ButtonPressed(views::Button* sender, |
| 175 const views::Event& event) { |
| 176 if (sender == block_allowed_button_) |
| 177 AddContentException(allowed_cookies_tree_, CONTENT_SETTING_BLOCK); |
| 178 else if (sender == allow_blocked_button_) |
| 179 AddContentException(blocked_cookies_tree_, CONTENT_SETTING_ALLOW); |
| 180 else if (sender == for_session_blocked_button_) |
| 181 AddContentException(blocked_cookies_tree_, CONTENT_SETTING_SESSION_ONLY); |
| 182 } |
| 183 |
| 184 /////////////////////////////////////////////////////////////////////////////// |
| 185 // views::View implementation. |
| 186 |
| 187 void CollectedCookiesWin::OnTreeViewSelectionChanged( |
| 188 views::TreeView* tree_view) { |
| 189 EnableControls(); |
| 190 } |
| 191 |
| 192 /////////////////////////////////////////////////////////////////////////////// |
139 // views::View implementation. | 193 // views::View implementation. |
140 | 194 |
141 gfx::Size CollectedCookiesWin::GetPreferredSize() { | 195 gfx::Size CollectedCookiesWin::GetPreferredSize() { |
142 return gfx::Size(views::Window::GetLocalizedContentsSize( | 196 return gfx::Size(views::Window::GetLocalizedContentsSize( |
143 IDS_COOKIES_DIALOG_WIDTH_CHARS, | 197 IDS_COOKIES_DIALOG_WIDTH_CHARS, |
144 IDS_COOKIES_DIALOG_HEIGHT_LINES)); | 198 IDS_COOKIES_DIALOG_HEIGHT_LINES)); |
145 } | 199 } |
146 | 200 |
147 /////////////////////////////////////////////////////////////////////////////// | 201 /////////////////////////////////////////////////////////////////////////////// |
| 202 // CollectedCookiesWin, private methods. |
| 203 |
| 204 void CollectedCookiesWin::EnableControls() { |
| 205 bool enable_allowed_buttons = false; |
| 206 TreeModelNode* node = allowed_cookies_tree_->GetSelectedNode(); |
| 207 if (node) { |
| 208 CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node); |
| 209 if (cookie_node->GetDetailedInfo().node_type == |
| 210 CookieTreeNode::DetailedInfo::TYPE_ORIGIN) { |
| 211 enable_allowed_buttons = static_cast<CookieTreeOriginNode*>( |
| 212 cookie_node)->CanCreateContentException(); |
| 213 } |
| 214 } |
| 215 block_allowed_button_->SetEnabled(enable_allowed_buttons); |
| 216 |
| 217 bool enable_blocked_buttons = false; |
| 218 node = blocked_cookies_tree_->GetSelectedNode(); |
| 219 if (node) { |
| 220 CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node); |
| 221 if (cookie_node->GetDetailedInfo().node_type == |
| 222 CookieTreeNode::DetailedInfo::TYPE_ORIGIN) { |
| 223 enable_blocked_buttons = static_cast<CookieTreeOriginNode*>( |
| 224 cookie_node)->CanCreateContentException(); |
| 225 } |
| 226 } |
| 227 allow_blocked_button_->SetEnabled(enable_blocked_buttons); |
| 228 for_session_blocked_button_->SetEnabled(enable_blocked_buttons); |
| 229 } |
| 230 |
| 231 void CollectedCookiesWin::AddContentException(views::TreeView* tree_view, |
| 232 ContentSetting setting) { |
| 233 CookieTreeOriginNode* origin_node = |
| 234 static_cast<CookieTreeOriginNode*>(tree_view->GetSelectedNode()); |
| 235 origin_node->CreateContentException( |
| 236 tab_contents_->profile()->GetHostContentSettingsMap(), setting); |
| 237 } |
| 238 |
| 239 /////////////////////////////////////////////////////////////////////////////// |
148 // NotificationObserver implementation. | 240 // NotificationObserver implementation. |
149 | 241 |
150 void CollectedCookiesWin::Observe(NotificationType type, | 242 void CollectedCookiesWin::Observe(NotificationType type, |
151 const NotificationSource& source, | 243 const NotificationSource& source, |
152 const NotificationDetails& details) { | 244 const NotificationDetails& details) { |
153 DCHECK(type == NotificationType::COLLECTED_COOKIES_SHOWN); | 245 DCHECK(type == NotificationType::COLLECTED_COOKIES_SHOWN); |
154 DCHECK_EQ(Source<TabSpecificContentSettings>(source).ptr(), | 246 DCHECK_EQ(Source<TabSpecificContentSettings>(source).ptr(), |
155 tab_contents_->GetTabSpecificContentSettings()); | 247 tab_contents_->GetTabSpecificContentSettings()); |
156 window_->CloseConstrainedWindow(); | 248 window_->CloseConstrainedWindow(); |
157 } | 249 } |
OLD | NEW |