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

Unified Diff: chrome/browser/ui/cocoa/browser_window_touch_bar.mm

Issue 2816743006: [Mac] Fullscreen Touch Bar Support (Closed)
Patch Set: Moved ScopedFeatureList Created 3 years, 8 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/browser_window_touch_bar.mm
diff --git a/chrome/browser/ui/cocoa/browser_window_touch_bar.mm b/chrome/browser/ui/cocoa/browser_window_touch_bar.mm
index d884dd1992323ad1387e200ad8e7949522486b82..e78d25125b2a96c708ae746a939a6a421a245873 100644
--- a/chrome/browser/ui/cocoa/browser_window_touch_bar.mm
+++ b/chrome/browser/ui/cocoa/browser_window_touch_bar.mm
@@ -20,6 +20,10 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_command_controller.h"
#import "chrome/browser/ui/cocoa/browser_window_controller.h"
+#import "chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.h"
+#include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h"
+#include "chrome/browser/ui/exclusive_access/fullscreen_controller.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/pref_names.h"
#include "chrome/grit/generated_resources.h"
@@ -28,6 +32,7 @@
#include "components/search_engines/util.h"
#include "components/strings/grit/components_strings.h"
#include "components/toolbar/vector_icons.h"
+#include "content/public/browser/web_contents.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/l10n/l10n_util_mac.h"
#include "ui/gfx/color_palette.h"
@@ -63,6 +68,8 @@ NSString* const kHomeTouchId = @"HOME";
NSString* const kSearchTouchId = @"SEARCH";
NSString* const kStarTouchId = @"BOOKMARK";
NSString* const kNewTabTouchId = @"NEW-TAB";
+NSString* const kExitFullscreenTouchId = @"EXIT-FULLSCREEN";
+NSString* const kFullscreenOriginLabelTouchId = @"FULLSCREEN-ORIGIN-LABEL";
// The button indexes in the back and forward segment control.
const int kBackSegmentIndex = 0;
@@ -101,16 +108,11 @@ NSButton* CreateTouchBarButton(const gfx::VectorIcon& icon,
return button;
}
-NSString* GetTouchBarId(NSString* const touch_bar_id) {
+NSString* GetTouchBarId() {
NSString* chrome_bundle_id =
base::SysUTF8ToNSString(base::mac::BaseBundleID());
- return [NSString stringWithFormat:@"%@.%@", chrome_bundle_id, touch_bar_id];
-}
-
-NSString* GetTouchBarItemId(NSString* const touch_bar_id,
- NSString* const item_id) {
return [NSString
- stringWithFormat:@"%@-%@", GetTouchBarId(touch_bar_id), item_id];
+ stringWithFormat:@"%@.%@", chrome_bundle_id, kBrowserWindowTouchBarId];
}
TouchBarAction TouchBarActionFromCommand(int command) {
@@ -191,6 +193,10 @@ class HomePrefNotificationBridge {
@synthesize isPageLoading = isPageLoading_;
@synthesize isStarred = isStarred_;
++ (NSString*)touchBarIdForItemId:(NSString*)id {
+ return [NSString stringWithFormat:@"%@-%@", GetTouchBarId(), id];
+}
+
- (instancetype)initWithBrowser:(Browser*)browser
browserWindowController:(BrowserWindowController*)bwc {
if ((self = [self init])) {
@@ -216,6 +222,25 @@ class HomePrefNotificationBridge {
base::scoped_nsobject<NSTouchBar> touchBar(
[[NSClassFromString(@"NSTouchBar") alloc] init]);
+ [touchBar setCustomizationIdentifier:GetTouchBarId()];
+ [touchBar setDelegate:self];
+
+ // When in tab fullscreen, only the option to exit fullscreen should show up
+ // on the touch bar since the toolbar is hidden in that state.
+ if ([bwc_ isFullscreenForTabContentOrExtension]) {
+ if ([touchBar respondsToSelector:
+ @selector(setEscapeKeyReplacementItemIdentifier:)]) {
+ [touchBar setEscapeKeyReplacementItemIdentifier:
+ [BrowserWindowTouchBar
+ touchBarIdForItemId:kExitFullscreenTouchId]];
+ [touchBar setDefaultItemIdentifiers:@[
+ [BrowserWindowTouchBar
+ touchBarIdForItemId:kFullscreenOriginLabelTouchId]
+ ]];
+ }
+ return touchBar.autorelease();
+ }
+
NSMutableArray* customIdentifiers = [NSMutableArray arrayWithCapacity:7];
NSMutableArray* defaultIdentifiers = [NSMutableArray arrayWithCapacity:6];
@@ -225,8 +250,7 @@ class HomePrefNotificationBridge {
];
for (NSString* item in touchBarItems) {
- NSString* itemIdentifier =
- GetTouchBarItemId(kBrowserWindowTouchBarId, item);
+ NSString* itemIdentifier = [BrowserWindowTouchBar touchBarIdForItemId:item];
[customIdentifiers addObject:itemIdentifier];
// Don't add the home button if it's not shown in the toolbar.
@@ -236,10 +260,8 @@ class HomePrefNotificationBridge {
[customIdentifiers addObject:NSTouchBarItemIdentifierFlexibleSpace];
- [touchBar setCustomizationIdentifier:GetTouchBarId(kBrowserWindowTouchBarId)];
[touchBar setDefaultItemIdentifiers:defaultIdentifiers];
[touchBar setCustomizationAllowedItemIdentifiers:customIdentifiers];
- [touchBar setDelegate:self];
return touchBar.autorelease();
}
@@ -294,6 +316,29 @@ class HomePrefNotificationBridge {
[touchBarItem setView:[self searchTouchBarView]];
[touchBarItem setCustomizationLabel:l10n_util::GetNSString(
IDS_TOUCH_BAR_GOOGLE_SEARCH)];
+ } else if ([identifier hasSuffix:kExitFullscreenTouchId]) {
+ NSButton* button = [NSButton
+ buttonWithTitle:l10n_util::GetNSString(IDS_TOUCH_BAR_EXIT_FULLSCREEN)
+ target:self
+ action:@selector(exitFullscreenForTab:)];
+ [touchBarItem setView:button];
+ } else if ([identifier hasSuffix:kFullscreenOriginLabelTouchId]) {
+ content::WebContents* contents =
+ browser_->tab_strip_model()->GetActiveWebContents();
+ GURL originUrl = contents->GetLastCommittedURL();
+
+ base::string16 displayText = base::ASCIIToUTF16(originUrl.GetContent());
+ size_t hostLength = originUrl.host().length();
+ base::scoped_nsobject<NSMutableAttributedString> attributedString(
+ [[NSMutableAttributedString alloc]
+ initWithString:base::SysUTF16ToNSString(displayText)]);
+ [attributedString
+ addAttribute:NSForegroundColorAttributeName
+ value:OmniboxViewMac::BaseTextColor(true)
+ range:NSMakeRange(hostLength,
+ [attributedString length] - hostLength)];
+ [touchBarItem
+ setView:[NSTextField labelWithAttributedString:attributedString.get()]];
}
return touchBarItem.autorelease();
@@ -381,6 +426,12 @@ class HomePrefNotificationBridge {
commandUpdater_->ExecuteCommand(command);
}
+- (void)exitFullscreenForTab:(id)sender {
+ browser_->exclusive_access_manager()
+ ->fullscreen_controller()
+ ->ExitExclusiveAccessIfNecessary();
+}
+
- (void)executeCommand:(id)sender {
int command = [sender tag];
LogTouchBarUMA(command);
« no previous file with comments | « chrome/browser/ui/cocoa/browser_window_touch_bar.h ('k') | chrome/browser/ui/cocoa/browser_window_touch_bar_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698