| // Copyright 2016 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_BROWSER_LEGAL_MESSAGE_LINE_H_ |
| #define COMPONENTS_AUTOFILL_CORE_BROWSER_LEGAL_MESSAGE_LINE_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/gtest_prod_util.h" |
| #include "base/macros.h" |
| #include "base/strings/string16.h" |
| #include "ui/gfx/range/range.h" |
| #include "url/gurl.h" |
| |
| namespace base { |
| class DictionaryValue; |
| } |
| |
| namespace autofill { |
| |
| class LegalMessageLine; |
| |
| using LegalMessageLines = std::vector<LegalMessageLine>; |
| |
| class LegalMessageLine { |
| public: |
| struct Link { |
| Link(size_t start, size_t end, const std::string& url_spec); |
| ~Link(); |
| |
| gfx::Range range; |
| GURL url; |
| }; |
| |
| LegalMessageLine(); |
| LegalMessageLine(const LegalMessageLine& other); |
| virtual ~LegalMessageLine(); // Overridden in TestLegalMessageLine. |
| |
| // Parses |legal_message|. Returns false on failure. |
| // |
| // Example of valid |legal_message| data: |
| // { |
| // "line" : [ { |
| // "template" : "The legal documents are: {0} and {1}", |
| // "template_parameter" : [ { |
| // "display_text" : "Terms of Service", |
| // "url": "http://www.example.com/tos" |
| // }, { |
| // "display_text" : "Privacy Policy", |
| // "url": "http://www.example.com/pp" |
| // } ], |
| // }, { |
| // "template" : "This is the second line and it has no parameters" |
| // } ] |
| // } |
| // |
| // Caveats: |
| // 1. '{' and '}' may be displayed by escaping them with an apostrophe in the |
| // template string, e.g. template "Here is a literal '{'". |
| // 2. Two or more consecutive dollar signs in the template string will not |
| // expand correctly. |
| // 3. "${" anywhere in the template string is invalid. |
| // 4. "\n" embedded anywhere in the template string, or an empty template |
| // string, can be used to separate paragraphs. |
| // 5. Because a single apostrophe before a curly brace starts quoted literal |
| // text in MessageFormat, "'{0}" gets treated as a literal. To avoid |
| // situations like these, setting |escape_apostrophes| to true will escape |
| // all ASCII apostrophes by doubling them up. |
| static bool Parse(const base::DictionaryValue& legal_message, |
| LegalMessageLines* out, |
| bool escape_apostrophes = false); |
| |
| const base::string16& text() const { return text_; } |
| const std::vector<Link>& links() const { return links_; } |
| |
| private: |
| friend class TestLegalMessageLine; |
| |
| bool ParseLine(const base::DictionaryValue& line, bool escape_apostrophes); |
| |
| base::string16 text_; |
| std::vector<Link> links_; |
| }; |
| |
| } // namespace autofill |
| |
| #endif // COMPONENTS_AUTOFILL_CORE_BROWSER_LEGAL_MESSAGE_LINE_H_ |