app_browsertest_util.h revision 58537e28ecd584eab876aee8be7156509866d23a
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)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "apps/shell_window.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h"
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/common/page_transition_types.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CommandLine;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Extension;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PlatformAppBrowserTest : public ExtensionApiTest {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  PlatformAppBrowserTest();
25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Runs the app named |name| out of the platform_apps subdirectory. Waits
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // until it is launched.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Extension* LoadAndLaunchPlatformApp(const char* name);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Installs the app named |name| out of the platform_apps subdirectory.
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const Extension* InstallPlatformApp(const char* name);
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Installs and runs the app named |name| out of the platform_apps
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // subdirectory. Waits until it is launched.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Extension* InstallAndLaunchPlatformApp(const char* name);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the WebContents associated with the first shell window that is found
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (most tests only deal with one platform app window, so this is good
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // enough).
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::WebContents* GetFirstShellWindowWebContents();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the first shell window that is found (most tests only deal with one
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // platform app window, so this is good enough).
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  apps::ShellWindow* GetFirstShellWindow();
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Runs chrome.windows.getAll for the given extension and returns the number
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // of windows that the function returns.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t RunGetWindowsFunctionForExtension(const Extension* extension);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Runs chrome.windows.get(|window_id|) for the the given extension and
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // returns whether or not a window was found.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool RunGetWindowFunctionForExtension(int window_id,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const Extension* extension);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the number of shell windows.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t GetShellWindowCount();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The command line already has an argument on it - about:blank, which
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is set by InProcessBrowserTest::PrepareTestCommandLine. For platform app
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // launch tests we need to clear this.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ClearCommandLineArgs();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets up the command line for running platform apps.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetCommandLineArg(const std::string& test_file);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates an empty shell window for |extension|.
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  apps::ShellWindow* CreateShellWindow(const Extension* extension);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  apps::ShellWindow* CreateShellWindowFromParams(
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const Extension* extension,
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const apps::ShellWindow::CreateParams& params);
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Closes |window| and waits until it's gone.
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void CloseShellWindow(apps::ShellWindow* window);
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Call AdjustBoundsToBeVisibleOnScreen of |window|.
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void CallAdjustBoundsToBeVisibleOnScreenForShellWindow(
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      apps::ShellWindow* window,
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const gfx::Rect& cached_bounds,
83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const gfx::Rect& cached_screen_bounds,
84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const gfx::Rect& current_screen_bounds,
85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const gfx::Size& minimum_size,
86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      gfx::Rect* bounds);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExperimentalPlatformAppBrowserTest : public PlatformAppBrowserTest {
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace extensions
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif  // CHROME_BROWSER_APPS_APP_BROWSERTEST_UTIL_H_
97