1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_APPS_APP_BROWSERTEST_UTIL_H_ 6 #define CHROME_BROWSER_APPS_APP_BROWSERTEST_UTIL_H_ 7 8 #include "apps/app_window.h" 9 #include "chrome/browser/extensions/extension_apitest.h" 10 #include "content/public/common/page_transition_types.h" 11 12 namespace base { 13 class CommandLine; 14 } 15 16 namespace content { 17 class WebContents; 18 } 19 20 class Browser; 21 class ExtensionTestMessageListener; 22 23 namespace extensions { 24 class Extension; 25 26 class PlatformAppBrowserTest : public ExtensionApiTest { 27 public: 28 PlatformAppBrowserTest(); 29 30 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 31 32 // Gets the first app window that is found for a given browser. 33 static apps::AppWindow* GetFirstAppWindowForBrowser(Browser* browser); 34 35 protected: 36 // Runs the app named |name| out of the platform_apps subdirectory. Waits 37 // for the provided listener to be satisifed. 38 const Extension* LoadAndLaunchPlatformApp( 39 const char* name, 40 ExtensionTestMessageListener* listener); 41 42 // Runs the app named |name| out of the platform_apps subdirectory. Waits 43 // until the given message is received from the app. 44 const Extension* LoadAndLaunchPlatformApp(const char* name, 45 const std::string& message); 46 47 // Installs the app named |name| out of the platform_apps subdirectory. 48 const Extension* InstallPlatformApp(const char* name); 49 50 // Installs and runs the app named |name| out of the platform_apps 51 // subdirectory. Waits until it is launched. 52 const Extension* InstallAndLaunchPlatformApp(const char* name); 53 54 // Launch the given platform app. 55 void LaunchPlatformApp(const Extension* extension); 56 57 // Gets the WebContents associated with the first app window that is found 58 // (most tests only deal with one platform app window, so this is good 59 // enough). 60 content::WebContents* GetFirstAppWindowWebContents(); 61 62 // Gets the first app window that is found (most tests only deal with one 63 // platform app window, so this is good enough). 64 apps::AppWindow* GetFirstAppWindow(); 65 66 // Gets the first app window for an app. 67 apps::AppWindow* GetFirstAppWindowForApp(const std::string& app_id); 68 69 // Runs chrome.windows.getAll for the given extension and returns the number 70 // of windows that the function returns. 71 size_t RunGetWindowsFunctionForExtension(const Extension* extension); 72 73 // Runs chrome.windows.get(|window_id|) for the the given extension and 74 // returns whether or not a window was found. 75 bool RunGetWindowFunctionForExtension(int window_id, 76 const Extension* extension); 77 78 // Returns the number of app windows. 79 size_t GetAppWindowCount(); 80 81 // Returns the number of app windows for a specific app. 82 size_t GetAppWindowCountForApp(const std::string& app_id); 83 84 // The command line already has an argument on it - about:blank, which 85 // is set by InProcessBrowserTest::PrepareTestCommandLine. For platform app 86 // launch tests we need to clear this. 87 void ClearCommandLineArgs(); 88 89 // Sets up the command line for running platform apps. 90 void SetCommandLineArg(const std::string& test_file); 91 92 // Creates an empty app window for |extension|. 93 apps::AppWindow* CreateAppWindow(const Extension* extension); 94 95 apps::AppWindow* CreateAppWindowFromParams( 96 const Extension* extension, 97 const apps::AppWindow::CreateParams& params); 98 99 // Closes |window| and waits until it's gone. 100 void CloseAppWindow(apps::AppWindow* window); 101 102 // Call AdjustBoundsToBeVisibleOnScreen of |window|. 103 void CallAdjustBoundsToBeVisibleOnScreenForAppWindow( 104 apps::AppWindow* window, 105 const gfx::Rect& cached_bounds, 106 const gfx::Rect& cached_screen_bounds, 107 const gfx::Rect& current_screen_bounds, 108 const gfx::Size& minimum_size, 109 gfx::Rect* bounds); 110 111 // Load a simple test app and create a window. The window must be closed by 112 // the caller in order to terminate the test - use CloseAppWindow(). 113 // |window_create_options| are the options that will be passed to 114 // chrome.app.window.create() in the test app. 115 apps::AppWindow* CreateTestAppWindow( 116 const std::string& window_create_options); 117 }; 118 119 class ExperimentalPlatformAppBrowserTest : public PlatformAppBrowserTest { 120 public: 121 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 122 }; 123 124 } // namespace extensions 125 126 #endif // CHROME_BROWSER_APPS_APP_BROWSERTEST_UTIL_H_ 127