Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(671)

Unified Diff: chrome/browser/prefs/pref_hash_browsertest.cc

Issue 137383011: Expand PrefHashBrowserTest to ensure unloaded profile initialization produces proper hashes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Also inspect Settings.TrackedPreferencesInitializedForUnloadedProfile Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
index 1bcc0fd27f0f47d50d9bc44bf6841c8bc2a20d3f..b99ed7216bd03cf7de000375c192257d3c080711 100644
--- a/chrome/browser/prefs/pref_hash_browsertest.cc
+++ b/chrome/browser/prefs/pref_hash_browsertest.cc
@@ -7,11 +7,16 @@
#include "base/bind.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/values.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/prefs/pref_hash_store.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_impl.h"
#include "chrome/browser/profiles/profile_info_cache.h"
@@ -58,6 +63,28 @@ base::FilePath GetUnloadedProfilePath() {
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
typedef InProcessBrowserTest PrefHashBrowserTest;
@@ -83,6 +110,13 @@ IN_PROC_BROWSER_TEST_F(PrefHashBrowserTest,
// 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.TrackedPreferencesInitializedForUnloadedProfile",
+ true));
}
IN_PROC_BROWSER_TEST_F(PrefHashBrowserTest,
@@ -111,6 +145,15 @@ IN_PROC_BROWSER_TEST_F(PrefHashBrowserTest,
// One of the profile hash collections should be gone.
ASSERT_EQ(2U, 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.TrackedPreferencesInitializedForUnloadedProfile",
+ true));
}
IN_PROC_BROWSER_TEST_F(PrefHashBrowserTest,
@@ -125,13 +168,65 @@ IN_PROC_BROWSER_TEST_F(PrefHashBrowserTest,
// The deleted hash collection should be restored.
ASSERT_EQ(3U, 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.TrackedPreferencesInitializedForUnloadedProfile",
+ false));
+
ProfileManager* profile_manager = g_browser_process->profile_manager();
- const std::vector<Profile*> loaded_profiles =
- profile_manager->GetLoadedProfiles();
// 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, loaded_profiles.size());
+ 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);
+
+ // Explicitly load the unloaded profile.
+ profile_manager->GetProfile(GetUnloadedProfilePath());
+ ASSERT_EQ(2U, profile_manager->GetLoadedProfiles().size());
+
+ // Loading the unexpected 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));
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698