blob: 67a2b5349a27932fee41aa2960b724145962270c [file] [log] [blame]
// 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.
// An interface to platform-specific storage of IncidentReportingService prune
// state.
#ifndef CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_PLATFORM_STATE_STORE_H_
#define CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_PLATFORM_STATE_STORE_H_
#include <stdint.h>
#include <memory>
#include <string>
#include "build/build_config.h"
// Certain platforms provide their own storage of protobuf-serialized prune
// state. On platforms where it is not supported, Load() and Store() are noops.
#if defined(OS_WIN)
// Store the state in the registry on Windows.
#define USE_PLATFORM_STATE_STORE
#endif
class Profile;
namespace base {
class DictionaryValue;
}
namespace safe_browsing {
namespace platform_state_store {
// Loads the platform-specific storage for |profile|. Returns null if there is
// no such storage for the current platform or in case of error; otherwise, a
// (possibly empty) dictionary.
std::unique_ptr<base::DictionaryValue> Load(Profile* profile);
// Stores the state for |profile| in |incidents_sent| into platform-specific
// storage if there is such for the current platform.
void Store(Profile* profile, const base::DictionaryValue* incidents_sent);
#if defined(USE_PLATFORM_STATE_STORE)
// All declarations and definitions from this point forward are for use by
// implementations in platform-specific source files, or are exposed for the
// sake of testing.
// The result of loading platform-specific state. This is a histogram type; do
// not reorder.
enum class PlatformStateStoreLoadResult : int32_t {
SUCCESS = 0,
CLEARED_DATA = 1,
CLEARED_NO_DATA = 2,
DATA_CLEAR_FAILED = 3,
OPEN_FAILED = 4,
READ_FAILED = 5,
PARSE_ERROR = 6,
NUM_RESULTS
};
// A platform-specific function to read store data for |profile| into |data|.
// Returns SUCCESS if |data| was populated, or a load result value indicating
// why no data was read.
PlatformStateStoreLoadResult ReadStoreData(Profile* profile, std::string* data);
// A platform-specific function to write store data for |profile| from |data|.
void WriteStoreData(Profile* profile, const std::string& data);
// Serializes the |incidents_sent| preference into |data|, replacing its
// contents. Exposed for testing.
void SerializeIncidentsSent(const base::DictionaryValue* incidents_sent,
std::string* data);
// Deserializes |data| into |value_dict|. Returns SUCCESS if |data| is empty or
// fully processed. Exposed for testing.
PlatformStateStoreLoadResult DeserializeIncidentsSent(
const std::string& data,
base::DictionaryValue* value_dict);
#endif // USE_PLATFORM_STATE_STORE
} // namespace platform_state_store
} // namespace safe_browsing
#endif // CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_PLATFORM_STATE_STORE_H_