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

Side by Side Diff: chrome/browser/local_discovery/privet_url_fetcher.cc

Issue 454623002: Send privet auth token in PrivetV3 mode instead of X-Privet token (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "chrome/browser/local_discovery/privet_url_fetcher.h" 5 #include "chrome/browser/local_discovery/privet_url_fetcher.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 16 matching lines...) Expand all
27 struct TokenMapHolder { 27 struct TokenMapHolder {
28 public: 28 public:
29 static TokenMapHolder* GetInstance() { 29 static TokenMapHolder* GetInstance() {
30 return Singleton<TokenMapHolder>::get(); 30 return Singleton<TokenMapHolder>::get();
31 } 31 }
32 32
33 TokenMap map; 33 TokenMap map;
34 }; 34 };
35 35
36 const char kXPrivetTokenHeaderPrefix[] = "X-Privet-Token: "; 36 const char kXPrivetTokenHeaderPrefix[] = "X-Privet-Token: ";
37 const char kXPrivetAuthTokenHeaderPrefix[] = "X-Privet-Auth: ";
37 const char kRangeHeaderFormat[] = "Range: bytes=%d-%d"; 38 const char kRangeHeaderFormat[] = "Range: bytes=%d-%d";
38 const char kXPrivetEmptyToken[] = "\"\""; 39 const char kXPrivetEmptyToken[] = "\"\"";
40 const char kPrivetAuthTokenUnknown[] = "Unknown";
39 const int kPrivetMaxRetries = 20; 41 const int kPrivetMaxRetries = 20;
40 const int kPrivetTimeoutOnError = 5; 42 const int kPrivetTimeoutOnError = 5;
41 const int kHTTPErrorCodeInvalidXPrivetToken = 418; 43 const int kHTTPErrorCodeInvalidXPrivetToken = 418;
42 44
43 std::string MakeRangeHeader(int start, int end) { 45 std::string MakeRangeHeader(int start, int end) {
44 DCHECK_GE(start, 0); 46 DCHECK_GE(start, 0);
45 DCHECK_GT(end, 0); 47 DCHECK_GT(end, 0);
46 DCHECK_GT(end, start); 48 DCHECK_GT(end, start);
47 return base::StringPrintf(kRangeHeaderFormat, start, end); 49 return base::StringPrintf(kRangeHeaderFormat, start, end);
48 } 50 }
49 51
50 } // namespace 52 } // namespace
51 53
52 void PrivetURLFetcher::Delegate::OnNeedPrivetToken( 54 void PrivetURLFetcher::Delegate::OnNeedPrivetToken(
53 PrivetURLFetcher* fetcher, 55 PrivetURLFetcher* fetcher,
54 const TokenCallback& callback) { 56 const TokenCallback& callback) {
55 OnError(fetcher, TOKEN_ERROR); 57 OnError(fetcher, TOKEN_ERROR);
56 } 58 }
57 59
60 std::string PrivetURLFetcher::Delegate::GetAuthToken() {
61 return kPrivetAuthTokenUnknown;
62 }
63
58 bool PrivetURLFetcher::Delegate::OnRawData(PrivetURLFetcher* fetcher, 64 bool PrivetURLFetcher::Delegate::OnRawData(PrivetURLFetcher* fetcher,
59 bool response_is_file, 65 bool response_is_file,
60 const std::string& data_string, 66 const std::string& data_string,
61 const base::FilePath& data_file) { 67 const base::FilePath& data_file) {
62 return false; 68 return false;
63 } 69 }
64 70
65 PrivetURLFetcher::PrivetURLFetcher( 71 PrivetURLFetcher::PrivetURLFetcher(
66 const GURL& url, 72 const GURL& url,
67 net::URLFetcher::RequestType request_type, 73 net::URLFetcher::RequestType request_type,
68 net::URLRequestContextGetter* request_context, 74 net::URLRequestContextGetter* request_context,
69 PrivetURLFetcher::Delegate* delegate) 75 PrivetURLFetcher::Delegate* delegate)
70 : url_(url), 76 : url_(url),
71 request_type_(request_type), 77 request_type_(request_type),
72 request_context_(request_context), 78 request_context_(request_context),
73 delegate_(delegate), 79 delegate_(delegate),
74 do_not_retry_on_transient_error_(false), 80 do_not_retry_on_transient_error_(false),
75 send_empty_privet_token_(false), 81 send_empty_privet_token_(false),
76 has_byte_range_(false), 82 has_byte_range_(false),
77 make_response_file_(false), 83 make_response_file_(false),
84 v3_mode_(false),
78 byte_range_start_(0), 85 byte_range_start_(0),
79 byte_range_end_(0), 86 byte_range_end_(0),
80 tries_(0), 87 tries_(0),
81 weak_factory_(this) {} 88 weak_factory_(this) {
89 }
82 90
83 PrivetURLFetcher::~PrivetURLFetcher() { 91 PrivetURLFetcher::~PrivetURLFetcher() {
84 } 92 }
85 93
86 // static 94 // static
87 void PrivetURLFetcher::SetTokenForHost(const std::string& host, 95 void PrivetURLFetcher::SetTokenForHost(const std::string& host,
88 const std::string& token) { 96 const std::string& token) {
89 TokenMapHolder::GetInstance()->map[host] = token; 97 TokenMapHolder::GetInstance()->map[host] = token;
90 } 98 }
91 99
(...skipping 24 matching lines...) Expand all
116 124
117 std::string PrivetURLFetcher::GetHostString() { 125 std::string PrivetURLFetcher::GetHostString() {
118 return url_.GetOrigin().spec(); 126 return url_.GetOrigin().spec();
119 } 127 }
120 128
121 void PrivetURLFetcher::SaveResponseToFile() { 129 void PrivetURLFetcher::SaveResponseToFile() {
122 DCHECK(tries_ == 0); 130 DCHECK(tries_ == 0);
123 make_response_file_ = true; 131 make_response_file_ = true;
124 } 132 }
125 133
134 void PrivetURLFetcher::V3Mode() {
135 v3_mode_ = true;
136 }
137
126 void PrivetURLFetcher::SetByteRange(int start, int end) { 138 void PrivetURLFetcher::SetByteRange(int start, int end) {
127 DCHECK(tries_ == 0); 139 DCHECK(tries_ == 0);
128 byte_range_start_ = start; 140 byte_range_start_ = start;
129 byte_range_end_ = end; 141 byte_range_end_ = end;
130 has_byte_range_ = true; 142 has_byte_range_ = true;
131 } 143 }
132 144
133 void PrivetURLFetcher::Try() { 145 void PrivetURLFetcher::Try() {
134 tries_++; 146 tries_++;
135 if (tries_ < kPrivetMaxRetries) { 147 if (tries_ < kPrivetMaxRetries) {
136 std::string token = GetPrivetAccessToken();
137 148
138 if (token.empty())
139 token = kXPrivetEmptyToken;
140 149
141 url_fetcher_.reset(net::URLFetcher::Create(url_, request_type_, this)); 150 url_fetcher_.reset(net::URLFetcher::Create(url_, request_type_, this));
142 url_fetcher_->SetRequestContext(request_context_); 151 url_fetcher_->SetRequestContext(request_context_);
143 url_fetcher_->AddExtraRequestHeader(std::string(kXPrivetTokenHeaderPrefix) + 152
144 token); 153 if (v3_mode_) {
154 std::string auth_token = delegate_->GetAuthToken();
155
156 url_fetcher_->AddExtraRequestHeader(
157 std::string(kXPrivetAuthTokenHeaderPrefix) + auth_token);
158 } else {
159 std::string token = GetPrivetAccessToken();
160
161 if (token.empty())
162 token = kXPrivetEmptyToken;
163
164 url_fetcher_->AddExtraRequestHeader(
165 std::string(kXPrivetTokenHeaderPrefix) + token);
166 }
167
145 if (has_byte_range_) { 168 if (has_byte_range_) {
146 url_fetcher_->AddExtraRequestHeader( 169 url_fetcher_->AddExtraRequestHeader(
147 MakeRangeHeader(byte_range_start_, byte_range_end_)); 170 MakeRangeHeader(byte_range_start_, byte_range_end_));
148 } 171 }
149 172
150 if (make_response_file_) { 173 if (make_response_file_) {
151 url_fetcher_->SaveResponseToTemporaryFile( 174 url_fetcher_->SaveResponseToTemporaryFile(
152 content::BrowserThread::GetMessageLoopProxyForThread( 175 content::BrowserThread::GetMessageLoopProxyForThread(
153 content::BrowserThread::FILE)); 176 content::BrowserThread::FILE));
154 } 177 }
(...skipping 15 matching lines...) Expand all
170 193
171 url_fetcher_->Start(); 194 url_fetcher_->Start();
172 } else { 195 } else {
173 delegate_->OnError(this, RETRY_ERROR); 196 delegate_->OnError(this, RETRY_ERROR);
174 } 197 }
175 } 198 }
176 199
177 void PrivetURLFetcher::Start() { 200 void PrivetURLFetcher::Start() {
178 DCHECK_EQ(tries_, 0); // We haven't called |Start()| yet. 201 DCHECK_EQ(tries_, 0); // We haven't called |Start()| yet.
179 202
180 if (!send_empty_privet_token_) { 203 if (!send_empty_privet_token_ && !v3_mode_) {
181 std::string privet_access_token; 204 std::string privet_access_token;
182 privet_access_token = GetPrivetAccessToken(); 205 privet_access_token = GetPrivetAccessToken();
183 if (privet_access_token.empty()) { 206 if (privet_access_token.empty()) {
184 RequestTokenRefresh(); 207 RequestTokenRefresh();
185 return; 208 return;
186 } 209 }
187 } 210 }
188 211
189 Try(); 212 Try();
190 } 213 }
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 } 367 }
345 368
346 bool PrivetURLFetcher::PrivetErrorTransient(const std::string& error) { 369 bool PrivetURLFetcher::PrivetErrorTransient(const std::string& error) {
347 return (error == kPrivetErrorDeviceBusy) || 370 return (error == kPrivetErrorDeviceBusy) ||
348 (error == kPrivetV3ErrorDeviceBusy) || 371 (error == kPrivetV3ErrorDeviceBusy) ||
349 (error == kPrivetErrorPendingUserAction) || 372 (error == kPrivetErrorPendingUserAction) ||
350 (error == kPrivetErrorPrinterBusy); 373 (error == kPrivetErrorPrinterBusy);
351 } 374 }
352 375
353 } // namespace local_discovery 376 } // namespace local_discovery
OLDNEW
« no previous file with comments | « chrome/browser/local_discovery/privet_url_fetcher.h ('k') | chrome/browser/local_discovery/privet_url_fetcher_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698