extension_browsertest.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_host.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/feature_switch.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/features/feature.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/manifest.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionProcessManager; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExtensionService; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExtensionSet; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Profile; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class for extension browser tests. Provides utilities for loading, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// unloading, and installing extensions. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionBrowserTest : virtual public InProcessBrowserTest, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::NotificationObserver { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Flags used to configure how the tests are run. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Flags { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFlagNone = 0, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow the extension to run in incognito mode. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFlagEnableIncognito = 1 << 0, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow file access for the extension. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFlagEnableFileAccess = 1 << 1, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't fail when the loaded manifest has warnings (should only be used 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when testing deprecated features). 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFlagIgnoreManifestWarnings = 1 << 2, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow older manifest versions (typically these can't be loaded - we allow 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // them for testing). 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFlagAllowOldManifestVersions = 1 << 3, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionBrowserTest(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ExtensionBrowserTest(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Useful accessors. 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* extension_service() { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return extensions::ExtensionSystem::Get(profile())->extension_service(); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Get the profile to use. 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile(); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const extensions::Extension* GetExtensionByPath( 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ExtensionSet* extensions, const base::FilePath& path); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // InProcessBrowserTest 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::Extension* LoadExtension(const base::FilePath& path); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Same as above, but enables the extension in incognito mode first. 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::Extension* LoadExtensionIncognito( 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* LoadExtensionWithFlags( 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, int flags); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Loads unpacked extension from |path| with manifest |manifest_relative_path| 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // and imitates that it is a component extension. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |manifest_relative_path| is relative to |path|. 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::Extension* LoadExtensionAsComponentWithManifest( 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath::CharType* manifest_relative_path); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Loads unpacked extension from |path| and imitates that it is a component 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // extension. Equivalent to 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // LoadExtensionAsComponentWithManifest(path, extensions::kManifestFilename). 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::Extension* LoadExtensionAsComponent( 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pack the extension in |dir_path| into a crx file and return its path. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return an empty FilePath if there were errors. 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath PackExtension(const base::FilePath& dir_path); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pack the extension in |dir_path| into a crx file at |crx_path|, using the 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // key |pem_path|. If |pem_path| does not exist, create a new key at 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |pem_out_path|. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the path to the crx file, or an empty FilePath if there were errors. 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath PackExtensionWithOptions(const base::FilePath& dir_path, 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& crx_path, 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& pem_path, 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& pem_out_path); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |expected_change| indicates how many extensions should be installed (or 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled, if negative). 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1 means you expect a new install, 0 means you expect an upgrade, -1 means 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // you expect a failed upgrade. 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::Extension* InstallExtension(const base::FilePath& path, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return InstallOrUpdateExtension("", path, INSTALL_UI_TYPE_NONE, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_change); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Same as above, but an install source other than Manifest::INTERNAL can be 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // specified. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallExtension( 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change, 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location install_source) { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return InstallOrUpdateExtension("", path, INSTALL_UI_TYPE_NONE, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_change, install_source); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Installs extension as if it came from the Chrome Webstore. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallExtensionFromWebstore( 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, int expected_change); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Same as above but passes an id to CrxInstaller and does not allow a 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // privilege increase. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* UpdateExtension(const std::string& id, 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return InstallOrUpdateExtension(id, path, INSTALL_UI_TYPE_NONE, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_change); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Same as |InstallExtension| but with the normal extension UI showing up 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (for e.g. info bar on success). 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::Extension* InstallExtensionWithUI( 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expected_change) { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return InstallOrUpdateExtension("", path, INSTALL_UI_TYPE_NORMAL, 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_change); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallExtensionWithUIAutoConfirm( 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser) { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return InstallOrUpdateExtension("", path, INSTALL_UI_TYPE_AUTO_CONFIRM, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_change, browser, false); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Begins install process but simulates a user cancel. 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::Extension* StartInstallButCancel( 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path) { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return InstallOrUpdateExtension("", path, INSTALL_UI_TYPE_CANCEL, 0); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ReloadExtension(const std::string& extension_id); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UnloadExtension(const std::string& extension_id); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UninstallExtension(const std::string& extension_id); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DisableExtension(const std::string& extension_id); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EnableExtension(const std::string& extension_id); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the total number of page actions to change to |count|. 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForPageActionCountChangeTo(int count); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the number of visible page actions to change to |count|. 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForPageActionVisibilityChangeTo(int count); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Waits until an extension is installed and loaded. Returns true if an 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // install happened before timeout. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForExtensionInstall(); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for an extension install error to be raised. Returns true if an 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // error was raised. 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForExtensionInstallError(); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Waits until an extension is loaded. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WaitForExtensionLoad(); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Waits for an extension load error. Returns true if the error really 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // happened. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForExtensionLoadError(); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the specified extension to crash. Returns true if it really 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // crashed. 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForExtensionCrash(const std::string& extension_id); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the crx installer to be done. Returns true if it really is done. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForCrxInstallerDone(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulates a page calling window.open on an URL and waits for the 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation. 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OpenWindow(content::WebContents* contents, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool newtab_process_should_equal_opener, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents** newtab_result); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulates a page navigating itself to an URL and waits for the 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NavigateInRenderer(content::WebContents* contents, const GURL& url); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Looks for an ExtensionHost whose URL has the given path component 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (including leading slash). Also verifies that the expected number of hosts 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are loaded. 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionHost* FindHostWithPath(ExtensionProcessManager* manager, 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_hosts); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::NotificationObserver 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool loaded_; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool installed_; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // test_data/extensions. 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath test_data_dir_; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string last_loaded_extension_id_; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int extension_installs_observed_; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int extension_load_errors_observed_; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int crx_installers_done_observed_; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Temporary directory for testing. 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Specifies the type of UI (if any) to show during installation and what 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // user action to simulate. 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum InstallUIType { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTALL_UI_TYPE_NONE, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTALL_UI_TYPE_CANCEL, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTALL_UI_TYPE_NORMAL, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTALL_UI_TYPE_AUTO_CONFIRM, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallOrUpdateExtension( 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& id, 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstallUIType ui_type, 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expected_change); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::Extension* InstallOrUpdateExtension( 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& id, 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstallUIType ui_type, 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expected_change, 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser* browser, 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool from_webstore); 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::Extension* InstallOrUpdateExtension( 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& id, 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallUIType ui_type, 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change, 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location install_source); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* InstallOrUpdateExtension( 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& id, 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallUIType ui_type, 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_change, 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location install_source, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser, 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool from_webstore); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitForExtensionViewsToLoad(); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When waiting for page action count to change, we wait until it reaches this 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // value. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_page_action_count_; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When waiting for visible page action count to change, we wait until it 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reaches this value. 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_visible_page_action_count_; 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make the current channel "dev" for the duration of the test. 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::Feature::ScopedCurrentChannel current_channel_; 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable external install UI. 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::FeatureSwitch::ScopedOverride 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) override_prompt_for_external_extensions_; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable the sideload wipeout UI. 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::FeatureSwitch::ScopedOverride 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) override_sideload_wipeout_; 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The default profile to be used. 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile_; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_BROWSERTEST_H_ 302