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

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

Powered by Google App Engine
This is Rietveld 408576698