summaryrefslogtreecommitdiff
path: root/chromium/net/http/http_content_disposition.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/http/http_content_disposition.h')
-rw-r--r--chromium/net/http/http_content_disposition.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/chromium/net/http/http_content_disposition.h b/chromium/net/http/http_content_disposition.h
new file mode 100644
index 00000000000..2b4ca709eb3
--- /dev/null
+++ b/chromium/net/http/http_content_disposition.h
@@ -0,0 +1,79 @@
+// 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/basictypes.h"
+#include "net/base/net_export.h"
+
+namespace net {
+
+class NET_EXPORT HttpContentDisposition {
+ public:
+ enum Type {
+ INLINE,
+ ATTACHMENT,
+ };
+
+ // Properties of the Content-Disposition header. Used for UMA.
+ 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 'name' attribute.
+ HAS_NAME = 1 << 2,
+
+ // Has a valid non-empty 'filename' attribute.
+ HAS_FILENAME = 1 << 3,
+
+ // Has a valid non-empty 'filename*' attribute.
+ HAS_EXT_FILENAME = 1 << 4,
+
+ // The following fields are properties of the 'filename' attribute:
+
+ // Quoted-string contains non-ASCII characters.
+ HAS_NON_ASCII_STRINGS = 1 << 5,
+
+ // Quoted-string contains percent-encoding.
+ HAS_PERCENT_ENCODED_STRINGS = 1 << 6,
+
+ // Quoted-string contains RFC 2047 encoded words.
+ HAS_RFC2047_ENCODED_STRINGS = 1 << 7
+ };
+
+ 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_