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

Side by Side Diff: third_party/WebKit/Source/core/loader/resource/ImageResource.cpp

Issue 2746343002: Phase III Step 1: Make ImageResourceContent manage its own ResourceStatus (Closed)
Patch Set: Reflect comments Created 3 years, 7 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 /* 1 /*
2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)
3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org)
4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org)
5 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) 5 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
6 Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 6 Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
7 7
8 This library is free software; you can redistribute it and/or 8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public 9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either 10 License as published by the Free Software Foundation; either
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 } 74 }
75 bool HasDevicePixelRatioHeaderValue() const override { 75 bool HasDevicePixelRatioHeaderValue() const override {
76 return resource_->has_device_pixel_ratio_header_value_; 76 return resource_->has_device_pixel_ratio_header_value_;
77 } 77 }
78 float DevicePixelRatioHeaderValue() const override { 78 float DevicePixelRatioHeaderValue() const override {
79 return resource_->device_pixel_ratio_header_value_; 79 return resource_->device_pixel_ratio_header_value_;
80 } 80 }
81 const ResourceResponse& GetResponse() const override { 81 const ResourceResponse& GetResponse() const override {
82 return resource_->GetResponse(); 82 return resource_->GetResponse();
83 } 83 }
84 ResourceStatus GetStatus() const override { return resource_->GetStatus(); }
85 bool ShouldShowPlaceholder() const override { 84 bool ShouldShowPlaceholder() const override {
86 return resource_->ShouldShowPlaceholder(); 85 return resource_->ShouldShowPlaceholder();
87 } 86 }
88 bool IsCacheValidator() const override { 87 bool IsCacheValidator() const override {
89 return resource_->IsCacheValidator(); 88 return resource_->IsCacheValidator();
90 } 89 }
91 bool SchedulingReloadOrShouldReloadBrokenPlaceholder() const override { 90 bool SchedulingReloadOrShouldReloadBrokenPlaceholder() const override {
92 return resource_->is_scheduling_reload_ || 91 return resource_->is_scheduling_reload_ ||
93 resource_->ShouldReloadBrokenPlaceholder(); 92 resource_->ShouldReloadBrokenPlaceholder();
94 } 93 }
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 if (!ErrorOccurred()) 328 if (!ErrorOccurred())
330 SetStatus(ResourceStatus::kDecodeError); 329 SetStatus(ResourceStatus::kDecodeError);
331 330
332 // Finishes loading if needed, and notifies observers. 331 // Finishes loading if needed, and notifies observers.
333 if (!all_data_received && Loader()) { 332 if (!all_data_received && Loader()) {
334 // Observers are notified via ImageResource::finish(). 333 // Observers are notified via ImageResource::finish().
335 // TODO(hiroshige): Do not call didFinishLoading() directly. 334 // TODO(hiroshige): Do not call didFinishLoading() directly.
336 Loader()->DidFinishLoading(MonotonicallyIncreasingTime(), size, size, size); 335 Loader()->DidFinishLoading(MonotonicallyIncreasingTime(), size, size, size);
337 } else { 336 } else {
338 auto result = GetContent()->UpdateImage( 337 auto result = GetContent()->UpdateImage(
339 nullptr, ImageResourceContent::kClearImageAndNotifyObservers, 338 nullptr, GetStatus(),
340 all_data_received); 339 ImageResourceContent::kClearImageAndNotifyObservers, all_data_received);
341 DCHECK_EQ(result, ImageResourceContent::UpdateImageResult::kNoDecodeError); 340 DCHECK_EQ(result, ImageResourceContent::UpdateImageResult::kNoDecodeError);
342 } 341 }
343 342
344 GetMemoryCache()->Remove(this); 343 GetMemoryCache()->Remove(this);
345 } 344 }
346 345
347 void ImageResource::UpdateImageAndClearBuffer() { 346 void ImageResource::UpdateImageAndClearBuffer() {
348 UpdateImage(Data(), ImageResourceContent::kClearAndUpdateImage, true); 347 UpdateImage(Data(), ImageResourceContent::kClearAndUpdateImage, true);
349 ClearData(); 348 ClearData();
350 } 349 }
351 350
351 void ImageResource::NotifyStartLoad() {
352 CHECK_EQ(GetStatus(), ResourceStatus::kPending);
353 GetContent()->NotifyStartLoad();
354 }
355
352 void ImageResource::Finish(double load_finish_time) { 356 void ImageResource::Finish(double load_finish_time) {
353 if (multipart_parser_) { 357 if (multipart_parser_) {
354 multipart_parser_->Finish(); 358 multipart_parser_->Finish();
355 if (Data()) 359 if (Data())
356 UpdateImageAndClearBuffer(); 360 UpdateImageAndClearBuffer();
357 } else { 361 } else {
358 UpdateImage(Data(), ImageResourceContent::kUpdateImage, true); 362 UpdateImage(Data(), ImageResourceContent::kUpdateImage, true);
359 // As encoded image data can be created from m_image (see 363 // As encoded image data can be created from m_image (see
360 // ImageResource::resourceBuffer(), we don't have to keep m_data. Let's 364 // ImageResource::resourceBuffer(), we don't have to keep m_data. Let's
361 // clear this. As for the lifetimes of m_image and m_data, see this 365 // clear this. As for the lifetimes of m_image and m_data, see this
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 } 576 }
573 577
574 ResourcePriority ImageResource::PriorityFromObservers() { 578 ResourcePriority ImageResource::PriorityFromObservers() {
575 return GetContent()->PriorityFromObservers(); 579 return GetContent()->PriorityFromObservers();
576 } 580 }
577 581
578 void ImageResource::UpdateImage( 582 void ImageResource::UpdateImage(
579 PassRefPtr<SharedBuffer> shared_buffer, 583 PassRefPtr<SharedBuffer> shared_buffer,
580 ImageResourceContent::UpdateImageOption update_image_option, 584 ImageResourceContent::UpdateImageOption update_image_option,
581 bool all_data_received) { 585 bool all_data_received) {
582 auto result = GetContent()->UpdateImage( 586 auto result =
583 std::move(shared_buffer), update_image_option, all_data_received); 587 GetContent()->UpdateImage(std::move(shared_buffer), GetStatus(),
588 update_image_option, all_data_received);
584 if (result == ImageResourceContent::UpdateImageResult::kShouldDecodeError) { 589 if (result == ImageResourceContent::UpdateImageResult::kShouldDecodeError) {
585 // In case of decode error, we call imageNotifyFinished() iff we don't 590 // In case of decode error, we call imageNotifyFinished() iff we don't
586 // initiate reloading: 591 // initiate reloading:
587 // [(a): when this is in the middle of loading, or (b): otherwise] 592 // [(a): when this is in the middle of loading, or (b): otherwise]
588 // 1. The updateImage() call above doesn't call notifyObservers(). 593 // 1. The updateImage() call above doesn't call notifyObservers().
589 // 2. notifyObservers(ShouldNotifyFinish) is called 594 // 2. notifyObservers(ShouldNotifyFinish) is called
590 // (a) via updateImage() called in ImageResource::finish() 595 // (a) via updateImage() called in ImageResource::finish()
591 // called via didFinishLoading() called in decodeError(), or 596 // called via didFinishLoading() called in decodeError(), or
592 // (b) via updateImage() called in decodeError(). 597 // (b) via updateImage() called in decodeError().
593 // imageNotifyFinished() is called here iff we will not initiate 598 // imageNotifyFinished() is called here iff we will not initiate
594 // reloading in Step 3 due to notifyObservers()'s 599 // reloading in Step 3 due to notifyObservers()'s
595 // schedulingReloadOrShouldReloadBrokenPlaceholder() check. 600 // schedulingReloadOrShouldReloadBrokenPlaceholder() check.
596 // 3. reloadIfLoFiOrPlaceholderImage() is called via ResourceFetcher 601 // 3. reloadIfLoFiOrPlaceholderImage() is called via ResourceFetcher
597 // (a) via didFinishLoading() called in decodeError(), or 602 // (a) via didFinishLoading() called in decodeError(), or
598 // (b) after returning ImageResource::updateImage(). 603 // (b) after returning ImageResource::updateImage().
599 DecodeError(all_data_received); 604 DecodeError(all_data_received);
600 } 605 }
601 } 606 }
602 607
603 } // namespace blink 608 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698