OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/website_settings/permission_selector_view.h" | 5 #include "chrome/browser/ui/views/website_settings/permission_selector_row.h" |
6 | 6 |
7 #include "base/i18n/rtl.h" | 7 #include "base/i18n/rtl.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h
" | 10 #include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h
" |
11 #include "chrome/browser/ui/website_settings/permission_menu_model.h" | 11 #include "chrome/browser/ui/website_settings/permission_menu_model.h" |
12 #include "chrome/browser/ui/website_settings/website_settings_ui.h" | 12 #include "chrome/browser/ui/website_settings/website_settings_ui.h" |
13 #include "chrome/grit/generated_resources.h" | 13 #include "chrome/grit/generated_resources.h" |
14 #include "ui/accessibility/ax_view_state.h" | 14 #include "ui/accessibility/ax_view_state.h" |
15 #include "ui/base/l10n/l10n_util.h" | 15 #include "ui/base/l10n/l10n_util.h" |
(...skipping 30 matching lines...) Expand all Loading... |
46 // Overridden from views::View. | 46 // Overridden from views::View. |
47 void GetAccessibleState(ui::AXViewState* state) override; | 47 void GetAccessibleState(ui::AXViewState* state) override; |
48 void OnNativeThemeChanged(const ui::NativeTheme* theme) override; | 48 void OnNativeThemeChanged(const ui::NativeTheme* theme) override; |
49 | 49 |
50 private: | 50 private: |
51 // Overridden from views::MenuButtonListener. | 51 // Overridden from views::MenuButtonListener. |
52 void OnMenuButtonClicked(views::MenuButton* source, | 52 void OnMenuButtonClicked(views::MenuButton* source, |
53 const gfx::Point& point, | 53 const gfx::Point& point, |
54 const ui::Event* event) override; | 54 const ui::Event* event) override; |
55 | 55 |
56 PermissionMenuModel* menu_model_; // Owned by |PermissionSelectorView|. | 56 PermissionMenuModel* menu_model_; // Owned by |PermissionSelectorRow|. |
57 std::unique_ptr<views::MenuRunner> menu_runner_; | 57 std::unique_ptr<views::MenuRunner> menu_runner_; |
58 | 58 |
59 bool is_rtl_display_; | 59 bool is_rtl_display_; |
60 | 60 |
61 DISALLOW_COPY_AND_ASSIGN(PermissionMenuButton); | 61 DISALLOW_COPY_AND_ASSIGN(PermissionMenuButton); |
62 }; | 62 }; |
63 | 63 |
64 /////////////////////////////////////////////////////////////////////////////// | 64 /////////////////////////////////////////////////////////////////////////////// |
65 // PermissionMenuButton | 65 // PermissionMenuButton |
66 /////////////////////////////////////////////////////////////////////////////// | 66 /////////////////////////////////////////////////////////////////////////////// |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 Combobox::OnPaintBorder(canvas); | 216 Combobox::OnPaintBorder(canvas); |
217 } | 217 } |
218 | 218 |
219 void PermissionCombobox::OnPerformAction(Combobox* combobox) { | 219 void PermissionCombobox::OnPerformAction(Combobox* combobox) { |
220 model_->OnPerformAction(combobox->selected_index()); | 220 model_->OnPerformAction(combobox->selected_index()); |
221 } | 221 } |
222 | 222 |
223 } // namespace internal | 223 } // namespace internal |
224 | 224 |
225 /////////////////////////////////////////////////////////////////////////////// | 225 /////////////////////////////////////////////////////////////////////////////// |
226 // PermissionSelectorView | 226 // PermissionSelectorRow |
227 /////////////////////////////////////////////////////////////////////////////// | 227 /////////////////////////////////////////////////////////////////////////////// |
228 | 228 |
229 PermissionSelectorView::PermissionSelectorView( | 229 PermissionSelectorRow::PermissionSelectorRow( |
230 const GURL& url, | 230 const GURL& url, |
231 const WebsiteSettingsUI::PermissionInfo& permission) | 231 const WebsiteSettingsUI::PermissionInfo& permission) |
232 : icon_(NULL), menu_button_(NULL), combobox_(NULL) { | 232 : icon_(NULL), menu_button_(NULL), combobox_(NULL) { |
233 views::GridLayout* layout = new views::GridLayout(this); | 233 views::GridLayout* layout = new views::GridLayout(this); |
234 SetLayoutManager(layout); | 234 SetLayoutManager(layout); |
235 const int column_set_id = 0; | 235 const int column_set_id = 0; |
236 views::ColumnSet* column_set = layout->AddColumnSet(column_set_id); | 236 views::ColumnSet* column_set = layout->AddColumnSet(column_set_id); |
237 column_set->AddColumn(views::GridLayout::FILL, | 237 column_set->AddColumn(views::GridLayout::FILL, |
238 views::GridLayout::FILL, | 238 views::GridLayout::FILL, |
239 1, | 239 1, |
(...skipping 30 matching lines...) Expand all Loading... |
270 WebsiteSettingsUI::PermissionTypeToUIString(permission.type))); | 270 WebsiteSettingsUI::PermissionTypeToUIString(permission.type))); |
271 layout->AddView(label, | 271 layout->AddView(label, |
272 1, | 272 1, |
273 1, | 273 1, |
274 views::GridLayout::LEADING, | 274 views::GridLayout::LEADING, |
275 views::GridLayout::CENTER); | 275 views::GridLayout::CENTER); |
276 // Create the menu model. | 276 // Create the menu model. |
277 menu_model_.reset(new PermissionMenuModel( | 277 menu_model_.reset(new PermissionMenuModel( |
278 url, | 278 url, |
279 permission, | 279 permission, |
280 base::Bind(&PermissionSelectorView::PermissionChanged, | 280 base::Bind(&PermissionSelectorRow::PermissionChanged, |
281 base::Unretained(this)))); | 281 base::Unretained(this)))); |
282 | 282 |
283 // Create the permission menu button. | 283 // Create the permission menu button. |
284 #if defined(OS_MACOSX) | 284 #if defined(OS_MACOSX) |
285 bool use_real_combobox = true; | 285 bool use_real_combobox = true; |
286 #else | 286 #else |
287 bool use_real_combobox = | 287 bool use_real_combobox = |
288 ui::MaterialDesignController::IsSecondaryUiMaterial(); | 288 ui::MaterialDesignController::IsSecondaryUiMaterial(); |
289 #endif | 289 #endif |
290 if (use_real_combobox) | 290 if (use_real_combobox) |
291 InitializeComboboxView(layout, permission); | 291 InitializeComboboxView(layout, permission); |
292 else | 292 else |
293 InitializeMenuButtonView(layout, permission); | 293 InitializeMenuButtonView(layout, permission); |
294 } | 294 } |
295 | 295 |
296 void PermissionSelectorView::AddObserver( | 296 void PermissionSelectorRow::AddObserver( |
297 PermissionSelectorViewObserver* observer) { | 297 PermissionSelectorRowObserver* observer) { |
298 observer_list_.AddObserver(observer); | 298 observer_list_.AddObserver(observer); |
299 } | 299 } |
300 | 300 |
301 void PermissionSelectorView::ChildPreferredSizeChanged(View* child) { | 301 void PermissionSelectorRow::ChildPreferredSizeChanged(View* child) { |
302 SizeToPreferredSize(); | 302 SizeToPreferredSize(); |
303 // FIXME: The parent is only a plain |View| that is used as a | 303 // FIXME: The parent is only a plain |View| that is used as a |
304 // container/box/panel. The SizeToPreferredSize method of the parent is | 304 // container/box/panel. The SizeToPreferredSize method of the parent is |
305 // called here directly in order not to implement a custom |View| class with | 305 // called here directly in order not to implement a custom |View| class with |
306 // its own implementation of the ChildPreferredSizeChanged method. | 306 // its own implementation of the ChildPreferredSizeChanged method. |
307 parent()->SizeToPreferredSize(); | 307 parent()->SizeToPreferredSize(); |
308 } | 308 } |
309 | 309 |
310 PermissionSelectorView::~PermissionSelectorView() { | 310 PermissionSelectorRow::~PermissionSelectorRow() { |
311 // Gross. On paper the Combobox and the ComboboxModelAdapter are both owned by | 311 // Gross. On paper the Combobox and the ComboboxModelAdapter are both owned by |
312 // this class, but actually, the Combobox is owned by View and will be | 312 // this class, but actually, the Combobox is owned by View and will be |
313 // destroyed in ~View(), which runs *after* ~PermissionSelectorView() is done, | 313 // destroyed in ~View(), which runs *after* ~PermissionSelectorRow() is done, |
314 // which means the Combobox gets destroyed after its ComboboxModel, which | 314 // which means the Combobox gets destroyed after its ComboboxModel, which |
315 // causes an explosion when the Combobox attempts to stop observing the | 315 // causes an explosion when the Combobox attempts to stop observing the |
316 // ComboboxModel. This hack ensures the Combobox is deleted before its | 316 // ComboboxModel. This hack ensures the Combobox is deleted before its |
317 // ComboboxModel. | 317 // ComboboxModel. |
318 // | 318 // |
319 // Technically, the MenuButton has the same problem, but MenuButton doesn't | 319 // Technically, the MenuButton has the same problem, but MenuButton doesn't |
320 // use its model in its destructor. | 320 // use its model in its destructor. |
321 if (combobox_) | 321 if (combobox_) |
322 RemoveChildView(combobox_); | 322 RemoveChildView(combobox_); |
323 } | 323 } |
324 | 324 |
325 void PermissionSelectorView::InitializeMenuButtonView( | 325 void PermissionSelectorRow::InitializeMenuButtonView( |
326 views::GridLayout* layout, | 326 views::GridLayout* layout, |
327 const WebsiteSettingsUI::PermissionInfo& permission) { | 327 const WebsiteSettingsUI::PermissionInfo& permission) { |
328 bool button_enabled = | 328 bool button_enabled = |
329 permission.source == content_settings::SETTING_SOURCE_USER; | 329 permission.source == content_settings::SETTING_SOURCE_USER; |
330 menu_button_ = new internal::PermissionMenuButton( | 330 menu_button_ = new internal::PermissionMenuButton( |
331 WebsiteSettingsUI::PermissionActionToUIString( | 331 WebsiteSettingsUI::PermissionActionToUIString( |
332 permission.type, permission.setting, permission.default_setting, | 332 permission.type, permission.setting, permission.default_setting, |
333 permission.source), | 333 permission.source), |
334 menu_model_.get(), button_enabled); | 334 menu_model_.get(), button_enabled); |
335 menu_button_->SetEnabled(button_enabled); | 335 menu_button_->SetEnabled(button_enabled); |
336 menu_button_->SetAccessibleName( | 336 menu_button_->SetAccessibleName( |
337 WebsiteSettingsUI::PermissionTypeToUIString(permission.type)); | 337 WebsiteSettingsUI::PermissionTypeToUIString(permission.type)); |
338 layout->AddView(menu_button_); | 338 layout->AddView(menu_button_); |
339 } | 339 } |
340 | 340 |
341 void PermissionSelectorView::InitializeComboboxView( | 341 void PermissionSelectorRow::InitializeComboboxView( |
342 views::GridLayout* layout, | 342 views::GridLayout* layout, |
343 const WebsiteSettingsUI::PermissionInfo& permission) { | 343 const WebsiteSettingsUI::PermissionInfo& permission) { |
344 bool button_enabled = | 344 bool button_enabled = |
345 permission.source == content_settings::SETTING_SOURCE_USER; | 345 permission.source == content_settings::SETTING_SOURCE_USER; |
346 combobox_model_adapter_.reset( | 346 combobox_model_adapter_.reset( |
347 new internal::ComboboxModelAdapter(menu_model_.get())); | 347 new internal::ComboboxModelAdapter(menu_model_.get())); |
348 combobox_ = new internal::PermissionCombobox( | 348 combobox_ = new internal::PermissionCombobox( |
349 WebsiteSettingsUI::PermissionActionToUIString( | 349 WebsiteSettingsUI::PermissionActionToUIString( |
350 permission.type, permission.setting, permission.default_setting, | 350 permission.type, permission.setting, permission.default_setting, |
351 permission.source), | 351 permission.source), |
352 combobox_model_adapter_.get(), button_enabled, | 352 combobox_model_adapter_.get(), button_enabled, |
353 true); | 353 true); |
354 combobox_->SetEnabled(button_enabled); | 354 combobox_->SetEnabled(button_enabled); |
355 combobox_->SetAccessibleName( | 355 combobox_->SetAccessibleName( |
356 WebsiteSettingsUI::PermissionTypeToUIString(permission.type)); | 356 WebsiteSettingsUI::PermissionTypeToUIString(permission.type)); |
357 layout->AddView(combobox_); | 357 layout->AddView(combobox_); |
358 } | 358 } |
359 | 359 |
360 void PermissionSelectorView::PermissionChanged( | 360 void PermissionSelectorRow::PermissionChanged( |
361 const WebsiteSettingsUI::PermissionInfo& permission) { | 361 const WebsiteSettingsUI::PermissionInfo& permission) { |
362 // Change the permission icon to reflect the selected setting. | 362 // Change the permission icon to reflect the selected setting. |
363 const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(permission); | 363 const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(permission); |
364 icon_->SetImage(image.ToImageSkia()); | 364 icon_->SetImage(image.ToImageSkia()); |
365 | 365 |
366 // Update the menu button text to reflect the new setting. | 366 // Update the menu button text to reflect the new setting. |
367 if (menu_button_) { | 367 if (menu_button_) { |
368 menu_button_->SetText(WebsiteSettingsUI::PermissionActionToUIString( | 368 menu_button_->SetText(WebsiteSettingsUI::PermissionActionToUIString( |
369 permission.type, permission.setting, permission.default_setting, | 369 permission.type, permission.setting, permission.default_setting, |
370 content_settings::SETTING_SOURCE_USER)); | 370 content_settings::SETTING_SOURCE_USER)); |
371 menu_button_->SizeToPreferredSize(); | 371 menu_button_->SizeToPreferredSize(); |
372 } else if (combobox_) { | 372 } else if (combobox_) { |
373 bool use_default = permission.setting == CONTENT_SETTING_DEFAULT; | 373 bool use_default = permission.setting == CONTENT_SETTING_DEFAULT; |
374 combobox_->UpdateSelectedIndex(use_default); | 374 combobox_->UpdateSelectedIndex(use_default); |
375 } | 375 } |
376 | 376 |
377 FOR_EACH_OBSERVER(PermissionSelectorViewObserver, | 377 FOR_EACH_OBSERVER(PermissionSelectorRowObserver, |
378 observer_list_, | 378 observer_list_, |
379 OnPermissionChanged(permission)); | 379 OnPermissionChanged(permission)); |
380 } | 380 } |
OLD | NEW |