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

Unified Diff: chrome/browser/local_discovery/privet_url_fetcher.cc

Issue 1417363004: Verify certificate of Privet v3 device (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/local_discovery/privet_url_fetcher.cc
diff --git a/chrome/browser/local_discovery/privet_url_fetcher.cc b/chrome/browser/local_discovery/privet_url_fetcher.cc
index 55e9506406c2237b5bb8a2d257cb10899a3df453..e56c4bb9fec7f4a6f287f8b331f8e3bc220a1c53 100644
--- a/chrome/browser/local_discovery/privet_url_fetcher.cc
+++ b/chrome/browser/local_discovery/privet_url_fetcher.cc
@@ -19,6 +19,7 @@
#include "content/public/browser/browser_thread.h"
#include "net/base/load_flags.h"
#include "net/http/http_status_code.h"
+#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_status.h"
namespace local_discovery {
@@ -74,12 +75,13 @@ bool PrivetURLFetcher::Delegate::OnRawData(PrivetURLFetcher* fetcher,
PrivetURLFetcher::PrivetURLFetcher(
const GURL& url,
net::URLFetcher::RequestType request_type,
- net::URLRequestContextGetter* request_context,
+ const scoped_refptr<net::URLRequestContextGetter>& context_getter,
PrivetURLFetcher::Delegate* delegate)
: url_(url),
request_type_(request_type),
- request_context_(request_context),
+ context_getter_(context_getter),
delegate_(delegate),
+ max_retries_(kPrivetMaxRetries),
do_not_retry_on_transient_error_(false),
send_empty_privet_token_(false),
has_byte_range_(false),
@@ -88,8 +90,7 @@ PrivetURLFetcher::PrivetURLFetcher(
byte_range_start_(0),
byte_range_end_(0),
tries_(0),
- weak_factory_(this) {
-}
+ weak_factory_(this) {}
PrivetURLFetcher::~PrivetURLFetcher() {
}
@@ -105,6 +106,11 @@ void PrivetURLFetcher::ResetTokenMapForTests() {
TokenMapHolder::GetInstance()->map.clear();
}
+void PrivetURLFetcher::SetMaxRetries(int max_retries) {
+ DCHECK(tries_ == 0);
Ryan Sleevi 2015/10/28 22:52:16 DCHECK_EQ
Vitaly Buka (NO REVIEWS) 2015/10/29 00:19:10 Done.
+ max_retries_ = max_retries;
+}
+
void PrivetURLFetcher::DoNotRetryOnTransientError() {
DCHECK(tries_ == 0);
do_not_retry_on_transient_error_ = true;
@@ -147,13 +153,14 @@ void PrivetURLFetcher::SetByteRange(int start, int end) {
void PrivetURLFetcher::Try() {
tries_++;
- if (tries_ < kPrivetMaxRetries) {
+ if (tries_ <= max_retries_) {
+ DVLOG(1) << "Try no. " << tries_;
Ryan Sleevi 2015/10/28 22:52:15 Why abbreviate number in a subtle way like this?
Vitaly Buka (NO REVIEWS) 2015/10/29 00:19:10 Done.
url_fetcher_ = net::URLFetcher::Create(url_, request_type_, this);
// Privet requests are relevant to hosts on local network only.
- url_fetcher_->SetLoadFlags(url_fetcher_->GetLoadFlags() |
- net::LOAD_BYPASS_PROXY |
- net::LOAD_DISABLE_CACHE);
- url_fetcher_->SetRequestContext(request_context_.get());
+ url_fetcher_->SetLoadFlags(
+ url_fetcher_->GetLoadFlags() | net::LOAD_BYPASS_PROXY |
+ net::LOAD_DISABLE_CACHE | net::LOAD_DO_NOT_SEND_COOKIES);
Ryan Sleevi 2015/10/28 22:52:15 did "git cl format" do this? It doesn't seem consi
Vitaly Buka (NO REVIEWS) 2015/10/29 00:19:10 yes, it's git cl format
+ url_fetcher_->SetRequestContext(context_getter_.get());
if (v3_mode_) {
url_fetcher_->AddExtraRequestHeader(
@@ -197,7 +204,7 @@ void PrivetURLFetcher::Try() {
url_fetcher_->Start();
} else {
- delegate_->OnError(this, RETRY_ERROR);
+ delegate_->OnError(this, UNKNOWN_ERROR);
}
}
@@ -232,8 +239,11 @@ void PrivetURLFetcher::SetUploadFilePath(
}
void PrivetURLFetcher::OnURLFetchComplete(const net::URLFetcher* source) {
- if (source->GetResponseCode() == net::HTTP_SERVICE_UNAVAILABLE ||
- source->GetResponseCode() == net::URLFetcher::RESPONSE_CODE_INVALID) {
+ DVLOG(1) << "Status: " << source->GetStatus().status()
+ << ", ResponseCode: " << source->GetResponseCode();
+ if (source->GetStatus().status() != net::URLRequestStatus::CANCELED &&
+ (source->GetResponseCode() == net::HTTP_SERVICE_UNAVAILABLE ||
+ source->GetResponseCode() == net::URLFetcher::RESPONSE_CODE_INVALID)) {
ScheduleRetry(kPrivetTimeoutOnError);
return;
}
@@ -254,6 +264,11 @@ void PrivetURLFetcher::OnURLFetchComplete(const net::URLFetcher* source) {
// that it has fully handled the responses.
bool PrivetURLFetcher::OnURLFetchCompleteDoNotParseData(
const net::URLFetcher* source) {
+ if (source->GetStatus().status() == net::URLRequestStatus::CANCELED) {
+ delegate_->OnError(this, REQUEST_CANCELED);
+ return true;
+ }
+
if (source->GetResponseCode() == kHTTPErrorCodeInvalidXPrivetToken) {
RequestTokenRefresh();
return true;
@@ -270,7 +285,7 @@ bool PrivetURLFetcher::OnURLFetchCompleteDoNotParseData(
base::FilePath response_file_path;
if (!source->GetResponseAsFilePath(true, &response_file_path)) {
- delegate_->OnError(this, URL_FETCH_ERROR);
+ delegate_->OnError(this, UNKNOWN_ERROR);
return true;
}
@@ -279,7 +294,7 @@ bool PrivetURLFetcher::OnURLFetchCompleteDoNotParseData(
std::string response_str;
if (!source->GetResponseAsString(&response_str)) {
- delegate_->OnError(this, URL_FETCH_ERROR);
+ delegate_->OnError(this, UNKNOWN_ERROR);
return true;
}
@@ -300,7 +315,7 @@ void PrivetURLFetcher::OnURLFetchCompleteParseData(
std::string response_str;
if (!source->GetResponseAsString(&response_str)) {
- delegate_->OnError(this, URL_FETCH_ERROR);
+ delegate_->OnError(this, UNKNOWN_ERROR);
return;
}
@@ -351,6 +366,10 @@ void PrivetURLFetcher::ScheduleRetry(int timeout_seconds) {
timeout_seconds_randomized =
std::max(timeout_seconds_randomized, kPrivetMinimumTimeout);
+ // Don't wait because only error callback is going to be called.
+ if (tries_ >= max_retries_)
+ timeout_seconds_randomized = 0;
+
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
FROM_HERE, base::Bind(&PrivetURLFetcher::Try, weak_factory_.GetWeakPtr()),
base::TimeDelta::FromSeconds(timeout_seconds_randomized));

Powered by Google App Engine
This is Rietveld 408576698