| Index: chrome/browser/ui/views/extensions/device_permissions_dialog_view.cc
|
| diff --git a/chrome/browser/ui/views/extensions/device_permissions_dialog_view.cc b/chrome/browser/ui/views/extensions/device_permissions_dialog_view.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..70775e4747c2cac02e9dfb2c11c768b9a6f00792
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/views/extensions/device_permissions_dialog_view.cc
|
| @@ -0,0 +1,180 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/ui/views/extensions/device_permissions_dialog_view.h"
|
| +
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "chrome/browser/ui/views/constrained_window_views.h"
|
| +#include "chrome/grit/generated_resources.h"
|
| +#include "content/public/browser/browser_thread.h"
|
| +#include "device/usb/usb_device.h"
|
| +#include "extensions/common/extension.h"
|
| +#include "ui/base/l10n/l10n_util.h"
|
| +#include "ui/base/models/table_model.h"
|
| +#include "ui/base/models/table_model_observer.h"
|
| +#include "ui/views/controls/label.h"
|
| +#include "ui/views/controls/table/table_view.h"
|
| +#include "ui/views/layout/box_layout.h"
|
| +#include "ui/views/layout/layout_constants.h"
|
| +
|
| +using device::UsbDevice;
|
| +using extensions::DevicePermissionsPrompt;
|
| +
|
| +namespace {
|
| +
|
| +void ShowDevicePermissionsDialogImpl(
|
| + content::WebContents* web_contents,
|
| + DevicePermissionsPrompt::Delegate* delegate,
|
| + scoped_refptr<DevicePermissionsPrompt::Prompt> prompt) {
|
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| + ShowWebModalDialogViews(new DevicePermissionsDialogView(delegate, prompt),
|
| + web_contents);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +class DevicePermissionsTableModel
|
| + : public ui::TableModel,
|
| + public DevicePermissionsPrompt::Prompt::Observer {
|
| + public:
|
| + explicit DevicePermissionsTableModel(
|
| + scoped_refptr<DevicePermissionsPrompt::Prompt> prompt)
|
| + : prompt_(prompt) {
|
| + prompt_->SetObserver(this);
|
| + }
|
| +
|
| + virtual ~DevicePermissionsTableModel() { prompt_->SetObserver(nullptr); }
|
| +
|
| + // ui::TableModel
|
| + virtual int RowCount() override;
|
| + virtual base::string16 GetText(int row, int column) override;
|
| + virtual base::string16 GetTooltip(int row) override;
|
| + virtual void SetObserver(ui::TableModelObserver* observer) override;
|
| +
|
| + // extensions::DevicePermissionsPrompt::Prompt::Observer
|
| + virtual void OnDevicesChanged() override;
|
| +
|
| + private:
|
| + scoped_refptr<DevicePermissionsPrompt::Prompt> prompt_;
|
| + ui::TableModelObserver* observer_;
|
| +};
|
| +
|
| +int DevicePermissionsTableModel::RowCount() {
|
| + return prompt_->GetDeviceCount();
|
| +}
|
| +
|
| +base::string16 DevicePermissionsTableModel::GetText(int row, int col_id) {
|
| + switch (col_id) {
|
| + case IDS_DEVICE_PERMISSIONS_DIALOG_DEVICE_NAME_COLUMN:
|
| + return prompt_->GetDeviceName(row);
|
| + case IDS_DEVICE_PERMISSIONS_DIALOG_SERIAL_NUMBER_COLUMN:
|
| + return prompt_->GetDeviceSerialNumber(row);
|
| + default:
|
| + NOTREACHED();
|
| + return base::string16();
|
| + }
|
| +}
|
| +
|
| +base::string16 DevicePermissionsTableModel::GetTooltip(int row) {
|
| + return prompt_->GetDeviceTooltip(row);
|
| +}
|
| +
|
| +void DevicePermissionsTableModel::SetObserver(
|
| + ui::TableModelObserver* observer) {
|
| + observer_ = observer;
|
| +}
|
| +
|
| +void DevicePermissionsTableModel::OnDevicesChanged() {
|
| + if (observer_) {
|
| + observer_->OnModelChanged();
|
| + }
|
| +}
|
| +
|
| +DevicePermissionsDialogView::DevicePermissionsDialogView(
|
| + DevicePermissionsPrompt::Delegate* delegate,
|
| + scoped_refptr<DevicePermissionsPrompt::Prompt> prompt)
|
| + : delegate_(delegate), prompt_(prompt) {
|
| + views::BoxLayout* layout =
|
| + new views::BoxLayout(views::BoxLayout::kVertical,
|
| + views::kButtonHEdgeMarginNew,
|
| + 0,
|
| + views::kRelatedControlVerticalSpacing);
|
| + SetLayoutManager(layout);
|
| +
|
| + views::Label* label = new views::Label(prompt_->GetPromptMessage());
|
| + label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
| + AddChildView(label);
|
| +
|
| + std::vector<ui::TableColumn> table_columns;
|
| + table_columns.push_back(
|
| + ui::TableColumn(IDS_DEVICE_PERMISSIONS_DIALOG_DEVICE_NAME_COLUMN,
|
| + ui::TableColumn::LEFT,
|
| + -1,
|
| + 0.8f));
|
| + table_columns.back().title = l10n_util::GetStringUTF16(
|
| + IDS_DEVICE_PERMISSIONS_DIALOG_DEVICE_NAME_COLUMN);
|
| + table_columns.push_back(
|
| + ui::TableColumn(IDS_DEVICE_PERMISSIONS_DIALOG_SERIAL_NUMBER_COLUMN,
|
| + ui::TableColumn::LEFT,
|
| + -1,
|
| + 0.2f));
|
| + table_columns.back().title = l10n_util::GetStringUTF16(
|
| + IDS_DEVICE_PERMISSIONS_DIALOG_SERIAL_NUMBER_COLUMN);
|
| +
|
| + table_model_.reset(new DevicePermissionsTableModel(prompt_));
|
| + table_view_ = new views::TableView(table_model_.get(),
|
| + table_columns,
|
| + views::TEXT_ONLY,
|
| + !prompt_->multiple());
|
| +
|
| + views::View* table_parent = table_view_->CreateParentIfNecessary();
|
| + AddChildView(table_parent);
|
| + layout->SetFlexForView(table_parent, 1);
|
| +}
|
| +
|
| +DevicePermissionsDialogView::~DevicePermissionsDialogView() {
|
| + RemoveAllChildViews(true);
|
| +}
|
| +
|
| +bool DevicePermissionsDialogView::Cancel() {
|
| + std::vector<scoped_refptr<UsbDevice>> empty;
|
| + delegate_->UsbDevicesChosen(empty);
|
| + return true;
|
| +}
|
| +
|
| +bool DevicePermissionsDialogView::Accept() {
|
| + std::vector<scoped_refptr<UsbDevice>> devices;
|
| + for (int index : table_view_->selection_model().selected_indices()) {
|
| + prompt_->GrantDevicePermission(index);
|
| + devices.push_back(prompt_->GetDevice(index));
|
| + }
|
| + delegate_->UsbDevicesChosen(devices);
|
| + return true;
|
| +}
|
| +
|
| +base::string16 DevicePermissionsDialogView::GetDialogButtonLabel(
|
| + ui::DialogButton button) const {
|
| + if (button == ui::DIALOG_BUTTON_OK) {
|
| + return l10n_util::GetStringUTF16(IDS_DEVICE_PERMISSIONS_DIALOG_SELECT);
|
| + }
|
| + return views::DialogDelegateView::GetDialogButtonLabel(button);
|
| +}
|
| +
|
| +ui::ModalType DevicePermissionsDialogView::GetModalType() const {
|
| + return ui::MODAL_TYPE_CHILD;
|
| +}
|
| +
|
| +base::string16 DevicePermissionsDialogView::GetWindowTitle() const {
|
| + return prompt_->GetHeading();
|
| +}
|
| +
|
| +gfx::Size DevicePermissionsDialogView::GetPreferredSize() const {
|
| + return gfx::Size(500, 250);
|
| +}
|
| +
|
| +// static
|
| +DevicePermissionsPrompt::ShowDialogCallback
|
| +DevicePermissionsPrompt::GetDefaultShowDialogCallback() {
|
| + return base::Bind(&ShowDevicePermissionsDialogImpl);
|
| +}
|
|
|