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/base64.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/base_paths.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 11a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "base/json/json_reader.h" 12a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/path_service.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_split.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/chromedriver/chrome/status.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/chromedriver/chrome_launcher.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(ProcessExtensions, NoExtension) { 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string> extensions; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath extension_dir; 25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::vector<std::string> bg_pages; 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Status status = internal::ProcessExtensions(extensions, extension_dir, 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) false, &switches, &bg_pages); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_FALSE(switches.HasSwitch("load-extension")); 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_EQ(0u, bg_pages.size()); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)bool AddExtensionForInstall(const std::string& relative_path, 34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::vector<std::string>* extensions) { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath source_root; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PathService::Get(base::DIR_SOURCE_ROOT, &source_root); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath crx_file_path = source_root.AppendASCII( 38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "chrome/test/data/chromedriver/" + relative_path); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string crx_contents; 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!base::ReadFileToString(crx_file_path, &crx_contents)) 41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return false; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string crx_encoded; 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Base64Encode(crx_contents, &crx_encoded); 45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) extensions->push_back(crx_encoded); 46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return true; 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST(ProcessExtensions, GenerateIds) { 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::vector<std::string> extensions; 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::ScopedTempDir extension_dir; 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Switches switches; 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::vector<std::string> bg_pages; 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(AddExtensionForInstall("no_key_in_manifest.crx", &extensions)); 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(AddExtensionForInstall("same_key_as_header.crx", &extensions)); 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(AddExtensionForInstall("diff_key_from_header.crx", &extensions)); 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); 60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Status status = internal::ProcessExtensions(extensions, extension_dir.path(), 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) false, &switches, &bg_pages); 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_EQ(kOk, status.code()) << status.message(); 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_EQ(3u, bg_pages.size()); 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_EQ("chrome-extension://llphabdmknikmpmkioimgdfbohinlekl/" 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "_generated_background_page.html", bg_pages[0]); 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_EQ("chrome-extension://dfdeoklpcichfcnoaomfpagfiibhomnh/" 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "_generated_background_page.html", bg_pages[1]); 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_EQ("chrome-extension://ioccpomhcpklobebcbeohnmffkmcokbm/" 71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "_generated_background_page.html", bg_pages[2]); 72424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 73424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 74424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST(ProcessExtensions, SingleExtensionWithBgPage) { 75424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::vector<std::string> extensions; 76424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(AddExtensionForInstall("ext_slow_loader.crx", &extensions)); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir extension_dir; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 82424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::vector<std::string> bg_pages; 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Status status = internal::ProcessExtensions(extensions, extension_dir.path(), 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) false, &switches, &bg_pages); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(switches.HasSwitch("load-extension")); 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::FilePath temp_ext_path(switches.GetSwitchValueNative("load-extension")); 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(temp_ext_path)); 89424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string manifest_txt; 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(base::ReadFileToString( 91424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) temp_ext_path.AppendASCII("manifest.json"), &manifest_txt)); 92424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<base::Value> manifest(base::JSONReader::Read(manifest_txt)); 93424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(manifest); 94424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::DictionaryValue* manifest_dict = NULL; 95424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(manifest->GetAsDictionary(&manifest_dict)); 96424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string key; 97424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(manifest_dict->GetString("key", &key)); 98424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_EQ( 99424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8qhZthEHjTIA3IYMzi79s2KFepVziY0du" 100424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "JzHcqRUB/YHSGseIUqcYXGazJhDz/" 101424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "4FbRg8ef9fQazL1UbMMGBIf4za1kJ2os2MsRrNXzHslkbtcLVj2VfofhuHJmu+" 102424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "CnKJ77UWamJiNAaQSiclu4duwnEWrkx+g/8ChQfhZzC4jvQIDAQAB", 103424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) key); 104424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_EQ(1u, bg_pages.size()); 105424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_EQ( 106424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "chrome-extension://jijhlkpcmmeckhlgdipjhnchhoabdjae/" 107424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "_generated_background_page.html", 108424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bg_pages[0]); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 111424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST(ProcessExtensions, MultipleExtensionsNoBgPages) { 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string> extensions; 113424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(AddExtensionForInstall("ext_test_1.crx", &extensions)); 114424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(AddExtensionForInstall("ext_test_2.crx", &extensions)); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir extension_dir; 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 120424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::vector<std::string> bg_pages; 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Status status = internal::ProcessExtensions(extensions, extension_dir.path(), 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) false, &switches, &bg_pages); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(switches.HasSwitch("load-extension")); 12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CommandLine::StringType ext_paths = switches.GetSwitchValueNative( 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "load-extension"); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<CommandLine::StringType> ext_path_list; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::SplitString(ext_paths, FILE_PATH_LITERAL(','), &ext_path_list); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2u, ext_path_list.size()); 1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(base::FilePath(ext_path_list[0]))); 1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(base::FilePath(ext_path_list[1]))); 132424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_EQ(0u, bg_pages.size()); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(ProcessExtensions, CommandLineExtensions) { 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::vector<std::string> extensions; 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(AddExtensionForInstall("ext_test_1.crx", &extensions)); 13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::ScopedTempDir extension_dir; 13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); 14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("load-extension", "/a"); 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::vector<std::string> bg_pages; 14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = internal::ProcessExtensions(extensions, extension_dir.path(), 14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) false, &switches, &bg_pages); 14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(kOk, status.code()); 14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::FilePath::StringType load = switches.GetSwitchValueNative( 14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "load-extension"); 14958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(FILE_PATH_LITERAL("/a,"), load.substr(0, 3)); 15058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(base::PathExists(base::FilePath(load.substr(3)))); 15158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 15258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 153a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)namespace { 154a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 155a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void AssertEQ(const base::DictionaryValue& dict, const std::string& key, 156a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const char* expected_value) { 157a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) std::string value; 158a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_TRUE(dict.GetString(key, &value)); 159a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_STREQ(value.c_str(), expected_value); 160a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 161a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 162a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} // namespace 163a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(PrepareUserDataDir, CustomPrefs) { 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir; 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::DictionaryValue prefs; 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs.SetString("myPrefsKey", "ok"); 170a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) prefs.SetStringWithoutPathExpansion("pref.sub", "1"); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::DictionaryValue local_state; 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) local_state.SetString("myLocalKey", "ok"); 173a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) local_state.SetStringWithoutPathExpansion("local.state.sub", "2"); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Status status = internal::PrepareUserDataDir( 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) temp_dir.path(), &prefs, &local_state); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(kOk, status.code()); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath prefs_file = 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) temp_dir.path().AppendASCII(chrome::kInitialProfile).Append( 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::kPreferencesFilename); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string prefs_str; 18258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(base::ReadFileToString(prefs_file, &prefs_str)); 183a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) scoped_ptr<base::Value> prefs_value(base::JSONReader::Read(prefs_str)); 184a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const base::DictionaryValue* prefs_dict = NULL; 185a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_TRUE(prefs_value->GetAsDictionary(&prefs_dict)); 186a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) AssertEQ(*prefs_dict, "myPrefsKey", "ok"); 187a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) AssertEQ(*prefs_dict, "pref.sub", "1"); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FilePath local_state_file = 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) temp_dir.path().Append(chrome::kLocalStateFilename); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string local_state_str; 19258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(base::ReadFileToString(local_state_file, &local_state_str)); 193a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) scoped_ptr<base::Value> local_state_value( 194a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::JSONReader::Read(local_state_str)); 195a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const base::DictionaryValue* local_state_dict = NULL; 196a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_TRUE(local_state_value->GetAsDictionary(&local_state_dict)); 197a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) AssertEQ(*local_state_dict, "myLocalKey", "ok"); 198a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) AssertEQ(*local_state_dict, "local.state.sub", "2"); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 200