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 #import "chrome/browser/ui/cocoa/permission_bubble/permission_bubble_controller.
h" | 5 #import "chrome/browser/ui/cocoa/permission_bubble/permission_bubble_controller.
h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/mac/bind_objc_block.h" | 9 #include "base/mac/bind_objc_block.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 // Override the base class implementation, which sets the anchor point. But | 274 // Override the base class implementation, which sets the anchor point. But |
275 // it's not necessary since BrowserWindowController will notify the | 275 // it's not necessary since BrowserWindowController will notify the |
276 // PermissionRequestManager to update the anchor position on a resize. | 276 // PermissionRequestManager to update the anchor position on a resize. |
277 } | 277 } |
278 | 278 |
279 - (void)parentWindowDidMove:(NSNotification*)notification { | 279 - (void)parentWindowDidMove:(NSNotification*)notification { |
280 DCHECK(bridge_); | 280 DCHECK(bridge_); |
281 [self setAnchorPoint:[self getExpectedAnchorPoint]]; | 281 [self setAnchorPoint:[self getExpectedAnchorPoint]]; |
282 } | 282 } |
283 | 283 |
284 - (void)showWithDelegate:(PermissionPrompt::Delegate*)delegate | 284 - (void)showWithDelegate:(PermissionPrompt::Delegate*)delegate { |
285 forRequests:(const std::vector<PermissionRequest*>&)requests | |
286 acceptStates:(const std::vector<bool>&)acceptStates { | |
287 DCHECK(!requests.empty()); | |
288 DCHECK(delegate); | 285 DCHECK(delegate); |
289 delegate_ = delegate; | 286 delegate_ = delegate; |
290 | 287 |
| 288 const std::vector<PermissionRequest*>& requests = delegate->Requests(); |
| 289 DCHECK(!requests.empty()); |
| 290 |
291 NSView* contentView = [[self window] contentView]; | 291 NSView* contentView = [[self window] contentView]; |
292 [contentView setSubviews:@[]]; | 292 [contentView setSubviews:@[]]; |
293 | 293 |
294 BOOL singlePermission = requests.size() == 1; | 294 BOOL singlePermission = requests.size() == 1; |
295 | 295 |
296 // Create one button to use as a guide for the permissions' y-offsets. | 296 // Create one button to use as a guide for the permissions' y-offsets. |
297 base::scoped_nsobject<NSView> allowOrOkButton; | 297 base::scoped_nsobject<NSView> allowOrOkButton; |
298 if (singlePermission) { | 298 if (singlePermission) { |
299 NSString* allowTitle = l10n_util::GetNSString(IDS_PERMISSION_ALLOW); | 299 NSString* allowTitle = l10n_util::GetNSString(IDS_PERMISSION_ALLOW); |
300 allowOrOkButton.reset([[self buttonWithTitle:allowTitle | 300 allowOrOkButton.reset([[self buttonWithTitle:allowTitle |
(...skipping 15 matching lines...) Expand all Loading... |
316 base::scoped_nsobject<NSView> permissionView( | 316 base::scoped_nsobject<NSView> permissionView( |
317 [[self labelForRequest:(*it)] retain]); | 317 [[self labelForRequest:(*it)] retain]); |
318 NSPoint origin = [permissionView frame].origin; | 318 NSPoint origin = [permissionView frame].origin; |
319 origin.x += kHorizontalPadding; | 319 origin.x += kHorizontalPadding; |
320 origin.y += yOffset + verticalPadding; | 320 origin.y += yOffset + verticalPadding; |
321 [permissionView setFrameOrigin:origin]; | 321 [permissionView setFrameOrigin:origin]; |
322 [contentView addSubview:permissionView]; | 322 [contentView addSubview:permissionView]; |
323 | 323 |
324 if (!singlePermission) { | 324 if (!singlePermission) { |
325 int index = it - requests.begin(); | 325 int index = it - requests.begin(); |
326 base::scoped_nsobject<NSView> menu( | 326 base::scoped_nsobject<NSView> menu([[self |
327 [[self menuForRequest:(*it) | 327 menuForRequest:(*it)atIndex:index |
328 atIndex:index | 328 allow:delegate->AcceptStates()[index] ? YES : NO] retain]); |
329 allow:acceptStates[index] ? YES : NO] retain]); | |
330 // Align vertically. Horizontal alignment will be adjusted once the | 329 // Align vertically. Horizontal alignment will be adjusted once the |
331 // widest permission is know. | 330 // widest permission is know. |
332 [PermissionBubbleController alignCenterOf:menu | 331 [PermissionBubbleController alignCenterOf:menu |
333 verticallyToCenterOf:permissionView]; | 332 verticallyToCenterOf:permissionView]; |
334 [permissionMenus addObject:menu]; | 333 [permissionMenus addObject:menu]; |
335 [contentView addSubview:menu]; | 334 [contentView addSubview:menu]; |
336 } | 335 } |
337 maxPermissionLineWidth = std::max( | 336 maxPermissionLineWidth = std::max( |
338 maxPermissionLineWidth, NSMaxX([permissionView frame])); | 337 maxPermissionLineWidth, NSMaxX([permissionView frame])); |
339 yOffset += NSHeight([permissionView frame]); | 338 yOffset += NSHeight([permissionView frame]); |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 } | 620 } |
622 | 621 |
623 - (IBAction)cancel:(id)sender { | 622 - (IBAction)cancel:(id)sender { |
624 // This is triggered by ESC when the bubble has focus. | 623 // This is triggered by ESC when the bubble has focus. |
625 if (delegate_) | 624 if (delegate_) |
626 delegate_->Closing(); | 625 delegate_->Closing(); |
627 [super cancel:sender]; | 626 [super cancel:sender]; |
628 } | 627 } |
629 | 628 |
630 @end // implementation PermissionBubbleController | 629 @end // implementation PermissionBubbleController |
OLD | NEW |