12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/path_service.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prefs/browser_prefs.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prefs/command_line_pref_store.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/prefs/pref_service_mock_factory.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_paths.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/chrome_render_view_host_test_harness.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_pref_service_syncable.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/browser/configuration_policy_pref_store.h" 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/mock_configuration_policy_provider.h" 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/web_preferences.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/web_contents_tester.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/test/data/resource.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::WebContentsTester; 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing content::WebPreferences; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(ChromePrefServiceTest, UpdateCommandLinePrefStore) { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSimple prefs; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs.registry()->RegisterBooleanPref(prefs::kCloudPrintProxyEnabled, false); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check to make sure the value is as expected. 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PrefService::Preference* pref = 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs.FindPreference(prefs::kCloudPrintProxyEnabled); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(pref); 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::Value* value = pref->GetValue(); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(value); 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::Value::TYPE_BOOLEAN, value->GetType()); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool actual_bool_value = true; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(value->GetAsBoolean(&actual_bool_value)); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(actual_bool_value); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Change the command line. 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine cmd_line(CommandLine::NO_PROGRAM); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd_line.AppendSwitch(switches::kEnableCloudPrintProxy); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Call UpdateCommandLinePrefStore and check to see if the value has changed. 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs.UpdateCommandLinePrefStore(new CommandLinePrefStore(&cmd_line)); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref = prefs.FindPreference(prefs::kCloudPrintProxyEnabled); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(pref); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value = pref->GetValue(); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(value); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::Value::TYPE_BOOLEAN, value->GetType()); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) actual_bool_value = false; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(value->GetAsBoolean(&actual_bool_value)); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(actual_bool_value); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ChromePrefServiceUserFilePrefsTest : public testing::Test { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_dir_)); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) data_dir_ = data_dir_.AppendASCII("pref_service"); 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(data_dir_)); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ClearListValue(PrefService* prefs, const char* key) { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ListPrefUpdate updater(prefs, key); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) updater->Clear(); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ClearDictionaryValue(PrefService* prefs, const char* key) { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DictionaryPrefUpdate updater(prefs, key); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) updater->Clear(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The path to temporary directory used to contain the test operations. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The path to the directory where the test data is stored. 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath data_dir_; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A message loop that we can use as the file thread message loop. 8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop message_loop_; 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ChromePrefServiceWebKitPrefs : public ChromeRenderViewHostTestHarness { 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() { 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChromeRenderViewHostTestHarness::SetUp(); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Supply our own profile so we use the correct profile data. The test 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // harness is not supposed to overwrite a profile if it's already created. 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set some (WebKit) user preferences. 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable* pref_services = 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile()->GetTestingPrefService(); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_services->SetUserPref(prefs::kDefaultCharset, 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::StringValue("utf8")); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_services->SetUserPref(prefs::kWebKitDefaultFontSize, 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::FundamentalValue(20)); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_services->SetUserPref(prefs::kWebKitTextAreasAreResizable, 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new base::FundamentalValue(false)); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_services->SetUserPref(prefs::kWebKitUsesUniversalDetector, 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new base::FundamentalValue(true)); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_services->SetUserPref("webkit.webprefs.foo", 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::StringValue("bar")); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests to see that webkit preferences are properly loaded and copied over 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// to a WebPreferences object. 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromePrefServiceWebKitPrefs, PrefsCopied) { 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebPreferences webkit_prefs = 1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) WebContentsTester::For(web_contents())->TestComputeWebkitPrefs(); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These values have been overridden by the profile preferences. 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("UTF-8", webkit_prefs.default_encoding); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(20, webkit_prefs.default_font_size); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(webkit_prefs.text_areas_are_resizable); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(webkit_prefs.uses_universal_detector); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These should still be the default values. 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char kDefaultFont[] = "Times"; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_CHROMEOS) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char kDefaultFont[] = "Tinos"; 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char kDefaultFont[] = "Times New Roman"; 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::ASCIIToUTF16(kDefaultFont), 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_prefs.standard_font_family_map[prefs::kWebKitCommonScript]); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(webkit_prefs.javascript_enabled); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 140