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

Side by Side Diff: chrome/browser/android/webapk/webapk_icon_hasher.cc

Issue 2771793003: Move timeout timer into WebApkIconHasher (Closed)
Patch Set: Move timeout timer into WebApkIconHasher Created 3 years, 9 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 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/android/webapk/webapk_icon_hasher.h" 5 #include "chrome/browser/android/webapk/webapk_icon_hasher.h"
6 6
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "net/base/data_url.h" 10 #include "net/base/data_url.h"
(...skipping 14 matching lines...) Expand all
25 // image's raw, unsanitized bytes from the web. |raw_image_data| may contain 25 // image's raw, unsanitized bytes from the web. |raw_image_data| may contain
26 // malicious data. Decoding unsanitized bitmap data to an SkBitmap in the 26 // malicious data. Decoding unsanitized bitmap data to an SkBitmap in the
27 // browser process is a security bug. 27 // browser process is a security bug.
28 uint64_t hash = MurmurHash64A(&raw_image_data.front(), raw_image_data.size(), 28 uint64_t hash = MurmurHash64A(&raw_image_data.front(), raw_image_data.size(),
29 kMurmur2HashSeed); 29 kMurmur2HashSeed);
30 return base::Uint64ToString(hash); 30 return base::Uint64ToString(hash);
31 } 31 }
32 32
33 } // anonymous namespace 33 } // anonymous namespace
34 34
35 WebApkIconHasher::WebApkIconHasher() {} 35 WebApkIconHasher::WebApkIconHasher(
36 net::URLRequestContextGetter* url_request_context_getter,
37 const GURL& icon_url,
38 const Murmur2HashCallback& callback)
39 : url_request_context_getter_(url_request_context_getter),
40 icon_url_(icon_url),
41 callback_(callback),
42 is_download_complete_(false),
43 weak_ptr_factory_(this) {}
36 44
37 WebApkIconHasher::~WebApkIconHasher() {} 45 WebApkIconHasher::~WebApkIconHasher() {}
38 46
39 void WebApkIconHasher::DownloadAndComputeMurmur2Hash( 47 void WebApkIconHasher::DownloadAndComputeMurmur2Hash() {
40 net::URLRequestContextGetter* request_context_getter, 48 if (!icon_url_.is_valid()) {
41 const GURL& icon_url, 49 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
42 const Murmur2HashCallback& callback) { 50 base::Bind(callback_, ""));
43 if (icon_url.SchemeIs(url::kDataScheme)) { 51 return;
52 }
53
54 if (icon_url_.SchemeIs(url::kDataScheme)) {
44 std::string mime_type, char_set, data; 55 std::string mime_type, char_set, data;
45 std::string hash; 56 std::string hash;
46 if (net::DataURL::Parse(icon_url, &mime_type, &char_set, &data) && 57 if (net::DataURL::Parse(icon_url_, &mime_type, &char_set, &data) &&
47 !data.empty()) { 58 !data.empty()) {
48 hash = ComputeMurmur2Hash(data); 59 hash = ComputeMurmur2Hash(data);
49 } 60 }
50 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 61 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
51 base::Bind(callback, hash)); 62 base::Bind(callback_, hash));
52 return; 63 return;
53 } 64 }
54 65
55 callback_ = callback; 66 download_timeout_timer_.Start(
56 url_fetcher_ = net::URLFetcher::Create(icon_url, net::URLFetcher::GET, this); 67 FROM_HERE, base::TimeDelta::FromMilliseconds(60000),
dominickn 2017/03/24 02:41:00 Can you put this constant in the anonymous namespa
F 2017/03/27 20:37:08 Done.
57 url_fetcher_->SetRequestContext(request_context_getter); 68 base::Bind(&WebApkIconHasher::OnDownloadTimedOut,
69 weak_ptr_factory_.GetWeakPtr()));
70
71 url_fetcher_ = net::URLFetcher::Create(icon_url_, net::URLFetcher::GET, this);
72 url_fetcher_->SetRequestContext(url_request_context_getter_);
58 url_fetcher_->Start(); 73 url_fetcher_->Start();
59 } 74 }
60 75
61 void WebApkIconHasher::OnURLFetchComplete(const net::URLFetcher* source) { 76 void WebApkIconHasher::OnURLFetchComplete(const net::URLFetcher* source) {
77 if (is_download_complete_)
78 return;
79
80 is_download_complete_ = true;
81
82 download_timeout_timer_.Stop();
dominickn 2017/03/24 02:41:00 Stop the timer first. Remove the extra newline bet
F 2017/03/27 20:37:08 Done.
83
62 if (!source->GetStatus().is_success() || 84 if (!source->GetStatus().is_success() ||
63 source->GetResponseCode() != net::HTTP_OK) { 85 source->GetResponseCode() != net::HTTP_OK) {
64 callback_.Run(""); 86 callback_.Run("");
65 return; 87 return;
66 } 88 }
67 89
68 // WARNING: We are running in the browser process. |raw_image_data| is the 90 // WARNING: We are running in the browser process. |raw_image_data| is the
69 // image's raw, unsanitized bytes from the web. |raw_image_data| may contain 91 // image's raw, unsanitized bytes from the web. |raw_image_data| may contain
70 // malicious data. Decoding unsanitized bitmap data to an SkBitmap in the 92 // malicious data. Decoding unsanitized bitmap data to an SkBitmap in the
71 // browser process is a security bug. 93 // browser process is a security bug.
72 std::string raw_image_data; 94 std::string raw_image_data;
73 source->GetResponseAsString(&raw_image_data); 95 source->GetResponseAsString(&raw_image_data);
74 callback_.Run(ComputeMurmur2Hash(raw_image_data)); 96 callback_.Run(ComputeMurmur2Hash(raw_image_data));
75 } 97 }
98
99 void WebApkIconHasher::OnDownloadTimedOut() {
100 if (is_download_complete_)
101 return;
102
103 is_download_complete_ = true;
104
dominickn 2017/03/24 02:41:00 Remove the extra newline
F 2017/03/27 20:37:08 Done.
105 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
106 base::Bind(callback_, ""));
107 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698