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

Unified Diff: third_party/WebKit/Source/core/loader/ImageLoader.cpp

Issue 2864253003: Split ImageLoader::SetImage() and set flags consistently in tests (Closed)
Patch Set: Update comment 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/loader/ImageLoader.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/loader/ImageLoader.cpp
diff --git a/third_party/WebKit/Source/core/loader/ImageLoader.cpp b/third_party/WebKit/Source/core/loader/ImageLoader.cpp
index 9e5ab6ae73e1eef23563c275bf583e54215f7e3b..54217197d1366496b31b96266428b4b320aabf37 100644
--- a/third_party/WebKit/Source/core/loader/ImageLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/ImageLoader.cpp
@@ -186,7 +186,8 @@ DEFINE_TRACE(ImageLoader) {
visitor->Trace(element_);
}
-void ImageLoader::SetImage(ImageResourceContent* new_image) {
+void ImageLoader::SetImageForTest(ImageResourceContent* new_image) {
+ DCHECK(new_image);
SetImageWithoutConsideringPendingLoadEvent(new_image);
// Only consider updating the protection ref-count of the Element immediately
@@ -195,12 +196,40 @@ void ImageLoader::SetImage(ImageResourceContent* new_image) {
UpdatedHasPendingEvent();
}
+void ImageLoader::ClearImage() {
+ SetImageWithoutConsideringPendingLoadEvent(nullptr);
+
+ // Only consider updating the protection ref-count of the Element immediately
+ // before returning from this function as doing so might result in the
+ // destruction of this ImageLoader.
+ UpdatedHasPendingEvent();
+}
+
+void ImageLoader::SetImageForImageDocument(ImageResource* new_image_resource) {
+ DCHECK(loading_image_document_);
+ DCHECK(new_image_resource);
+ DCHECK(new_image_resource->GetContent());
+
+ image_resource_for_image_document_ = new_image_resource;
+ SetImageWithoutConsideringPendingLoadEvent(new_image_resource->GetContent());
+
+ // |has_pending_load_event_| is always false and |image_complete_| is
+ // always true for ImageDocument loading, while the loading is just started.
+ // TODO(hiroshige): clean up the behavior of flags. https://crbug.com/719759
+ has_pending_load_event_ = false;
+ image_complete_ = true;
+
+ // Only consider updating the protection ref-count of the Element immediately
+ // before returning from this function as doing so might result in the
+ // destruction of this ImageLoader.
+ UpdatedHasPendingEvent();
+}
+
void ImageLoader::SetImageWithoutConsideringPendingLoadEvent(
ImageResourceContent* new_image) {
DCHECK(failed_load_url_.IsEmpty());
ImageResourceContent* old_image = image_.Get();
if (new_image != old_image) {
- image_ = new_image;
if (has_pending_load_event_) {
LoadEventSender().CancelEvent(this);
has_pending_load_event_ = false;
@@ -209,7 +238,7 @@ void ImageLoader::SetImageWithoutConsideringPendingLoadEvent(
ErrorEventSender().CancelEvent(this);
has_pending_error_event_ = false;
}
- image_complete_ = true;
+ UpdateImageState(new_image);
if (new_image) {
new_image->AddObserver(this);
}
@@ -268,6 +297,12 @@ inline void ImageLoader::EnqueueImageLoadingMicroTask(
IncrementLoadEventDelayCount::Create(element_->GetDocument());
}
+void ImageLoader::UpdateImageState(ImageResourceContent* new_image) {
+ image_ = new_image;
+ has_pending_load_event_ = new_image;
+ image_complete_ = !new_image;
+}
+
void ImageLoader::DoUpdateFromElement(BypassMainWorldBehavior bypass_behavior,
UpdateFromElementBehavior update_behavior,
const KURL& url,
@@ -356,9 +391,7 @@ void ImageLoader::DoUpdateFromElement(BypassMainWorldBehavior bypass_behavior,
has_pending_error_event_ = false;
}
- image_ = new_image;
- has_pending_load_event_ = new_image;
- image_complete_ = !new_image;
+ UpdateImageState(new_image);
UpdateLayoutObject();
// If newImage exists and is cached, addObserver() will result in the load
@@ -402,8 +435,7 @@ void ImageLoader::UpdateFromElement(UpdateFromElementBehavior update_behavior,
ResourceRequest(ImageSourceToKURL(element_->ImageSourceURL())));
image_resource->SetStatus(ResourceStatus::kPending);
image_resource->NotifyStartLoad();
- image_resource_for_image_document_ = image_resource;
- SetImage(image_resource->GetContent());
+ SetImageForImageDocument(image_resource);
return;
}
@@ -639,7 +671,7 @@ void ImageLoader::ElementDidMoveToNewDocument() {
if (load_delay_counter_)
load_delay_counter_->DocumentChanged(element_->GetDocument());
ClearFailedLoadURL();
- SetImage(0);
+ ClearImage();
}
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/loader/ImageLoader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698