| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 <Cocoa/Cocoa.h> | 5 #import <Cocoa/Cocoa.h> |
| 6 | 6 |
| 7 #include "base/mac/foundation_util.h" | 7 #include "base/mac/foundation_util.h" |
| 8 #include "base/mac/mac_util.h" | 8 #include "base/mac/mac_util.h" |
| 9 #include "base/mac/scoped_nsobject.h" | 9 #include "base/mac/scoped_nsobject.h" |
| 10 #include "base/strings/sys_string_conversions.h" | 10 #include "base/strings/sys_string_conversions.h" |
| 11 #include "base/test/scoped_feature_list.h" | 11 #include "base/test/scoped_feature_list.h" |
| 12 #include "chrome/app/chrome_command_ids.h" | 12 #include "chrome/app/chrome_command_ids.h" |
| 13 #import "chrome/browser/ui/cocoa/browser_window_controller.h" | 13 #import "chrome/browser/ui/cocoa/browser_window_controller.h" |
| 14 #import "chrome/browser/ui/cocoa/browser_window_touch_bar.h" | 14 #import "chrome/browser/ui/cocoa/browser_window_touch_bar.h" |
| 15 #include "chrome/browser/ui/cocoa/test/cocoa_profile_test.h" | 15 #include "chrome/browser/ui/cocoa/test/cocoa_profile_test.h" |
| 16 #include "chrome/common/chrome_features.h" | 16 #include "chrome/common/chrome_features.h" |
| 17 #include "chrome/common/pref_names.h" | 17 #include "chrome/common/pref_names.h" |
| 18 #include "components/prefs/pref_service.h" | 18 #include "components/prefs/pref_service.h" |
| 19 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 20 #import "third_party/ocmock/OCMock/OCMock.h" | 20 #import "third_party/ocmock/OCMock/OCMock.h" |
| 21 | 21 |
| 22 namespace { |
| 23 |
| 24 // Touch bar identifiers. |
| 25 NSString* const kBrowserWindowTouchBarId = @"browser-window"; |
| 26 NSString* const kTabFullscreenTouchBarId = @"tab-fullscreen"; |
| 27 |
| 28 // Touch bar items identifiers. |
| 29 NSString* const kBackForwardTouchId = @"BACK-FWD"; |
| 30 NSString* const kReloadOrStopTouchId = @"RELOAD-STOP"; |
| 31 NSString* const kHomeTouchId = @"HOME"; |
| 32 NSString* const kSearchTouchId = @"SEARCH"; |
| 33 NSString* const kStarTouchId = @"BOOKMARK"; |
| 34 NSString* const kNewTabTouchId = @"NEW-TAB"; |
| 35 NSString* const kExitFullscreenTouchId = @"EXIT-FULLSCREEN"; |
| 36 NSString* const kFullscreenOriginLabelTouchId = @"FULLSCREEN-ORIGIN-LABEL"; |
| 37 |
| 38 } // namespace |
| 39 |
| 22 class BrowserWindowTouchBarUnitTest : public CocoaProfileTest { | 40 class BrowserWindowTouchBarUnitTest : public CocoaProfileTest { |
| 23 public: | 41 public: |
| 24 void SetUp() override { | 42 void SetUp() override { |
| 25 CocoaProfileTest::SetUp(); | 43 CocoaProfileTest::SetUp(); |
| 26 ASSERT_TRUE(browser()); | 44 ASSERT_TRUE(browser()); |
| 27 | 45 |
| 28 feature_list.InitAndEnableFeature(features::kBrowserTouchBar); | 46 feature_list.InitAndEnableFeature(features::kBrowserTouchBar); |
| 29 | 47 |
| 30 BOOL yes = YES; | 48 BOOL yes = YES; |
| 31 bwc_ = [OCMockObject mockForClass:[BrowserWindowController class]]; | 49 bwc_ = [OCMockObject mockForClass:[BrowserWindowController class]]; |
| 32 [[[bwc_ stub] andReturnValue:OCMOCK_VALUE(yes)] | 50 [[[bwc_ stub] andReturnValue:OCMOCK_VALUE(yes)] |
| 33 isKindOfClass:[BrowserWindowController class]]; | 51 isKindOfClass:[BrowserWindowController class]]; |
| 34 [[bwc_ stub] invalidateTouchBar]; | 52 [[bwc_ stub] invalidateTouchBar]; |
| 35 | 53 |
| 36 touch_bar_.reset([[BrowserWindowTouchBar alloc] initWithBrowser:browser() | 54 touch_bar_.reset([[BrowserWindowTouchBar alloc] initWithBrowser:browser() |
| 37 browserWindowController:bwc_]); | 55 browserWindowController:bwc_]); |
| 38 } | 56 } |
| 39 | 57 |
| 40 id bwc() const { return bwc_; } | 58 id bwc() const { return bwc_; } |
| 41 | 59 |
| 60 NSString* GetFullscreenTouchBarItemId(NSString* id) { |
| 61 return |
| 62 [BrowserWindowTouchBar identifierForTouchBarId:kTabFullscreenTouchBarId |
| 63 itemId:id]; |
| 64 } |
| 65 |
| 66 NSString* GetBrowserTouchBarItemId(NSString* id) { |
| 67 return |
| 68 [BrowserWindowTouchBar identifierForTouchBarId:kBrowserWindowTouchBarId |
| 69 itemId:id]; |
| 70 } |
| 71 |
| 42 void TearDown() override { CocoaProfileTest::TearDown(); } | 72 void TearDown() override { CocoaProfileTest::TearDown(); } |
| 43 | 73 |
| 44 // A mock BrowserWindowController object. | 74 // A mock BrowserWindowController object. |
| 45 id bwc_; | 75 id bwc_; |
| 46 | 76 |
| 47 // Used to enable the the browser window touch bar. | 77 // Used to enable the the browser window touch bar. |
| 48 base::test::ScopedFeatureList feature_list; | 78 base::test::ScopedFeatureList feature_list; |
| 49 | 79 |
| 50 base::scoped_nsobject<BrowserWindowTouchBar> touch_bar_; | 80 base::scoped_nsobject<BrowserWindowTouchBar> touch_bar_; |
| 51 }; | 81 }; |
| 52 | 82 |
| 53 // Tests to check if the touch bar contains the correct items. | 83 // Tests to check if the touch bar contains the correct items. |
| 54 TEST_F(BrowserWindowTouchBarUnitTest, TouchBarItems) { | 84 TEST_F(BrowserWindowTouchBarUnitTest, TouchBarItems) { |
| 55 if (!base::mac::IsAtLeastOS10_12()) | 85 if (!base::mac::IsAtLeastOS10_12()) |
| 56 return; | 86 return; |
| 57 | 87 |
| 58 BOOL yes = YES; | 88 BOOL yes = YES; |
| 59 [[[bwc() expect] andReturnValue:OCMOCK_VALUE(yes)] | 89 [[[bwc() expect] andReturnValue:OCMOCK_VALUE(yes)] |
| 60 isFullscreenForTabContentOrExtension]; | 90 isFullscreenForTabContentOrExtension]; |
| 61 | 91 |
| 62 PrefService* prefs = profile()->GetPrefs(); | 92 PrefService* prefs = profile()->GetPrefs(); |
| 63 DCHECK(prefs); | 93 DCHECK(prefs); |
| 64 prefs->SetBoolean(prefs::kShowHomeButton, true); | 94 prefs->SetBoolean(prefs::kShowHomeButton, true); |
| 65 | 95 |
| 66 // The touch bar should be empty since the toolbar is hidden when the browser | 96 // The touch bar should be empty since the toolbar is hidden when the browser |
| 67 // is in tab fullscreen. | 97 // is in tab fullscreen. |
| 68 NSTouchBar* touch_bar = [touch_bar_ makeTouchBar]; | 98 NSTouchBar* touch_bar = [touch_bar_ makeTouchBar]; |
| 69 NSArray* touch_bar_items = [touch_bar itemIdentifiers]; | 99 NSArray* touch_bar_items = [touch_bar itemIdentifiers]; |
| 70 EXPECT_TRUE([touch_bar_items | 100 EXPECT_TRUE( |
| 71 containsObject:[BrowserWindowTouchBar | 101 [touch_bar_items containsObject:GetFullscreenTouchBarItemId( |
| 72 touchBarIdForItemId:@"FULLSCREEN-ORIGIN-LABEL"]]); | 102 kFullscreenOriginLabelTouchId)]); |
| 73 EXPECT_TRUE([[touch_bar escapeKeyReplacementItemIdentifier] | 103 EXPECT_TRUE([[touch_bar escapeKeyReplacementItemIdentifier] |
| 74 isEqualToString:[BrowserWindowTouchBar | 104 isEqualToString:GetFullscreenTouchBarItemId(kExitFullscreenTouchId)]); |
| 75 touchBarIdForItemId:@"EXIT-FULLSCREEN"]]); | |
| 76 | 105 |
| 77 BOOL no = NO; | 106 BOOL no = NO; |
| 78 [[[bwc() stub] andReturnValue:OCMOCK_VALUE(no)] | 107 [[[bwc() stub] andReturnValue:OCMOCK_VALUE(no)] |
| 79 isFullscreenForTabContentOrExtension]; | 108 isFullscreenForTabContentOrExtension]; |
| 80 | 109 |
| 81 touch_bar_items = [[touch_bar_ makeTouchBar] itemIdentifiers]; | 110 touch_bar_items = [[touch_bar_ makeTouchBar] itemIdentifiers]; |
| 82 EXPECT_TRUE([touch_bar_items | 111 EXPECT_TRUE([touch_bar_items |
| 83 containsObject:[BrowserWindowTouchBar touchBarIdForItemId:@"BACK-FWD"]]); | 112 containsObject:GetBrowserTouchBarItemId(kBackForwardTouchId)]); |
| 113 EXPECT_TRUE([touch_bar_items |
| 114 containsObject:GetBrowserTouchBarItemId(kReloadOrStopTouchId)]); |
| 84 EXPECT_TRUE( | 115 EXPECT_TRUE( |
| 85 [touch_bar_items containsObject:[BrowserWindowTouchBar | 116 [touch_bar_items containsObject:GetBrowserTouchBarItemId(kHomeTouchId)]); |
| 86 touchBarIdForItemId:@"RELOAD-STOP"]]); | |
| 87 EXPECT_TRUE([touch_bar_items | 117 EXPECT_TRUE([touch_bar_items |
| 88 containsObject:[BrowserWindowTouchBar touchBarIdForItemId:@"HOME"]]); | 118 containsObject:GetBrowserTouchBarItemId(kSearchTouchId)]); |
| 119 EXPECT_TRUE( |
| 120 [touch_bar_items containsObject:GetBrowserTouchBarItemId(kStarTouchId)]); |
| 89 EXPECT_TRUE([touch_bar_items | 121 EXPECT_TRUE([touch_bar_items |
| 90 containsObject:[BrowserWindowTouchBar touchBarIdForItemId:@"SEARCH"]]); | 122 containsObject:GetBrowserTouchBarItemId(kNewTabTouchId)]); |
| 91 EXPECT_TRUE([touch_bar_items | |
| 92 containsObject:[BrowserWindowTouchBar touchBarIdForItemId:@"BOOKMARK"]]); | |
| 93 EXPECT_TRUE([touch_bar_items | |
| 94 containsObject:[BrowserWindowTouchBar touchBarIdForItemId:@"NEW-TAB"]]); | |
| 95 | 123 |
| 96 prefs->SetBoolean(prefs::kShowHomeButton, false); | 124 prefs->SetBoolean(prefs::kShowHomeButton, false); |
| 97 touch_bar_items = [[touch_bar_ makeTouchBar] itemIdentifiers]; | 125 touch_bar_items = [[touch_bar_ makeTouchBar] itemIdentifiers]; |
| 98 EXPECT_TRUE([touch_bar_items | 126 EXPECT_TRUE([touch_bar_items |
| 99 containsObject:[BrowserWindowTouchBar touchBarIdForItemId:@"BACK-FWD"]]); | 127 containsObject:GetBrowserTouchBarItemId(kBackForwardTouchId)]); |
| 128 EXPECT_TRUE([touch_bar_items |
| 129 containsObject:GetBrowserTouchBarItemId(kReloadOrStopTouchId)]); |
| 130 EXPECT_TRUE([touch_bar_items |
| 131 containsObject:GetBrowserTouchBarItemId(kSearchTouchId)]); |
| 100 EXPECT_TRUE( | 132 EXPECT_TRUE( |
| 101 [touch_bar_items containsObject:[BrowserWindowTouchBar | 133 [touch_bar_items containsObject:GetBrowserTouchBarItemId(kStarTouchId)]); |
| 102 touchBarIdForItemId:@"RELOAD-STOP"]]); | |
| 103 EXPECT_TRUE([touch_bar_items | 134 EXPECT_TRUE([touch_bar_items |
| 104 containsObject:[BrowserWindowTouchBar touchBarIdForItemId:@"SEARCH"]]); | 135 containsObject:GetBrowserTouchBarItemId(kNewTabTouchId)]); |
| 105 EXPECT_TRUE([touch_bar_items | |
| 106 containsObject:[BrowserWindowTouchBar touchBarIdForItemId:@"BOOKMARK"]]); | |
| 107 EXPECT_TRUE([touch_bar_items | |
| 108 containsObject:[BrowserWindowTouchBar touchBarIdForItemId:@"NEW-TAB"]]); | |
| 109 } | 136 } |
| 110 | 137 |
| 111 // Tests the reload or stop touch bar item. | 138 // Tests the reload or stop touch bar item. |
| 112 TEST_F(BrowserWindowTouchBarUnitTest, ReloadOrStopTouchBarItem) { | 139 TEST_F(BrowserWindowTouchBarUnitTest, ReloadOrStopTouchBarItem) { |
| 113 if (!base::mac::IsAtLeastOS10_12()) | 140 if (!base::mac::IsAtLeastOS10_12()) |
| 114 return; | 141 return; |
| 115 | 142 |
| 116 BOOL no = NO; | 143 BOOL no = NO; |
| 117 [[[bwc() stub] andReturnValue:OCMOCK_VALUE(no)] | 144 [[[bwc() stub] andReturnValue:OCMOCK_VALUE(no)] |
| 118 isFullscreenForTabContentOrExtension]; | 145 isFullscreenForTabContentOrExtension]; |
| 119 | 146 |
| 120 NSTouchBar* touch_bar = [touch_bar_ makeTouchBar]; | 147 NSTouchBar* touch_bar = [touch_bar_ makeTouchBar]; |
| 121 [touch_bar_ setIsPageLoading:NO]; | 148 [touch_bar_ setIsPageLoading:NO]; |
| 122 | 149 |
| 123 NSTouchBarItem* item = | 150 NSTouchBarItem* item = |
| 124 [touch_bar_ touchBar:touch_bar | 151 [touch_bar_ touchBar:touch_bar |
| 125 makeItemForIdentifier:[BrowserWindowTouchBar | 152 makeItemForIdentifier:GetBrowserTouchBarItemId(kReloadOrStopTouchId)]; |
| 126 touchBarIdForItemId:@"RELOAD-STOP"]]; | |
| 127 EXPECT_EQ(IDC_RELOAD, [[item view] tag]); | 153 EXPECT_EQ(IDC_RELOAD, [[item view] tag]); |
| 128 | 154 |
| 129 [touch_bar_ setIsPageLoading:YES]; | 155 [touch_bar_ setIsPageLoading:YES]; |
| 130 item = [touch_bar_ touchBar:touch_bar | 156 item = [touch_bar_ touchBar:touch_bar |
| 131 makeItemForIdentifier:[BrowserWindowTouchBar | 157 makeItemForIdentifier:GetBrowserTouchBarItemId(kReloadOrStopTouchId)]; |
| 132 touchBarIdForItemId:@"RELOAD-STOP"]]; | |
| 133 EXPECT_EQ(IDC_STOP, [[item view] tag]); | 158 EXPECT_EQ(IDC_STOP, [[item view] tag]); |
| 134 } | 159 } |
| OLD | NEW |