Changeset 164947 in webkit
- Timestamp:
- Mar 2, 2014 12:34:51 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r164943 r164947 1 2014-03-02 Brian Burg <bburg@apple.com> 2 3 DocumentLoader should keep maps of ResourceLoaders instead of sets 4 https://bugs.webkit.org/show_bug.cgi?id=129388 5 6 Reviewed by Darin Adler. 7 8 For web replay, we need to be able to pull a ResourceLoader instance by 9 identifier from the DocumentLoader. This is easy to do if we convert 10 ResourceLoaderSet to ResourceLoaderMap, keyed by the loader's identifier. 11 12 Added assertions whenever adding or removing from the map to ensure 13 that we don't try to add duplicates or resources with zero identifiers. 14 15 No new tests required. No functionality was added. 16 17 * loader/DocumentLoader.cpp: 18 (WebCore::cancelAll): 19 (WebCore::setAllDefersLoading): 20 (WebCore::areAllLoadersPageCacheAcceptable): 21 (WebCore::DocumentLoader::addSubresourceLoader): 22 (WebCore::DocumentLoader::removeSubresourceLoader): 23 (WebCore::DocumentLoader::addPlugInStreamLoader): 24 (WebCore::DocumentLoader::removePlugInStreamLoader): 25 (WebCore::DocumentLoader::subresourceLoaderFinishedLoadingOnePart): 26 * loader/DocumentLoader.h: 27 * loader/NetscapePlugInStreamLoader.cpp: 28 (WebCore::NetscapePlugInStreamLoader::create): Only add the loader 29 to the document loader's map if it initialized successfully. 30 The old code was probably leaking resource loaders that failed to 31 initialize. 32 33 * loader/mac/DocumentLoaderMac.cpp: 34 (WebCore::scheduleAll): 35 (WebCore::unscheduleAll): 36 1 37 2014-03-02 Dirkjan Ochtman <d.ochtman@activevideo.com> 2 38 -
trunk/Source/WebCore/loader/DocumentLoader.cpp
r164822 r164947 79 79 namespace WebCore { 80 80 81 static void cancelAll(const ResourceLoader Set& loaders)81 static void cancelAll(const ResourceLoaderMap& loaders) 82 82 { 83 83 Vector<RefPtr<ResourceLoader>> loadersCopy; 84 copyToVector(loaders, loadersCopy); 85 size_t size = loadersCopy.size(); 86 for (size_t i = 0; i < size; ++i) 87 loadersCopy[i]->cancel(); 88 } 89 90 static void setAllDefersLoading(const ResourceLoaderSet& loaders, bool defers) 84 copyValuesToVector(loaders, loadersCopy); 85 for (auto& loader : loadersCopy) 86 loader->cancel(); 87 } 88 89 static void setAllDefersLoading(const ResourceLoaderMap& loaders, bool defers) 91 90 { 92 91 Vector<RefPtr<ResourceLoader>> loadersCopy; 93 copyToVector(loaders, loadersCopy); 94 size_t size = loadersCopy.size(); 95 for (size_t i = 0; i < size; ++i) 96 loadersCopy[i]->setDefersLoading(defers); 97 } 98 99 static bool areAllLoadersPageCacheAcceptable(const ResourceLoaderSet& loaders) 92 copyValuesToVector(loaders, loadersCopy); 93 for (auto& loader : loadersCopy) 94 loader->setDefersLoading(defers); 95 } 96 97 static bool areAllLoadersPageCacheAcceptable(const ResourceLoaderMap& loaders) 100 98 { 101 99 Vector<RefPtr<ResourceLoader>> loadersCopy; 102 copy ToVector(loaders, loadersCopy);100 copyValuesToVector(loaders, loadersCopy); 103 101 for (auto& loader : loadersCopy) { 104 102 ResourceHandle* handle = loader->handle(); … … 1339 1337 if (!m_gotFirstByte) 1340 1338 return; 1341 ASSERT(!m_subresourceLoaders.contains(loader)); 1339 ASSERT(loader->identifier()); 1340 ASSERT(!m_subresourceLoaders.contains(loader->identifier())); 1342 1341 ASSERT(!mainResourceLoader() || mainResourceLoader() != loader); 1343 m_subresourceLoaders.add(loader); 1342 1343 m_subresourceLoaders.add(loader->identifier(), loader); 1344 1344 } 1345 1345 1346 1346 void DocumentLoader::removeSubresourceLoader(ResourceLoader* loader) 1347 1347 { 1348 if (!m_subresourceLoaders.remove(loader)) 1348 ASSERT(loader->identifier()); 1349 1350 if (!m_subresourceLoaders.remove(loader->identifier())) 1349 1351 return; 1350 1352 checkLoadComplete(); … … 1355 1357 void DocumentLoader::addPlugInStreamLoader(ResourceLoader* loader) 1356 1358 { 1357 m_plugInStreamLoaders.add(loader); 1359 ASSERT(loader->identifier()); 1360 ASSERT(!m_plugInStreamLoaders.contains(loader->identifier())); 1361 1362 m_plugInStreamLoaders.add(loader->identifier(), loader); 1358 1363 } 1359 1364 1360 1365 void DocumentLoader::removePlugInStreamLoader(ResourceLoader* loader) 1361 1366 { 1362 m_plugInStreamLoaders.remove(loader); 1367 ASSERT(loader->identifier()); 1368 ASSERT(loader == m_plugInStreamLoaders.get(loader->identifier())); 1369 1370 m_plugInStreamLoaders.remove(loader->identifier()); 1363 1371 checkLoadComplete(); 1364 1372 } … … 1485 1493 void DocumentLoader::subresourceLoaderFinishedLoadingOnePart(ResourceLoader* loader) 1486 1494 { 1487 m_multipartSubresourceLoaders.add(loader); 1488 m_subresourceLoaders.remove(loader); 1495 ASSERT(loader->identifier()); 1496 ASSERT(!m_multipartSubresourceLoaders.contains(loader->identifier())); 1497 ASSERT(m_subresourceLoaders.contains(loader->identifier())); 1498 1499 m_multipartSubresourceLoaders.add(loader->identifier(), loader); 1500 m_subresourceLoaders.remove(loader->identifier()); 1489 1501 checkLoadComplete(); 1490 1502 if (Frame* frame = m_frame) -
trunk/Source/WebCore/loader/DocumentLoader.h
r163725 r164947 75 75 class SubstituteResource; 76 76 77 typedef Hash Set<RefPtr<ResourceLoader>> ResourceLoaderSet;77 typedef HashMap<unsigned long, RefPtr<ResourceLoader>> ResourceLoaderMap; 78 78 typedef Vector<ResourceResponse> ResponseVector; 79 79 … … 332 332 333 333 CachedResourceHandle<CachedRawResource> m_mainResource; 334 ResourceLoader Setm_subresourceLoaders;335 ResourceLoader Setm_multipartSubresourceLoaders;336 ResourceLoader Setm_plugInStreamLoaders;334 ResourceLoaderMap m_subresourceLoaders; 335 ResourceLoaderMap m_multipartSubresourceLoaders; 336 ResourceLoaderMap m_plugInStreamLoaders; 337 337 338 338 mutable DocumentWriter m_writer; -
trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp
r161338 r164947 50 50 { 51 51 RefPtr<NetscapePlugInStreamLoader> loader(adoptRef(new NetscapePlugInStreamLoader(frame, client))); 52 loader->documentLoader()->addPlugInStreamLoader(loader.get());53 52 if (!loader->init(request)) 54 53 return 0; 55 54 55 loader->documentLoader()->addPlugInStreamLoader(loader.get()); 56 56 return loader.release(); 57 57 } -
trunk/Source/WebCore/loader/mac/DocumentLoaderMac.cpp
r160841 r164947 36 36 37 37 #if !PLATFORM(IOS) 38 static void scheduleAll(const ResourceLoader Set& loaders, SchedulePair* pair)38 static void scheduleAll(const ResourceLoaderMap& loaders, SchedulePair* pair) 39 39 { 40 const ResourceLoaderSet copy = loaders;41 ResourceLoaderSet::const_iterator end = copy.end();42 for ( ResourceLoaderSet::const_iterator it = copy.begin(); it != end; ++it)43 if (ResourceHandle* handle = (*it)->handle())40 Vector<RefPtr<ResourceLoader>> loadersCopy; 41 copyValuesToVector(loaders, loadersCopy); 42 for (auto& loader : loadersCopy) { 43 if (ResourceHandle* handle = loader->handle()) 44 44 handle->schedule(pair); 45 } 45 46 } 46 47 47 static void unscheduleAll(const ResourceLoader Set& loaders, SchedulePair* pair)48 static void unscheduleAll(const ResourceLoaderMap& loaders, SchedulePair* pair) 48 49 { 49 const ResourceLoaderSet copy = loaders;50 ResourceLoaderSet::const_iterator end = copy.end();51 for ( ResourceLoaderSet::const_iterator it = copy.begin(); it != end; ++it)52 if (ResourceHandle* handle = (*it)->handle())50 Vector<RefPtr<ResourceLoader>> loadersCopy; 51 copyValuesToVector(loaders, loadersCopy); 52 for (auto& loader : loadersCopy) { 53 if (ResourceHandle* handle = loader->handle()) 53 54 handle->unschedule(pair); 55 } 54 56 } 55 57 #endif
Note: See TracChangeset
for help on using the changeset viewer.