Chromium Code Reviews| Index: chrome/browser/prefs/pref_hash_browsertest.cc |
| diff --git a/chrome/browser/prefs/pref_hash_browsertest.cc b/chrome/browser/prefs/pref_hash_browsertest.cc |
| deleted file mode 100644 |
| index 4922946d9142cd1118afab0e9c302797ff22ef81..0000000000000000000000000000000000000000 |
| --- a/chrome/browser/prefs/pref_hash_browsertest.cc |
| +++ /dev/null |
| @@ -1,325 +0,0 @@ |
| -// Copyright 2014 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 <set> |
| -#include <vector> |
| - |
| -#include "base/bind.h" |
| -#include "base/command_line.h" |
| -#include "base/files/file_path.h" |
| -#include "base/macros.h" |
| -#include "base/message_loop/message_loop.h" |
| -#include "base/metrics/histogram_base.h" |
| -#include "base/metrics/histogram_samples.h" |
| -#include "base/metrics/statistics_recorder.h" |
| -#include "base/prefs/pref_service.h" |
| -#include "base/strings/string16.h" |
| -#include "base/threading/sequenced_worker_pool.h" |
| -#include "base/values.h" |
| -#include "build/build_config.h" |
| -#include "chrome/browser/browser_process.h" |
| -#include "chrome/browser/prefs/chrome_pref_service_factory.h" |
| -#include "chrome/browser/prefs/pref_hash_store.h" |
| -#include "chrome/browser/profiles/profile.h" |
| -#include "chrome/browser/profiles/profile_info_cache.h" |
| -#include "chrome/browser/profiles/profile_manager.h" |
| -#include "chrome/browser/profiles/profiles_state.h" |
| -#include "chrome/common/pref_names.h" |
| -#include "chrome/test/base/in_process_browser_test.h" |
| -#include "content/public/browser/browser_thread.h" |
| -#include "content/public/common/content_switches.h" |
| -#include "content/public/test/test_utils.h" |
| -#include "testing/gtest/include/gtest/gtest.h" |
| - |
| -#if defined(OS_CHROMEOS) |
| -#include "chromeos/chromeos_switches.h" |
| -#endif |
| - |
| -namespace { |
| - |
| -// An observer that returns back to test code after a new profile is |
| -// initialized. |
| -void OnUnblockOnProfileCreation(const base::Closure& callback, |
| - Profile* profile, |
| - Profile::CreateStatus status) { |
| - switch (status) { |
| - case Profile::CREATE_STATUS_CREATED: |
| - // Wait for CREATE_STATUS_INITIALIZED. |
| - break; |
| - case Profile::CREATE_STATUS_INITIALIZED: |
| - callback.Run(); |
| - break; |
| - default: |
| - ADD_FAILURE() << "Unexpected Profile::CreateStatus: " << status; |
| - callback.Run(); |
| - break; |
| - } |
| -} |
| - |
| -// Finds a profile path corresponding to a profile that has not been loaded yet. |
| -base::FilePath GetUnloadedProfilePath() { |
| - ProfileManager* profile_manager = g_browser_process->profile_manager(); |
| - const ProfileInfoCache& cache = profile_manager->GetProfileInfoCache(); |
| - const std::vector<Profile*> loaded_profiles = |
| - profile_manager->GetLoadedProfiles(); |
| - std::set<base::FilePath> profile_paths; |
| - for (size_t i = 0; i < cache.GetNumberOfProfiles(); ++i) |
| - profile_paths.insert(cache.GetPathOfProfileAtIndex(i)); |
| - for (size_t i = 0; i < loaded_profiles.size(); ++i) |
| - EXPECT_EQ(1U, profile_paths.erase(loaded_profiles[i]->GetPath())); |
| - if (profile_paths.size()) |
| - return *profile_paths.begin(); |
| - return base::FilePath(); |
| -} |
| - |
| -// Returns the number of times |histogram_name| was reported so far; adding the |
| -// results of the first 100 buckets (there are only ~14 reporting IDs as of this |
| -// writting; varies depending on the platform). If |expect_zero| is true, this |
| -// method will explicitly report IDs that are non-zero for ease of diagnosis. |
| -int GetTrackedPrefHistogramCount(const char* histogram_name, bool expect_zero) { |
| - const base::HistogramBase* histogram = |
| - base::StatisticsRecorder::FindHistogram(histogram_name); |
| - if (!histogram) |
| - return 0; |
| - |
| - scoped_ptr<base::HistogramSamples> samples(histogram->SnapshotSamples()); |
| - int sum = 0; |
| - for (int i = 0; i < 100; ++i) { |
| - int count_for_id = samples->GetCount(i); |
| - sum += count_for_id; |
| - |
| - if (expect_zero) |
| - EXPECT_EQ(0, count_for_id) << "Faulty reporting_id: " << i; |
| - } |
| - return sum; |
| -} |
| - |
| -} // namespace |
| - |
| -class PrefHashBrowserTest : public InProcessBrowserTest, |
| - public testing::WithParamInterface<std::string> { |
| - public: |
| - PrefHashBrowserTest() |
| - : is_unloaded_profile_seeding_allowed_( |
| - IsUnloadedProfileSeedingAllowed()) {} |
| - |
| - virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| - InProcessBrowserTest::SetUpCommandLine(command_line); |
| - command_line->AppendSwitchASCII( |
| - switches::kForceFieldTrials, |
| - std::string(chrome_prefs::internals::kSettingsEnforcementTrialName) + |
| - "/" + GetParam() + "/"); |
| -#if defined(OS_CHROMEOS) |
| - command_line->AppendSwitch( |
| - chromeos::switches::kIgnoreUserProfileMappingForTests); |
| -#endif |
| - } |
| - |
| - virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
| - // Force the delayed PrefHashStore update task to happen immediately with |
| - // no domain check (bots are on a domain). |
| - chrome_prefs::DisableDelaysAndDomainCheckForTesting(); |
| - } |
| - |
| - virtual void SetUpOnMainThread() OVERRIDE { |
| - // content::RunAllPendingInMessageLoop() is already called before |
| - // SetUpOnMainThread() in in_process_browser_test.cc which guarantees that |
| - // UpdateAllPrefHashStoresIfRequired() has already been called. |
| - |
| - // Now flush the blocking pool to force any pending JsonPrefStore async read |
| - // requests. |
| - content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
| - |
| - // And finally run tasks on this message loop again to process the OnRead() |
| - // callbacks resulting from the file reads above. |
| - content::RunAllPendingInMessageLoop(); |
| - } |
| - |
| - protected: |
| - const bool is_unloaded_profile_seeding_allowed_; |
| - |
| - private: |
| - bool IsUnloadedProfileSeedingAllowed() const { |
| -#if defined(OFFICIAL_BUILD) |
| - // SettingsEnforcement can't be forced via --force-fieldtrials in official |
| - // builds. Explicitly return whether the default in |
| - // chrome_pref_service_factory.cc allows unloaded profile seeding on this |
| - // platform. |
| - return true; |
| -#endif // defined(OFFICIAL_BUILD) |
| - return GetParam() == chrome_prefs::internals:: |
| - kSettingsEnforcementGroupNoEnforcement || |
| - GetParam() == chrome_prefs::internals:: |
| - kSettingsEnforcementGroupEnforceOnload; |
| - } |
| -}; |
| - |
| -#if defined(OS_CHROMEOS) |
| -// PrefHash service has been disabled on ChromeOS: crbug.com/343261 |
| -#define MAYBE_PRE_PRE_InitializeUnloadedProfiles DISABLED_PRE_PRE_InitializeUnloadedProfiles |
| -#define MAYBE_PRE_InitializeUnloadedProfiles DISABLED_PRE_InitializeUnloadedProfiles |
| -#define MAYBE_InitializeUnloadedProfiles DISABLED_InitializeUnloadedProfiles |
| -#else |
| -#define MAYBE_PRE_PRE_InitializeUnloadedProfiles PRE_PRE_InitializeUnloadedProfiles |
| -#define MAYBE_PRE_InitializeUnloadedProfiles PRE_InitializeUnloadedProfiles |
| -#define MAYBE_InitializeUnloadedProfiles InitializeUnloadedProfiles |
| -#endif |
| - |
| -IN_PROC_BROWSER_TEST_P(PrefHashBrowserTest, |
| - MAYBE_PRE_PRE_InitializeUnloadedProfiles) { |
| - ProfileManager* profile_manager = g_browser_process->profile_manager(); |
| - |
| - // Create an additional profile. |
| - const base::FilePath new_path = |
| - profile_manager->GenerateNextProfileDirectoryPath(); |
| - const scoped_refptr<content::MessageLoopRunner> runner( |
| - new content::MessageLoopRunner); |
| - profile_manager->CreateProfileAsync( |
| - new_path, |
| - base::Bind(&OnUnblockOnProfileCreation, runner->QuitClosure()), |
| - base::string16(), |
| - base::string16(), |
| - std::string()); |
| - |
| - // Spin to allow profile creation to take place, loop is terminated |
| - // by OnUnblockOnProfileCreation when the profile is created. |
| - runner->Run(); |
| - |
| - // No profile should have gone through the unloaded profile initialization in |
| - // this phase as both profiles should have been loaded normally. |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferencesAlternateStoreVersionUpdatedFrom", |
| - true)); |
| -} |
| - |
| -IN_PROC_BROWSER_TEST_P(PrefHashBrowserTest, |
| - MAYBE_PRE_InitializeUnloadedProfiles) { |
| - // Creating the profile would have initialized its hash store. Also, we don't |
| - // know whether the newly created or original profile will be launched (does |
| - // creating a profile cause it to be the most recently used?). |
| - |
| - // So we will find the profile that isn't loaded, reset its hash store, and |
| - // then verify in the _next_ launch that it is, indeed, restored despite not |
| - // having been loaded. |
| - |
| - const base::DictionaryValue* hashes = |
| - g_browser_process->local_state()->GetDictionary( |
| - prefs::kProfilePreferenceHashes); |
| - |
| - // 4 is for hash_of_hashes, versions_dict, default profile, and new profile. |
| - EXPECT_EQ(4U, hashes->size()); |
| - |
| - // One of the two profiles should not have been loaded. Reset its hash store. |
| - const base::FilePath unloaded_profile_path = GetUnloadedProfilePath(); |
| - chrome_prefs::ResetPrefHashStore(unloaded_profile_path); |
| - |
| - // One of the profile hash collections should be gone. |
| - EXPECT_EQ(3U, hashes->size()); |
| - |
| - // No profile should have gone through the unloaded profile initialization in |
| - // this phase as both profiles were already initialized at the beginning of |
| - // this phase (resetting the unloaded profile's PrefHashStore should only |
| - // force initialization in the next phase's startup). |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferencesAlternateStoreVersionUpdatedFrom", |
| - true)); |
| -} |
| - |
| -IN_PROC_BROWSER_TEST_P(PrefHashBrowserTest, |
| - MAYBE_InitializeUnloadedProfiles) { |
| - const base::DictionaryValue* hashes = |
| - g_browser_process->local_state()->GetDictionary( |
| - prefs::kProfilePreferenceHashes); |
| - |
| - // The deleted hash collection should be restored only if the current |
| - // SettingsEnforcement group allows it. |
| - if (is_unloaded_profile_seeding_allowed_) { |
| - EXPECT_EQ(4U, hashes->size()); |
| - |
| - // Verify that the initialization truly did occur in this phase's startup; |
| - // rather than in the previous phase's shutdown. |
| - EXPECT_EQ( |
| - 1, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferencesAlternateStoreVersionUpdatedFrom", |
| - false)); |
| - } else { |
| - EXPECT_EQ(3U, hashes->size()); |
| - |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferencesAlternateStoreVersionUpdatedFrom", |
| - true)); |
| - } |
| - |
| - ProfileManager* profile_manager = g_browser_process->profile_manager(); |
| - |
| - // Verify that only one profile was loaded. We assume that the unloaded |
| - // profile is the same one that wasn't loaded in the last launch (i.e., it's |
| - // the one whose hash store we reset, and the fact that it is now restored is |
| - // evidence that we restored the hashes of an unloaded profile.). |
| - ASSERT_EQ(1U, profile_manager->GetLoadedProfiles().size()); |
| - |
| - // Loading the first profile should only have produced unchanged reports. |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferenceChanged", true)); |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferenceCleared", true)); |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferenceInitialized", true)); |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferenceTrustedInitialized", true)); |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferenceMigrated", true)); |
| - int initial_unchanged_count = |
| - GetTrackedPrefHistogramCount("Settings.TrackedPreferenceUnchanged", |
| - false); |
| - EXPECT_GT(initial_unchanged_count, 0); |
| - |
| - if (is_unloaded_profile_seeding_allowed_) { |
| - // Explicitly load the unloaded profile. |
| - profile_manager->GetProfile(GetUnloadedProfilePath()); |
| - ASSERT_EQ(2U, profile_manager->GetLoadedProfiles().size()); |
| - |
| - // Loading the unloaded profile should only generate unchanged pings; and |
| - // should have produced as many of them as loading the first profile. |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferenceChanged", true)); |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferenceCleared", true)); |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferenceInitialized", true)); |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferenceTrustedInitialized", true)); |
| - EXPECT_EQ( |
| - 0, GetTrackedPrefHistogramCount( |
| - "Settings.TrackedPreferenceMigrated", true)); |
| - EXPECT_EQ( |
| - initial_unchanged_count * 2, |
| - GetTrackedPrefHistogramCount("Settings.TrackedPreferenceUnchanged", |
| - false)); |
| - } |
|
gab
2014/06/11 19:25:41
This test also had the benefit of being the only i
erikwright (departed)
2014/06/11 21:08:35
Do you want that done in this CL or separately?
gab
2014/06/11 21:39:29
Separately, as a follow-up to the main CL (please
|
| -} |
| - |
| -INSTANTIATE_TEST_CASE_P( |
| - PrefHashBrowserTestInstance, |
| - PrefHashBrowserTest, |
| - testing::Values( |
| - chrome_prefs::internals::kSettingsEnforcementGroupNoEnforcement, |
| - chrome_prefs::internals::kSettingsEnforcementGroupEnforceOnload, |
| - chrome_prefs::internals::kSettingsEnforcementGroupEnforceAlways, |
| - chrome_prefs::internals:: |
| - kSettingsEnforcementGroupEnforceAlwaysWithExtensions, |
| - chrome_prefs::internals:: |
| - kSettingsEnforcementGroupEnforceAlwaysWithExtensionsAndDSE)); |