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

Side by Side Diff: third_party/WebKit/Source/core/fetch/ImageResourceContent.h

Issue 2558033002: Loading: move ImageResource and related classes to core/loader/resource (Closed)
Patch Set: rebase and format 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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef ImageResourceContent_h
6 #define ImageResourceContent_h
7
8 #include "core/CoreExport.h"
9 #include "core/fetch/ResourceStatus.h"
10 #include "platform/geometry/IntRect.h"
11 #include "platform/geometry/IntSizeHash.h"
12 #include "platform/geometry/LayoutSize.h"
13 #include "platform/graphics/Image.h"
14 #include "platform/graphics/ImageObserver.h"
15 #include "platform/graphics/ImageOrientation.h"
16 #include "platform/network/ResourceLoadPriority.h"
17 #include "platform/weborigin/KURL.h"
18 #include "wtf/HashCountedSet.h"
19 #include "wtf/HashMap.h"
20 #include <memory>
21
22 namespace blink {
23
24 class FetchRequest;
25 class ImageResourceInfo;
26 class ImageResourceObserver;
27 class ResourceError;
28 class ResourceFetcher;
29 class ResourceResponse;
30 class SecurityOrigin;
31
32 // ImageResourceContent is a container that holds fetch result of
33 // an ImageResource in a decoded form.
34 // Classes that use the fetched images
35 // should hold onto this class and/or inherit ImageResourceObserver,
36 // instead of holding onto ImageResource or inheriting ResourceClient.
37 // https://docs.google.com/document/d/1O-fB83mrE0B_V8gzXNqHgmRLCvstTB4MMi3RnVLr8 bE/edit?usp=sharing
38 // TODO(hiroshige): Make ImageResourceContent ResourceClient and remove the
39 // word 'observer' from ImageResource.
40 // TODO(hiroshige): Rename local variables of type ImageResourceContent to
41 // e.g. |imageContent|. Currently they have Resource-like names.
42 class CORE_EXPORT ImageResourceContent final
43 : public GarbageCollectedFinalized<ImageResourceContent>,
44 public ImageObserver {
45 USING_GARBAGE_COLLECTED_MIXIN(ImageResourceContent);
46
47 public:
48 static ImageResourceContent* create(
49 PassRefPtr<blink::Image> image = nullptr) {
50 return new ImageResourceContent(std::move(image));
51 }
52 static ImageResourceContent* fetch(FetchRequest&, ResourceFetcher*);
53
54 // Returns the nullImage() if the image is not available yet.
55 blink::Image* getImage();
56 bool hasImage() const { return m_image.get(); }
57
58 static std::pair<blink::Image*, float> brokenImage(
59 float deviceScaleFactor); // Returns an image and the image's resolution
60 // scale factor.
61
62 bool usesImageContainerSize() const;
63 bool imageHasRelativeSize() const;
64 // The device pixel ratio we got from the server for this image, or 1.0.
65 float devicePixelRatioHeaderValue() const;
66 bool hasDevicePixelRatioHeaderValue() const;
67
68 enum SizeType {
69 // Report the intrinsic size.
70 IntrinsicSize,
71
72 // Report the intrinsic size corrected to account for image density.
73 IntrinsicCorrectedToDPR,
74 };
75
76 // This method takes a zoom multiplier that can be used to increase the
77 // natural size of the image by the zoom.
78 LayoutSize imageSize(
79 RespectImageOrientationEnum shouldRespectImageOrientation,
80 float multiplier,
81 SizeType = IntrinsicSize);
82
83 void updateImageAnimationPolicy();
84
85 void addObserver(ImageResourceObserver*);
86 void removeObserver(ImageResourceObserver*);
87
88 DECLARE_TRACE();
89
90 // Redirecting methods to Resource.
91 const KURL& url() const;
92 bool isAccessAllowed(SecurityOrigin*);
93 const ResourceResponse& response() const;
94 bool isLoaded() const;
95 bool isLoading() const;
96 bool errorOccurred() const;
97 bool loadFailedOrCanceled() const;
98 ResourceStatus getStatus() const;
99 const ResourceError& resourceError() const;
100
101 // For FrameSerializer.
102 bool hasCacheControlNoStoreHeader() const;
103
104 void emulateLoadStartedForInspector(ResourceFetcher*,
105 const KURL&,
106 const AtomicString& initiatorName);
107
108 void setNotRefetchableDataFromDiskCache() {
109 m_isRefetchableDataFromDiskCache = false;
110 }
111
112 // For ImageResource only.
113 void setImageResourceInfo(ImageResourceInfo*);
114 enum ClearImageOption { ClearExistingImage, KeepExistingImage };
115 void updateImage(PassRefPtr<SharedBuffer>,
116 ClearImageOption,
117 bool allDataReceived);
118 enum NotifyFinishOption { ShouldNotifyFinish, DoNotNotifyFinish };
119 void clearImage();
120 void clearImageAndNotifyObservers(NotifyFinishOption);
121 ResourcePriority priorityFromObservers() const;
122 void destroyDecodedData();
123 void doResetAnimation();
124 PassRefPtr<const SharedBuffer> resourceBuffer() const;
125 bool shouldUpdateImageImmediately() const;
126 bool hasObservers() const {
127 return !m_observers.isEmpty() || !m_finishedObservers.isEmpty();
128 }
129 bool isRefetchableDataFromDiskCache() const {
130 return m_isRefetchableDataFromDiskCache;
131 }
132
133 private:
134 explicit ImageResourceContent(PassRefPtr<blink::Image> = nullptr);
135
136 // ImageObserver
137 void decodedSizeChangedTo(const blink::Image*, size_t newSize) override;
138 bool shouldPauseAnimation(const blink::Image*) override;
139 void animationAdvanced(const blink::Image*) override;
140 void changedInRect(const blink::Image*, const IntRect&) override;
141
142 PassRefPtr<Image> createImage();
143
144 // If not null, changeRect is the changed part of the image.
145 void notifyObservers(NotifyFinishOption, const IntRect* changeRect = nullptr);
146 void markObserverFinished(ImageResourceObserver*);
147
148 Member<ImageResourceInfo> m_info;
149
150 RefPtr<blink::Image> m_image;
151
152 HashCountedSet<ImageResourceObserver*> m_observers;
153 HashCountedSet<ImageResourceObserver*> m_finishedObservers;
154
155 Image::SizeAvailability m_sizeAvailable = Image::SizeUnavailable;
156
157 // Indicates if this resource's encoded image data can be purged and refetched
158 // from disk cache to save memory usage. See crbug/664437.
159 bool m_isRefetchableDataFromDiskCache;
160 };
161
162 } // namespace blink
163
164 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698