mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-28 08:16:09 +03:00
79 lines
2.3 KiB
C
79 lines
2.3 KiB
C
|
// 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_
|