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