Index: chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc |
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc |
index 844ad48ce9271a00dbc9ed57350e46bb12aa47cd..2c5e0f4a5812f3e0f8e3e3dfa0f4a9c853af887b 100644 |
--- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc |
+++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc |
@@ -10,7 +10,12 @@ |
#include "apps/app_load_service.h" |
#include "apps/saved_files_service.h" |
#include "base/files/file_path.h" |
+#include "base/strings/stringprintf.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "chrome/browser/profiles/profile.h" |
#include "chrome/grit/generated_resources.h" |
+#include "device/usb/usb_ids.h" |
+#include "extensions/browser/api/device_permissions_manager.h" |
#include "extensions/common/extension.h" |
#include "extensions/common/permissions/api_permission.h" |
#include "extensions/common/permissions/permissions_data.h" |
@@ -31,10 +36,14 @@ AppInfoPermissionsPanel::AppInfoPermissionsPanel( |
active_permissions_list_(NULL), |
retained_files_heading_(NULL), |
retained_files_list_(NULL), |
- revoke_file_permissions_button_(NULL) { |
+ revoke_file_permissions_button_(NULL), |
+ retained_devices_heading_(NULL), |
+ retained_devices_list_(NULL), |
+ revoke_device_permissions_button_(NULL) { |
// Create UI elements. |
CreateActivePermissionsControl(); |
CreateRetainedFilesControl(); |
+ CreateRetainedDevicesControl(); |
// Layout elements. |
SetLayoutManager( |
@@ -45,6 +54,7 @@ AppInfoPermissionsPanel::AppInfoPermissionsPanel( |
LayoutActivePermissionsControl(); |
LayoutRetainedFilesControl(); |
+ LayoutRetainedDevicesControl(); |
} |
AppInfoPermissionsPanel::~AppInfoPermissionsPanel() { |
@@ -142,6 +152,24 @@ void AppInfoPermissionsPanel::CreateRetainedFilesControl() { |
} |
} |
+void AppInfoPermissionsPanel::CreateRetainedDevicesControl() { |
+ const std::vector<base::string16> retained_device_permission_messages = |
+ GetRetainedDevices(); |
+ |
+ if (!retained_device_permission_messages.empty()) { |
+ revoke_device_permissions_button_ = new views::LabelButton( |
+ this, |
+ l10n_util::GetStringUTF16( |
+ IDS_APPLICATION_INFO_REVOKE_DEVICE_PERMISSIONS_BUTTON_TEXT)); |
+ revoke_device_permissions_button_->SetStyle(views::Button::STYLE_BUTTON); |
+ |
+ retained_devices_heading_ = CreateHeading(l10n_util::GetStringUTF16( |
+ IDS_APPLICATION_INFO_RETAINED_DEVICE_PERMISSIONS_TEXT)); |
+ retained_devices_list_ = CreateBulletedListView( |
+ retained_device_permission_messages, false, gfx::ELIDE_TAIL); |
+ } |
+} |
+ |
void AppInfoPermissionsPanel::LayoutActivePermissionsControl() { |
if (active_permissions_list_) { |
views::View* vertical_stack = CreateVerticalStack(); |
@@ -176,10 +204,35 @@ void AppInfoPermissionsPanel::LayoutRetainedFilesControl() { |
} |
} |
+void AppInfoPermissionsPanel::LayoutRetainedDevicesControl() { |
+ if (retained_devices_list_) { |
+ DCHECK(retained_devices_heading_); |
+ DCHECK(revoke_device_permissions_button_); |
+ |
+ // Add a sub-view so the revoke button is right-aligned. |
+ views::View* right_aligned_button = new views::View(); |
+ views::BoxLayout* right_aligned_horizontal_layout = |
+ new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0); |
+ right_aligned_horizontal_layout->set_main_axis_alignment( |
+ views::BoxLayout::MAIN_AXIS_ALIGNMENT_END); |
+ right_aligned_button->SetLayoutManager(right_aligned_horizontal_layout); |
+ right_aligned_button->AddChildView(revoke_device_permissions_button_); |
+ |
+ views::View* vertical_stack = CreateVerticalStack(); |
+ vertical_stack->AddChildView(retained_devices_heading_); |
+ vertical_stack->AddChildView(retained_devices_list_); |
+ vertical_stack->AddChildView(right_aligned_button); |
+ |
+ AddChildView(vertical_stack); |
+ } |
+} |
+ |
void AppInfoPermissionsPanel::ButtonPressed(views::Button* sender, |
const ui::Event& event) { |
if (sender == revoke_file_permissions_button_) { |
RevokeFilePermissions(); |
+ } else if (sender == revoke_device_permissions_button_) { |
+ RevokeDevicePermissions(); |
} else { |
NOTREACHED(); |
} |
@@ -213,3 +266,16 @@ void AppInfoPermissionsPanel::RevokeFilePermissions() { |
GetWidget()->Close(); |
} |
+ |
+const std::vector<base::string16> AppInfoPermissionsPanel::GetRetainedDevices() |
+ const { |
+ return extensions::DevicePermissionsManager::Get(profile_) |
+ ->GetPermissionMessageStrings(app_->id()); |
+} |
+ |
+void AppInfoPermissionsPanel::RevokeDevicePermissions() { |
+ extensions::DevicePermissionsManager::Get(profile_)->Clear(app_->id()); |
+ apps::AppLoadService::Get(profile_)->RestartApplicationIfRunning(app_->id()); |
+ |
+ GetWidget()->Close(); |
+} |