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