15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NET_HTTP_HTTP_CONTENT_DISPOSITION_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_HTTP_HTTP_CONTENT_DISPOSITION_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_export.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NET_EXPORT HttpContentDisposition { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Type { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INLINE, 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ATTACHMENT, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Properties of the Content-Disposition header. Used for UMA. 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum ParseResultFlags { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INVALID = 0, 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A valid disposition-type is present. 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HAS_DISPOSITION_TYPE = 1 << 0, 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The disposition-type is not 'inline' or 'attachment'. 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HAS_UNKNOWN_DISPOSITION_TYPE = 1 << 1, 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Has a valid non-empty 'name' attribute. 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HAS_NAME = 1 << 2, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Has a valid non-empty 'filename' attribute. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HAS_FILENAME = 1 << 3, 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Has a valid non-empty 'filename*' attribute. 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HAS_EXT_FILENAME = 1 << 4, 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The following fields are properties of the 'filename' attribute: 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Quoted-string contains non-ASCII characters. 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HAS_NON_ASCII_STRINGS = 1 << 5, 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Quoted-string contains percent-encoding. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HAS_PERCENT_ENCODED_STRINGS = 1 << 6, 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Quoted-string contains RFC 2047 encoded words. 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HAS_RFC2047_ENCODED_STRINGS = 1 << 7 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpContentDisposition(const std::string& header, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& referrer_charset); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~HttpContentDisposition(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_attachment() const { return type() == ATTACHMENT; } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Type type() const { return type_; } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& filename() const { return filename_; } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A combination of ParseResultFlags values. 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int parse_result_flags() const { return parse_result_flags_; } 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Parse(const std::string& header, const std::string& referrer_charset); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string::const_iterator ConsumeDispositionType( 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string::const_iterator begin, std::string::const_iterator end); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Type type_; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string filename_; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int parse_result_flags_; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(HttpContentDisposition); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // NET_HTTP_HTTP_CONTENT_DISPOSITION_H_ 80