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

Side by Side Diff: components/search_provider_logos/logo_tracker.cc

Issue 2762853003: [Doodle] Add UMA for doodle image downloads (Closed)
Patch Set: 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/search_provider_logos/logo_tracker.h" 5 #include "components/search_provider_logos/logo_tracker.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 traffic_annotation); 254 traffic_annotation);
255 fetcher_->SetRequestContext(request_context_getter_.get()); 255 fetcher_->SetRequestContext(request_context_getter_.get());
256 data_use_measurement::DataUseUserData::AttachToFetcher( 256 data_use_measurement::DataUseUserData::AttachToFetcher(
257 fetcher_.get(), 257 fetcher_.get(),
258 data_use_measurement::DataUseUserData::SEARCH_PROVIDER_LOGOS); 258 data_use_measurement::DataUseUserData::SEARCH_PROVIDER_LOGOS);
259 fetcher_->Start(); 259 fetcher_->Start();
260 logo_download_start_time_ = base::TimeTicks::Now(); 260 logo_download_start_time_ = base::TimeTicks::Now();
261 } 261 }
262 262
263 void LogoTracker::OnFreshLogoParsed(bool* parsing_failed, 263 void LogoTracker::OnFreshLogoParsed(bool* parsing_failed,
264 bool from_http_cache,
264 std::unique_ptr<EncodedLogo> logo) { 265 std::unique_ptr<EncodedLogo> logo) {
265 DCHECK(!is_idle_); 266 DCHECK(!is_idle_);
266 267
267 if (logo) 268 if (logo)
268 logo->metadata.source_url = logo_url_.spec(); 269 logo->metadata.source_url = logo_url_.spec();
269 270
270 if (!logo || !logo->encoded_image.get()) { 271 if (!logo || !logo->encoded_image.get()) {
271 OnFreshLogoAvailable(std::move(logo), *parsing_failed, SkBitmap()); 272 OnFreshLogoAvailable(std::move(logo), *parsing_failed, from_http_cache,
273 SkBitmap());
272 } else { 274 } else {
273 // Store the value of logo->encoded_image for use below. This ensures that 275 // Store the value of logo->encoded_image for use below. This ensures that
274 // logo->encoded_image is evaulated before base::Passed(&logo), which sets 276 // logo->encoded_image is evaulated before base::Passed(&logo), which sets
275 // logo to NULL. 277 // logo to NULL.
276 scoped_refptr<base::RefCountedString> encoded_image = logo->encoded_image; 278 scoped_refptr<base::RefCountedString> encoded_image = logo->encoded_image;
277 logo_delegate_->DecodeUntrustedImage( 279 logo_delegate_->DecodeUntrustedImage(
278 encoded_image, 280 encoded_image,
279 base::Bind(&LogoTracker::OnFreshLogoAvailable, 281 base::Bind(&LogoTracker::OnFreshLogoAvailable,
280 weak_ptr_factory_.GetWeakPtr(), 282 weak_ptr_factory_.GetWeakPtr(), base::Passed(&logo),
281 base::Passed(&logo), 283 *parsing_failed, from_http_cache));
282 *parsing_failed));
283 } 284 }
284 } 285 }
285 286
286 void LogoTracker::OnFreshLogoAvailable( 287 void LogoTracker::OnFreshLogoAvailable(
287 std::unique_ptr<EncodedLogo> encoded_logo, 288 std::unique_ptr<EncodedLogo> encoded_logo,
288 bool parsing_failed, 289 bool parsing_failed,
290 bool from_http_cache,
289 const SkBitmap& image) { 291 const SkBitmap& image) {
290 DCHECK(!is_idle_); 292 DCHECK(!is_idle_);
291 293
292 int download_outcome = kDownloadOutcomeNotTracked; 294 int download_outcome = kDownloadOutcomeNotTracked;
293 295
294 if (encoded_logo && !encoded_logo->encoded_image.get() && cached_logo_ && 296 if (encoded_logo && !encoded_logo->encoded_image.get() && cached_logo_ &&
295 !encoded_logo->metadata.fingerprint.empty() && 297 !encoded_logo->metadata.fingerprint.empty() &&
296 encoded_logo->metadata.fingerprint == 298 encoded_logo->metadata.fingerprint ==
297 cached_logo_->metadata.fingerprint) { 299 cached_logo_->metadata.fingerprint) {
298 // The cached logo was revalidated, i.e. its fingerprint was verified. 300 // The cached logo was revalidated, i.e. its fingerprint was verified.
299 // mime_type isn't sent when revalidating, so copy it from the cached logo. 301 // mime_type isn't sent when revalidating, so copy it from the cached logo.
300 encoded_logo->metadata.mime_type = cached_logo_->metadata.mime_type; 302 encoded_logo->metadata.mime_type = cached_logo_->metadata.mime_type;
301 SetCachedMetadata(encoded_logo->metadata); 303 SetCachedMetadata(encoded_logo->metadata);
302 download_outcome = DOWNLOAD_OUTCOME_LOGO_REVALIDATED; 304 download_outcome = DOWNLOAD_OUTCOME_LOGO_REVALIDATED;
303 } else if (encoded_logo && image.isNull()) { 305 } else if (encoded_logo && image.isNull()) {
304 // Image decoding failed. Do nothing. 306 // Image decoding failed. Do nothing.
305 download_outcome = DOWNLOAD_OUTCOME_DECODING_FAILED; 307 download_outcome = DOWNLOAD_OUTCOME_DECODING_FAILED;
306 } else { 308 } else {
307 std::unique_ptr<Logo> logo; 309 std::unique_ptr<Logo> logo;
308 // Check if the server returned a valid, non-empty response. 310 // Check if the server returned a valid, non-empty response.
309 if (encoded_logo) { 311 if (encoded_logo) {
312 UMA_HISTOGRAM_BOOLEAN("NewTabPage.LogoImageDownloaded", from_http_cache);
313
310 DCHECK(!image.isNull()); 314 DCHECK(!image.isNull());
311 logo.reset(new Logo()); 315 logo.reset(new Logo());
312 logo->metadata = encoded_logo->metadata; 316 logo->metadata = encoded_logo->metadata;
313 logo->image = image; 317 logo->image = image;
314 } 318 }
315 319
316 if (logo) { 320 if (logo) {
317 download_outcome = DOWNLOAD_OUTCOME_NEW_LOGO_SUCCESS; 321 download_outcome = DOWNLOAD_OUTCOME_NEW_LOGO_SUCCESS;
318 } else { 322 } else {
319 if (parsing_failed) 323 if (parsing_failed)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 return; 357 return;
354 } 358 }
355 359
356 UMA_HISTOGRAM_TIMES("NewTabPage.LogoDownloadTime", 360 UMA_HISTOGRAM_TIMES("NewTabPage.LogoDownloadTime",
357 base::TimeTicks::Now() - logo_download_start_time_); 361 base::TimeTicks::Now() - logo_download_start_time_);
358 362
359 std::unique_ptr<std::string> response(new std::string()); 363 std::unique_ptr<std::string> response(new std::string());
360 source->GetResponseAsString(response.get()); 364 source->GetResponseAsString(response.get());
361 base::Time response_time = clock_->Now(); 365 base::Time response_time = clock_->Now();
362 366
367 bool from_http_cache = source->WasCached();
justincohen 2017/03/21 15:03:52 Can we test this?
Marc Treib 2017/03/21 15:37:00 What exactly would you want to get tested?
justincohen 2017/03/21 15:48:52 I'm curious if this works on iOS, specifically.
Marc Treib 2017/03/21 15:54:21 "This" being the WasCached() method on URLFetcher?
368
363 bool* parsing_failed = new bool(false); 369 bool* parsing_failed = new bool(false);
364 base::PostTaskAndReplyWithResult( 370 base::PostTaskAndReplyWithResult(
365 background_task_runner_.get(), FROM_HERE, 371 background_task_runner_.get(), FROM_HERE,
366 base::Bind(parse_logo_response_func_, base::Passed(&response), 372 base::Bind(parse_logo_response_func_, base::Passed(&response),
367 response_time, parsing_failed), 373 response_time, parsing_failed),
368 base::Bind(&LogoTracker::OnFreshLogoParsed, 374 base::Bind(&LogoTracker::OnFreshLogoParsed,
369 weak_ptr_factory_.GetWeakPtr(), base::Owned(parsing_failed))); 375 weak_ptr_factory_.GetWeakPtr(), base::Owned(parsing_failed),
376 from_http_cache));
370 } 377 }
371 378
372 void LogoTracker::OnURLFetchDownloadProgress(const net::URLFetcher* source, 379 void LogoTracker::OnURLFetchDownloadProgress(const net::URLFetcher* source,
373 int64_t current, 380 int64_t current,
374 int64_t total, 381 int64_t total,
375 int64_t current_network_bytes) { 382 int64_t current_network_bytes) {
376 if (total > kMaxDownloadBytes || current > kMaxDownloadBytes) { 383 if (total > kMaxDownloadBytes || current > kMaxDownloadBytes) {
377 LOG(WARNING) << "Search provider logo exceeded download size limit"; 384 LOG(WARNING) << "Search provider logo exceeded download size limit";
378 ReturnToIdle(DOWNLOAD_OUTCOME_DOWNLOAD_FAILED); 385 ReturnToIdle(DOWNLOAD_OUTCOME_DOWNLOAD_FAILED);
379 } 386 }
380 } 387 }
381 388
382 } // namespace search_provider_logos 389 } // namespace search_provider_logos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698