Index: components/autofill/core/common/save_password_progress_logger.h |
diff --git a/components/autofill/core/common/save_password_progress_logger.h b/components/autofill/core/common/save_password_progress_logger.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..63f1075f08509dca9ca47232eeecfc8d869eb6f1 |
--- /dev/null |
+++ b/components/autofill/core/common/save_password_progress_logger.h |
@@ -0,0 +1,74 @@ |
+// Copyright 2014 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 COMPONENTS_AUTOFILL_CORE_COMMON_SAVE_PASSWORD_PROGRESS_LOGGER_H_ |
+#define COMPONENTS_AUTOFILL_CORE_COMMON_SAVE_PASSWORD_PROGRESS_LOGGER_H_ |
+ |
+#include <string> |
+ |
+#include "url/gurl.h" |
+ |
+namespace base { |
+class Value; |
+} |
+ |
+namespace autofill { |
+ |
+struct PasswordForm; |
+ |
+// When logging decisions made by password management code about whether to |
+// offer user-entered credentials for saving or not, do use this class. It |
+// offers a suite of convenience methods to format and scrub logs. The methods |
+// have built-in privacy protections (never include a password, scrub URLs), so |
+// that the result is appropriate for display on the internals page. |
+// |
+// To use this class, the method SendLog needs to be overriden to send the logs |
+// for display as appropriate. |
+// |
+// TODO(vabr): Logically, this class belongs to the password_manager component. |
+// But the PasswordAutofillAgent needs to use it, so until that agent is in a |
+// third component, shared by autofill and password_manager, this helper needs |
+// to stay in autofill as well. |
+class SavePasswordProgressLogger { |
+ public: |
+ // All three possible decisions about saving a password. Call LogFinalDecision |
+ // as soon as one is taken by the password management code. |
+ enum Decision { DECISION_SAVE, DECISION_ASK, DECISION_DROP }; |
+ |
+ SavePasswordProgressLogger(); |
+ virtual ~SavePasswordProgressLogger(); |
+ |
+ // Logging: specialized methods (for logging forms, URLs, etc.) take care of |
+ // proper removing of sensitive data where appropriate. |
+ void LogPasswordForm(const std::string& message, |
+ const autofill::PasswordForm& form); |
+ void LogHTMLForm(const std::string& message, |
+ const std::string& name_or_id, |
+ const std::string& method, |
+ const GURL& action); |
+ void LogURL(const std::string& message, const GURL& url); |
+ void LogWhetherObjectExists(const std::string& message, const void* object); |
+ void LogBoolean(const std::string& message, bool value); |
+ void LogNumber(const std::string& message, int value); |
+ void LogNumber(const std::string& message, size_t value); |
+ void LogFinalDecision(Decision decision); |
+ // Do not use LogMessage when there is an appropriate specialized method |
+ // above. LogMessage performs no scrubbing of sensitive data. |
+ void LogMessage(const std::string& message); |
+ |
+ protected: |
+ // Sends |log| immediately for display. |
+ virtual void SendLog(const std::string& log) = 0; |
+ |
+ private: |
+ // Takes a structured |log|, converts it to a string suitable for plain text |
+ // output, adds the |name| as a caption, and sends out via SendLog. |
+ void LogValue(const std::string& name, const base::Value& log); |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SavePasswordProgressLogger); |
+}; |
+ |
+} // namespace autofill |
+ |
+#endif // COMPONENTS_AUTOFILL_CORE_COMMON_SAVE_PASSWORD_PROGRESS_LOGGER_H_ |