Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1161)

Side by Side Diff: components/offline_pages/request_header/offline_page_header.cc

Issue 2337363002: Load live version when reloading an offline page on connected network (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 need_to_persist = (value == "1");
60 } else if (key == kOfflinePageHeaderReasonKey) {
61 if (value == kOfflinePageHeaderReasonValueDueToNetError)
62 reason = Reason::NET_ERROR;
63 else if (value == kOfflinePageHeaderReasonValueFromDownload)
64 reason = Reason::DOWNLOAD;
65 else if (value == kOfflinePageHeaderReasonValueReload)
66 reason = Reason::RELOAD;
67 else
68 reason = Reason::UNKNOWN;
69 } else if (key == kOfflinePageHeaderIDKey) {
70 id = value;
71 }
72 }
73
74 return true;
75 }
76
77 std::string OfflinePageHeader::ToFullHeaderString() const {
78 if (reason == Reason::NONE)
79 return std::string();
80
81 std::string value(kOfflinePageHeader);
82 value += ": ";
83
84 value += kOfflinePageHeaderPersistKey;
85 value += "=";
86 value += need_to_persist ? "1" : "0";
87
88 value += " " ;
89 value += kOfflinePageHeaderReasonKey;
90 value += "=";
91 value += ReasonToString(reason);
92
93 if (!id.empty()) {
94 value += " " ;
95 value += kOfflinePageHeaderIDKey;
96 value += "=";
97 value += id;
98 }
99
100 return value;
101 }
102
103 void OfflinePageHeader::Clear() {
104 reason = Reason::NONE;
105 need_to_persist = false;
106 id.clear();
107 }
108
109 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698