| OLD | NEW |
| 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) 2002 Waldo Bastian (bastian@kde.org) | 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) |
| 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. | 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. |
| 6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ | 6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ |
| 7 | 7 |
| 8 This library is free software; you can redistribute it and/or | 8 This library is free software; you can redistribute it and/or |
| 9 modify it under the terms of the GNU Library General Public | 9 modify it under the terms of the GNU Library General Public |
| 10 License as published by the Free Software Foundation; either | 10 License as published by the Free Software Foundation; either |
| (...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 802 ASSERT(resource->url() == url.string()); | 802 ASSERT(resource->url() == url.string()); |
| 803 m_documentResources.set(resource->url(), resource); | 803 m_documentResources.set(resource->url(), resource); |
| 804 return resource; | 804 return resource; |
| 805 } | 805 } |
| 806 | 806 |
| 807 void ResourceFetcher::resourceTimingReportTimerFired(Timer<ResourceFetcher>* tim
er) | 807 void ResourceFetcher::resourceTimingReportTimerFired(Timer<ResourceFetcher>* tim
er) |
| 808 { | 808 { |
| 809 ASSERT_UNUSED(timer, timer == &m_resourceTimingReportTimer); | 809 ASSERT_UNUSED(timer, timer == &m_resourceTimingReportTimer); |
| 810 HashMap<RefPtr<ResourceTimingInfo>, bool> timingReports; | 810 HashMap<RefPtr<ResourceTimingInfo>, bool> timingReports; |
| 811 timingReports.swap(m_scheduledResourceTimingReports); | 811 timingReports.swap(m_scheduledResourceTimingReports); |
| 812 HashMap<RefPtr<ResourceTimingInfo>, bool>::iterator end = timingReports.end(
); | 812 for (const auto& timingInfo : timingReports) |
| 813 for (HashMap<RefPtr<ResourceTimingInfo>, bool>::iterator it = timingReports.
begin(); it != end; ++it) { | 813 reportResourceTiming(timingInfo.key.get(), document(), timingInfo.value)
; |
| 814 RefPtr<ResourceTimingInfo> info = it->key; | |
| 815 bool isMainResource = it->value; | |
| 816 reportResourceTiming(info.get(), document(), isMainResource); | |
| 817 } | |
| 818 } | 814 } |
| 819 | 815 |
| 820 void ResourceFetcher::determineRequestContext(ResourceRequest& request, Resource
::Type type) | 816 void ResourceFetcher::determineRequestContext(ResourceRequest& request, Resource
::Type type) |
| 821 { | 817 { |
| 822 WebURLRequest::RequestContext requestContext = requestContextFromType(this,
type); | 818 WebURLRequest::RequestContext requestContext = requestContextFromType(this,
type); |
| 823 request.setRequestContext(requestContext); | 819 request.setRequestContext(requestContext); |
| 824 } | 820 } |
| 825 | 821 |
| 826 ResourceRequestCachePolicy ResourceFetcher::resourceRequestCachePolicy(const Res
ourceRequest& request, Resource::Type type) | 822 ResourceRequestCachePolicy ResourceFetcher::resourceRequestCachePolicy(const Res
ourceRequest& request, Resource::Type type) |
| 827 { | 823 { |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1130 return frame() && !frame()->loader().client()->allowImage(m_imagesEnabled, u
rl); | 1126 return frame() && !frame()->loader().client()->allowImage(m_imagesEnabled, u
rl); |
| 1131 } | 1127 } |
| 1132 | 1128 |
| 1133 bool ResourceFetcher::shouldDeferImageLoad(const KURL& url) const | 1129 bool ResourceFetcher::shouldDeferImageLoad(const KURL& url) const |
| 1134 { | 1130 { |
| 1135 return clientDefersImage(url) || !m_autoLoadImages; | 1131 return clientDefersImage(url) || !m_autoLoadImages; |
| 1136 } | 1132 } |
| 1137 | 1133 |
| 1138 void ResourceFetcher::reloadImagesIfNotDeferred() | 1134 void ResourceFetcher::reloadImagesIfNotDeferred() |
| 1139 { | 1135 { |
| 1140 DocumentResourceMap::iterator end = m_documentResources.end(); | 1136 for (const auto& documentResource : m_documentResources) { |
| 1141 for (DocumentResourceMap::iterator it = m_documentResources.begin(); it != e
nd; ++it) { | 1137 Resource* resource = documentResource.value.get(); |
| 1142 Resource* resource = it->value.get(); | |
| 1143 if (resource->type() == Resource::Image && resource->stillNeedsLoad() &&
!clientDefersImage(resource->url())) | 1138 if (resource->type() == Resource::Image && resource->stillNeedsLoad() &&
!clientDefersImage(resource->url())) |
| 1144 const_cast<Resource*>(resource)->load(this, defaultResourceOptions()
); | 1139 const_cast<Resource*>(resource)->load(this, defaultResourceOptions()
); |
| 1145 } | 1140 } |
| 1146 } | 1141 } |
| 1147 | 1142 |
| 1148 void ResourceFetcher::redirectReceived(Resource* resource, const ResourceRespons
e& redirectResponse) | 1143 void ResourceFetcher::redirectReceived(Resource* resource, const ResourceRespons
e& redirectResponse) |
| 1149 { | 1144 { |
| 1150 ResourceTimingInfoMap::iterator it = m_resourceTimingInfoMap.find(resource); | 1145 ResourceTimingInfoMap::iterator it = m_resourceTimingInfoMap.find(resource); |
| 1151 if (it != m_resourceTimingInfoMap.end()) | 1146 if (it != m_resourceTimingInfoMap.end()) |
| 1152 it->value->addRedirect(redirectResponse); | 1147 it->value->addRedirect(redirectResponse); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1188 { | 1183 { |
| 1189 ASSERT_UNUSED(timer, timer == &m_garbageCollectDocumentResourcesTimer); | 1184 ASSERT_UNUSED(timer, timer == &m_garbageCollectDocumentResourcesTimer); |
| 1190 garbageCollectDocumentResources(); | 1185 garbageCollectDocumentResources(); |
| 1191 } | 1186 } |
| 1192 | 1187 |
| 1193 void ResourceFetcher::garbageCollectDocumentResources() | 1188 void ResourceFetcher::garbageCollectDocumentResources() |
| 1194 { | 1189 { |
| 1195 typedef Vector<String, 10> StringVector; | 1190 typedef Vector<String, 10> StringVector; |
| 1196 StringVector resourcesToDelete; | 1191 StringVector resourcesToDelete; |
| 1197 | 1192 |
| 1198 for (DocumentResourceMap::iterator it = m_documentResources.begin(); it != m
_documentResources.end(); ++it) { | 1193 for (const auto& documentResource : m_documentResources) { |
| 1199 if (it->value->hasOneHandle()) | 1194 if (documentResource.value->hasOneHandle()) |
| 1200 resourcesToDelete.append(it->key); | 1195 resourcesToDelete.append(documentResource.key); |
| 1201 } | 1196 } |
| 1202 | 1197 |
| 1203 m_documentResources.removeAll(resourcesToDelete); | 1198 m_documentResources.removeAll(resourcesToDelete); |
| 1204 } | 1199 } |
| 1205 | 1200 |
| 1206 void ResourceFetcher::notifyLoadedFromMemoryCache(Resource* resource) | 1201 void ResourceFetcher::notifyLoadedFromMemoryCache(Resource* resource) |
| 1207 { | 1202 { |
| 1208 if (!frame() || !frame()->page() || resource->status() != Resource::Cached |
| m_validatedURLs.contains(resource->url())) | 1203 if (!frame() || !frame()->page() || resource->status() != Resource::Cached |
| m_validatedURLs.contains(resource->url())) |
| 1209 return; | 1204 return; |
| 1210 | 1205 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1270 #if PRELOAD_DEBUG | 1265 #if PRELOAD_DEBUG |
| 1271 printf("PRELOADING %s\n", resource->url().string().latin1().data()); | 1266 printf("PRELOADING %s\n", resource->url().string().latin1().data()); |
| 1272 #endif | 1267 #endif |
| 1273 } | 1268 } |
| 1274 | 1269 |
| 1275 bool ResourceFetcher::isPreloaded(const String& urlString) const | 1270 bool ResourceFetcher::isPreloaded(const String& urlString) const |
| 1276 { | 1271 { |
| 1277 const KURL& url = m_document->completeURL(urlString); | 1272 const KURL& url = m_document->completeURL(urlString); |
| 1278 | 1273 |
| 1279 if (m_preloads) { | 1274 if (m_preloads) { |
| 1280 ListHashSet<Resource*>::iterator end = m_preloads->end(); | 1275 for (const auto& resource : *m_preloads) { |
| 1281 for (ListHashSet<Resource*>::iterator it = m_preloads->begin(); it != en
d; ++it) { | |
| 1282 Resource* resource = *it; | |
| 1283 if (resource->url() == url) | 1276 if (resource->url() == url) |
| 1284 return true; | 1277 return true; |
| 1285 } | 1278 } |
| 1286 } | 1279 } |
| 1287 | 1280 |
| 1288 return false; | 1281 return false; |
| 1289 } | 1282 } |
| 1290 | 1283 |
| 1291 void ResourceFetcher::clearPreloads() | 1284 void ResourceFetcher::clearPreloads() |
| 1292 { | 1285 { |
| 1293 #if PRELOAD_DEBUG | 1286 #if PRELOAD_DEBUG |
| 1294 printPreloadStats(); | 1287 printPreloadStats(); |
| 1295 #endif | 1288 #endif |
| 1296 if (!m_preloads) | 1289 if (!m_preloads) |
| 1297 return; | 1290 return; |
| 1298 | 1291 |
| 1299 ListHashSet<Resource*>::iterator end = m_preloads->end(); | 1292 for (const auto& resource : *m_preloads) { |
| 1300 for (ListHashSet<Resource*>::iterator it = m_preloads->begin(); it != end; +
+it) { | 1293 resource->decreasePreloadCount(); |
| 1301 Resource* res = *it; | 1294 bool deleted = resource->deleteIfPossible(); |
| 1302 res->decreasePreloadCount(); | 1295 if (!deleted && resource->preloadResult() == Resource::PreloadNotReferen
ced) |
| 1303 bool deleted = res->deleteIfPossible(); | 1296 memoryCache()->remove(resource); |
| 1304 if (!deleted && res->preloadResult() == Resource::PreloadNotReferenced) | |
| 1305 memoryCache()->remove(res); | |
| 1306 } | 1297 } |
| 1307 m_preloads.clear(); | 1298 m_preloads.clear(); |
| 1308 } | 1299 } |
| 1309 | 1300 |
| 1310 void ResourceFetcher::didFinishLoading(const Resource* resource, double finishTi
me, int64_t encodedDataLength) | 1301 void ResourceFetcher::didFinishLoading(const Resource* resource, double finishTi
me, int64_t encodedDataLength) |
| 1311 { | 1302 { |
| 1312 TRACE_EVENT_ASYNC_END0("net", "Resource", resource); | 1303 TRACE_EVENT_ASYNC_END0("net", "Resource", resource); |
| 1313 context().dispatchDidFinishLoading(m_documentLoader, resource->identifier(),
finishTime, encodedDataLength); | 1304 context().dispatchDidFinishLoading(m_documentLoader, resource->identifier(),
finishTime, encodedDataLength); |
| 1314 } | 1305 } |
| 1315 | 1306 |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1465 { | 1456 { |
| 1466 if (!m_preloads) | 1457 if (!m_preloads) |
| 1467 return; | 1458 return; |
| 1468 | 1459 |
| 1469 unsigned scripts = 0; | 1460 unsigned scripts = 0; |
| 1470 unsigned scriptMisses = 0; | 1461 unsigned scriptMisses = 0; |
| 1471 unsigned stylesheets = 0; | 1462 unsigned stylesheets = 0; |
| 1472 unsigned stylesheetMisses = 0; | 1463 unsigned stylesheetMisses = 0; |
| 1473 unsigned images = 0; | 1464 unsigned images = 0; |
| 1474 unsigned imageMisses = 0; | 1465 unsigned imageMisses = 0; |
| 1475 ListHashSet<Resource*>::iterator end = m_preloads->end(); | 1466 for (const auto& resource : *m_preloads) { |
| 1476 for (ListHashSet<Resource*>::iterator it = m_preloads->begin(); it != end; +
+it) { | 1467 if (resource->preloadResult() == Resource::PreloadNotReferenced) |
| 1477 Resource* res = *it; | 1468 printf("!! UNREFERENCED PRELOAD %s\n", resource->url().string().lati
n1().data()); |
| 1478 if (res->preloadResult() == Resource::PreloadNotReferenced) | 1469 else if (resource->preloadResult() == Resource::PreloadReferencedWhileCo
mplete) |
| 1479 printf("!! UNREFERENCED PRELOAD %s\n", res->url().string().latin1().
data()); | 1470 printf("HIT COMPLETE PRELOAD %s\n", resource->url().string().latin1(
).data()); |
| 1480 else if (res->preloadResult() == Resource::PreloadReferencedWhileComplet
e) | 1471 else if (resource->preloadResult() == Resource::PreloadReferencedWhileLo
ading) |
| 1481 printf("HIT COMPLETE PRELOAD %s\n", res->url().string().latin1().dat
a()); | 1472 printf("HIT LOADING PRELOAD %s\n", resource->url().string().latin1()
.data()); |
| 1482 else if (res->preloadResult() == Resource::PreloadReferencedWhileLoading
) | |
| 1483 printf("HIT LOADING PRELOAD %s\n", res->url().string().latin1().data
()); | |
| 1484 | 1473 |
| 1485 if (res->type() == Resource::Script) { | 1474 if (resource->type() == Resource::Script) { |
| 1486 scripts++; | 1475 scripts++; |
| 1487 if (res->preloadResult() < Resource::PreloadReferencedWhileLoading) | 1476 if (resource->preloadResult() < Resource::PreloadReferencedWhileLoad
ing) |
| 1488 scriptMisses++; | 1477 scriptMisses++; |
| 1489 } else if (res->type() == Resource::CSSStyleSheet) { | 1478 } else if (resource->type() == Resource::CSSStyleSheet) { |
| 1490 stylesheets++; | 1479 stylesheets++; |
| 1491 if (res->preloadResult() < Resource::PreloadReferencedWhileLoading) | 1480 if (resource->preloadResult() < Resource::PreloadReferencedWhileLoad
ing) |
| 1492 stylesheetMisses++; | 1481 stylesheetMisses++; |
| 1493 } else { | 1482 } else { |
| 1494 images++; | 1483 images++; |
| 1495 if (res->preloadResult() < Resource::PreloadReferencedWhileLoading) | 1484 if (resource->preloadResult() < Resource::PreloadReferencedWhileLoad
ing) |
| 1496 imageMisses++; | 1485 imageMisses++; |
| 1497 } | 1486 } |
| 1498 | 1487 |
| 1499 if (res->errorOccurred()) | 1488 if (resource->errorOccurred()) |
| 1500 memoryCache()->remove(res); | 1489 memoryCache()->remove(resource); |
| 1501 | 1490 |
| 1502 res->decreasePreloadCount(); | 1491 resource->decreasePreloadCount(); |
| 1503 } | 1492 } |
| 1504 m_preloads.clear(); | 1493 m_preloads.clear(); |
| 1505 | 1494 |
| 1506 if (scripts) | 1495 if (scripts) |
| 1507 printf("SCRIPTS: %d (%d hits, hit rate %d%%)\n", scripts, scripts - scri
ptMisses, (scripts - scriptMisses) * 100 / scripts); | 1496 printf("SCRIPTS: %d (%d hits, hit rate %d%%)\n", scripts, scripts - scri
ptMisses, (scripts - scriptMisses) * 100 / scripts); |
| 1508 if (stylesheets) | 1497 if (stylesheets) |
| 1509 printf("STYLESHEETS: %d (%d hits, hit rate %d%%)\n", stylesheets, styles
heets - stylesheetMisses, (stylesheets - stylesheetMisses) * 100 / stylesheets); | 1498 printf("STYLESHEETS: %d (%d hits, hit rate %d%%)\n", stylesheets, styles
heets - stylesheetMisses, (stylesheets - stylesheetMisses) * 100 / stylesheets); |
| 1510 if (images) | 1499 if (images) |
| 1511 printf("IMAGES: %d (%d hits, hit rate %d%%)\n", images, images - imageM
isses, (images - imageMisses) * 100 / images); | 1500 printf("IMAGES: %d (%d hits, hit rate %d%%)\n", images, images - imageM
isses, (images - imageMisses) * 100 / images); |
| 1512 } | 1501 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1553 | 1542 |
| 1554 void ResourceFetcher::trace(Visitor* visitor) | 1543 void ResourceFetcher::trace(Visitor* visitor) |
| 1555 { | 1544 { |
| 1556 visitor->trace(m_document); | 1545 visitor->trace(m_document); |
| 1557 visitor->trace(m_loaders); | 1546 visitor->trace(m_loaders); |
| 1558 visitor->trace(m_multipartLoaders); | 1547 visitor->trace(m_multipartLoaders); |
| 1559 ResourceLoaderHost::trace(visitor); | 1548 ResourceLoaderHost::trace(visitor); |
| 1560 } | 1549 } |
| 1561 | 1550 |
| 1562 } | 1551 } |
| OLD | NEW |