10f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
20f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
30f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// found in the LICENSE file.
40f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
50f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/apps/app_browsertest_util.h"
60f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/extensions/extension_test_message_listener.h"
70f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
80f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// This class of BrowserTests is a helper to create tests related to crashes in
90f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Chrome Apps. To be tested, the app will have to be placed as any other test
100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// app (see PlatformAppBrowserTest) and will need to send a "Done" message back.
110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// When the "Done" message is received, the test succeed. If it is not, it is
120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// assumed that Chrome has crashed and the test will anyway fail.
130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)//
140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// The entry in this file should be something like:
150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// IN_PROC_BROWSER_TEST_F(AppCrashTest, <TEST_NAME>) {
160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)//   ASSERT_TRUE(RunAppCrashTest("<DIRECTORY_TEST_NAME>"));
170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// }
180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)class AppCrashTest : public extensions::PlatformAppBrowserTest {
200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)public:
210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  bool RunAppCrashTest(const char* name) {
220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    ExtensionTestMessageListener listener("Done", false);
230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    LoadAndLaunchPlatformApp(name);
240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    return listener.WaitUntilSatisfied();
250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  }
260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)};
270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AppCrashTest, HiddenWindows) {
290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_TRUE(RunAppCrashTest("crashtest_hidden_windows"));
300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
31