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

Side by Side Diff: chrome/browser/ui/views/website_settings/permission_selector_row.cc

Issue 2726853007: Views/Permissions: Update desktop UI to display BLOCK for embargoed permissions. (Closed)
Patch Set: Created 3 years, 9 months 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
OLDNEW
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_row.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/permissions/permission_manager.h"
11 #include "chrome/browser/permissions/permission_result.h"
12 #include "chrome/browser/permissions/permission_util.h"
10 #include "chrome/browser/ui/views/website_settings/non_accessible_image_view.h" 13 #include "chrome/browser/ui/views/website_settings/non_accessible_image_view.h"
11 #include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h " 14 #include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h "
12 #include "chrome/browser/ui/website_settings/permission_menu_model.h" 15 #include "chrome/browser/ui/website_settings/permission_menu_model.h"
13 #include "chrome/browser/ui/website_settings/website_settings_ui.h" 16 #include "chrome/browser/ui/website_settings/website_settings_ui.h"
14 #include "chrome/grit/generated_resources.h" 17 #include "chrome/grit/generated_resources.h"
15 #include "ui/accessibility/ax_node_data.h" 18 #include "ui/accessibility/ax_node_data.h"
16 #include "ui/base/material_design/material_design_controller.h" 19 #include "ui/base/material_design/material_design_controller.h"
17 #include "ui/base/models/combobox_model.h" 20 #include "ui/base/models/combobox_model.h"
18 #include "ui/gfx/image/image.h" 21 #include "ui/gfx/image/image.h"
19 #include "ui/views/controls/button/menu_button.h" 22 #include "ui/views/controls/button/menu_button.h"
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 base::Bind(&PermissionSelectorRow::PermissionChanged, 275 base::Bind(&PermissionSelectorRow::PermissionChanged,
273 base::Unretained(this)))); 276 base::Unretained(this))));
274 277
275 // Create the permission menu button. 278 // Create the permission menu button.
276 #if defined(OS_MACOSX) 279 #if defined(OS_MACOSX)
277 bool use_real_combobox = true; 280 bool use_real_combobox = true;
278 #else 281 #else
279 bool use_real_combobox = 282 bool use_real_combobox =
280 ui::MaterialDesignController::IsSecondaryUiMaterial(); 283 ui::MaterialDesignController::IsSecondaryUiMaterial();
281 #endif 284 #endif
285
286 bool user_editable =
287 permission.source == content_settings::SettingSource::SETTING_SOURCE_USER;
288 // Permissions blocked under the kill switch shouldn't be editable.
289 if (permission.setting == CONTENT_SETTING_BLOCK &&
290 PermissionUtil::IsPermission(permission.type)) {
291 PermissionResult permission_result =
292 PermissionManager::Get(profile_)->GetPermissionStatus(permission.type,
293 url, url);
294 if (permission_result.source == PermissionStatusSource::KILL_SWITCH)
295 user_editable = false;
296 }
297
282 if (use_real_combobox) 298 if (use_real_combobox)
283 InitializeComboboxView(layout, permission); 299 InitializeComboboxView(layout, permission, user_editable);
284 else 300 else
285 InitializeMenuButtonView(layout, permission); 301 InitializeMenuButtonView(layout, permission, user_editable);
286 } 302 }
287 303
288 void PermissionSelectorRow::AddObserver( 304 void PermissionSelectorRow::AddObserver(
289 PermissionSelectorRowObserver* observer) { 305 PermissionSelectorRowObserver* observer) {
290 observer_list_.AddObserver(observer); 306 observer_list_.AddObserver(observer);
291 } 307 }
292 308
293 void PermissionSelectorRow::ChildPreferredSizeChanged(View* child) { 309 void PermissionSelectorRow::ChildPreferredSizeChanged(View* child) {
294 Layout(); 310 Layout();
295 } 311 }
296 312
297 PermissionSelectorRow::~PermissionSelectorRow() { 313 PermissionSelectorRow::~PermissionSelectorRow() {
298 // Gross. On paper the Combobox and the ComboboxModelAdapter are both owned by 314 // Gross. On paper the Combobox and the ComboboxModelAdapter are both owned by
299 // this class, but actually, the Combobox is owned by View and will be 315 // this class, but actually, the Combobox is owned by View and will be
300 // destroyed in ~View(), which runs *after* ~PermissionSelectorRow() is done, 316 // destroyed in ~View(), which runs *after* ~PermissionSelectorRow() is done,
301 // which means the Combobox gets destroyed after its ComboboxModel, which 317 // which means the Combobox gets destroyed after its ComboboxModel, which
302 // causes an explosion when the Combobox attempts to stop observing the 318 // causes an explosion when the Combobox attempts to stop observing the
303 // ComboboxModel. This hack ensures the Combobox is deleted before its 319 // ComboboxModel. This hack ensures the Combobox is deleted before its
304 // ComboboxModel. 320 // ComboboxModel.
305 // 321 //
306 // Technically, the MenuButton has the same problem, but MenuButton doesn't 322 // Technically, the MenuButton has the same problem, but MenuButton doesn't
307 // use its model in its destructor. 323 // use its model in its destructor.
308 if (combobox_) 324 if (combobox_)
309 RemoveChildView(combobox_); 325 RemoveChildView(combobox_);
310 } 326 }
311 327
312 void PermissionSelectorRow::InitializeMenuButtonView( 328 void PermissionSelectorRow::InitializeMenuButtonView(
313 views::GridLayout* layout, 329 views::GridLayout* layout,
314 const WebsiteSettingsUI::PermissionInfo& permission) { 330 const WebsiteSettingsUI::PermissionInfo& permission,
315 bool button_enabled = 331 const bool button_enabled) {
316 permission.source == content_settings::SETTING_SOURCE_USER;
317 menu_button_ = new internal::PermissionMenuButton( 332 menu_button_ = new internal::PermissionMenuButton(
318 WebsiteSettingsUI::PermissionActionToUIString( 333 WebsiteSettingsUI::PermissionActionToUIString(
319 profile_, permission.type, permission.setting, 334 profile_, permission.type, permission.setting,
320 permission.default_setting, permission.source), 335 permission.default_setting, permission.source),
321 menu_model_.get(), button_enabled); 336 menu_model_.get(), button_enabled);
322 menu_button_->SetEnabled(button_enabled); 337 menu_button_->SetEnabled(button_enabled);
323 menu_button_->SetAccessibleName( 338 menu_button_->SetAccessibleName(
324 WebsiteSettingsUI::PermissionTypeToUIString(permission.type)); 339 WebsiteSettingsUI::PermissionTypeToUIString(permission.type));
325 layout->AddView(menu_button_); 340 layout->AddView(menu_button_);
326 } 341 }
327 342
328 void PermissionSelectorRow::InitializeComboboxView( 343 void PermissionSelectorRow::InitializeComboboxView(
329 views::GridLayout* layout, 344 views::GridLayout* layout,
330 const WebsiteSettingsUI::PermissionInfo& permission) { 345 const WebsiteSettingsUI::PermissionInfo& permission,
331 bool button_enabled = 346 const bool button_enabled) {
332 permission.source == content_settings::SETTING_SOURCE_USER;
333 combobox_model_adapter_.reset( 347 combobox_model_adapter_.reset(
334 new internal::ComboboxModelAdapter(menu_model_.get())); 348 new internal::ComboboxModelAdapter(menu_model_.get()));
335 combobox_ = new internal::PermissionCombobox( 349 combobox_ = new internal::PermissionCombobox(
336 combobox_model_adapter_.get(), button_enabled, true); 350 combobox_model_adapter_.get(), button_enabled, true);
337 combobox_->SetEnabled(button_enabled); 351 combobox_->SetEnabled(button_enabled);
338 combobox_->SetAccessibleName( 352 combobox_->SetAccessibleName(
339 WebsiteSettingsUI::PermissionTypeToUIString(permission.type)); 353 WebsiteSettingsUI::PermissionTypeToUIString(permission.type));
340 layout->AddView(combobox_); 354 layout->AddView(combobox_);
341 } 355 }
342 356
343 void PermissionSelectorRow::PermissionChanged( 357 void PermissionSelectorRow::PermissionChanged(
344 const WebsiteSettingsUI::PermissionInfo& permission) { 358 const WebsiteSettingsUI::PermissionInfo& permission) {
359 // TODO(patricialor): Clear embargo state for this permission if the user sets
360 // the permission back to the default setting.
361
345 // Change the permission icon to reflect the selected setting. 362 // Change the permission icon to reflect the selected setting.
346 const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(permission); 363 const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(permission);
347 icon_->SetImage(image.ToImageSkia()); 364 icon_->SetImage(image.ToImageSkia());
348 365
349 // Update the menu button text to reflect the new setting. 366 // Update the menu button text to reflect the new setting.
350 if (menu_button_) { 367 if (menu_button_) {
351 menu_button_->SetText(WebsiteSettingsUI::PermissionActionToUIString( 368 menu_button_->SetText(WebsiteSettingsUI::PermissionActionToUIString(
352 profile_, permission.type, permission.setting, 369 profile_, permission.type, permission.setting,
353 permission.default_setting, content_settings::SETTING_SOURCE_USER)); 370 permission.default_setting, content_settings::SETTING_SOURCE_USER));
354 menu_button_->SizeToPreferredSize(); 371 menu_button_->SizeToPreferredSize();
355 } else if (combobox_) { 372 } else if (combobox_) {
356 bool use_default = permission.setting == CONTENT_SETTING_DEFAULT; 373 bool use_default = permission.setting == CONTENT_SETTING_DEFAULT;
357 combobox_->UpdateSelectedIndex(use_default); 374 combobox_->UpdateSelectedIndex(use_default);
358 } 375 }
359 376
360 for (PermissionSelectorRowObserver& observer : observer_list_) 377 for (PermissionSelectorRowObserver& observer : observer_list_)
361 observer.OnPermissionChanged(permission); 378 observer.OnPermissionChanged(permission);
362 } 379 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698