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