11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <algorithm> 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <vector> 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/json/json_parser.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/prefs/pref_registry_simple.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/prefs/testing_pref_service.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/values.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/extension_management.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/extension_management_test_util.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/external_policy_loader.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/pref_names.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/manifest.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/manifest_constants.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/url_pattern.h" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h" 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "url/gurl.h" 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace extensions { 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTargetExtension[] = "abcdefghijklmnopabcdefghijklmnop"; 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTargetExtension2[] = "bcdefghijklmnopabcdefghijklmnopa"; 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTargetExtension3[] = "cdefghijklmnopabcdefghijklmnopab"; 301675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdochconst char kTargetExtension4[] = "defghijklmnopabcdefghijklmnopabc"; 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kOtherExtension[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kExampleUpdateUrl[] = "http://example.com/update_url"; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kExampleDictPreference[] = 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{" 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"abcdefghijklmnopabcdefghijklmnop\": {" // kTargetExtension 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"installation_mode\": \"allowed\"," 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " }," 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"bcdefghijklmnopabcdefghijklmnopa\": {" // kTargetExtension2 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"installation_mode\": \"force_installed\"," 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"update_url\": \"http://example.com/update_url\"," 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " }," 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"cdefghijklmnopabcdefghijklmnopab\": {" // kTargetExtension3 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"installation_mode\": \"normal_installed\"," 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"update_url\": \"http://example.com/update_url\"," 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " }," 471675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch " \"defghijklmnopabcdefghijklmnopabc\": {" // kTargetExtension4 481675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch " \"installation_mode\": \"blocked\"," 491675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch " }," 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"*\": {" 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"installation_mode\": \"blocked\"," 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"install_sources\": [\"*://foo.com/*\"]," 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " \"allowed_types\": [\"theme\", \"user_script\"]," 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " }," 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "}"; 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ExtensionManagementServiceTest : public testing::Test { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef ExtensionManagementPrefUpdater<TestingPrefServiceSimple> PrefUpdater; 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagementServiceTest() {} 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ExtensionManagementServiceTest() {} 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // testing::Test: 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetUp() OVERRIDE { 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitPrefService(); 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void InitPrefService() { 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_.reset(); 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_service_.reset(new TestingPrefServiceSimple()); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_service_->registry()->RegisterListPref( 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_names::kAllowedInstallSites); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_service_->registry()->RegisterListPref(pref_names::kAllowedTypes); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_service_->registry()->RegisterListPref(pref_names::kInstallDenyList); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_service_->registry()->RegisterListPref(pref_names::kInstallAllowList); 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_service_->registry()->RegisterDictionaryPref( 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_names::kInstallForceList); 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_service_->registry()->RegisterDictionaryPref( 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_names::kExtensionManagement); 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_.reset(new ExtensionManagement(pref_service_.get())); 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetPref(bool managed, const char* path, base::Value* value) { 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (managed) 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_service_->SetManagedPref(path, value); 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_service_->SetUserPref(path, value); 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void RemovePref(bool managed, const char* path) { 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (managed) 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_service_->RemoveManagedPref(path); 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pref_service_->RemoveUserPref(path); 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetExampleDictPref() { 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string error_msg; 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<base::Value> parsed(base::JSONReader::ReadAndReturnError( 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kExampleDictPreference, 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS, 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NULL, 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &error_msg)); 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(parsed && parsed->IsType(base::Value::TYPE_DICTIONARY)) 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << error_msg; 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kExtensionManagement, parsed.release()); 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<TestingPrefServiceSimple> pref_service_; 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ExtensionManagement> extension_management_; 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ExtensionAdminPolicyTest : public ExtensionManagementServiceTest { 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionAdminPolicyTest() {} 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ExtensionAdminPolicyTest() {} 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void CreateExtension(Manifest::Location location) { 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::DictionaryValue values; 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateExtensionFromValues(location, &values); 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void CreateHostedApp(Manifest::Location location) { 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::DictionaryValue values; 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci values.Set(extensions::manifest_keys::kWebURLs, new base::ListValue()); 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci values.SetString(extensions::manifest_keys::kLaunchWebURL, 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.example.com"); 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateExtensionFromValues(location, &values); 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void CreateExtensionFromValues(Manifest::Location location, 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::DictionaryValue* values) { 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci values->SetString(extensions::manifest_keys::kName, "test"); 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci values->SetString(extensions::manifest_keys::kVersion, "0.1"); 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string error; 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_ = Extension::Create(base::FilePath(), location, *values, 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Extension::NO_FLAGS, &error); 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(extension_.get()); 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Wrappers for legacy admin policy functions, for testing purpose only. 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool BlacklistedByDefault(const base::ListValue* blacklist); 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool UserMayLoad(const base::ListValue* blacklist, 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::ListValue* whitelist, 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::DictionaryValue* forcelist, 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::ListValue* allowed_types, 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const Extension* extension, 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16* error); 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool UserMayModifySettings(const Extension* extension, base::string16* error); 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool MustRemainEnabled(const Extension* extension, base::string16* error); 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> extension_; 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ExtensionAdminPolicyTest::BlacklistedByDefault( 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::ListValue* blacklist) { 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitPrefService(); 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (blacklist) 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallDenyList, blacklist->DeepCopy()); 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return extension_management_->BlacklistedByDefault(); 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ExtensionAdminPolicyTest::UserMayLoad( 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::ListValue* blacklist, 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::ListValue* whitelist, 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::DictionaryValue* forcelist, 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::ListValue* allowed_types, 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const Extension* extension, 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16* error) { 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitPrefService(); 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (blacklist) 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallDenyList, blacklist->DeepCopy()); 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (whitelist) 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallAllowList, whitelist->DeepCopy()); 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (forcelist) 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallForceList, forcelist->DeepCopy()); 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (allowed_types) 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kAllowedTypes, allowed_types->DeepCopy()); 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return extension_management_->GetProvider()->UserMayLoad(extension, error); 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ExtensionAdminPolicyTest::UserMayModifySettings(const Extension* extension, 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16* error) { 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitPrefService(); 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return extension_management_->GetProvider()->UserMayModifySettings(extension, 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci error); 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ExtensionAdminPolicyTest::MustRemainEnabled(const Extension* extension, 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16* error) { 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitPrefService(); 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return extension_management_->GetProvider()->MustRemainEnabled(extension, 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci error); 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Verify that preference controlled by legacy ExtensionInstallSources policy is 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// handled well. 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionManagementServiceTest, LegacyInstallSources) { 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue allowed_sites_pref; 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_sites_pref.AppendString("https://www.example.com/foo"); 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_sites_pref.AppendString("https://corp.mycompany.com/*"); 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref( 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci true, pref_names::kAllowedInstallSites, allowed_sites_pref.DeepCopy()); 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const URLPatternSet& allowed_sites = 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadGlobalSettings().install_sources; 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(extension_management_->ReadGlobalSettings() 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .has_restricted_install_sources); 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(allowed_sites.is_empty()); 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(allowed_sites.MatchesURL(GURL("https://www.example.com/foo"))); 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(allowed_sites.MatchesURL(GURL("https://www.example.com/bar"))); 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_sites.MatchesURL(GURL("https://corp.mycompany.com/entry"))); 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE( 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_sites.MatchesURL(GURL("https://www.mycompany.com/entry"))); 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Verify that preference controlled by legacy ExtensionAllowedTypes policy is 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// handled well. 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionManagementServiceTest, LegacyAllowedTypes) { 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue allowed_types_pref; 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_types_pref.AppendInteger(Manifest::TYPE_THEME); 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_types_pref.AppendInteger(Manifest::TYPE_USER_SCRIPT); 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kAllowedTypes, allowed_types_pref.DeepCopy()); 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<Manifest::Type>& allowed_types = 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadGlobalSettings().allowed_types; 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE( 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadGlobalSettings().has_restricted_allowed_types); 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(allowed_types.size() == 2); 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(std::find(allowed_types.begin(), 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_types.end(), 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Manifest::TYPE_EXTENSION) != allowed_types.end()); 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(std::find(allowed_types.begin(), 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_types.end(), 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Manifest::TYPE_THEME) != allowed_types.end()); 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(std::find(allowed_types.begin(), 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_types.end(), 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Manifest::TYPE_USER_SCRIPT) != allowed_types.end()); 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Verify that preference controlled by legacy ExtensionInstallBlacklist policy 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// is handled well. 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionManagementServiceTest, LegacyInstallBlacklist) { 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue denied_list_pref; 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci denied_list_pref.AppendString(kTargetExtension); 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy()); 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_BLOCKED); 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_ALLOWED); 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Verify that preference controlled by legacy ExtensionInstallWhitelist policy 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// is handled well. 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionManagementServiceTest, LegacyInstallWhitelist) { 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue denied_list_pref; 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci denied_list_pref.AppendString("*"); 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue allowed_list_pref; 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_list_pref.AppendString(kTargetExtension); 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy()); 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy()); 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_ALLOWED); 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_BLOCKED); 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Verify that install whitelist preference set by user is ignored. 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RemovePref(true, pref_names::kInstallAllowList); 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(false, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy()); 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_BLOCKED); 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Verify that preference controlled by legacy ExtensionInstallForcelist policy 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// is handled well. 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionManagementServiceTest, LegacyInstallForcelist) { 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::DictionaryValue forced_list_pref; 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExternalPolicyLoader::AddExtension( 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &forced_list_pref, kTargetExtension, kExampleUpdateUrl); 2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallForceList, forced_list_pref.DeepCopy()); 2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, 2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_FORCED); 2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).update_url, 2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kExampleUpdateUrl); 2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, 2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_ALLOWED); 2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Verify that install forcelist preference set by user is ignored. 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RemovePref(true, pref_names::kInstallForceList); 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(false, pref_names::kInstallForceList, forced_list_pref.DeepCopy()); 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, 3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_ALLOWED); 3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests parsing of new dictionary preference. 3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionManagementServiceTest, PreferenceParsing) { 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetExampleDictPref(); 3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Verifies the installation mode settings. 3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(extension_management_->BlacklistedByDefault()); 3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, 3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_ALLOWED); 3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ( 3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadById(kTargetExtension2).installation_mode, 3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_FORCED); 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension2).update_url, 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kExampleUpdateUrl); 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ( 3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadById(kTargetExtension3).installation_mode, 3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_RECOMMENDED); 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension3).update_url, 3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kExampleUpdateUrl); 3211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, 3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_BLOCKED); 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Verifies global settings. 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(extension_management_->ReadGlobalSettings() 3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .has_restricted_install_sources); 3271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const URLPatternSet& allowed_sites = 3281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadGlobalSettings().install_sources; 3291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(allowed_sites.size(), 1u); 3301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(allowed_sites.MatchesURL(GURL("http://foo.com/entry"))); 3311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(allowed_sites.MatchesURL(GURL("http://bar.com/entry"))); 3321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 3341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadGlobalSettings().has_restricted_allowed_types); 3351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<Manifest::Type>& allowed_types = 3361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadGlobalSettings().allowed_types; 3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(allowed_types.size(), 2u); 3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(std::find(allowed_types.begin(), 3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_types.end(), 3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Manifest::TYPE_THEME) != allowed_types.end()); 3411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(std::find(allowed_types.begin(), 3421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_types.end(), 3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Manifest::TYPE_USER_SCRIPT) != allowed_types.end()); 3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests functionality of new preference as to deprecate legacy 3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// ExtensionInstallSources policy. 3481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionManagementServiceTest, NewInstallSources) { 3491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set the legacy preference, and verifies that it works. 3501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue allowed_sites_pref; 3511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_sites_pref.AppendString("https://www.example.com/foo"); 3521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref( 3531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci true, pref_names::kAllowedInstallSites, allowed_sites_pref.DeepCopy()); 3541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(extension_management_->ReadGlobalSettings() 3551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .has_restricted_install_sources); 3561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 3571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadGlobalSettings() 3581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .install_sources.MatchesURL(GURL("https://www.example.com/foo"))); 3591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set the new dictionary preference. 3611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 3621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefUpdater updater(pref_service_.get()); 3631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.ClearInstallSources(); 3641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Verifies that the new one overrides the legacy ones. 3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(extension_management_->ReadGlobalSettings() 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .has_restricted_install_sources); 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE( 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadGlobalSettings() 3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .install_sources.MatchesURL(GURL("https://www.example.com/foo"))); 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Updates the new dictionary preference. 3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefUpdater updater(pref_service_.get()); 3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.AddInstallSource("https://corp.mycompany.com/*"); 3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(extension_management_->ReadGlobalSettings() 3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .has_restricted_install_sources); 3791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(extension_management_->ReadGlobalSettings() 3801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .install_sources.MatchesURL( 3811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL("https://corp.mycompany.com/entry"))); 3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests functionality of new preference as to deprecate legacy 3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// ExtensionAllowedTypes policy. 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionManagementServiceTest, NewAllowedTypes) { 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set the legacy preference, and verifies that it works. 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue allowed_types_pref; 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_types_pref.AppendInteger(Manifest::TYPE_USER_SCRIPT); 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kAllowedTypes, allowed_types_pref.DeepCopy()); 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadGlobalSettings().has_restricted_allowed_types); 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadGlobalSettings().allowed_types.size(), 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1u); 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadGlobalSettings().allowed_types[0], 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Manifest::TYPE_USER_SCRIPT); 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set the new dictionary preference. 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefUpdater updater(pref_service_.get()); 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.ClearAllowedTypes(); 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Verifies that the new one overrides the legacy ones. 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadGlobalSettings().has_restricted_allowed_types); 4061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadGlobalSettings().allowed_types.size(), 4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0u); 4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Updates the new dictionary preference. 4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefUpdater updater(pref_service_.get()); 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.AddAllowedType("theme"); 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadGlobalSettings().has_restricted_allowed_types); 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadGlobalSettings().allowed_types.size(), 4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1u); 4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadGlobalSettings().allowed_types[0], 4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Manifest::TYPE_THEME); 4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests functionality of new preference as to deprecate legacy 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// ExtensionInstallBlacklist policy. 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionManagementServiceTest, NewInstallBlacklist) { 4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set the new dictionary preference. 4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefUpdater updater(pref_service_.get()); 4281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.SetBlacklistedByDefault(false); // Allowed by default. 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.SetIndividualExtensionInstallationAllowed(kTargetExtension, false); 4301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.ClearPerExtensionSettings(kTargetExtension2); 4311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.ClearPerExtensionSettings(kOtherExtension); 4321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(extension_management_->BlacklistedByDefault()); 4341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, 4351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_BLOCKED); 4361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, 4371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_ALLOWED); 4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set legacy preference. 4401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue denied_list_pref; 4411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci denied_list_pref.AppendString("*"); 4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci denied_list_pref.AppendString(kTargetExtension2); 4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy()); 4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue allowed_list_pref; 4461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_list_pref.AppendString(kTargetExtension); 4471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy()); 4481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Verifies that the new one have higher priority over the legacy ones. 4501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(extension_management_->BlacklistedByDefault()); 4511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, 4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_BLOCKED); 4531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ( 4541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadById(kTargetExtension2).installation_mode, 4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_BLOCKED); 4561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, 4571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_ALLOWED); 4581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests functionality of new preference as to deprecate legacy 4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// ExtensionInstallWhitelist policy. 4621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionManagementServiceTest, NewInstallWhitelist) { 4631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set the new dictionary preference. 4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 4651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefUpdater updater(pref_service_.get()); 4661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.SetBlacklistedByDefault(true); // Disallowed by default. 4671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.SetIndividualExtensionInstallationAllowed(kTargetExtension, true); 4681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.ClearPerExtensionSettings(kTargetExtension2); 4691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.ClearPerExtensionSettings(kOtherExtension); 4701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(extension_management_->BlacklistedByDefault()); 4721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, 4731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_ALLOWED); 4741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, 4751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_BLOCKED); 4761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set legacy preference. 4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue denied_list_pref; 4791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci denied_list_pref.AppendString(kTargetExtension); 4801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy()); 4811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue allowed_list_pref; 4831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_list_pref.AppendString(kTargetExtension2); 4841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy()); 4851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Verifies that the new one have higher priority over the legacy ones. 4871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(extension_management_->BlacklistedByDefault()); 4881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, 4891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_ALLOWED); 4901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ( 4911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_->ReadById(kTargetExtension2).installation_mode, 4921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_ALLOWED); 4931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, 4941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_BLOCKED); 4951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests functionality of new preference as to deprecate legacy 4981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// ExtensionInstallForcelist policy. 4991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionManagementServiceTest, NewInstallForcelist) { 5001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set some legacy preferences, to verify that the new one overrides the 5011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // legacy ones. 5021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue denied_list_pref; 5031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci denied_list_pref.AppendString(kTargetExtension); 5041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy()); 5051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set the new dictionary preference. 5071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 5081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefUpdater updater(pref_service_.get()); 5091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.SetIndividualExtensionAutoInstalled( 5101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kTargetExtension, kExampleUpdateUrl, true); 5111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updater.ClearPerExtensionSettings(kOtherExtension); 5121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 5131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, 5141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_FORCED); 5151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kTargetExtension).update_url, 5161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kExampleUpdateUrl); 5171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, 5181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionManagement::INSTALLATION_ALLOWED); 5191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5211675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch// Tests the behavior of IsInstallationExplicitlyAllowed(). 5221675a649fd7a8b3cb80ffddae2dc181f122353c5Ben MurdochTEST_F(ExtensionManagementServiceTest, IsInstallationExplicitlyAllowed) { 5231675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch SetExampleDictPref(); 5241675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch 5251675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // Constant name indicates the installation_mode of extensions in example 5261675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // preference. 5271675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch const char* allowed = kTargetExtension; 5281675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch const char* forced = kTargetExtension2; 5291675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch const char* recommended = kTargetExtension3; 5301675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch const char* blocked = kTargetExtension4; 5311675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch const char* not_specified = kOtherExtension; 5321675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch 5331675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // BlacklistedByDefault() is true in example preference. 5341675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_TRUE(extension_management_->IsInstallationExplicitlyAllowed(allowed)); 5351675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_TRUE(extension_management_->IsInstallationExplicitlyAllowed(forced)); 5361675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_TRUE( 5371675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch extension_management_->IsInstallationExplicitlyAllowed(recommended)); 5381675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_FALSE(extension_management_->IsInstallationExplicitlyAllowed(blocked)); 5391675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_FALSE( 5401675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch extension_management_->IsInstallationExplicitlyAllowed(not_specified)); 5411675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch 5421675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch { 5431675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // Set BlacklistedByDefault() to false. 5441675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch PrefUpdater pref(pref_service_.get()); 5451675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch pref.SetBlacklistedByDefault(false); 5461675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch } 5471675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch 5481675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch // The result should remain the same. 5491675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_TRUE(extension_management_->IsInstallationExplicitlyAllowed(allowed)); 5501675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_TRUE(extension_management_->IsInstallationExplicitlyAllowed(forced)); 5511675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_TRUE( 5521675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch extension_management_->IsInstallationExplicitlyAllowed(recommended)); 5531675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_FALSE(extension_management_->IsInstallationExplicitlyAllowed(blocked)); 5541675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch EXPECT_FALSE( 5551675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch extension_management_->IsInstallationExplicitlyAllowed(not_specified)); 5561675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch} 5571675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch 5581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests the flag value indicating that extensions are blacklisted by default. 5591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionAdminPolicyTest, BlacklistedByDefault) { 5601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(BlacklistedByDefault(NULL)); 5611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue blacklist; 5631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blacklist.Append(new base::StringValue(kOtherExtension)); 5641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(BlacklistedByDefault(&blacklist)); 5651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blacklist.Append(new base::StringValue("*")); 5661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(BlacklistedByDefault(&blacklist)); 5671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blacklist.Clear(); 5691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blacklist.Append(new base::StringValue("*")); 5701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(BlacklistedByDefault(&blacklist)); 5711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests UserMayLoad for required extensions. 5741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionAdminPolicyTest, UserMayLoadRequired) { 5751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateExtension(Manifest::COMPONENT); 5761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(UserMayLoad(NULL, NULL, NULL, NULL, extension_.get(), NULL)); 5771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 error; 5781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(UserMayLoad(NULL, NULL, NULL, NULL, extension_.get(), &error)); 5791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(error.empty()); 5801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Required extensions may load even if they're on the blacklist. 5821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue blacklist; 5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blacklist.Append(new base::StringValue(extension_->id())); 5841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 5851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL)); 5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blacklist.Append(new base::StringValue("*")); 5881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 5891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL)); 5901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests UserMayLoad when no blacklist exists, or it's empty. 5931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionAdminPolicyTest, UserMayLoadNoBlacklist) { 5941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateExtension(Manifest::INTERNAL); 5951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(UserMayLoad(NULL, NULL, NULL, NULL, extension_.get(), NULL)); 5961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue blacklist; 5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL)); 5991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 error; 6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), &error)); 6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(error.empty()); 6031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests UserMayLoad for an extension on the whitelist. 6061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionAdminPolicyTest, UserMayLoadWhitelisted) { 6071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateExtension(Manifest::INTERNAL); 6081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue whitelist; 6101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci whitelist.Append(new base::StringValue(extension_->id())); 6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(NULL, &whitelist, NULL, NULL, extension_.get(), NULL)); 6131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue blacklist; 6151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blacklist.Append(new base::StringValue(extension_->id())); 6161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 6171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(NULL, &whitelist, NULL, NULL, extension_.get(), NULL)); 6181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 error; 6191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 6201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(NULL, &whitelist, NULL, NULL, extension_.get(), &error)); 6211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(error.empty()); 6221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests UserMayLoad for an extension on the blacklist. 6251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionAdminPolicyTest, UserMayLoadBlacklisted) { 6261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateExtension(Manifest::INTERNAL); 6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Blacklisted by default. 6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue blacklist; 6301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blacklist.Append(new base::StringValue("*")); 6311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE( 6321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL)); 6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 error; 6341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE( 6351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), &error)); 6361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(error.empty()); 6371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Extension on the blacklist, with and without wildcard. 6391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blacklist.Append(new base::StringValue(extension_->id())); 6401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE( 6411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL)); 6421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blacklist.Clear(); 6431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blacklist.Append(new base::StringValue(extension_->id())); 6441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE( 6451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL)); 6461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // With a whitelist. There's no such thing as a whitelist wildcard. 6481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue whitelist; 6491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci whitelist.Append(new base::StringValue("behllobkkfkfnphdnhnkndlbkcpglgmj")); 6501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE( 6511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(&blacklist, &whitelist, NULL, NULL, extension_.get(), NULL)); 6521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci whitelist.Append(new base::StringValue("*")); 6531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE( 6541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(&blacklist, &whitelist, NULL, NULL, extension_.get(), NULL)); 6551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionAdminPolicyTest, UserMayLoadAllowedTypes) { 6581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateExtension(Manifest::INTERNAL); 6591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(UserMayLoad(NULL, NULL, NULL, NULL, extension_.get(), NULL)); 6601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue allowed_types; 6621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE( 6631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(NULL, NULL, NULL, &allowed_types, extension_.get(), NULL)); 6641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_types.AppendInteger(Manifest::TYPE_EXTENSION); 6661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 6671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(NULL, NULL, NULL, &allowed_types, extension_.get(), NULL)); 6681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateHostedApp(Manifest::INTERNAL); 6701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE( 6711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(NULL, NULL, NULL, &allowed_types, extension_.get(), NULL)); 6721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateHostedApp(Manifest::EXTERNAL_POLICY_DOWNLOAD); 6741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE( 6751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserMayLoad(NULL, NULL, NULL, &allowed_types, extension_.get(), NULL)); 6761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionAdminPolicyTest, UserMayModifySettings) { 6791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateExtension(Manifest::INTERNAL); 6801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(UserMayModifySettings(extension_.get(), NULL)); 6811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 error; 6821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(UserMayModifySettings(extension_.get(), &error)); 6831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(error.empty()); 6841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateExtension(Manifest::EXTERNAL_POLICY_DOWNLOAD); 6861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci error.clear(); 6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(UserMayModifySettings(extension_.get(), NULL)); 6881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(UserMayModifySettings(extension_.get(), &error)); 6891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(error.empty()); 6901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionAdminPolicyTest, MustRemainEnabled) { 6931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateExtension(Manifest::EXTERNAL_POLICY_DOWNLOAD); 6941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(MustRemainEnabled(extension_.get(), NULL)); 6951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 error; 6961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(MustRemainEnabled(extension_.get(), &error)); 6971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(error.empty()); 6981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateExtension(Manifest::INTERNAL); 7001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci error.clear(); 7011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(MustRemainEnabled(extension_.get(), NULL)); 7021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(MustRemainEnabled(extension_.get(), &error)); 7031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(error.empty()); 7041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 7051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace extensions 707