diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-05 03:31:27 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-05 03:31:27 +0000 |
commit | 428f54bcc8e53882375b7fb9f30b2bc577c59b8a (patch) | |
tree | f46f87e3afad5422a03c3f5745d1a05ab60572a6 /chrome/browser/browser_browsertest.cc | |
parent | 971f1dd700b1ec63a9083aa462b6401a667ef681 (diff) | |
download | chromium_src-428f54bcc8e53882375b7fb9f30b2bc577c59b8a.zip chromium_src-428f54bcc8e53882375b7fb9f30b2bc577c59b8a.tar.gz chromium_src-428f54bcc8e53882375b7fb9f30b2bc577c59b8a.tar.bz2 |
Fixes bug in wrench menu where closing with menu open could trigger
crash.
BUG=56842
TEST=see bug
Review URL: http://codereview.chromium.org/3552008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61474 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser_browsertest.cc')
-rw-r--r-- | chrome/browser/browser_browsertest.cc | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/chrome/browser/browser_browsertest.cc b/chrome/browser/browser_browsertest.cc index e63eb84..572355a 100644 --- a/chrome/browser/browser_browsertest.cc +++ b/chrome/browser/browser_browsertest.cc @@ -98,6 +98,38 @@ class MockTabStripModelObserver : public TabStripModelObserver { DISALLOW_COPY_AND_ASSIGN(MockTabStripModelObserver); }; +// Used by CloseWithAppMenuOpen. Invokes CloseWindow on the supplied browser. +class CloseWindowTask : public Task { + public: + explicit CloseWindowTask(Browser* browser) : browser_(browser) {} + + virtual void Run() { + browser_->CloseWindow(); + } + + private: + Browser* browser_; + + DISALLOW_COPY_AND_ASSIGN(CloseWindowTask); +}; + +// Used by CloseWithAppMenuOpen. Posts a CloseWindowTask and shows the app menu. +class RunCloseWithAppMenuTask : public Task { + public: + explicit RunCloseWithAppMenuTask(Browser* browser) : browser_(browser) {} + + virtual void Run() { + // ShowAppMenu is modal under views. Schedule a task that closes the window. + MessageLoop::current()->PostTask(FROM_HERE, new CloseWindowTask(browser_)); + browser_->ShowAppMenu(); + } + + private: + Browser* browser_; + + DISALLOW_COPY_AND_ASSIGN(RunCloseWithAppMenuTask); +}; + } // namespace class BrowserTest : public ExtensionBrowserTest { @@ -532,6 +564,16 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, RestorePinnedTabs) { } #endif // !defined(OS_CHROMEOS) +// This test verifies we don't crash when closing the last window and the app +// menu is showing. +IN_PROC_BROWSER_TEST_F(BrowserTest, CloseWithAppMenuOpen) { + if (browser_defaults::kBrowserAliveWithNoWindows) + return; + + // We need a message loop running for menus on windows. + MessageLoop::current()->PostTask(FROM_HERE, + new RunCloseWithAppMenuTask(browser())); +} // TODO(ben): this test was never enabled. It has bit-rotted since being added. // It originally lived in browser_unittest.cc, but has been moved here to make |