1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/command_line.h"
#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/memory/scoped_ptr.h"
#include "base/path_service.h"
#include "base/prefs/pref_registry_simple.h"
#include "base/prefs/scoped_user_pref_update.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/browser/prefs/browser_prefs.h"
#include "chrome/browser/prefs/command_line_pref_store.h"
#include "chrome/browser/prefs/pref_service_mock_factory.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "chrome/test/base/testing_pref_service_syncable.h"
#include "chrome/test/base/testing_profile.h"
#include "components/policy/core/browser/configuration_policy_pref_store.h"
#include "components/policy/core/common/mock_configuration_policy_provider.h"
#include "components/pref_registry/pref_registry_syncable.h"
#include "content/public/common/web_preferences.h"
#include "content/public/test/web_contents_tester.h"
#include "ui/base/test/data/resource.h"
using content::WebContentsTester;
using content::WebPreferences;
TEST(ChromePrefServiceTest, UpdateCommandLinePrefStore) {
TestingPrefServiceSimple prefs;
prefs.registry()->RegisterBooleanPref(prefs::kCloudPrintProxyEnabled, false);
// Check to make sure the value is as expected.
const PrefService::Preference* pref =
prefs.FindPreference(prefs::kCloudPrintProxyEnabled);
ASSERT_TRUE(pref);
const base::Value* value = pref->GetValue();
ASSERT_TRUE(value);
EXPECT_EQ(base::Value::TYPE_BOOLEAN, value->GetType());
bool actual_bool_value = true;
EXPECT_TRUE(value->GetAsBoolean(&actual_bool_value));
EXPECT_FALSE(actual_bool_value);
// Change the command line.
base::CommandLine cmd_line(base::CommandLine::NO_PROGRAM);
cmd_line.AppendSwitch(switches::kEnableCloudPrintProxy);
// Call UpdateCommandLinePrefStore and check to see if the value has changed.
prefs.UpdateCommandLinePrefStore(new CommandLinePrefStore(&cmd_line));
pref = prefs.FindPreference(prefs::kCloudPrintProxyEnabled);
ASSERT_TRUE(pref);
value = pref->GetValue();
ASSERT_TRUE(value);
EXPECT_EQ(base::Value::TYPE_BOOLEAN, value->GetType());
actual_bool_value = false;
EXPECT_TRUE(value->GetAsBoolean(&actual_bool_value));
EXPECT_TRUE(actual_bool_value);
}
class ChromePrefServiceUserFilePrefsTest : public testing::Test {
protected:
void SetUp() override {
ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_dir_));
data_dir_ = data_dir_.AppendASCII("pref_service");
ASSERT_TRUE(base::PathExists(data_dir_));
}
void ClearListValue(PrefService* prefs, const char* key) {
ListPrefUpdate updater(prefs, key);
updater->Clear();
}
void ClearDictionaryValue(PrefService* prefs, const char* key) {
DictionaryPrefUpdate updater(prefs, key);
updater->Clear();
}
// The path to temporary directory used to contain the test operations.
base::ScopedTempDir temp_dir_;
// The path to the directory where the test data is stored.
base::FilePath data_dir_;
// A message loop that we can use as the file thread message loop.
base::MessageLoop message_loop_;
};
class ChromePrefServiceWebKitPrefs : public ChromeRenderViewHostTestHarness {
protected:
void SetUp() override {
ChromeRenderViewHostTestHarness::SetUp();
// Supply our own profile so we use the correct profile data. The test
// harness is not supposed to overwrite a profile if it's already created.
// Set some (WebKit) user preferences.
TestingPrefServiceSyncable* pref_services =
profile()->GetTestingPrefService();
pref_services->SetUserPref(prefs::kDefaultCharset,
new base::StringValue("utf8"));
pref_services->SetUserPref(prefs::kWebKitDefaultFontSize,
new base::FundamentalValue(20));
pref_services->SetUserPref(prefs::kWebKitTextAreasAreResizable,
new base::FundamentalValue(false));
pref_services->SetUserPref(prefs::kWebKitUsesUniversalDetector,
new base::FundamentalValue(true));
pref_services->SetUserPref("webkit.webprefs.foo",
new base::StringValue("bar"));
}
};
// Tests to see that webkit preferences are properly loaded and copied over
// to a WebPreferences object.
TEST_F(ChromePrefServiceWebKitPrefs, PrefsCopied) {
WebPreferences webkit_prefs =
WebContentsTester::For(web_contents())->TestComputeWebkitPrefs();
// These values have been overridden by the profile preferences.
EXPECT_EQ("UTF-8", webkit_prefs.default_encoding);
EXPECT_EQ(20, webkit_prefs.default_font_size);
EXPECT_FALSE(webkit_prefs.text_areas_are_resizable);
EXPECT_TRUE(webkit_prefs.uses_universal_detector);
// These should still be the default values.
#if defined(OS_MACOSX)
const char kDefaultFont[] = "Times";
#elif defined(OS_CHROMEOS)
const char kDefaultFont[] = "Tinos";
#else
const char kDefaultFont[] = "Times New Roman";
#endif
EXPECT_EQ(base::ASCIIToUTF16(kDefaultFont),
webkit_prefs.standard_font_family_map[prefs::kWebKitCommonScript]);
EXPECT_TRUE(webkit_prefs.javascript_enabled);
}
|