OLD | NEW |
---|---|
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 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
172 void UpdateAnchor(views::View* anchor_view, | 172 void UpdateAnchor(views::View* anchor_view, |
173 const gfx::Point& anchor_point, | 173 const gfx::Point& anchor_point, |
174 views::BubbleBorder::Arrow anchor_arrow); | 174 views::BubbleBorder::Arrow anchor_arrow); |
175 | 175 |
176 private: | 176 private: |
177 PermissionPromptImpl* owner_; | 177 PermissionPromptImpl* owner_; |
178 bool multiple_requests_; | 178 bool multiple_requests_; |
179 base::string16 display_origin_; | 179 base::string16 display_origin_; |
180 std::unique_ptr<PermissionMenuModel> menu_button_model_; | 180 std::unique_ptr<PermissionMenuModel> menu_button_model_; |
181 std::vector<PermissionCombobox*> customize_comboboxes_; | 181 std::vector<PermissionCombobox*> customize_comboboxes_; |
182 views::Checkbox* checkbox_; | |
msw
2016/08/24 17:31:24
nit: consider a more meaningful name like |persist
dominickn
2016/08/24 17:50:26
Done.
| |
182 | 183 |
183 DISALLOW_COPY_AND_ASSIGN(PermissionsBubbleDialogDelegateView); | 184 DISALLOW_COPY_AND_ASSIGN(PermissionsBubbleDialogDelegateView); |
184 }; | 185 }; |
185 | 186 |
186 PermissionsBubbleDialogDelegateView::PermissionsBubbleDialogDelegateView( | 187 PermissionsBubbleDialogDelegateView::PermissionsBubbleDialogDelegateView( |
187 PermissionPromptImpl* owner, | 188 PermissionPromptImpl* owner, |
188 const std::vector<PermissionRequest*>& requests, | 189 const std::vector<PermissionRequest*>& requests, |
189 const std::vector<bool>& accept_state) | 190 const std::vector<bool>& accept_state) |
190 : owner_(owner), | 191 : owner_(owner), |
191 multiple_requests_(requests.size() > 1) { | 192 multiple_requests_(requests.size() > 1), |
193 checkbox_(nullptr) { | |
192 DCHECK(!requests.empty()); | 194 DCHECK(!requests.empty()); |
193 | 195 |
194 set_close_on_deactivate(false); | 196 set_close_on_deactivate(false); |
195 | 197 |
196 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, | 198 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, |
197 kItemMajorSpacing)); | 199 kItemMajorSpacing)); |
198 | 200 |
199 display_origin_ = url_formatter::FormatUrlForSecurityDisplay( | 201 display_origin_ = url_formatter::FormatUrlForSecurityDisplay( |
200 requests[0]->GetOrigin(), | 202 requests[0]->GetOrigin(), |
201 url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC); | 203 url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC); |
202 | 204 |
203 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 205 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
206 bool show_persistence_toggle = true; | |
204 for (size_t index = 0; index < requests.size(); index++) { | 207 for (size_t index = 0; index < requests.size(); index++) { |
205 DCHECK(index < accept_state.size()); | 208 DCHECK(index < accept_state.size()); |
206 // The row is laid out containing a leading-aligned label area and a | 209 // The row is laid out containing a leading-aligned label area and a |
207 // trailing column which will be filled if there are multiple permission | 210 // trailing column which will be filled if there are multiple permission |
208 // requests. | 211 // requests. |
209 views::View* row = new views::View(); | 212 views::View* row = new views::View(); |
210 views::GridLayout* row_layout = new views::GridLayout(row); | 213 views::GridLayout* row_layout = new views::GridLayout(row); |
211 row->SetLayoutManager(row_layout); | 214 row->SetLayoutManager(row_layout); |
212 views::ColumnSet* columns = row_layout->AddColumnSet(0); | 215 views::ColumnSet* columns = row_layout->AddColumnSet(0); |
213 columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, | 216 columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, |
(...skipping 16 matching lines...) Expand all Loading... | |
230 icon->SetImageSize(gfx::Size(kIconSize, kIconSize)); | 233 icon->SetImageSize(gfx::Size(kIconSize, kIconSize)); |
231 } | 234 } |
232 icon->SetTooltipText(base::string16()); // Redundant with the text fragment | 235 icon->SetTooltipText(base::string16()); // Redundant with the text fragment |
233 label_container->AddChildView(icon); | 236 label_container->AddChildView(icon); |
234 views::Label* label = | 237 views::Label* label = |
235 new views::Label(requests.at(index)->GetMessageTextFragment()); | 238 new views::Label(requests.at(index)->GetMessageTextFragment()); |
236 label->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 239 label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
237 label_container->AddChildView(label); | 240 label_container->AddChildView(label); |
238 row_layout->AddView(label_container); | 241 row_layout->AddView(label_container); |
239 | 242 |
243 // Only show the toggle if every request wants to show it. | |
244 show_persistence_toggle = show_persistence_toggle && | |
245 requests[index]->ShouldShowPersistenceToggle(); | |
240 if (requests.size() > 1) { | 246 if (requests.size() > 1) { |
241 PermissionCombobox* combobox = new PermissionCombobox( | 247 PermissionCombobox* combobox = new PermissionCombobox( |
242 this, index, requests[index]->GetOrigin(), | 248 this, index, requests[index]->GetOrigin(), |
243 accept_state[index] ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK); | 249 accept_state[index] ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK); |
244 row_layout->AddView(combobox); | 250 row_layout->AddView(combobox); |
245 customize_comboboxes_.push_back(combobox); | 251 customize_comboboxes_.push_back(combobox); |
246 } else { | 252 } else { |
247 row_layout->AddView(new views::View()); | 253 row_layout->AddView(new views::View()); |
248 } | 254 } |
249 | 255 |
256 // Run this once at the end of the loop over the requests. | |
msw
2016/08/24 17:31:24
Try running this outside (after) the loop, you sho
dominickn
2016/08/24 17:50:26
Done.
| |
257 if (index == (requests.size() - 1) && show_persistence_toggle) { | |
258 row_layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); | |
259 row_layout->StartRow(0, 0); | |
260 checkbox_ = new views::Checkbox( | |
261 l10n_util::GetStringUTF16(IDS_PERMISSIONS_BUBBLE_PERSIST_TEXT)); | |
262 checkbox_->SetHorizontalAlignment(gfx::ALIGN_LEFT); | |
263 checkbox_->SetChecked(true); | |
msw
2016/08/24 17:31:24
Isn't this supposed to default to off? Your CL tit
dominickn
2016/08/24 17:50:26
Ah, I will clarify the CL title. It means that by
| |
264 row_layout->AddView(checkbox_); | |
265 } | |
266 | |
250 AddChildView(row); | 267 AddChildView(row); |
251 } | 268 } |
252 } | 269 } |
253 | 270 |
254 PermissionsBubbleDialogDelegateView::~PermissionsBubbleDialogDelegateView() { | 271 PermissionsBubbleDialogDelegateView::~PermissionsBubbleDialogDelegateView() { |
255 if (owner_) | 272 if (owner_) |
256 owner_->Closing(); | 273 owner_->Closing(); |
257 } | 274 } |
258 | 275 |
259 void PermissionsBubbleDialogDelegateView::CloseBubble() { | 276 void PermissionsBubbleDialogDelegateView::CloseBubble() { |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
320 if (button == ui::DIALOG_BUTTON_CANCEL) | 337 if (button == ui::DIALOG_BUTTON_CANCEL) |
321 return l10n_util::GetStringUTF16(IDS_PERMISSION_DENY); | 338 return l10n_util::GetStringUTF16(IDS_PERMISSION_DENY); |
322 | 339 |
323 // The text differs based on whether OK is the only visible button. | 340 // The text differs based on whether OK is the only visible button. |
324 return l10n_util::GetStringUTF16(GetDialogButtons() == ui::DIALOG_BUTTON_OK | 341 return l10n_util::GetStringUTF16(GetDialogButtons() == ui::DIALOG_BUTTON_OK |
325 ? IDS_OK | 342 ? IDS_OK |
326 : IDS_PERMISSION_ALLOW); | 343 : IDS_PERMISSION_ALLOW); |
327 } | 344 } |
328 | 345 |
329 bool PermissionsBubbleDialogDelegateView::Cancel() { | 346 bool PermissionsBubbleDialogDelegateView::Cancel() { |
330 if (owner_) | 347 if (owner_) { |
348 bool persist = !checkbox_ || checkbox_->checked(); | |
msw
2016/08/24 17:31:24
Why would we set persist to true if we didn't even
dominickn
2016/08/24 17:50:26
Permission decisions are persisted by default, so
| |
349 owner_->TogglePersist(persist); | |
msw
2016/08/24 17:31:24
Why notify the owner of the persist decision when
dominickn
2016/08/24 17:50:26
"Cancelling" the bubble is actually choosing to bl
| |
331 owner_->Deny(); | 350 owner_->Deny(); |
351 } | |
332 return true; | 352 return true; |
333 } | 353 } |
334 | 354 |
335 bool PermissionsBubbleDialogDelegateView::Accept() { | 355 bool PermissionsBubbleDialogDelegateView::Accept() { |
336 if (owner_) | 356 if (owner_) { |
357 bool persist = !checkbox_ || checkbox_->checked(); | |
msw
2016/08/24 17:31:24
ditto: "bool persist = checkbox_ && checkbox_->che
dominickn
2016/08/24 17:50:26
See above.
| |
358 owner_->TogglePersist(persist); | |
msw
2016/08/24 17:31:24
optional nit: inline the value of persist in this
dominickn
2016/08/24 17:50:26
Done.
| |
337 owner_->Accept(); | 359 owner_->Accept(); |
360 } | |
338 return true; | 361 return true; |
339 } | 362 } |
340 | 363 |
341 bool PermissionsBubbleDialogDelegateView::Close() { | 364 bool PermissionsBubbleDialogDelegateView::Close() { |
342 // Neither explicit accept nor explicit deny. | 365 // Neither explicit accept nor explicit deny. |
343 return true; | 366 return true; |
344 } | 367 } |
345 | 368 |
346 void PermissionsBubbleDialogDelegateView::PermissionSelectionChanged( | 369 void PermissionsBubbleDialogDelegateView::PermissionSelectionChanged( |
347 int index, | 370 int index, |
348 bool allowed) { | 371 bool allowed) { |
349 owner_->Toggle(index, allowed); | 372 owner_->ToggleAccept(index, allowed); |
350 } | 373 } |
351 | 374 |
352 void PermissionsBubbleDialogDelegateView::UpdateAnchor( | 375 void PermissionsBubbleDialogDelegateView::UpdateAnchor( |
353 views::View* anchor_view, | 376 views::View* anchor_view, |
354 const gfx::Point& anchor_point, | 377 const gfx::Point& anchor_point, |
355 views::BubbleBorder::Arrow anchor_arrow) { | 378 views::BubbleBorder::Arrow anchor_arrow) { |
356 set_arrow(anchor_arrow); | 379 set_arrow(anchor_arrow); |
357 | 380 |
358 // Update the border in the bubble: will either add or remove the arrow. | 381 // Update the border in the bubble: will either add or remove the arrow. |
359 views::BubbleFrameView* frame = | 382 views::BubbleFrameView* frame = |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
439 return nullptr; | 462 return nullptr; |
440 } | 463 } |
441 | 464 |
442 void PermissionPromptImpl::Closing() { | 465 void PermissionPromptImpl::Closing() { |
443 if (bubble_delegate_) | 466 if (bubble_delegate_) |
444 bubble_delegate_ = nullptr; | 467 bubble_delegate_ = nullptr; |
445 if (delegate_) | 468 if (delegate_) |
446 delegate_->Closing(); | 469 delegate_->Closing(); |
447 } | 470 } |
448 | 471 |
449 void PermissionPromptImpl::Toggle(int index, bool value) { | 472 void PermissionPromptImpl::ToggleAccept(int index, bool value) { |
450 if (delegate_) | 473 if (delegate_) |
451 delegate_->ToggleAccept(index, value); | 474 delegate_->ToggleAccept(index, value); |
452 } | 475 } |
453 | 476 |
477 void PermissionPromptImpl::TogglePersist(bool value) { | |
msw
2016/08/24 17:31:24
It's a bit strange to call a setter "toggle", wher
dominickn
2016/08/24 17:50:26
They're named like this for consistency with Permi
msw
2016/08/24 17:59:55
Ok, perhaps there will be an opportunity to pick a
raymes
2016/08/25 05:26:01
I agree with msw (had the same thought when I was
| |
478 if (delegate_) | |
479 delegate_->TogglePersist(value); | |
480 } | |
481 | |
454 void PermissionPromptImpl::Accept() { | 482 void PermissionPromptImpl::Accept() { |
455 if (delegate_) | 483 if (delegate_) |
456 delegate_->Accept(); | 484 delegate_->Accept(); |
457 } | 485 } |
458 | 486 |
459 void PermissionPromptImpl::Deny() { | 487 void PermissionPromptImpl::Deny() { |
460 if (delegate_) | 488 if (delegate_) |
461 delegate_->Deny(); | 489 delegate_->Deny(); |
462 } | 490 } |
OLD | NEW |