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

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: Rebase again 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 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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698