Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: chrome/browser/ui/views/content_setting_bubble_contents.cc

Issue 8603010: content settings bubble using new ui/views/bubble api. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/ui/views/content_setting_bubble_contents.h" 5 #include "chrome/browser/ui/views/content_setting_bubble_contents.h"
6 6
7 #if defined(TOOLKIT_USES_GTK) 7 #if defined(TOOLKIT_USES_GTK)
8 #include <gdk/gdk.h> 8 #include <gdk/gdk.h>
9 #endif 9 #endif
10 10
11 #include <algorithm> 11 #include <algorithm>
12 #include <set> 12 #include <set>
13 #include <string> 13 #include <string>
14 #include <vector> 14 #include <vector>
15 15
16 #include "base/utf_string_conversions.h" 16 #include "base/utf_string_conversions.h"
17 #include "chrome/browser/content_settings/host_content_settings_map.h" 17 #include "chrome/browser/content_settings/host_content_settings_map.h"
18 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/ui/content_settings/content_setting_bubble_model.h" 19 #include "chrome/browser/ui/content_settings/content_setting_bubble_model.h"
20 #include "chrome/browser/ui/views/browser_dialogs.h" 20 #include "chrome/browser/ui/views/browser_dialogs.h"
21 #include "chrome/browser/ui/views/bubble/bubble.h"
22 #include "content/browser/plugin_service.h" 21 #include "content/browser/plugin_service.h"
23 #include "content/browser/tab_contents/tab_contents.h" 22 #include "content/browser/tab_contents/tab_contents.h"
24 #include "content/public/browser/notification_source.h" 23 #include "content/public/browser/notification_source.h"
25 #include "content/public/browser/notification_types.h" 24 #include "content/public/browser/notification_types.h"
26 #include "grit/generated_resources.h" 25 #include "grit/generated_resources.h"
27 #include "ui/base/l10n/l10n_util.h" 26 #include "ui/base/l10n/l10n_util.h"
28 #include "ui/views/layout/grid_layout.h" 27 #include "ui/views/layout/grid_layout.h"
29 #include "ui/views/layout/layout_constants.h" 28 #include "ui/views/layout/layout_constants.h"
30 #include "views/controls/button/radio_button.h" 29 #include "views/controls/button/radio_button.h"
31 #include "views/controls/button/text_button.h" 30 #include "views/controls/button/text_button.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 static HCURSOR g_hand_cursor = LoadCursor(NULL, IDC_HAND); 99 static HCURSOR g_hand_cursor = LoadCursor(NULL, IDC_HAND);
101 return g_hand_cursor; 100 return g_hand_cursor;
102 #elif defined(TOOLKIT_USES_GTK) 101 #elif defined(TOOLKIT_USES_GTK)
103 return gfx::GetCursor(GDK_HAND2); 102 return gfx::GetCursor(GDK_HAND2);
104 #endif 103 #endif
105 } 104 }
106 105
107 ContentSettingBubbleContents::ContentSettingBubbleContents( 106 ContentSettingBubbleContents::ContentSettingBubbleContents(
108 ContentSettingBubbleModel* content_setting_bubble_model, 107 ContentSettingBubbleModel* content_setting_bubble_model,
109 Profile* profile, 108 Profile* profile,
110 TabContents* tab_contents) 109 TabContents* tab_contents,
111 : content_setting_bubble_model_(content_setting_bubble_model), 110 views::View* anchor_view,
111 views::BubbleBorder::ArrowLocation arrow_location)
112 : BubbleDelegateView(anchor_view, arrow_location, SK_ColorWHITE),
113 content_setting_bubble_model_(content_setting_bubble_model),
112 profile_(profile), 114 profile_(profile),
113 tab_contents_(tab_contents), 115 tab_contents_(tab_contents),
114 bubble_(NULL),
115 custom_link_(NULL), 116 custom_link_(NULL),
116 manage_link_(NULL), 117 manage_link_(NULL),
117 close_button_(NULL) { 118 close_button_(NULL) {
118 registrar_.Add(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED, 119 registrar_.Add(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED,
119 content::Source<TabContents>(tab_contents)); 120 content::Source<TabContents>(tab_contents));
120 } 121 }
121 122
122 ContentSettingBubbleContents::~ContentSettingBubbleContents() { 123 ContentSettingBubbleContents::~ContentSettingBubbleContents() {
123 } 124 }
124 125
125 gfx::Size ContentSettingBubbleContents::GetPreferredSize() { 126 gfx::Size ContentSettingBubbleContents::GetPreferredSize() {
126 gfx::Size preferred_size(views::View::GetPreferredSize()); 127 gfx::Size preferred_size(views::View::GetPreferredSize());
127 int preferred_width = 128 int preferred_width =
128 (!content_setting_bubble_model_->bubble_content().domain_lists.empty() && 129 (!content_setting_bubble_model_->bubble_content().domain_lists.empty() &&
129 (kMinMultiLineContentsWidth > preferred_size.width())) ? 130 (kMinMultiLineContentsWidth > preferred_size.width())) ?
130 kMinMultiLineContentsWidth : preferred_size.width(); 131 kMinMultiLineContentsWidth : preferred_size.width();
131 preferred_size.set_width(std::min(preferred_width, kMaxContentsWidth)); 132 preferred_size.set_width(std::min(preferred_width, kMaxContentsWidth));
132 return preferred_size; 133 return preferred_size;
133 } 134 }
134 135
135 void ContentSettingBubbleContents::ViewHierarchyChanged(bool is_add, 136 gfx::Point ContentSettingBubbleContents::GetAnchorPoint() {
136 View* parent, 137 return BubbleDelegateView::GetAnchorPoint().Subtract(gfx::Point(0, 5));
137 View* child) {
138 if (is_add && (child == this))
139 InitControlLayout();
140 } 138 }
141 139
142 void ContentSettingBubbleContents::ButtonPressed(views::Button* sender, 140 void ContentSettingBubbleContents::Init() {
143 const views::Event& event) {
144 if (sender == close_button_) {
145 bubble_->set_fade_away_on_close(true);
146 bubble_->Close(); // CAREFUL: This deletes us.
147 return;
148 }
149
150 for (RadioGroup::const_iterator i = radio_group_.begin();
151 i != radio_group_.end(); ++i) {
152 if (sender == *i) {
153 content_setting_bubble_model_->OnRadioClicked(i - radio_group_.begin());
154 return;
155 }
156 }
157 NOTREACHED() << "unknown radio";
158 }
159
160 void ContentSettingBubbleContents::LinkClicked(views::Link* source,
161 int event_flags) {
162 if (source == custom_link_) {
163 content_setting_bubble_model_->OnCustomLinkClicked();
164 bubble_->set_fade_away_on_close(true);
165 bubble_->Close(); // CAREFUL: This deletes us.
166 return;
167 }
168 if (source == manage_link_) {
169 bubble_->set_fade_away_on_close(true);
170 content_setting_bubble_model_->OnManageLinkClicked();
171 // CAREFUL: Showing the settings window activates it, which deactivates the
172 // info bubble, which causes it to close, which deletes us.
173 return;
174 }
175
176 PopupLinks::const_iterator i(popup_links_.find(source));
177 DCHECK(i != popup_links_.end());
178 content_setting_bubble_model_->OnPopupClicked(i->second);
179 }
180
181 void ContentSettingBubbleContents::Observe(
182 int type,
183 const content::NotificationSource& source,
184 const content::NotificationDetails& details) {
185 DCHECK(type == content::NOTIFICATION_TAB_CONTENTS_DESTROYED);
186 DCHECK(source == content::Source<TabContents>(tab_contents_));
187 tab_contents_ = NULL;
188 }
189
190 void ContentSettingBubbleContents::InitControlLayout() {
191 using views::GridLayout; 141 using views::GridLayout;
192 142
193 GridLayout* layout = new views::GridLayout(this); 143 GridLayout* layout = new views::GridLayout(this);
194 SetLayoutManager(layout); 144 SetLayoutManager(layout);
195 145
196 const int single_column_set_id = 0; 146 const int single_column_set_id = 0;
197 views::ColumnSet* column_set = layout->AddColumnSet(single_column_set_id); 147 views::ColumnSet* column_set = layout->AddColumnSet(single_column_set_id);
198 column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1, 148 column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1,
199 GridLayout::USE_PREF, 0, 0); 149 GridLayout::USE_PREF, 0, 0);
200 150
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 283
334 layout->StartRow(0, double_column_set_id); 284 layout->StartRow(0, double_column_set_id);
335 manage_link_ = new views::Link(UTF8ToUTF16(bubble_content.manage_link)); 285 manage_link_ = new views::Link(UTF8ToUTF16(bubble_content.manage_link));
336 manage_link_->set_listener(this); 286 manage_link_->set_listener(this);
337 layout->AddView(manage_link_); 287 layout->AddView(manage_link_);
338 288
339 close_button_ = new views::NativeTextButton( 289 close_button_ = new views::NativeTextButton(
340 this, l10n_util::GetStringUTF16(IDS_DONE)); 290 this, l10n_util::GetStringUTF16(IDS_DONE));
341 layout->AddView(close_button_); 291 layout->AddView(close_button_);
342 } 292 }
293
294 void ContentSettingBubbleContents::ButtonPressed(views::Button* sender,
295 const views::Event& event) {
296 if (sender == close_button_) {
297 StartFade(false);
298 return;
299 }
300
301 for (RadioGroup::const_iterator i = radio_group_.begin();
302 i != radio_group_.end(); ++i) {
303 if (sender == *i) {
304 content_setting_bubble_model_->OnRadioClicked(i - radio_group_.begin());
305 return;
306 }
307 }
308 NOTREACHED() << "unknown radio";
309 }
310
311 void ContentSettingBubbleContents::LinkClicked(views::Link* source,
312 int event_flags) {
313 if (source == custom_link_) {
314 content_setting_bubble_model_->OnCustomLinkClicked();
315 StartFade(false);
316 return;
317 }
318 if (source == manage_link_) {
319 StartFade(false);
320 content_setting_bubble_model_->OnManageLinkClicked();
321 // CAREFUL: Showing the settings window activates it, which deactivates the
322 // info bubble, which causes it to close, which deletes us.
323 return;
324 }
325
326 PopupLinks::const_iterator i(popup_links_.find(source));
327 DCHECK(i != popup_links_.end());
328 content_setting_bubble_model_->OnPopupClicked(i->second);
329 }
330
331 void ContentSettingBubbleContents::Observe(
332 int type,
333 const content::NotificationSource& source,
334 const content::NotificationDetails& details) {
335 DCHECK(type == content::NOTIFICATION_TAB_CONTENTS_DESTROYED);
336 DCHECK(source == content::Source<TabContents>(tab_contents_));
337 tab_contents_ = NULL;
338 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698