Index: chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_config.h |
diff --git a/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_config.h b/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_config.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d5cc67a6cdf97fc957a7a0817ae408b015b3d7f0 |
--- /dev/null |
+++ b/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_config.h |
@@ -0,0 +1,65 @@ |
+// Copyright 2017 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. |
+ |
+#ifndef CHROME_BROWSER_SAFE_BROWSING_SETTINGS_RESET_PROMPT_SETTINGS_RESET_PROMPT_CONFIG_H_ |
+#define CHROME_BROWSER_SAFE_BROWSING_SETTINGS_RESET_PROMPT_SETTINGS_RESET_PROMPT_CONFIG_H_ |
+ |
+#include <cstddef> |
+#include <memory> |
+#include <string> |
+#include <unordered_map> |
+#include <vector> |
+ |
+#include "base/feature_list.h" |
+#include "base/macros.h" |
+ |
+class GURL; |
+ |
+namespace safe_browsing { |
+ |
+// Exposed for testing. |
+extern const base::Feature kSettingsResetPrompt; |
+ |
+// Encapsulates the state of the reset prompt experiment as well as |
+// associated data. |
+class SettingsResetPromptConfig { |
+ public: |
+ // Returns true if the settings reset prompt study is enabled. |
+ static bool IsPromptEnabled(); |
+ // Factory method for creating instances of SettingsResetPromptConfig. |
+ // Returns nullptr if |IsPromptEnabled()| is false or if something is wrong |
+ // with the config parameters. |
+ static std::unique_ptr<SettingsResetPromptConfig> Create(); |
+ |
+ ~SettingsResetPromptConfig(); |
+ |
+ // Returns a non-negative integer ID if |url| should trigger a |
+ // settings reset prompt and a negative integer otherwise. The IDs |
+ // identify the domains or entities that we want to prompt the user |
+ // for and can be used for metrics reporting. |
+ int UrlToResetDomainId(const GURL& url) const; |
+ |
+ // TODO(alito): parameterize the set of things that we want to reset |
+ // for so that we can control it from the finch config. For example, |
+ // with functions like HomepageResetAllowed() etc. |
+ private: |
+ typedef std::vector<uint8_t> SHA256Hash; |
+ struct SHA256HashHasher { |
+ size_t operator()(const SHA256Hash& key) const; |
+ }; |
+ enum ConfigError : int; |
+ |
+ SettingsResetPromptConfig(); |
+ bool Init(); |
+ ConfigError ParseDomainHashes(const std::string& domain_hashes_json); |
+ |
+ // Map of 32 byte SHA256 hashes to integer domain IDs. |
+ std::unordered_map<SHA256Hash, int, SHA256HashHasher> domain_hashes_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SettingsResetPromptConfig); |
+}; |
+ |
+} // namespace safe_browsing |
+ |
+#endif // CHROME_BROWSER_SAFE_BROWSING_SETTINGS_RESET_PROMPT_SETTINGS_RESET_PROMPT_CONFIG_H_ |