| Index: chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm
|
| diff --git a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm
|
| deleted file mode 100644
|
| index fb360b4fcb7b844b97d76a5b8989d7002e2048f5..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm
|
| +++ /dev/null
|
| @@ -1,412 +0,0 @@
|
| -// Copyright 2014 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/permission_bubble_controller.h"
|
| -
|
| -#include <Carbon/Carbon.h>
|
| -
|
| -#include "base/mac/foundation_util.h"
|
| -#import "base/mac/scoped_objc_class_swizzler.h"
|
| -#include "base/mac/sdk_forward_declarations.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/strings/sys_string_conversions.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/permissions/mock_permission_request.h"
|
| -#include "chrome/browser/ui/browser.h"
|
| -#include "chrome/browser/ui/browser_window.h"
|
| -#include "chrome/browser/ui/cocoa/browser_window_controller.h"
|
| -#include "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h"
|
| -#import "chrome/browser/ui/cocoa/page_info/split_block_button.h"
|
| -#import "chrome/browser/ui/cocoa/test/cocoa_profile_test.h"
|
| -#include "chrome/browser/ui/cocoa/test/run_loop_testing.h"
|
| -#import "chrome/browser/ui/cocoa/website_settings/permission_bubble_cocoa.h"
|
| -#include "chrome/grit/generated_resources.h"
|
| -#include "components/strings/grit/components_strings.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#import "testing/gtest_mac.h"
|
| -#include "ui/base/cocoa/cocoa_base_utils.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -#include "ui/base/l10n/l10n_util_mac.h"
|
| -#import "ui/events/test/cocoa_test_event_utils.h"
|
| -
|
| -@class ConstrainedWindowButton;
|
| -
|
| -@interface PermissionBubbleController (ExposedForTesting)
|
| -- (void)ok:(id)sender;
|
| -- (void)onAllow:(id)sender;
|
| -- (void)onBlock:(id)sender;
|
| -- (void)onCustomize:(id)sender;
|
| -- (void)onCheckboxChanged:(id)sender;
|
| -+ (NSInteger)getFullscreenLeftOffset;
|
| -@end
|
| -
|
| -@interface SplitBlockButton (ExposedForTesting)
|
| -- (NSMenu*)menu;
|
| -@end
|
| -
|
| -@interface MockBubbleYesLocationBar : NSObject
|
| -@end
|
| -
|
| -@implementation MockBubbleYesLocationBar
|
| -+ (bool)hasVisibleLocationBarForBrowser:(Browser*)browser { return true; }
|
| -@end
|
| -
|
| -@interface MockBubbleNoLocationBar : NSObject
|
| -@end
|
| -
|
| -@implementation MockBubbleNoLocationBar
|
| -+ (bool)hasVisibleLocationBarForBrowser:(Browser*)browser { return false; }
|
| -@end
|
| -
|
| -namespace {
|
| -const char* const kPermissionA = "Permission A";
|
| -const char* const kPermissionB = "Permission B";
|
| -const char* const kPermissionC = "Permission C";
|
| -}
|
| -
|
| -class PermissionBubbleControllerTest : public CocoaProfileTest,
|
| - public PermissionPrompt::Delegate {
|
| - public:
|
| -
|
| - MOCK_METHOD2(ToggleAccept, void(int, bool));
|
| - MOCK_METHOD1(TogglePersist, void(bool));
|
| - MOCK_METHOD0(SetCustomizationMode, void());
|
| - MOCK_METHOD0(Accept, void());
|
| - MOCK_METHOD0(Deny, void());
|
| - MOCK_METHOD0(Closing, void());
|
| - MOCK_METHOD1(SetView, void(PermissionPrompt*));
|
| -
|
| - void SetUp() override {
|
| - CocoaProfileTest::SetUp();
|
| - bridge_.reset(new PermissionBubbleCocoa(browser()));
|
| - AddRequest(kPermissionA);
|
| - controller_ =
|
| - [[PermissionBubbleController alloc] initWithBrowser:browser()
|
| - bridge:bridge_.get()];
|
| - }
|
| -
|
| - void TearDown() override {
|
| - [controller_ close];
|
| - chrome::testing::NSRunLoopRunAllPending();
|
| - owned_requests_.clear();
|
| - CocoaProfileTest::TearDown();
|
| - }
|
| -
|
| - void AddRequest(const std::string& title) {
|
| - std::unique_ptr<MockPermissionRequest> request =
|
| - base::MakeUnique<MockPermissionRequest>(
|
| - title, l10n_util::GetStringUTF8(IDS_PERMISSION_ALLOW),
|
| - l10n_util::GetStringUTF8(IDS_PERMISSION_DENY));
|
| - requests_.push_back(request.get());
|
| - owned_requests_.push_back(std::move(request));
|
| - }
|
| -
|
| - NSButton* FindButtonWithTitle(const std::string& title) {
|
| - return FindButtonWithTitle(base::SysUTF8ToNSString(title),
|
| - [ConstrainedWindowButton class]);
|
| - }
|
| -
|
| - NSButton* FindButtonWithTitle(int title_id) {
|
| - return FindButtonWithTitle(l10n_util::GetNSString(title_id),
|
| - [ConstrainedWindowButton class]);
|
| - }
|
| -
|
| - NSButton* FindMenuButtonWithTitle(int title_id) {
|
| - return FindButtonWithTitle(l10n_util::GetNSString(title_id),
|
| - [NSPopUpButton class]);
|
| - }
|
| -
|
| - // IDS_PERMISSION_ALLOW and IDS_PERMISSION_DENY are used for two distinct
|
| - // UI elements, both of which derive from NSButton. So check the expected
|
| - // class, not just NSButton, as well as the title.
|
| - NSButton* FindButtonWithTitle(NSString* title, Class button_class) {
|
| - for (NSButton* view in [[controller_ bubble] subviews]) {
|
| - if ([view isKindOfClass:button_class] &&
|
| - [title isEqualToString:[view title]]) {
|
| - return view;
|
| - }
|
| - }
|
| - return nil;
|
| - }
|
| -
|
| - NSTextField* FindTextFieldWithString(const std::string& text) {
|
| - NSView* parent = base::mac::ObjCCastStrict<NSView>([controller_ bubble]);
|
| - return FindTextFieldWithString(parent, base::SysUTF8ToNSString(text));
|
| - }
|
| -
|
| - NSTextField* FindTextFieldWithString(NSView* view, NSString* text) {
|
| - NSTextField* textField = nil;
|
| - for (NSView* child in [view subviews]) {
|
| - textField = base::mac::ObjCCast<NSTextField>(child);
|
| - if (![[textField stringValue] hasSuffix:text]) {
|
| - textField = FindTextFieldWithString(child, text);
|
| - if (textField)
|
| - break;
|
| - }
|
| - }
|
| - return textField;
|
| - }
|
| -
|
| - void ChangePermissionMenuSelection(NSButton* menu_button, int next_title_id) {
|
| - NSMenu* menu = [base::mac::ObjCCastStrict<NSPopUpButton>(menu_button) menu];
|
| - NSString* next_title = l10n_util::GetNSString(next_title_id);
|
| - EXPECT_EQ([[menu itemWithTitle:[menu_button title]] state], NSOnState);
|
| - NSMenuItem* next_item = [menu itemWithTitle:next_title];
|
| - EXPECT_EQ([next_item state], NSOffState);
|
| - [menu performActionForItemAtIndex:[menu indexOfItem:next_item]];
|
| - }
|
| -
|
| - protected:
|
| - PermissionBubbleController* controller_; // Weak; it deletes itself.
|
| - std::unique_ptr<PermissionBubbleCocoa> bridge_;
|
| - std::vector<PermissionRequest*> requests_;
|
| - std::vector<std::unique_ptr<PermissionRequest>> owned_requests_;
|
| - std::vector<bool> accept_states_;
|
| -};
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, ShowAndClose) {
|
| - EXPECT_FALSE([[controller_ window] isVisible]);
|
| - [controller_ showWindow:nil];
|
| - EXPECT_TRUE([[controller_ window] isVisible]);
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, ShowSinglePermission) {
|
| - [controller_ showWithDelegate:this
|
| - forRequests:requests_
|
| - acceptStates:accept_states_];
|
| -
|
| - EXPECT_TRUE(FindTextFieldWithString(kPermissionA));
|
| - EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_ALLOW));
|
| - EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_DENY));
|
| - EXPECT_FALSE(FindButtonWithTitle(IDS_OK));
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissions) {
|
| - AddRequest(kPermissionB);
|
| - AddRequest(kPermissionC);
|
| -
|
| - accept_states_.push_back(true); // A
|
| - accept_states_.push_back(true); // B
|
| - accept_states_.push_back(true); // C
|
| -
|
| - [controller_ showWithDelegate:this
|
| - forRequests:requests_
|
| - acceptStates:accept_states_];
|
| -
|
| - EXPECT_TRUE(FindTextFieldWithString(kPermissionA));
|
| - EXPECT_TRUE(FindTextFieldWithString(kPermissionB));
|
| - EXPECT_TRUE(FindTextFieldWithString(kPermissionC));
|
| -
|
| - EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW));
|
| - EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY));
|
| - EXPECT_TRUE(FindButtonWithTitle(IDS_OK));
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissionsAllow) {
|
| - AddRequest(kPermissionB);
|
| -
|
| - accept_states_.push_back(true); // A
|
| - accept_states_.push_back(true); // B
|
| -
|
| - [controller_ showWithDelegate:this
|
| - forRequests:requests_
|
| - acceptStates:accept_states_];
|
| -
|
| - // Test that all menus have 'Allow' visible.
|
| - EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW));
|
| - EXPECT_FALSE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY));
|
| -
|
| - EXPECT_TRUE(FindButtonWithTitle(IDS_OK));
|
| - EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW));
|
| - EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY));
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissionsBlock) {
|
| - AddRequest(kPermissionB);
|
| -
|
| - accept_states_.push_back(false); // A
|
| - accept_states_.push_back(false); // B
|
| -
|
| - [controller_ showWithDelegate:this
|
| - forRequests:requests_
|
| - acceptStates:accept_states_];
|
| -
|
| - // Test that all menus have 'Block' visible.
|
| - EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY));
|
| - EXPECT_FALSE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW));
|
| -
|
| - EXPECT_TRUE(FindButtonWithTitle(IDS_OK));
|
| - EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW));
|
| - EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY));
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissionsMixed) {
|
| - AddRequest(kPermissionB);
|
| - AddRequest(kPermissionC);
|
| -
|
| - accept_states_.push_back(false); // A
|
| - accept_states_.push_back(false); // B
|
| - accept_states_.push_back(true); // C
|
| -
|
| - [controller_ showWithDelegate:this
|
| - forRequests:requests_
|
| - acceptStates:accept_states_];
|
| -
|
| - // Test that both 'allow' and 'deny' are visible.
|
| - EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY));
|
| - EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW));
|
| -
|
| - EXPECT_TRUE(FindButtonWithTitle(IDS_OK));
|
| - EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW));
|
| - EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY));
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, OK) {
|
| - AddRequest(kPermissionB);
|
| -
|
| - accept_states_.push_back(true); // A
|
| - accept_states_.push_back(true); // B
|
| -
|
| - [controller_ showWithDelegate:this
|
| - forRequests:requests_
|
| - acceptStates:accept_states_];
|
| -
|
| - EXPECT_CALL(*this, Accept()).Times(1);
|
| - [FindButtonWithTitle(IDS_OK) performClick:nil];
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, Allow) {
|
| - [controller_ showWithDelegate:this
|
| - forRequests:requests_
|
| - acceptStates:accept_states_];
|
| -
|
| - EXPECT_CALL(*this, Accept()).Times(1);
|
| - [FindButtonWithTitle(IDS_PERMISSION_ALLOW) performClick:nil];
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, Deny) {
|
| - [controller_ showWithDelegate:this
|
| - forRequests:requests_
|
| - acceptStates:accept_states_];
|
| -
|
| - EXPECT_CALL(*this, Deny()).Times(1);
|
| - [FindButtonWithTitle(IDS_PERMISSION_DENY) performClick:nil];
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, ChangePermissionSelection) {
|
| - AddRequest(kPermissionB);
|
| -
|
| - accept_states_.push_back(true); // A
|
| - accept_states_.push_back(false); // B
|
| -
|
| - [controller_ showWithDelegate:this
|
| - forRequests:requests_
|
| - acceptStates:accept_states_];
|
| -
|
| - EXPECT_CALL(*this, ToggleAccept(0, false)).Times(1);
|
| - EXPECT_CALL(*this, ToggleAccept(1, true)).Times(1);
|
| - NSButton* menu_a = FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW);
|
| - NSButton* menu_b = FindMenuButtonWithTitle(IDS_PERMISSION_DENY);
|
| - ChangePermissionMenuSelection(menu_a, IDS_PERMISSION_DENY);
|
| - ChangePermissionMenuSelection(menu_b, IDS_PERMISSION_ALLOW);
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, EscapeCloses) {
|
| - [controller_ showWithDelegate:this
|
| - forRequests:requests_
|
| - acceptStates:accept_states_];
|
| -
|
| - EXPECT_TRUE([[controller_ window] isVisible]);
|
| - [[controller_ window]
|
| - performKeyEquivalent:cocoa_test_event_utils::KeyEventWithKeyCode(
|
| - kVK_Escape, '\e', NSKeyDown, 0)];
|
| - EXPECT_FALSE([[controller_ window] isVisible]);
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, EnterFullscreen) {
|
| - [controller_ showWithDelegate:this
|
| - forRequests:requests_
|
| - acceptStates:accept_states_];
|
| -
|
| - EXPECT_TRUE([[controller_ window] isVisible]);
|
| -
|
| - // Post the "enter fullscreen" notification.
|
| - NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
|
| - [center postNotificationName:NSWindowWillEnterFullScreenNotification
|
| - object:test_window()];
|
| -
|
| - EXPECT_TRUE([[controller_ window] isVisible]);
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, ExitFullscreen) {
|
| - [controller_ showWithDelegate:this
|
| - forRequests:requests_
|
| - acceptStates:accept_states_];
|
| -
|
| - EXPECT_TRUE([[controller_ window] isVisible]);
|
| -
|
| - // Post the "enter fullscreen" notification.
|
| - NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
|
| - [center postNotificationName:NSWindowWillExitFullScreenNotification
|
| - object:test_window()];
|
| -
|
| - EXPECT_TRUE([[controller_ window] isVisible]);
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, AnchorPositionWithLocationBar) {
|
| - base::mac::ScopedObjCClassSwizzler locationSwizzle(
|
| - [PermissionBubbleController class], [MockBubbleYesLocationBar class],
|
| - @selector(hasVisibleLocationBarForBrowser:));
|
| -
|
| - NSPoint anchor = [controller_ getExpectedAnchorPoint];
|
| -
|
| - // Expected anchor location will be the same as the page info bubble.
|
| - NSWindow* window = browser()->window()->GetNativeWindow();
|
| - BrowserWindowController* controller =
|
| - [BrowserWindowController browserWindowControllerForWindow:window];
|
| - LocationBarViewMac* location_bar_bridge = [controller locationBarBridge];
|
| - NSPoint expected = location_bar_bridge->GetPageInfoBubblePoint();
|
| - expected = ui::ConvertPointFromWindowToScreen(window, expected);
|
| - EXPECT_NSEQ(expected, anchor);
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest, AnchorPositionWithoutLocationBar) {
|
| - base::mac::ScopedObjCClassSwizzler locationSwizzle(
|
| - [PermissionBubbleController class], [MockBubbleNoLocationBar class],
|
| - @selector(hasVisibleLocationBarForBrowser:));
|
| -
|
| - NSPoint anchor = [controller_ getExpectedAnchorPoint];
|
| -
|
| - // Expected anchor location will be top left when there's no location bar.
|
| - NSWindow* window = browser()->window()->GetNativeWindow();
|
| - NSRect frame = [[window contentView] frame];
|
| - NSPoint expected = NSMakePoint(
|
| - NSMinX(frame) + [PermissionBubbleController getFullscreenLeftOffset],
|
| - NSMaxY(frame));
|
| - expected = ui::ConvertPointFromWindowToScreen(window, expected);
|
| - EXPECT_NSEQ(expected, anchor);
|
| -}
|
| -
|
| -TEST_F(PermissionBubbleControllerTest,
|
| - AnchorPositionDifferentWithAndWithoutLocationBar) {
|
| - NSPoint withLocationBar;
|
| - {
|
| - base::mac::ScopedObjCClassSwizzler locationSwizzle(
|
| - [PermissionBubbleController class], [MockBubbleYesLocationBar class],
|
| - @selector(hasVisibleLocationBarForBrowser:));
|
| - withLocationBar = [controller_ getExpectedAnchorPoint];
|
| - }
|
| -
|
| - NSPoint withoutLocationBar;
|
| - {
|
| - base::mac::ScopedObjCClassSwizzler locationSwizzle(
|
| - [PermissionBubbleController class], [MockBubbleNoLocationBar class],
|
| - @selector(hasVisibleLocationBarForBrowser:));
|
| - withoutLocationBar = [controller_ getExpectedAnchorPoint];
|
| - }
|
| -
|
| - // The bubble should be in different places depending if the location bar is
|
| - // available or not.
|
| - EXPECT_NSNE(withLocationBar, withoutLocationBar);
|
| -}
|
|
|