Changeset 203079 in webkit
- Timestamp:
- Jul 11, 2016, 1:11:03 PM (9 years ago)
- Location:
- trunk/Source
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r203077 r203079 1 2016-07-11 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r203064. 4 https://bugs.webkit.org/show_bug.cgi?id=159642 5 6 This change causes LayoutTest crashes on WK1 ASan (Requested 7 by ryanhaddad on #webkit). 8 9 Reverted changeset: 10 11 "Use refs for ResourceLoaders" 12 https://bugs.webkit.org/show_bug.cgi?id=159592 13 http://trac.webkit.org/changeset/203064 14 1 15 2016-07-11 Brent Fulgham <bfulgham@apple.com> 2 16 -
trunk/Source/WebCore/loader/LoaderStrategy.h
r203064 r203079 52 52 virtual void loadResourceSynchronously(NetworkingContext*, unsigned long identifier, const ResourceRequest&, StoredCredentials, ClientCredentialPolicy, ResourceError&, ResourceResponse&, Vector<char>& data) = 0; 53 53 54 virtual void remove(ResourceLoader &) = 0;55 virtual void setDefersLoading(ResourceLoader &, bool) = 0;56 virtual void crossOriginRedirectReceived(ResourceLoader &, const URL& redirectURL) = 0;54 virtual void remove(ResourceLoader*) = 0; 55 virtual void setDefersLoading(ResourceLoader*, bool) = 0; 56 virtual void crossOriginRedirectReceived(ResourceLoader*, const URL& redirectURL) = 0; 57 57 58 58 virtual void servePendingRequests(ResourceLoadPriority minimumPriority = ResourceLoadPriority::VeryLow) = 0; -
trunk/Source/WebCore/loader/ResourceLoader.cpp
r203064 r203079 74 74 void ResourceLoader::finishNetworkLoad() 75 75 { 76 platformStrategies()->loaderStrategy()->remove( *this);76 platformStrategies()->loaderStrategy()->remove(this); 77 77 78 78 if (m_handle) { … … 224 224 } 225 225 226 platformStrategies()->loaderStrategy()->setDefersLoading( *this, defers);226 platformStrategies()->loaderStrategy()->setDefersLoading(this, defers); 227 227 } 228 228 … … 280 280 { 281 281 ASSERT(!m_documentLoader->isSubstituteLoadPending(this)); 282 platformStrategies()->loaderStrategy()->remove( *this);282 platformStrategies()->loaderStrategy()->remove(this); 283 283 if (m_handle) 284 284 m_handle->cancel(); … … 368 368 bool isRedirect = !redirectResponse.isNull(); 369 369 if (isRedirect) 370 platformStrategies()->loaderStrategy()->crossOriginRedirectReceived( *this, request.url());370 platformStrategies()->loaderStrategy()->crossOriginRedirectReceived(this, request.url()); 371 371 372 372 m_request = request; -
trunk/Source/WebKit/ChangeLog
r203064 r203079 1 2016-07-11 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r203064. 4 https://bugs.webkit.org/show_bug.cgi?id=159642 5 6 This change causes LayoutTest crashes on WK1 ASan (Requested 7 by ryanhaddad on #webkit). 8 9 Reverted changeset: 10 11 "Use refs for ResourceLoaders" 12 https://bugs.webkit.org/show_bug.cgi?id=159592 13 http://trac.webkit.org/changeset/203064 14 1 15 2016-07-08 Alex Christensen <achristensen@webkit.org> 2 16 -
trunk/Source/WebKit/WebCoreSupport/WebResourceLoadScheduler.cpp
r203064 r203079 68 68 { 69 69 if (!url.protocolIsInHTTPFamily()) 70 return &m_nonHTTPProtocolHost;70 return m_nonHTTPProtocolHost; 71 71 72 72 m_hosts.checkConsistency(); … … 74 74 HostInformation* host = m_hosts.get(hostName); 75 75 if (!host && createHostPolicy == CreateIfNotFound) { 76 auto newHost = std::make_unique<HostInformation>(hostName, maxRequestsInFlightPerHost); 77 host = newHost.get(); 78 m_hosts.add(hostName, WTFMove(newHost)); 76 host = new HostInformation(hostName, maxRequestsInFlightPerHost); 77 m_hosts.add(hostName, host); 79 78 } 80 79 return host; … … 82 81 83 82 WebResourceLoadScheduler::WebResourceLoadScheduler() 84 : m_nonHTTPProtocolHost( String(), maxRequestsInFlightForNonHTTPProtocols)83 : m_nonHTTPProtocolHost(new HostInformation(String(), maxRequestsInFlightForNonHTTPProtocols)) 85 84 , m_requestTimer(*this, &WebResourceLoadScheduler::requestTimerFired) 86 85 , m_suspendPendingRequestsCount(0) … … 98 97 RefPtr<SubresourceLoader> loader = SubresourceLoader::create(frame, resource, request, options); 99 98 if (loader) 100 scheduleLoad( *loader);99 scheduleLoad(loader.get()); 101 100 #if PLATFORM(IOS) 102 101 // Since we defer loader initialization until scheduling on iOS, the frame … … 120 119 RefPtr<NetscapePlugInStreamLoader> loader = NetscapePlugInStreamLoader::create(frame, client, request); 121 120 if (loader) 122 scheduleLoad( *loader);121 scheduleLoad(loader.get()); 123 122 return loader; 124 123 } 125 124 126 void WebResourceLoadScheduler::scheduleLoad(ResourceLoader& resourceLoader) 127 { 128 LOG(ResourceLoading, "WebResourceLoadScheduler::load resource %p '%s'", &resourceLoader, resourceLoader.url().string().latin1().data()); 125 void WebResourceLoadScheduler::scheduleLoad(ResourceLoader* resourceLoader) 126 { 127 ASSERT(resourceLoader); 128 129 LOG(ResourceLoading, "WebResourceLoadScheduler::load resource %p '%s'", resourceLoader, resourceLoader->url().string().latin1().data()); 129 130 130 131 #if PLATFORM(IOS) 131 132 // If there's a web archive resource for this URL, we don't need to schedule the load since it will never touch the network. 132 if (!isSuspendingPendingRequests() && resourceLoader .documentLoader()->archiveResourceForURL(resourceLoader.iOSOriginalRequest().url())) {133 resourceLoader .startLoading();133 if (!isSuspendingPendingRequests() && resourceLoader->documentLoader()->archiveResourceForURL(resourceLoader->iOSOriginalRequest().url())) { 134 resourceLoader->startLoading(); 134 135 return; 135 136 } 136 137 #else 137 if (resourceLoader .documentLoader()->archiveResourceForURL(resourceLoader.request().url())) {138 resourceLoader .start();139 return; 140 } 141 #endif 142 143 #if PLATFORM(IOS) 144 HostInformation* host = hostForURL(resourceLoader .iOSOriginalRequest().url(), CreateIfNotFound);138 if (resourceLoader->documentLoader()->archiveResourceForURL(resourceLoader->request().url())) { 139 resourceLoader->start(); 140 return; 141 } 142 #endif 143 144 #if PLATFORM(IOS) 145 HostInformation* host = hostForURL(resourceLoader->iOSOriginalRequest().url(), CreateIfNotFound); 145 146 #else 146 HostInformation* host = hostForURL(resourceLoader.url(), CreateIfNotFound); 147 #endif 148 ASSERT(host); 149 150 ResourceLoadPriority priority = resourceLoader.request().priority(); 147 HostInformation* host = hostForURL(resourceLoader->url(), CreateIfNotFound); 148 #endif 149 150 ResourceLoadPriority priority = resourceLoader->request().priority(); 151 151 152 152 bool hadRequests = host->hasRequests(); … … 157 157 // Serve all requests at once to keep the pipeline full at the network layer. 158 158 // FIXME: Does this code do anything useful, given that we also set maxRequestsInFlightPerHost to effectively unlimited on these platforms? 159 servePendingRequests( *host, ResourceLoadPriority::VeryLow);160 return; 161 } 162 #endif 163 164 #if PLATFORM(IOS) 165 if ((priority > ResourceLoadPriority::Low || !resourceLoader .iOSOriginalRequest().url().protocolIsInHTTPFamily() || (priority == ResourceLoadPriority::Low && !hadRequests)) && !isSuspendingPendingRequests()) {159 servePendingRequests(host, ResourceLoadPriority::VeryLow); 160 return; 161 } 162 #endif 163 164 #if PLATFORM(IOS) 165 if ((priority > ResourceLoadPriority::Low || !resourceLoader->iOSOriginalRequest().url().protocolIsInHTTPFamily() || (priority == ResourceLoadPriority::Low && !hadRequests)) && !isSuspendingPendingRequests()) { 166 166 // Try to request important resources immediately. 167 servePendingRequests( *host, priority);167 servePendingRequests(host, priority); 168 168 return; 169 169 } 170 170 #else 171 if (priority > ResourceLoadPriority::Low || !resourceLoader .url().protocolIsInHTTPFamily() || (priority == ResourceLoadPriority::Low && !hadRequests)) {171 if (priority > ResourceLoadPriority::Low || !resourceLoader->url().protocolIsInHTTPFamily() || (priority == ResourceLoadPriority::Low && !hadRequests)) { 172 172 // Try to request important resources immediately. 173 servePendingRequests( *host, priority);173 servePendingRequests(host, priority); 174 174 return; 175 175 } … … 181 181 } 182 182 183 void WebResourceLoadScheduler::remove(ResourceLoader& resourceLoader) 184 { 185 HostInformation* host = hostForURL(resourceLoader.url()); 183 void WebResourceLoadScheduler::remove(ResourceLoader* resourceLoader) 184 { 185 ASSERT(resourceLoader); 186 187 HostInformation* host = hostForURL(resourceLoader->url()); 186 188 if (host) 187 189 host->remove(resourceLoader); … … 189 191 // ResourceLoader::url() doesn't start returning the correct value until the load starts. If we get canceled before that, we need to look for originalRequest url instead. 190 192 // FIXME: ResourceLoader::url() should be made to return a sensible value at all times. 191 if (!resourceLoader .iOSOriginalRequest().isNull()) {192 HostInformation* originalHost = hostForURL(resourceLoader .iOSOriginalRequest().url());193 if (!resourceLoader->iOSOriginalRequest().isNull()) { 194 HostInformation* originalHost = hostForURL(resourceLoader->iOSOriginalRequest().url()); 193 195 if (originalHost && originalHost != host) 194 196 originalHost->remove(resourceLoader); … … 198 200 } 199 201 200 void WebResourceLoadScheduler::setDefersLoading(ResourceLoader &, bool)201 { 202 } 203 204 void WebResourceLoadScheduler::crossOriginRedirectReceived(ResourceLoader &resourceLoader, const URL& redirectURL)205 { 206 HostInformation* oldHost = hostForURL(resourceLoader .url());202 void WebResourceLoadScheduler::setDefersLoading(ResourceLoader*, bool) 203 { 204 } 205 206 void WebResourceLoadScheduler::crossOriginRedirectReceived(ResourceLoader* resourceLoader, const URL& redirectURL) 207 { 208 HostInformation* oldHost = hostForURL(resourceLoader->url()); 207 209 ASSERT(oldHost); 208 210 if (!oldHost) … … 210 212 211 213 HostInformation* newHost = hostForURL(redirectURL, CreateIfNotFound); 212 ASSERT(newHost);213 214 214 215 if (oldHost->name() == newHost->name()) … … 230 231 231 232 Vector<HostInformation*> hostsToServe; 232 hostsToServe.reserveInitialCapacity(m_hosts.size()); 233 for (const auto& host : m_hosts.values()) 234 hostsToServe.uncheckedAppend(host.get()); 233 copyValuesToVector(m_hosts, hostsToServe); 235 234 236 235 for (auto* host : hostsToServe) { 237 236 if (host->hasRequests()) 238 servePendingRequests( *host, minimumPriority);237 servePendingRequests(host, minimumPriority); 239 238 else 240 m_hosts.remove(host->name());241 } 242 } 243 244 void WebResourceLoadScheduler::servePendingRequests(HostInformation &host, ResourceLoadPriority minimumPriority)245 { 246 LOG(ResourceLoading, "WebResourceLoadScheduler::servePendingRequests HostInformation.m_name='%s'", host .name().latin1().data());239 delete m_hosts.take(host->name()); 240 } 241 } 242 243 void WebResourceLoadScheduler::servePendingRequests(HostInformation* host, ResourceLoadPriority minimumPriority) 244 { 245 LOG(ResourceLoading, "WebResourceLoadScheduler::servePendingRequests HostInformation.m_name='%s'", host->name().latin1().data()); 247 246 248 247 auto priority = ResourceLoadPriority::Highest; 249 248 while (true) { 250 auto& requestsPending = host .requestsPending(priority);249 auto& requestsPending = host->requestsPending(priority); 251 250 while (!requestsPending.isEmpty()) { 252 Ref <ResourceLoader> resourceLoader = requestsPending.first().copyRef();251 RefPtr<ResourceLoader> resourceLoader = requestsPending.first(); 253 252 254 253 // For named hosts - which are only http(s) hosts - we should always enforce the connection limit. … … 256 255 // and we don't know all stylesheets yet. 257 256 Document* document = resourceLoader->frameLoader() ? resourceLoader->frameLoader()->frame().document() : 0; 258 bool shouldLimitRequests = !host .name().isNull() || (document && (document->parsing() || !document->haveStylesheetsLoaded()));259 if (shouldLimitRequests && host .limitRequests(priority))257 bool shouldLimitRequests = !host->name().isNull() || (document && (document->parsing() || !document->haveStylesheetsLoaded())); 258 if (shouldLimitRequests && host->limitRequests(priority)) 260 259 return; 261 260 262 261 requestsPending.removeFirst(); 263 host .addLoadInProgress(resourceLoader.get());262 host->addLoadInProgress(resourceLoader.get()); 264 263 #if PLATFORM(IOS) 265 264 if (!IOSApplication::isWebProcess()) { … … 287 286 if (m_suspendPendingRequestsCount) 288 287 return; 289 if (!m_hosts.isEmpty() || m_nonHTTPProtocolHost .hasRequests())288 if (!m_hosts.isEmpty() || m_nonHTTPProtocolHost->hasRequests()) 290 289 scheduleServePendingRequests(); 291 290 } … … 333 332 } 334 333 335 void WebResourceLoadScheduler::HostInformation::schedule(ResourceLoader &resourceLoader, ResourceLoadPriority priority)334 void WebResourceLoadScheduler::HostInformation::schedule(ResourceLoader* resourceLoader, ResourceLoadPriority priority) 336 335 { 337 336 m_requestsPending[priorityToIndex(priority)].append(resourceLoader); 338 337 } 339 338 340 void WebResourceLoadScheduler::HostInformation::addLoadInProgress(ResourceLoader &resourceLoader)341 { 342 LOG(ResourceLoading, "HostInformation '%s' loading '%s'. Current count %d", m_name.latin1().data(), resourceLoader .url().string().latin1().data(), m_requestsLoading.size());339 void WebResourceLoadScheduler::HostInformation::addLoadInProgress(ResourceLoader* resourceLoader) 340 { 341 LOG(ResourceLoading, "HostInformation '%s' loading '%s'. Current count %d", m_name.latin1().data(), resourceLoader->url().string().latin1().data(), m_requestsLoading.size()); 343 342 m_requestsLoading.add(resourceLoader); 344 343 } 345 344 346 void WebResourceLoadScheduler::HostInformation::remove(ResourceLoader &resourceLoader)345 void WebResourceLoadScheduler::HostInformation::remove(ResourceLoader* resourceLoader) 347 346 { 348 347 if (m_requestsLoading.remove(resourceLoader)) … … 351 350 for (auto& requestQueue : m_requestsPending) { 352 351 for (auto it = requestQueue.begin(), end = requestQueue.end(); it != end; ++it) { 353 if ( it->ptr() == &resourceLoader) {352 if (*it == resourceLoader) { 354 353 requestQueue.remove(it); 355 354 return; -
trunk/Source/WebKit/WebCoreSupport/WebResourceLoadScheduler.h
r203064 r203079 21 21 */ 22 22 23 #pragma once 23 #ifndef WebResourceLoadScheduler_h 24 #define WebResourceLoadScheduler_h 24 25 25 26 #include <WebCore/FrameLoaderTypes.h> … … 47 48 RefPtr<WebCore::SubresourceLoader> loadResource(WebCore::Frame&, WebCore::CachedResource&, const WebCore::ResourceRequest&, const WebCore::ResourceLoaderOptions&) override; 48 49 void loadResourceSynchronously(WebCore::NetworkingContext*, unsigned long, const WebCore::ResourceRequest&, WebCore::StoredCredentials, WebCore::ClientCredentialPolicy, WebCore::ResourceError&, WebCore::ResourceResponse&, Vector<char>&) override; 49 void remove(WebCore::ResourceLoader &) override;50 void setDefersLoading(WebCore::ResourceLoader &, bool) override;51 void crossOriginRedirectReceived(WebCore::ResourceLoader &, const WebCore::URL& redirectURL) override;50 void remove(WebCore::ResourceLoader*) override; 51 void setDefersLoading(WebCore::ResourceLoader*, bool) override; 52 void crossOriginRedirectReceived(WebCore::ResourceLoader*, const WebCore::URL& redirectURL) override; 52 53 53 54 void servePendingRequests(WebCore::ResourceLoadPriority minimumPriority = WebCore::ResourceLoadPriority::VeryLow) override; … … 66 67 67 68 private: 68 void scheduleLoad(WebCore::ResourceLoader &);69 void scheduleLoad(WebCore::ResourceLoader*); 69 70 void scheduleServePendingRequests(); 70 71 void requestTimerFired(); … … 79 80 80 81 const String& name() const { return m_name; } 81 void schedule(WebCore::ResourceLoader &, WebCore::ResourceLoadPriority = WebCore::ResourceLoadPriority::VeryLow);82 void addLoadInProgress(WebCore::ResourceLoader &);83 void remove(WebCore::ResourceLoader &);82 void schedule(WebCore::ResourceLoader*, WebCore::ResourceLoadPriority = WebCore::ResourceLoadPriority::VeryLow); 83 void addLoadInProgress(WebCore::ResourceLoader*); 84 void remove(WebCore::ResourceLoader*); 84 85 bool hasRequests() const; 85 86 bool limitRequests(WebCore::ResourceLoadPriority) const; 86 87 87 typedef Deque<Ref <WebCore::ResourceLoader>> RequestQueue;88 typedef Deque<RefPtr<WebCore::ResourceLoader>> RequestQueue; 88 89 RequestQueue& requestsPending(WebCore::ResourceLoadPriority priority) { return m_requestsPending[priorityToIndex(priority)]; } 89 90 … … 92 93 93 94 std::array<RequestQueue, WebCore::resourceLoadPriorityCount> m_requestsPending; 94 typedef HashSet<Ref <WebCore::ResourceLoader>> RequestMap;95 typedef HashSet<RefPtr<WebCore::ResourceLoader>> RequestMap; 95 96 RequestMap m_requestsLoading; 96 97 const String m_name; … … 104 105 105 106 HostInformation* hostForURL(const WebCore::URL&, CreateHostPolicy = FindOnly); 106 void servePendingRequests(HostInformation&, WebCore::ResourceLoadPriority);107 WEBCORE_EXPORT void servePendingRequests(HostInformation*, WebCore::ResourceLoadPriority); 107 108 108 HashMap<String, std::unique_ptr<HostInformation>> m_hosts; 109 HostInformation m_nonHTTPProtocolHost; 109 typedef HashMap<String, HostInformation*, StringHash> HostMap; 110 HostMap m_hosts; 111 HostInformation* m_nonHTTPProtocolHost; 110 112 111 113 WebCore::Timer m_requestTimer; … … 114 116 bool m_isSerialLoadingEnabled; 115 117 }; 118 119 #endif -
trunk/Source/WebKit2/ChangeLog
r203075 r203079 1 2016-07-11 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r203064. 4 https://bugs.webkit.org/show_bug.cgi?id=159642 5 6 This change causes LayoutTest crashes on WK1 ASan (Requested 7 by ryanhaddad on #webkit). 8 9 Reverted changeset: 10 11 "Use refs for ResourceLoaders" 12 https://bugs.webkit.org/show_bug.cgi?id=159592 13 http://trac.webkit.org/changeset/203064 14 1 15 2016-07-11 Nan Wang <n_wang@apple.com> 2 16 -
trunk/Source/WebKit2/WebProcess/Network/WebLoaderStrategy.cpp
r203064 r203079 218 218 void WebLoaderStrategy::scheduleInternallyFailedLoad(WebCore::ResourceLoader& resourceLoader) 219 219 { 220 m_internallyFailedResourceLoaders.add( resourceLoader);220 m_internallyFailedResourceLoaders.add(&resourceLoader); 221 221 m_internallyFailedLoadTimer.startOneShot(0); 222 222 } … … 224 224 void WebLoaderStrategy::internallyFailedLoadTimerFired() 225 225 { 226 Vector<Ref<ResourceLoader>> internallyFailedResourceLoaders; 227 internallyFailedResourceLoaders.reserveInitialCapacity(m_internallyFailedResourceLoaders.size()); 228 for (auto& loader : m_internallyFailedResourceLoaders) 229 internallyFailedResourceLoaders.uncheckedAppend(loader.copyRef()); 226 Vector<RefPtr<ResourceLoader>> internallyFailedResourceLoaders; 227 copyToVector(m_internallyFailedResourceLoaders, internallyFailedResourceLoaders); 230 228 231 for ( auto& loader : internallyFailedResourceLoaders)232 loader->didFail(internalError(loader->url()));229 for (size_t i = 0; i < internallyFailedResourceLoaders.size(); ++i) 230 internallyFailedResourceLoaders[i]->didFail(internalError(internallyFailedResourceLoaders[i]->url())); 233 231 } 234 232 … … 239 237 } 240 238 241 void WebLoaderStrategy::remove(ResourceLoader& resourceLoader) 242 { 243 LOG(NetworkScheduling, "(WebProcess) WebLoaderStrategy::remove, url '%s'", resourceLoader.url().string().utf8().data()); 239 void WebLoaderStrategy::remove(ResourceLoader* resourceLoader) 240 { 241 ASSERT(resourceLoader); 242 LOG(NetworkScheduling, "(WebProcess) WebLoaderStrategy::remove, url '%s'", resourceLoader->url().string().utf8().data()); 244 243 245 244 if (m_internallyFailedResourceLoaders.contains(resourceLoader)) { … … 248 247 } 249 248 250 ResourceLoadIdentifier identifier = resourceLoader .identifier();249 ResourceLoadIdentifier identifier = resourceLoader->identifier(); 251 250 if (!identifier) { 252 251 LOG_ERROR("WebLoaderStrategy removing a ResourceLoader that has no identifier."); … … 266 265 } 267 266 268 void WebLoaderStrategy::setDefersLoading(ResourceLoader &resourceLoader, bool defers)269 { 270 ResourceLoadIdentifier identifier = resourceLoader .identifier();267 void WebLoaderStrategy::setDefersLoading(ResourceLoader* resourceLoader, bool defers) 268 { 269 ResourceLoadIdentifier identifier = resourceLoader->identifier(); 271 270 WebProcess::singleton().networkConnection()->connection()->send(Messages::NetworkConnectionToWebProcess::SetDefersLoading(identifier, defers), 0); 272 271 } 273 272 274 void WebLoaderStrategy::crossOriginRedirectReceived(ResourceLoader &, const URL&)273 void WebLoaderStrategy::crossOriginRedirectReceived(ResourceLoader*, const URL&) 275 274 { 276 275 // We handle cross origin redirects entirely within the NetworkProcess. -
trunk/Source/WebKit2/WebProcess/Network/WebLoaderStrategy.h
r203064 r203079 47 47 void loadResourceSynchronously(WebCore::NetworkingContext*, unsigned long resourceLoadIdentifier, const WebCore::ResourceRequest&, WebCore::StoredCredentials, WebCore::ClientCredentialPolicy, WebCore::ResourceError&, WebCore::ResourceResponse&, Vector<char>& data) override; 48 48 49 void remove(WebCore::ResourceLoader &) override;50 void setDefersLoading(WebCore::ResourceLoader &, bool) override;51 void crossOriginRedirectReceived(WebCore::ResourceLoader &, const WebCore::URL& redirectURL) override;49 void remove(WebCore::ResourceLoader*) override; 50 void setDefersLoading(WebCore::ResourceLoader*, bool) override; 51 void crossOriginRedirectReceived(WebCore::ResourceLoader*, const WebCore::URL& redirectURL) override; 52 52 53 53 void servePendingRequests(WebCore::ResourceLoadPriority minimumPriority) override; … … 69 69 void startLocalLoad(WebCore::ResourceLoader&); 70 70 71 HashSet<Ref <WebCore::ResourceLoader>> m_internallyFailedResourceLoaders;71 HashSet<RefPtr<WebCore::ResourceLoader>> m_internallyFailedResourceLoaders; 72 72 RunLoop::Timer<WebLoaderStrategy> m_internallyFailedLoadTimer; 73 73
Note:
See TracChangeset
for help on using the changeset viewer.