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

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

Issue 2748443005: Rename website_settings UI folders to permission_bubble. (Closed)
Patch Set: Rebase. Created 3 years, 9 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/chooser_bubble_ui_cocoa.mm
diff --git a/chrome/browser/ui/cocoa/website_settings/chooser_bubble_ui_cocoa.mm b/chrome/browser/ui/cocoa/website_settings/chooser_bubble_ui_cocoa.mm
deleted file mode 100644
index f7e8f1ee5a946911bf429f9a0128f12b71888193..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/cocoa/website_settings/chooser_bubble_ui_cocoa.mm
+++ /dev/null
@@ -1,333 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "chrome/browser/ui/cocoa/website_settings/chooser_bubble_ui_cocoa.h"
-
-#include <stddef.h>
-
-#include <algorithm>
-#include <cmath>
-
-#include "base/mac/scoped_nsobject.h"
-#include "base/memory/ptr_util.h"
-#include "base/strings/sys_string_conversions.h"
-#include "chrome/browser/chooser_controller/chooser_controller.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_window.h"
-#import "chrome/browser/ui/cocoa/base_bubble_controller.h"
-#import "chrome/browser/ui/cocoa/browser_window_controller.h"
-#import "chrome/browser/ui/cocoa/browser_window_utils.h"
-#import "chrome/browser/ui/cocoa/device_chooser_content_view_cocoa.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/website_settings/chooser_bubble_delegate.h"
-#include "components/bubble/bubble_controller.h"
-#include "content/public/browser/native_web_keyboard_event.h"
-#include "ui/base/cocoa/cocoa_base_utils.h"
-#include "ui/base/cocoa/window_size_constants.h"
-
-std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
- return base::MakeUnique<ChooserBubbleUiCocoa>(browser_,
- std::move(chooser_controller_));
-}
-
-@interface ChooserBubbleUiController
- : BaseBubbleController<NSTableViewDataSource, NSTableViewDelegate> {
- @private
- // Bridge to the C++ class that created this object.
- ChooserBubbleUiCocoa* bridge_; // Weak.
- bool buttonPressed_;
-
- base::scoped_nsobject<DeviceChooserContentViewCocoa>
- deviceChooserContentView_;
- NSTableView* tableView_; // Weak.
- NSButton* connectButton_; // Weak.
- NSButton* cancelButton_; // Weak.
-
- Browser* browser_; // Weak.
-}
-
-// Designated initializer. |browser| and |bridge| must both be non-nil.
-- (id)initWithBrowser:(Browser*)browser
- chooserController:(std::unique_ptr<ChooserController>)chooserController
- bridge:(ChooserBubbleUiCocoa*)bridge;
-
-// Makes the bubble visible.
-- (void)show;
-
-// Will reposition the bubble based in case the anchor or parent should change.
-- (void)updateAnchorPosition;
-
-// Will calculate the expected anchor point for this bubble.
-// Should only be used outside this class for tests.
-- (NSPoint)getExpectedAnchorPoint;
-
-// Returns true if the browser has support for the location bar.
-// Should only be used outside this class for tests.
-- (bool)hasLocationBar;
-
-// Update |tableView_| when chooser options changed.
-- (void)updateTableView;
-
-// Determines if the bubble has an anchor in a corner or no anchor at all.
-- (info_bubble::BubbleArrowLocation)getExpectedArrowLocation;
-
-// Returns the expected parent for this bubble.
-- (NSWindow*)getExpectedParentWindow;
-
-// Called when the "Connect" button is pressed.
-- (void)onConnect:(id)sender;
-
-// Called when the "Cancel" button is pressed.
-- (void)onCancel:(id)sender;
-
-@end
-
-@implementation ChooserBubbleUiController
-
-- (id)initWithBrowser:(Browser*)browser
- chooserController:(std::unique_ptr<ChooserController>)chooserController
- bridge:(ChooserBubbleUiCocoa*)bridge {
- DCHECK(browser);
- DCHECK(chooserController);
- DCHECK(bridge);
-
- browser_ = browser;
-
- base::scoped_nsobject<InfoBubbleWindow> window([[InfoBubbleWindow alloc]
- initWithContentRect:ui::kWindowSizeDeterminedLater
- styleMask:NSBorderlessWindowMask
- backing:NSBackingStoreBuffered
- defer:NO]);
- [window setAllowedAnimations:info_bubble::kAnimateNone];
- [window setReleasedWhenClosed:NO];
- if ((self = [super initWithWindow:window
- parentWindow:[self getExpectedParentWindow]
- anchoredAt:NSZeroPoint])) {
- [self setShouldCloseOnResignKey:YES];
- [self setShouldOpenAsKeyWindow:YES];
- [[self bubble] setArrowLocation:[self getExpectedArrowLocation]];
- bridge_ = bridge;
- NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
- [center addObserver:self
- selector:@selector(parentWindowDidMove:)
- name:NSWindowDidMoveNotification
- object:[self getExpectedParentWindow]];
-
- base::string16 chooserTitle = chooserController->GetTitle();
- deviceChooserContentView_.reset([[DeviceChooserContentViewCocoa alloc]
- initWithChooserTitle:base::SysUTF16ToNSString(chooserTitle)
- chooserController:std::move(chooserController)]);
-
- tableView_ = [deviceChooserContentView_ tableView];
- connectButton_ = [deviceChooserContentView_ connectButton];
- cancelButton_ = [deviceChooserContentView_ cancelButton];
-
- [connectButton_ setTarget:self];
- [connectButton_ setAction:@selector(onConnect:)];
- [cancelButton_ setTarget:self];
- [cancelButton_ setAction:@selector(onCancel:)];
- [tableView_ setDelegate:self];
- [tableView_ setDataSource:self];
-
- [[[self window] contentView] addSubview:deviceChooserContentView_.get()];
- }
-
- return self;
-}
-
-- (void)windowWillClose:(NSNotification*)notification {
- [[NSNotificationCenter defaultCenter]
- removeObserver:self
- name:NSWindowDidMoveNotification
- object:nil];
- if (!buttonPressed_)
- [deviceChooserContentView_ close];
- bridge_->OnBubbleClosing();
- [super windowWillClose:notification];
-}
-
-- (void)parentWindowWillToggleFullScreen:(NSNotification*)notification {
- // Override the base class implementation, which would have closed the bubble.
-}
-
-- (void)parentWindowDidResize:(NSNotification*)notification {
- [self setAnchorPoint:[self getExpectedAnchorPoint]];
-}
-
-- (void)parentWindowDidMove:(NSNotification*)notification {
- DCHECK(bridge_);
- [self setAnchorPoint:[self getExpectedAnchorPoint]];
-}
-
-- (void)show {
- NSRect bubbleFrame =
- [[self window] frameRectForContentRect:[deviceChooserContentView_ frame]];
- if ([[self window] isVisible]) {
- // Unfortunately, calling -setFrame followed by -setFrameOrigin (called
- // within -setAnchorPoint) causes flickering. Avoid the flickering by
- // manually adjusting the new frame's origin so that the top left stays the
- // same, and only calling -setFrame.
- NSRect currentWindowFrame = [[self window] frame];
- bubbleFrame.origin = currentWindowFrame.origin;
- bubbleFrame.origin.y = bubbleFrame.origin.y +
- currentWindowFrame.size.height -
- bubbleFrame.size.height;
- [[self window] setFrame:bubbleFrame display:YES];
- } else {
- [[self window] setFrame:bubbleFrame display:NO];
- [self setAnchorPoint:[self getExpectedAnchorPoint]];
- [self showWindow:nil];
- [[self window] makeFirstResponder:nil];
- [[self window] setInitialFirstResponder:tableView_];
- }
-}
-
-- (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView {
- return [deviceChooserContentView_ numberOfOptions];
-}
-
-- (NSView*)tableView:(NSTableView*)tableView
- viewForTableColumn:(NSTableColumn*)tableColumn
- row:(NSInteger)row {
- return [deviceChooserContentView_ createTableRowView:row].autorelease();
-}
-
-- (BOOL)tableView:(NSTableView*)aTableView
- shouldEditTableColumn:(NSTableColumn*)aTableColumn
- row:(NSInteger)rowIndex {
- return NO;
-}
-
-- (CGFloat)tableView:(NSTableView*)tableView heightOfRow:(NSInteger)row {
- return [deviceChooserContentView_ tableRowViewHeight:row];
-}
-
-- (void)updateTableView {
- [deviceChooserContentView_ updateTableView];
-}
-
-- (void)tableViewSelectionDidChange:(NSNotification*)aNotification {
- [deviceChooserContentView_ updateContentRowColor];
- [connectButton_ setEnabled:[tableView_ numberOfSelectedRows] > 0];
-}
-
-// Selection changes (while the mouse button is still down).
-- (void)tableViewSelectionIsChanging:(NSNotification*)aNotification {
- [deviceChooserContentView_ updateContentRowColor];
- [connectButton_ setEnabled:[tableView_ numberOfSelectedRows] > 0];
-}
-
-- (void)updateAnchorPosition {
- [self setParentWindow:[self getExpectedParentWindow]];
- [self setAnchorPoint:[self getExpectedAnchorPoint]];
-}
-
-- (NSPoint)getExpectedAnchorPoint {
- NSPoint anchor;
- if ([self hasLocationBar]) {
- LocationBarViewMac* locationBar =
- [[[self getExpectedParentWindow] windowController] locationBarBridge];
- anchor = locationBar->GetPageInfoBubblePoint();
- } else {
- // Center the bubble if there's no location bar.
- NSRect contentFrame = [[[self getExpectedParentWindow] contentView] frame];
- anchor = NSMakePoint(NSMidX(contentFrame), NSMaxY(contentFrame));
- }
-
- return ui::ConvertPointFromWindowToScreen([self getExpectedParentWindow],
- anchor);
-}
-
-- (bool)hasLocationBar {
- return browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR);
-}
-
-- (info_bubble::BubbleArrowLocation)getExpectedArrowLocation {
- return [self hasLocationBar] ? info_bubble::kTopLeading
- : info_bubble::kNoArrow;
-}
-
-- (NSWindow*)getExpectedParentWindow {
- DCHECK(browser_->window());
- return browser_->window()->GetNativeWindow();
-}
-
-+ (CGFloat)matchWidthsOf:(NSView*)viewA andOf:(NSView*)viewB {
- NSRect frameA = [viewA frame];
- NSRect frameB = [viewB frame];
- CGFloat width = std::max(NSWidth(frameA), NSWidth(frameB));
- [viewA setFrameSize:NSMakeSize(width, NSHeight(frameA))];
- [viewB setFrameSize:NSMakeSize(width, NSHeight(frameB))];
- return width;
-}
-
-+ (void)alignCenterOf:(NSView*)viewA verticallyToCenterOf:(NSView*)viewB {
- NSRect frameA = [viewA frame];
- NSRect frameB = [viewB frame];
- frameA.origin.y =
- NSMinY(frameB) + std::floor((NSHeight(frameB) - NSHeight(frameA)) / 2);
- [viewA setFrameOrigin:frameA.origin];
-}
-
-- (void)onConnect:(id)sender {
- buttonPressed_ = true;
- [deviceChooserContentView_ accept];
- if (self.bubbleReference)
- self.bubbleReference->CloseBubble(BUBBLE_CLOSE_ACCEPTED);
- [self close];
-}
-
-- (void)onCancel:(id)sender {
- buttonPressed_ = true;
- [deviceChooserContentView_ cancel];
- if (self.bubbleReference)
- self.bubbleReference->CloseBubble(BUBBLE_CLOSE_CANCELED);
- [self close];
-}
-
-@end
-
-ChooserBubbleUiCocoa::ChooserBubbleUiCocoa(
- Browser* browser,
- std::unique_ptr<ChooserController> chooser_controller)
- : browser_(browser),
- chooser_bubble_ui_controller_(nil) {
- DCHECK(browser_);
- DCHECK(chooser_controller);
- chooser_bubble_ui_controller_ = [[ChooserBubbleUiController alloc]
- initWithBrowser:browser_
- chooserController:std::move(chooser_controller)
- bridge:this];
-}
-
-ChooserBubbleUiCocoa::~ChooserBubbleUiCocoa() {
- if (chooser_bubble_ui_controller_) {
- [chooser_bubble_ui_controller_ close];
- chooser_bubble_ui_controller_ = nil;
- }
-}
-
-void ChooserBubbleUiCocoa::Show(BubbleReference bubble_reference) {
- [chooser_bubble_ui_controller_ setBubbleReference:bubble_reference];
- [chooser_bubble_ui_controller_ show];
- [chooser_bubble_ui_controller_ updateTableView];
-}
-
-void ChooserBubbleUiCocoa::Close() {
- if (chooser_bubble_ui_controller_) {
- [chooser_bubble_ui_controller_ close];
- chooser_bubble_ui_controller_ = nil;
- }
-}
-
-void ChooserBubbleUiCocoa::UpdateAnchorPosition() {
- if (chooser_bubble_ui_controller_)
- [chooser_bubble_ui_controller_ updateAnchorPosition];
-}
-
-void ChooserBubbleUiCocoa::OnBubbleClosing() {
- chooser_bubble_ui_controller_ = nil;
-}

Powered by Google App Engine
This is Rietveld 408576698