Diff
Modified: trunk/LayoutTests/ChangeLog (225933 => 225934)
--- trunk/LayoutTests/ChangeLog 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/LayoutTests/ChangeLog 2017-12-14 22:39:48 UTC (rev 225934)
@@ -1,3 +1,24 @@
+2017-12-14 John Wilander <[email protected]>
+
+ Storage Access API: Implement frame-specific access in the document.cookie layer
+ https://bugs.webkit.org/show_bug.cgi?id=180682
+ <rdar://problem/35982257>
+
+ Reviewed by Alex Christensen.
+
+ CookiesStrategy::cookiesForDOM(), CookiesStrategy::setCookiesFromDOM(),
+ CookiesStrategy::cookieRequestHeaderFieldValue(), and
+ CookiesStrategy::getRawCookies() now take optional parameters for
+ frameID and pageID to allow frame-specific scoping of cookies.
+
+ This change makes the return values of FrameLoaderClient::frameID()
+ and FrameLoaderClient::pageID() std::optional<uint64_t> so that
+ WebCore can call those getters and get the right return values in
+ WebKit and std:nullopt in WebKitLegacy.
+
+ * http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-non-recent-user-interaction-and-try-access-from-right-frame-expected.txt:
+ Now expects the correct behavior for document.cookie.
+
2017-12-14 Antoine Quint <[email protected]>
[Web Animations] Bring timeline and currentTime setters closer to compliance
Modified: trunk/LayoutTests/http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-non-recent-user-interaction-and-try-access-from-right-frame-expected.txt (225933 => 225934)
--- trunk/LayoutTests/http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-non-recent-user-interaction-and-try-access-from-right-frame-expected.txt 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/LayoutTests/http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-non-recent-user-interaction-and-try-access-from-right-frame-expected.txt 2017-12-14 22:39:48 UTC (rev 225934)
@@ -16,7 +16,7 @@
After access granted, should receive first-party cookie.
Received cookie named 'firstPartyCookie'.
Did not receive cookie named 'partitionedCookie'.
-Client-side document.cookie: partitionedCookie=value
+Client-side document.cookie: firstPartyCookie=value
--------
Frame: '<!--framePath //<!--frame1-->-->'
Modified: trunk/Source/WebCore/ChangeLog (225933 => 225934)
--- trunk/Source/WebCore/ChangeLog 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/ChangeLog 2017-12-14 22:39:48 UTC (rev 225934)
@@ -1,3 +1,65 @@
+2017-12-14 John Wilander <[email protected]>
+
+ Storage Access API: Implement frame-specific access in the document.cookie layer
+ https://bugs.webkit.org/show_bug.cgi?id=180682
+ <rdar://problem/35982257>
+
+ Reviewed by Alex Christensen.
+
+ No new tests. Changed expected result from existing test.
+
+ CookiesStrategy::cookiesForDOM(), CookiesStrategy::setCookiesFromDOM(),
+ CookiesStrategy::cookieRequestHeaderFieldValue(), and
+ CookiesStrategy::getRawCookies() now take optional parameters for
+ frameID and pageID to allow frame-specific scoping of cookies.
+
+ This change makes the return values of FrameLoaderClient::frameID()
+ and FrameLoaderClient::pageID() std::optional<uint64_t> so that
+ WebCore can call those getters and get the right return values in
+ WebKit and std:nullopt in WebKitLegacy.
+
+ * dom/Document.cpp:
+ (WebCore::Document::requestStorageAccess):
+ * loader/CookieJar.cpp:
+ (WebCore::cookies):
+ (WebCore::setCookies):
+ (WebCore::cookieRequestHeaderFieldValue):
+ (WebCore::getRawCookies):
+ * loader/EmptyFrameLoaderClient.h:
+ * loader/FrameLoaderClient.h:
+ * platform/CookiesStrategy.h:
+ * platform/network/CacheValidation.cpp:
+ (WebCore::headerValueForVary):
+ * platform/network/PlatformCookieJar.h:
+ * platform/network/cf/CookieJarCFNet.cpp:
+ (WebCore::setCookiesFromDOM):
+ (WebCore::cookiesForDOM):
+ (WebCore::cookieRequestHeaderFieldValue):
+ (WebCore::getRawCookies):
+ * platform/network/curl/CookieJarCurl.cpp:
+ (WebCore::CookieJarCurlFileSystem::setCookiesFromDOM):
+ (WebCore::CookieJarCurlFileSystem::cookiesForDOM):
+ (WebCore::CookieJarCurlFileSystem::cookieRequestHeaderFieldValue):
+ (WebCore::CookieJarCurlFileSystem::getRawCookies):
+ (WebCore::cookiesForDOM):
+ (WebCore::setCookiesFromDOM):
+ (WebCore::cookieRequestHeaderFieldValue):
+ (WebCore::getRawCookies):
+ * platform/network/curl/CookieJarCurl.h:
+ * platform/network/mac/CookieJarMac.mm:
+ (WebCore::cookiesInPartitionForURL):
+ (WebCore::cookiesForURL):
+ (WebCore::cookiesForSession):
+ (WebCore::cookiesForDOM):
+ (WebCore::cookieRequestHeaderFieldValue):
+ (WebCore::setCookiesFromDOM):
+ (WebCore::getRawCookies):
+ * platform/network/soup/CookieJarSoup.cpp:
+ (WebCore::setCookiesFromDOM):
+ (WebCore::cookiesForDOM):
+ (WebCore::cookieRequestHeaderFieldValue):
+ (WebCore::getRawCookies):
+
2017-12-14 Alex Christensen <[email protected]>
Fix Mac CMake build
Modified: trunk/Source/WebCore/dom/Document.cpp (225933 => 225934)
--- trunk/Source/WebCore/dom/Document.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/dom/Document.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -7522,10 +7522,14 @@
ASSERT(m_frame);
auto frameID = m_frame->loader().client().frameID();
auto pageID = m_frame->loader().client().pageID();
+ if (!frameID || !pageID) {
+ promise->reject();
+ return;
+ }
// FIXME: Don't use runJavaScriptConfirm because it responds synchronously.
if ((page && page->chrome().runJavaScriptConfirm(*m_frame, builder.toString())) || m_grantStorageAccessOverride) {
- page->chrome().client().requestStorageAccess(WTFMove(iframeHost), WTFMove(topHost), frameID, pageID, [documentReference = m_weakFactory.createWeakPtr(*this), promise] (bool wasGranted) {
+ page->chrome().client().requestStorageAccess(WTFMove(iframeHost), WTFMove(topHost), frameID.value(), pageID.value(), [documentReference = m_weakFactory.createWeakPtr(*this), promise] (bool wasGranted) {
Document* document = documentReference.get();
if (!document)
return;
Modified: trunk/Source/WebCore/loader/CookieJar.cpp (225933 => 225934)
--- trunk/Source/WebCore/loader/CookieJar.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/loader/CookieJar.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -30,6 +30,7 @@
#include "Document.h"
#include "Frame.h"
#include "FrameLoader.h"
+#include "FrameLoaderClient.h"
#include "NetworkStorageSession.h"
#include "NetworkingContext.h"
#include "PlatformCookieJar.h"
@@ -59,7 +60,13 @@
TraceScope scope(FetchCookiesStart, FetchCookiesEnd);
auto includeSecureCookies = (url.protocolIs("https") && !document.foundMixedContent().contains(SecurityContext::MixedContentType::Active)) ? IncludeSecureCookies::Yes : IncludeSecureCookies::No;
- auto result = platformStrategies()->cookiesStrategy()->cookiesForDOM(storageSession(document), document.firstPartyForCookies(), url, includeSecureCookies);
+ std::pair<String, bool> result;
+ auto frame = document.frame();
+ if (frame)
+ result = platformStrategies()->cookiesStrategy()->cookiesForDOM(storageSession(document), document.firstPartyForCookies(), url, frame->loader().client().frameID(), frame->loader().client().pageID(), includeSecureCookies);
+ else
+ result = platformStrategies()->cookiesStrategy()->cookiesForDOM(storageSession(document), document.firstPartyForCookies(), url, std::nullopt, std::nullopt, includeSecureCookies);
+
if (result.second)
document.setSecureCookiesAccessed();
@@ -68,7 +75,11 @@
void setCookies(Document& document, const URL& url, const String& cookieString)
{
- platformStrategies()->cookiesStrategy()->setCookiesFromDOM(storageSession(document), document.firstPartyForCookies(), url, cookieString);
+ auto frame = document.frame();
+ if (frame)
+ platformStrategies()->cookiesStrategy()->setCookiesFromDOM(storageSession(document), document.firstPartyForCookies(), url, frame->loader().client().frameID(), frame->loader().client().pageID(), cookieString);
+ else
+ platformStrategies()->cookiesStrategy()->setCookiesFromDOM(storageSession(document), document.firstPartyForCookies(), url, std::nullopt, std::nullopt, cookieString);
}
bool cookiesEnabled(const Document& document)
@@ -79,7 +90,13 @@
String cookieRequestHeaderFieldValue(Document& document, const URL& url)
{
auto includeSecureCookies = (url.protocolIs("https") && !document.foundMixedContent().contains(SecurityContext::MixedContentType::Active)) ? IncludeSecureCookies::Yes : IncludeSecureCookies::No;
- auto result = platformStrategies()->cookiesStrategy()->cookieRequestHeaderFieldValue(storageSession(document), document.firstPartyForCookies(), url, includeSecureCookies);
+ std::pair<String, bool> result;
+ auto frame = document.frame();
+ if (frame)
+ result = platformStrategies()->cookiesStrategy()->cookieRequestHeaderFieldValue(storageSession(document), document.firstPartyForCookies(), url, frame->loader().client().frameID(), frame->loader().client().pageID(), includeSecureCookies);
+ else
+ result = platformStrategies()->cookiesStrategy()->cookieRequestHeaderFieldValue(storageSession(document), document.firstPartyForCookies(), url, std::nullopt, std::nullopt, includeSecureCookies);
+
if (result.second)
document.setSecureCookiesAccessed();
@@ -88,7 +105,11 @@
bool getRawCookies(const Document& document, const URL& url, Vector<Cookie>& cookies)
{
- return platformStrategies()->cookiesStrategy()->getRawCookies(storageSession(document), document.firstPartyForCookies(), url, cookies);
+ auto frame = document.frame();
+ if (frame)
+ return platformStrategies()->cookiesStrategy()->getRawCookies(storageSession(document), document.firstPartyForCookies(), url, frame->loader().client().frameID(), frame->loader().client().pageID(), cookies);
+
+ return platformStrategies()->cookiesStrategy()->getRawCookies(storageSession(document), document.firstPartyForCookies(), url, std::nullopt, std::nullopt, cookies);
}
void deleteCookie(const Document& document, const URL& url, const String& cookieName)
Modified: trunk/Source/WebCore/loader/EmptyFrameLoaderClient.h (225933 => 225934)
--- trunk/Source/WebCore/loader/EmptyFrameLoaderClient.h 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/loader/EmptyFrameLoaderClient.h 2017-12-14 22:39:48 UTC (rev 225934)
@@ -32,8 +32,8 @@
void frameLoaderDestroyed() override { }
- uint64_t frameID() const override { return 0; }
- uint64_t pageID() const override { return 0; }
+ std::optional<uint64_t> frameID() const override { return std::nullopt; }
+ std::optional<uint64_t> pageID() const override { return std::nullopt; }
PAL::SessionID sessionID() const override;
bool hasWebView() const final { return true; } // mainly for assertions
Modified: trunk/Source/WebCore/loader/FrameLoaderClient.h (225933 => 225934)
--- trunk/Source/WebCore/loader/FrameLoaderClient.h 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/loader/FrameLoaderClient.h 2017-12-14 22:39:48 UTC (rev 225934)
@@ -121,8 +121,8 @@
virtual void makeRepresentation(DocumentLoader*) = 0;
- virtual uint64_t pageID() const = 0;
- virtual uint64_t frameID() const = 0;
+ virtual std::optional<uint64_t> pageID() const = 0;
+ virtual std::optional<uint64_t> frameID() const = 0;
virtual PAL::SessionID sessionID() const = 0;
#if PLATFORM(IOS)
Modified: trunk/Source/WebCore/platform/CookiesStrategy.h (225933 => 225934)
--- trunk/Source/WebCore/platform/CookiesStrategy.h 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/platform/CookiesStrategy.h 2017-12-14 22:39:48 UTC (rev 225934)
@@ -41,12 +41,12 @@
class CookiesStrategy {
public:
- virtual std::pair<String, bool> cookiesForDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, IncludeSecureCookies) = 0;
- virtual void setCookiesFromDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, const String& cookieString) = 0;
+ virtual std::pair<String, bool> cookiesForDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies) = 0;
+ virtual void setCookiesFromDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String& cookieString) = 0;
virtual bool cookiesEnabled(const NetworkStorageSession&) = 0;
- virtual std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession&, const URL& firstParty, const URL&, IncludeSecureCookies) = 0;
- virtual std::pair<String, bool> cookieRequestHeaderFieldValue(PAL::SessionID, const URL& firstParty, const URL&, IncludeSecureCookies) = 0;
- virtual bool getRawCookies(const NetworkStorageSession&, const URL& firstParty, const URL&, Vector<Cookie>&) = 0;
+ virtual std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies) = 0;
+ virtual std::pair<String, bool> cookieRequestHeaderFieldValue(PAL::SessionID, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies) = 0;
+ virtual bool getRawCookies(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>&) = 0;
virtual void deleteCookie(const NetworkStorageSession&, const URL&, const String& cookieName) = 0;
protected:
Modified: trunk/Source/WebCore/platform/network/CacheValidation.cpp (225933 => 225934)
--- trunk/Source/WebCore/platform/network/CacheValidation.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/platform/network/CacheValidation.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -348,9 +348,9 @@
auto* cookieStrategy = platformStrategies() ? platformStrategies()->cookiesStrategy() : nullptr;
if (!cookieStrategy) {
ASSERT(sessionID == PAL::SessionID::defaultSessionID());
- return cookieRequestHeaderFieldValue(NetworkStorageSession::defaultStorageSession(), request.firstPartyForCookies(), request.url(), includeSecureCookies).first;
+ return cookieRequestHeaderFieldValue(NetworkStorageSession::defaultStorageSession(), request.firstPartyForCookies(), request.url(), std::nullopt, std::nullopt, includeSecureCookies).first;
}
- return cookieStrategy->cookieRequestHeaderFieldValue(sessionID, request.firstPartyForCookies(), request.url(), includeSecureCookies).first;
+ return cookieStrategy->cookieRequestHeaderFieldValue(sessionID, request.firstPartyForCookies(), request.url(), std::nullopt, std::nullopt, includeSecureCookies).first;
}
return request.httpHeaderField(headerName);
}
Modified: trunk/Source/WebCore/platform/network/PlatformCookieJar.h (225933 => 225934)
--- trunk/Source/WebCore/platform/network/PlatformCookieJar.h 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/platform/network/PlatformCookieJar.h 2017-12-14 22:39:48 UTC (rev 225934)
@@ -41,11 +41,11 @@
// FIXME: These should probably be NetworkStorageSession member functions.
-WEBCORE_EXPORT std::pair<String, bool> cookiesForDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, IncludeSecureCookies);
-WEBCORE_EXPORT void setCookiesFromDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, const String&);
+WEBCORE_EXPORT std::pair<String, bool> cookiesForDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies);
+WEBCORE_EXPORT void setCookiesFromDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String&);
WEBCORE_EXPORT bool cookiesEnabled(const NetworkStorageSession&);
-WEBCORE_EXPORT std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession&, const URL& firstParty, const URL&, IncludeSecureCookies);
-WEBCORE_EXPORT bool getRawCookies(const NetworkStorageSession&, const URL& firstParty, const URL&, Vector<Cookie>&);
+WEBCORE_EXPORT std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies);
+WEBCORE_EXPORT bool getRawCookies(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>&);
WEBCORE_EXPORT void deleteCookie(const NetworkStorageSession&, const URL&, const String&);
WEBCORE_EXPORT void getHostnamesWithCookies(const NetworkStorageSession&, HashSet<String>& hostnames);
WEBCORE_EXPORT void deleteCookiesForHostnames(const NetworkStorageSession&, const Vector<String>& cookieHostNames);
Modified: trunk/Source/WebCore/platform/network/cf/CookieJarCFNet.cpp (225933 => 225934)
--- trunk/Source/WebCore/platform/network/cf/CookieJarCFNet.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/platform/network/cf/CookieJarCFNet.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -138,8 +138,10 @@
return parsedCookies;
}
-void setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, const String& value)
+void setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String& value)
{
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
// <rdar://problem/5632883> CFHTTPCookieStorage stores an empty cookie, which would be sent as "Cookie: =".
if (value.isEmpty())
return;
@@ -172,8 +174,10 @@
return false;
}
-std::pair<String, bool> cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
RetainPtr<CFArrayRef> cookiesCF = copyCookiesForURLWithFirstPartyURL(session, firstParty, url, includeSecureCookies);
auto filteredCookies = filterCookies(cookiesCF.get());
@@ -185,8 +189,10 @@
return { cookieString, didAccessSecureCookies };
}
-std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
RetainPtr<CFArrayRef> cookiesCF = copyCookiesForURLWithFirstPartyURL(session, firstParty, url, includeSecureCookies);
bool didAccessSecureCookies = containsSecureCookies(cookiesCF.get());
@@ -202,8 +208,10 @@
return policy == CFHTTPCookieStorageAcceptPolicyOnlyFromMainDocumentDomain || policy == CFHTTPCookieStorageAcceptPolicyExclusivelyFromMainDocumentDomain || policy == CFHTTPCookieStorageAcceptPolicyAlways;
}
-bool getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL& url, Vector<Cookie>& rawCookies)
+bool getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>& rawCookies)
{
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
rawCookies.clear();
auto includeSecureCookies = url.protocolIs("https") ? IncludeSecureCookies::Yes : IncludeSecureCookies::No;
Modified: trunk/Source/WebCore/platform/network/curl/CookieJarCurl.cpp (225933 => 225934)
--- trunk/Source/WebCore/platform/network/curl/CookieJarCurl.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/platform/network/curl/CookieJarCurl.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -239,8 +239,10 @@
return cookieStr.toString();
}
-void CookieJarCurlFileSystem::setCookiesFromDOM(const NetworkStorageSession&, const URL& firstParty, const URL& url, const String& value)
+void CookieJarCurlFileSystem::setCookiesFromDOM(const NetworkStorageSession&, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String& value)
{
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
CurlHandle curlHandle;
curlHandle.enableShareHandle();
@@ -287,14 +289,18 @@
return cookies;
}
-std::pair<String, bool> CookieJarCurlFileSystem::cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeSecureCookies)
+std::pair<String, bool> CookieJarCurlFileSystem::cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies)
{
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
// FIXME: This should filter secure cookies out if the caller requests it.
return { cookiesForSession(session, firstParty, url, false), false };
}
-std::pair<String, bool> CookieJarCurlFileSystem::cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeSecureCookies)
+std::pair<String, bool> CookieJarCurlFileSystem::cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies)
{
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
// FIXME: This should filter secure cookies out if the caller requests it.
return { cookiesForSession(session, firstParty, url, true), false };
}
@@ -304,8 +310,10 @@
return true;
}
-bool CookieJarCurlFileSystem::getRawCookies(const NetworkStorageSession&, const URL& firstParty, const URL&, Vector<Cookie>& rawCookies)
+bool CookieJarCurlFileSystem::getRawCookies(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>& rawCookies)
{
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
// FIXME: Not yet implemented
rawCookies.clear();
return false; // return true when implemented
@@ -338,19 +346,19 @@
// dispatcher functions
-std::pair<String, bool> cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
- return CurlContext::singleton().cookieJar().cookiesForDOM(session, firstParty, url, includeSecureCookies);
+ return CurlContext::singleton().cookieJar().cookiesForDOM(session, firstParty, url, frameID, pageID, includeSecureCookies);
}
-void setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, const String& value)
+void setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String& value)
{
- CurlContext::singleton().cookieJar().setCookiesFromDOM(session, firstParty, url, value);
+ CurlContext::singleton().cookieJar().setCookiesFromDOM(session, firstParty, url, frameID, pageID, value);
}
-std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
- return CurlContext::singleton().cookieJar().cookieRequestHeaderFieldValue(session, firstParty, url, includeSecureCookies);
+ return CurlContext::singleton().cookieJar().cookieRequestHeaderFieldValue(session, firstParty, url, frameID, pageID, includeSecureCookies);
}
bool cookiesEnabled(const NetworkStorageSession& session)
@@ -358,9 +366,9 @@
return CurlContext::singleton().cookieJar().cookiesEnabled(session);
}
-bool getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL& url, Vector<Cookie>& rawCookies)
+bool getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>& rawCookies)
{
- return CurlContext::singleton().cookieJar().getRawCookies(session, firstParty, url, rawCookies);
+ return CurlContext::singleton().cookieJar().getRawCookies(session, firstParty, url, frameID, pageID, rawCookies);
}
void deleteCookie(const NetworkStorageSession& session, const URL& url, const String& cookie)
Modified: trunk/Source/WebCore/platform/network/curl/CookieJarCurl.h (225933 => 225934)
--- trunk/Source/WebCore/platform/network/curl/CookieJarCurl.h 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/platform/network/curl/CookieJarCurl.h 2017-12-14 22:39:48 UTC (rev 225934)
@@ -28,11 +28,11 @@
class CookieJarCurl {
public:
- virtual std::pair<String, bool> cookiesForDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, IncludeSecureCookies) = 0;
- virtual void setCookiesFromDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, const String&) = 0;
+ virtual std::pair<String, bool> cookiesForDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies) = 0;
+ virtual void setCookiesFromDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String&) = 0;
virtual bool cookiesEnabled(const NetworkStorageSession&) = 0;
- virtual std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession&, const URL& firstParty, const URL&, IncludeSecureCookies) = 0;
- virtual bool getRawCookies(const NetworkStorageSession&, const URL& firstParty, const URL&, Vector<Cookie>&) = 0;
+ virtual std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies) = 0;
+ virtual bool getRawCookies(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>&) = 0;
virtual void deleteCookie(const NetworkStorageSession&, const URL&, const String&) = 0;
virtual void getHostnamesWithCookies(const NetworkStorageSession&, HashSet<String>& hostnames) = 0;
virtual void deleteCookiesForHostnames(const NetworkStorageSession&, const Vector<String>& cookieHostNames) = 0;
@@ -41,11 +41,11 @@
};
class CookieJarCurlFileSystem : public CookieJarCurl {
- std::pair<String, bool> cookiesForDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, IncludeSecureCookies) override;
- void setCookiesFromDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, const String&) override;
+ std::pair<String, bool> cookiesForDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies) override;
+ void setCookiesFromDOM(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String&) override;
bool cookiesEnabled(const NetworkStorageSession&) override;
- std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession&, const URL& firstParty, const URL&, IncludeSecureCookies) override;
- bool getRawCookies(const NetworkStorageSession&, const URL& firstParty, const URL&, Vector<Cookie>&) override;
+ std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies) override;
+ bool getRawCookies(const NetworkStorageSession&, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>&) override;
void deleteCookie(const NetworkStorageSession&, const URL&, const String&) override;
void getHostnamesWithCookies(const NetworkStorageSession&, HashSet<String>& hostnames) override;
void deleteCookiesForHostnames(const NetworkStorageSession&, const Vector<String>& cookieHostNames) override;
Modified: trunk/Source/WebCore/platform/network/mac/CookieJarMac.mm (225933 => 225934)
--- trunk/Source/WebCore/platform/network/mac/CookieJarMac.mm 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/platform/network/mac/CookieJarMac.mm 2017-12-14 22:39:48 UTC (rev 225934)
@@ -122,9 +122,9 @@
return session.shouldBlockCookies(firstParty, url);
}
-static NSArray *cookiesInPartitionForURL(const NetworkStorageSession& session, const URL& firstParty, const URL& url)
+static NSArray *cookiesInPartitionForURL(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID)
{
- String partition = session.cookieStoragePartition(firstParty, url, std::nullopt, std::nullopt);
+ String partition = session.cookieStoragePartition(firstParty, url, frameID, pageID);
if (partition.isEmpty())
return nil;
@@ -148,24 +148,27 @@
#endif // HAVE(CFNETWORK_STORAGE_PARTITIONING)
-static NSArray *cookiesForURL(const NetworkStorageSession& session, const URL& firstParty, const URL& url)
+static NSArray *cookiesForURL(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID)
{
#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
if (cookiesAreBlockedForURL(session, firstParty, url))
return nil;
- if (NSArray *cookies = cookiesInPartitionForURL(session, firstParty, url))
+ if (NSArray *cookies = cookiesInPartitionForURL(session, firstParty, url, frameID, pageID))
return cookies;
+#else
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
#endif
return httpCookiesForURL(session.cookieStorage().get(), firstParty, url);
}
enum IncludeHTTPOnlyOrNot { DoNotIncludeHTTPOnly, IncludeHTTPOnly };
-static std::pair<String, bool> cookiesForSession(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeHTTPOnlyOrNot includeHTTPOnly, IncludeSecureCookies includeSecureCookies)
+static std::pair<String, bool> cookiesForSession(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeHTTPOnlyOrNot includeHTTPOnly, IncludeSecureCookies includeSecureCookies)
{
BEGIN_BLOCK_OBJC_EXCEPTIONS;
- NSArray *cookies = cookiesForURL(session, firstParty, url);
+ NSArray *cookies = cookiesForURL(session, firstParty, url, frameID, pageID);
if (![cookies count])
return { String(), false }; // Return a null string, not an empty one that StringBuilder would create below.
@@ -224,17 +227,17 @@
CFHTTPCookieStorageDeleteAllCookies(cookieStorage);
}
-std::pair<String, bool> cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
- return cookiesForSession(session, firstParty, url, DoNotIncludeHTTPOnly, includeSecureCookies);
+ return cookiesForSession(session, firstParty, url, frameID, pageID, DoNotIncludeHTTPOnly, includeSecureCookies);
}
-std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
- return cookiesForSession(session, firstParty, url, IncludeHTTPOnly, includeSecureCookies);
+ return cookiesForSession(session, firstParty, url, frameID, pageID, IncludeHTTPOnly, includeSecureCookies);
}
-void setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, const String& cookieStr)
+void setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String& cookieStr)
{
BEGIN_BLOCK_OBJC_EXCEPTIONS;
@@ -260,9 +263,12 @@
ASSERT([filteredCookies.get() count] <= 1);
#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
- String partition = session.cookieStoragePartition(firstParty, url, std::nullopt, std::nullopt);
+ String partition = session.cookieStoragePartition(firstParty, url, frameID, pageID);
if (!partition.isEmpty())
filteredCookies = applyPartitionToCookies(partition, filteredCookies.get());
+#else
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
#endif
setHTTPCookiesForURL(session.cookieStorage().get(), filteredCookies.get(), cookieURL, firstParty);
@@ -289,12 +295,12 @@
return false;
}
-bool getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL& url, Vector<Cookie>& rawCookies)
+bool getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>& rawCookies)
{
rawCookies.clear();
BEGIN_BLOCK_OBJC_EXCEPTIONS;
- NSArray *cookies = cookiesForURL(session, firstParty, url);
+ NSArray *cookies = cookiesForURL(session, firstParty, url, frameID, pageID);
NSUInteger count = [cookies count];
rawCookies.reserveCapacity(count);
for (NSUInteger i = 0; i < count; ++i) {
Modified: trunk/Source/WebCore/platform/network/soup/CookieJarSoup.cpp (225933 => 225934)
--- trunk/Source/WebCore/platform/network/soup/CookieJarSoup.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebCore/platform/network/soup/CookieJarSoup.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -50,8 +50,10 @@
return false;
}
-void setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, const String& value)
+void setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String& value)
{
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
SoupCookieJar* jar = session.cookieStorage();
GUniquePtr<SoupURI> origin = url.createSoupURI();
@@ -116,13 +118,17 @@
return { String::fromUTF8(cookieHeader.get()), didAccessSecureCookies };
}
-std::pair<String, bool> cookiesForDOM(const NetworkStorageSession& session, const URL&, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> cookiesForDOM(const NetworkStorageSession& session, const URL&, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
return cookiesForSession(session, url, false, includeSecureCookies);
}
-std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& /*firstParty*/, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& /*firstParty*/, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
// Secure cookies will still only be included if url's protocol is https.
return cookiesForSession(session, url, true, includeSecureCookies);
}
@@ -133,8 +139,10 @@
return policy == SOUP_COOKIE_JAR_ACCEPT_ALWAYS || policy == SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY;
}
-bool getRawCookies(const NetworkStorageSession& session, const URL& /*firstParty*/, const URL& url, Vector<Cookie>& rawCookies)
+bool getRawCookies(const NetworkStorageSession& session, const URL& /*firstParty*/, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>& rawCookies)
{
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
rawCookies.clear();
GUniquePtr<SoupURI> uri = url.createSoupURI();
GUniquePtr<GSList> cookies(soup_cookie_jar_get_cookie_list(session.cookieStorage(), uri.get(), TRUE));
Modified: trunk/Source/WebKit/ChangeLog (225933 => 225934)
--- trunk/Source/WebKit/ChangeLog 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKit/ChangeLog 2017-12-14 22:39:48 UTC (rev 225934)
@@ -1,3 +1,47 @@
+2017-12-14 John Wilander <[email protected]>
+
+ Storage Access API: Implement frame-specific access in the document.cookie layer
+ https://bugs.webkit.org/show_bug.cgi?id=180682
+ <rdar://problem/35982257>
+
+ Reviewed by Alex Christensen.
+
+ CookiesStrategy::cookiesForDOM(), CookiesStrategy::setCookiesFromDOM(),
+ CookiesStrategy::cookieRequestHeaderFieldValue(), and
+ CookiesStrategy::getRawCookies() now take optional parameters for
+ frameID and pageID to allow frame-specific scoping of cookies.
+
+ This change makes the return values of FrameLoaderClient::frameID()
+ and FrameLoaderClient::pageID() std::optional<uint64_t> so that
+ WebCore can call those getters and get the right return values in
+ WebKit and std:nullopt in WebKitLegacy.
+
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
+ (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
+ (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
+ (WebKit::NetworkConnectionToWebProcess::getRawCookies):
+ * NetworkProcess/NetworkConnectionToWebProcess.h:
+ * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+ * Shared/mac/CookieStorageShim.mm:
+ (WebKit::webKitCookieStorageCopyRequestHeaderFieldsForURL):
+ * WebProcess/Network/WebLoaderStrategy.cpp:
+ (WebKit::WebLoaderStrategy::scheduleLoad):
+ Now handles the fact that FrameLoaderClient::frameID() and
+ FrameLoaderClient::pageID() return an optional.
+ * WebProcess/Storage/WebSWContextManagerConnection.cpp:
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::pageID const):
+ (WebKit::WebFrameLoaderClient::frameID const):
+ Now return an optional.
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
+ * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
+ (WebKit::WebPlatformStrategies::cookiesForDOM):
+ (WebKit::WebPlatformStrategies::setCookiesFromDOM):
+ (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue):
+ (WebKit::WebPlatformStrategies::getRawCookies):
+ * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
+
2017-12-14 Alex Christensen <[email protected]>
Fix Mac CMake build
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (225933 => 225934)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -347,14 +347,14 @@
loader->convertToDownload(downloadID, request, response);
}
-void NetworkConnectionToWebProcess::cookiesForDOM(PAL::SessionID sessionID, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies, String& cookieString, bool& secureCookiesAccessed)
+void NetworkConnectionToWebProcess::cookiesForDOM(PAL::SessionID sessionID, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies, String& cookieString, bool& secureCookiesAccessed)
{
- std::tie(cookieString, secureCookiesAccessed) = WebCore::cookiesForDOM(storageSession(sessionID), firstParty, url, includeSecureCookies);
+ std::tie(cookieString, secureCookiesAccessed) = WebCore::cookiesForDOM(storageSession(sessionID), firstParty, url, frameID, pageID, includeSecureCookies);
}
-void NetworkConnectionToWebProcess::setCookiesFromDOM(PAL::SessionID sessionID, const URL& firstParty, const URL& url, const String& cookieString)
+void NetworkConnectionToWebProcess::setCookiesFromDOM(PAL::SessionID sessionID, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String& cookieString)
{
- WebCore::setCookiesFromDOM(storageSession(sessionID), firstParty, url, cookieString);
+ WebCore::setCookiesFromDOM(storageSession(sessionID), firstParty, url, frameID, pageID, cookieString);
}
void NetworkConnectionToWebProcess::cookiesEnabled(PAL::SessionID sessionID, bool& result)
@@ -362,14 +362,14 @@
result = WebCore::cookiesEnabled(storageSession(sessionID));
}
-void NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue(PAL::SessionID sessionID, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies, String& cookieString, bool& secureCookiesAccessed)
+void NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue(PAL::SessionID sessionID, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies, String& cookieString, bool& secureCookiesAccessed)
{
- std::tie(cookieString, secureCookiesAccessed) = WebCore::cookieRequestHeaderFieldValue(storageSession(sessionID), firstParty, url, includeSecureCookies);
+ std::tie(cookieString, secureCookiesAccessed) = WebCore::cookieRequestHeaderFieldValue(storageSession(sessionID), firstParty, url, frameID, pageID, includeSecureCookies);
}
-void NetworkConnectionToWebProcess::getRawCookies(PAL::SessionID sessionID, const URL& firstParty, const URL& url, Vector<Cookie>& result)
+void NetworkConnectionToWebProcess::getRawCookies(PAL::SessionID sessionID, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>& result)
{
- WebCore::getRawCookies(storageSession(sessionID), firstParty, url, result);
+ WebCore::getRawCookies(storageSession(sessionID), firstParty, url, frameID, pageID, result);
}
void NetworkConnectionToWebProcess::deleteCookie(PAL::SessionID sessionID, const URL& url, const String& cookieName)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (225933 => 225934)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2017-12-14 22:39:48 UTC (rev 225934)
@@ -101,11 +101,11 @@
void startDownload(PAL::SessionID, DownloadID, const WebCore::ResourceRequest&, const String& suggestedName = { });
void convertMainResourceLoadToDownload(PAL::SessionID, uint64_t mainResourceLoadIdentifier, DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
- void cookiesForDOM(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, WebCore::IncludeSecureCookies, String& cookieString, bool& secureCookiesAccessed);
- void setCookiesFromDOM(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, const String&);
+ void cookiesForDOM(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies, String& cookieString, bool& secureCookiesAccessed);
+ void setCookiesFromDOM(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String&);
void cookiesEnabled(PAL::SessionID, bool& result);
- void cookieRequestHeaderFieldValue(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, WebCore::IncludeSecureCookies, String& cookieString, bool& secureCookiesAccessed);
- void getRawCookies(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, Vector<WebCore::Cookie>&);
+ void cookieRequestHeaderFieldValue(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies, String& cookieString, bool& secureCookiesAccessed);
+ void getRawCookies(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<WebCore::Cookie>&);
void deleteCookie(PAL::SessionID, const WebCore::URL&, const String& cookieName);
void registerFileBlobURL(const WebCore::URL&, const String& path, SandboxExtension::Handle&&, const String& contentType);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (225933 => 225934)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2017-12-14 22:39:48 UTC (rev 225934)
@@ -33,11 +33,11 @@
StartDownload(PAL::SessionID sessionID, WebKit::DownloadID downloadID, WebCore::ResourceRequest request, String suggestedName)
ConvertMainResourceLoadToDownload(PAL::SessionID sessionID, uint64_t mainResourceLoadIdentifier, WebKit::DownloadID downloadID, WebCore::ResourceRequest request, WebCore::ResourceResponse response)
- CookiesForDOM(PAL::SessionID sessionID, WebCore::URL firstParty, WebCore::URL url, enum WebCore::IncludeSecureCookies includeSecureCookies) -> (String cookieString, bool didAccessSecureCookies)
- SetCookiesFromDOM(PAL::SessionID sessionID, WebCore::URL firstParty, WebCore::URL url, String cookieString)
+ CookiesForDOM(PAL::SessionID sessionID, WebCore::URL firstParty, WebCore::URL url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, enum WebCore::IncludeSecureCookies includeSecureCookies) -> (String cookieString, bool didAccessSecureCookies)
+ SetCookiesFromDOM(PAL::SessionID sessionID, WebCore::URL firstParty, WebCore::URL url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, String cookieString)
CookiesEnabled(PAL::SessionID sessionID) -> (bool enabled)
- CookieRequestHeaderFieldValue(PAL::SessionID sessionID, WebCore::URL firstParty, WebCore::URL url, enum WebCore::IncludeSecureCookies includeSecureCookies) -> (String cookieString, bool didAccessSecureCookies)
- GetRawCookies(PAL::SessionID sessionID, WebCore::URL firstParty, WebCore::URL url) -> (Vector<WebCore::Cookie> cookies)
+ CookieRequestHeaderFieldValue(PAL::SessionID sessionID, WebCore::URL firstParty, WebCore::URL url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, enum WebCore::IncludeSecureCookies includeSecureCookies) -> (String cookieString, bool didAccessSecureCookies)
+ GetRawCookies(PAL::SessionID sessionID, WebCore::URL firstParty, WebCore::URL url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID) -> (Vector<WebCore::Cookie> cookies)
DeleteCookie(PAL::SessionID sessionID, WebCore::URL url, String cookieName)
RegisterFileBlobURL(WebCore::URL url, String path, WebKit::SandboxExtension::Handle extensionHandle, String contentType)
Modified: trunk/Source/WebKit/Shared/mac/CookieStorageShim.mm (225933 => 225934)
--- trunk/Source/WebKit/Shared/mac/CookieStorageShim.mm 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKit/Shared/mac/CookieStorageShim.mm 2017-12-14 22:39:48 UTC (rev 225934)
@@ -61,7 +61,7 @@
String cookies;
bool secureCookiesAccessed = false;
URL firstPartyForCookiesURL;
- if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::CookieRequestHeaderFieldValue(PAL::SessionID::defaultSessionID(), firstPartyForCookiesURL, inRequestURL, includeSecureCookies), Messages::NetworkConnectionToWebProcess::CookieRequestHeaderFieldValue::Reply(cookies, secureCookiesAccessed), 0))
+ if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::CookieRequestHeaderFieldValue(PAL::SessionID::defaultSessionID(), firstPartyForCookiesURL, inRequestURL, std::nullopt, std::nullopt, includeSecureCookies), Messages::NetworkConnectionToWebProcess::CookieRequestHeaderFieldValue::Reply(cookies, secureCookiesAccessed), 0))
return 0;
if (cookies.isNull())
Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp (225933 => 225934)
--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -158,8 +158,8 @@
auto& frameLoaderClient = resourceLoader.frameLoader()->client();
WebResourceLoader::TrackingParameters trackingParameters;
- trackingParameters.pageID = frameLoaderClient.pageID();
- trackingParameters.frameID = frameLoaderClient.frameID();
+ trackingParameters.pageID = frameLoaderClient.pageID().value();
+ trackingParameters.frameID = frameLoaderClient.frameID().value();
trackingParameters.resourceID = identifier;
auto sessionID = frameLoaderClient.sessionID();
Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp (225933 => 225934)
--- trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -84,8 +84,8 @@
void frameLoaderDestroyed() final { m_connection.removeFrameLoaderClient(*this); }
PAL::SessionID sessionID() const final { return m_sessionID; }
- uint64_t pageID() const final { return m_pageID; }
- uint64_t frameID() const final { return m_frameID; }
+ std::optional<uint64_t> pageID() const final { return m_pageID; }
+ std::optional<uint64_t> frameID() const final { return m_frameID; }
String userAgent(const URL&) final { return m_userAgent; }
WebSWContextManagerConnection& m_connection;
Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (225933 => 225934)
--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -106,14 +106,20 @@
{
}
-uint64_t WebFrameLoaderClient::pageID() const
+std::optional<uint64_t> WebFrameLoaderClient::pageID() const
{
- return m_frame && m_frame->page() ? m_frame->page()->pageID() : 0;
+ if (m_frame && m_frame->page())
+ return m_frame->page()->pageID();
+
+ return std::nullopt;
}
-uint64_t WebFrameLoaderClient::frameID() const
+std::optional<uint64_t> WebFrameLoaderClient::frameID() const
{
- return m_frame ? m_frame->frameID() : 0;
+ if (m_frame)
+ return m_frame->frameID();
+
+ return std::nullopt;
}
PAL::SessionID WebFrameLoaderClient::sessionID() const
Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.h (225933 => 225934)
--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.h 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.h 2017-12-14 22:39:48 UTC (rev 225934)
@@ -51,8 +51,8 @@
void applyToDocumentLoader(WebsitePolicies&&);
- uint64_t pageID() const final;
- uint64_t frameID() const final;
+ std::optional<uint64_t> pageID() const final;
+ std::optional<uint64_t> frameID() const final;
PAL::SessionID sessionID() const final;
private:
Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp (225933 => 225934)
--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -109,19 +109,19 @@
// CookiesStrategy
-std::pair<String, bool> WebPlatformStrategies::cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> WebPlatformStrategies::cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
String cookieString;
bool secureCookiesAccessed = false;
- if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::CookiesForDOM(session.sessionID(), firstParty, url, includeSecureCookies), Messages::NetworkConnectionToWebProcess::CookiesForDOM::Reply(cookieString, secureCookiesAccessed), 0))
+ if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::CookiesForDOM(session.sessionID(), firstParty, url, frameID, pageID, includeSecureCookies), Messages::NetworkConnectionToWebProcess::CookiesForDOM::Reply(cookieString, secureCookiesAccessed), 0))
return { String(), false };
return { cookieString, secureCookiesAccessed };
}
-void WebPlatformStrategies::setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, const String& cookieString)
+void WebPlatformStrategies::setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String& cookieString)
{
- WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::SetCookiesFromDOM(session.sessionID(), firstParty, url, cookieString), 0);
+ WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::SetCookiesFromDOM(session.sessionID(), firstParty, url, frameID, pageID, cookieString), 0);
}
bool WebPlatformStrategies::cookiesEnabled(const NetworkStorageSession& session)
@@ -132,23 +132,23 @@
return result;
}
-std::pair<String, bool> WebPlatformStrategies::cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> WebPlatformStrategies::cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
- return cookieRequestHeaderFieldValue(session.sessionID(), firstParty, url, includeSecureCookies);
+ return cookieRequestHeaderFieldValue(session.sessionID(), firstParty, url, frameID, pageID, includeSecureCookies);
}
-std::pair<String, bool> WebPlatformStrategies::cookieRequestHeaderFieldValue(PAL::SessionID sessionID, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> WebPlatformStrategies::cookieRequestHeaderFieldValue(PAL::SessionID sessionID, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
String cookieString;
bool secureCookiesAccessed = false;
- if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::CookieRequestHeaderFieldValue(sessionID, firstParty, url, includeSecureCookies), Messages::NetworkConnectionToWebProcess::CookieRequestHeaderFieldValue::Reply(cookieString, secureCookiesAccessed), 0))
+ if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::CookieRequestHeaderFieldValue(sessionID, firstParty, url, frameID, pageID, includeSecureCookies), Messages::NetworkConnectionToWebProcess::CookieRequestHeaderFieldValue::Reply(cookieString, secureCookiesAccessed), 0))
return { String(), false };
return { cookieString, secureCookiesAccessed };
}
-bool WebPlatformStrategies::getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL& url, Vector<Cookie>& rawCookies)
+bool WebPlatformStrategies::getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>& rawCookies)
{
- if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::GetRawCookies(session.sessionID(), firstParty, url), Messages::NetworkConnectionToWebProcess::GetRawCookies::Reply(rawCookies), 0))
+ if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::GetRawCookies(session.sessionID(), firstParty, url, frameID, pageID), Messages::NetworkConnectionToWebProcess::GetRawCookies::Reply(rawCookies), 0))
return false;
return true;
}
Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.h (225933 => 225934)
--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.h 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.h 2017-12-14 22:39:48 UTC (rev 225934)
@@ -47,12 +47,12 @@
WebCore::BlobRegistry* createBlobRegistry() override;
// WebCore::CookiesStrategy
- std::pair<String, bool> cookiesForDOM(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, WebCore::IncludeSecureCookies) override;
- void setCookiesFromDOM(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, const String&) override;
+ std::pair<String, bool> cookiesForDOM(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies) override;
+ void setCookiesFromDOM(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String&) override;
bool cookiesEnabled(const WebCore::NetworkStorageSession&) override;
- std::pair<String, bool> cookieRequestHeaderFieldValue(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, WebCore::IncludeSecureCookies) override;
- std::pair<String, bool> cookieRequestHeaderFieldValue(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, WebCore::IncludeSecureCookies) override;
- bool getRawCookies(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, Vector<WebCore::Cookie>&) override;
+ std::pair<String, bool> cookieRequestHeaderFieldValue(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies) override;
+ std::pair<String, bool> cookieRequestHeaderFieldValue(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies) override;
+ bool getRawCookies(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<WebCore::Cookie>&) override;
void deleteCookie(const WebCore::NetworkStorageSession&, const WebCore::URL&, const String&) override;
// WebCore::PasteboardStrategy
Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (225933 => 225934)
--- trunk/Source/WebKitLegacy/mac/ChangeLog 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog 2017-12-14 22:39:48 UTC (rev 225934)
@@ -1,3 +1,32 @@
+2017-12-14 John Wilander <[email protected]>
+
+ Storage Access API: Implement frame-specific access in the document.cookie layer
+ https://bugs.webkit.org/show_bug.cgi?id=180682
+ <rdar://problem/35982257>
+
+ Reviewed by Alex Christensen.
+
+ CookiesStrategy::cookiesForDOM(), CookiesStrategy::setCookiesFromDOM(),
+ CookiesStrategy::cookieRequestHeaderFieldValue(), and
+ CookiesStrategy::getRawCookies() now take optional parameters for
+ frameID and pageID to allow frame-specific scoping of cookies.
+
+ This change makes the return values of FrameLoaderClient::frameID()
+ and FrameLoaderClient::pageID() std::optional<uint64_t> so that
+ WebCore can call those getters and get the right return values in
+ WebKit and std:nullopt in WebKitLegacy.
+
+ * WebCoreSupport/WebFrameLoaderClient.h:
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::pageID const):
+ (WebFrameLoaderClient::frameID const):
+ * WebCoreSupport/WebPlatformStrategies.h:
+ * WebCoreSupport/WebPlatformStrategies.mm:
+ (WebPlatformStrategies::cookiesForDOM):
+ (WebPlatformStrategies::setCookiesFromDOM):
+ (WebPlatformStrategies::cookieRequestHeaderFieldValue):
+ (WebPlatformStrategies::getRawCookies):
+
2017-12-12 Simon Fraser <[email protected]>
Remove ColorSpaceDeviceRGB and most users of the obsolete deviceRGB colorspace
Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.h (225933 => 225934)
--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.h 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.h 2017-12-14 22:39:48 UTC (rev 225934)
@@ -62,8 +62,8 @@
void frameLoaderDestroyed() final;
bool hasWebView() const final; // mainly for assertions
- uint64_t pageID() const final;
- uint64_t frameID() const final;
+ std::optional<uint64_t> pageID() const final;
+ std::optional<uint64_t> frameID() const final;
PAL::SessionID sessionID() const final;
void makeRepresentation(WebCore::DocumentLoader*) final;
Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm (225933 => 225934)
--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm 2017-12-14 22:39:48 UTC (rev 225934)
@@ -201,16 +201,14 @@
{
}
-uint64_t WebFrameLoaderClient::pageID() const
+std::optional<uint64_t> WebFrameLoaderClient::pageID() const
{
- RELEASE_ASSERT_NOT_REACHED();
- return 0;
+ return std::nullopt;
}
-uint64_t WebFrameLoaderClient::frameID() const
+std::optional<uint64_t> WebFrameLoaderClient::frameID() const
{
- RELEASE_ASSERT_NOT_REACHED();
- return 0;
+ return std::nullopt;
}
PAL::SessionID WebFrameLoaderClient::sessionID() const
Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.h (225933 => 225934)
--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.h 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.h 2017-12-14 22:39:48 UTC (rev 225934)
@@ -48,12 +48,12 @@
WebCore::BlobRegistry* createBlobRegistry() override;
// WebCore::CookiesStrategy
- std::pair<String, bool> cookiesForDOM(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, WebCore::IncludeSecureCookies) override;
- void setCookiesFromDOM(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, const String&) override;
+ std::pair<String, bool> cookiesForDOM(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies) override;
+ void setCookiesFromDOM(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String&) override;
bool cookiesEnabled(const WebCore::NetworkStorageSession&) override;
- std::pair<String, bool> cookieRequestHeaderFieldValue(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, WebCore::IncludeSecureCookies) override;
- std::pair<String, bool> cookieRequestHeaderFieldValue(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, WebCore::IncludeSecureCookies) override;
- bool getRawCookies(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, Vector<WebCore::Cookie>&) override;
+ std::pair<String, bool> cookieRequestHeaderFieldValue(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies) override;
+ std::pair<String, bool> cookieRequestHeaderFieldValue(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies) override;
+ bool getRawCookies(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<WebCore::Cookie>&) override;
void deleteCookie(const WebCore::NetworkStorageSession&, const WebCore::URL&, const String&) override;
// WebCore::PasteboardStrategy
Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm (225933 => 225934)
--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm 2017-12-14 22:39:48 UTC (rev 225934)
@@ -72,14 +72,14 @@
return new WebCore::BlobRegistryImpl;
}
-std::pair<String, bool> WebPlatformStrategies::cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> WebPlatformStrategies::cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
- return WebCore::cookiesForDOM(session, firstParty, url, includeSecureCookies);
+ return WebCore::cookiesForDOM(session, firstParty, url, frameID, pageID, includeSecureCookies);
}
-void WebPlatformStrategies::setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, const String& cookieString)
+void WebPlatformStrategies::setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String& cookieString)
{
- WebCore::setCookiesFromDOM(session, firstParty, url, cookieString);
+ WebCore::setCookiesFromDOM(session, firstParty, url, frameID, pageID, cookieString);
}
bool WebPlatformStrategies::cookiesEnabled(const NetworkStorageSession& session)
@@ -87,20 +87,20 @@
return WebCore::cookiesEnabled(session);
}
-std::pair<String, bool> WebPlatformStrategies::cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> WebPlatformStrategies::cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
- return WebCore::cookieRequestHeaderFieldValue(session, firstParty, url, includeSecureCookies);
+ return WebCore::cookieRequestHeaderFieldValue(session, firstParty, url, frameID, pageID, includeSecureCookies);
}
-std::pair<String, bool> WebPlatformStrategies::cookieRequestHeaderFieldValue(PAL::SessionID sessionID, const URL& firstParty, const URL& url, IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> WebPlatformStrategies::cookieRequestHeaderFieldValue(PAL::SessionID sessionID, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies)
{
auto& session = sessionID.isEphemeral() ? WebFrameNetworkingContext::ensurePrivateBrowsingSession() : NetworkStorageSession::defaultStorageSession();
- return WebCore::cookieRequestHeaderFieldValue(session, firstParty, url, includeSecureCookies);
+ return WebCore::cookieRequestHeaderFieldValue(session, firstParty, url, frameID, pageID, includeSecureCookies);
}
-bool WebPlatformStrategies::getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL& url, Vector<Cookie>& rawCookies)
+bool WebPlatformStrategies::getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>& rawCookies)
{
- return WebCore::getRawCookies(session, firstParty, url, rawCookies);
+ return WebCore::getRawCookies(session, firstParty, url, frameID, pageID, rawCookies);
}
void WebPlatformStrategies::deleteCookie(const NetworkStorageSession& session, const URL& url, const String& cookieName)
Modified: trunk/Source/WebKitLegacy/win/ChangeLog (225933 => 225934)
--- trunk/Source/WebKitLegacy/win/ChangeLog 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKitLegacy/win/ChangeLog 2017-12-14 22:39:48 UTC (rev 225934)
@@ -1,3 +1,33 @@
+2017-12-14 John Wilander <[email protected]>
+
+ Storage Access API: Implement frame-specific access in the document.cookie layer
+ https://bugs.webkit.org/show_bug.cgi?id=180682
+ <rdar://problem/35982257>
+
+ Reviewed by Alex Christensen.
+
+ CookiesStrategy::cookiesForDOM(), CookiesStrategy::setCookiesFromDOM(),
+ CookiesStrategy::cookieRequestHeaderFieldValue(), and
+ CookiesStrategy::getRawCookies() now take optional parameters for
+ frameID and pageID to allow frame-specific scoping of cookies.
+
+ This change makes the return values of FrameLoaderClient::frameID()
+ and FrameLoaderClient::pageID() std::optional<uint64_t> so that
+ WebCore can call those getters and get the right return values in
+ WebKit and std:nullopt in WebKitLegacy.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::pageID const):
+ (WebFrameLoaderClient::frameID const):
+ Now return an optional.
+ * WebCoreSupport/WebFrameLoaderClient.h:
+ * WebCoreSupport/WebPlatformStrategies.cpp:
+ (WebPlatformStrategies::cookiesForDOM):
+ (WebPlatformStrategies::setCookiesFromDOM):
+ (WebPlatformStrategies::cookieRequestHeaderFieldValue):
+ (WebPlatformStrategies::getRawCookies):
+ * WebCoreSupport/WebPlatformStrategies.h:
+
2017-12-12 Yusuke Suzuki <[email protected]>
[WTF] Thread::create should have Thread::tryCreate
Modified: trunk/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.cpp (225933 => 225934)
--- trunk/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -121,16 +121,16 @@
{
}
-uint64_t WebFrameLoaderClient::pageID() const
+std::optional<uint64_t> WebFrameLoaderClient::pageID() const
{
RELEASE_ASSERT_NOT_REACHED();
- return 0;
+ return std::nullopt;
}
-uint64_t WebFrameLoaderClient::frameID() const
+std::optional<uint64_t> WebFrameLoaderClient::frameID() const
{
RELEASE_ASSERT_NOT_REACHED();
- return 0;
+ return std::nullopt;
}
PAL::SessionID WebFrameLoaderClient::sessionID() const
Modified: trunk/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.h (225933 => 225934)
--- trunk/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.h 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.h 2017-12-14 22:39:48 UTC (rev 225934)
@@ -51,8 +51,8 @@
void dispatchDidFailToStartPlugin(const WebCore::PluginView*) const;
- uint64_t pageID() const final;
- uint64_t frameID() const final;
+ std::optional<uint64_t> pageID() const final;
+ std::optional<uint64_t> frameID() const final;
PAL::SessionID sessionID() const final;
bool hasWebView() const override;
Modified: trunk/Source/WebKitLegacy/win/WebCoreSupport/WebPlatformStrategies.cpp (225933 => 225934)
--- trunk/Source/WebKitLegacy/win/WebCoreSupport/WebPlatformStrategies.cpp 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKitLegacy/win/WebCoreSupport/WebPlatformStrategies.cpp 2017-12-14 22:39:48 UTC (rev 225934)
@@ -70,14 +70,14 @@
return new BlobRegistryImpl;
}
-std::pair<String, bool> WebPlatformStrategies::cookiesForDOM(const WebCore::NetworkStorageSession& session, const WebCore::URL& firstParty, const WebCore::URL& url, WebCore::IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> WebPlatformStrategies::cookiesForDOM(const WebCore::NetworkStorageSession& session, const WebCore::URL& firstParty, const WebCore::URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies includeSecureCookies)
{
- return WebCore::cookiesForDOM(session, firstParty, url, includeSecureCookies);
+ return WebCore::cookiesForDOM(session, firstParty, url, frameID, pageID, includeSecureCookies);
}
-void WebPlatformStrategies::setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, const String& cookieString)
+void WebPlatformStrategies::setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String& cookieString)
{
- WebCore::setCookiesFromDOM(session, firstParty, url, cookieString);
+ WebCore::setCookiesFromDOM(session, firstParty, url, frameID, pageID, cookieString);
}
bool WebPlatformStrategies::cookiesEnabled(const NetworkStorageSession& session)
@@ -85,20 +85,20 @@
return WebCore::cookiesEnabled(session);
}
-std::pair<String, bool> WebPlatformStrategies::cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, WebCore::IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> WebPlatformStrategies::cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies includeSecureCookies)
{
- return WebCore::cookieRequestHeaderFieldValue(session, firstParty, url, includeSecureCookies);
+ return WebCore::cookieRequestHeaderFieldValue(session, firstParty, url, frameID, pageID, includeSecureCookies);
}
-std::pair<String, bool> WebPlatformStrategies::cookieRequestHeaderFieldValue(PAL::SessionID sessionID, const URL& firstParty, const URL& url, WebCore::IncludeSecureCookies includeSecureCookies)
+std::pair<String, bool> WebPlatformStrategies::cookieRequestHeaderFieldValue(PAL::SessionID sessionID, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies includeSecureCookies)
{
auto& session = sessionID.isEphemeral() ? WebFrameNetworkingContext::ensurePrivateBrowsingSession() : NetworkStorageSession::defaultStorageSession();
- return WebCore::cookieRequestHeaderFieldValue(session, firstParty, url, includeSecureCookies);
+ return WebCore::cookieRequestHeaderFieldValue(session, firstParty, url, frameID, pageID, includeSecureCookies);
}
-bool WebPlatformStrategies::getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL& url, Vector<Cookie>& rawCookies)
+bool WebPlatformStrategies::getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>& rawCookies)
{
- return WebCore::getRawCookies(session, firstParty, url, rawCookies);
+ return WebCore::getRawCookies(session, firstParty, url, frameID, pageID, rawCookies);
}
void WebPlatformStrategies::deleteCookie(const NetworkStorageSession& session, const URL& url, const String& cookieName)
Modified: trunk/Source/WebKitLegacy/win/WebCoreSupport/WebPlatformStrategies.h (225933 => 225934)
--- trunk/Source/WebKitLegacy/win/WebCoreSupport/WebPlatformStrategies.h 2017-12-14 22:28:09 UTC (rev 225933)
+++ trunk/Source/WebKitLegacy/win/WebCoreSupport/WebPlatformStrategies.h 2017-12-14 22:39:48 UTC (rev 225934)
@@ -45,11 +45,11 @@
virtual WebCore::BlobRegistry* createBlobRegistry();
// WebCore::CookiesStrategy
- std::pair<String, bool> cookiesForDOM(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, WebCore::IncludeSecureCookies) override;
- virtual void setCookiesFromDOM(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, const String&);
+ std::pair<String, bool> cookiesForDOM(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies) override;
+ virtual void setCookiesFromDOM(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String&);
virtual bool cookiesEnabled(const WebCore::NetworkStorageSession&);
- std::pair<String, bool> cookieRequestHeaderFieldValue(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, WebCore::IncludeSecureCookies) override;
- std::pair<String, bool> cookieRequestHeaderFieldValue(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, WebCore::IncludeSecureCookies) override;
- virtual bool getRawCookies(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, Vector<WebCore::Cookie>&);
+ std::pair<String, bool> cookieRequestHeaderFieldValue(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies) override;
+ std::pair<String, bool> cookieRequestHeaderFieldValue(PAL::SessionID, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, WebCore::IncludeSecureCookies) override;
+ virtual bool getRawCookies(const WebCore::NetworkStorageSession&, const WebCore::URL& firstParty, const WebCore::URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<WebCore::Cookie>&);
virtual void deleteCookie(const WebCore::NetworkStorageSession&, const WebCore::URL&, const String&);
};