Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3069)

Unified Diff: chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc

Issue 1540423004: Add card details and legal message to Android save credit card infobar. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: components/autofill review. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc
diff --git a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc
index 43e99aee6538a211de858bfcbc997b64fd0dd302..249383a363f63e24e9e44d38099432d2e4728616 100644
--- a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc
+++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc
@@ -6,9 +6,6 @@
#include <stddef.h>
-#include "base/i18n/message_formatter.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/ui/autofill/save_card_bubble_view.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_finder.h"
@@ -31,112 +28,6 @@ namespace {
// TODO(bondd): Share with ManagePasswordsUIController.
const int kSurviveNavigationSeconds = 5;
-// Replace "{0}", "{1}", ... in |template_icu| with corresponding strings
-// from |display_texts|. Sets |out_message| to the resulting string, with
-// start position of each replacement in |out_offsets|.
-// Return false on failure. If false is returned then contents of |out_message|
-// and |out_offsets| are undefined.
-bool ReplaceTemplatePlaceholders(
- const base::string16& template_icu,
- const std::vector<base::string16>& display_texts,
- base::string16* out_message,
- std::vector<size_t>* out_offsets) {
- // Escape "$" -> "$$" for ReplaceStringPlaceholders().
- //
- // Edge cases:
- // 1. Two or more consecutive $ characters will be incorrectly expanded
- // ("$$" -> "$$$$", which ReplaceStringPlaceholders() then turns into
- // "$$$").
- //
- // 2. "${" will cause false to be returned. "${0}" will expand to "$${0}".
- // FormatWithNumberedArgs() turns it into "$$$1", which
- // ReplaceStringPlaceholders() then turns into "$$1" without doing the
- // parameter replacement. This causes false to be returned because each
- // parameter is not used exactly once.
- //
- // Both of these cases are noted in the header file, and are unlikely to
- // occur in any actual legal message.
- base::string16 template_icu_escaped;
- base::ReplaceChars(template_icu, base::ASCIIToUTF16("$"),
- base::ASCIIToUTF16("$$"), &template_icu_escaped);
-
- // Replace "{0}" -> "$1", "{1}" -> "$2", ... to prepare |template_dollars|
- // for ReplaceStringPlaceholders().
- base::string16 template_dollars =
- base::i18n::MessageFormatter::FormatWithNumberedArgs(
- template_icu_escaped, "$1", "$2", "$3", "$4", "$5", "$6", "$7");
-
- // FormatWithNumberedArgs() returns an empty string on failure.
- if (template_dollars.empty() && !template_icu.empty())
- return false;
-
- // Replace "$1", "$2", ... with the display text of each parameter.
- *out_message = base::ReplaceStringPlaceholders(template_dollars,
- display_texts, out_offsets);
-
- // Each parameter must be used exactly once. If a parameter is unused or
- // used more than once then it can't be determined which |offsets| entry
- // corresponds to which parameter.
- return out_offsets->size() == display_texts.size();
-}
-
-// Parses |line| and sets |out|.
-// Returns false on failure. |out| is not modified if false is returned.
-bool ParseLegalMessageLine(const base::DictionaryValue& line,
- SaveCardBubbleController::LegalMessageLine* out) {
- SaveCardBubbleController::LegalMessageLine result;
-
- // |display_texts| elements are the strings that will be substituted for
- // "{0}", "{1}", etc. in the template string.
- std::vector<base::string16> display_texts;
-
- // Process all the template parameters.
- const base::ListValue* template_parameters = nullptr;
- if (line.GetList("template_parameter", &template_parameters)) {
- display_texts.resize(template_parameters->GetSize());
- result.links.resize(template_parameters->GetSize());
-
- for (size_t parameter_index = 0;
- parameter_index < template_parameters->GetSize(); ++parameter_index) {
- const base::DictionaryValue* single_parameter;
- std::string url;
- if (!template_parameters->GetDictionary(parameter_index,
- &single_parameter) ||
- !single_parameter->GetString("display_text",
- &display_texts[parameter_index]) ||
- !single_parameter->GetString("url", &url)) {
- return false;
- }
- result.links[parameter_index].url = GURL(url);
- }
- }
-
- // Read the template string. It's a small subset of the ICU message format
- // syntax.
- base::string16 template_icu;
- if (!line.GetString("template", &template_icu))
- return false;
-
- // Replace the placeholders in |template_icu| with strings from
- // |display_texts|, and store the start position of each replacement in
- // |offsets|.
- std::vector<size_t> offsets;
- if (!ReplaceTemplatePlaceholders(template_icu, display_texts, &result.text,
- &offsets)) {
- return false;
- }
-
- // Fill in range values for all links.
- for (size_t offset_index = 0; offset_index < offsets.size(); ++offset_index) {
- size_t range_start = offsets[offset_index];
- result.links[offset_index].range = gfx::Range(
- range_start, range_start + display_texts[offset_index].size());
- }
-
- *out = result;
- return true;
-}
-
} // namespace
SaveCardBubbleControllerImpl::SaveCardBubbleControllerImpl(
@@ -172,27 +63,10 @@ void SaveCardBubbleControllerImpl::ShowBubbleForUpload(
AutofillMetrics::SAVE_CARD_PROMPT_SHOW_REQUESTED, is_uploading_,
is_reshow_);
- const base::ListValue* lines = nullptr;
- if (legal_message->GetList("line", &lines)) {
- // Process all lines of the legal message. See comment in header file for
- // example of valid |legal_message| data.
- legal_message_lines_.resize(lines->GetSize());
- for (size_t i = 0; i < lines->GetSize(); ++i) {
- const base::DictionaryValue* single_line;
- if (!lines->GetDictionary(i, &single_line) ||
- !ParseLegalMessageLine(*single_line, &legal_message_lines_[i])) {
- lines = nullptr;
- break;
- }
- }
- }
-
- if (!lines) {
+ if (!LegalMessageLine::Parse(*legal_message, &legal_message_lines_)) {
AutofillMetrics::LogSaveCardPromptMetric(
AutofillMetrics::SAVE_CARD_PROMPT_END_INVALID_LEGAL_MESSAGE,
is_uploading_, is_reshow_);
-
- legal_message_lines_.clear();
return;
}
@@ -263,8 +137,8 @@ void SaveCardBubbleControllerImpl::OnBubbleClosed() {
UpdateIcon();
}
-const SaveCardBubbleController::LegalMessageLines&
-SaveCardBubbleControllerImpl::GetLegalMessageLines() const {
+const LegalMessageLines& SaveCardBubbleControllerImpl::GetLegalMessageLines()
+ const {
return legal_message_lines_;
}

Powered by Google App Engine
This is Rietveld 408576698