| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 
|  | 2 // Use of this source code is governed by a BSD-style license that can be | 
|  | 3 // found in the LICENSE file. | 
|  | 4 | 
|  | 5 #include "components/offline_pages/request_header/offline_page_header.h" | 
|  | 6 | 
|  | 7 #include "base/strings/string_tokenizer.h" | 
|  | 8 #include "base/strings/string_util.h" | 
|  | 9 | 
|  | 10 namespace offline_pages { | 
|  | 11 | 
|  | 12 const char kOfflinePageHeader[] = "X-Chrome-offline"; | 
|  | 13 const char kOfflinePageHeaderReasonKey[] = "reason"; | 
|  | 14 const char kOfflinePageHeaderReasonValueDueToNetError[] = "error"; | 
|  | 15 const char kOfflinePageHeaderReasonValueFromDownload[] = "download"; | 
|  | 16 const char kOfflinePageHeaderReasonValueReload[] = "reload"; | 
|  | 17 const char kOfflinePageHeaderPersistKey[] = "persist"; | 
|  | 18 const char kOfflinePageHeaderIDKey[] = "id"; | 
|  | 19 | 
|  | 20 namespace { | 
|  | 21 | 
|  | 22 std::string ReasonToString(OfflinePageHeader::Reason reason) { | 
|  | 23   switch (reason) { | 
|  | 24     case OfflinePageHeader::Reason::NET_ERROR: | 
|  | 25       return kOfflinePageHeaderReasonValueDueToNetError; | 
|  | 26     case OfflinePageHeader::Reason::DOWNLOAD: | 
|  | 27       return kOfflinePageHeaderReasonValueFromDownload; | 
|  | 28     case OfflinePageHeader::Reason::RELOAD: | 
|  | 29       return kOfflinePageHeaderReasonValueReload; | 
|  | 30     default: | 
|  | 31       NOTREACHED(); | 
|  | 32       return ""; | 
|  | 33   } | 
|  | 34 } | 
|  | 35 | 
|  | 36 }  // namespace | 
|  | 37 | 
|  | 38 OfflinePageHeader::OfflinePageHeader() | 
|  | 39     : need_to_persist(false), | 
|  | 40       reason(Reason::NONE) { | 
|  | 41 } | 
|  | 42 | 
|  | 43 OfflinePageHeader::~OfflinePageHeader() {} | 
|  | 44 | 
|  | 45 bool OfflinePageHeader::ParseFromHeaderValue(const std::string& header_value) { | 
|  | 46   // If the offline header is not present, treat it as not parsed successfully. | 
|  | 47   if (header_value.empty()) | 
|  | 48     return false; | 
|  | 49 | 
|  | 50   base::StringTokenizer tokenizer(header_value, ", "); | 
|  | 51   while (tokenizer.GetNext()) { | 
|  | 52     std::string pair = tokenizer.token(); | 
|  | 53     std::size_t pos = pair.find('='); | 
|  | 54     if (pos == std::string::npos) | 
|  | 55       return false; | 
|  | 56     std::string key = base::ToLowerASCII(pair.substr(0, pos)); | 
|  | 57     std::string value = base::ToLowerASCII(pair.substr(pos + 1)); | 
|  | 58     if (key == kOfflinePageHeaderPersistKey) { | 
|  | 59       if (value == "1") | 
|  | 60         need_to_persist = true; | 
|  | 61       else if (value == "0") | 
|  | 62         need_to_persist = false; | 
|  | 63       else | 
|  | 64         return false; | 
|  | 65     } else if (key == kOfflinePageHeaderReasonKey) { | 
|  | 66       if (value == kOfflinePageHeaderReasonValueDueToNetError) | 
|  | 67         reason = Reason::NET_ERROR; | 
|  | 68       else if (value == kOfflinePageHeaderReasonValueFromDownload) | 
|  | 69         reason = Reason::DOWNLOAD; | 
|  | 70       else if (value == kOfflinePageHeaderReasonValueReload) | 
|  | 71         reason = Reason::RELOAD; | 
|  | 72       else | 
|  | 73         return false; | 
|  | 74     } else if (key == kOfflinePageHeaderIDKey) { | 
|  | 75       id = value; | 
|  | 76     } | 
|  | 77   } | 
|  | 78 | 
|  | 79   return true; | 
|  | 80 } | 
|  | 81 | 
|  | 82 std::string OfflinePageHeader::GetCompleteHeaderString() const { | 
|  | 83   if (reason == Reason::NONE) | 
|  | 84     return std::string(); | 
|  | 85 | 
|  | 86   std::string value(kOfflinePageHeader); | 
|  | 87   value += ": "; | 
|  | 88 | 
|  | 89   value += kOfflinePageHeaderPersistKey; | 
|  | 90   value += "="; | 
|  | 91   value += need_to_persist ? "1" : "0"; | 
|  | 92 | 
|  | 93   value += " " ; | 
|  | 94   value += kOfflinePageHeaderReasonKey; | 
|  | 95   value += "="; | 
|  | 96   value += ReasonToString(reason); | 
|  | 97 | 
|  | 98   if (!id.empty()) { | 
|  | 99     value += " " ; | 
|  | 100     value += kOfflinePageHeaderIDKey; | 
|  | 101     value += "="; | 
|  | 102     value += id; | 
|  | 103   } | 
|  | 104 | 
|  | 105   return value; | 
|  | 106 } | 
|  | 107 | 
|  | 108 void OfflinePageHeader::Clear() { | 
|  | 109   reason = Reason::NONE; | 
|  | 110   need_to_persist = false; | 
|  | 111   id.clear(); | 
|  | 112 } | 
|  | 113 | 
|  | 114 }  // namespace offline_pages | 
| OLD | NEW | 
|---|