summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser_browsertest.cc
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-05 03:31:27 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-05 03:31:27 +0000
commit428f54bcc8e53882375b7fb9f30b2bc577c59b8a (patch)
treef46f87e3afad5422a03c3f5745d1a05ab60572a6 /chrome/browser/browser_browsertest.cc
parent971f1dd700b1ec63a9083aa462b6401a667ef681 (diff)
downloadchromium_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.cc42
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