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