Changeset 222613 in webkit
- Timestamp:
- Sep 28, 2017 10:05:26 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 17 added
- 56 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r222611 r222613 1 2017-09-28 Chris Dumez <cdumez@apple.com> 2 3 Add support for <link rel=preconnect> 4 https://bugs.webkit.org/show_bug.cgi?id=177474 5 <rdar://problem/33141380> 6 7 Reviewed by Alex Christensen. 8 9 * fast/dom/HTMLLinkElement/preconnect-support-expected.txt: Added. 10 * fast/dom/HTMLLinkElement/preconnect-support.html: Added. 11 * http/tests/preconnect/link-rel-preconnect-http-expected.txt: Added. 12 * http/tests/preconnect/link-rel-preconnect-http.html: Added. 13 * http/tests/preconnect/link-rel-preconnect-https-expected.txt: Added. 14 * http/tests/preconnect/link-rel-preconnect-https.html: Added. 15 Add layout test coverage. 16 17 * platform/mac-elcapitan-wk2/fast/dom/HTMLLinkElement/preconnect-support-expected.txt: Added. 18 * platform/mac-wk1/TestExpectations: 19 * platform/mac-wk1/fast/dom/HTMLLinkElement/preconnect-support-expected.txt: Added. 20 * platform/mac-wk2/TestExpectations: 21 Skip or land failure expectations for platforms where the feature is disabled. 22 1 23 2017-09-28 Ryan Haddad <ryanhaddad@apple.com> 2 24 -
trunk/LayoutTests/platform/mac-wk1/TestExpectations
r222611 r222613 404 404 http/tests/workers/service [ Skip ] 405 405 406 # Link preconnect is disabled on WebKit1 because it does not use NETWORK_SESSION. 407 http/tests/preconnect [ Skip ] 408 406 409 webkit.org/b/175345 fast/images/animated-gif-scrolling-crash.html [ Pass Timeout ] 407 410 -
trunk/LayoutTests/platform/mac-wk2/TestExpectations
r222423 r222613 794 794 [ HighSierra+ ] http/tests/media/video-buffered-range-contains-currentTime.html [ Pass ImageOnlyFailure ] 795 795 796 # Link preconnect is disabled on pre-High Sierra because the CFNetwork SPI is missing. 797 [ ElCapitan Sierra ] http/tests/preconnect [ Skip ] 798 796 799 webkit.org/b/176486 [ ElCapitan Debug ] imported/w3c/web-platform-tests/background-fetch/interfaces-worker.https.html [ Pass Failure ] 797 800 -
trunk/Source/WebCore/ChangeLog
r222612 r222613 1 2017-09-28 Chris Dumez <cdumez@apple.com> 2 3 Add support for <link rel=preconnect> 4 https://bugs.webkit.org/show_bug.cgi?id=177474 5 <rdar://problem/33141380> 6 7 Reviewed by Alex Christensen. 8 9 Add support for <link rel=preconnect>: 10 - https://w3c.github.io/resource-hints/#preconnect 11 12 It is currently only enabled for WK2 on MacOS High Sierra+ 13 and iOS 11+. 14 15 Tests: fast/dom/HTMLLinkElement/preconnect-support.html 16 http/tests/preconnect/link-rel-preconnect-http.html 17 http/tests/preconnect/link-rel-preconnect-https.html 18 19 * bindings/js/JSDOMExceptionHandling.h: 20 * bindings/scripts/CodeGeneratorJS.pm: 21 (GenerateCallbackHeaderContent): 22 * bindings/scripts/IDLAttributes.json: 23 * dom/Document.cpp: 24 (WebCore::Document::addConsoleMessage): 25 (WebCore::Document::setConsoleMessageListener): 26 * dom/Document.h: 27 * dom/StringCallback.idl: 28 * html/DOMTokenList.cpp: 29 (WebCore::DOMTokenList::DOMTokenList): 30 (WebCore::DOMTokenList::supports): 31 * html/DOMTokenList.h: 32 (WebCore::DOMTokenList::DOMTokenList): 33 * html/HTMLAnchorElement.cpp: 34 (WebCore::HTMLAnchorElement::relList): 35 * html/HTMLIFrameElement.cpp: 36 (WebCore::HTMLIFrameElement::sandbox): 37 * html/HTMLLinkElement.cpp: 38 (WebCore::HTMLLinkElement::parseAttribute): 39 (WebCore::HTMLLinkElement::relList): 40 * html/LinkRelAttribute.cpp: 41 (WebCore::LinkRelAttribute::LinkRelAttribute): 42 (WebCore::LinkRelAttribute::isSupported): 43 * html/LinkRelAttribute.h: 44 * html/parser/HTMLPreloadScanner.cpp: 45 (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): 46 * loader/LinkLoader.cpp: 47 (WebCore::LinkLoader::loadLinksFromHeader): 48 (WebCore::LinkLoader::loadLink): 49 * loader/LoaderStrategy.h: 50 * page/Settings.in: 51 * testing/Internals.cpp: 52 (WebCore::Internals::Internals): 53 (WebCore::Internals::setConsoleMessageListener): 54 * testing/Internals.h: 55 * testing/Internals.idl: 56 1 57 2017-09-28 Zalan Bujtas <zalan@apple.com> 2 58 -
trunk/Source/WebCore/PAL/ChangeLog
r222592 r222613 1 2017-09-28 Chris Dumez <cdumez@apple.com> 2 3 Add support for <link rel=preconnect> 4 https://bugs.webkit.org/show_bug.cgi?id=177474 5 <rdar://problem/33141380> 6 7 Reviewed by Alex Christensen. 8 9 Add new CFNetwork SPI for preconnecting. 10 11 * pal/spi/cf/CFNetworkSPI.h: 12 1 13 2017-09-27 Tim Horton <timothy_horton@apple.com> 2 14 -
trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h
r221986 r222613 113 113 - (NSDictionary *)_timingData; 114 114 @end 115 116 #if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000) 117 @interface NSURLSessionTask (ResourceHints) 118 @property (nonatomic, assign) BOOL _preconnect; 119 @end 120 #endif 115 121 116 122 @interface NSHTTPCookie () -
trunk/Source/WebCore/bindings/js/JSDOMExceptionHandling.h
r222250 r222613 63 63 64 64 WEBCORE_EXPORT JSC::EncodedJSValue throwArgumentMustBeEnumError(JSC::ExecState&, JSC::ThrowScope&, unsigned argumentIndex, const char* argumentName, const char* functionInterfaceName, const char* functionName, const char* expectedValues); 65 JSC::EncodedJSValue throwArgumentMustBeFunctionError(JSC::ExecState&, JSC::ThrowScope&, unsigned argumentIndex, const char* argumentName, const char* functionInterfaceName, const char* functionName);65 WEBCORE_EXPORT JSC::EncodedJSValue throwArgumentMustBeFunctionError(JSC::ExecState&, JSC::ThrowScope&, unsigned argumentIndex, const char* argumentName, const char* functionInterfaceName, const char* functionName); 66 66 WEBCORE_EXPORT JSC::EncodedJSValue throwArgumentTypeError(JSC::ExecState&, JSC::ThrowScope&, unsigned argumentIndex, const char* argumentName, const char* functionInterfaceName, const char* functionName, const char* expectedType); 67 67 WEBCORE_EXPORT JSC::EncodedJSValue throwRequiredMemberTypeError(JSC::ExecState&, JSC::ThrowScope&, const char* memberName, const char* dictionaryName, const char* expectedType); -
trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
r222473 r222613 5819 5819 $includesRef->{"${name}.h"} = 1; 5820 5820 5821 push(@$contentRef, "class $className final : public ${name} {\n"); 5821 my $exportMacro = GetExportMacroForJSClass($interfaceOrCallback); 5822 5823 push(@$contentRef, "class $exportMacro$className final : public ${name} {\n"); 5822 5824 push(@$contentRef, "public:\n"); 5823 5825 … … 5876 5878 5877 5879 # toJS(). 5878 push(@$contentRef, "JSC::JSValue toJS(${name}&);\n");5880 push(@$contentRef, $exportMacro . "JSC::JSValue toJS(${name}&);\n"); 5879 5881 push(@$contentRef, "inline JSC::JSValue toJS(${name}* impl) { return impl ? toJS(*impl) : JSC::jsNull(); }\n\n"); 5880 5882 } -
trunk/Source/WebCore/bindings/scripts/IDLAttributes.json
r222454 r222613 187 187 }, 188 188 "ExportMacro": { 189 "contextsAllowed": ["interface", "dictionary", "enum" ],189 "contextsAllowed": ["interface", "dictionary", "enum", "callback-function"], 190 190 "values": ["WEBCORE_EXPORT", "WEBCORE_TESTSUPPORT_EXPORT"] 191 191 }, -
trunk/Source/WebCore/dom/Document.cpp
r222575 r222613 174 174 #include "SocketProvider.h" 175 175 #include "StorageEvent.h" 176 #include "StringCallback.h" 176 177 #include "StyleProperties.h" 177 178 #include "StyleResolveForDocument.h" … … 5612 5613 if (Page* page = this->page()) 5613 5614 page->console().addMessage(source, level, message, requestIdentifier, this); 5615 5616 if (m_consoleMessageListener) 5617 m_consoleMessageListener->scheduleCallback(*this, message); 5614 5618 } 5615 5619 … … 7341 7345 } 7342 7346 7347 void Document::setConsoleMessageListener(RefPtr<StringCallback>&& listener) 7348 { 7349 m_consoleMessageListener = listener; 7350 } 7351 7343 7352 } // namespace WebCore -
trunk/Source/WebCore/dom/Document.h
r222422 r222613 169 169 class SerializedScriptValue; 170 170 class Settings; 171 class StringCallback; 171 172 class StyleResolver; 172 173 class StyleSheet; … … 1360 1361 void setUserGrantsStorageAccessOverride(bool value) { m_grantStorageAccessOverride = value; } 1361 1362 1363 WEBCORE_EXPORT void setConsoleMessageListener(RefPtr<StringCallback>&&); // For testing. 1364 1362 1365 protected: 1363 1366 enum ConstructionFlags { Synthesized = 1, NonRenderedPlaceholder = 1 << 1 }; … … 1809 1812 mutable PAL::SessionID m_sessionID; 1810 1813 mutable RefPtr<PAL::Logger> m_logger; 1814 RefPtr<StringCallback> m_consoleMessageListener; 1811 1815 1812 1816 static bool hasEverCreatedAnAXObjectCache; -
trunk/Source/WebCore/dom/StringCallback.idl
r208408 r222613 29 29 */ 30 30 31 callback StringCallback = void (DOMString data); 31 [ 32 ExportMacro=WEBCORE_TESTSUPPORT_EXPORT 33 ] callback StringCallback = void (DOMString data); -
trunk/Source/WebCore/html/DOMTokenList.cpp
r219856 r222613 36 36 namespace WebCore { 37 37 38 DOMTokenList::DOMTokenList(Element& element, const QualifiedName& attributeName, WTF::Function<bool(StringView)>&& isSupportedToken)38 DOMTokenList::DOMTokenList(Element& element, const QualifiedName& attributeName, IsSupportedTokenFunction&& isSupportedToken) 39 39 : m_element(element) 40 40 , m_attributeName(attributeName) … … 192 192 if (!m_isSupportedToken) 193 193 return Exception { TypeError }; 194 return m_isSupportedToken( token);194 return m_isSupportedToken(m_element.document(), token); 195 195 } 196 196 -
trunk/Source/WebCore/html/DOMTokenList.h
r219237 r222613 33 33 WTF_MAKE_FAST_ALLOCATED; 34 34 public: 35 DOMTokenList(Element&, const QualifiedName& attributeName, WTF::Function<bool(StringView)>&& isSupportedToken = { }); 35 using IsSupportedTokenFunction = WTF::Function<bool(Document&, StringView)>; 36 DOMTokenList(Element&, const QualifiedName& attributeName, IsSupportedTokenFunction&& isSupportedToken = { }); 36 37 37 38 void associatedAttributeValueChanged(const AtomicString&); … … 74 75 bool m_tokensNeedUpdating { true }; 75 76 Vector<AtomicString> m_tokens; 76 WTF::Function<bool(StringView)>m_isSupportedToken;77 IsSupportedTokenFunction m_isSupportedToken; 77 78 }; 78 79 -
trunk/Source/WebCore/html/HTMLAnchorElement.cpp
r212972 r222613 308 308 { 309 309 if (!m_relList) 310 m_relList = std::make_unique<DOMTokenList>(*this, HTMLNames::relAttr, []( StringView token) {310 m_relList = std::make_unique<DOMTokenList>(*this, HTMLNames::relAttr, [](Document&, StringView token) { 311 311 return equalIgnoringASCIICase(token, "noreferrer") || equalIgnoringASCIICase(token, "noopener"); 312 312 }); -
trunk/Source/WebCore/html/HTMLIFrameElement.cpp
r206616 r222613 52 52 { 53 53 if (!m_sandbox) 54 m_sandbox = std::make_unique<DOMTokenList>(*this, sandboxAttr, []( StringView token) {54 m_sandbox = std::make_unique<DOMTokenList>(*this, sandboxAttr, [](Document&, StringView token) { 55 55 return SecurityContext::isSupportedSandboxPolicy(token); 56 56 }); -
trunk/Source/WebCore/html/HTMLLinkElement.cpp
r220812 r222613 157 157 { 158 158 if (name == relAttr) { 159 m_relAttribute = LinkRelAttribute( value);159 m_relAttribute = LinkRelAttribute(document(), value); 160 160 if (m_relList) 161 161 m_relList->associatedAttributeValueChanged(value); … … 499 499 { 500 500 if (!m_relList) 501 m_relList = std::make_unique<DOMTokenList>(*this, HTMLNames::relAttr, []( StringView token) {502 return LinkRelAttribute::isSupported( token);501 m_relList = std::make_unique<DOMTokenList>(*this, HTMLNames::relAttr, [](Document& document, StringView token) { 502 return LinkRelAttribute::isSupported(document, token); 503 503 }); 504 504 return *m_relList; -
trunk/Source/WebCore/html/LinkRelAttribute.cpp
r216102 r222613 33 33 #include "LinkRelAttribute.h" 34 34 35 #include "Document.h" 35 36 #include "LinkIconType.h" 36 37 #include "RuntimeEnabledFeatures.h" 38 #include "Settings.h" 37 39 #include <wtf/text/StringView.h> 38 40 #include <wtf/text/WTFString.h> … … 45 47 46 48 // Keep LinkRelAttribute::isSupported() in sync when updating this constructor. 47 LinkRelAttribute::LinkRelAttribute( const String& rel)49 LinkRelAttribute::LinkRelAttribute(Document& document, const String& rel) 48 50 { 49 51 if (equalLettersIgnoringASCIICase(rel, "stylesheet")) … … 57 59 else if (equalLettersIgnoringASCIICase(rel, "dns-prefetch")) 58 60 isDNSPrefetch = true; 61 else if (document.settings().linkPreconnectEnabled() && equalLettersIgnoringASCIICase(rel, "preconnect")) 62 isLinkPreconnect = true; 59 63 else if (RuntimeEnabledFeatures::sharedFeatures().linkPreloadEnabled() && equalLettersIgnoringASCIICase(rel, "preload")) 60 64 isLinkPreload = true; … … 88 92 89 93 // https://html.spec.whatwg.org/#linkTypes 90 bool LinkRelAttribute::isSupported( StringView attribute)94 bool LinkRelAttribute::isSupported(Document& document, StringView attribute) 91 95 { 92 96 static const char* const supportedAttributes[] = { … … 102 106 } 103 107 108 if (document.settings().linkPreconnectEnabled() && equalIgnoringASCIICase(attribute, "preconnect")) 109 return true; 110 104 111 if (RuntimeEnabledFeatures::sharedFeatures().linkPreloadEnabled() && equalIgnoringASCIICase(attribute, "preload")) 105 112 return true; -
trunk/Source/WebCore/html/LinkRelAttribute.h
r208985 r222613 38 38 namespace WebCore { 39 39 40 class Document; 40 41 enum class LinkIconType; 41 42 … … 46 47 bool isDNSPrefetch { false }; 47 48 bool isLinkPreload { false }; 49 bool isLinkPreconnect { false }; 48 50 #if ENABLE(LINK_PREFETCH) 49 51 bool isLinkPrefetch { false }; … … 52 54 53 55 LinkRelAttribute(); 54 explicit LinkRelAttribute(const String&);56 LinkRelAttribute(Document&, const String&); 55 57 56 static bool isSupported( StringView);58 static bool isSupported(Document&, StringView); 57 59 }; 58 60 -
trunk/Source/WebCore/html/parser/HTMLPreloadScanner.cpp
r220812 r222613 233 233 setUrlToLoad(attributeValue); 234 234 else if (match(attributeName, relAttr)) { 235 LinkRelAttribute parsedAttribute { attributeValue };235 LinkRelAttribute parsedAttribute { document, attributeValue }; 236 236 m_linkIsStyleSheet = relAttributeIsStyleSheet(parsedAttribute); 237 237 m_linkIsPreload = parsedAttribute.isLinkPreload; -
trunk/Source/WebCore/loader/LinkLoader.cpp
r222422 r222613 48 48 #include "LinkPreloadResourceClients.h" 49 49 #include "LinkRelAttribute.h" 50 #include "LoaderStrategy.h" 50 51 #include "MIMETypeRegistry.h" 51 52 #include "MediaQueryEvaluator.h" 53 #include "PlatformStrategies.h" 54 #include "ResourceError.h" 52 55 #include "RuntimeEnabledFeatures.h" 53 56 #include "Settings.h" … … 103 106 } 104 107 105 LinkRelAttribute relAttribute( header.rel());108 LinkRelAttribute relAttribute(document, header.rel()); 106 109 URL url(baseURL, header.url()); 107 110 // Sanity check to avoid re-entrancy here. … … 251 254 } 252 255 256 if (relAttribute.isLinkPreconnect && href.isValid() && href.protocolIsInHTTPFamily()) { 257 ASSERT(document.settings().linkPreconnectEnabled()); 258 StoredCredentialsPolicy storageCredentialsPolicy = StoredCredentialsPolicy::Use; 259 if (equalIgnoringASCIICase(crossOrigin, "anonymous") && document.securityOrigin().canAccess(SecurityOrigin::create(href))) 260 storageCredentialsPolicy = StoredCredentialsPolicy::DoNotUse; 261 platformStrategies()->loaderStrategy()->preconnectTo(document.sessionID(), href, storageCredentialsPolicy, [weakDocument = document.createWeakPtr(), href](ResourceError error) { 262 if (!weakDocument) 263 return; 264 265 if (!error.isNull()) 266 weakDocument->addConsoleMessage(MessageSource::Network, MessageLevel::Error, makeString(ASCIILiteral("Failed to preconnect to "), href.string(), ASCIILiteral(". Error: "), error.localizedDescription())); 267 else 268 weakDocument->addConsoleMessage(MessageSource::Network, MessageLevel::Info, makeString(ASCIILiteral("Successfuly preconnected to "), href.string())); 269 }); 270 } 271 253 272 if (m_client.shouldLoadLink()) { 254 273 auto resourceClient = preloadIfNeeded(relAttribute, href, document, as, media, mimeType, crossOrigin, this); -
trunk/Source/WebCore/loader/LoaderStrategy.h
r222467 r222613 29 29 #include "ResourceLoaderOptions.h" 30 30 #include "StoredCredentialsPolicy.h" 31 #include <pal/SessionID.h> 31 32 #include <wtf/Forward.h> 32 33 #include <wtf/SHA1.h> … … 68 69 virtual void startPingLoad(Frame&, ResourceRequest&, const HTTPHeaderMap& originalRequestHeaders, const FetchOptions&, PingLoadCompletionHandler&& = { }) = 0; 69 70 71 using PreconnectCompletionHandler = WTF::Function<void(const ResourceError&)>; 72 virtual void preconnectTo(PAL::SessionID, const URL&, StoredCredentialsPolicy, PreconnectCompletionHandler&&) = 0; 73 70 74 virtual void storeDerivedDataToCache(const SHA1::Digest& bodyKey, const String& type, const String& partition, WebCore::SharedBuffer&) = 0; 71 75 -
trunk/Source/WebCore/page/Settings.in
r222006 r222613 292 292 subresourceIntegrityEnabled initial=true 293 293 294 linkPreconnectEnabled initial=false 295 294 296 beaconAPIEnabled initial=false 295 297 -
trunk/Source/WebCore/testing/Internals.cpp
r222478 r222613 131 131 #include "SpellChecker.h" 132 132 #include "StaticNodeList.h" 133 #include "StringCallback.h" 133 134 #include "StyleRule.h" 134 135 #include "StyleScope.h" … … 504 505 setAutomaticTextReplacementEnabled(true); 505 506 } 507 508 setConsoleMessageListener(nullptr); 506 509 } 507 510 … … 4178 4181 } 4179 4182 4183 void Internals::setConsoleMessageListener(RefPtr<StringCallback>&& listener) 4184 { 4185 if (!contextDocument()) 4186 return; 4187 4188 contextDocument()->setConsoleMessageListener(WTFMove(listener)); 4189 } 4190 4180 4191 } // namespace WebCore -
trunk/Source/WebCore/testing/Internals.h
r222006 r222613 78 78 class SerializedScriptValue; 79 79 class SourceBuffer; 80 class StringCallback; 80 81 class StyleSheet; 81 82 class TimeRanges; … … 604 605 void cacheStorageEngineRepresentation(DOMPromiseDeferred<IDLDOMString>&&); 605 606 607 void setConsoleMessageListener(RefPtr<StringCallback>&&); 608 606 609 private: 607 610 explicit Internals(Document&); -
trunk/Source/WebCore/testing/Internals.idl
r222006 r222613 549 549 Promise<DOMString> cacheStorageEngineRepresentation(); 550 550 551 void setConsoleMessageListener(StringCallback callback); 552 551 553 DOMString audioSessionCategory(); 552 554 }; -
trunk/Source/WebKit/ChangeLog
r222610 r222613 1 2017-09-28 Chris Dumez <cdumez@apple.com> 2 3 Add support for <link rel=preconnect> 4 https://bugs.webkit.org/show_bug.cgi?id=177474 5 <rdar://problem/33141380> 6 7 Reviewed by Alex Christensen. 8 9 Add support for <link rel=preconnect>: 10 - https://w3c.github.io/resource-hints/#preconnect 11 12 Also add corresponding native private API. 13 14 * NetworkProcess/NetworkConnectionToWebProcess.cpp: 15 (WebKit::NetworkConnectionToWebProcess::preconnectTo): 16 (WebKit::NetworkConnectionToWebProcess::didFinishPreconnection): 17 * NetworkProcess/NetworkConnectionToWebProcess.h: 18 * NetworkProcess/NetworkConnectionToWebProcess.messages.in: 19 * NetworkProcess/NetworkDataTask.cpp: 20 (WebKit::NetworkDataTask::create): 21 * NetworkProcess/NetworkLoadParameters.h: 22 * NetworkProcess/NetworkProcess.cpp: 23 (WebKit::NetworkProcess::preconnectTo): 24 * NetworkProcess/NetworkProcess.h: 25 * NetworkProcess/NetworkProcess.messages.in: 26 * NetworkProcess/PreconnectTask.cpp: Added. 27 (WebKit::PreconnectTask::PreconnectTask): 28 (WebKit::PreconnectTask::~PreconnectTask): 29 (WebKit::PreconnectTask::willPerformHTTPRedirection): 30 (WebKit::PreconnectTask::didReceiveChallenge): 31 (WebKit::PreconnectTask::didReceiveResponseNetworkSession): 32 (WebKit::PreconnectTask::didReceiveData): 33 (WebKit::PreconnectTask::didCompleteWithError): 34 (WebKit::PreconnectTask::didSendData): 35 (WebKit::PreconnectTask::wasBlocked): 36 (WebKit::PreconnectTask::cannotShowURL): 37 (WebKit::PreconnectTask::didFinish): 38 * NetworkProcess/PreconnectTask.h: Copied from Source/WebKit/NetworkProcess/NetworkLoadParameters.h. 39 * NetworkProcess/cocoa/NetworkDataTaskCocoa.h: 40 * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: 41 (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa): 42 * Shared/WebCoreArgumentCoders.h: 43 * Shared/WebPreferencesDefinitions.h: 44 * UIProcess/API/C/WKContext.cpp: 45 (WKContextPreconnectToServer): 46 * UIProcess/API/C/WKContextPrivate.h: 47 * UIProcess/API/Cocoa/WKProcessPool.mm: 48 (-[WKProcessPool _preconnectToServer:]): 49 * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: 50 * UIProcess/WebProcessPool.cpp: 51 (WebKit::WebProcessPool::preconnectToServer): 52 * UIProcess/WebProcessPool.h: 53 * WebKit.xcodeproj/project.pbxproj: 54 * WebProcess/Network/NetworkProcessConnection.cpp: 55 (WebKit::NetworkProcessConnection::didFinishPreconnection): 56 * WebProcess/Network/NetworkProcessConnection.h: 57 * WebProcess/Network/NetworkProcessConnection.messages.in: 58 * WebProcess/Network/WebLoaderStrategy.cpp: 59 (WebKit::WebLoaderStrategy::networkProcessCrashed): 60 (WebKit::generateLoadIdentifier): 61 (WebKit::WebLoaderStrategy::startPingLoad): 62 (WebKit::WebLoaderStrategy::preconnectTo): 63 (WebKit::WebLoaderStrategy::didFinishPreconnection): 64 * WebProcess/Network/WebLoaderStrategy.h: 65 * WebProcess/WebPage/WebPage.cpp: 66 (WebKit::WebPage::updatePreferences): 67 * config.h: 68 1 69 2017-09-28 Zan Dobersek <zdobersek@igalia.com> 2 70 -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
r222570 r222613 44 44 #include "NetworkSocketStream.h" 45 45 #include "NetworkSocketStreamMessages.h" 46 #include "PreconnectTask.h" 46 47 #include "RemoteNetworkingContext.h" 47 48 #include "SessionTracker.h" 48 49 #include "WebCoreArgumentCoders.h" 50 #include "WebErrors.h" 49 51 #include "WebsiteDataStoreParameters.h" 50 52 #include <WebCore/NetworkStorageSession.h> … … 290 292 } 291 293 294 void NetworkConnectionToWebProcess::preconnectTo(PAL::SessionID sessionID, uint64_t preconnectionIdentifier, const URL& url, WebCore::StoredCredentialsPolicy storedCredentialsPolicy) 295 { 296 #if ENABLE(SERVER_PRECONNECT) 297 new PreconnectTask(sessionID, url, storedCredentialsPolicy, [this, protectedThis = makeRef(*this), identifier = preconnectionIdentifier] (const ResourceError& error) { 298 didFinishPreconnection(identifier, error); 299 }); 300 #else 301 UNUSED_PARAM(storedCredentialsPolicy); 302 didFinishPreconnection(preconnectionIdentifier, internalError(url)); 303 #endif 304 } 305 306 void NetworkConnectionToWebProcess::didFinishPreconnection(uint64_t preconnectionIdentifier, const ResourceError& error) 307 { 308 if (!m_connection->isValid()) 309 return; 310 311 m_connection->send(Messages::NetworkProcessConnection::DidFinishPreconnection(preconnectionIdentifier, error), 0); 312 } 313 292 314 static NetworkStorageSession& storageSession(PAL::SessionID sessionID) 293 315 { -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
r221275 r222613 77 77 NetworkConnectionToWebProcess(IPC::Connection::Identifier); 78 78 79 void didFinishPreconnection(uint64_t preconnectionIdentifier, const WebCore::ResourceError&); 80 79 81 // IPC::Connection::Client 80 82 void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override; … … 91 93 void loadPing(NetworkResourceLoadParameters&&, WebCore::HTTPHeaderMap&& originalRequestHeaders); 92 94 void prefetchDNS(const String&); 95 void preconnectTo(PAL::SessionID, uint64_t preconnectionIdentifier, const WebCore::URL&, WebCore::StoredCredentialsPolicy); 93 96 94 97 void removeLoadIdentifier(ResourceLoadIdentifier); -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in
r221275 r222613 29 29 SetDefersLoading(uint64_t resourceLoadIdentifier, bool defers) 30 30 PrefetchDNS(String hostname) 31 PreconnectTo(PAL::SessionID sessionID, uint64_t preconnectionIdentifier, WebCore::URL url, enum WebCore::StoredCredentialsPolicy storedCredentialsPolicy); 31 32 32 33 StartDownload(PAL::SessionID sessionID, WebKit::DownloadID downloadID, WebCore::ResourceRequest request, String suggestedName) -
trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp
r222492 r222613 54 54 55 55 #if PLATFORM(COCOA) 56 return NetworkDataTaskCocoa::create(session, client, parameters.request, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect );56 return NetworkDataTaskCocoa::create(session, client, parameters.request, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.shouldPreconnectOnly); 57 57 #endif 58 58 #if USE(SOUP) -
trunk/Source/WebKit/NetworkProcess/NetworkLoadParameters.h
r222467 r222613 34 34 namespace WebKit { 35 35 36 enum class PreconnectOnly { No, Yes }; 37 36 38 class NetworkLoadParameters { 37 39 public: … … 50 52 Vector<RefPtr<WebCore::BlobDataFileReference>> blobFileReferences; 51 53 #endif 54 PreconnectOnly shouldPreconnectOnly { PreconnectOnly::No }; 52 55 }; 53 56 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r222396 r222613 41 41 #include "NetworkResourceLoader.h" 42 42 #include "NetworkSession.h" 43 #include "PreconnectTask.h" 43 44 #include "RemoteNetworkingContext.h" 44 45 #include "SessionTracker.h" … … 726 727 } 727 728 729 void NetworkProcess::preconnectTo(const WebCore::URL& url, WebCore::StoredCredentialsPolicy storedCredentialsPolicy) 730 { 731 #if ENABLE(SERVER_PRECONNECT) 732 new PreconnectTask(PAL::SessionID::defaultSessionID(), url, storedCredentialsPolicy); 733 #else 734 UNUSED_PARAM(url); 735 UNUSED_PARAM(storedCredentialsPolicy); 736 #endif 737 } 738 728 739 #if !PLATFORM(COCOA) 729 740 void NetworkProcess::initializeProcess(const ChildProcessInitializationParameters&) -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r222396 r222613 55 55 struct SecurityOriginData; 56 56 struct SoupNetworkProxySettings; 57 enum class StoredCredentialsPolicy; 58 class URL; 57 59 } 58 60 … … 138 140 String cacheStorageDirectory(PAL::SessionID) const; 139 141 142 void preconnectTo(const WebCore::URL&, WebCore::StoredCredentialsPolicy); 143 140 144 private: 141 145 NetworkProcess(); -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
r222396 r222613 83 83 DidGrantSandboxExtensionsToStorageProcessForBlobs(uint64_t requestID) 84 84 85 PreconnectTo(WebCore::URL url, enum WebCore::StoredCredentialsPolicy storedCredentialsPolicy); 86 85 87 #if HAVE(CFNETWORK_STORAGE_PARTITIONING) 86 88 UpdatePrevalentDomainsToPartitionOrBlockCookies(PAL::SessionID sessionID, Vector<String> domainsToPartition, Vector<String> domainsToBlock, Vector<String> domainsToNeitherPartitionNorBlock, bool shouldClearFirst) -
trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h
r222467 r222613 29 29 30 30 #include "NetworkDataTask.h" 31 #include "NetworkLoadParameters.h" 31 32 #include <WebCore/NetworkLoadMetrics.h> 32 33 #include <wtf/RetainPtr.h> … … 41 42 friend class NetworkSessionCocoa; 42 43 public: 43 static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect )44 static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly shouldPreconnectOnly) 44 45 { 45 return adoptRef(*new NetworkDataTaskCocoa(session, client, request, storedCredentialsPolicy, shouldContentSniff, shouldClearReferrerOnHTTPSToHTTPRedirect ));46 return adoptRef(*new NetworkDataTaskCocoa(session, client, request, storedCredentialsPolicy, shouldContentSniff, shouldClearReferrerOnHTTPSToHTTPRedirect, shouldPreconnectOnly)); 46 47 } 47 48 … … 72 73 73 74 private: 74 NetworkDataTaskCocoa(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentialsPolicy, WebCore::ContentSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect );75 NetworkDataTaskCocoa(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentialsPolicy, WebCore::ContentSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly); 75 76 76 77 bool tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler&); -
trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm
r222467 r222613 75 75 } 76 76 77 NetworkDataTaskCocoa::NetworkDataTaskCocoa(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& requestWithCredentials, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect )77 NetworkDataTaskCocoa::NetworkDataTaskCocoa(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& requestWithCredentials, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly shouldPreconnectOnly) 78 78 : NetworkDataTask(session, client, requestWithCredentials, storedCredentialsPolicy, shouldClearReferrerOnHTTPSToHTTPRedirect) 79 79 { … … 127 127 cocoaSession.m_dataTaskMapWithoutState.add([m_task taskIdentifier], this); 128 128 LOG(NetworkSession, "%llu Creating NetworkDataTask with URL %s", [m_task taskIdentifier], nsRequest.URL.absoluteString.UTF8String); 129 } 130 131 if (shouldPreconnectOnly == PreconnectOnly::Yes) { 132 #if ENABLE(SERVER_PRECONNECT) 133 m_task.get()._preconnect = true; 134 #else 135 ASSERT_NOT_REACHED(); 136 #endif 129 137 } 130 138 -
trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h
r222595 r222613 40 40 #include <WebCore/RealtimeMediaSource.h> 41 41 #include <WebCore/ScrollSnapOffsetsInfo.h> 42 #include <WebCore/StoredCredentialsPolicy.h> 42 43 43 44 namespace WTF { … … 776 777 }; 777 778 779 template <> struct EnumTraits<WebCore::StoredCredentialsPolicy> { 780 using values = EnumValues< 781 WebCore::StoredCredentialsPolicy, 782 WebCore::StoredCredentialsPolicy::DoNotUse, 783 WebCore::StoredCredentialsPolicy::Use 784 >; 785 }; 786 778 787 } // namespace WTF -
trunk/Source/WebKit/Shared/WebPreferencesDefinitions.h
r222490 r222613 44 44 #define DEFAULT_HIDDEN_PAGE_DOM_TIMER_THROTTLING_ENABLED false 45 45 #define DEFAULT_HIDDEN_PAGE_CSS_ANIMATION_SUSPENSION_ENABLED false 46 #endif 47 48 #if ENABLE(SERVER_PRECONNECT) 49 #define DEFAULT_LINK_PRECONNECT_ENABLED true 50 #else 51 #define DEFAULT_LINK_PRECONNECT_ENABLED false 46 52 #endif 47 53 … … 182 188 macro(JavaScriptCanAccessClipboard, javaScriptCanAccessClipboard, Bool, bool, false, "", "") \ 183 189 macro(ShouldPrintBackgrounds, shouldPrintBackgrounds, Bool, bool, DEFAULT_SHOULD_PRINT_BACKGROUNDS, "", "") \ 190 macro(LinkPreconnect, linkPreconnect, Bool, bool, DEFAULT_LINK_PRECONNECT_ENABLED, "", "") \ 184 191 macro(FullScreenEnabled, fullScreenEnabled, Bool, bool, false, "", "") \ 185 192 macro(AsynchronousSpellCheckingEnabled, asynchronousSpellCheckingEnabled, Bool, bool, false, "", "") \ -
trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp
r222309 r222613 408 408 } 409 409 410 void WKContextPreconnectToServer(WKContextRef contextRef, WKURLRef serverURLRef) 411 { 412 toImpl(contextRef)->preconnectToServer(URL(URL(), toWTFString(serverURLRef))); 413 } 414 410 415 WKCookieManagerRef WKContextGetCookieManager(WKContextRef contextRef) 411 416 { -
trunk/Source/WebKit/UIProcess/API/C/WKContextPrivate.h
r222309 r222613 106 106 WK_EXPORT void WKContextSetFontWhitelist(WKContextRef, WKArrayRef); 107 107 108 WK_EXPORT void WKContextPreconnectToServer(WKContextRef context, WKURLRef serverURL); 109 108 110 WK_EXPORT WKProcessID WKContextGetNetworkProcessIdentifier(WKContextRef context); 109 111 WK_EXPORT WKProcessID WKContextGetDatabaseProcessIdentifier(WKContextRef context); -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm
r220857 r222613 416 416 } 417 417 418 - (void)_preconnectToServer:(NSURL *)serverURL 419 { 420 _processPool->preconnectToServer(serverURL); 421 } 422 418 423 - (size_t)_pluginProcessCount 419 424 { -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h
r221930 r222613 88 88 + (void)_forceGameControllerFramework WK_API_AVAILABLE(macosx(10.13), ios(11.0)); 89 89 90 - (void)_preconnectToServer:(NSURL *)serverURL WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 91 90 92 @property (nonatomic, getter=_isCookieStoragePartitioningEnabled, setter=_setCookieStoragePartitioningEnabled:) BOOL _cookieStoragePartitioningEnabled WK_API_AVAILABLE(macosx(10.12.3), ios(10.3)); 91 93 -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r222309 r222613 1158 1158 } 1159 1159 1160 void WebProcessPool::preconnectToServer(const URL& url) 1161 { 1162 if (!url.isValid() || !url.protocolIsInHTTPFamily()) 1163 return; 1164 1165 ensureNetworkProcess().send(Messages::NetworkProcess::PreconnectTo(url, StoredCredentialsPolicy::Use), 0); 1166 } 1167 1160 1168 void WebProcessPool::registerURLSchemeAsLocal(const String& urlScheme) 1161 1169 { -
trunk/Source/WebKit/UIProcess/WebProcessPool.h
r222309 r222613 217 217 void registerURLSchemeAsCORSEnabled(const String&); 218 218 void registerURLSchemeAsCachePartitioned(const String&); 219 void preconnectToServer(const WebCore::URL&); 219 220 220 221 VisitedLinkStore& visitedLinkStore() { return m_visitedLinkStore.get(); } -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r222583 r222613 1381 1381 839A2F311E2067450039057E /* HighPerformanceGraphicsUsageSampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 839A2F2F1E2067390039057E /* HighPerformanceGraphicsUsageSampler.cpp */; }; 1382 1382 839A2F321E2067450039057E /* HighPerformanceGraphicsUsageSampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 839A2F301E2067390039057E /* HighPerformanceGraphicsUsageSampler.h */; }; 1383 83A0ED341F747CCD003299EB /* PreconnectTask.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83A0ED331F747CC7003299EB /* PreconnectTask.cpp */; }; 1384 83A0ED351F747CCF003299EB /* PreconnectTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 83A0ED321F747CC6003299EB /* PreconnectTask.h */; }; 1383 1385 83BDCCB91AC5FDB6003F6441 /* NetworkCacheStatistics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83BDCCB81AC5FDB6003F6441 /* NetworkCacheStatistics.cpp */; }; 1384 1386 83BFAC421D96137C00433490 /* BlobDownloadClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 83BFAC401D96136000433490 /* BlobDownloadClient.h */; }; … … 3734 3736 839A2F2F1E2067390039057E /* HighPerformanceGraphicsUsageSampler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HighPerformanceGraphicsUsageSampler.cpp; sourceTree = "<group>"; }; 3735 3737 839A2F301E2067390039057E /* HighPerformanceGraphicsUsageSampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HighPerformanceGraphicsUsageSampler.h; sourceTree = "<group>"; }; 3738 83A0ED321F747CC6003299EB /* PreconnectTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PreconnectTask.h; path = NetworkProcess/PreconnectTask.h; sourceTree = "<group>"; }; 3739 83A0ED331F747CC7003299EB /* PreconnectTask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PreconnectTask.cpp; path = NetworkProcess/PreconnectTask.cpp; sourceTree = "<group>"; }; 3736 3740 83BDCCB81AC5FDB6003F6441 /* NetworkCacheStatistics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkCacheStatistics.cpp; sourceTree = "<group>"; }; 3737 3741 83BFAC401D96136000433490 /* BlobDownloadClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlobDownloadClient.h; path = NetworkProcess/Downloads/BlobDownloadClient.h; sourceTree = "<group>"; }; … … 6116 6120 462107D71F38DBD300DD7810 /* PingLoad.cpp */, 6117 6121 5CE85B1F1C88E6430070BFCE /* PingLoad.h */, 6122 83A0ED331F747CC7003299EB /* PreconnectTask.cpp */, 6123 83A0ED321F747CC6003299EB /* PreconnectTask.h */, 6118 6124 E1B78470163F24690007B692 /* RemoteNetworkingContext.h */, 6119 6125 ); … … 8710 8716 7CD622781739D863005BD7FF /* PluginSandboxProfile.h in Headers */, 8711 8717 1A6FB7AF11E64B6800DB1371 /* PluginView.h in Headers */, 8718 83A0ED351F747CCF003299EB /* PreconnectTask.h in Headers */, 8712 8719 E1CC1B9012D7EADF00625838 /* PrintInfo.h in Headers */, 8713 8720 86F9536518FF58F5001DB2EF /* ProcessAssertion.h in Headers */, … … 10291 10298 BC82844D16B5081C00A278FE /* PluginServiceEntryPoint.mm in Sources */, 10292 10299 1A6FB7AE11E64B6800DB1371 /* PluginView.cpp in Sources */, 10300 83A0ED341F747CCD003299EB /* PreconnectTask.cpp in Sources */, 10293 10301 E18C92F412DB9E7100CF2AEB /* PrintInfo.cpp in Sources */, 10294 10302 E1CC1B9112D7EADF00625838 /* PrintInfoMac.mm in Sources */, -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp
r220946 r222613 141 141 } 142 142 143 void NetworkProcessConnection::didFinishPreconnection(uint64_t preconnectionIdentifier, ResourceError&& error) 144 { 145 WebProcess::singleton().webLoaderStrategy().didFinishPreconnection(preconnectionIdentifier, WTFMove(error)); 146 } 147 143 148 #if ENABLE(SHAREABLE_RESOURCE) 144 149 void NetworkProcessConnection::didCacheResource(const ResourceRequest& request, const ShareableResource::Handle& handle, PAL::SessionID sessionID) -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.h
r220946 r222613 75 75 void didWriteBlobsToTemporaryFiles(uint64_t requestIdentifier, const Vector<String>& filenames); 76 76 void didFinishPingLoad(uint64_t pingLoadIdentifier, WebCore::ResourceError&&); 77 void didFinishPreconnection(uint64_t preconnectionIdentifier, WebCore::ResourceError&&); 77 78 78 79 #if ENABLE(SHAREABLE_RESOURCE) -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.messages.in
r220946 r222613 29 29 DidWriteBlobsToTemporaryFiles(uint64_t requestIdentifier, Vector<String> filenames) 30 30 DidFinishPingLoad(uint64_t pingLoadIdentifier, WebCore::ResourceError error) 31 DidFinishPreconnection(uint64_t preconnectionIdentifier, WebCore::ResourceError error) 31 32 } -
trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp
r222467 r222613 357 357 for (auto& pingLoadCompletionHandler : pingLoadCompletionHandlers.values()) 358 358 pingLoadCompletionHandler(internalError(URL())); 359 360 auto preconnectCompletionHandlers = WTFMove(m_preconnectCompletionHandlers); 361 for (auto& preconnectCompletionHandler : preconnectCompletionHandlers.values()) 362 preconnectCompletionHandler(internalError(URL())); 359 363 } 360 364 … … 393 397 } 394 398 395 static uint64_t generate PingLoadIdentifier()399 static uint64_t generateLoadIdentifier() 396 400 { 397 401 static uint64_t identifier = 0; … … 423 427 424 428 NetworkResourceLoadParameters loadParameters; 425 loadParameters.identifier = generate PingLoadIdentifier();429 loadParameters.identifier = generateLoadIdentifier(); 426 430 loadParameters.request = request; 427 431 loadParameters.sourceOrigin = &document->securityOrigin(); … … 460 464 } 461 465 466 void WebLoaderStrategy::preconnectTo(PAL::SessionID sessionID, const WebCore::URL& url, StoredCredentialsPolicy storedCredentialsPolicy, PreconnectCompletionHandler&& completionHandler) 467 { 468 uint64_t preconnectionIdentifier = generateLoadIdentifier(); 469 auto addResult = m_preconnectCompletionHandlers.add(preconnectionIdentifier, WTFMove(completionHandler)); 470 ASSERT_UNUSED(addResult, addResult.isNewEntry); 471 WebProcess::singleton().networkConnection().connection().send(Messages::NetworkConnectionToWebProcess::PreconnectTo(sessionID, preconnectionIdentifier, url, storedCredentialsPolicy), 0); 472 } 473 474 void WebLoaderStrategy::didFinishPreconnection(uint64_t preconnectionIdentifier, ResourceError&& error) 475 { 476 if (auto completionHandler = m_preconnectCompletionHandlers.take(preconnectionIdentifier)) 477 completionHandler(WTFMove(error)); 478 } 479 462 480 void WebLoaderStrategy::storeDerivedDataToCache(const SHA1::Digest& bodyHash, const String& type, const String& partition, WebCore::SharedBuffer& data) 463 481 { -
trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.h
r222467 r222613 63 63 void didFinishPingLoad(uint64_t pingLoadIdentifier, WebCore::ResourceError&&); 64 64 65 void preconnectTo(PAL::SessionID, const WebCore::URL&, WebCore::StoredCredentialsPolicy, PreconnectCompletionHandler&&) final; 66 void didFinishPreconnection(uint64_t preconnectionIdentifier, WebCore::ResourceError&&); 67 65 68 void storeDerivedDataToCache(const SHA1::Digest& bodyHash, const String& type, const String& partition, WebCore::SharedBuffer&) final; 66 69 … … 87 90 HashMap<unsigned long, WebURLSchemeTaskProxy*> m_urlSchemeTasks; 88 91 HashMap<unsigned long, PingLoadCompletionHandler> m_pingLoadCompletionHandlers; 92 HashMap<unsigned long, PreconnectCompletionHandler> m_preconnectCompletionHandlers; 89 93 }; 90 94 -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r222492 r222613 3091 3091 settings.setDOMPasteAllowed(store.getBoolValueForKey(WebPreferencesKey::domPasteAllowedKey())); 3092 3092 settings.setJavaScriptCanAccessClipboard(store.getBoolValueForKey(WebPreferencesKey::javaScriptCanAccessClipboardKey())); 3093 settings.setLinkPreconnectEnabled(store.getBoolValueForKey(WebPreferencesKey::linkPreconnectKey())); 3093 3094 settings.setShouldPrintBackgrounds(store.getBoolValueForKey(WebPreferencesKey::shouldPrintBackgroundsKey())); 3094 3095 settings.setWebSecurityEnabled(store.getBoolValueForKey(WebPreferencesKey::webSecurityEnabledKey())); -
trunk/Source/WebKit/config.h
r221610 r222613 89 89 #endif 90 90 91 #if USE(NETWORK_SESSION) && ((PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000)) 92 #ifndef ENABLE_SERVER_PRECONNECT 93 #define ENABLE_SERVER_PRECONNECT 1 94 #endif 95 #endif 96 91 97 #ifndef HAVE_SEC_ACCESS_CONTROL 92 98 #if PLATFORM(IOS) || PLATFORM(MAC) -
trunk/Source/WebKitLegacy/ChangeLog
r222526 r222613 1 2017-09-28 Chris Dumez <cdumez@apple.com> 2 3 Add support for <link rel=preconnect> 4 https://bugs.webkit.org/show_bug.cgi?id=177474 5 <rdar://problem/33141380> 6 7 Reviewed by Alex Christensen. 8 9 * WebCoreSupport/WebResourceLoadScheduler.cpp: 10 (WebResourceLoadScheduler::preconnectTo): 11 * WebCoreSupport/WebResourceLoadScheduler.h: 12 1 13 2017-09-26 Per Arne Vollan <pvollan@apple.com> 2 14 -
trunk/Source/WebKitLegacy/WebCoreSupport/WebResourceLoadScheduler.cpp
r222467 r222613 370 370 } 371 371 372 void WebResourceLoadScheduler::preconnectTo(PAL::SessionID, const URL&, StoredCredentialsPolicy, PreconnectCompletionHandler&&) 373 { 374 } 375 -
trunk/Source/WebKitLegacy/WebCoreSupport/WebResourceLoadScheduler.h
r222467 r222613 62 62 void startPingLoad(WebCore::Frame&, WebCore::ResourceRequest&, const WebCore::HTTPHeaderMap&, const WebCore::FetchOptions&, PingLoadCompletionHandler&&) final; 63 63 64 void preconnectTo(PAL::SessionID, const WebCore::URL&, WebCore::StoredCredentialsPolicy, PreconnectCompletionHandler&&) final; 65 64 66 void storeDerivedDataToCache(const SHA1::Digest&, const String&, const String&, WebCore::SharedBuffer&) final { } 65 67
Note: See TracChangeset
for help on using the changeset viewer.