|  | // Copyright 2019 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef CONTENT_BROWSER_SMS_SMS_PARSER_H_ | 
|  | #define CONTENT_BROWSER_SMS_SMS_PARSER_H_ | 
|  |  | 
|  | #include "content/common/content_export.h" | 
|  | #include "content/public/browser/sms_fetcher.h" | 
|  | #include "url/origin.h" | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | // Extracts the origins from SMS messages according to the server-side | 
|  | // convention of https://github.com/samuelgoto/sms-receiver. | 
|  | // Returns an empty result if the formatting doesn't match. | 
|  | class CONTENT_EXPORT SmsParser { | 
|  | public: | 
|  | // These values are persisted to logs. Entries should not be renumbered and | 
|  | // numeric values should never be reused. | 
|  | enum class SmsParsingStatus { | 
|  | kParsed = 0, | 
|  | kOTPFormatRegexNotMatch = 1, | 
|  | kHostAndPortNotParsed = 2, | 
|  | kGURLNotValid = 3, | 
|  | kMaxValue = kGURLNotValid, | 
|  | }; | 
|  |  | 
|  | struct CONTENT_EXPORT Result { | 
|  | // Creates Result when the parsing has succeeded. | 
|  | Result(const url::Origin& top_origin, | 
|  | const url::Origin& embedded_origin, | 
|  | const std::string& one_time_code); | 
|  | // Creates Result when the parsing has failed. | 
|  | explicit Result(SmsParsingStatus); | 
|  | Result(const Result& other); | 
|  | ~Result(); | 
|  |  | 
|  | bool IsValid() const { return parsing_status == SmsParsingStatus::kParsed; } | 
|  |  | 
|  | // The origin list consists of the origin that made the OTP request followed | 
|  | // by its cross-origin ancestor's origin if such an ancestor exists. | 
|  | OriginList GetOriginList() const; | 
|  |  | 
|  | const url::Origin top_origin; | 
|  | const url::Origin embedded_origin; | 
|  | const std::string one_time_code; | 
|  | SmsParsingStatus parsing_status; | 
|  | }; | 
|  |  | 
|  | static Result Parse(base::StringPiece sms); | 
|  | }; | 
|  |  | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_BROWSER_SMS_SMS_PARSER_H_ |