15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefsTabHelperBrowserTest : public InProcessBrowserTest {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual base::FilePath GetPreferencesFilePath() {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath test_data_directory;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return test_data_directory
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .AppendASCII("profiles")
238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        .AppendASCII("web_prefs")
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .AppendASCII("Default")
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .Append(chrome::kPreferencesFilename);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool SetUpUserDataDirectory() OVERRIDE {
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath user_data_directory;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PathService::Get(chrome::DIR_USER_DATA, &user_data_directory);
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath default_profile =
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        user_data_directory.AppendASCII(TestingProfile::kTestUserProfileDir);
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (!base::CreateDirectory(default_profile)) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LOG(ERROR) << "Can't create " << default_profile.MaybeAsASCII();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    base::FilePath pref_file = GetPreferencesFilePath();
388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    if (!base::PathExists(pref_file)) {
398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      LOG(ERROR) << "Doesn't exist " << pref_file.MaybeAsASCII();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath default_pref_file =
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        default_profile.Append(chrome::kPreferencesFilename);
448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    if (!base::CopyFile(pref_file, default_pref_file)) {
458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      LOG(ERROR) << "Copy error from " << pref_file.MaybeAsASCII()
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 << " to " << default_pref_file.MaybeAsASCII();
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make the copy writable.  On POSIX we assume the umask allows files
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // we create to be writable.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!::SetFileAttributesW(default_pref_file.value().c_str(),
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              FILE_ATTRIBUTE_NORMAL)) return false;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Tests that a sampling of web prefs are registered and ones with values in the
618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// test user preferences file take on those values.
628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PrefsTabHelperBrowserTest, WebPrefs) {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = browser()->profile()->GetPrefs();
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(prefs->FindPreference(
668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      prefs::kWebKitCursiveFontFamily)->IsDefaultValue());
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(prefs->FindPreference(
688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      prefs::kWebKitSerifFontFamily)->IsDefaultValue());
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(prefs->FindPreference(
708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      prefs::kWebKitSerifFontFamilyJapanese)->IsDefaultValue());
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("ISO-8859-1", prefs->GetString(prefs::kDefaultCharset));
738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(16, prefs->GetInteger(prefs::kWebKitDefaultFontSize));
748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ("Nanum Gothic",
758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)            prefs->GetString(prefs::kWebKitStandardFontFamilyKorean));
768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ("Tinos", prefs->GetString(prefs::kWebKitStandardFontFamily));
778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ("DejaVu Sans", prefs->GetString(prefs::kWebKitSansSerifFontFamily));
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
81