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

Unified Diff: chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm

Issue 1292353006: Mac Changes for BubbleManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mcdb-mac-3.gitbr
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm
index 65c00a71c5ef99c003814153880cd027517cba86..601ed2e19de95c6c24573a232135a3e7095bf731 100644
--- a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm
+++ b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm
@@ -11,6 +11,7 @@
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/browser_window.h"
#import "chrome/browser/ui/chrome_style.h"
#import "chrome/browser/ui/cocoa/browser_window_controller.h"
#import "chrome/browser/ui/cocoa/browser_window_utils.h"
@@ -18,12 +19,13 @@
#import "chrome/browser/ui/cocoa/hover_close_button.h"
#import "chrome/browser/ui/cocoa/info_bubble_view.h"
#import "chrome/browser/ui/cocoa/info_bubble_window.h"
+#import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h"
#include "chrome/browser/ui/cocoa/website_settings/permission_bubble_cocoa.h"
#include "chrome/browser/ui/cocoa/website_settings/permission_selector_button.h"
#include "chrome/browser/ui/cocoa/website_settings/split_block_button.h"
#include "chrome/browser/ui/cocoa/website_settings/website_settings_utils_cocoa.h"
+#include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
#include "chrome/browser/ui/website_settings/permission_bubble_request.h"
-#include "chrome/browser/ui/website_settings/permission_bubble_view.h"
#include "chrome/browser/ui/website_settings/permission_menu_model.h"
#include "chrome/grit/generated_resources.h"
#include "content/public/browser/native_web_keyboard_event.h"
@@ -82,7 +84,7 @@ class MenuDelegate : public ui::SimpleMenuModel::Delegate {
- (id)initForURL:(const GURL&)url
allowed:(BOOL)allow
index:(int)index
- delegate:(PermissionBubbleView::Delegate*)delegate;
+ manager:(PermissionBubbleManager*)manager;
// Returns the maximum width of its possible titles.
- (CGFloat)maximumTitleWidth;
@@ -93,22 +95,21 @@ class MenuDelegate : public ui::SimpleMenuModel::Delegate {
- (id)initForURL:(const GURL&)url
allowed:(BOOL)allow
index:(int)index
- delegate:(PermissionBubbleView::Delegate*)delegate {
+ manager:(PermissionBubbleManager*)manager {
if (self = [super initWithFrame:NSZeroRect pullsDown:NO]) {
ContentSetting setting =
allow ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK;
[self setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
[self setBordered:NO];
- __block PermissionBubbleView::Delegate* blockDelegate = delegate;
+ __block PermissionBubbleManager* blockManager = manager;
__block AllowBlockMenuButton* blockSelf = self;
PermissionMenuModel::ChangeCallback changeCallback =
base::BindBlock(^(const WebsiteSettingsUI::PermissionInfo& permission) {
- blockDelegate->ToggleAccept(
- index, permission.setting == CONTENT_SETTING_ALLOW);
- [blockSelf setFrameSize:
- SizeForWebsiteSettingsButtonTitle(blockSelf,
- [blockSelf title])];
+ blockManager->ToggleAccept(
+ index, permission.setting == CONTENT_SETTING_ALLOW);
+ [blockSelf setFrameSize:SizeForWebsiteSettingsButtonTitle(
+ blockSelf, [blockSelf title])];
});
menuModel_.reset(new PermissionMenuModel(url, setting, changeCallback));
@@ -217,10 +218,10 @@ class MenuDelegate : public ui::SimpleMenuModel::Delegate {
@implementation PermissionBubbleController
-- (id)initWithParentWindow:(NSWindow*)parentWindow
- bridge:(PermissionBubbleCocoa*)bridge {
- DCHECK(parentWindow);
+- (id)initWithBrowser:(Browser*)browser bridge:(PermissionBubbleCocoa*)bridge {
+ DCHECK(browser);
DCHECK(bridge);
+ browser_ = browser;
base::scoped_nsobject<PermissionBubbleWindow> window(
[[PermissionBubbleWindow alloc]
initWithContentRect:ui::kWindowSizeDeterminedLater
@@ -230,17 +231,17 @@ class MenuDelegate : public ui::SimpleMenuModel::Delegate {
[window setAllowedAnimations:info_bubble::kAnimateNone];
[window setReleasedWhenClosed:NO];
if ((self = [super initWithWindow:window
- parentWindow:parentWindow
+ parentWindow:[self getExpectedParentWindow]
anchoredAt:NSZeroPoint])) {
[self setShouldCloseOnResignKey:NO];
[self setShouldOpenAsKeyWindow:YES];
- [[self bubble] setArrowLocation:bridge->GetArrowLocation()];
+ [[self bubble] setArrowLocation:[self getExpectedArrowLocation]];
bridge_ = bridge;
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
[center addObserver:self
selector:@selector(parentWindowDidMove:)
name:NSWindowDidMoveNotification
- object:parentWindow];
+ object:[self getExpectedParentWindow]];
}
return self;
}
@@ -256,21 +257,20 @@ class MenuDelegate : public ui::SimpleMenuModel::Delegate {
- (void)parentWindowDidResize:(NSNotification*)notification {
DCHECK(bridge_);
- [self setAnchorPoint:bridge_->GetAnchorPoint()];
+ [self setAnchorPoint:[self getExpectedAnchorPoint]];
}
- (void)parentWindowDidMove:(NSNotification*)notification {
DCHECK(bridge_);
- [self setAnchorPoint:bridge_->GetAnchorPoint()];
+ [self setAnchorPoint:[self getExpectedAnchorPoint]];
}
-- (void)showAtAnchor:(NSPoint)anchorPoint
- withDelegate:(PermissionBubbleView::Delegate*)delegate
- forRequests:(const std::vector<PermissionBubbleRequest*>&)requests
- acceptStates:(const std::vector<bool>&)acceptStates {
+- (void)showWithManager:(PermissionBubbleManager*)manager
+ forRequests:(const std::vector<PermissionBubbleRequest*>&)requests
+ acceptStates:(const std::vector<bool>&)acceptStates {
DCHECK(!requests.empty());
- DCHECK(delegate);
- delegate_ = delegate;
+ DCHECK(manager);
+ manager_ = manager;
NSView* contentView = [[self window] contentView];
[contentView setSubviews:@[]];
@@ -418,13 +418,46 @@ class MenuDelegate : public ui::SimpleMenuModel::Delegate {
[[self window] setFrame:bubbleFrame display:YES];
} else {
[[self window] setFrame:bubbleFrame display:NO];
- [self setAnchorPoint:anchorPoint];
+ [self setAnchorPoint:[self getExpectedAnchorPoint]];
[self showWindow:nil];
[[self window] makeFirstResponder:nil];
[[self window] setInitialFirstResponder:allowOrOkButton.get()];
}
}
+- (void)updateAnchorPosition {
+ [self setParentWindow:[self getExpectedParentWindow]];
+ [self setAnchorPoint:[self getExpectedAnchorPoint]];
+}
+
+- (NSPoint)getExpectedAnchorPoint {
+ NSPoint anchor;
+ if ([self hasLocationBar]) {
+ LocationBarViewMac* location_bar =
+ [[[self getExpectedParentWindow] windowController] locationBarBridge];
+ anchor = location_bar->GetPageInfoBubblePoint();
+ } else {
+ // Center the bubble if there's no location bar.
+ NSView* content_view = [[self getExpectedParentWindow] contentView];
+ anchor.y = NSMaxY(content_view.frame);
+ anchor.x = NSMidX(content_view.frame);
+ }
+
+ return [[self getExpectedParentWindow] convertBaseToScreen:anchor];
+}
+
+- (BOOL)hasLocationBar {
+ return browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR);
+}
+
+- (info_bubble::BubbleArrowLocation)getExpectedArrowLocation {
+ return [self hasLocationBar] ? info_bubble::kTopLeft : info_bubble::kNoArrow;
+}
+
+- (NSWindow*)getExpectedParentWindow {
+ return browser_->window()->GetNativeWindow();
+}
+
- (NSView*)labelForRequest:(PermissionBubbleRequest*)request {
DCHECK(request);
base::scoped_nsobject<NSView> permissionView(
@@ -493,12 +526,12 @@ class MenuDelegate : public ui::SimpleMenuModel::Delegate {
atIndex:(int)index
allow:(BOOL)allow {
DCHECK(request);
- DCHECK(delegate_);
+ DCHECK(manager_);
base::scoped_nsobject<AllowBlockMenuButton> button(
[[AllowBlockMenuButton alloc] initForURL:request->GetRequestingHostname()
allowed:allow
index:index
- delegate:delegate_]);
+ manager:manager_]);
return button.autorelease();
}
@@ -531,23 +564,23 @@ class MenuDelegate : public ui::SimpleMenuModel::Delegate {
}
- (void)ok:(id)sender {
- DCHECK(delegate_);
- delegate_->Accept();
+ DCHECK(manager_);
+ manager_->Accept();
}
- (void)onAllow:(id)sender {
- DCHECK(delegate_);
- delegate_->Accept();
+ DCHECK(manager_);
+ manager_->Accept();
}
- (void)onBlock:(id)sender {
- DCHECK(delegate_);
- delegate_->Deny();
+ DCHECK(manager_);
+ manager_->Deny();
}
- (void)onClose:(id)sender {
- DCHECK(delegate_);
- delegate_->Closing();
+ DCHECK(manager_);
+ manager_->Closing();
}
- (void)activateTabWithContents:(content::WebContents*)newContents

Powered by Google App Engine
This is Rietveld 408576698