OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 2 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
3 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 3 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
4 * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ | 4 * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ |
5 * Copyright (C) 2009 Google Inc. All rights reserved. | 5 * Copyright (C) 2009 Google Inc. All rights reserved. |
6 * Copyright (C) 2011 Apple Inc. All Rights Reserved. | 6 * Copyright (C) 2011 Apple Inc. All Rights Reserved. |
7 * | 7 * |
8 * Redistribution and use in source and binary forms, with or without | 8 * Redistribution and use in source and binary forms, with or without |
9 * modification, are permitted provided that the following conditions | 9 * modification, are permitted provided that the following conditions |
10 * are met: | 10 * are met: |
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
842 | 842 |
843 bool ParseContentRangeHeaderFor206(const String& content_range, | 843 bool ParseContentRangeHeaderFor206(const String& content_range, |
844 int64_t* first_byte_position, | 844 int64_t* first_byte_position, |
845 int64_t* last_byte_position, | 845 int64_t* last_byte_position, |
846 int64_t* instance_length) { | 846 int64_t* instance_length) { |
847 return net::HttpUtil::ParseContentRangeHeaderFor206( | 847 return net::HttpUtil::ParseContentRangeHeaderFor206( |
848 StringUTF8Adaptor(content_range).AsStringPiece(), first_byte_position, | 848 StringUTF8Adaptor(content_range).AsStringPiece(), first_byte_position, |
849 last_byte_position, instance_length); | 849 last_byte_position, instance_length); |
850 } | 850 } |
851 | 851 |
852 template <typename CharType> | |
853 inline bool IsNotServerTimingHeaderDelimiter(CharType c) { | |
854 return c != '=' && c != ';' && c != ','; | |
855 } | |
856 | |
857 const LChar* ParseServerTimingToken(const LChar* begin, | |
858 const LChar* end, | |
859 String& result) { | |
860 const LChar* position = begin; | |
861 skipWhile<LChar, IsNotServerTimingHeaderDelimiter>(position, end); | |
862 result = String(begin, position - begin).StripWhiteSpace(); | |
863 return position; | |
864 } | |
865 | |
866 String CheckDoubleQuotedString(const String& value) { | |
867 if (value.length() < 2 || value[0] != '"' || | |
868 value[value.length() - 1] != '"') { | |
869 return value; | |
870 } | |
871 | |
872 StringBuilder out; | |
873 unsigned pos = 1; // Begin after the opening DQUOTE. | |
874 unsigned len = value.length() - 1; // End before the closing DQUOTE. | |
875 | |
876 // Skip past backslashes, but include everything else. | |
877 while (pos < len) { | |
878 if (value[pos] == '\\') | |
879 pos++; | |
880 if (pos < len) | |
881 out.Append(value[pos++]); | |
882 } | |
883 | |
884 return out.ToString(); | |
885 } | |
886 | |
887 std::unique_ptr<ServerTimingHeaderVector> ParseServerTimingHeader( | |
888 const String& headerValue) { | |
889 std::unique_ptr<ServerTimingHeaderVector> headers = | |
890 WTF::MakeUnique<ServerTimingHeaderVector>(); | |
891 | |
892 if (!headerValue.IsNull()) { | |
893 DCHECK(headerValue.Is8Bit()); | |
894 | |
895 const LChar* position = headerValue.Characters8(); | |
896 const LChar* end = position + headerValue.length(); | |
897 while (position < end) { | |
898 String metric, value, description = ""; | |
899 position = ParseServerTimingToken(position, end, metric); | |
900 if (*position == '=') { | |
Yoav Weiss
2017/05/03 08:20:04
Seems like your ASAN issues are originating here.
| |
901 position = ParseServerTimingToken(position + 1, end, value); | |
902 } | |
903 if (*position == ';') { | |
904 position = ParseServerTimingToken(position + 1, end, description); | |
905 } | |
906 position++; | |
907 | |
908 headers->push_back(WTF::MakeUnique<ServerTimingHeader>( | |
909 metric, value.ToDouble(), CheckDoubleQuotedString(description))); | |
910 } | |
911 } | |
912 return headers; | |
913 } | |
914 | |
852 } // namespace blink | 915 } // namespace blink |
OLD | NEW |