Changeset 203971 in webkit
- Timestamp:
- Aug 1, 2016 12:02:35 AM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r203961 r203971 1 2016-08-01 Youenn Fablet <youennf@gmail.com> 2 3 Reduce the number of ResourceRequest copies in DocumentThreadableLoader 4 https://bugs.webkit.org/show_bug.cgi?id=160338 5 6 Reviewed by Darin Adler. 7 8 No observable change of behavior. 9 10 Updating one of CachedResourceReques constructor to take a ResourceRequest&&. 11 This allows reducing a ResourceRequest copy in DocumentThreadableLoader. 12 Updating DocumentLoader and MediaResourceLoader accordingly (future optimization steps may look at making these 13 two loaders more efficient with regards to Resource Request). 14 15 Updating ThreadableLoader to take a ResourceRequest&&. 16 This allows reducing the number of copies in DocumentThreadableLoader. 17 Updating clients of ThreadableLoader accordingly. 18 19 * Modules/fetch/FetchLoader.cpp: 20 (WebCore::FetchLoader::start): 21 * dom/Document.cpp: 22 (WebCore::Document::didLoadResourceSynchronously): 23 * dom/Document.h: 24 * dom/ScriptExecutionContext.cpp: 25 (WebCore::ScriptExecutionContext::didLoadResourceSynchronously): 26 * dom/ScriptExecutionContext.h: 27 * fileapi/FileReaderLoader.cpp: 28 (WebCore::FileReaderLoader::start): 29 * inspector/InspectorNetworkAgent.cpp: 30 (WebCore::InspectorNetworkAgent::loadResource): 31 * loader/DocumentLoader.cpp: 32 (WebCore::DocumentLoader::startLoadingMainResource): 33 * loader/DocumentThreadableLoader.cpp: 34 (WebCore::DocumentThreadableLoader::loadResourceSynchronously): 35 (WebCore::DocumentThreadableLoader::create): 36 (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): 37 (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest): 38 (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): 39 (WebCore::DocumentThreadableLoader::redirectReceived): 40 (WebCore::DocumentThreadableLoader::preflightSuccess): 41 (WebCore::DocumentThreadableLoader::loadRequest): 42 * loader/DocumentThreadableLoader.h: 43 * loader/MediaResourceLoader.cpp: 44 (WebCore::MediaResourceLoader::requestResource): 45 * loader/ThreadableLoader.cpp: 46 (WebCore::ThreadableLoader::create): 47 (WebCore::ThreadableLoader::loadResourceSynchronously): 48 * loader/ThreadableLoader.h: 49 * loader/WorkerThreadableLoader.cpp: 50 (WebCore::WorkerThreadableLoader::WorkerThreadableLoader): 51 (WebCore::WorkerThreadableLoader::loadResourceSynchronously): 52 (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge): 53 * loader/WorkerThreadableLoader.h: 54 (WebCore::WorkerThreadableLoader::create): 55 * loader/cache/CachedResourceRequest.cpp: 56 (WebCore::CachedResourceRequest::CachedResourceRequest): 57 * loader/cache/CachedResourceRequest.h: 58 * page/EventSource.cpp: 59 (WebCore::EventSource::connect): 60 * workers/WorkerScriptLoader.cpp: 61 (WebCore::WorkerScriptLoader::loadSynchronously): 62 (WebCore::WorkerScriptLoader::loadAsynchronously): 63 * xml/XMLHttpRequest.cpp: 64 (WebCore::XMLHttpRequest::createRequest): 65 1 66 2016-07-31 Youenn Fablet <youenn@apple.com> 2 67 -
trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp
r203900 r203971 68 68 options.contentSecurityPolicyEnforcement = ContentSecurityPolicyEnforcement::DoNotEnforce; 69 69 70 m_loader = ThreadableLoader::create(&context, this, request, options);70 m_loader = ThreadableLoader::create(&context, this, WTFMove(request), options); 71 71 m_isStarted = m_loader; 72 72 } -
trunk/Source/WebCore/dom/Document.cpp
r203761 r203971 6875 6875 } 6876 6876 6877 void Document::didLoadResourceSynchronously( const ResourceRequest&)6877 void Document::didLoadResourceSynchronously() 6878 6878 { 6879 6879 // Synchronous resources loading can set cookies so we invalidate the cookies cache -
trunk/Source/WebCore/dom/Document.h
r203761 r203971 1422 1422 bool isDOMCookieCacheValid() const { return m_cookieCacheExpiryTimer.isActive(); } 1423 1423 void invalidateDOMCookieCache(); 1424 void didLoadResourceSynchronously( const ResourceRequest&) final;1424 void didLoadResourceSynchronously() final; 1425 1425 1426 1426 void checkViewportDependentPictures(); -
trunk/Source/WebCore/dom/ScriptExecutionContext.cpp
r202105 r203971 177 177 } 178 178 179 void ScriptExecutionContext::didLoadResourceSynchronously( const ResourceRequest&)179 void ScriptExecutionContext::didLoadResourceSynchronously() 180 180 { 181 181 } -
trunk/Source/WebCore/dom/ScriptExecutionContext.h
r202930 r203971 133 133 void destroyedMessagePort(MessagePort&); 134 134 135 virtual void didLoadResourceSynchronously( const ResourceRequest&);135 virtual void didLoadResourceSynchronously(); 136 136 137 137 void ref() { refScriptExecutionContext(); } -
trunk/Source/WebCore/fileapi/FileReaderLoader.cpp
r203900 r203971 96 96 97 97 if (m_client) 98 m_loader = ThreadableLoader::create(scriptExecutionContext, this, request, options);98 m_loader = ThreadableLoader::create(scriptExecutionContext, this, WTFMove(request), options); 99 99 else 100 ThreadableLoader::loadResourceSynchronously(scriptExecutionContext, request, *this, options);100 ThreadableLoader::loadResourceSynchronously(scriptExecutionContext, WTFMove(request), *this, options); 101 101 } 102 102 -
trunk/Source/WebCore/inspector/InspectorNetworkAgent.cpp
r203900 r203971 680 680 InspectorThreadableLoaderClient* inspectorThreadableLoaderClient = new InspectorThreadableLoaderClient(callback.copyRef()); 681 681 682 auto loader = DocumentThreadableLoader::create(*document, *inspectorThreadableLoaderClient, request, options);682 auto loader = DocumentThreadableLoader::create(*document, *inspectorThreadableLoaderClient, WTFMove(request), options); 683 683 if (!loader) { 684 684 inspectorThreadableLoaderClient->didFailLoaderCreation(); -
trunk/Source/WebCore/loader/DocumentLoader.cpp
r203723 r203971 1512 1512 1513 1513 static NeverDestroyed<ResourceLoaderOptions> mainResourceLoadOptions(SendCallbacks, SniffContent, BufferData, AllowStoredCredentials, ClientCredentialPolicy::MayAskClientForCredentials, FetchOptions::Credentials::Include, SkipSecurityCheck, FetchOptions::Mode::NoCors, IncludeCertificateInfo, ContentSecurityPolicyImposition::DoPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, CachingPolicy::AllowCaching); 1514 CachedResourceRequest cachedResourceRequest( request, mainResourceLoadOptions);1514 CachedResourceRequest cachedResourceRequest(ResourceRequest(request), mainResourceLoadOptions); 1515 1515 cachedResourceRequest.setInitiator(*this); 1516 1516 m_mainResource = m_cachedResourceLoader->requestMainResource(cachedResourceRequest); -
trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp
r203900 r203971 57 57 namespace WebCore { 58 58 59 void DocumentThreadableLoader::loadResourceSynchronously(Document& document, const ResourceRequest& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options, RefPtr<SecurityOrigin>&& origin, std::unique_ptr<ContentSecurityPolicy>&& contentSecurityPolicy)59 void DocumentThreadableLoader::loadResourceSynchronously(Document& document, ResourceRequest&& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options, RefPtr<SecurityOrigin>&& origin, std::unique_ptr<ContentSecurityPolicy>&& contentSecurityPolicy) 60 60 { 61 61 // The loader will be deleted as soon as this function exits. 62 RefPtr<DocumentThreadableLoader> loader = adoptRef(new DocumentThreadableLoader(document, client, LoadSynchronously, request, options, WTFMove(origin), WTFMove(contentSecurityPolicy)));62 RefPtr<DocumentThreadableLoader> loader = adoptRef(new DocumentThreadableLoader(document, client, LoadSynchronously, WTFMove(request), options, WTFMove(origin), WTFMove(contentSecurityPolicy))); 63 63 ASSERT(loader->hasOneRef()); 64 64 } 65 65 66 void DocumentThreadableLoader::loadResourceSynchronously(Document& document, const ResourceRequest& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options)67 { 68 loadResourceSynchronously(document, request, client, options, nullptr, nullptr);69 } 70 71 RefPtr<DocumentThreadableLoader> DocumentThreadableLoader::create(Document& document, ThreadableLoaderClient& client, const ResourceRequest& request, const ThreadableLoaderOptions& options, RefPtr<SecurityOrigin>&& origin, std::unique_ptr<ContentSecurityPolicy>&& contentSecurityPolicy)72 { 73 RefPtr<DocumentThreadableLoader> loader = adoptRef(new DocumentThreadableLoader(document, client, LoadAsynchronously, request, options, WTFMove(origin), WTFMove(contentSecurityPolicy)));66 void DocumentThreadableLoader::loadResourceSynchronously(Document& document, ResourceRequest&& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options) 67 { 68 loadResourceSynchronously(document, WTFMove(request), client, options, nullptr, nullptr); 69 } 70 71 RefPtr<DocumentThreadableLoader> DocumentThreadableLoader::create(Document& document, ThreadableLoaderClient& client, ResourceRequest&& request, const ThreadableLoaderOptions& options, RefPtr<SecurityOrigin>&& origin, std::unique_ptr<ContentSecurityPolicy>&& contentSecurityPolicy) 72 { 73 RefPtr<DocumentThreadableLoader> loader = adoptRef(new DocumentThreadableLoader(document, client, LoadAsynchronously, WTFMove(request), options, WTFMove(origin), WTFMove(contentSecurityPolicy))); 74 74 if (!loader->isLoading()) 75 75 loader = nullptr; … … 77 77 } 78 78 79 RefPtr<DocumentThreadableLoader> DocumentThreadableLoader::create(Document& document, ThreadableLoaderClient& client, const ResourceRequest& request, const ThreadableLoaderOptions& options)80 { 81 return create(document, client, request, options, nullptr, nullptr);82 } 83 84 DocumentThreadableLoader::DocumentThreadableLoader(Document& document, ThreadableLoaderClient& client, BlockingBehavior blockingBehavior, const ResourceRequest& request, const ThreadableLoaderOptions& options, RefPtr<SecurityOrigin>&& origin, std::unique_ptr<ContentSecurityPolicy>&& contentSecurityPolicy)79 RefPtr<DocumentThreadableLoader> DocumentThreadableLoader::create(Document& document, ThreadableLoaderClient& client, ResourceRequest&& request, const ThreadableLoaderOptions& options) 80 { 81 return create(document, client, WTFMove(request), options, nullptr, nullptr); 82 } 83 84 DocumentThreadableLoader::DocumentThreadableLoader(Document& document, ThreadableLoaderClient& client, BlockingBehavior blockingBehavior, ResourceRequest&& request, const ThreadableLoaderOptions& options, RefPtr<SecurityOrigin>&& origin, std::unique_ptr<ContentSecurityPolicy>&& contentSecurityPolicy) 85 85 : m_client(&client) 86 86 , m_document(document) … … 100 100 101 101 if (m_sameOriginRequest || m_options.mode == FetchOptions::Mode::NoCors) { 102 loadRequest( request, DoSecurityCheck);102 loadRequest(WTFMove(request), DoSecurityCheck); 103 103 return; 104 104 } … … 109 109 } 110 110 111 makeCrossOriginAccessRequest( request);112 } 113 114 void DocumentThreadableLoader::makeCrossOriginAccessRequest( const ResourceRequest& request)111 makeCrossOriginAccessRequest(WTFMove(request)); 112 } 113 114 void DocumentThreadableLoader::makeCrossOriginAccessRequest(ResourceRequest&& request) 115 115 { 116 116 ASSERT(m_options.mode == FetchOptions::Mode::Cors); 117 117 118 118 if ((m_options.preflightPolicy == ConsiderPreflight && isSimpleCrossOriginAccessRequest(request.httpMethod(), request.httpHeaderFields())) || m_options.preflightPolicy == PreventPreflight) 119 makeSimpleCrossOriginAccessRequest( request);119 makeSimpleCrossOriginAccessRequest(WTFMove(request)); 120 120 else { 121 121 m_simpleRequest = false; 122 122 if (CrossOriginPreflightResultCache::singleton().canSkipPreflight(securityOrigin().toString(), request.url(), m_options.allowCredentials(), request.httpMethod(), request.httpHeaderFields())) 123 preflightSuccess( ResourceRequest(request));123 preflightSuccess(WTFMove(request)); 124 124 else 125 makeCrossOriginAccessRequestWithPreflight( ResourceRequest(request));126 } 127 } 128 129 void DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest( const ResourceRequest& request)125 makeCrossOriginAccessRequestWithPreflight(WTFMove(request)); 126 } 127 } 128 129 void DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest(ResourceRequest&& request) 130 130 { 131 131 ASSERT(m_options.preflightPolicy != ForcePreflight); … … 138 138 } 139 139 140 auto crossOriginRequest = request; 141 updateRequestForAccessControl(crossOriginRequest, securityOrigin(), m_options.allowCredentials()); 142 loadRequest(crossOriginRequest, DoSecurityCheck); 140 updateRequestForAccessControl(request, securityOrigin(), m_options.allowCredentials()); 141 loadRequest(WTFMove(request), DoSecurityCheck); 143 142 } 144 143 … … 251 250 cleanRedirectedRequestForAccessControl(request); 252 251 253 makeCrossOriginAccessRequest( request);252 makeCrossOriginAccessRequest(ResourceRequest(request)); 254 253 return; 255 254 } … … 341 340 342 341 // It should be ok to skip the security check since we already asked about the preflight request. 343 loadRequest( actualRequest, SkipSecurityCheck);342 loadRequest(WTFMove(actualRequest), SkipSecurityCheck); 344 343 } 345 344 … … 355 354 } 356 355 357 void DocumentThreadableLoader::loadRequest( const ResourceRequest& request, SecurityCheckPolicy securityCheck)356 void DocumentThreadableLoader::loadRequest(ResourceRequest&& request, SecurityCheckPolicy securityCheck) 358 357 { 359 358 // Any credential should have been removed from the cross-site requests. … … 370 369 options.mode = FetchOptions::Mode::NoCors; 371 370 372 CachedResourceRequest newRequest( request, options);371 CachedResourceRequest newRequest(WTFMove(request), options); 373 372 if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) 374 373 newRequest.setInitiator(m_options.initiator); -
trunk/Source/WebCore/loader/DocumentThreadableLoader.h
r203815 r203971 46 46 WTF_MAKE_FAST_ALLOCATED; 47 47 public: 48 static void loadResourceSynchronously(Document&, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&, RefPtr<SecurityOrigin>&&, std::unique_ptr<ContentSecurityPolicy>&&);49 static void loadResourceSynchronously(Document&, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&);48 static void loadResourceSynchronously(Document&, ResourceRequest&&, ThreadableLoaderClient&, const ThreadableLoaderOptions&, RefPtr<SecurityOrigin>&&, std::unique_ptr<ContentSecurityPolicy>&&); 49 static void loadResourceSynchronously(Document&, ResourceRequest&&, ThreadableLoaderClient&, const ThreadableLoaderOptions&); 50 50 51 static RefPtr<DocumentThreadableLoader> create(Document&, ThreadableLoaderClient&, const ResourceRequest&, const ThreadableLoaderOptions&, RefPtr<SecurityOrigin>&&, std::unique_ptr<ContentSecurityPolicy>&&);52 static RefPtr<DocumentThreadableLoader> create(Document&, ThreadableLoaderClient&, const ResourceRequest&, const ThreadableLoaderOptions&);51 static RefPtr<DocumentThreadableLoader> create(Document&, ThreadableLoaderClient&, ResourceRequest&&, const ThreadableLoaderOptions&, RefPtr<SecurityOrigin>&&, std::unique_ptr<ContentSecurityPolicy>&&); 52 static RefPtr<DocumentThreadableLoader> create(Document&, ThreadableLoaderClient&, ResourceRequest&&, const ThreadableLoaderOptions&); 53 53 54 54 virtual ~DocumentThreadableLoader(); … … 72 72 }; 73 73 74 DocumentThreadableLoader(Document&, ThreadableLoaderClient&, BlockingBehavior, const ResourceRequest&, const ThreadableLoaderOptions&, RefPtr<SecurityOrigin>&&, std::unique_ptr<ContentSecurityPolicy>&&);74 DocumentThreadableLoader(Document&, ThreadableLoaderClient&, BlockingBehavior, ResourceRequest&&, const ThreadableLoaderOptions&, RefPtr<SecurityOrigin>&&, std::unique_ptr<ContentSecurityPolicy>&&); 75 75 76 76 void clearResource(); … … 87 87 void didFinishLoading(unsigned long identifier, double finishTime); 88 88 void didFail(unsigned long identifier, const ResourceError&); 89 void makeCrossOriginAccessRequest( const ResourceRequest&);90 void makeSimpleCrossOriginAccessRequest( const ResourceRequest&);89 void makeCrossOriginAccessRequest(ResourceRequest&&); 90 void makeSimpleCrossOriginAccessRequest(ResourceRequest&&); 91 91 void makeCrossOriginAccessRequestWithPreflight(ResourceRequest&&); 92 92 void preflightSuccess(ResourceRequest&&); 93 93 void preflightFailure(unsigned long identifier, const ResourceError&); 94 94 95 void loadRequest( const ResourceRequest&, SecurityCheckPolicy);95 void loadRequest(ResourceRequest&&, SecurityCheckPolicy); 96 96 bool isAllowedRedirect(const URL&); 97 97 bool isAllowedByContentSecurityPolicy(const URL&, bool didRedirect = false); -
trunk/Source/WebCore/loader/MediaResourceLoader.cpp
r203720 r203971 66 66 auto cachingPolicy = options & LoadOption::DisallowCaching ? CachingPolicy::DisallowCaching : CachingPolicy::AllowCaching; 67 67 68 // FIXME: We should try to remove the copy of request when crearing cacheRequest. 68 69 // FIXME: Skip Content Security Policy check if the element that inititated this request is in a user-agent shadow tree. See <https://bugs.webkit.org/show_bug.cgi?id=155505>. 69 CachedResourceRequest cacheRequest( request, ResourceLoaderOptions(SendCallbacks, DoNotSniffContent, bufferingPolicy, AllowStoredCredentials, ClientCredentialPolicy::MayAskClientForCredentials, FetchOptions::Credentials::Include, DoSecurityCheck, FetchOptions::Mode::NoCors, DoNotIncludeCertificateInfo, ContentSecurityPolicyImposition::DoPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, cachingPolicy));70 CachedResourceRequest cacheRequest(ResourceRequest(request), ResourceLoaderOptions(SendCallbacks, DoNotSniffContent, bufferingPolicy, AllowStoredCredentials, ClientCredentialPolicy::MayAskClientForCredentials, FetchOptions::Credentials::Include, DoSecurityCheck, FetchOptions::Mode::NoCors, DoNotIncludeCertificateInfo, ContentSecurityPolicyImposition::DoPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, cachingPolicy)); 70 71 71 72 cacheRequest.setAsPotentiallyCrossOrigin(m_crossOriginMode, *m_document); -
trunk/Source/WebCore/loader/ThreadableLoader.cpp
r203490 r203971 59 59 } 60 60 61 RefPtr<ThreadableLoader> ThreadableLoader::create(ScriptExecutionContext* context, ThreadableLoaderClient* client, const ResourceRequest& request, const ThreadableLoaderOptions& options)61 RefPtr<ThreadableLoader> ThreadableLoader::create(ScriptExecutionContext* context, ThreadableLoaderClient* client, ResourceRequest&& request, const ThreadableLoaderOptions& options) 62 62 { 63 63 ASSERT(client); … … 65 65 66 66 if (is<WorkerGlobalScope>(*context)) 67 return WorkerThreadableLoader::create(downcast<WorkerGlobalScope>(context), client, WorkerRunLoop::defaultMode(), request, options);67 return WorkerThreadableLoader::create(downcast<WorkerGlobalScope>(context), client, WorkerRunLoop::defaultMode(), WTFMove(request), options); 68 68 69 return DocumentThreadableLoader::create(downcast<Document>(*context), *client, request, options);69 return DocumentThreadableLoader::create(downcast<Document>(*context), *client, WTFMove(request), options); 70 70 } 71 71 72 void ThreadableLoader::loadResourceSynchronously(ScriptExecutionContext* context, const ResourceRequest& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options)72 void ThreadableLoader::loadResourceSynchronously(ScriptExecutionContext* context, ResourceRequest&& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options) 73 73 { 74 74 ASSERT(context); 75 75 76 76 if (is<WorkerGlobalScope>(*context)) 77 WorkerThreadableLoader::loadResourceSynchronously(downcast<WorkerGlobalScope>(context), request, client, options);77 WorkerThreadableLoader::loadResourceSynchronously(downcast<WorkerGlobalScope>(context), WTFMove(request), client, options); 78 78 else 79 DocumentThreadableLoader::loadResourceSynchronously(downcast<Document>(*context), request, client, options);80 context->didLoadResourceSynchronously( request);79 DocumentThreadableLoader::loadResourceSynchronously(downcast<Document>(*context), WTFMove(request), client, options); 80 context->didLoadResourceSynchronously(); 81 81 } 82 82 -
trunk/Source/WebCore/loader/ThreadableLoader.h
r203490 r203971 70 70 }; 71 71 72 // Useful for doing loader operations from any thread (not threadsafe, 72 // Useful for doing loader operations from any thread (not threadsafe, 73 73 // just able to run on threads other than the main thread). 74 74 class ThreadableLoader { 75 75 WTF_MAKE_NONCOPYABLE(ThreadableLoader); 76 76 public: 77 static void loadResourceSynchronously(ScriptExecutionContext*, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&);78 static RefPtr<ThreadableLoader> create(ScriptExecutionContext*, ThreadableLoaderClient*, const ResourceRequest&, const ThreadableLoaderOptions&);77 static void loadResourceSynchronously(ScriptExecutionContext*, ResourceRequest&&, ThreadableLoaderClient&, const ThreadableLoaderOptions&); 78 static RefPtr<ThreadableLoader> create(ScriptExecutionContext*, ThreadableLoaderClient*, ResourceRequest&&, const ThreadableLoaderOptions&); 79 79 80 80 virtual void cancel() = 0; -
trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp
r203490 r203971 50 50 static const char loadResourceSynchronouslyMode[] = "loadResourceSynchronouslyMode"; 51 51 52 WorkerThreadableLoader::WorkerThreadableLoader(WorkerGlobalScope* workerGlobalScope, ThreadableLoaderClient* client, const String& taskMode, const ResourceRequest& request, const ThreadableLoaderOptions& options)52 WorkerThreadableLoader::WorkerThreadableLoader(WorkerGlobalScope* workerGlobalScope, ThreadableLoaderClient* client, const String& taskMode, ResourceRequest&& request, const ThreadableLoaderOptions& options) 53 53 : m_workerGlobalScope(workerGlobalScope) 54 54 , m_workerClientWrapper(ThreadableLoaderClientWrapper::create(client)) 55 , m_bridge(*new MainThreadBridge(*m_workerClientWrapper, workerGlobalScope->thread().workerLoaderProxy(), taskMode, request, options, workerGlobalScope->url().strippedForUseAsReferrer(), workerGlobalScope->securityOrigin(), workerGlobalScope->contentSecurityPolicy()))55 , m_bridge(*new MainThreadBridge(*m_workerClientWrapper, workerGlobalScope->thread().workerLoaderProxy(), taskMode, WTFMove(request), options, workerGlobalScope->url().strippedForUseAsReferrer(), workerGlobalScope->securityOrigin(), workerGlobalScope->contentSecurityPolicy())) 56 56 { 57 57 } … … 62 62 } 63 63 64 void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope* workerGlobalScope, const ResourceRequest& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options)64 void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope* workerGlobalScope, ResourceRequest&& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options) 65 65 { 66 66 WorkerRunLoop& runLoop = workerGlobalScope->thread().runLoop(); … … 70 70 mode.append(String::number(runLoop.createUniqueId())); 71 71 72 RefPtr<WorkerThreadableLoader> loader = WorkerThreadableLoader::create(workerGlobalScope, &client, mode, request, options);72 RefPtr<WorkerThreadableLoader> loader = WorkerThreadableLoader::create(workerGlobalScope, &client, mode, WTFMove(request), options); 73 73 MessageQueueWaitResult result = MessageQueueMessageReceived; 74 74 while (!loader->done() && result != MessageQueueTerminated) … … 99 99 100 100 WorkerThreadableLoader::MainThreadBridge::MainThreadBridge(ThreadableLoaderClientWrapper& workerClientWrapper, WorkerLoaderProxy& loaderProxy, const String& taskMode, 101 const ResourceRequest& request, const ThreadableLoaderOptions& options, const String& outgoingReferrer,101 ResourceRequest&& request, const ThreadableLoaderOptions& options, const String& outgoingReferrer, 102 102 const SecurityOrigin* securityOrigin, const ContentSecurityPolicy* contentSecurityPolicy) 103 103 : m_workerClientWrapper(&workerClientWrapper) … … 113 113 auto optionsCopy = std::make_unique<LoaderTaskOptions>(options, outgoingReferrer, *securityOrigin); 114 114 115 // Can we benefit from request being an r-value to create more efficiently its isolated copy? 115 116 m_loaderProxy.postTaskToLoader([this, request = request.isolatedCopy(), options = WTFMove(optionsCopy), contentSecurityPolicyCopy = WTFMove(contentSecurityPolicyCopy)](ScriptExecutionContext& context) mutable { 116 117 ASSERT(isMainThread()); … … 121 122 // FIXME: If the site requests a local resource, then this will return a non-zero value but the sync path will return a 0 value. 122 123 // Either this should return 0 or the other code path should call a failure callback. 123 m_mainThreadLoader = DocumentThreadableLoader::create(document, *this, request, options->options, WTFMove(options->origin), WTFMove(contentSecurityPolicyCopy));124 m_mainThreadLoader = DocumentThreadableLoader::create(document, *this, WTFMove(request), options->options, WTFMove(options->origin), WTFMove(contentSecurityPolicyCopy)); 124 125 ASSERT(m_mainThreadLoader || m_loadingFinished); 125 126 }); -
trunk/Source/WebCore/loader/WorkerThreadableLoader.h
r202542 r203971 50 50 WTF_MAKE_FAST_ALLOCATED; 51 51 public: 52 static void loadResourceSynchronously(WorkerGlobalScope*, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&);53 static Ref<WorkerThreadableLoader> create(WorkerGlobalScope* workerGlobalScope, ThreadableLoaderClient* client, const String& taskMode, const ResourceRequest& request, const ThreadableLoaderOptions& options)52 static void loadResourceSynchronously(WorkerGlobalScope*, ResourceRequest&&, ThreadableLoaderClient&, const ThreadableLoaderOptions&); 53 static Ref<WorkerThreadableLoader> create(WorkerGlobalScope* workerGlobalScope, ThreadableLoaderClient* client, const String& taskMode, ResourceRequest&& request, const ThreadableLoaderOptions& options) 54 54 { 55 return adoptRef(*new WorkerThreadableLoader(workerGlobalScope, client, taskMode, request, options));55 return adoptRef(*new WorkerThreadableLoader(workerGlobalScope, client, taskMode, WTFMove(request), options)); 56 56 } 57 57 … … 91 91 public: 92 92 // All executed on the worker context's thread. 93 MainThreadBridge(ThreadableLoaderClientWrapper&, WorkerLoaderProxy&, const String& taskMode, const ResourceRequest&, const ThreadableLoaderOptions&, const String& outgoingReferrer, const SecurityOrigin*, const ContentSecurityPolicy*);93 MainThreadBridge(ThreadableLoaderClientWrapper&, WorkerLoaderProxy&, const String& taskMode, ResourceRequest&&, const ThreadableLoaderOptions&, const String& outgoingReferrer, const SecurityOrigin*, const ContentSecurityPolicy*); 94 94 void cancel(); 95 95 void destroy(); … … 121 121 }; 122 122 123 WorkerThreadableLoader(WorkerGlobalScope*, ThreadableLoaderClient*, const String& taskMode, const ResourceRequest&, const ThreadableLoaderOptions&);123 WorkerThreadableLoader(WorkerGlobalScope*, ThreadableLoaderClient*, const String& taskMode, ResourceRequest&&, const ThreadableLoaderOptions&); 124 124 125 125 RefPtr<WorkerGlobalScope> m_workerGlobalScope; -
trunk/Source/WebCore/loader/cache/CachedResourceRequest.cpp
r202815 r203971 45 45 } 46 46 47 CachedResourceRequest::CachedResourceRequest( const ResourceRequest& resourceRequest, const ResourceLoaderOptions& options)48 : m_resourceRequest( resourceRequest)47 CachedResourceRequest::CachedResourceRequest(ResourceRequest&& resourceRequest, const ResourceLoaderOptions& options) 48 : m_resourceRequest(WTFMove(resourceRequest)) 49 49 , m_options(options) 50 50 , m_forPreload(false) -
trunk/Source/WebCore/loader/cache/CachedResourceRequest.h
r201930 r203971 43 43 44 44 explicit CachedResourceRequest(const ResourceRequest&, const String& charset = String(), Optional<ResourceLoadPriority> = Nullopt); 45 CachedResourceRequest( const ResourceRequest&, const ResourceLoaderOptions&);45 CachedResourceRequest(ResourceRequest&&, const ResourceLoaderOptions&); 46 46 CachedResourceRequest(const ResourceRequest&, Optional<ResourceLoadPriority>); 47 47 ~CachedResourceRequest(); -
trunk/Source/WebCore/page/EventSource.cpp
r203900 r203971 113 113 options.contentSecurityPolicyEnforcement = scriptExecutionContext()->shouldBypassMainWorldContentSecurityPolicy() ? ContentSecurityPolicyEnforcement::DoNotEnforce : ContentSecurityPolicyEnforcement::EnforceConnectSrcDirective; 114 114 115 m_loader = ThreadableLoader::create(scriptExecutionContext(), this, request, options);115 m_loader = ThreadableLoader::create(scriptExecutionContext(), this, WTFMove(request), options); 116 116 117 117 // FIXME: Can we just use m_loader for this, null it out when it's no longer in flight, and eliminate the m_requestInFlight member? -
trunk/Source/WebCore/workers/WorkerScriptLoader.cpp
r203900 r203971 74 74 options.contentSecurityPolicyEnforcement = contentSecurityPolicyEnforcement; 75 75 76 WorkerThreadableLoader::loadResourceSynchronously(downcast<WorkerGlobalScope>(scriptExecutionContext), *request, *this, options);76 WorkerThreadableLoader::loadResourceSynchronously(downcast<WorkerGlobalScope>(scriptExecutionContext), WTFMove(*request), *this, options); 77 77 } 78 78 … … 99 99 // During create, callbacks may happen which remove the last reference to this object. 100 100 Ref<WorkerScriptLoader> protectedThis(*this); 101 m_threadableLoader = ThreadableLoader::create(scriptExecutionContext, this, *request, options);101 m_threadableLoader = ThreadableLoader::create(scriptExecutionContext, this, WTFMove(*request), options); 102 102 } 103 103 -
trunk/Source/WebCore/xml/XMLHttpRequest.cpp
r203900 r203971 715 715 // This is true while running onunload handlers. 716 716 // FIXME: Maybe we need to be able to send XMLHttpRequests from onunload, <http://bugs.webkit.org/show_bug.cgi?id=10904>. 717 m_loader = ThreadableLoader::create(scriptExecutionContext(), this, request, options);717 m_loader = ThreadableLoader::create(scriptExecutionContext(), this, WTFMove(request), options); 718 718 719 719 // Neither this object nor the JavaScript wrapper should be deleted while … … 728 728 } else { 729 729 InspectorInstrumentation::willLoadXHRSynchronously(scriptExecutionContext()); 730 ThreadableLoader::loadResourceSynchronously(scriptExecutionContext(), request, *this, options);730 ThreadableLoader::loadResourceSynchronously(scriptExecutionContext(), WTFMove(request), *this, options); 731 731 InspectorInstrumentation::didLoadXHRSynchronously(scriptExecutionContext()); 732 732 }
Note: See TracChangeset
for help on using the changeset viewer.