OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/http/http_content_disposition.h" | 5 #include "net/http/http_content_disposition.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/strings/string_tokenizer.h" | 9 #include "base/strings/string_tokenizer.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 // If the disposition-type isn't a valid token the then the | 354 // If the disposition-type isn't a valid token the then the |
355 // Content-Disposition header is malformed, and we treat the first bytes as | 355 // Content-Disposition header is malformed, and we treat the first bytes as |
356 // a parameter rather than a disposition-type. | 356 // a parameter rather than a disposition-type. |
357 if (!HttpUtil::IsToken(type_begin, type_end)) | 357 if (!HttpUtil::IsToken(type_begin, type_end)) |
358 return begin; | 358 return begin; |
359 | 359 |
360 parse_result_flags_ |= HAS_DISPOSITION_TYPE; | 360 parse_result_flags_ |= HAS_DISPOSITION_TYPE; |
361 | 361 |
362 DCHECK(std::find(type_begin, type_end, '=') == type_end); | 362 DCHECK(std::find(type_begin, type_end, '=') == type_end); |
363 | 363 |
364 if (base::LowerCaseEqualsASCII(type_begin, type_end, "inline")) { | 364 if (LowerCaseEqualsASCII(type_begin, type_end, "inline")) { |
365 type_ = INLINE; | 365 type_ = INLINE; |
366 } else if (base::LowerCaseEqualsASCII(type_begin, type_end, "attachment")) { | 366 } else if (LowerCaseEqualsASCII(type_begin, type_end, "attachment")) { |
367 type_ = ATTACHMENT; | 367 type_ = ATTACHMENT; |
368 } else { | 368 } else { |
369 parse_result_flags_ |= HAS_UNKNOWN_DISPOSITION_TYPE; | 369 parse_result_flags_ |= HAS_UNKNOWN_DISPOSITION_TYPE; |
370 type_ = ATTACHMENT; | 370 type_ = ATTACHMENT; |
371 } | 371 } |
372 return delimiter; | 372 return delimiter; |
373 } | 373 } |
374 | 374 |
375 // http://tools.ietf.org/html/rfc6266 | 375 // http://tools.ietf.org/html/rfc6266 |
376 // | 376 // |
(...skipping 21 matching lines...) Expand all Loading... |
398 std::string::const_iterator pos = header.begin(); | 398 std::string::const_iterator pos = header.begin(); |
399 std::string::const_iterator end = header.end(); | 399 std::string::const_iterator end = header.end(); |
400 pos = ConsumeDispositionType(pos, end); | 400 pos = ConsumeDispositionType(pos, end); |
401 | 401 |
402 std::string name; | 402 std::string name; |
403 std::string filename; | 403 std::string filename; |
404 std::string ext_filename; | 404 std::string ext_filename; |
405 | 405 |
406 HttpUtil::NameValuePairsIterator iter(pos, end, ';'); | 406 HttpUtil::NameValuePairsIterator iter(pos, end, ';'); |
407 while (iter.GetNext()) { | 407 while (iter.GetNext()) { |
408 if (filename.empty() && base::LowerCaseEqualsASCII(iter.name_begin(), | 408 if (filename.empty() && LowerCaseEqualsASCII(iter.name_begin(), |
409 iter.name_end(), | 409 iter.name_end(), |
410 "filename")) { | 410 "filename")) { |
411 DecodeFilenameValue(iter.value(), referrer_charset, &filename, | 411 DecodeFilenameValue(iter.value(), referrer_charset, &filename, |
412 &parse_result_flags_); | 412 &parse_result_flags_); |
413 if (!filename.empty()) | 413 if (!filename.empty()) |
414 parse_result_flags_ |= HAS_FILENAME; | 414 parse_result_flags_ |= HAS_FILENAME; |
415 } else if (name.empty() && base::LowerCaseEqualsASCII(iter.name_begin(), | 415 } else if (name.empty() && LowerCaseEqualsASCII(iter.name_begin(), |
416 iter.name_end(), | 416 iter.name_end(), |
417 "name")) { | 417 "name")) { |
418 DecodeFilenameValue(iter.value(), referrer_charset, &name, NULL); | 418 DecodeFilenameValue(iter.value(), referrer_charset, &name, NULL); |
419 if (!name.empty()) | 419 if (!name.empty()) |
420 parse_result_flags_ |= HAS_NAME; | 420 parse_result_flags_ |= HAS_NAME; |
421 } else if (ext_filename.empty() && | 421 } else if (ext_filename.empty() && LowerCaseEqualsASCII(iter.name_begin(), |
422 base::LowerCaseEqualsASCII(iter.name_begin(), iter.name_end(), | 422 iter.name_end(), |
423 "filename*")) { | 423 "filename*")) { |
424 DecodeExtValue(iter.raw_value(), &ext_filename); | 424 DecodeExtValue(iter.raw_value(), &ext_filename); |
425 if (!ext_filename.empty()) | 425 if (!ext_filename.empty()) |
426 parse_result_flags_ |= HAS_EXT_FILENAME; | 426 parse_result_flags_ |= HAS_EXT_FILENAME; |
427 } | 427 } |
428 } | 428 } |
429 | 429 |
430 if (!ext_filename.empty()) | 430 if (!ext_filename.empty()) |
431 filename_ = ext_filename; | 431 filename_ = ext_filename; |
432 else if (!filename.empty()) | 432 else if (!filename.empty()) |
433 filename_ = filename; | 433 filename_ = filename; |
434 else | 434 else |
435 filename_ = name; | 435 filename_ = name; |
436 } | 436 } |
437 | 437 |
438 } // namespace net | 438 } // namespace net |
OLD | NEW |