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

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

Issue 2613853002: Phase III Step 2: Call imageNotifyFinished() and image load event after SVG loading completes (Closed)
Patch Set: Rebase 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 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * Copyright (C) 2004, 2009 Apple Inc. All rights reserved. 4 * Copyright (C) 2004, 2009 Apple Inc. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 bool hadError() const { return !m_failedLoadURL.isEmpty(); } 101 bool hadError() const { return !m_failedLoadURL.isEmpty(); }
102 102
103 void dispatchPendingEvent(ImageEventSender*); 103 void dispatchPendingEvent(ImageEventSender*);
104 104
105 static void dispatchPendingLoadEvents(); 105 static void dispatchPendingLoadEvents();
106 static void dispatchPendingErrorEvents(); 106 static void dispatchPendingErrorEvents();
107 107
108 bool getImageAnimationPolicy(ImageAnimationPolicy&) final; 108 bool getImageAnimationPolicy(ImageAnimationPolicy&) final;
109 109
110 protected: 110 protected:
111 void imageChanged(ImageResourceContent*, const IntRect*) override;
111 void imageNotifyFinished(ImageResourceContent*) override; 112 void imageNotifyFinished(ImageResourceContent*) override;
112 113
113 private: 114 private:
114 class Task; 115 class Task;
115 116
116 // Called from the task or from updateFromElement to initiate the load. 117 // Called from the task or from updateFromElement to initiate the load.
117 void doUpdateFromElement(BypassMainWorldBehavior, 118 void doUpdateFromElement(BypassMainWorldBehavior,
118 UpdateFromElementBehavior, 119 UpdateFromElementBehavior,
119 const KURL&, 120 const KURL&,
120 ReferrerPolicy = ReferrerPolicyDefault); 121 ReferrerPolicy = ReferrerPolicyDefault);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 Member<ImageResourceContent> m_image; 156 Member<ImageResourceContent> m_image;
156 Member<ImageResource> m_imageResourceForImageDocument; 157 Member<ImageResource> m_imageResourceForImageDocument;
157 // FIXME: Oilpan: We might be able to remove this Persistent hack when 158 // FIXME: Oilpan: We might be able to remove this Persistent hack when
158 // ImageResourceClient is traceable. 159 // ImageResourceClient is traceable.
159 GC_PLUGIN_IGNORE("http://crbug.com/383741") 160 GC_PLUGIN_IGNORE("http://crbug.com/383741")
160 Persistent<Element> m_keepAlive; 161 Persistent<Element> m_keepAlive;
161 162
162 Timer<ImageLoader> m_derefElementTimer; 163 Timer<ImageLoader> m_derefElementTimer;
163 AtomicString m_failedLoadURL; 164 AtomicString m_failedLoadURL;
164 WeakPtr<Task> m_pendingTask; // owned by Microtask 165 WeakPtr<Task> m_pendingTask; // owned by Microtask
165 std::unique_ptr<IncrementLoadEventDelayCount> m_loadDelayCounter; 166 std::unique_ptr<IncrementLoadEventDelayCount> m_loadDelayCounter;
kouhei (in TOK) 2017/03/15 11:32:34 m_delayLoadUntilUpdateFromElement?
hiroshige 2017/05/04 22:50:50 Done.
167
168 // Delaying load event: the timeline should be:
169 // (0) ImageResource::fetch() is called.
170 // (1) ResourceFetcher::startLoad(): Resource loading is actually started.
171 // (2) ResourceLoader::didFinishLoading() etc:
172 // Resource loading is finished, but SVG document load might be
173 // incomplete because of asynchronously loaded subresources.
174 // (3) imageNotifyFinished(): Image is completely loaded.
175 // and we must delay Document load event from (1) to (3).
176 // - |ResourceFetcher::m_loaders| delays Document load event from (1) to (2).
177 // - |m_loadDelayCounter| delays Document load event from the first
178 // imageChanged() (at some time between (1) and (2)) until (3).
179 // Ideally, we might want |m_loadDelayCounter2| to delay Document load event
180 // from (1) to (3), but currently we piggybacked on imageChanged() because
181 // adding a callback hook at (1) might complicate the code.
182 std::unique_ptr<IncrementLoadEventDelayCount> m_loadDelayCounter2;
kouhei (in TOK) 2017/03/15 11:32:34 Do we have a better name for this? m_delayLoadUnti
fs 2017/03/15 14:22:17 Anything other than ...2 would be an improvement I
hiroshige 2017/05/04 22:50:50 Done.
183
166 bool m_hasPendingLoadEvent : 1; 184 bool m_hasPendingLoadEvent : 1;
167 bool m_hasPendingErrorEvent : 1; 185 bool m_hasPendingErrorEvent : 1;
168 bool m_imageComplete : 1; 186 bool m_imageComplete : 1;
169 bool m_loadingImageDocument : 1; 187 bool m_loadingImageDocument : 1;
170 bool m_elementIsProtected : 1; 188 bool m_elementIsProtected : 1;
171 bool m_suppressErrorEvents : 1; 189 bool m_suppressErrorEvents : 1;
172 }; 190 };
173 191
174 } // namespace blink 192 } // namespace blink
175 193
176 #endif 194 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698