extension_browsertest.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_BROWSERTEST_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_EXTENSION_BROWSERTEST_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_path.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/scoped_temp_dir.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_host.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/features/feature.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/feature_switch.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionProcessManager; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class for extension browser tests. Provides utilities for loading, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// unloading, and installing extensions. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionBrowserTest : virtual public InProcessBrowserTest, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::NotificationObserver { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Flags used to configure how the tests are run. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Flags { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFlagNone = 0, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow the extension to run in incognito mode. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFlagEnableIncognito = 1 << 0, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow file access for the extension. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFlagEnableFileAccess = 1 << 1, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't fail when the loaded manifest has warnings (should only be used 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when testing deprecated features). 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFlagIgnoreManifestWarnings = 1 << 2, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow older manifest versions (typically these can't be loaded - we allow 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // them for testing). 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFlagAllowOldManifestVersions = 1 << 3, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionBrowserTest(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ExtensionBrowserTest(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // InProcessBrowserTest 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* LoadExtension(const FilePath& path); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Same as above, but enables the extension in incognito mode first. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* LoadExtensionIncognito(const FilePath& path); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* LoadExtensionWithFlags( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& path, int flags); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Loads extension and imitates that it is a component extension. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* LoadExtensionAsComponent(const FilePath& path); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pack the extension in |dir_path| into a crx file and return its path. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return an empty FilePath if there were errors. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath PackExtension(const FilePath& dir_path); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pack the extension in |dir_path| into a crx file at |crx_path|, using the 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // key |pem_path|. If |pem_path| does not exist, create a new key at 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |pem_out_path|. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the path to the crx file, or an empty FilePath if there were errors. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath PackExtensionWithOptions(const FilePath& dir_path, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& crx_path, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& pem_path, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& pem_out_path); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |expected_change| indicates how many extensions should be installed (or 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled, if negative). 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1 means you expect a new install, 0 means you expect an upgrade, -1 means 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // you expect a failed upgrade. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallExtension(const FilePath& path, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return InstallOrUpdateExtension("", path, INSTALL_UI_TYPE_NONE, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_change); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Same as above, but an install source other than Extension::INTERNAL can be 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // specified. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallExtension( 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& path, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::Extension::Location install_source) { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return InstallOrUpdateExtension("", path, INSTALL_UI_TYPE_NONE, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_change, install_source); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Installs extension as if it came from the Chrome Webstore. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallExtensionFromWebstore( 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& path, int expected_change); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Same as above but passes an id to CrxInstaller and does not allow a 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // privilege increase. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* UpdateExtension(const std::string& id, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& path, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return InstallOrUpdateExtension(id, path, INSTALL_UI_TYPE_NONE, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_change); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Same as |InstallExtension| but with the normal extension UI showing up 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (for e.g. info bar on success). 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallExtensionWithUI(const FilePath& path, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return InstallOrUpdateExtension("", path, INSTALL_UI_TYPE_NORMAL, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_change); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallExtensionWithUIAutoConfirm( 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& path, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser) { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return InstallOrUpdateExtension("", path, INSTALL_UI_TYPE_AUTO_CONFIRM, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_change, browser, false); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Begins install process but simulates a user cancel. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* StartInstallButCancel(const FilePath& path) { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return InstallOrUpdateExtension("", path, INSTALL_UI_TYPE_CANCEL, 0); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ReloadExtension(const std::string& extension_id); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UnloadExtension(const std::string& extension_id); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UninstallExtension(const std::string& extension_id); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DisableExtension(const std::string& extension_id); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EnableExtension(const std::string& extension_id); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the total number of page actions to change to |count|. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForPageActionCountChangeTo(int count); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the number of visible page actions to change to |count|. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForPageActionVisibilityChangeTo(int count); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Waits until an extension is installed and loaded. Returns true if an 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // install happened before timeout. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForExtensionInstall(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for an extension install error to be raised. Returns true if an 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // error was raised. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForExtensionInstallError(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Waits until an extension is loaded. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WaitForExtensionLoad(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Waits for an extension load error. Returns true if the error really 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // happened. 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForExtensionLoadError(); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the specified extension to crash. Returns true if it really 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // crashed. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForExtensionCrash(const std::string& extension_id); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the crx installer to be done. Returns true if it really is done. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForCrxInstallerDone(); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulates a page calling window.open on an URL and waits for the 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OpenWindow(content::WebContents* contents, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool newtab_process_should_equal_opener, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents** newtab_result); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulates a page navigating itself to an URL and waits for the 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation. 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NavigateInRenderer(content::WebContents* contents, const GURL& url); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Looks for an ExtensionHost whose URL has the given path component 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (including leading slash). Also verifies that the expected number of hosts 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are loaded. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionHost* FindHostWithPath(ExtensionProcessManager* manager, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path, 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_hosts); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::NotificationObserver 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool loaded_; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool installed_; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // test_data/extensions. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath test_data_dir_; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string last_loaded_extension_id_; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int extension_installs_observed_; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int extension_load_errors_observed_; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int crx_installers_done_observed_; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Temporary directory for testing. 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedTempDir temp_dir_; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Specifies the type of UI (if any) to show during installation and what 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // user action to simulate. 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum InstallUIType { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTALL_UI_TYPE_NONE, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTALL_UI_TYPE_CANCEL, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTALL_UI_TYPE_NORMAL, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTALL_UI_TYPE_AUTO_CONFIRM, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallOrUpdateExtension(const std::string& id, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& path, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallUIType ui_type, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallOrUpdateExtension(const std::string& id, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& path, 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallUIType ui_type, 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool from_webstore); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallOrUpdateExtension( 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& id, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& path, 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallUIType ui_type, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::Extension::Location install_source); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallOrUpdateExtension( 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& id, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& path, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallUIType ui_type, 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::Extension::Location install_source, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool from_webstore); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForExtensionViewsToLoad(); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When waiting for page action count to change, we wait until it reaches this 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // value. 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_page_action_count_; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When waiting for visible page action count to change, we wait until it 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reaches this value. 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_visible_page_action_count_; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make the current channel "dev" for the duration of the test. 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::Feature::ScopedCurrentChannel current_channel_; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable external install UI. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::FeatureSwitch::ScopedOverride 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) override_prompt_for_external_extensions_; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable the sideload wipeout UI. 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::FeatureSwitch::ScopedOverride 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) override_sideload_wipeout_; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_BROWSERTEST_H_ 266