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

Unified Diff: chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm

Issue 1221173003: [Mac] Inform reference counted objects that hold a weak Browser* when the Browser is being destroye… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Keep -[BookmarBarController dealloc] instead of changing all the tests. Created 5 years, 5 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/wrench_menu/wrench_menu_controller_unittest.mm
diff --git a/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm b/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm
index b337b2bf63f652f752976ef543eb8306f890190c..4648ac5b0f0c2043b966014155b4fb55b187831f 100644
--- a/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm
+++ b/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm
@@ -4,11 +4,14 @@
#include "base/command_line.h"
#include "base/mac/scoped_nsobject.h"
+#include "base/run_loop.h"
#include "base/strings/sys_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/sync/profile_sync_service_factory.h"
#include "chrome/browser/sync/sessions/sessions_sync_manager.h"
+#include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
#include "chrome/browser/ui/cocoa/run_loop_testing.h"
#import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
@@ -239,4 +242,30 @@ TEST_F(WrenchMenuControllerTest, RecentTabDeleteOrder) {
// If the delete order is wrong then the test will crash on exit.
}
+class BrowserRemovedObserver : public chrome::BrowserListObserver {
+ public:
+ BrowserRemovedObserver() { BrowserList::AddObserver(this); }
+ ~BrowserRemovedObserver() override { BrowserList::RemoveObserver(this); }
+ void WaitUntilBrowserRemoved() { run_loop_.Run(); }
+ void OnBrowserRemoved(Browser* browser) override { run_loop_.Quit(); }
+
+ private:
+ base::RunLoop run_loop_;
+
+ DISALLOW_COPY_AND_ASSIGN(BrowserRemovedObserver);
+};
+
+// Test that WrenchMenuController can be destroyed after the Browser.
+// This can happen because the WrenchMenuController's owner (ToolbarController)
+// can outlive the Browser.
+TEST_F(WrenchMenuControllerTest, DestroyedAfterBrowser) {
+ BrowserRemovedObserver observer;
+ // This is normally called by ToolbarController, but since |controller_| is
+ // not owned by one, call it here.
+ [controller_ browserWillBeDestroyed];
+ CloseBrowserWindow();
+ observer.WaitUntilBrowserRemoved();
+ // |controller_| is released in TearDown().
+}
+
} // namespace

Powered by Google App Engine
This is Rietveld 408576698