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

Side by Side Diff: trunk/Source/core/loader/ResourceLoader.cpp

Issue 19683007: Revert 154452 "Refactoring: Introduce ResouceLoaderHost interfac..." (Closed) Base URL: svn://svn.chromium.org/blink/
Patch Set: Created 7 years, 5 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2010, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2010, 2011 Apple Inc. All rights reserved.
3 * (C) 2007 Graham Dennis (graham.dennis@gmail.com) 3 * (C) 2007 Graham Dennis (graham.dennis@gmail.com)
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 8 *
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 13 matching lines...) Expand all
24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */ 28 */
29 29
30 #include "config.h" 30 #include "config.h"
31 #include "core/loader/ResourceLoader.h" 31 #include "core/loader/ResourceLoader.h"
32 32
33 #include "core/inspector/InspectorInstrumentation.h" 33 #include "core/inspector/InspectorInstrumentation.h"
34 #include "core/loader/ResourceLoaderHost.h" 34 #include "core/loader/DocumentLoader.h"
35 #include "core/loader/FrameLoader.h"
36 #include "core/loader/FrameLoaderClient.h"
37 #include "core/loader/appcache/ApplicationCacheHost.h"
38 #include "core/loader/cache/CachedResourceLoader.h"
39 #include "core/page/Frame.h"
35 #include "core/page/Page.h" 40 #include "core/page/Page.h"
36 #include "core/platform/Logging.h" 41 #include "core/platform/Logging.h"
37 #include "core/platform/network/ResourceError.h" 42 #include "core/platform/network/ResourceError.h"
38 #include "core/platform/network/ResourceHandle.h" 43 #include "core/platform/network/ResourceHandle.h"
39 44
40 namespace WebCore { 45 namespace WebCore {
41 46
42 ResourceLoader::RequestCountTracker::RequestCountTracker(ResourceLoaderHost* hos t, CachedResource* resource) 47 ResourceLoader::RequestCountTracker::RequestCountTracker(CachedResourceLoader* c achedResourceLoader, CachedResource* resource)
43 : m_host(host) 48 : m_cachedResourceLoader(cachedResourceLoader)
44 , m_resource(resource) 49 , m_resource(resource)
45 { 50 {
46 m_host->incrementRequestCount(m_resource); 51 m_cachedResourceLoader->incrementRequestCount(m_resource);
47 } 52 }
48 53
49 ResourceLoader::RequestCountTracker::~RequestCountTracker() 54 ResourceLoader::RequestCountTracker::~RequestCountTracker()
50 { 55 {
51 m_host->decrementRequestCount(m_resource); 56 m_cachedResourceLoader->decrementRequestCount(m_resource);
52 } 57 }
53 58
54 PassRefPtr<ResourceLoader> ResourceLoader::create(ResourceLoaderHost* host, Cach edResource* resource, const ResourceRequest& request, const ResourceLoaderOption s& options) 59 PassRefPtr<ResourceLoader> ResourceLoader::create(DocumentLoader* documentLoader , CachedResource* resource, const ResourceRequest& request, const ResourceLoader Options& options)
55 { 60 {
56 RefPtr<ResourceLoader> loader(adoptRef(new ResourceLoader(host, resource, op tions))); 61 RefPtr<ResourceLoader> loader(adoptRef(new ResourceLoader(documentLoader, re source, options)));
57 if (!loader->init(request)) 62 if (!loader->init(request))
58 return 0; 63 return 0;
59 loader->start(); 64 loader->start();
60 return loader.release(); 65 return loader.release();
61 } 66 }
62 67
63 ResourceLoader::ResourceLoader(ResourceLoaderHost* host, CachedResource* resourc e, const ResourceLoaderOptions& options) 68 ResourceLoader::ResourceLoader(DocumentLoader* documentLoader, CachedResource* r esource, ResourceLoaderOptions options)
64 : m_host(host) 69 : m_frame(documentLoader->frame())
70 , m_documentLoader(documentLoader)
65 , m_loadingMultipartContent(false) 71 , m_loadingMultipartContent(false)
66 , m_notifiedLoadComplete(false) 72 , m_notifiedLoadComplete(false)
67 , m_defersLoading(host->defersLoading()) 73 , m_defersLoading(m_frame->page()->defersLoading())
68 , m_options(options) 74 , m_options(options)
69 , m_resource(resource) 75 , m_resource(resource)
70 , m_state(Uninitialized) 76 , m_state(Uninitialized)
71 , m_requestCountTracker(adoptPtr(new RequestCountTracker(host, resource))) 77 , m_requestCountTracker(adoptPtr(new RequestCountTracker(documentLoader->cac hedResourceLoader(), resource)))
72 { 78 {
73 } 79 }
74 80
75 ResourceLoader::~ResourceLoader() 81 ResourceLoader::~ResourceLoader()
76 { 82 {
77 ASSERT(m_state == Terminated); 83 ASSERT(m_state == Terminated);
78 } 84 }
79 85
80 void ResourceLoader::releaseResources() 86 void ResourceLoader::releaseResources()
81 { 87 {
82 ASSERT(m_state != Terminated); 88 ASSERT(m_state != Terminated);
83 if (m_state != Uninitialized) { 89 if (m_state != Uninitialized) {
84 m_requestCountTracker.clear(); 90 m_requestCountTracker.clear();
85 m_host->didLoadResource(m_resource); 91 m_documentLoader->cachedResourceLoader()->loadDone(m_resource);
86 if (m_state == Terminated) 92 if (m_state == Terminated)
87 return; 93 return;
88 m_resource->clearLoader(); 94 m_resource->clearLoader();
89 m_host->willTerminateResourceLoader(this); 95 m_documentLoader->removeResourceLoader(this);
90 } 96 }
91 97
92 ASSERT(m_state != Terminated); 98 ASSERT(m_state != Terminated);
93 99
94 // It's possible that when we release the handle, it will be 100 // It's possible that when we release the handle, it will be
95 // deallocated and release the last reference to this object. 101 // deallocated and release the last reference to this object.
96 // We need to retain to avoid accessing the object after it 102 // We need to retain to avoid accessing the object after it
97 // has been deallocated and also to avoid reentering this method. 103 // has been deallocated and also to avoid reentering this method.
98 RefPtr<ResourceLoader> protector(this); 104 RefPtr<ResourceLoader> protector(this);
99 105
100 m_host.clear(); 106 m_frame = 0;
107 m_documentLoader = 0;
108
101 m_state = Terminated; 109 m_state = Terminated;
102 110
103 if (m_handle) { 111 if (m_handle) {
104 // Clear out the ResourceHandle's client so that it doesn't try to call 112 // Clear out the ResourceHandle's client so that it doesn't try to call
105 // us back after we release it, unless it has been replaced by someone e lse. 113 // us back after we release it, unless it has been replaced by someone e lse.
106 if (m_handle->client() == this) 114 if (m_handle->client() == this)
107 m_handle->setClient(0); 115 m_handle->setClient(0);
108 m_handle = 0; 116 m_handle = 0;
109 } 117 }
110 118
(...skipping 10 matching lines...) Expand all
121 129
122 willSendRequest(0, clientRequest, ResourceResponse()); 130 willSendRequest(0, clientRequest, ResourceResponse());
123 if (clientRequest.isNull()) { 131 if (clientRequest.isNull()) {
124 cancel(); 132 cancel();
125 return false; 133 return false;
126 } 134 }
127 ASSERT(m_state != Terminated); 135 ASSERT(m_state != Terminated);
128 136
129 m_originalRequest = m_request = clientRequest; 137 m_originalRequest = m_request = clientRequest;
130 m_state = Initialized; 138 m_state = Initialized;
131 m_host->didInitializeResourceLoader(this); 139 m_documentLoader->addResourceLoader(this);
132 return true; 140 return true;
133 } 141 }
134 142
135 void ResourceLoader::start() 143 void ResourceLoader::start()
136 { 144 {
137 ASSERT(!m_handle); 145 ASSERT(!m_handle);
138 ASSERT(!m_request.isNull()); 146 ASSERT(!m_request.isNull());
139 ASSERT(m_deferredRequest.isNull()); 147 ASSERT(m_deferredRequest.isNull());
140 148
141 m_host->willStartLoadingResource(m_request); 149 m_documentLoader->applicationCacheHost()->willStartLoadingResource(m_request );
142 150
143 if (m_defersLoading) { 151 if (m_defersLoading) {
144 m_deferredRequest = m_request; 152 m_deferredRequest = m_request;
145 return; 153 return;
146 } 154 }
147 155
148 if (m_state != Terminated) 156 if (m_state != Terminated)
149 m_handle = ResourceHandle::create(m_request, this, m_defersLoading, m_op tions.sniffContent == SniffContent, m_options.allowCredentials); 157 m_handle = ResourceHandle::create(m_request, this, m_defersLoading, m_op tions.sniffContent == SniffContent, m_options.allowCredentials);
150 } 158 }
151 159
152 void ResourceLoader::setDefersLoading(bool defers) 160 void ResourceLoader::setDefersLoading(bool defers)
153 { 161 {
154 m_defersLoading = defers; 162 m_defersLoading = defers;
155 if (m_handle) 163 if (m_handle)
156 m_handle->setDefersLoading(defers); 164 m_handle->setDefersLoading(defers);
157 if (!defers && !m_deferredRequest.isNull()) { 165 if (!defers && !m_deferredRequest.isNull()) {
158 m_request = m_deferredRequest; 166 m_request = m_deferredRequest;
159 m_deferredRequest = ResourceRequest(); 167 m_deferredRequest = ResourceRequest();
160 start(); 168 start();
161 } 169 }
162 } 170 }
163 171
172 FrameLoader* ResourceLoader::frameLoader() const
173 {
174 if (!m_frame)
175 return 0;
176 return m_frame->loader();
177 }
178
164 void ResourceLoader::didDownloadData(ResourceHandle*, int length) 179 void ResourceLoader::didDownloadData(ResourceHandle*, int length)
165 { 180 {
166 RefPtr<ResourceLoader> protect(this); 181 RefPtr<ResourceLoader> protect(this);
167 m_resource->didDownloadData(length); 182 m_resource->didDownloadData(length);
168 } 183 }
169 184
170 void ResourceLoader::didFinishLoadingOnePart(double finishTime) 185 void ResourceLoader::didFinishLoadingOnePart(double finishTime)
171 { 186 {
172 // If load has been cancelled after finishing (which could happen with a 187 // If load has been cancelled after finishing (which could happen with a
173 // JavaScript that changes the window location), do nothing. 188 // JavaScript that changes the window location), do nothing.
174 if (m_state == Terminated) 189 if (m_state == Terminated)
175 return; 190 return;
176 191
177 if (m_notifiedLoadComplete) 192 if (m_notifiedLoadComplete)
178 return; 193 return;
179 m_notifiedLoadComplete = true; 194 m_notifiedLoadComplete = true;
180 m_host->didFinishLoading(m_resource, finishTime, m_options); 195 if (m_options.sendLoadCallbacks == SendCallbacks)
196 frameLoader()->notifier()->dispatchDidFinishLoading(m_documentLoader.get (), m_resource->identifier(), finishTime);
181 } 197 }
182 198
183 void ResourceLoader::didChangePriority(ResourceLoadPriority loadPriority) 199 void ResourceLoader::didChangePriority(ResourceLoadPriority loadPriority)
184 { 200 {
185 if (handle()) { 201 if (handle()) {
186 m_host->didChangeLoadingPriority(m_resource, loadPriority); 202 frameLoader()->client()->dispatchDidChangeResourcePriority(m_resource->i dentifier(), loadPriority);
187 handle()->didChangePriority(loadPriority); 203 handle()->didChangePriority(loadPriority);
188 } 204 }
189 } 205 }
190 206
191 void ResourceLoader::cancelIfNotFinishing() 207 void ResourceLoader::cancelIfNotFinishing()
192 { 208 {
193 if (m_state != Initialized) 209 if (m_state != Initialized)
194 return; 210 return;
195 cancel(); 211 cancel();
196 } 212 }
(...skipping 22 matching lines...) Expand all
219 LOG(ResourceLoading, "Cancelled load of '%s'.\n", m_resource->url().string() .latin1().data()); 235 LOG(ResourceLoading, "Cancelled load of '%s'.\n", m_resource->url().string() .latin1().data());
220 if (m_state == Initialized) 236 if (m_state == Initialized)
221 m_state = Finishing; 237 m_state = Finishing;
222 m_resource->setResourceError(nonNullError); 238 m_resource->setResourceError(nonNullError);
223 239
224 if (m_handle) { 240 if (m_handle) {
225 m_handle->cancel(); 241 m_handle->cancel();
226 m_handle = 0; 242 m_handle = 0;
227 } 243 }
228 244
229 m_host->didFailLoading(m_resource, nonNullError, m_options); 245 if (m_options.sendLoadCallbacks == SendCallbacks && !m_notifiedLoadComplete)
246 frameLoader()->notifier()->dispatchDidFail(m_documentLoader.get(), m_res ource->identifier(), nonNullError);
230 247
231 if (m_state == Finishing) 248 if (m_state == Finishing)
232 m_resource->error(CachedResource::LoadError); 249 m_resource->error(CachedResource::LoadError);
233 if (m_state != Terminated) 250 if (m_state != Terminated)
234 releaseResources(); 251 releaseResources();
235 } 252 }
236 253
237 void ResourceLoader::willSendRequest(ResourceHandle*, ResourceRequest& request, const ResourceResponse& redirectResponse) 254 void ResourceLoader::willSendRequest(ResourceHandle*, ResourceRequest& request, const ResourceResponse& redirectResponse)
238 { 255 {
239 // Store the previous URL because we may modify it. 256 // Store the previous URL because we may modify it.
240 KURL previousURL = m_request.url(); 257 KURL previousURL = m_request.url();
241 RefPtr<ResourceLoader> protect(this); 258 RefPtr<ResourceLoader> protect(this);
242 259
243 ASSERT(!request.isNull()); 260 ASSERT(!request.isNull());
244 if (!redirectResponse.isNull()) { 261 if (!redirectResponse.isNull()) {
245 if (!m_host->shouldRequest(m_resource, request, m_options)) { 262 if (!m_documentLoader->cachedResourceLoader()->canRequest(m_resource->ty pe(), request.url(), m_options)) {
246 cancel(); 263 cancel();
247 return; 264 return;
248 } 265 }
249 266 if (m_resource->type() == CachedResource::ImageResource && m_documentLoa der->cachedResourceLoader()->shouldDeferImageLoad(request.url())) {
267 cancel();
268 return;
269 }
250 m_resource->willSendRequest(request, redirectResponse); 270 m_resource->willSendRequest(request, redirectResponse);
251 } 271 }
252 272
253 if (request.isNull() || m_state == Terminated) 273 if (request.isNull() || m_state == Terminated)
254 return; 274 return;
255 275
256 m_host->willSendRequest(m_resource, request, redirectResponse, m_options); 276 if (m_options.sendLoadCallbacks == SendCallbacks)
277 frameLoader()->notifier()->dispatchWillSendRequest(m_documentLoader.get( ), m_resource->identifier(), request, redirectResponse, m_options.initiatorInfo) ;
278 else
279 InspectorInstrumentation::willSendRequest(m_frame.get(), m_resource->ide ntifier(), m_documentLoader.get(), request, redirectResponse, m_options.initiato rInfo);
280
257 m_request = request; 281 m_request = request;
258 282
259 if (request.isNull()) 283 if (request.isNull())
260 cancel(); 284 cancel();
261 } 285 }
262 286
263 void ResourceLoader::didReceiveCachedMetadata(ResourceHandle*, const char* data, int length) 287 void ResourceLoader::didReceiveCachedMetadata(ResourceHandle*, const char* data, int length)
264 { 288 {
265 ASSERT(m_state == Initialized); 289 ASSERT(m_state == Initialized);
266 m_resource->setSerializedCachedMetadata(data, length); 290 m_resource->setSerializedCachedMetadata(data, length);
(...skipping 11 matching lines...) Expand all
278 ASSERT(!response.isNull()); 302 ASSERT(!response.isNull());
279 ASSERT(m_state == Initialized); 303 ASSERT(m_state == Initialized);
280 304
281 // Reference the object in this method since the additional processing can d o 305 // Reference the object in this method since the additional processing can d o
282 // anything including removing the last reference to this object. 306 // anything including removing the last reference to this object.
283 RefPtr<ResourceLoader> protect(this); 307 RefPtr<ResourceLoader> protect(this);
284 m_resource->responseReceived(response); 308 m_resource->responseReceived(response);
285 if (m_state == Terminated) 309 if (m_state == Terminated)
286 return; 310 return;
287 311
288 m_host->didReceiveResponse(m_resource, response, m_options); 312 if (m_options.sendLoadCallbacks == SendCallbacks)
313 frameLoader()->notifier()->dispatchDidReceiveResponse(m_documentLoader.g et(), m_resource->identifier(), response);
289 314
290 if (response.isMultipart()) { 315 if (response.isMultipart()) {
291 m_loadingMultipartContent = true; 316 m_loadingMultipartContent = true;
292 317
293 // We don't count multiParts in a CachedResourceLoader's request count 318 // We don't count multiParts in a CachedResourceLoader's request count
294 m_requestCountTracker.clear(); 319 m_requestCountTracker.clear();
295 if (!m_resource->isImage()) { 320 if (!m_resource->isImage()) {
296 cancel(); 321 cancel();
297 return; 322 return;
298 } 323 }
299 } else if (m_loadingMultipartContent) { 324 } else if (m_loadingMultipartContent) {
300 // Since a subresource loader does not load multipart sections progressi vely, data was delivered to the loader all at once. 325 // Since a subresource loader does not load multipart sections progressi vely, data was delivered to the loader all at once.
301 // After the first multipart section is complete, signal to delegates th at this load is "finished" 326 // After the first multipart section is complete, signal to delegates th at this load is "finished"
302 m_host->subresourceLoaderFinishedLoadingOnePart(this); 327 m_documentLoader->subresourceLoaderFinishedLoadingOnePart(this);
303 didFinishLoadingOnePart(0); 328 didFinishLoadingOnePart(0);
304 } 329 }
305 330
306 if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnor eHTTPStatusCodeErrors()) 331 if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnor eHTTPStatusCodeErrors())
307 return; 332 return;
308 m_state = Finishing; 333 m_state = Finishing;
309 m_resource->error(CachedResource::LoadError); 334 m_resource->error(CachedResource::LoadError);
310 cancel(); 335 cancel();
311 } 336 }
312 337
313 void ResourceLoader::didReceiveData(ResourceHandle*, const char* data, int lengt h, int encodedDataLength) 338 void ResourceLoader::didReceiveData(ResourceHandle*, const char* data, int lengt h, int encodedDataLength)
314 { 339 {
315 // It is possible to receive data on uninitialized resources if it had an er ror status code, and we are running a nested message 340 // It is possible to receive data on uninitialized resources if it had an er ror status code, and we are running a nested message
316 // loop. When this occurs, ignoring the data is the correct action. 341 // loop. When this occurs, ignoring the data is the correct action.
317 if (m_resource->response().httpStatusCode() >= 400 && !m_resource->shouldIgn oreHTTPStatusCodeErrors()) 342 if (m_resource->response().httpStatusCode() >= 400 && !m_resource->shouldIgn oreHTTPStatusCodeErrors())
318 return; 343 return;
319 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willReceiv eResourceData(m_host->inspectedFrame(), m_resource->identifier(), encodedDataLen gth); 344 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willReceiv eResourceData(m_frame.get(), m_resource->identifier(), encodedDataLength);
320 ASSERT(m_state == Initialized); 345 ASSERT(m_state == Initialized);
321 346
322 // Reference the object in this method since the additional processing can d o 347 // Reference the object in this method since the additional processing can d o
323 // anything including removing the last reference to this object. 348 // anything including removing the last reference to this object.
324 RefPtr<ResourceLoader> protect(this); 349 RefPtr<ResourceLoader> protect(this);
325 350
326 // FIXME: If we get a resource with more than 2B bytes, this code won't do t he right thing. 351 // FIXME: If we get a resource with more than 2B bytes, this code won't do t he right thing.
327 // However, with today's computers and networking speeds, this won't happen in practice. 352 // However, with today's computers and networking speeds, this won't happen in practice.
328 // Could be an issue with a giant local file. 353 // Could be an issue with a giant local file.
329 m_host->didReceiveData(m_resource, data, length, encodedDataLength, m_option s); 354 if (m_options.sendLoadCallbacks == SendCallbacks && m_frame)
355 frameLoader()->notifier()->dispatchDidReceiveData(m_documentLoader.get() , m_resource->identifier(), data, length, static_cast<int>(encodedDataLength));
356
330 m_resource->appendData(data, length); 357 m_resource->appendData(data, length);
331 358
332 InspectorInstrumentation::didReceiveResourceData(cookie); 359 InspectorInstrumentation::didReceiveResourceData(cookie);
333 } 360 }
334 361
335 void ResourceLoader::didFinishLoading(ResourceHandle*, double finishTime) 362 void ResourceLoader::didFinishLoading(ResourceHandle*, double finishTime)
336 { 363 {
337 if (m_state != Initialized) 364 if (m_state != Initialized)
338 return; 365 return;
339 ASSERT(m_state != Terminated); 366 ASSERT(m_state != Terminated);
(...skipping 11 matching lines...) Expand all
351 return; 378 return;
352 releaseResources(); 379 releaseResources();
353 } 380 }
354 381
355 void ResourceLoader::didFail(ResourceHandle*, const ResourceError& error) 382 void ResourceLoader::didFail(ResourceHandle*, const ResourceError& error)
356 { 383 {
357 ASSERT(m_state != Terminated); 384 ASSERT(m_state != Terminated);
358 LOG(ResourceLoading, "Failed to load '%s'.\n", m_resource->url().string().la tin1().data()); 385 LOG(ResourceLoading, "Failed to load '%s'.\n", m_resource->url().string().la tin1().data());
359 386
360 RefPtr<ResourceLoader> protect(this); 387 RefPtr<ResourceLoader> protect(this);
361 RefPtr<ResourceLoaderHost> protectHost(m_host);
362 CachedResourceHandle<CachedResource> protectResource(m_resource); 388 CachedResourceHandle<CachedResource> protectResource(m_resource);
363 m_state = Finishing; 389 m_state = Finishing;
364 m_resource->setResourceError(error); 390 m_resource->setResourceError(error);
365 m_resource->error(CachedResource::LoadError); 391 m_resource->error(CachedResource::LoadError);
366 392
367 if (m_state == Terminated) 393 if (m_state == Terminated)
368 return; 394 return;
369 395
370 if (!m_notifiedLoadComplete) { 396 if (!m_notifiedLoadComplete) {
371 m_notifiedLoadComplete = true; 397 m_notifiedLoadComplete = true;
372 m_host->didFailLoading(m_resource, error, m_options); 398 if (m_options.sendLoadCallbacks == SendCallbacks)
399 frameLoader()->notifier()->dispatchDidFail(m_documentLoader.get(), m _resource->identifier(), error);
373 } 400 }
374 401
375 releaseResources(); 402 releaseResources();
376 } 403 }
377 404
378 bool ResourceLoader::isLoadedBy(ResourceLoaderHost* loader) const
379 {
380 return m_host->isLoadedBy(loader);
381 } 405 }
382
383 }
OLDNEW
« no previous file with comments | « trunk/Source/core/loader/ResourceLoader.h ('k') | trunk/Source/core/loader/ResourceLoaderHost.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698