1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// found in the LICENSE file.
4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#ifndef COMPONENTS_AUTOFILL_CORE_COMMON_SAVE_PASSWORD_PROGRESS_LOGGER_H_
6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define COMPONENTS_AUTOFILL_CORE_COMMON_SAVE_PASSWORD_PROGRESS_LOGGER_H_
7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include <string>
9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "url/gurl.h"
11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace base {
13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass Value;
14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace autofill {
17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochstruct PasswordForm;
19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// When logging decisions made by password management code about whether to
21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// offer user-entered credentials for saving or not, do use this class. It
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// offers a suite of convenience methods to format and scrub logs. The methods
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// have built-in privacy protections (never include a password, scrub URLs), so
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// that the result is appropriate for display on the internals page.
25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// To use this class, the method SendLog needs to be overriden to send the logs
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// for display as appropriate.
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// TODO(vabr): Logically, this class belongs to the password_manager component.
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// But the PasswordAutofillAgent needs to use it, so until that agent is in a
31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// third component, shared by autofill and password_manager, this helper needs
32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// to stay in autofill as well.
33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass SavePasswordProgressLogger {
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public:
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // IDs of strings allowed in the logs: for security reasons, we only pass the
360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // IDs from the renderer, and map them to strings in the browser.
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  enum StringID {
380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_DECISION_ASK,
390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_DECISION_DROP,
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_DECISION_SAVE,
410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_OTHER,
420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_SCHEME_HTML,
430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_SCHEME_BASIC,
440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_SCHEME_DIGEST,
450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_SCHEME_MESSAGE,
460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_SIGNON_REALM,
470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_ORIGINAL_SIGNON_REALM,
480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_ORIGIN,
490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_ACTION,
500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_USERNAME_ELEMENT,
510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_PASSWORD_ELEMENT,
520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_PASSWORD_AUTOCOMPLETE_SET,
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STRING_NEW_PASSWORD_ELEMENT,
540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_SSL_VALID,
550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_PASSWORD_GENERATED,
560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_TIMES_USED,
570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_USE_ADDITIONAL_AUTHENTICATION,
580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_PSL_MATCH,
590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_NAME_OR_ID,
600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_MESSAGE,
615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_SET_AUTH_METHOD,
625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_AUTHENTICATION_HANDLED,
635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_LOGINHANDLER_FORM,
645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_SEND_PASSWORD_FORMS_METHOD,
655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_SECURITY_ORIGIN,
665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_SECURITY_ORIGIN_FAILURE,
675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_WEBPAGE_EMPTY,
685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_NUMBER_OF_ALL_FORMS,
695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_FORM_FOUND_ON_PAGE,
705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_FORM_IS_VISIBLE,
715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_FORM_IS_PASSWORD,
725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_WILL_SUBMIT_FORM_METHOD,
735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_HTML_FORM_FOR_SUBMIT,
745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_CREATED_PASSWORD_FORM,
755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_SUBMITTED_PASSWORD_REPLACED,
765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_DID_START_PROVISIONAL_LOAD_METHOD,
775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_FORM_FRAME_EQ_FRAME,
785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_PROVISIONALLY_SAVED_FORM_FOR_FRAME,
795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_PASSWORD_FORM_FOUND_ON_PAGE,
805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_PROVISIONALLY_SAVE_PASSWORD_METHOD,
815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_PROVISIONALLY_SAVE_PASSWORD_FORM,
825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_IS_SAVING_ENABLED,
835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_EMPTY_PASSWORD,
845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_EXACT_MATCH,
855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_MATCH_WITHOUT_ACTION,
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STRING_MATCHING_NOT_COMPLETE,
875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_FORM_BLACKLISTED,
885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_INVALID_FORM,
895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_AUTOCOMPLETE_OFF,
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STRING_SYNC_CREDENTIAL,
915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_PROVISIONALLY_SAVED_FORM,
925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_IGNORE_POSSIBLE_USERNAMES,
935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_ON_PASSWORD_FORMS_RENDERED_METHOD,
945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_NO_PROVISIONAL_SAVE_MANAGER,
955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_NUMBER_OF_VISIBLE_FORMS,
965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_PASSWORD_FORM_REAPPEARED,
975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_SAVING_DISABLED,
985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    STRING_NO_MATCHING_FORM,
99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    STRING_SSL_ERRORS_PRESENT,
100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    STRING_ONLY_VISIBLE,
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    STRING_SHOW_PASSWORD_PROMPT,
1020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_INVALID,  // Represents a string returned in a case of an error.
1030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STRING_MAX = STRING_INVALID
1040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  };
105c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
106c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  SavePasswordProgressLogger();
107c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual ~SavePasswordProgressLogger();
108c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Call these methods to log information. They sanitize the input and call
1100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // SendLog to pass it for display.
111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void LogPasswordForm(StringID label, const PasswordForm& form);
1120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void LogHTMLForm(StringID label,
113c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                   const std::string& name_or_id,
114c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                   const GURL& action);
1150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void LogURL(StringID label, const GURL& url);
1160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void LogBoolean(StringID label, bool truth_value);
1170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void LogNumber(StringID label, int signed_number);
1180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void LogNumber(StringID label, size_t unsigned_number);
1190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void LogMessage(StringID message);
120c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
121c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected:
122c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Sends |log| immediately for display.
123c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void SendLog(const std::string& log) = 0;
124c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
125c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private:
1260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Converts |log| and its |label| to a string and calls SendLog on the result.
1270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void LogValue(StringID label, const base::Value& log);
128c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
129c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  DISALLOW_COPY_AND_ASSIGN(SavePasswordProgressLogger);
130c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch};
131c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
132c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}  // namespace autofill
133c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
134c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif  // COMPONENTS_AUTOFILL_CORE_COMMON_SAVE_PASSWORD_PROGRESS_LOGGER_H_
135