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

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

Issue 2258763002: Add a feature-controlled persistence checkbox to geolocation prompts on desktop Views platforms. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permission-infobardelegate-clean
Patch Set: Fix for multiple requests Created 4 years, 4 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_prompt_impl.h" 5 #include "chrome/browser/ui/views/website_settings/permission_prompt_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 void UpdateAnchor(views::View* anchor_view, 176 void UpdateAnchor(views::View* anchor_view,
177 const gfx::Point& anchor_point, 177 const gfx::Point& anchor_point,
178 views::BubbleBorder::Arrow anchor_arrow); 178 views::BubbleBorder::Arrow anchor_arrow);
179 179
180 private: 180 private:
181 PermissionPromptImpl* owner_; 181 PermissionPromptImpl* owner_;
182 bool multiple_requests_; 182 bool multiple_requests_;
183 base::string16 display_origin_; 183 base::string16 display_origin_;
184 std::unique_ptr<PermissionMenuModel> menu_button_model_; 184 std::unique_ptr<PermissionMenuModel> menu_button_model_;
185 std::vector<PermissionCombobox*> customize_comboboxes_; 185 std::vector<PermissionCombobox*> customize_comboboxes_;
186 views::Checkbox* checkbox_;
186 187
187 DISALLOW_COPY_AND_ASSIGN(PermissionsBubbleDialogDelegateView); 188 DISALLOW_COPY_AND_ASSIGN(PermissionsBubbleDialogDelegateView);
188 }; 189 };
189 190
190 PermissionsBubbleDialogDelegateView::PermissionsBubbleDialogDelegateView( 191 PermissionsBubbleDialogDelegateView::PermissionsBubbleDialogDelegateView(
191 PermissionPromptImpl* owner, 192 PermissionPromptImpl* owner,
192 const std::vector<PermissionRequest*>& requests, 193 const std::vector<PermissionRequest*>& requests,
193 const std::vector<bool>& accept_state) 194 const std::vector<bool>& accept_state)
194 : owner_(owner), 195 : owner_(owner),
195 multiple_requests_(requests.size() > 1) { 196 multiple_requests_(requests.size() > 1),
197 checkbox_(nullptr) {
196 DCHECK(!requests.empty()); 198 DCHECK(!requests.empty());
197 199
198 set_close_on_deactivate(false); 200 set_close_on_deactivate(false);
199 201
200 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 202 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0,
201 kItemMajorSpacing)); 203 kItemMajorSpacing));
202 204
203 display_origin_ = url_formatter::FormatUrlForSecurityDisplay( 205 display_origin_ = url_formatter::FormatUrlForSecurityDisplay(
204 requests[0]->GetOrigin(), 206 requests[0]->GetOrigin(),
205 url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC); 207 url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC);
206 208
207 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 209 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
210 bool show_persistence_toggle = true;
208 for (size_t index = 0; index < requests.size(); index++) { 211 for (size_t index = 0; index < requests.size(); index++) {
209 DCHECK(index < accept_state.size()); 212 DCHECK(index < accept_state.size());
210 // The row is laid out containing a leading-aligned label area and a 213 // The row is laid out containing a leading-aligned label area and a
211 // trailing column which will be filled if there are multiple permission 214 // trailing column which will be filled if there are multiple permission
212 // requests. 215 // requests.
213 views::View* row = new views::View(); 216 views::View* row = new views::View();
214 views::GridLayout* row_layout = new views::GridLayout(row); 217 views::GridLayout* row_layout = new views::GridLayout(row);
215 row->SetLayoutManager(row_layout); 218 row->SetLayoutManager(row_layout);
216 views::ColumnSet* columns = row_layout->AddColumnSet(0); 219 views::ColumnSet* columns = row_layout->AddColumnSet(0);
217 columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, 220 columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL,
(...skipping 16 matching lines...) Expand all
234 icon->SetImageSize(gfx::Size(kIconSize, kIconSize)); 237 icon->SetImageSize(gfx::Size(kIconSize, kIconSize));
235 } 238 }
236 icon->SetTooltipText(base::string16()); // Redundant with the text fragment 239 icon->SetTooltipText(base::string16()); // Redundant with the text fragment
237 label_container->AddChildView(icon); 240 label_container->AddChildView(icon);
238 views::Label* label = 241 views::Label* label =
239 new views::Label(requests.at(index)->GetMessageTextFragment()); 242 new views::Label(requests.at(index)->GetMessageTextFragment());
240 label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 243 label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
241 label_container->AddChildView(label); 244 label_container->AddChildView(label);
242 row_layout->AddView(label_container); 245 row_layout->AddView(label_container);
243 246
247 // Only show the toggle if every request wants to show it.
248 show_persistence_toggle = show_persistence_toggle &&
249 requests[index]->ShouldShowPersistenceToggle();
244 if (requests.size() > 1) { 250 if (requests.size() > 1) {
245 PermissionCombobox* combobox = new PermissionCombobox( 251 PermissionCombobox* combobox = new PermissionCombobox(
246 this, index, requests[index]->GetOrigin(), 252 this, index, requests[index]->GetOrigin(),
247 accept_state[index] ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK); 253 accept_state[index] ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK);
248 row_layout->AddView(combobox); 254 row_layout->AddView(combobox);
249 customize_comboboxes_.push_back(combobox); 255 customize_comboboxes_.push_back(combobox);
250 } else { 256 } else {
251 row_layout->AddView(new views::View()); 257 row_layout->AddView(new views::View());
252 } 258 }
253 259
260 // Run this once at the end of the loop over the requests.
261 if (index == (requests.size() - 1) && show_persistence_toggle) {
262 row_layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
263 row_layout->StartRow(0, 0);
264 checkbox_ = new views::Checkbox(
265 l10n_util::GetStringUTF16(IDS_PERMISSIONS_BUBBLE_PERSIST_TEXT));
266 checkbox_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
267 checkbox_->SetChecked(true);
268 row_layout->AddView(checkbox_);
269 }
270
254 AddChildView(row); 271 AddChildView(row);
255 } 272 }
256 } 273 }
257 274
258 PermissionsBubbleDialogDelegateView::~PermissionsBubbleDialogDelegateView() { 275 PermissionsBubbleDialogDelegateView::~PermissionsBubbleDialogDelegateView() {
259 if (owner_) 276 if (owner_)
260 owner_->Closing(); 277 owner_->Closing();
261 } 278 }
262 279
263 void PermissionsBubbleDialogDelegateView::CloseBubble() { 280 void PermissionsBubbleDialogDelegateView::CloseBubble() {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 if (button == ui::DIALOG_BUTTON_CANCEL) 341 if (button == ui::DIALOG_BUTTON_CANCEL)
325 return l10n_util::GetStringUTF16(IDS_PERMISSION_DENY); 342 return l10n_util::GetStringUTF16(IDS_PERMISSION_DENY);
326 343
327 // The text differs based on whether OK is the only visible button. 344 // The text differs based on whether OK is the only visible button.
328 return l10n_util::GetStringUTF16(GetDialogButtons() == ui::DIALOG_BUTTON_OK 345 return l10n_util::GetStringUTF16(GetDialogButtons() == ui::DIALOG_BUTTON_OK
329 ? IDS_OK 346 ? IDS_OK
330 : IDS_PERMISSION_ALLOW); 347 : IDS_PERMISSION_ALLOW);
331 } 348 }
332 349
333 bool PermissionsBubbleDialogDelegateView::Cancel() { 350 bool PermissionsBubbleDialogDelegateView::Cancel() {
334 if (owner_) 351 if (owner_) {
352 bool persist = !checkbox_ || checkbox_->checked();
353 owner_->TogglePersist(persist);
335 owner_->Deny(); 354 owner_->Deny();
355 }
336 return true; 356 return true;
337 } 357 }
338 358
339 bool PermissionsBubbleDialogDelegateView::Accept() { 359 bool PermissionsBubbleDialogDelegateView::Accept() {
340 if (owner_) 360 if (owner_) {
361 bool persist = !checkbox_ || checkbox_->checked();
362 owner_->TogglePersist(persist);
341 owner_->Accept(); 363 owner_->Accept();
364 }
342 return true; 365 return true;
343 } 366 }
344 367
345 bool PermissionsBubbleDialogDelegateView::Close() { 368 bool PermissionsBubbleDialogDelegateView::Close() {
346 // Neither explicit accept nor explicit deny. 369 // Neither explicit accept nor explicit deny.
347 return true; 370 return true;
348 } 371 }
349 372
350 void PermissionsBubbleDialogDelegateView::PermissionSelectionChanged( 373 void PermissionsBubbleDialogDelegateView::PermissionSelectionChanged(
351 int index, 374 int index,
352 bool allowed) { 375 bool allowed) {
353 owner_->Toggle(index, allowed); 376 owner_->ToggleAccept(index, allowed);
354 } 377 }
355 378
356 void PermissionsBubbleDialogDelegateView::UpdateAnchor( 379 void PermissionsBubbleDialogDelegateView::UpdateAnchor(
357 views::View* anchor_view, 380 views::View* anchor_view,
358 const gfx::Point& anchor_point, 381 const gfx::Point& anchor_point,
359 views::BubbleBorder::Arrow anchor_arrow) { 382 views::BubbleBorder::Arrow anchor_arrow) {
360 set_arrow(anchor_arrow); 383 set_arrow(anchor_arrow);
361 384
362 // Update the border in the bubble: will either add or remove the arrow. 385 // Update the border in the bubble: will either add or remove the arrow.
363 views::BubbleFrameView* frame = 386 views::BubbleFrameView* frame =
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 return nullptr; 466 return nullptr;
444 } 467 }
445 468
446 void PermissionPromptImpl::Closing() { 469 void PermissionPromptImpl::Closing() {
447 if (bubble_delegate_) 470 if (bubble_delegate_)
448 bubble_delegate_ = nullptr; 471 bubble_delegate_ = nullptr;
449 if (delegate_) 472 if (delegate_)
450 delegate_->Closing(); 473 delegate_->Closing();
451 } 474 }
452 475
453 void PermissionPromptImpl::Toggle(int index, bool value) { 476 void PermissionPromptImpl::ToggleAccept(int index, bool value) {
454 if (delegate_) 477 if (delegate_)
455 delegate_->ToggleAccept(index, value); 478 delegate_->ToggleAccept(index, value);
456 } 479 }
457 480
481 void PermissionPromptImpl::TogglePersist(bool value) {
482 if (delegate_)
483 delegate_->TogglePersist(value);
484 }
485
458 void PermissionPromptImpl::Accept() { 486 void PermissionPromptImpl::Accept() {
459 if (delegate_) 487 if (delegate_)
460 delegate_->Accept(); 488 delegate_->Accept();
461 } 489 }
462 490
463 void PermissionPromptImpl::Deny() { 491 void PermissionPromptImpl::Deny() {
464 if (delegate_) 492 if (delegate_)
465 delegate_->Deny(); 493 delegate_->Deny();
466 } 494 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698