Storage Access API: Extend lifetime of cookies on successful user approval
authorwilander@apple.com <wilander@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 11 May 2018 01:59:24 +0000 (01:59 +0000)
committerwilander@apple.com <wilander@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 11 May 2018 01:59:24 +0000 (01:59 +0000)
https://bugs.webkit.org/show_bug.cgi?id=185534
<rdar://problem/40064547>

Reviewed by Brent Fulgham.

* UIProcess/Cocoa/WebResourceLoadStatisticsStoreCocoa.mm:
(WebKit::WebResourceLoadStatisticsStore::registerUserDefaultsIfNeeded):
    Picks up the experimental feature flag.
* UIProcess/WebResourceLoadStatisticsStore.cpp:
(WebKit::WebResourceLoadStatisticsStore::grantStorageAccessInternal):
    Now updates the domain's user interaction timestamp if the user was
    prompted for this access.
* UIProcess/WebResourceLoadStatisticsStore.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@231684 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/UIProcess/Cocoa/WebResourceLoadStatisticsStoreCocoa.mm
Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp
Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.h

index d6c02bd..8adf65b 100644 (file)
@@ -1,3 +1,20 @@
+2018-05-10  John Wilander  <wilander@apple.com>
+
+        Storage Access API: Extend lifetime of cookies on successful user approval
+        https://bugs.webkit.org/show_bug.cgi?id=185534
+        <rdar://problem/40064547>
+
+        Reviewed by Brent Fulgham.
+
+        * UIProcess/Cocoa/WebResourceLoadStatisticsStoreCocoa.mm:
+        (WebKit::WebResourceLoadStatisticsStore::registerUserDefaultsIfNeeded):
+            Picks up the experimental feature flag.
+        * UIProcess/WebResourceLoadStatisticsStore.cpp:
+        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccessInternal):
+            Now updates the domain's user interaction timestamp if the user was
+            prompted for this access.
+        * UIProcess/WebResourceLoadStatisticsStore.h:
+
 2018-05-10  Chris Dumez  <cdumez@apple.com>
 
         [iOS] Release page load process assertion if the screen is locked
index 5075fc8..fe312c7 100644 (file)
@@ -51,6 +51,7 @@ void WebResourceLoadStatisticsStore::registerUserDefaultsIfNeeded()
 
         setDebugLogggingEnabled([[NSUserDefaults standardUserDefaults] boolForKey:@"ResourceLoadStatisticsDebugLoggingEnabled"]);
         setResourceLoadStatisticsDebugMode([[NSUserDefaults standardUserDefaults] boolForKey:@"ExperimentalResourceLoadStatisticsDebugMode"]);
+        setStorageAccessPromptsEnabled([[NSUserDefaults standardUserDefaults] boolForKey:@"ExperimentalStorageAccessPromptsEnabled"]);
     });
 }
 
index 2479bcf..3e78315 100644 (file)
@@ -456,7 +456,6 @@ void WebResourceLoadStatisticsStore::grantStorageAccess(String&& subFrameHost, S
 
 void WebResourceLoadStatisticsStore::grantStorageAccessInternal(String&& subFramePrimaryDomain, String&& topFramePrimaryDomain, std::optional<uint64_t> frameID, uint64_t pageID, bool userWasPromptedNowOrEarlier, CompletionHandler<void(bool)>&& callback)
 {
-    UNUSED_PARAM(userWasPromptedNowOrEarlier);
     ASSERT(!RunLoop::isMain());
 
     if (subFramePrimaryDomain == topFramePrimaryDomain) {
@@ -464,6 +463,14 @@ void WebResourceLoadStatisticsStore::grantStorageAccessInternal(String&& subFram
         return;
     }
 
+    // FIXME: Remove m_storageAccessPromptsEnabled check if prompting is no longer experimental.
+    if (userWasPromptedNowOrEarlier && m_storageAccessPromptsEnabled) {
+        auto& subFrameStatistic = ensureResourceStatisticsForPrimaryDomain(subFramePrimaryDomain);
+        ASSERT(subFrameStatistic.hadUserInteraction);
+        ASSERT(subFrameStatistic.storageAccessUnderTopFrameOrigins.contains(topFramePrimaryDomain));
+        subFrameStatistic.mostRecentUserInteractionTime = WallTime::now();
+    }
+
     m_grantStorageAccessHandler(subFramePrimaryDomain, topFramePrimaryDomain, frameID, pageID, WTFMove(callback));
 }
 
index e8ad1df..468d594 100644 (file)
@@ -191,6 +191,7 @@ private:
     void removeAllStorageAccess();
 
     void setDebugLogggingEnabled(bool enabled) { m_debugLoggingEnabled  = enabled; }
+    void setStorageAccessPromptsEnabled(bool enabled) { m_storageAccessPromptsEnabled  = enabled; }
 
 #if PLATFORM(COCOA)
     void registerUserDefaultsIfNeeded();
@@ -239,6 +240,7 @@ private:
 
     bool m_debugModeEnabled { false };
     bool m_debugLoggingEnabled { false };
+    bool m_storageAccessPromptsEnabled { false };
 
     Function<void (const String&)> m_statisticsTestingCallback;
 };