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)#include "chrome/browser/extensions/extension_apitest.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/app_window/app_window.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace base { 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class CommandLine; 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class Browser; 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ExtensionTestMessageListener; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Extension; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PlatformAppBrowserTest : public ExtensionApiTest { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) PlatformAppBrowserTest(); 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Gets the first app window that is found for a given browser. 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static AppWindow* GetFirstAppWindowForBrowser(Browser* browser); 338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Runs the app named |name| out of the platform_apps subdirectory. Waits 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // for the provided listener to be satisifed. 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const Extension* LoadAndLaunchPlatformApp( 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const char* name, 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ExtensionTestMessageListener* listener); 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Runs the app named |name| out of the platform_apps subdirectory. Waits 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // until the given message is received from the app. 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const Extension* LoadAndLaunchPlatformApp(const char* name, 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& message); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Installs the app named |name| out of the platform_apps subdirectory. 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const Extension* InstallPlatformApp(const char* name); 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Installs and runs the app named |name| out of the platform_apps 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // subdirectory. Waits until it is launched. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* InstallAndLaunchPlatformApp(const char* name); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Launch the given platform app. 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void LaunchPlatformApp(const Extension* extension); 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Gets the WebContents associated with the first app window that is found 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (most tests only deal with one platform app window, so this is good 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // enough). 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::WebContents* GetFirstAppWindowWebContents(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Gets the first app window that is found (most tests only deal with one 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // platform app window, so this is good enough). 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AppWindow* GetFirstAppWindow(); 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Gets the first app window for an app. 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AppWindow* GetFirstAppWindowForApp(const std::string& app_id); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Runs chrome.windows.getAll for the given extension and returns the number 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of windows that the function returns. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t RunGetWindowsFunctionForExtension(const Extension* extension); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Runs chrome.windows.get(|window_id|) for the the given extension and 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returns whether or not a window was found. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool RunGetWindowFunctionForExtension(int window_id, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the number of app windows. 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t GetAppWindowCount(); 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the number of app windows for a specific app. 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t GetAppWindowCountForApp(const std::string& app_id); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The command line already has an argument on it - about:blank, which 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is set by InProcessBrowserTest::PrepareTestCommandLine. For platform app 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // launch tests we need to clear this. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearCommandLineArgs(); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets up the command line for running platform apps. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetCommandLineArg(const std::string& test_file); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Creates an empty app window for |extension|. 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AppWindow* CreateAppWindow(const Extension* extension); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AppWindow* CreateAppWindowFromParams(const Extension* extension, 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const AppWindow::CreateParams& params); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Closes |window| and waits until it's gone. 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void CloseAppWindow(AppWindow* window); 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Call AdjustBoundsToBeVisibleOnScreen of |window|. 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void CallAdjustBoundsToBeVisibleOnScreenForAppWindow( 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AppWindow* window, 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const gfx::Rect& cached_bounds, 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const gfx::Rect& cached_screen_bounds, 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const gfx::Rect& current_screen_bounds, 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const gfx::Size& minimum_size, 107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect* bounds); 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Load a simple test app and create a window. The window must be closed by 110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // the caller in order to terminate the test - use CloseAppWindow(). 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // |window_create_options| are the options that will be passed to 112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // chrome.app.window.create() in the test app. 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AppWindow* CreateTestAppWindow(const std::string& window_create_options); 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PlatformAppBrowserTest); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExperimentalPlatformAppBrowserTest : public PlatformAppBrowserTest { 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace extensions 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif // CHROME_BROWSER_APPS_APP_BROWSERTEST_UTIL_H_ 127