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

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

Issue 2527353002: Phase II Step 3: Reload LoFi/placeholder images via new ImageResource
Patch Set: reloadLoFiImages test Created 4 years 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) 2006 Samuel Weinig (sam.weinig@gmail.com) 4 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
5 Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 5 Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 static ImageResource* fetch(FetchRequest&, ResourceFetcher*); 63 static ImageResource* fetch(FetchRequest&, ResourceFetcher*);
64 64
65 // TODO(hiroshige): Make create() test-only by refactoring ImageDocument. 65 // TODO(hiroshige): Make create() test-only by refactoring ImageDocument.
66 static ImageResource* create(const ResourceRequest&); 66 static ImageResource* create(const ResourceRequest&);
67 67
68 ~ImageResource() override; 68 ~ImageResource() override;
69 69
70 ImageResourceContent* getContent(); 70 ImageResourceContent* getContent();
71 const ImageResourceContent* getContent() const; 71 const ImageResourceContent* getContent() const;
72 72
73 void reloadIfLoFiOrPlaceholderImage(ResourceFetcher*, 73 ImageResource* reloadIfLoFiOrPlaceholderImage(
74 ReloadLoFiOrPlaceholderPolicy); 74 ResourceFetcher*,
75 ReloadLoFiOrPlaceholderPolicy) override;
75 76
76 void didAddClient(ResourceClient*) override; 77 void didAddClient(ResourceClient*) override;
77 78
78 ResourcePriority priorityFromObservers() override; 79 ResourcePriority priorityFromObservers() override;
79 80
80 void allClientsAndObserversRemoved() override; 81 void allClientsAndObserversRemoved() override;
81 82
82 PassRefPtr<const SharedBuffer> resourceBuffer() const override; 83 PassRefPtr<const SharedBuffer> resourceBuffer() const override;
83 void appendData(const char*, size_t) override; 84 void appendData(const char*, size_t) override;
84 void error(const ResourceError&) override; 85 void error(const ResourceError&, ResourceFetcher* fetcherForReload) override;
85 void responseReceived(const ResourceResponse&, 86 void responseReceived(const ResourceResponse&,
86 std::unique_ptr<WebDataConsumerHandle>) override; 87 std::unique_ptr<WebDataConsumerHandle>) override;
87 void finish(double finishTime = 0.0) override; 88 void finish(double finishTime = 0.0,
89 ResourceFetcher* fetcherForReload = nullptr) override;
88 90
89 // For compatibility, images keep loading even if there are HTTP errors. 91 // For compatibility, images keep loading even if there are HTTP errors.
90 bool shouldIgnoreHTTPStatusCodeErrors() const override { return true; } 92 bool shouldIgnoreHTTPStatusCodeErrors() const override { return true; }
91 93
92 bool isImage() const override { return true; } 94 bool isImage() const override { return true; }
93 95
94 // MultipartImageResourceParser::Client 96 // MultipartImageResourceParser::Client
95 void onePartInMultipartReceived(const ResourceResponse&) final; 97 void onePartInMultipartReceived(const ResourceResponse&) final;
96 void multipartDataReceived(const char*, size_t) final; 98 void multipartDataReceived(const char*, size_t) final;
97 99
(...skipping 20 matching lines...) Expand all
118 // Only for ImageResourceInfoImpl. 120 // Only for ImageResourceInfoImpl.
119 void decodeError(bool allDataReceived); 121 void decodeError(bool allDataReceived);
120 bool isAccessAllowed( 122 bool isAccessAllowed(
121 SecurityOrigin*, 123 SecurityOrigin*,
122 ImageResourceInfo::DoesCurrentFrameHaveSingleSecurityOrigin) const; 124 ImageResourceInfo::DoesCurrentFrameHaveSingleSecurityOrigin) const;
123 125
124 bool hasClientsOrObservers() const override; 126 bool hasClientsOrObservers() const override;
125 127
126 void updateImageAndClearBuffer(); 128 void updateImageAndClearBuffer();
127 129
128 void checkNotify() override;
129
130 void destroyDecodedDataIfPossible() override; 130 void destroyDecodedDataIfPossible() override;
131 void destroyDecodedDataForFailedRevalidation() override; 131 void destroyDecodedDataForFailedRevalidation() override;
132 132
133 // When UpdateImageOption is UpdateImage but this is the first 133 // When UpdateImageOption is UpdateImage but this is the first
134 // updateImage() call, then ClearAndUpdateImage is used instead to enforce 134 // updateImage() call, then ClearAndUpdateImage is used instead to enforce
135 // new image creation. 135 // new image creation.
136 void updateImage(PassRefPtr<SharedBuffer>, 136 void updateImage(PassRefPtr<SharedBuffer>,
137 ImageResourceContent::UpdateImageOption, 137 ImageResourceContent::UpdateImageOption,
138 bool allDataReceived); 138 bool allDataReceived,
139 ResourceFetcher* fetcherForReload = nullptr);
139 void flushImageIfNeeded(TimerBase*); 140 void flushImageIfNeeded(TimerBase*);
140 141
141 bool shouldReloadBrokenPlaceholder() const { 142 bool shouldReloadBrokenPlaceholder() const {
142 return m_isPlaceholder && willPaintBrokenImage(); 143 return m_isPlaceholder && willPaintBrokenImage();
143 } 144 }
144 145
145 bool willPaintBrokenImage() const; 146 bool willPaintBrokenImage() const;
146 147
148 void detachContent();
149
147 Member<ImageResourceContent> m_content; 150 Member<ImageResourceContent> m_content;
148 151
149 // Indicates whether updateImage() is called for this resource, or for this 152 // Indicates whether updateImage() is called for this resource, or for this
150 // part (in case of multipart images), and is used for enforcing creation of 153 // part (in case of multipart images), and is used for enforcing creation of
151 // new blink::Image in ImageResourceContent for the first updateImage(). 154 // new blink::Image in ImageResourceContent for the first updateImage().
152 bool m_isUpdateImageCalled = false; 155 bool m_isUpdateImageCalled = false;
153 156
154 // TODO(hiroshige): move |m_devicePixelRatioHeaderValue| and 157 // TODO(hiroshige): move |m_devicePixelRatioHeaderValue| and
155 // |m_hasDevicePixelRatioHeaderValue| to ImageResourceContent and update 158 // |m_hasDevicePixelRatioHeaderValue| to ImageResourceContent and update
156 // it via ImageResourceContent::updateImage(). 159 // it via ImageResourceContent::updateImage().
157 float m_devicePixelRatioHeaderValue; 160 float m_devicePixelRatioHeaderValue;
158 161
159 Member<MultipartImageResourceParser> m_multipartParser; 162 Member<MultipartImageResourceParser> m_multipartParser;
160 MultipartParsingState m_multipartParsingState = 163 MultipartParsingState m_multipartParsingState =
161 MultipartParsingState::WaitingForFirstPart; 164 MultipartParsingState::WaitingForFirstPart;
162 bool m_hasDevicePixelRatioHeaderValue; 165 bool m_hasDevicePixelRatioHeaderValue;
163 166
164 // Indicates if the ImageResource is currently scheduling a reload, e.g.
165 // because reloadIfLoFi() was called.
166 bool m_isSchedulingReload;
167
168 // Indicates if this ImageResource is either attempting to load a placeholder 167 // Indicates if this ImageResource is either attempting to load a placeholder
169 // image, or is a (possibly broken) placeholder image. 168 // image, or is a (possibly broken) placeholder image.
170 bool m_isPlaceholder; 169 bool m_isPlaceholder;
171 170
172 Timer<ImageResource> m_flushTimer; 171 Timer<ImageResource> m_flushTimer;
173 double m_lastFlushTime = 0.; 172 double m_lastFlushTime = 0.;
174 }; 173 };
175 174
176 DEFINE_RESOURCE_TYPE_CASTS(Image); 175 DEFINE_RESOURCE_TYPE_CASTS(Image);
177 176
178 } // namespace blink 177 } // namespace blink
179 178
180 #endif 179 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698