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 #include "base/command_line.h" | 5 #include "base/command_line.h" |
6 #include "base/mac/scoped_nsobject.h" | 6 #include "base/mac/scoped_nsobject.h" |
| 7 #include "base/run_loop.h" |
7 #include "base/strings/sys_string_conversions.h" | 8 #include "base/strings/sys_string_conversions.h" |
8 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
9 #include "chrome/app/chrome_command_ids.h" | 10 #include "chrome/app/chrome_command_ids.h" |
10 #include "chrome/browser/sync/profile_sync_service_factory.h" | 11 #include "chrome/browser/sync/profile_sync_service_factory.h" |
11 #include "chrome/browser/sync/sessions/sessions_sync_manager.h" | 12 #include "chrome/browser/sync/sessions/sessions_sync_manager.h" |
| 13 #include "chrome/browser/ui/browser_list.h" |
| 14 #include "chrome/browser/ui/browser_list_observer.h" |
12 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" | 15 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" |
13 #include "chrome/browser/ui/cocoa/run_loop_testing.h" | 16 #include "chrome/browser/ui/cocoa/run_loop_testing.h" |
14 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" | 17 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" |
15 #import "chrome/browser/ui/cocoa/view_resizer_pong.h" | 18 #import "chrome/browser/ui/cocoa/view_resizer_pong.h" |
16 #import "chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.h" | 19 #import "chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.h" |
17 #include "chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.h" | 20 #include "chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.h" |
18 #include "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h" | 21 #include "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h" |
19 #include "chrome/browser/ui/toolbar/wrench_menu_model.h" | 22 #include "chrome/browser/ui/toolbar/wrench_menu_model.h" |
20 #include "chrome/common/chrome_switches.h" | 23 #include "chrome/common/chrome_switches.h" |
21 #include "chrome/grit/generated_resources.h" | 24 #include "chrome/grit/generated_resources.h" |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 fake_model_.reset(); | 235 fake_model_.reset(); |
233 } | 236 } |
234 | 237 |
235 // Verify that |RecentTabsMenuModelDelegate| is deleted before the model | 238 // Verify that |RecentTabsMenuModelDelegate| is deleted before the model |
236 // it's observing. | 239 // it's observing. |
237 TEST_F(WrenchMenuControllerTest, RecentTabDeleteOrder) { | 240 TEST_F(WrenchMenuControllerTest, RecentTabDeleteOrder) { |
238 [controller_ menuNeedsUpdate:[controller_ menu]]; | 241 [controller_ menuNeedsUpdate:[controller_ menu]]; |
239 // If the delete order is wrong then the test will crash on exit. | 242 // If the delete order is wrong then the test will crash on exit. |
240 } | 243 } |
241 | 244 |
| 245 class BrowserRemovedObserver : public chrome::BrowserListObserver { |
| 246 public: |
| 247 BrowserRemovedObserver() { BrowserList::AddObserver(this); } |
| 248 ~BrowserRemovedObserver() override { BrowserList::RemoveObserver(this); } |
| 249 void WaitUntilBrowserRemoved() { run_loop_.Run(); } |
| 250 void OnBrowserRemoved(Browser* browser) override { run_loop_.Quit(); } |
| 251 |
| 252 private: |
| 253 base::RunLoop run_loop_; |
| 254 |
| 255 DISALLOW_COPY_AND_ASSIGN(BrowserRemovedObserver); |
| 256 }; |
| 257 |
| 258 // Test that WrenchMenuController can be destroyed after the Browser. |
| 259 // This can happen because the WrenchMenuController's owner (ToolbarController) |
| 260 // can outlive the Browser. |
| 261 TEST_F(WrenchMenuControllerTest, DestroyedAfterBrowser) { |
| 262 BrowserRemovedObserver observer; |
| 263 // This is normally called by ToolbarController, but since |controller_| is |
| 264 // not owned by one, call it here. |
| 265 [controller_ browserWillBeDestroyed]; |
| 266 CloseBrowserWindow(); |
| 267 observer.WaitUntilBrowserRemoved(); |
| 268 // |controller_| is released in TearDown(). |
| 269 } |
| 270 |
242 } // namespace | 271 } // namespace |
OLD | NEW |