| // Copyright (c) 2012 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 NET_HTTP_HTTP_CONTENT_DISPOSITION_H_ |
| #define NET_HTTP_HTTP_CONTENT_DISPOSITION_H_ |
| |
| #include <string> |
| |
| #include "base/macros.h" |
| #include "net/base/net_export.h" |
| |
| namespace net { |
| |
| class NET_EXPORT HttpContentDisposition { |
| public: |
| enum Type { |
| INLINE, |
| ATTACHMENT, |
| }; |
| |
| // Properties of the Content-Disposition header. These flags are used to |
| // report download metrics in UMA. This enum isn't directly used in UMA but |
| // mapped to another one for binary compatiblity; ie. changes are OK. |
| enum ParseResultFlags { |
| INVALID = 0, |
| |
| // A valid disposition-type is present. |
| HAS_DISPOSITION_TYPE = 1 << 0, |
| |
| // The disposition-type is not 'inline' or 'attachment'. |
| HAS_UNKNOWN_DISPOSITION_TYPE = 1 << 1, |
| |
| // Has a valid non-empty 'filename' attribute. |
| HAS_FILENAME = 1 << 2, |
| |
| // Has a valid non-empty 'filename*' attribute. |
| HAS_EXT_FILENAME = 1 << 3, |
| |
| // The following fields are properties of the 'filename' attribute: |
| |
| // Quoted-string contains non-ASCII characters. |
| HAS_NON_ASCII_STRINGS = 1 << 4, |
| |
| // Quoted-string contains percent-encoding. |
| HAS_PERCENT_ENCODED_STRINGS = 1 << 5, |
| |
| // Quoted-string contains RFC 2047 encoded words. |
| HAS_RFC2047_ENCODED_STRINGS = 1 << 6 |
| }; |
| |
| HttpContentDisposition(const std::string& header, |
| const std::string& referrer_charset); |
| ~HttpContentDisposition(); |
| |
| bool is_attachment() const { return type() == ATTACHMENT; } |
| |
| Type type() const { return type_; } |
| const std::string& filename() const { return filename_; } |
| |
| // A combination of ParseResultFlags values. |
| int parse_result_flags() const { return parse_result_flags_; } |
| |
| private: |
| void Parse(const std::string& header, const std::string& referrer_charset); |
| std::string::const_iterator ConsumeDispositionType( |
| std::string::const_iterator begin, std::string::const_iterator end); |
| |
| Type type_; |
| std::string filename_; |
| int parse_result_flags_; |
| |
| DISALLOW_COPY_AND_ASSIGN(HttpContentDisposition); |
| }; |
| |
| } // namespace net |
| |
| #endif // NET_HTTP_HTTP_CONTENT_DISPOSITION_H_ |