| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/app_controller_mac.h" | 5 #import "chrome/browser/app_controller_mac.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/files/file_path.h" | 12 #include "base/files/file_path.h" |
| 13 #include "base/mac/foundation_util.h" | 13 #include "base/mac/foundation_util.h" |
| 14 #include "base/mac/mac_util.h" | 14 #include "base/mac/mac_util.h" |
| 15 #include "base/mac/sdk_forward_declarations.h" | 15 #include "base/mac/sdk_forward_declarations.h" |
| 16 #include "base/macros.h" | 16 #include "base/macros.h" |
| 17 #include "base/memory/ptr_util.h" |
| 17 #include "base/message_loop/message_loop.h" | 18 #include "base/message_loop/message_loop.h" |
| 18 #include "base/metrics/histogram_macros.h" | 19 #include "base/metrics/histogram_macros.h" |
| 19 #include "base/stl_util.h" | |
| 20 #include "base/strings/string_number_conversions.h" | 20 #include "base/strings/string_number_conversions.h" |
| 21 #include "base/strings/sys_string_conversions.h" | 21 #include "base/strings/sys_string_conversions.h" |
| 22 #include "base/strings/utf_string_conversions.h" | 22 #include "base/strings/utf_string_conversions.h" |
| 23 #include "chrome/app/chrome_command_ids.h" | 23 #include "chrome/app/chrome_command_ids.h" |
| 24 #include "chrome/browser/apps/app_shim/extension_app_shim_handler_mac.h" | 24 #include "chrome/browser/apps/app_shim/extension_app_shim_handler_mac.h" |
| 25 #include "chrome/browser/apps/app_window_registry_util.h" | 25 #include "chrome/browser/apps/app_window_registry_util.h" |
| 26 #include "chrome/browser/background/background_application_list_model.h" | 26 #include "chrome/browser/background/background_application_list_model.h" |
| 27 #include "chrome/browser/background/background_mode_manager.h" | 27 #include "chrome/browser/background/background_mode_manager.h" |
| 28 #include "chrome/browser/browser_process.h" | 28 #include "chrome/browser/browser_process.h" |
| 29 #include "chrome/browser/browser_shutdown.h" | 29 #include "chrome/browser/browser_shutdown.h" |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 keep_alive_.reset(); | 527 keep_alive_.reset(); |
| 528 | 528 |
| 529 // Reset all pref watching, as this object outlives the prefs system. | 529 // Reset all pref watching, as this object outlives the prefs system. |
| 530 profilePrefRegistrar_.reset(); | 530 profilePrefRegistrar_.reset(); |
| 531 localPrefRegistrar_.RemoveAll(); | 531 localPrefRegistrar_.RemoveAll(); |
| 532 | 532 |
| 533 [self unregisterEventHandlers]; | 533 [self unregisterEventHandlers]; |
| 534 | 534 |
| 535 appShimMenuController_.reset(); | 535 appShimMenuController_.reset(); |
| 536 | 536 |
| 537 base::STLDeleteContainerPairSecondPointers( | 537 profileBookmarkMenuBridgeMap_.clear(); |
| 538 profileBookmarkMenuBridgeMap_.begin(), | |
| 539 profileBookmarkMenuBridgeMap_.end()); | |
| 540 } | 538 } |
| 541 | 539 |
| 542 - (void)didEndMainMessageLoop { | 540 - (void)didEndMainMessageLoop { |
| 543 DCHECK_EQ(0u, chrome::GetBrowserCount([self lastProfile])); | 541 DCHECK_EQ(0u, chrome::GetBrowserCount([self lastProfile])); |
| 544 if (!chrome::GetBrowserCount([self lastProfile])) { | 542 if (!chrome::GetBrowserCount([self lastProfile])) { |
| 545 // As we're shutting down, we need to nuke the TabRestoreService, which | 543 // As we're shutting down, we need to nuke the TabRestoreService, which |
| 546 // will start the shutdown of the NavigationControllers and allow for | 544 // will start the shutdown of the NavigationControllers and allow for |
| 547 // proper shutdown. If we don't do this, Chrome won't shut down cleanly, | 545 // proper shutdown. If we don't do this, Chrome won't shut down cleanly, |
| 548 // and may end up crashing when some thread tries to use the IO thread (or | 546 // and may end up crashing when some thread tries to use the IO thread (or |
| 549 // another thread) that is no longer valid. | 547 // another thread) that is no longer valid. |
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 876 // In a browser test, the application is not brought to the front, so | 874 // In a browser test, the application is not brought to the front, so |
| 877 // |lastProfile_| might be null. | 875 // |lastProfile_| might be null. |
| 878 if (!lastProfile_ || profilePath == lastProfile_->GetPath()) { | 876 if (!lastProfile_ || profilePath == lastProfile_->GetPath()) { |
| 879 // Force windowChangedToProfile: to set the lastProfile_ and also update the | 877 // Force windowChangedToProfile: to set the lastProfile_ and also update the |
| 880 // relevant menuBridge objects. | 878 // relevant menuBridge objects. |
| 881 lastProfile_ = nullptr; | 879 lastProfile_ = nullptr; |
| 882 [self windowChangedToProfile:g_browser_process->profile_manager()-> | 880 [self windowChangedToProfile:g_browser_process->profile_manager()-> |
| 883 GetLastUsedProfile()]; | 881 GetLastUsedProfile()]; |
| 884 } | 882 } |
| 885 | 883 |
| 886 auto it = profileBookmarkMenuBridgeMap_.find(profilePath); | 884 profileBookmarkMenuBridgeMap_.erase(profilePath); |
| 887 if (it != profileBookmarkMenuBridgeMap_.end()) { | |
| 888 delete it->second; | |
| 889 profileBookmarkMenuBridgeMap_.erase(it); | |
| 890 } | |
| 891 } | 885 } |
| 892 | 886 |
| 893 // Returns true if there is a modal window (either window- or application- | 887 // Returns true if there is a modal window (either window- or application- |
| 894 // modal) blocking the active browser. Note that tab modal dialogs (HTTP auth | 888 // modal) blocking the active browser. Note that tab modal dialogs (HTTP auth |
| 895 // sheets) will not count as blocking the browser. But things like open/save | 889 // sheets) will not count as blocking the browser. But things like open/save |
| 896 // dialogs that are window modal will block the browser. | 890 // dialogs that are window modal will block the browser. |
| 897 - (BOOL)keyWindowIsModal { | 891 - (BOOL)keyWindowIsModal { |
| 898 if ([NSApp modalWindow]) | 892 if ([NSApp modalWindow]) |
| 899 return YES; | 893 return YES; |
| 900 | 894 |
| (...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1552 // See https://crbug.com/497813 for more details. | 1546 // See https://crbug.com/497813 for more details. |
| 1553 NSMenuItem* bookmarkItem = [[NSApp mainMenu] itemWithTag:IDC_BOOKMARKS_MENU]; | 1547 NSMenuItem* bookmarkItem = [[NSApp mainMenu] itemWithTag:IDC_BOOKMARKS_MENU]; |
| 1554 BOOL hidden = [bookmarkItem isHidden]; | 1548 BOOL hidden = [bookmarkItem isHidden]; |
| 1555 [bookmarkItem setHidden:NO]; | 1549 [bookmarkItem setHidden:NO]; |
| 1556 lastProfile_ = profile; | 1550 lastProfile_ = profile; |
| 1557 | 1551 |
| 1558 auto it = profileBookmarkMenuBridgeMap_.find(profile->GetPath()); | 1552 auto it = profileBookmarkMenuBridgeMap_.find(profile->GetPath()); |
| 1559 if (it == profileBookmarkMenuBridgeMap_.end()) { | 1553 if (it == profileBookmarkMenuBridgeMap_.end()) { |
| 1560 base::scoped_nsobject<NSMenu> submenu([[bookmarkItem submenu] copy]); | 1554 base::scoped_nsobject<NSMenu> submenu([[bookmarkItem submenu] copy]); |
| 1561 bookmarkMenuBridge_ = new BookmarkMenuBridge(profile, submenu); | 1555 bookmarkMenuBridge_ = new BookmarkMenuBridge(profile, submenu); |
| 1562 profileBookmarkMenuBridgeMap_[profile->GetPath()] = bookmarkMenuBridge_; | 1556 profileBookmarkMenuBridgeMap_[profile->GetPath()] = |
| 1557 base::WrapUnique(bookmarkMenuBridge_); |
| 1563 } else { | 1558 } else { |
| 1564 bookmarkMenuBridge_ = it->second; | 1559 bookmarkMenuBridge_ = it->second.get(); |
| 1565 } | 1560 } |
| 1566 | 1561 |
| 1567 // No need to |BuildMenu| here. It is done lazily upon menu access. | 1562 // No need to |BuildMenu| here. It is done lazily upon menu access. |
| 1568 [bookmarkItem setSubmenu:bookmarkMenuBridge_->BookmarkMenu()]; | 1563 [bookmarkItem setSubmenu:bookmarkMenuBridge_->BookmarkMenu()]; |
| 1569 [bookmarkItem setHidden:hidden]; | 1564 [bookmarkItem setHidden:hidden]; |
| 1570 | 1565 |
| 1571 historyMenuBridge_.reset(new HistoryMenuBridge(lastProfile_)); | 1566 historyMenuBridge_.reset(new HistoryMenuBridge(lastProfile_)); |
| 1572 historyMenuBridge_->BuildMenu(); | 1567 historyMenuBridge_->BuildMenu(); |
| 1573 | 1568 |
| 1574 chrome::BrowserCommandController:: | 1569 chrome::BrowserCommandController:: |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1683 | 1678 |
| 1684 //--------------------------------------------------------------------------- | 1679 //--------------------------------------------------------------------------- |
| 1685 | 1680 |
| 1686 namespace app_controller_mac { | 1681 namespace app_controller_mac { |
| 1687 | 1682 |
| 1688 bool IsOpeningNewWindow() { | 1683 bool IsOpeningNewWindow() { |
| 1689 return g_is_opening_new_window; | 1684 return g_is_opening_new_window; |
| 1690 } | 1685 } |
| 1691 | 1686 |
| 1692 } // namespace app_controller_mac | 1687 } // namespace app_controller_mac |
| OLD | NEW |