extension_pref_value_map_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/pref_store_observer_mock.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_pref_value_map.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kExt1[] = "ext1";
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kExt2[] = "ext2";
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kExt3[] = "ext3";
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPref1[] = "path1.subpath";
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPref2[] = "path2";
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPref3[] = "path3";
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPref4[] = "path4";
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)static base::Value* CreateVal(const char* str) {
263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return new base::StringValue(str);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static base::Time CreateTime(int64 t) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return base::Time::FromInternalValue(t);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename BASECLASS>
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefValueMapTestBase : public BASECLASS {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const extensions::ExtensionPrefsScope kRegular =
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      extensions::kExtensionPrefsScopeRegular;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const extensions::ExtensionPrefsScope kRegularOnly =
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      extensions::kExtensionPrefsScopeRegularOnly;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const extensions::ExtensionPrefsScope kIncognitoPersistent =
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      extensions::kExtensionPrefsScopeIncognitoPersistent;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const extensions::ExtensionPrefsScope kIncognitoSessionOnly =
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      extensions::kExtensionPrefsScopeIncognitoSessionOnly;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns an empty string if the key is not set.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetValue(const char * key, bool incognito) const {
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::Value *value =
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        epvm_.GetEffectivePrefValue(key, incognito, NULL);
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    std::string string_value;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (value)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      value->GetAsString(&string_value);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return string_value;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExtensionPrefValueMap epvm_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefValueMapTest
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public ExtensionPrefValueMapTestBase<testing::Test> {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A gmock-ified implementation of PrefStore::Observer.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefValueMapObserverMock
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public ExtensionPrefValueMap::Observer {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExtensionPrefValueMapObserverMock() {}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ExtensionPrefValueMapObserverMock() {}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(OnPrefValueChanged, void(const std::string&));
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(OnInitializationCompleted, void());
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(OnExtensionPrefValueMapDestruction, void());
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ExtensionPrefValueMapObserverMock);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionPrefValueMapTest, SetAndGetPrefValue) {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val1"));
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val1", GetValue(kPref1, false));
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionPrefValueMapTest, GetNotSetPrefValue) {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", GetValue(kPref1, false));
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure the last-installed extension wins for each preference.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionPrefValueMapTest, Override) {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt2, CreateTime(20), true);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt3, CreateTime(30), true);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val1"));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt2, kPref1, kRegular, CreateVal("val2"));
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt3, kPref1, kRegular, CreateVal("val3"));
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref2, kRegular, CreateVal("val4"));
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt2, kPref2, kRegular, CreateVal("val5"));
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val6"));
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref2, kRegular, CreateVal("val7"));
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref3, kRegular, CreateVal("val8"));
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val3", GetValue(kPref1, false));
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val5", GetValue(kPref2, false));
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val8", GetValue(kPref3, false));
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionPrefValueMapTest, OverrideChecks) {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt2, CreateTime(20), true);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt3, CreateTime(30), true);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(epvm_.DoesExtensionControlPref(kExt1, kPref1, NULL));
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(epvm_.DoesExtensionControlPref(kExt2, kPref1, NULL));
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(epvm_.DoesExtensionControlPref(kExt3, kPref1, NULL));
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(epvm_.CanExtensionControlPref(kExt1, kPref1, false));
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(epvm_.CanExtensionControlPref(kExt2, kPref1, false));
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(epvm_.CanExtensionControlPref(kExt3, kPref1, false));
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt2, kPref1, kRegular, CreateVal("val1"));
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(epvm_.DoesExtensionControlPref(kExt1, kPref1, NULL));
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(epvm_.DoesExtensionControlPref(kExt2, kPref1, NULL));
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(epvm_.DoesExtensionControlPref(kExt3, kPref1, NULL));
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(epvm_.CanExtensionControlPref(kExt1, kPref1, false));
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(epvm_.CanExtensionControlPref(kExt2, kPref1, false));
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(epvm_.CanExtensionControlPref(kExt3, kPref1, false));
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionPrefValueMapTest, SetAndGetPrefValueIncognito) {
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val1"));
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val1", GetValue(kPref1, true));
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionPrefValueMapTest, UninstallOnlyExtension) {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val1"));
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.UnregisterExtension(kExt1);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", GetValue(kPref1, false));
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests uninstalling an extension that wasn't winning for any preferences.
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionPrefValueMapTest, UninstallIrrelevantExtension) {
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt2, CreateTime(10), true);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val1"));
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt2, kPref1, kRegular, CreateVal("val2"));
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref2, kRegular, CreateVal("val3"));
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt2, kPref2, kRegular, CreateVal("val4"));
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.UnregisterExtension(kExt1);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val2", GetValue(kPref1, false));
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val4", GetValue(kPref2, false));
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests uninstalling an extension that was winning for all preferences.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionPrefValueMapTest, UninstallExtensionFromTop) {
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt2, CreateTime(20), true);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt3, CreateTime(30), true);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val1"));
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt2, kPref1, kRegular, CreateVal("val2"));
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt3, kPref1, kRegular, CreateVal("val3"));
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref2, kRegular, CreateVal("val4"));
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt3, kPref2, kRegular, CreateVal("val5"));
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.UnregisterExtension(kExt3);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val2", GetValue(kPref1, false));
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val4", GetValue(kPref2, false));
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests uninstalling an extension that was winning for only some preferences.
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionPrefValueMapTest, UninstallExtensionFromMiddle) {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt2, CreateTime(20), true);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt3, CreateTime(30), true);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val1"));
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt2, kPref1, kRegular, CreateVal("val2"));
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt3, kPref1, kRegular, CreateVal("val3"));
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref2, kRegular, CreateVal("val4"));
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt2, kPref2, kRegular, CreateVal("val5"));
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref3, kRegular, CreateVal("val6"));
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt2, kPref4, kRegular, CreateVal("val7"));
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.UnregisterExtension(kExt2);
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val3", GetValue(kPref1, false));
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val4", GetValue(kPref2, false));
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val6", GetValue(kPref3, false));
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", GetValue(kPref4, false));
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests triggering of notifications to registered observers.
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionPrefValueMapTest, NotifyWhenNeeded) {
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  using testing::Mock;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  using testing::StrEq;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExtensionPrefValueMapObserverMock observer;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.AddObserver(&observer);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val1"));
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Mock::VerifyAndClearExpectations(&observer);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Write the same value again.
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))).Times(0);
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val1"));
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Mock::VerifyAndClearExpectations(&observer);
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Override incognito value.
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val2"));
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Mock::VerifyAndClearExpectations(&observer);
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Override non-incognito value.
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val3"));
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Mock::VerifyAndClearExpectations(&observer);
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Disable.
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionState(kExt1, false);
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Mock::VerifyAndClearExpectations(&observer);
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Enable.
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionState(kExt1, true);
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Mock::VerifyAndClearExpectations(&observer);
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Uninstall
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.UnregisterExtension(kExt1);
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Mock::VerifyAndClearExpectations(&observer);
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RemoveObserver(&observer);
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Write new value --> no notification after removing observer.
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))).Times(0);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val4"));
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Mock::VerifyAndClearExpectations(&observer);
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests disabling an extension.
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionPrefValueMapTest, DisableExt) {
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val1"));
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionState(kExt1, false);
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", GetValue(kPref1, false));
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests disabling and reenabling an extension.
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionPrefValueMapTest, ReenableExt) {
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionPref(kExt1, kPref1, kRegular, CreateVal("val1"));
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionState(kExt1, false);
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.SetExtensionState(kExt1, true);
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("val1", GetValue(kPref1, false));
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct OverrideIncognitoTestCase {
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OverrideIncognitoTestCase(int val_ext1_regular,
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            int val_ext1_regular_only,
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            int val_ext1_incognito_pers,
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            int val_ext1_incognito_sess,
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            int val_ext2_regular,
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            int val_ext2_regular_only,
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            int val_ext2_incognito_pers,
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            int val_ext2_incognito_sess,
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            int effective_value_regular,
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            int effective_value_incognito)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : val_ext1_regular_(val_ext1_regular),
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        val_ext1_regular_only_(val_ext1_regular_only),
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        val_ext1_incognito_pers_(val_ext1_incognito_pers),
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        val_ext1_incognito_sess_(val_ext1_incognito_sess),
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        val_ext2_regular_(val_ext2_regular),
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        val_ext2_regular_only_(val_ext2_regular_only),
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        val_ext2_incognito_pers_(val_ext2_incognito_pers),
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        val_ext2_incognito_sess_(val_ext2_incognito_sess),
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        effective_value_regular_(effective_value_regular),
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        effective_value_incognito_(effective_value_incognito) {}
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // pers. = persistent
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // sess. = session only
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int val_ext1_regular_;           // pref value of extension 1
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int val_ext1_regular_only_;      // pref value of extension 1 regular-only.
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int val_ext1_incognito_pers_;    // pref value of extension 1 incognito pers.
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int val_ext1_incognito_sess_;    // pref value of extension 1 incognito sess.
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int val_ext2_regular_;           // pref value of extension 2
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int val_ext2_regular_only_;      // pref value of extension 2 regular-only.
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int val_ext2_incognito_pers_;    // pref value of extension 2 incognito pers.
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int val_ext2_incognito_sess_;    // pref value of extension 2 incognito sess.
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int effective_value_regular_;    // desired winner regular
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int effective_value_incognito_;  // desired winner incognito
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefValueMapTestIncognitoTests
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public ExtensionPrefValueMapTestBase<
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          testing::TestWithParam<OverrideIncognitoTestCase> > {
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ExtensionPrefValueMapTestIncognitoTests, OverrideIncognito) {
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OverrideIncognitoTestCase test = GetParam();
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* strings[] = {
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "undefined",
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "val1",
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "val2",
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "val3",
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "val4",
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "val5",
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "val6",
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "val7",
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "val8",
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt1, CreateTime(10), true);
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.RegisterExtension(kExt2, CreateTime(20), true);
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (test.val_ext1_regular_) {
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    epvm_.SetExtensionPref(kExt1, kPref1, kRegular,
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           CreateVal(strings[test.val_ext1_regular_]));
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (test.val_ext1_regular_only_) {
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    epvm_.SetExtensionPref(kExt1, kPref1, kRegularOnly,
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           CreateVal(strings[test.val_ext1_regular_only_]));
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (test.val_ext1_incognito_pers_) {
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    epvm_.SetExtensionPref(kExt1, kPref1, kIncognitoPersistent,
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           CreateVal(strings[test.val_ext1_incognito_pers_]));
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (test.val_ext1_incognito_sess_) {
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    epvm_.SetExtensionPref(kExt1, kPref1, kIncognitoSessionOnly,
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           CreateVal(strings[test.val_ext1_incognito_sess_]));
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (test.val_ext2_regular_) {
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    epvm_.SetExtensionPref(kExt2, kPref1, kRegular,
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           CreateVal(strings[test.val_ext2_regular_]));
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (test.val_ext2_regular_only_) {
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    epvm_.SetExtensionPref(kExt2, kPref1, kRegularOnly,
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           CreateVal(strings[test.val_ext2_regular_only_]));
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (test.val_ext2_incognito_pers_) {
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    epvm_.SetExtensionPref(kExt2, kPref1, kIncognitoPersistent,
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           CreateVal(strings[test.val_ext2_incognito_pers_]));
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (test.val_ext2_incognito_sess_) {
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    epvm_.SetExtensionPref(kExt2, kPref1, kIncognitoSessionOnly,
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           CreateVal(strings[test.val_ext2_incognito_sess_]));
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string actual;
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(strings[test.effective_value_regular_], GetValue(kPref1, false));
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(strings[test.effective_value_incognito_], GetValue(kPref1, true));
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.UnregisterExtension(kExt1);
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epvm_.UnregisterExtension(kExt2);
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExtensionPrefValueMapTestIncognitoTestsInstance,
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExtensionPrefValueMapTestIncognitoTests,
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    testing::Values(
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // e.g. (1, 0, 0, 0,  0, 0, 7, 0,  1, 7), means:
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // ext1 regular is set to "val1", ext2 incognito persistent is set to
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // "val7"
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // --> the winning regular value is "val1", the winning incognito
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        //     value is "val7".
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 0, 0, 0,  0, 0, 0, 0,  1, 1),
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 2, 0, 0,  0, 0, 0, 0,  2, 1),
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 0, 3, 0,  0, 0, 0, 0,  1, 3),
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 0, 0, 4,  0, 0, 0, 0,  1, 4),
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 0, 3, 4,  0, 0, 0, 0,  1, 4),
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 2, 3, 0,  0, 0, 0, 0,  2, 3),
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 0, 0, 0,  5, 0, 0, 0,  5, 5),
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 2, 3, 0,  5, 0, 0, 0,  5, 5),
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 0, 0, 0,  0, 6, 0, 0,  6, 1),
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 0, 3, 0,  5, 6, 0, 0,  6, 5),
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 0, 0, 4,  5, 6, 0, 0,  6, 5),
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 0, 0, 0,  0, 0, 7, 0,  1, 7),
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 2, 0, 0,  5, 0, 7, 0,  5, 7),
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 2, 0, 0,  5, 0, 0, 8,  5, 8),
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 2, 0, 0,  5, 0, 7, 8,  5, 8),
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        OverrideIncognitoTestCase(1, 2, 3, 0,  0, 6, 7, 0,  6, 7)));
401