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_; |
} |