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

Side by Side Diff: chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm

Issue 790043002: Hosted apps on OS X now act more like a native app. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@creating-app-shims-2
Patch Set: Created 6 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.h" 5 #import "chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.h"
6 6
7 #include "base/mac/scoped_nsautorelease_pool.h" 7 #include "base/mac/scoped_nsautorelease_pool.h"
8 #include "base/strings/sys_string_conversions.h" 8 #include "base/strings/sys_string_conversions.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/app/chrome_command_ids.h" 10 #include "chrome/app/chrome_command_ids.h"
11 #include "chrome/browser/apps/app_shim/extension_app_shim_handler_mac.h" 11 #include "chrome/browser/apps/app_shim/extension_app_shim_handler_mac.h"
12 #include "chrome/browser/apps/app_window_registry_util.h" 12 #include "chrome/browser/apps/app_window_registry_util.h"
13 #include "chrome/browser/profiles/profile.h"
13 #import "chrome/browser/ui/cocoa/apps/native_app_window_cocoa.h" 14 #import "chrome/browser/ui/cocoa/apps/native_app_window_cocoa.h"
15 #include "chrome/browser/ui/browser.h"
16 #include "chrome/browser/ui/browser_finder.h"
17 #include "chrome/browser/web_applications/web_app_mac.h"
14 #include "chrome/grit/generated_resources.h" 18 #include "chrome/grit/generated_resources.h"
15 #include "extensions/browser/app_window/app_window.h" 19 #include "extensions/browser/app_window/app_window.h"
20 #include "extensions/browser/extension_registry.h"
16 #include "extensions/common/extension.h" 21 #include "extensions/common/extension.h"
17 #include "ui/base/l10n/l10n_util.h" 22 #include "ui/base/l10n/l10n_util.h"
18 #include "ui/base/l10n/l10n_util_mac.h" 23 #include "ui/base/l10n/l10n_util_mac.h"
19 24
25 using extensions::ExtensionRegistry;
26
20 namespace { 27 namespace {
21 28
22 // Gets an item from the main menu given the tag of the top level item 29 // Gets an item from the main menu given the tag of the top level item
23 // |menu_tag| and the tag of the item |item_tag|. 30 // |menu_tag| and the tag of the item |item_tag|.
24 NSMenuItem* GetItemByTag(NSInteger menu_tag, NSInteger item_tag) { 31 NSMenuItem* GetItemByTag(NSInteger menu_tag, NSInteger item_tag) {
25 return [[[[NSApp mainMenu] itemWithTag:menu_tag] submenu] 32 return [[[[NSApp mainMenu] itemWithTag:menu_tag] submenu]
26 itemWithTag:item_tag]; 33 itemWithTag:item_tag];
27 } 34 }
28 35
29 // Finds a top level menu item using |menu_tag| and creates a new NSMenuItem 36 // Finds a top level menu item using |menu_tag| and creates a new NSMenuItem
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 base::mac::ScopedNSAutoreleasePool pool; 295 base::mac::ScopedNSAutoreleasePool pool;
289 296
290 id window = [notification object]; 297 id window = [notification object];
291 NSString* name = [notification name]; 298 NSString* name = [notification name];
292 if ([name isEqualToString:NSWindowDidBecomeMainNotification]) { 299 if ([name isEqualToString:NSWindowDidBecomeMainNotification]) {
293 extensions::AppWindow* appWindow = 300 extensions::AppWindow* appWindow =
294 AppWindowRegistryUtil::GetAppWindowForNativeWindowAnyProfile( 301 AppWindowRegistryUtil::GetAppWindowForNativeWindowAnyProfile(
295 window); 302 window);
296 303
297 const extensions::Extension* extension = NULL; 304 const extensions::Extension* extension = NULL;
305 // Try and look if there is a relevant app window. Otherwise, look at the
jackhou1 2014/12/11 02:43:18 Maybe something like: // If there is no correspon
mitchellj 2014/12/12 00:03:45 Acknowledged.
306 // browser window
298 if (appWindow) 307 if (appWindow)
299 extension = appWindow->GetExtension(); 308 extension = appWindow->GetExtension();
309 else {
310 Browser* browser = chrome::FindBrowserWithWindow(window);
311 if (browser && browser->is_app()) {
312 ExtensionRegistry* registry =
313 ExtensionRegistry::Get(browser->profile());
314 const extensions::Extension* temp = registry->GetExtensionById(
315 web_app::GetExtensionIdFromApplicationName(browser->app_name()),
316 ExtensionRegistry::ENABLED);
317 if (temp->is_hosted_app())
318 extension = temp;
319 }
320 }
300 321
301 if (extension) 322 if (extension)
302 [self addMenuItems:extension]; 323 [self addMenuItems:extension];
303 else 324 else
304 [self removeMenuItems]; 325 [self removeMenuItems];
305 } else if ([name isEqualToString:NSWindowWillCloseNotification]) { 326 } else if ([name isEqualToString:NSWindowWillCloseNotification]) {
306 // If there are any other windows that can become main, leave the menu. It 327 // If there are any other windows that can become main, leave the menu. It
307 // will be changed when another window becomes main. Otherwise, restore the 328 // will be changed when another window becomes main. Otherwise, restore the
308 // Chrome menu. 329 // Chrome menu.
309 for (NSWindow* w : [NSApp windows]) { 330 for (NSWindow* w : [NSApp windows]) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 [hideDoppelganger_ disable]; 388 [hideDoppelganger_ disable];
368 [quitDoppelganger_ disable]; 389 [quitDoppelganger_ disable];
369 [newDoppelganger_ disable]; 390 [newDoppelganger_ disable];
370 [openDoppelganger_ disable]; 391 [openDoppelganger_ disable];
371 } 392 }
372 393
373 - (void)quitCurrentPlatformApp { 394 - (void)quitCurrentPlatformApp {
374 extensions::AppWindow* appWindow = 395 extensions::AppWindow* appWindow =
375 AppWindowRegistryUtil::GetAppWindowForNativeWindowAnyProfile( 396 AppWindowRegistryUtil::GetAppWindowForNativeWindowAnyProfile(
376 [NSApp keyWindow]); 397 [NSApp keyWindow]);
377 if (appWindow) 398 if (appWindow) {
378 apps::ExtensionAppShimHandler::QuitAppForWindow(appWindow); 399 apps::ExtensionAppShimHandler::QuitAppForWindow(appWindow);
400 } else {
401 Browser* browser = chrome::FindBrowserWithWindow([NSApp keyWindow]);
402 if (browser && browser->is_app()) {
403 ExtensionRegistry* registry = ExtensionRegistry::Get(browser->profile());
404 const extensions::Extension* extension = registry->GetExtensionById(
405 web_app::GetExtensionIdFromApplicationName(browser->app_name()),
406 ExtensionRegistry::ENABLED);
407 if (extension->is_hosted_app())
408 apps::ExtensionAppShimHandler::QuitHostedAppForWindow(browser,
409 extension);
410 }
411 }
379 } 412 }
380 413
381 - (void)hideCurrentPlatformApp { 414 - (void)hideCurrentPlatformApp {
382 extensions::AppWindow* appWindow = 415 extensions::AppWindow* appWindow =
383 AppWindowRegistryUtil::GetAppWindowForNativeWindowAnyProfile( 416 AppWindowRegistryUtil::GetAppWindowForNativeWindowAnyProfile(
384 [NSApp keyWindow]); 417 [NSApp keyWindow]);
385 if (appWindow) 418 if (appWindow) {
386 apps::ExtensionAppShimHandler::HideAppForWindow(appWindow); 419 apps::ExtensionAppShimHandler::HideAppForWindow(appWindow);
420 } else {
421 Browser* browser = chrome::FindBrowserWithWindow([NSApp keyWindow]);
422 if (browser && browser->is_app()) {
jackhou1 2014/12/11 02:43:18 This logic of "browser->is_app() && extension->is_
mitchellj 2014/12/12 00:03:45 Done.
423 ExtensionRegistry* registry = ExtensionRegistry::Get(browser->profile());
424 const extensions::Extension* extension = registry->GetExtensionById(
425 web_app::GetExtensionIdFromApplicationName(browser->app_name()),
426 ExtensionRegistry::ENABLED);
427 if (extension->is_hosted_app())
428 apps::ExtensionAppShimHandler::HideHostedApp(browser->profile(),
429 extension->id());
430 }
431 }
387 } 432 }
388 433
389 - (void)focusCurrentPlatformApp { 434 - (void)focusCurrentPlatformApp {
390 extensions::AppWindow* appWindow = 435 extensions::AppWindow* appWindow =
391 AppWindowRegistryUtil::GetAppWindowForNativeWindowAnyProfile( 436 AppWindowRegistryUtil::GetAppWindowForNativeWindowAnyProfile(
392 [NSApp keyWindow]); 437 [NSApp keyWindow]);
393 if (appWindow) 438 if (appWindow)
394 apps::ExtensionAppShimHandler::FocusAppForWindow(appWindow); 439 apps::ExtensionAppShimHandler::FocusAppForWindow(appWindow);
395 } 440 }
396 441
397 @end 442 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698