| Index: chrome/browser/ui/views/website_settings/permission_prompt_impl.cc
|
| diff --git a/chrome/browser/ui/views/website_settings/permission_prompt_impl.cc b/chrome/browser/ui/views/website_settings/permission_prompt_impl.cc
|
| index d25c14995ed3d1bda15863db0aa7a2a6100a7d6c..f7f77c64ae92ba18582fff7bb325185b4bbbd5f6 100644
|
| --- a/chrome/browser/ui/views/website_settings/permission_prompt_impl.cc
|
| +++ b/chrome/browser/ui/views/website_settings/permission_prompt_impl.cc
|
| @@ -183,6 +183,7 @@ class PermissionsBubbleDialogDelegateView
|
| base::string16 display_origin_;
|
| std::unique_ptr<PermissionMenuModel> menu_button_model_;
|
| std::vector<PermissionCombobox*> customize_comboboxes_;
|
| + views::Checkbox* checkbox_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(PermissionsBubbleDialogDelegateView);
|
| };
|
| @@ -192,7 +193,8 @@ PermissionsBubbleDialogDelegateView::PermissionsBubbleDialogDelegateView(
|
| const std::vector<PermissionRequest*>& requests,
|
| const std::vector<bool>& accept_state)
|
| : owner_(owner),
|
| - multiple_requests_(requests.size() > 1) {
|
| + multiple_requests_(requests.size() > 1),
|
| + checkbox_(nullptr) {
|
| DCHECK(!requests.empty());
|
|
|
| set_close_on_deactivate(false);
|
| @@ -205,6 +207,7 @@ PermissionsBubbleDialogDelegateView::PermissionsBubbleDialogDelegateView(
|
| url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC);
|
|
|
| ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
|
| + bool show_persistence_toggle = true;
|
| for (size_t index = 0; index < requests.size(); index++) {
|
| DCHECK(index < accept_state.size());
|
| // The row is laid out containing a leading-aligned label area and a
|
| @@ -241,6 +244,9 @@ PermissionsBubbleDialogDelegateView::PermissionsBubbleDialogDelegateView(
|
| label_container->AddChildView(label);
|
| row_layout->AddView(label_container);
|
|
|
| + // Only show the toggle if every request wants to show it.
|
| + show_persistence_toggle = show_persistence_toggle &&
|
| + requests[index]->ShouldShowPersistenceToggle();
|
| if (requests.size() > 1) {
|
| PermissionCombobox* combobox = new PermissionCombobox(
|
| this, index, requests[index]->GetOrigin(),
|
| @@ -251,6 +257,17 @@ PermissionsBubbleDialogDelegateView::PermissionsBubbleDialogDelegateView(
|
| row_layout->AddView(new views::View());
|
| }
|
|
|
| + // Run this once at the end of the loop over the requests.
|
| + if (index == (requests.size() - 1) && show_persistence_toggle) {
|
| + row_layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
|
| + row_layout->StartRow(0, 0);
|
| + checkbox_ = new views::Checkbox(
|
| + l10n_util::GetStringUTF16(IDS_PERMISSIONS_BUBBLE_PERSIST_TEXT));
|
| + checkbox_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
| + checkbox_->SetChecked(true);
|
| + row_layout->AddView(checkbox_);
|
| + }
|
| +
|
| AddChildView(row);
|
| }
|
| }
|
| @@ -331,14 +348,20 @@ base::string16 PermissionsBubbleDialogDelegateView::GetDialogButtonLabel(
|
| }
|
|
|
| bool PermissionsBubbleDialogDelegateView::Cancel() {
|
| - if (owner_)
|
| + if (owner_) {
|
| + bool persist = !checkbox_ || checkbox_->checked();
|
| + owner_->TogglePersist(persist);
|
| owner_->Deny();
|
| + }
|
| return true;
|
| }
|
|
|
| bool PermissionsBubbleDialogDelegateView::Accept() {
|
| - if (owner_)
|
| + if (owner_) {
|
| + bool persist = !checkbox_ || checkbox_->checked();
|
| + owner_->TogglePersist(persist);
|
| owner_->Accept();
|
| + }
|
| return true;
|
| }
|
|
|
| @@ -350,7 +373,7 @@ bool PermissionsBubbleDialogDelegateView::Close() {
|
| void PermissionsBubbleDialogDelegateView::PermissionSelectionChanged(
|
| int index,
|
| bool allowed) {
|
| - owner_->Toggle(index, allowed);
|
| + owner_->ToggleAccept(index, allowed);
|
| }
|
|
|
| void PermissionsBubbleDialogDelegateView::UpdateAnchor(
|
| @@ -450,11 +473,16 @@ void PermissionPromptImpl::Closing() {
|
| delegate_->Closing();
|
| }
|
|
|
| -void PermissionPromptImpl::Toggle(int index, bool value) {
|
| +void PermissionPromptImpl::ToggleAccept(int index, bool value) {
|
| if (delegate_)
|
| delegate_->ToggleAccept(index, value);
|
| }
|
|
|
| +void PermissionPromptImpl::TogglePersist(bool value) {
|
| + if (delegate_)
|
| + delegate_->TogglePersist(value);
|
| +}
|
| +
|
| void PermissionPromptImpl::Accept() {
|
| if (delegate_)
|
| delegate_->Accept();
|
|
|