OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Implementation of the MalwareDetails class. | 5 // Implementation of the MalwareDetails class. |
6 | 6 |
7 #include "chrome/browser/safe_browsing/malware_details.h" | 7 #include "chrome/browser/safe_browsing/malware_details.h" |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 has_started_ = true; | 49 has_started_ = true; |
50 | 50 |
51 // Post a task in the message loop, so the callers don't need to | 51 // Post a task in the message loop, so the callers don't need to |
52 // check if we call their callback immediately. | 52 // check if we call their callback immediately. |
53 BrowserThread::PostTask( | 53 BrowserThread::PostTask( |
54 BrowserThread::IO, FROM_HERE, | 54 BrowserThread::IO, FROM_HERE, |
55 base::Bind(&MalwareDetailsCacheCollector::OpenEntry, this)); | 55 base::Bind(&MalwareDetailsCacheCollector::OpenEntry, this)); |
56 } | 56 } |
57 | 57 |
58 bool MalwareDetailsCacheCollector::HasStarted() { | 58 bool MalwareDetailsCacheCollector::HasStarted() { |
59 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 59 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
60 return has_started_; | 60 return has_started_; |
61 } | 61 } |
62 | 62 |
63 MalwareDetailsCacheCollector::~MalwareDetailsCacheCollector() {} | 63 MalwareDetailsCacheCollector::~MalwareDetailsCacheCollector() {} |
64 | 64 |
65 // Fetch a URL and advance to the next one when done. | 65 // Fetch a URL and advance to the next one when done. |
66 void MalwareDetailsCacheCollector::OpenEntry() { | 66 void MalwareDetailsCacheCollector::OpenEntry() { |
67 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 67 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
68 DVLOG(1) << "OpenEntry"; | 68 DVLOG(1) << "OpenEntry"; |
69 | 69 |
70 if (resources_it_ == resources_->end()) { | 70 if (resources_it_ == resources_->end()) { |
71 AllDone(true); | 71 AllDone(true); |
72 return; | 72 return; |
73 } | 73 } |
74 | 74 |
75 if (!request_context_getter_.get()) { | 75 if (!request_context_getter_.get()) { |
76 DVLOG(1) << "Missing request context getter"; | 76 DVLOG(1) << "Missing request context getter"; |
77 AllDone(false); | 77 AllDone(false); |
(...skipping 15 matching lines...) Expand all Loading... |
93 safe_browsing::ResourceMap::iterator it = resources_->find(url.spec()); | 93 safe_browsing::ResourceMap::iterator it = resources_->find(url.spec()); |
94 if (it != resources_->end()) { | 94 if (it != resources_->end()) { |
95 return it->second.get(); | 95 return it->second.get(); |
96 } | 96 } |
97 return NULL; | 97 return NULL; |
98 } | 98 } |
99 | 99 |
100 void MalwareDetailsCacheCollector::OnURLFetchComplete( | 100 void MalwareDetailsCacheCollector::OnURLFetchComplete( |
101 const net::URLFetcher* source) { | 101 const net::URLFetcher* source) { |
102 DVLOG(1) << "OnUrlFetchComplete"; | 102 DVLOG(1) << "OnUrlFetchComplete"; |
103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 103 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
104 DCHECK(current_fetch_.get()); | 104 DCHECK(current_fetch_.get()); |
105 if (source->GetStatus().status() != net::URLRequestStatus::SUCCESS && | 105 if (source->GetStatus().status() != net::URLRequestStatus::SUCCESS && |
106 source->GetStatus().error() == net::ERR_CACHE_MISS) { | 106 source->GetStatus().error() == net::ERR_CACHE_MISS) { |
107 // Cache miss, skip this resource. | 107 // Cache miss, skip this resource. |
108 DVLOG(1) << "Cache miss for url: " << source->GetURL(); | 108 DVLOG(1) << "Cache miss for url: " << source->GetURL(); |
109 AdvanceEntry(); | 109 AdvanceEntry(); |
110 return; | 110 return; |
111 } | 111 } |
112 | 112 |
113 if (source->GetStatus().status() != net::URLRequestStatus::SUCCESS) { | 113 if (source->GetStatus().status() != net::URLRequestStatus::SUCCESS) { |
(...skipping 18 matching lines...) Expand all Loading... |
132 std::string data; | 132 std::string data; |
133 source->GetResponseAsString(&data); | 133 source->GetResponseAsString(&data); |
134 ReadData(resource, data); | 134 ReadData(resource, data); |
135 AdvanceEntry(); | 135 AdvanceEntry(); |
136 } | 136 } |
137 | 137 |
138 void MalwareDetailsCacheCollector::ReadResponse( | 138 void MalwareDetailsCacheCollector::ReadResponse( |
139 ClientMalwareReportRequest::Resource* pb_resource, | 139 ClientMalwareReportRequest::Resource* pb_resource, |
140 const net::URLFetcher* source) { | 140 const net::URLFetcher* source) { |
141 DVLOG(1) << "ReadResponse"; | 141 DVLOG(1) << "ReadResponse"; |
142 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 142 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
143 net::HttpResponseHeaders* headers = source->GetResponseHeaders(); | 143 net::HttpResponseHeaders* headers = source->GetResponseHeaders(); |
144 if (!headers) { | 144 if (!headers) { |
145 DVLOG(1) << "Missing response headers."; | 145 DVLOG(1) << "Missing response headers."; |
146 return; | 146 return; |
147 } | 147 } |
148 | 148 |
149 ClientMalwareReportRequest::HTTPResponse* pb_response = | 149 ClientMalwareReportRequest::HTTPResponse* pb_response = |
150 pb_resource->mutable_response(); | 150 pb_resource->mutable_response(); |
151 pb_response->mutable_firstline()->set_code(headers->response_code()); | 151 pb_response->mutable_firstline()->set_code(headers->response_code()); |
152 void* iter = NULL; | 152 void* iter = NULL; |
(...skipping 12 matching lines...) Expand all Loading... |
165 | 165 |
166 if (!source->WasFetchedViaProxy()) { | 166 if (!source->WasFetchedViaProxy()) { |
167 pb_response->set_remote_ip(source->GetSocketAddress().ToString()); | 167 pb_response->set_remote_ip(source->GetSocketAddress().ToString()); |
168 } | 168 } |
169 } | 169 } |
170 | 170 |
171 void MalwareDetailsCacheCollector::ReadData( | 171 void MalwareDetailsCacheCollector::ReadData( |
172 ClientMalwareReportRequest::Resource* pb_resource, | 172 ClientMalwareReportRequest::Resource* pb_resource, |
173 const std::string& data) { | 173 const std::string& data) { |
174 DVLOG(1) << "ReadData"; | 174 DVLOG(1) << "ReadData"; |
175 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 175 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
176 ClientMalwareReportRequest::HTTPResponse* pb_response = | 176 ClientMalwareReportRequest::HTTPResponse* pb_response = |
177 pb_resource->mutable_response(); | 177 pb_resource->mutable_response(); |
178 if (data.size() <= kMaxBodySizeBytes) { // Only send small bodies for now. | 178 if (data.size() <= kMaxBodySizeBytes) { // Only send small bodies for now. |
179 pb_response->set_body(data); | 179 pb_response->set_body(data); |
180 } | 180 } |
181 pb_response->set_bodylength(data.size()); | 181 pb_response->set_bodylength(data.size()); |
182 pb_response->set_bodydigest(base::MD5String(data)); | 182 pb_response->set_bodydigest(base::MD5String(data)); |
183 } | 183 } |
184 | 184 |
185 void MalwareDetailsCacheCollector::AdvanceEntry() { | 185 void MalwareDetailsCacheCollector::AdvanceEntry() { |
186 DVLOG(1) << "AdvanceEntry"; | 186 DVLOG(1) << "AdvanceEntry"; |
187 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 187 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
188 // Advance to the next resource. | 188 // Advance to the next resource. |
189 ++resources_it_; | 189 ++resources_it_; |
190 current_fetch_.reset(NULL); | 190 current_fetch_.reset(NULL); |
191 | 191 |
192 // Create a task so we don't take over the IO thread for too long. | 192 // Create a task so we don't take over the IO thread for too long. |
193 BrowserThread::PostTask( | 193 BrowserThread::PostTask( |
194 BrowserThread::IO, FROM_HERE, | 194 BrowserThread::IO, FROM_HERE, |
195 base::Bind(&MalwareDetailsCacheCollector::OpenEntry, this)); | 195 base::Bind(&MalwareDetailsCacheCollector::OpenEntry, this)); |
196 } | 196 } |
197 | 197 |
198 void MalwareDetailsCacheCollector::AllDone(bool success) { | 198 void MalwareDetailsCacheCollector::AllDone(bool success) { |
199 DVLOG(1) << "AllDone"; | 199 DVLOG(1) << "AllDone"; |
200 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 200 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
201 *result_ = success; | 201 *result_ = success; |
202 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, callback_); | 202 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, callback_); |
203 callback_.Reset(); | 203 callback_.Reset(); |
204 } | 204 } |
OLD | NEW |