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

Unified Diff: chrome/browser/safe_browsing/incident_reporting/platform_state_store_win_unittest.cc

Issue 1243293003: Platform-specific prune state storage. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@prune1
Patch Set: moved uninstall cleanup to separate cl Created 5 years, 3 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
Index: chrome/browser/safe_browsing/incident_reporting/platform_state_store_win_unittest.cc
diff --git a/chrome/browser/safe_browsing/incident_reporting/platform_state_store_win_unittest.cc b/chrome/browser/safe_browsing/incident_reporting/platform_state_store_win_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..055ef58b7c0caae5990b3212b485115879e12347
--- /dev/null
+++ b/chrome/browser/safe_browsing/incident_reporting/platform_state_store_win_unittest.cc
@@ -0,0 +1,179 @@
+// Copyright 2015 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 "chrome/browser/safe_browsing/incident_reporting/platform_state_store.h"
+
+#include "base/prefs/pref_notifier_impl.h"
+#include "base/prefs/testing_pref_store.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/test/test_reg_util_win.h"
+#include "base/test/test_simple_task_runner.h"
+#include "base/thread_task_runner_handle.h"
+#include "base/win/registry.h"
+#include "chrome/browser/prefs/browser_prefs.h"
+#include "chrome/test/base/testing_browser_process.h"
+#include "chrome/test/base/testing_pref_service_syncable.h"
+#include "chrome/test/base/testing_profile.h"
+#include "chrome/test/base/testing_profile_manager.h"
+#include "components/pref_registry/pref_registry_syncable.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace safe_browsing {
+namespace platform_state_store {
+
+namespace {
+
+const char kTestData_[] = "comme un poisson";
+const DWORD kTestDataSize_ = sizeof(kTestData_) - 1;
+
+} // namespace
+
+class PlatformStateStoreWinTest : public ::testing::Test {
+ protected:
+ PlatformStateStoreWinTest()
+ : profile_(nullptr),
+ task_runner_(new base::TestSimpleTaskRunner()),
+ thread_task_runner_handle_(task_runner_),
+ profile_manager_(TestingBrowserProcess::GetGlobal()) {}
+
+ void SetUp() override {
+ ::testing::Test::SetUp();
+ registry_override_manager_.OverrideRegistry(HKEY_CURRENT_USER);
+ ASSERT_TRUE(profile_manager_.SetUp());
+ }
+
+ // Creates/resets |profile_|. If |new_profile| is true, the profile will
+ // believe that it is new (Profile::IsNewProfile() will return true).
+ void ResetProfile(bool new_profile) {
+ if (profile_) {
+ profile_manager_.DeleteTestingProfile(kProfileName_);
+ profile_ = nullptr;
+ }
+ // Create a profile with a user PrefStore that can be manipulated.
+ TestingPrefStore* user_pref_store = new TestingPrefStore();
+ // Profile::IsNewProfile() returns true/false on the basis of the pref
+ // store's read_error property. A profile is considered "New" if it didn't
+ // have a user prefs file.
+ user_pref_store->set_read_error(
+ new_profile ? PersistentPrefStore::PREF_READ_ERROR_NO_FILE
+ : PersistentPrefStore::PREF_READ_ERROR_NONE);
+ // Ownership of |user_pref_store| is passed to the service.
+ scoped_ptr<TestingPrefServiceSyncable> prefs(new TestingPrefServiceSyncable(
+ new TestingPrefStore(), user_pref_store, new TestingPrefStore(),
+ new user_prefs::PrefRegistrySyncable(), new PrefNotifierImpl()));
+ chrome::RegisterUserProfilePrefs(prefs->registry());
+ profile_ = profile_manager_.CreateTestingProfile(
+ kProfileName_, prefs.Pass(), base::UTF8ToUTF16(kProfileName_), 0,
+ std::string(), TestingProfile::TestingFactories());
+ if (new_profile)
+ ASSERT_TRUE(profile_->IsNewProfile());
+ else
+ ASSERT_FALSE(profile_->IsNewProfile());
+ }
+
+ void WriteTestData() {
+ base::win::RegKey key;
+ ASSERT_EQ(ERROR_SUCCESS, key.Create(HKEY_CURRENT_USER, kStoreKeyName_,
+ KEY_SET_VALUE | KEY_WOW64_32KEY));
+ ASSERT_EQ(ERROR_SUCCESS,
+ key.WriteValue(base::UTF8ToUTF16(kProfileName_).c_str(),
+ &kTestData_[0], kTestDataSize_, REG_BINARY));
+ }
+
+ void AssertTestDataIsAbsent() {
+ base::win::RegKey key;
+ ASSERT_EQ(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, kStoreKeyName_,
+ KEY_QUERY_VALUE | KEY_WOW64_32KEY));
+ ASSERT_FALSE(key.HasValue(base::UTF8ToUTF16(kProfileName_).c_str()));
+ }
+
+ void AssertTestDataIsPresent() {
+ char buffer[kTestDataSize_] = {};
+ base::win::RegKey key;
+ ASSERT_EQ(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, kStoreKeyName_,
+ KEY_QUERY_VALUE | KEY_WOW64_32KEY));
+ DWORD data_size = kTestDataSize_;
+ DWORD data_type = REG_NONE;
+ ASSERT_EQ(ERROR_SUCCESS,
+ key.ReadValue(base::UTF8ToUTF16(kProfileName_).c_str(),
+ &buffer[0], &data_size, &data_type));
+ EXPECT_EQ(REG_BINARY, data_type);
+ ASSERT_EQ(kTestDataSize_, data_size);
+ EXPECT_EQ(std::string(&buffer[0], data_size),
+ std::string(&kTestData_[0], kTestDataSize_));
+ }
+
+ static const char kProfileName_[];
+ static const base::char16 kStoreKeyName_[];
+ TestingProfile* profile_;
+
+ private:
+ registry_util::RegistryOverrideManager registry_override_manager_;
+ scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
+ base::ThreadTaskRunnerHandle thread_task_runner_handle_;
+ TestingProfileManager profile_manager_;
+
+ DISALLOW_COPY_AND_ASSIGN(PlatformStateStoreWinTest);
+};
+
+// static
+const char PlatformStateStoreWinTest::kProfileName_[] = "test_profile";
+#if defined(GOOGLE_CHROME_BUILD)
+const base::char16 PlatformStateStoreWinTest::kStoreKeyName_[] =
+ L"Software\\Google\\Chrome\\IncidentsSent";
+#else
+const base::char16 PlatformStateStoreWinTest::kStoreKeyName_[] =
+ L"Software\\Chromium\\IncidentsSent";
+#endif
+
+// Tests that store data is written correctly to the proper location.
+TEST_F(PlatformStateStoreWinTest, WriteStoreData) {
+ ResetProfile(false /* !new_profile */);
+
+ ASSERT_FALSE(base::win::RegKey(HKEY_CURRENT_USER, kStoreKeyName_,
+ KEY_QUERY_VALUE | KEY_WOW64_32KEY)
+ .HasValue(base::UTF8ToUTF16(kProfileName_).c_str()));
+ WriteStoreData(profile_, kTestData_);
+ AssertTestDataIsPresent();
+}
+
+// Tests that store data is read from the proper location.
+TEST_F(PlatformStateStoreWinTest, ReadStoreData) {
+ // Put some data in the registry.
+ WriteTestData();
+
+ ResetProfile(false /* !new_profile */);
+ std::string data;
+ PlatformStateStoreLoadResult result = ReadStoreData(profile_, &data);
+ EXPECT_EQ(PlatformStateStoreLoadResult::SUCCESS, result);
+ EXPECT_EQ(std::string(&kTestData_[0], kTestDataSize_), data);
+}
+
+// Tests that an empty write clears the stored data.
+TEST_F(PlatformStateStoreWinTest, WriteEmptyStoreData) {
+ // Put some data in the registry.
+ WriteTestData();
+
+ ResetProfile(false /* !new_profile */);
+
+ WriteStoreData(profile_, std::string());
+ AssertTestDataIsAbsent();
+}
+
+// Tests that data in the registry is ignored if the profile is new.
+TEST_F(PlatformStateStoreWinTest, ReadNewProfileClearData) {
+ ResetProfile(true /* new_profile */);
+
+ // Put some data in the registry.
+ WriteTestData();
+
+ std::string data;
+ PlatformStateStoreLoadResult result = ReadStoreData(profile_, &data);
+ EXPECT_EQ(PlatformStateStoreLoadResult::CLEARED_DATA, result);
+ EXPECT_EQ(std::string(), data);
+ AssertTestDataIsAbsent();
+}
+
+} // namespace platform_state_store
+} // namespace safe_browsing

Powered by Google App Engine
This is Rietveld 408576698