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

Side by Side Diff: chrome/browser/metrics/metrics_state_manager_unittest.cc

Issue 256143006: Refactor MetricsStateManager class out of MetricsService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/metrics/metrics_service.h" 5 #include "chrome/browser/metrics/metrics_state_manager.h"
6 6
7 #include <ctype.h> 7 #include <ctype.h>
8 #include <string> 8 #include <string>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/threading/platform_thread.h" 11 #include "base/prefs/testing_pref_service.h"
12 #include "chrome/common/chrome_switches.h" 12 #include "chrome/common/chrome_switches.h"
13 #include "chrome/common/metrics/caching_permuted_entropy_provider.h"
13 #include "chrome/common/pref_names.h" 14 #include "chrome/common/pref_names.h"
14 #include "chrome/test/base/scoped_testing_local_state.h"
15 #include "chrome/test/base/testing_browser_process.h"
16 #include "components/variations/metrics_util.h"
17 #include "content/public/common/process_type.h"
18 #include "content/public/common/webplugininfo.h"
19 #include "content/public/test/test_browser_thread_bundle.h"
20 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
21 #include "ui/gfx/size.h"
22 16
23 #if defined(OS_CHROMEOS) 17 namespace metrics {
24 #include "chrome/browser/metrics/metrics_log_chromeos.h"
25 #endif // OS_CHROMEOS
26 18
27 namespace { 19 class MetricsStateManagerTest : public testing::Test {
28
29 class TestMetricsService : public MetricsService {
30 public: 20 public:
31 TestMetricsService() {} 21 MetricsStateManagerTest() {
32 virtual ~TestMetricsService() {} 22 MetricsStateManager::RegisterPrefs(prefs_.registry());
33
34 MetricsLogManager* log_manager() {
35 return &log_manager_;
36 }
37
38 private:
39 DISALLOW_COPY_AND_ASSIGN(TestMetricsService);
40 };
41
42 #if defined(OS_CHROMEOS)
43 class TestMetricsLogChromeOS : public MetricsLogChromeOS {
44 public:
45 explicit TestMetricsLogChromeOS(
46 metrics::ChromeUserMetricsExtension* uma_proto)
47 : MetricsLogChromeOS(uma_proto) {
48 } 23 }
49 24
50 protected: 25 protected:
51 // Don't touch bluetooth information, as it won't be correctly initialized. 26 TestingPrefServiceSimple prefs_;
52 virtual void WriteBluetoothProto() OVERRIDE {
53 }
54 };
55 #endif // OS_CHROMEOS
56
57 class TestMetricsLog : public MetricsLog {
58 public:
59 TestMetricsLog(const std::string& client_id, int session_id)
60 : MetricsLog(client_id, session_id, MetricsLog::ONGOING_LOG) {
61 #if defined(OS_CHROMEOS)
62 metrics_log_chromeos_.reset(new TestMetricsLogChromeOS(
63 MetricsLog::uma_proto()));
64 #endif // OS_CHROMEOS
65 }
66 virtual ~TestMetricsLog() {}
67 27
68 private: 28 private:
69 virtual gfx::Size GetScreenSize() const OVERRIDE { 29 DISALLOW_COPY_AND_ASSIGN(MetricsStateManagerTest);
70 return gfx::Size(1024, 768);
71 }
72
73 virtual float GetScreenDeviceScaleFactor() const OVERRIDE {
74 return 1.0f;
75 }
76
77 virtual int GetScreenCount() const OVERRIDE {
78 return 1;
79 }
80
81 DISALLOW_COPY_AND_ASSIGN(TestMetricsLog);
82 }; 30 };
83 31
84 class MetricsServiceTest : public testing::Test { 32 // Ensure the ClientId is formatted as expected.
85 public: 33 TEST_F(MetricsStateManagerTest, ClientIdCorrectlyFormatted) {
86 MetricsServiceTest() 34 MetricsStateManager state_manager(&prefs_);
87 : testing_local_state_(TestingBrowserProcess::GetGlobal()) { 35 state_manager.ForceClientIdCreation();
88 }
89 36
90 virtual ~MetricsServiceTest() { 37 const std::string client_id = state_manager.client_id();
91 MetricsService::SetExecutionPhase(MetricsService::UNINITIALIZED_PHASE); 38 EXPECT_EQ(36U, client_id.length());
92 }
93 39
94 PrefService* GetLocalState() { 40 for (size_t i = 0; i < client_id.length(); ++i) {
95 return testing_local_state_.Get(); 41 char current = client_id[i];
96 }
97
98 // Waits until base::TimeTicks::Now() no longer equals |value|. This should
99 // take between 1-15ms per the documented resolution of base::TimeTicks.
100 void WaitUntilTimeChanges(const base::TimeTicks& value) {
101 while (base::TimeTicks::Now() == value) {
102 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1));
103 }
104 }
105
106 // Returns true if there is a synthetic trial in the given vector that matches
107 // the given trial name and trial group; returns false otherwise.
108 bool HasSyntheticTrial(
109 const std::vector<chrome_variations::ActiveGroupId>& synthetic_trials,
110 const std::string& trial_name,
111 const std::string& trial_group) {
112 uint32 trial_name_hash = metrics::HashName(trial_name);
113 uint32 trial_group_hash = metrics::HashName(trial_group);
114 for (std::vector<chrome_variations::ActiveGroupId>::const_iterator it =
115 synthetic_trials.begin();
116 it != synthetic_trials.end(); ++it) {
117 if ((*it).name == trial_name_hash && (*it).group == trial_group_hash)
118 return true;
119 }
120 return false;
121 }
122
123 private:
124 content::TestBrowserThreadBundle thread_bundle_;
125 ScopedTestingLocalState testing_local_state_;
126
127 DISALLOW_COPY_AND_ASSIGN(MetricsServiceTest);
128 };
129
130 } // namespace
131
132 // Ensure the ClientId is formatted as expected.
133 TEST_F(MetricsServiceTest, ClientIdCorrectlyFormatted) {
134 std::string clientid = MetricsService::GenerateClientID();
135 EXPECT_EQ(36U, clientid.length());
136
137 for (size_t i = 0; i < clientid.length(); ++i) {
138 char current = clientid[i];
139 if (i == 8 || i == 13 || i == 18 || i == 23) 42 if (i == 8 || i == 13 || i == 18 || i == 23)
140 EXPECT_EQ('-', current); 43 EXPECT_EQ('-', current);
141 else 44 else
142 EXPECT_TRUE(isxdigit(current)); 45 EXPECT_TRUE(isxdigit(current));
143 } 46 }
144 } 47 }
145 48
146 TEST_F(MetricsServiceTest, IsPluginProcess) { 49 TEST_F(MetricsStateManagerTest, EntropySourceUsed_Low) {
147 EXPECT_TRUE( 50 MetricsStateManager state_manager(&prefs_);
148 MetricsService::IsPluginProcess(content::PROCESS_TYPE_PLUGIN)); 51 state_manager.CreateEntropyProvider();
149 EXPECT_TRUE( 52 EXPECT_EQ(MetricsStateManager::ENTROPY_SOURCE_LOW,
150 MetricsService::IsPluginProcess(content::PROCESS_TYPE_PPAPI_PLUGIN)); 53 state_manager.entropy_source_returned());
151 EXPECT_FALSE(
152 MetricsService::IsPluginProcess(content::PROCESS_TYPE_GPU));
153 } 54 }
154 55
155 TEST_F(MetricsServiceTest, LowEntropySource0NotReset) { 56 TEST_F(MetricsStateManagerTest, EntropySourceUsed_High) {
156 MetricsService service; 57 CommandLine::ForCurrentProcess()->AppendSwitch(
58 switches::kEnableMetricsReportingForTesting);
59
60 MetricsStateManager state_manager(&prefs_);
61 state_manager.CreateEntropyProvider();
62 EXPECT_EQ(MetricsStateManager::ENTROPY_SOURCE_HIGH,
63 state_manager.entropy_source_returned());
64 }
65
66 TEST_F(MetricsStateManagerTest, LowEntropySource0NotReset) {
67 MetricsStateManager state_manager(&prefs_);
157 68
158 // Get the low entropy source once, to initialize it. 69 // Get the low entropy source once, to initialize it.
159 service.GetLowEntropySource(); 70 state_manager.GetLowEntropySource();
160 71
161 // Now, set it to 0 and ensure it doesn't get reset. 72 // Now, set it to 0 and ensure it doesn't get reset.
162 service.low_entropy_source_ = 0; 73 state_manager.low_entropy_source_ = 0;
163 EXPECT_EQ(0, service.GetLowEntropySource()); 74 EXPECT_EQ(0, state_manager.GetLowEntropySource());
164 // Call it another time, just to make sure. 75 // Call it another time, just to make sure.
165 EXPECT_EQ(0, service.GetLowEntropySource()); 76 EXPECT_EQ(0, state_manager.GetLowEntropySource());
166 } 77 }
167 78
168 TEST_F(MetricsServiceTest, PermutedEntropyCacheClearedWhenLowEntropyReset) { 79 TEST_F(MetricsStateManagerTest,
80 PermutedEntropyCacheClearedWhenLowEntropyReset) {
169 const PrefService::Preference* low_entropy_pref = 81 const PrefService::Preference* low_entropy_pref =
170 GetLocalState()->FindPreference(prefs::kMetricsLowEntropySource); 82 prefs_.FindPreference(prefs::kMetricsLowEntropySource);
171 const char* kCachePrefName = prefs::kMetricsPermutedEntropyCache; 83 const char* kCachePrefName = prefs::kMetricsPermutedEntropyCache;
172 int low_entropy_value = -1; 84 int low_entropy_value = -1;
173 85
174 // First, generate an initial low entropy source value. 86 // First, generate an initial low entropy source value.
175 { 87 {
176 EXPECT_TRUE(low_entropy_pref->IsDefaultValue()); 88 EXPECT_TRUE(low_entropy_pref->IsDefaultValue());
177 89
178 MetricsService::SetExecutionPhase(MetricsService::UNINITIALIZED_PHASE); 90 MetricsStateManager state_manager(&prefs_);
179 MetricsService service; 91 state_manager.GetLowEntropySource();
180 service.GetLowEntropySource();
181 92
182 EXPECT_FALSE(low_entropy_pref->IsDefaultValue()); 93 EXPECT_FALSE(low_entropy_pref->IsDefaultValue());
183 EXPECT_TRUE(low_entropy_pref->GetValue()->GetAsInteger(&low_entropy_value)); 94 EXPECT_TRUE(low_entropy_pref->GetValue()->GetAsInteger(&low_entropy_value));
184 } 95 }
185 96
186 // Now, set a dummy value in the permuted entropy cache pref and verify that 97 // Now, set a dummy value in the permuted entropy cache pref and verify that
187 // another call to GetLowEntropySource() doesn't clobber it when 98 // another call to GetLowEntropySource() doesn't clobber it when
188 // --reset-variation-state wasn't specified. 99 // --reset-variation-state wasn't specified.
189 { 100 {
190 GetLocalState()->SetString(kCachePrefName, "test"); 101 prefs_.SetString(kCachePrefName, "test");
191 102
192 MetricsService::SetExecutionPhase(MetricsService::UNINITIALIZED_PHASE); 103 MetricsStateManager state_manager(&prefs_);
193 MetricsService service; 104 state_manager.GetLowEntropySource();
194 service.GetLowEntropySource();
195 105
196 EXPECT_EQ("test", GetLocalState()->GetString(kCachePrefName)); 106 EXPECT_EQ("test", prefs_.GetString(kCachePrefName));
197 EXPECT_EQ(low_entropy_value, 107 EXPECT_EQ(low_entropy_value,
198 GetLocalState()->GetInteger(prefs::kMetricsLowEntropySource)); 108 prefs_.GetInteger(prefs::kMetricsLowEntropySource));
199 } 109 }
200 110
201 // Verify that the cache does get reset if --reset-variations-state is passed. 111 // Verify that the cache does get reset if --reset-variations-state is passed.
202 { 112 {
203 CommandLine::ForCurrentProcess()->AppendSwitch( 113 CommandLine::ForCurrentProcess()->AppendSwitch(
204 switches::kResetVariationState); 114 switches::kResetVariationState);
205 115
206 MetricsService::SetExecutionPhase(MetricsService::UNINITIALIZED_PHASE); 116 MetricsStateManager state_manager(&prefs_);
207 MetricsService service; 117 state_manager.GetLowEntropySource();
208 service.GetLowEntropySource();
209 118
210 EXPECT_TRUE(GetLocalState()->GetString(kCachePrefName).empty()); 119 EXPECT_TRUE(prefs_.GetString(kCachePrefName).empty());
211 } 120 }
212 } 121 }
213 122
214 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCleanShutDown) {
215 base::FieldTrialList field_trial_list(NULL);
216 base::FieldTrialList::CreateFieldTrial("UMAStability", "SeparateLog");
217
218 GetLocalState()->SetBoolean(prefs::kStabilityExitedCleanly, true);
219
220 TestMetricsService service;
221 service.InitializeMetricsRecordingState(MetricsService::REPORTING_ENABLED);
222 // No initial stability log should be generated.
223 EXPECT_FALSE(service.log_manager()->has_unsent_logs());
224 EXPECT_FALSE(service.log_manager()->has_staged_log());
225 }
226
227 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCrash) {
228 base::FieldTrialList field_trial_list(NULL);
229 base::FieldTrialList::CreateFieldTrial("UMAStability", "SeparateLog");
230
231 GetLocalState()->ClearPref(prefs::kStabilityExitedCleanly);
232
233 // Set up prefs to simulate restarting after a crash.
234
235 // Save an existing system profile to prefs, to correspond to what would be
236 // saved from a previous session.
237 TestMetricsLog log("client", 1);
238 log.RecordEnvironment(std::vector<content::WebPluginInfo>(),
239 GoogleUpdateMetrics(),
240 std::vector<chrome_variations::ActiveGroupId>());
241
242 // Record stability build time and version from previous session, so that
243 // stability metrics (including exited cleanly flag) won't be cleared.
244 GetLocalState()->SetInt64(prefs::kStabilityStatsBuildTime,
245 MetricsLog::GetBuildTime());
246 GetLocalState()->SetString(prefs::kStabilityStatsVersion,
247 MetricsLog::GetVersionString());
248
249 GetLocalState()->SetBoolean(prefs::kStabilityExitedCleanly, false);
250
251 TestMetricsService service;
252 service.InitializeMetricsRecordingState(MetricsService::REPORTING_ENABLED);
253
254 // The initial stability log should be generated and persisted in unsent logs.
255 MetricsLogManager* log_manager = service.log_manager();
256 EXPECT_TRUE(log_manager->has_unsent_logs());
257 EXPECT_FALSE(log_manager->has_staged_log());
258
259 // Stage the log and retrieve it.
260 log_manager->StageNextLogForUpload();
261 EXPECT_TRUE(log_manager->has_staged_log());
262
263 metrics::ChromeUserMetricsExtension uma_log;
264 EXPECT_TRUE(uma_log.ParseFromString(log_manager->staged_log_text()));
265
266 EXPECT_TRUE(uma_log.has_client_id());
267 EXPECT_TRUE(uma_log.has_session_id());
268 EXPECT_TRUE(uma_log.has_system_profile());
269 EXPECT_EQ(0, uma_log.user_action_event_size());
270 EXPECT_EQ(0, uma_log.omnibox_event_size());
271 EXPECT_EQ(0, uma_log.histogram_event_size());
272 EXPECT_EQ(0, uma_log.profiler_event_size());
273 EXPECT_EQ(0, uma_log.perf_data_size());
274
275 EXPECT_EQ(1, uma_log.system_profile().stability().crash_count());
276 }
277
278 TEST_F(MetricsServiceTest, RegisterSyntheticTrial) {
279 MetricsService service;
280
281 // Add two synthetic trials and confirm that they show up in the list.
282 SyntheticTrialGroup trial1(metrics::HashName("TestTrial1"),
283 metrics::HashName("Group1"));
284 service.RegisterSyntheticFieldTrial(trial1);
285
286 SyntheticTrialGroup trial2(metrics::HashName("TestTrial2"),
287 metrics::HashName("Group2"));
288 service.RegisterSyntheticFieldTrial(trial2);
289 // Ensure that time has advanced by at least a tick before proceeding.
290 WaitUntilTimeChanges(base::TimeTicks::Now());
291
292 service.log_manager_.BeginLoggingWithLog(
293 new MetricsLog("clientID", 1, MetricsLog::INITIAL_STABILITY_LOG));
294 // Save the time when the log was started (it's okay for this to be greater
295 // than the time recorded by the above call since it's used to ensure the
296 // value changes).
297 const base::TimeTicks begin_log_time = base::TimeTicks::Now();
298
299 std::vector<chrome_variations::ActiveGroupId> synthetic_trials;
300 service.GetCurrentSyntheticFieldTrials(&synthetic_trials);
301 EXPECT_EQ(2U, synthetic_trials.size());
302 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial1", "Group1"));
303 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial2", "Group2"));
304
305 // Ensure that time has advanced by at least a tick before proceeding.
306 WaitUntilTimeChanges(begin_log_time);
307
308 // Change the group for the first trial after the log started.
309 // TODO(asvitkine): Assumption that this is > than BeginLoggingWithLog() time.
310 SyntheticTrialGroup trial3(metrics::HashName("TestTrial1"),
311 metrics::HashName("Group2"));
312 service.RegisterSyntheticFieldTrial(trial3);
313 service.GetCurrentSyntheticFieldTrials(&synthetic_trials);
314 EXPECT_EQ(1U, synthetic_trials.size());
315 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial2", "Group2"));
316
317 // Add a new trial after the log started and confirm that it doesn't show up.
318 SyntheticTrialGroup trial4(metrics::HashName("TestTrial3"),
319 metrics::HashName("Group3"));
320 service.RegisterSyntheticFieldTrial(trial4);
321 service.GetCurrentSyntheticFieldTrials(&synthetic_trials);
322 EXPECT_EQ(1U, synthetic_trials.size());
323 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial2", "Group2"));
324
325 // Ensure that time has advanced by at least a tick before proceeding.
326 WaitUntilTimeChanges(base::TimeTicks::Now());
327
328 // Start a new log and ensure all three trials appear in it.
329 service.log_manager_.FinishCurrentLog();
330 service.log_manager_.BeginLoggingWithLog(
331 new MetricsLog("clientID", 1, MetricsLog::ONGOING_LOG));
332 service.GetCurrentSyntheticFieldTrials(&synthetic_trials);
333 EXPECT_EQ(3U, synthetic_trials.size());
334 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial1", "Group2"));
335 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial2", "Group2"));
336 EXPECT_TRUE(HasSyntheticTrial(synthetic_trials, "TestTrial3", "Group3"));
337 service.log_manager_.FinishCurrentLog();
338 }
339
340 TEST_F(MetricsServiceTest, MetricsReportingEnabled) {
341 #if !defined(OS_CHROMEOS)
342 GetLocalState()->SetBoolean(prefs::kMetricsReportingEnabled, false);
343 EXPECT_FALSE(MetricsServiceHelper::IsMetricsReportingEnabled());
344 GetLocalState()->SetBoolean(prefs::kMetricsReportingEnabled, true);
345 EXPECT_TRUE(MetricsServiceHelper::IsMetricsReportingEnabled());
346 GetLocalState()->ClearPref(prefs::kMetricsReportingEnabled);
347 EXPECT_FALSE(MetricsServiceHelper::IsMetricsReportingEnabled());
348 #else
349 // ChromeOS does not register prefs::kMetricsReportingEnabled and uses
350 // device settings for metrics reporting.
351 EXPECT_FALSE(MetricsServiceHelper::IsMetricsReportingEnabled());
352 #endif
353 }
354
355 TEST_F(MetricsServiceTest, CrashReportingEnabled) {
356 #if defined(GOOGLE_CHROME_BUILD)
357 // ChromeOS has different device settings for crash reporting.
358 #if !defined(OS_CHROMEOS)
359 #if defined(OS_ANDROID)
360 const char* crash_pref = prefs::kCrashReportingEnabled;
361 #else
362 const char* crash_pref = prefs::kMetricsReportingEnabled;
363 #endif
364 GetLocalState()->SetBoolean(crash_pref, false);
365 EXPECT_FALSE(MetricsServiceHelper::IsCrashReportingEnabled());
366 GetLocalState()->SetBoolean(crash_pref, true);
367 EXPECT_TRUE(MetricsServiceHelper::IsCrashReportingEnabled());
368 GetLocalState()->ClearPref(crash_pref);
369 EXPECT_FALSE(MetricsServiceHelper::IsCrashReportingEnabled());
370 #endif // !defined(OS_CHROMEOS)
371 #else // defined(GOOGLE_CHROME_BUILD)
372 // Chromium branded browsers never have crash reporting enabled.
373 EXPECT_FALSE(MetricsServiceHelper::IsCrashReportingEnabled());
374 #endif // defined(GOOGLE_CHROME_BUILD)
375 }
376
377 // Check that setting the kMetricsResetIds pref to true causes the client id to 123 // Check that setting the kMetricsResetIds pref to true causes the client id to
378 // be reset. We do not check that the low entropy source is reset because we 124 // be reset. We do not check that the low entropy source is reset because we
379 // cannot ensure that metrics service won't generate the same id again. 125 // cannot ensure that metrics state manager won't generate the same id again.
380 TEST_F(MetricsServiceTest, ResetMetricsIDs) { 126 TEST_F(MetricsStateManagerTest, ResetMetricsIDs) {
381 // Set an initial client id in prefs. It should not be possible for the 127 // Set an initial client id in prefs. It should not be possible for the
382 // metrics service to generate this id randomly. 128 // metrics state manager to generate this id randomly.
383 const std::string kInitialClientId = "initial client id"; 129 const std::string kInitialClientId = "initial client id";
384 GetLocalState()->SetString(prefs::kMetricsClientID, kInitialClientId); 130 prefs_.SetString(prefs::kMetricsClientID, kInitialClientId);
385 131
386 // Make sure the initial client id isn't reset by the metrics service. 132 // Make sure the initial client id isn't reset by the metrics state manager.
387 { 133 {
388 MetricsService service; 134 MetricsStateManager state_manager(&prefs_);
389 service.ForceClientIdCreation(); 135 state_manager.ForceClientIdCreation();
390 EXPECT_TRUE(service.metrics_ids_reset_check_performed_); 136 EXPECT_EQ(kInitialClientId, state_manager.client_id());
391 EXPECT_EQ(kInitialClientId, service.client_id_);
392 } 137 }
393 138
394
395 // Set the reset pref to cause the IDs to be reset. 139 // Set the reset pref to cause the IDs to be reset.
396 GetLocalState()->SetBoolean(prefs::kMetricsResetIds, true); 140 prefs_.SetBoolean(prefs::kMetricsResetIds, true);
397 141
398 // Cause the actual reset to happen. 142 // Cause the actual reset to happen.
399 { 143 {
400 MetricsService service; 144 MetricsStateManager state_manager(&prefs_);
401 service.ForceClientIdCreation(); 145 state_manager.ForceClientIdCreation();
402 EXPECT_TRUE(service.metrics_ids_reset_check_performed_); 146 EXPECT_NE(kInitialClientId, state_manager.client_id());
403 EXPECT_NE(kInitialClientId, service.client_id_);
404 147
405 service.GetLowEntropySource(); 148 state_manager.GetLowEntropySource();
406 149
407 EXPECT_FALSE(GetLocalState()->GetBoolean(prefs::kMetricsResetIds)); 150 EXPECT_FALSE(prefs_.GetBoolean(prefs::kMetricsResetIds));
408 } 151 }
409 152
410 std::string new_client_id = 153 EXPECT_NE(kInitialClientId, prefs_.GetString(prefs::kMetricsClientID));
411 GetLocalState()->GetString(prefs::kMetricsClientID); 154 }
412 155
413 EXPECT_NE(kInitialClientId, new_client_id); 156 } // namespace metrics
414 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698