app_browsertest_util.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#ifndef CHROME_BROWSER_APPS_APP_BROWSERTEST_UTIL_H_
63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#define CHROME_BROWSER_APPS_APP_BROWSERTEST_UTIL_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "apps/app_window.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h"
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/common/page_transition_types.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace base {
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class CommandLine;
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class Browser;
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ExtensionTestMessageListener;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Extension;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PlatformAppBrowserTest : public ExtensionApiTest {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  PlatformAppBrowserTest();
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Gets the first app window that is found for a given browser.
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static apps::AppWindow* GetFirstAppWindowForBrowser(Browser* browser);
348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Runs the app named |name| out of the platform_apps subdirectory. Waits
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // for the provided listener to be satisifed.
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const Extension* LoadAndLaunchPlatformApp(
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const char* name,
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      ExtensionTestMessageListener* listener);
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Runs the app named |name| out of the platform_apps subdirectory. Waits
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // until the given message is received from the app.
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const Extension* LoadAndLaunchPlatformApp(const char* name,
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                            const std::string& message);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Installs the app named |name| out of the platform_apps subdirectory.
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const Extension* InstallPlatformApp(const char* name);
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Installs and runs the app named |name| out of the platform_apps
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // subdirectory. Waits until it is launched.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Extension* InstallAndLaunchPlatformApp(const char* name);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Launch the given platform app.
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void LaunchPlatformApp(const Extension* extension);
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Gets the WebContents associated with the first app window that is found
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (most tests only deal with one platform app window, so this is good
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // enough).
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  content::WebContents* GetFirstAppWindowWebContents();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Gets the first app window that is found (most tests only deal with one
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // platform app window, so this is good enough).
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  apps::AppWindow* GetFirstAppWindow();
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Gets the first app window for an app.
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  apps::AppWindow* GetFirstAppWindowForApp(const std::string& app_id);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Runs chrome.windows.getAll for the given extension and returns the number
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // of windows that the function returns.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t RunGetWindowsFunctionForExtension(const Extension* extension);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Runs chrome.windows.get(|window_id|) for the the given extension and
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // returns whether or not a window was found.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool RunGetWindowFunctionForExtension(int window_id,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const Extension* extension);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Returns the number of app windows.
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  size_t GetAppWindowCount();
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Returns the number of app windows for a specific app.
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  size_t GetAppWindowCountForApp(const std::string& app_id);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The command line already has an argument on it - about:blank, which
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is set by InProcessBrowserTest::PrepareTestCommandLine. For platform app
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // launch tests we need to clear this.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ClearCommandLineArgs();
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets up the command line for running platform apps.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetCommandLineArg(const std::string& test_file);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Creates an empty app window for |extension|.
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  apps::AppWindow* CreateAppWindow(const Extension* extension);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  apps::AppWindow* CreateAppWindowFromParams(
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const Extension* extension,
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const apps::AppWindow::CreateParams& params);
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Closes |window| and waits until it's gone.
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void CloseAppWindow(apps::AppWindow* window);
101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Call AdjustBoundsToBeVisibleOnScreen of |window|.
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void CallAdjustBoundsToBeVisibleOnScreenForAppWindow(
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      apps::AppWindow* window,
105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const gfx::Rect& cached_bounds,
106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const gfx::Rect& cached_screen_bounds,
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const gfx::Rect& current_screen_bounds,
108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const gfx::Size& minimum_size,
109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      gfx::Rect* bounds);
110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Load a simple test app and create a window. The window must be closed by
112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // the caller in order to terminate the test - use CloseAppWindow().
113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // |window_create_options| are the options that will be passed to
114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // chrome.app.window.create() in the test app.
115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  apps::AppWindow* CreateTestAppWindow(
116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const std::string& window_create_options);
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private:
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PlatformAppBrowserTest);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExperimentalPlatformAppBrowserTest : public PlatformAppBrowserTest {
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE;
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace extensions
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif  // CHROME_BROWSER_APPS_APP_BROWSERTEST_UTIL_H_
130