Changeset 282130 in webkit


Ignore:
Timestamp:
Sep 7, 2021 11:30:43 PM (11 months ago)
Author:
sihui_liu@apple.com
Message:

Add basic support for Storage API
https://bugs.webkit.org/show_bug.cgi?id=229925

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

  • web-platform-tests/file-system-access/idlharness.https.any-expected.txt:
  • web-platform-tests/file-system-access/idlharness.https.any.worker-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-remove.https.any-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemFileHandle-create-sync-access-handle-dedicated-worker.https.tentative.window-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any-expected.txt:
  • web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream.https.any-expected.txt:
  • web-platform-tests/storage/estimate-indexeddb.https.any-expected.txt:
  • web-platform-tests/storage/estimate-parallel.https.any-expected.txt:
  • web-platform-tests/storage/estimate-usage-details-application-cache.https.tentative-expected.txt:
  • web-platform-tests/storage/estimate-usage-details-caches.https.tentative.any-expected.txt:
  • web-platform-tests/storage/estimate-usage-details-indexeddb.https.tentative.any-expected.txt:
  • web-platform-tests/storage/estimate-usage-details-service-workers.https.tentative.window-expected.txt:
  • web-platform-tests/storage/estimate-usage-details.https.tentative.any-expected.txt:
  • web-platform-tests/storage/idlharness.https.any-expected.txt:
  • web-platform-tests/storage/idlharness.https.any.worker-expected.txt:
  • web-platform-tests/storage/opaque-origin.https.window-expected.txt:
  • web-platform-tests/storage/persisted.https.any-expected.txt:
  • web-platform-tests/storage/quotachange-in-detached-iframe.tentative.https-expected.txt:
  • web-platform-tests/storage/storagemanager-estimate.https.any-expected.txt:
  • web-platform-tests/storage/storagemanager-persist.https.window-expected.txt:
  • web-platform-tests/storage/storagemanager-persisted.https.any-expected.txt:

Source/WebCore:

Add bindings code and a feature flag for Storage API.
Spec: https://storage.spec.whatwg.org

Rebaselined existing tests.

  • CMakeLists.txt:
  • DerivedSources-input.xcfilelist:
  • DerivedSources-output.xcfilelist:
  • DerivedSources.make:
  • Headers.cmake:
  • Modules/storage/DummyStorageProvider.h: Added.
  • Modules/storage/StorageConnection.h: Added.
  • Modules/storage/StorageManager.cpp: Added.

(WebCore::StorageManager::create):
(WebCore::StorageManager::StorageManager):
(WebCore::clientOrigin):
(WebCore::StorageManager::persisted):
(WebCore::StorageManager::persist):

  • Modules/storage/StorageManager.h: Added.
  • Modules/storage/StorageManager.idl: Added.
  • Modules/storage/StorageProvider.h: Added.
  • Sources.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/WebCoreBuiltinNames.h:
  • dom/Document.cpp:

(WebCore::Document::storageConnection):

  • dom/Document.h:
  • dom/ScriptExecutionContext.h:

(WebCore::ScriptExecutionContext::storageConnection):

  • loader/EmptyClients.cpp:

(WebCore::pageConfigurationWithEmptyClients):

  • page/Navigator.idl:
  • page/NavigatorBase.cpp:
  • page/NavigatorBase.h:
  • page/NavigatorStorage.idl: Added.
  • page/Page.cpp:

(WebCore::m_storageProvider):
(WebCore::Page::storageConnection):
(WebCore::m_permissionController): Deleted.

  • page/Page.h:
  • page/PageConfiguration.cpp:

(WebCore::PageConfiguration::PageConfiguration):

  • page/PageConfiguration.h:

Source/WebKit:

Set up basic infrastructure for StorageManager.
UI process sets the directory for StorageMananager with datastore configuration.
Network process manages storage with NetworkStorageManager (per Session). It has multiple OriginStorageManagers
for managing storage of different origins, and each OriginStorageManager has a default StorageBucket.
Web process can get and set persist property of each bucket by sending messages to network process.

  • CMakeLists.txt:
  • DerivedSources-input.xcfilelist:
  • DerivedSources-output.xcfilelist:
  • DerivedSources.make:
  • NetworkProcess/NetworkProcess.cpp:

(WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
(WebKit::NetworkProcess::addWebsiteDataStore):
(WebKit::NetworkProcess::addStorageManagerForSession):
(WebKit::NetworkProcess::removeStorageManagerForSession):
(WebKit::NetworkProcess::destroySession):
(WebKit::NetworkProcess::connectionToWebProcessClosed):

  • NetworkProcess/NetworkProcess.h:
  • NetworkProcess/storage/NetworkStorageManager.cpp: Added.

(WebKit::NetworkStorageManager::create):
(WebKit::NetworkStorageManager::NetworkStorageManager):
(WebKit::NetworkStorageManager::startReceivingMessageFromConnection):
(WebKit::NetworkStorageManager::stopReceivingMessageFromConnection):
(WebKit::encode):
(WebKit::originPath):
(WebKit::NetworkStorageManager::localOriginStorageManager):
(WebKit::NetworkStorageManager::persisted):
(WebKit::NetworkStorageManager::persist):

  • NetworkProcess/storage/NetworkStorageManager.h: Added.

(WebKit::NetworkStorageManager::sessionID const):

  • NetworkProcess/storage/NetworkStorageManager.messages.in: Added.
  • NetworkProcess/storage/OriginStorageManager.cpp: Added.

(WebKit::OriginStorageManager::StorageBucket::StorageBucket):
(WebKit::OriginStorageManager::StorageBucket::mode const):
(WebKit::OriginStorageManager::StorageBucket::setMode):
(WebKit::OriginStorageManager::OriginStorageManager):
(WebKit::OriginStorageManager::persist):

  • NetworkProcess/storage/OriginStorageManager.h: Added.

(WebKit::OriginStorageManager::persisted const):

  • Shared/WebsiteDataStoreParameters.cpp:

(WebKit::WebsiteDataStoreParameters::encode const):
(WebKit::WebsiteDataStoreParameters::decode):

  • Shared/WebsiteDataStoreParameters.h:
  • Sources.txt:
  • UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:

(WKWebsiteDataStoreConfigurationCopyGeneralStorageDirectory):
(WKWebsiteDataStoreConfigurationSetGeneralStorageDirectory):

  • UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h:
  • UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
  • UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:

(-[_WKWebsiteDataStoreConfiguration generalStorageDirectory]):
(-[_WKWebsiteDataStoreConfiguration setGeneralStorageDirectory:]):

  • UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:

(WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):

  • UIProcess/WebsiteData/WebsiteDataStore.cpp:

(WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
(WebKit::WebsiteDataStore::parameters):

  • UIProcess/WebsiteData/WebsiteDataStore.h:

(WebKit::WebsiteDataStore::generalStorageDirectory const):

  • UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:

(WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
(WebKit::WebsiteDataStoreConfiguration::copy const):

  • UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:

(WebKit::WebsiteDataStoreConfiguration::generalStorageDirectory const):
(WebKit::WebsiteDataStoreConfiguration::setGeneralStorageDirectory):

  • UIProcess/WebsiteData/playstation/WebsiteDataStorePlayStation.cpp:

(WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):

  • UIProcess/WebsiteData/win/WebsiteDataStoreWin.cpp:

(WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):

  • UIProcess/glib/WebsiteDataStoreGLib.cpp:

(WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):

  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/WebCoreSupport/WebStorageConnection.cpp: Added.

(WebKit::WebStorageConnection::create):
(WebKit::WebStorageConnection::persisted):
(WebKit::WebStorageConnection::persist):
(WebKit::WebStorageConnection::connection):

  • WebProcess/WebCoreSupport/WebStorageConnection.h: Added.
  • WebProcess/WebCoreSupport/WebStorageProvider.h: Added.
  • WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteModelHosting.h:
  • WebProcess/WebPage/WebPage.cpp:

(WebKit::m_appHighlightsVisible):

Source/WebKitLegacy/mac:

  • WebView/WebView.mm:

(-[WebView _commonInitializationWithFrameName:groupName:]):
(-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):

Source/WebKitLegacy/win:

  • WebView.cpp:

(WebView::initWithFrame):

Source/WTF:

  • Scripts/Preferences/WebPreferencesExperimental.yaml:

LayoutTests:

  • platform/mac-wk1/fast/dom/navigator-detached-no-crash-expected.txt:
  • platform/mac-wk2/fast/dom/navigator-detached-no-crash-expected.txt:
Location:
trunk
Files:
17 added
93 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r282129 r282130  
     12021-09-07  Sihui Liu  <sihui_liu@apple.com>
     2
     3        Add basic support for Storage API
     4        https://bugs.webkit.org/show_bug.cgi?id=229925
     5
     6        Reviewed by Darin Adler.
     7
     8        * platform/mac-wk1/fast/dom/navigator-detached-no-crash-expected.txt:
     9        * platform/mac-wk2/fast/dom/navigator-detached-no-crash-expected.txt:
     10
    1112021-09-07  Antti Koivisto  <antti@apple.com>
    212
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r282129 r282130  
     12021-09-07  Sihui Liu  <sihui_liu@apple.com>
     2
     3        Add basic support for Storage API
     4        https://bugs.webkit.org/show_bug.cgi?id=229925
     5
     6        Reviewed by Darin Adler.
     7
     8        * web-platform-tests/file-system-access/idlharness.https.any-expected.txt:
     9        * web-platform-tests/file-system-access/idlharness.https.any.worker-expected.txt:
     10        * web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any-expected.txt:
     11        * web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any-expected.txt:
     12        * web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window-expected.txt:
     13        * web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window-expected.txt:
     14        * web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window-expected.txt:
     15        * web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window-expected.txt:
     16        * web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window-expected.txt:
     17        * web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window-expected.txt:
     18        * web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window-expected.txt:
     19        * web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window-expected.txt:
     20        * web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-remove.https.any-expected.txt:
     21        * web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any-expected.txt:
     22        * web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any-expected.txt:
     23        * web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any-expected.txt:
     24        * web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any-expected.txt:
     25        * web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any-expected.txt:
     26        * web-platform-tests/file-system-access/sandboxed_FileSystemFileHandle-create-sync-access-handle-dedicated-worker.https.tentative.window-expected.txt:
     27        * web-platform-tests/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any-expected.txt:
     28        * web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any-expected.txt:
     29        * web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any-expected.txt:
     30        * web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream.https.any-expected.txt:
     31        * web-platform-tests/storage/estimate-indexeddb.https.any-expected.txt:
     32        * web-platform-tests/storage/estimate-parallel.https.any-expected.txt:
     33        * web-platform-tests/storage/estimate-usage-details-application-cache.https.tentative-expected.txt:
     34        * web-platform-tests/storage/estimate-usage-details-caches.https.tentative.any-expected.txt:
     35        * web-platform-tests/storage/estimate-usage-details-indexeddb.https.tentative.any-expected.txt:
     36        * web-platform-tests/storage/estimate-usage-details-service-workers.https.tentative.window-expected.txt:
     37        * web-platform-tests/storage/estimate-usage-details.https.tentative.any-expected.txt:
     38        * web-platform-tests/storage/idlharness.https.any-expected.txt:
     39        * web-platform-tests/storage/idlharness.https.any.worker-expected.txt:
     40        * web-platform-tests/storage/opaque-origin.https.window-expected.txt:
     41        * web-platform-tests/storage/persisted.https.any-expected.txt:
     42        * web-platform-tests/storage/quotachange-in-detached-iframe.tentative.https-expected.txt:
     43        * web-platform-tests/storage/storagemanager-estimate.https.any-expected.txt:
     44        * web-platform-tests/storage/storagemanager-persist.https.window-expected.txt:
     45        * web-platform-tests/storage/storagemanager-persisted.https.any-expected.txt:
     46
    1472021-09-07  Antti Koivisto  <antti@apple.com>
    248
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/idlharness.https.any-expected.txt

    r281769 r282130  
    5454FAIL FileSystemWritableFileStream interface: operation seek(unsigned long long) assert_own_property: self does not have own property "FileSystemWritableFileStream" expected property "FileSystemWritableFileStream" missing
    5555FAIL FileSystemWritableFileStream interface: operation truncate(unsigned long long) assert_own_property: self does not have own property "FileSystemWritableFileStream" expected property "FileSystemWritableFileStream" missing
    56 FAIL StorageManager interface: operation getDirectory() assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
     56FAIL StorageManager interface: operation getDirectory() assert_own_property: interface prototype object missing non-static operation expected property "getDirectory" missing
    5757FAIL DataTransferItem interface: operation getAsFileSystemHandle() assert_own_property: interface prototype object missing non-static operation expected property "getAsFileSystemHandle" missing
    5858FAIL Window interface: operation showOpenFilePicker(optional OpenFilePickerOptions) assert_own_property: global object missing non-static operation expected property "showOpenFilePicker" missing
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/idlharness.https.any.worker-expected.txt

    r281769 r282130  
    5454FAIL FileSystemWritableFileStream interface: operation seek(unsigned long long) assert_own_property: self does not have own property "FileSystemWritableFileStream" expected property "FileSystemWritableFileStream" missing
    5555FAIL FileSystemWritableFileStream interface: operation truncate(unsigned long long) assert_own_property: self does not have own property "FileSystemWritableFileStream" expected property "FileSystemWritableFileStream" missing
    56 FAIL StorageManager interface: operation getDirectory() assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
     56FAIL StorageManager interface: operation getDirectory() assert_own_property: interface prototype object missing non-static operation expected property "getDirectory" missing
    5757
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any-expected.txt

    r281769 r282130  
    11
    2 FAIL Store handle in IndexedDB and read from pending transaction. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL Store handle in IndexedDB and read from new transaction. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL Store handles and blobs in IndexedDB. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL Store handle in IndexedDB and read using a cursor. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    6 FAIL Store handle in IndexedDB using inline keys. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL Store handle in IndexedDB and read from pending transaction. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL Store handle in IndexedDB and read from new transaction. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL Store handles and blobs in IndexedDB. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL Store handle in IndexedDB and read using a cursor. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     6FAIL Store handle in IndexedDB using inline keys. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    77
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any-expected.txt

    r281769 r282130  
    11
    2 FAIL isSameEntry for identical directory handles returns true promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL isSameEntry for different directories returns false promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL isSameEntry for different handles for the same directory promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL isSameEntry for identical file handles returns true promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    6 FAIL isSameEntry for different files returns false promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    7 FAIL isSameEntry for different handles for the same file promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    8 FAIL isSameEntry comparing a file to a file in a different directory returns false promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    9 FAIL isSameEntry comparing a file to a directory returns false promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL isSameEntry for identical directory handles returns true promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL isSameEntry for different directories returns false promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL isSameEntry for different handles for the same directory promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL isSameEntry for identical file handles returns true promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     6FAIL isSameEntry for different files returns false promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     7FAIL isSameEntry for different handles for the same file promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     8FAIL isSameEntry comparing a file to a file in a different directory returns false promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     9FAIL isSameEntry comparing a file to a directory returns false promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    1010
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window-expected.txt

    r281769 r282130  
    11
    2 FAIL Send and receive messages using a broadcast channel in an iframe, dedicated worker and service worker. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL Send and receive messages using a broadcast channel in an iframe, dedicated worker and service worker. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    33
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window-expected.txt

    r281769 r282130  
    11
    2 FAIL Fail to send and receive messages using a cross origin iframe. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL Fail to send and receive messages using a cross origin message port in an iframe. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL Fail to send to a sandboxed iframe. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL Fail to send messages using a message port to a sandboxed iframe. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    6 FAIL Fail to send messages to a data URI iframe. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    7 FAIL Fail to send messages using a message port in a data URI iframe. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    8 FAIL Fail to send and receive messages using a cross origin window. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    9 FAIL Fail to send and receive messages using a cross origin message port in a window. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    10 FAIL Fail to send messages to  a sandboxed window. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    11 FAIL Fail to send messages using a message port to a sandboxed window. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL Fail to send and receive messages using a cross origin iframe. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL Fail to send and receive messages using a cross origin message port in an iframe. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL Fail to send to a sandboxed iframe. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL Fail to send messages using a message port to a sandboxed iframe. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     6FAIL Fail to send messages to a data URI iframe. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     7FAIL Fail to send messages using a message port in a data URI iframe. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     8FAIL Fail to send and receive messages using a cross origin window. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     9FAIL Fail to send and receive messages using a cross origin message port in a window. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     10FAIL Fail to send messages to  a sandboxed window. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     11FAIL Fail to send messages using a message port to a sandboxed window. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    1212
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window-expected.txt

    r281769 r282130  
    11
    2 FAIL Send and receive messages using a message port in a same origin iframe. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL Send and receive messages using a message port in a sandboxed same origin iframe. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL Send and receive messages using a message port in a blob iframe. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL Send and receive messages using a message port in an iframe srcdoc. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL Send and receive messages using a message port in a same origin iframe. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL Send and receive messages using a message port in a sandboxed same origin iframe. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL Send and receive messages using a message port in a blob iframe. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL Send and receive messages using a message port in an iframe srcdoc. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    66
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window-expected.txt

    r281769 r282130  
    11
    2 FAIL Send and receive messages using a message port in a same origin window. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL Send and receive messages using a message port in a blob window. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL Send and receive messages using a message port in a sandboxed same origin window. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL Send and receive messages using a message port in a same origin window. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL Send and receive messages using a message port in a blob window. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL Send and receive messages using a message port in a sandboxed same origin window. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    55
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window-expected.txt

    r281769 r282130  
    11
    2 FAIL Send and receive messages using a message port in a dedicated worker. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL Send and receive messages using a message port in a service worker. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL Send and receive messages using a message port in a dedicated worker. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL Send and receive messages using a message port in a service worker. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    44
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window-expected.txt

    r281769 r282130  
    11
    2 FAIL Send and receive messages using a same origin iframe. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL Send and receive messages using a sandboxed same origin iframe. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL Send and receive messages using a blob iframe. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL Send and receive messages using an iframe srcdoc. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL Send and receive messages using a same origin iframe. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL Send and receive messages using a sandboxed same origin iframe. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL Send and receive messages using a blob iframe. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL Send and receive messages using an iframe srcdoc. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    66
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window-expected.txt

    r281769 r282130  
    11
    2 FAIL Send and receive messages using a same origin window. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL Send and receive messages using a blob window. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL Send and receive messages using a sandboxed same origin window. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL Send and receive messages using a same origin window. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL Send and receive messages using a blob window. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL Send and receive messages using a sandboxed same origin window. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    55
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window-expected.txt

    r281769 r282130  
    11
    2 FAIL Send and receive messages using a dedicated worker. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL Send and receive messages using a service worker. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL Send and receive messages using a dedicated worker. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL Send and receive messages using a service worker. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    44
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-remove.https.any-expected.txt

    r281769 r282130  
    11
    2 FAIL remove() to remove a file promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL remove() on an already removed file should fail promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL remove() to remove an empty directory promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL remove() on an already removed directory should fail promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    6 FAIL remove() on a non-empty directory should fail promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    7 FAIL remove() on a directory recursively should delete all sub-items promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    8 FAIL remove() on a file should ignore the recursive option promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL remove() to remove a file promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL remove() on an already removed file should fail promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL remove() to remove an empty directory promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL remove() on an already removed directory should fail promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     6FAIL remove() on a non-empty directory should fail promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     7FAIL remove() on a directory recursively should delete all sub-items promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     8FAIL remove() on a file should ignore the recursive option promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    99
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any-expected.txt

    r281769 r282130  
    11
    2 FAIL getDirectoryHandle(create=false) rejects for non-existing directories promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL getDirectoryHandle(create=true) creates an empty directory promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL getDirectoryHandle(create=false) returns existing directories promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL getDirectoryHandle(create=true) returns existing directories without erasing promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    6 FAIL getDirectoryHandle() when a file already exists with the same name promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    7 FAIL getDirectoryHandle() with empty name promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    8 FAIL getDirectoryHandle() with "." name promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    9 FAIL getDirectoryHandle() with ".." name promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    10 FAIL getDirectoryHandle(create=false) with a path separator when the directory exists promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    11 FAIL getDirectoryHandle(create=true) with a path separator promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL getDirectoryHandle(create=false) rejects for non-existing directories promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL getDirectoryHandle(create=true) creates an empty directory promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL getDirectoryHandle(create=false) returns existing directories promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL getDirectoryHandle(create=true) returns existing directories without erasing promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     6FAIL getDirectoryHandle() when a file already exists with the same name promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     7FAIL getDirectoryHandle() with empty name promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     8FAIL getDirectoryHandle() with "." name promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     9FAIL getDirectoryHandle() with ".." name promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     10FAIL getDirectoryHandle(create=false) with a path separator when the directory exists promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     11FAIL getDirectoryHandle(create=true) with a path separator promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    1212
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any-expected.txt

    r281769 r282130  
    11
    2 FAIL getFileHandle(create=false) rejects for non-existing files promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL getFileHandle(create=true) creates an empty file for non-existing files promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL getFileHandle(create=false) returns existing files promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL getFileHandle(create=true) returns existing files without erasing promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    6 FAIL getFileHandle(create=false) when a directory already exists with the same name promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    7 FAIL getFileHandle(create=true) when a directory already exists with the same name promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    8 FAIL getFileHandle() with empty name promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    9 FAIL getFileHandle() with "." name promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    10 FAIL getFileHandle() with ".." name promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    11 FAIL getFileHandle(create=false) with a path separator when the file exists. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    12 FAIL getFileHandle(create=true) with a path separator promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL getFileHandle(create=false) rejects for non-existing files promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL getFileHandle(create=true) creates an empty file for non-existing files promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL getFileHandle(create=false) returns existing files promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL getFileHandle(create=true) returns existing files without erasing promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     6FAIL getFileHandle(create=false) when a directory already exists with the same name promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     7FAIL getFileHandle(create=true) when a directory already exists with the same name promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     8FAIL getFileHandle() with empty name promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     9FAIL getFileHandle() with "." name promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     10FAIL getFileHandle() with ".." name promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     11FAIL getFileHandle(create=false) with a path separator when the file exists. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     12FAIL getFileHandle(create=true) with a path separator promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    1313
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any-expected.txt

    r281769 r282130  
    11
    2 FAIL returning early from an iteration doesn't crash promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL @@asyncIterator: full iteration works promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL entries: full iteration works promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL values: full iteration works promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    6 FAIL keys: full iteration works promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    7 FAIL iteration while iterator gets garbage collected promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL returning early from an iteration doesn't crash promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL @@asyncIterator: full iteration works promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL entries: full iteration works promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL values: full iteration works promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     6FAIL keys: full iteration works promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     7FAIL iteration while iterator gets garbage collected promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    88
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any-expected.txt

    r281769 r282130  
    11
    2 FAIL removeEntry() to remove a file promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL removeEntry() on an already removed file should fail promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL removeEntry() to remove an empty directory promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL removeEntry() on a non-empty directory should fail promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    6 FAIL removeEntry() on a directory recursively should delete all sub-items promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    7 FAIL removeEntry() with empty name should fail promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    8 FAIL removeEntry() with "." name should fail promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    9 FAIL removeEntry() with ".." name should fail promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    10 FAIL removeEntry() with a path separator should fail. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL removeEntry() to remove a file promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL removeEntry() on an already removed file should fail promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL removeEntry() to remove an empty directory promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL removeEntry() on a non-empty directory should fail promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     6FAIL removeEntry() on a directory recursively should delete all sub-items promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     7FAIL removeEntry() with empty name should fail promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     8FAIL removeEntry() with "." name should fail promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     9FAIL removeEntry() with ".." name should fail promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     10FAIL removeEntry() with a path separator should fail. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    1111
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any-expected.txt

    r281769 r282130  
    11
    2 FAIL Resolve returns empty array for same directory promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL Resolve returns correct path promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL Resolve returns correct path with non-ascii characters promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL Resolve returns null when entry is not a child promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL Resolve returns empty array for same directory promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL Resolve returns correct path promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL Resolve returns correct path with non-ascii characters promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL Resolve returns null when entry is not a child promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    66
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemFileHandle-create-sync-access-handle-dedicated-worker.https.tentative.window-expected.txt

    r281769 r282130  
    11
    2 FAIL Attempt to create a sync access handle. promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL Attempt to create a sync access handle. promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    33
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any-expected.txt

    r281769 r282130  
    11
    2 FAIL getFile() provides a file that can be sliced promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL getFile() returns last modified time promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL getFile() provides a file that can be sliced promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL getFile() returns last modified time promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    44
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any-expected.txt

    r281769 r282130  
    11
    2 FAIL can be piped to with a string promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL can be piped to with an ArrayBuffer promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL can be piped to with a Blob promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL can be piped to with a param object with write command promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    6 FAIL can be piped to with a param object with multiple commands promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    7 FAIL multiple operations can be queued promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    8 FAIL plays well with fetch promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    9 FAIL abort() aborts write promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL can be piped to with a string promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL can be piped to with an ArrayBuffer promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL can be piped to with a Blob promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL can be piped to with a param object with write command promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     6FAIL can be piped to with a param object with multiple commands promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     7FAIL multiple operations can be queued promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     8FAIL plays well with fetch promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     9FAIL abort() aborts write promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    1010
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any-expected.txt

    r281769 r282130  
    11
    2 FAIL write() with an empty blob to an empty file promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL write() a blob to an empty file promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL write() with WriteParams without position to an empty file promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL write() a string to an empty file with zero offset promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    6 FAIL write() a blob to an empty file with zero offset promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    7 FAIL write() called consecutively appends promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    8 FAIL write() WriteParams without position and string appends promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    9 FAIL write() WriteParams without position and blob appends promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    10 FAIL write() called with a string and a valid offset promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    11 FAIL write() called with a blob and a valid offset promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    12 FAIL write() called with an offset beyond the end of the file promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    13 FAIL write() with an empty string to an empty file promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    14 FAIL write() with a valid utf-8 string promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    15 FAIL write() with a string with unix line ending preserved promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    16 FAIL write() with a string with windows line ending preserved promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    17 FAIL write() with an empty array buffer to an empty file promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    18 FAIL write() with a valid typed array buffer promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    19 FAIL atomic writes: close() fails when parent directory is removed promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    20 FAIL atomic writes: writable file streams make atomic changes on close promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    21 FAIL atomic writes: write() after close() fails promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    22 FAIL atomic writes: truncate() after close() fails promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    23 FAIL atomic writes: close() after close() fails promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    24 FAIL atomic writes: only one close() operation may succeed promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    25 FAIL atomic writes: writable file stream persists file on close, even if file is removed promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    26 FAIL getWriter() can be used promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    27 FAIL WriteParams: truncate missing size param promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    28 FAIL WriteParams: write missing data param promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    29 FAIL WriteParams: seek missing position param promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    30 FAIL write() with an invalid blob to an empty file should reject promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL write() with an empty blob to an empty file promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL write() a blob to an empty file promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL write() with WriteParams without position to an empty file promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL write() a string to an empty file with zero offset promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     6FAIL write() a blob to an empty file with zero offset promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     7FAIL write() called consecutively appends promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     8FAIL write() WriteParams without position and string appends promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     9FAIL write() WriteParams without position and blob appends promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     10FAIL write() called with a string and a valid offset promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     11FAIL write() called with a blob and a valid offset promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     12FAIL write() called with an offset beyond the end of the file promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     13FAIL write() with an empty string to an empty file promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     14FAIL write() with a valid utf-8 string promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     15FAIL write() with a string with unix line ending preserved promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     16FAIL write() with a string with windows line ending preserved promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     17FAIL write() with an empty array buffer to an empty file promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     18FAIL write() with a valid typed array buffer promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     19FAIL atomic writes: close() fails when parent directory is removed promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     20FAIL atomic writes: writable file streams make atomic changes on close promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     21FAIL atomic writes: write() after close() fails promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     22FAIL atomic writes: truncate() after close() fails promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     23FAIL atomic writes: close() after close() fails promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     24FAIL atomic writes: only one close() operation may succeed promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     25FAIL atomic writes: writable file stream persists file on close, even if file is removed promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     26FAIL getWriter() can be used promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     27FAIL WriteParams: truncate missing size param promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     28FAIL WriteParams: write missing data param promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     29FAIL WriteParams: seek missing position param promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     30FAIL write() with an invalid blob to an empty file should reject promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    3131
  • trunk/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream.https.any-expected.txt

    r281769 r282130  
    11
    2 FAIL truncate() to shrink a file promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    3 FAIL truncate() to grow a file promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    4 FAIL createWritable() fails when parent directory is removed promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    5 FAIL write() fails when parent directory is removed promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    6 FAIL truncate() fails when parent directory is removed promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    7 FAIL createWritable({keepExistingData: true}): atomic writable file stream initialized with source contents promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    8 FAIL createWritable({keepExistingData: false}): atomic writable file stream initialized with empty file promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    9 FAIL cursor position: truncate size > offset promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    10 FAIL cursor position: truncate size < offset promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
    11 FAIL commands are queued, stream is unlocked after each operation promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.getDirectory')"
     2FAIL truncate() to shrink a file promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     3FAIL truncate() to grow a file promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     4FAIL createWritable() fails when parent directory is removed promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     5FAIL write() fails when parent directory is removed promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     6FAIL truncate() fails when parent directory is removed promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     7FAIL createWritable({keepExistingData: true}): atomic writable file stream initialized with source contents promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     8FAIL createWritable({keepExistingData: false}): atomic writable file stream initialized with empty file promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     9FAIL cursor position: truncate size > offset promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     10FAIL cursor position: truncate size < offset promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
     11FAIL commands are queued, stream is unlocked after each operation promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.getDirectory is not a function. (In 'navigator.storage.getDirectory()', 'navigator.storage.getDirectory' is undefined)"
    1212
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/estimate-indexeddb.https.any-expected.txt

    r282088 r282130  
    11
    2 FAIL estimate() method exists and returns a Promise navigator.storage is not an Object. (evaluating ''estimate' in navigator.storage')
    3 FAIL estimate() resolves to dictionary with members promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.estimate')"
    4 FAIL estimate() shows usage increase after large value is stored promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.estimate')"
     2FAIL estimate() method exists and returns a Promise assert_true: expected true got false
     3FAIL estimate() resolves to dictionary with members promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.estimate is not a function. (In 'navigator.storage.estimate()', 'navigator.storage.estimate' is undefined)"
     4FAIL estimate() shows usage increase after large value is stored promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.estimate is not a function. (In 'navigator.storage.estimate()', 'navigator.storage.estimate' is undefined)"
    55
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/estimate-parallel.https.any-expected.txt

    r282088 r282130  
    11
    2 FAIL Multiple estimate() calls in parallel should complete promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.estimate')"
     2FAIL Multiple estimate() calls in parallel should complete promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.estimate is not a function. (In 'navigator.storage.estimate()', 'navigator.storage.estimate' is undefined)"
    33
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/estimate-usage-details-application-cache.https.tentative-expected.txt

    r282088 r282130  
    11
    2 FAIL estimate() shows usage increase after app is cached promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.estimate')"
     2FAIL estimate() shows usage increase after app is cached promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.estimate is not a function. (In 'navigator.storage.estimate()', 'navigator.storage.estimate' is undefined)"
    33
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/estimate-usage-details-caches.https.tentative.any-expected.txt

    r282088 r282130  
    11
    2 FAIL estimate() shows usage increase after large value is stored promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.estimate')"
     2FAIL estimate() shows usage increase after large value is stored promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.estimate is not a function. (In 'navigator.storage.estimate()', 'navigator.storage.estimate' is undefined)"
    33
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/estimate-usage-details-indexeddb.https.tentative.any-expected.txt

    r282088 r282130  
    11
    2 FAIL estimate() resolves to dictionary with usageDetails member promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.estimate')"
    3 FAIL estimate() usage details reflects increase in indexedDB after large value is stored promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.estimate')"
     2FAIL estimate() resolves to dictionary with usageDetails member promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.estimate is not a function. (In 'navigator.storage.estimate()', 'navigator.storage.estimate' is undefined)"
     3FAIL estimate() usage details reflects increase in indexedDB after large value is stored promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.estimate is not a function. (In 'navigator.storage.estimate()', 'navigator.storage.estimate' is undefined)"
    44
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/estimate-usage-details-service-workers.https.tentative.window-expected.txt

    r282088 r282130  
    11
    2 FAIL estimate() shows usage increase after large value is stored promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.estimate')"
     2FAIL estimate() shows usage increase after large value is stored promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.estimate is not a function. (In 'navigator.storage.estimate()', 'navigator.storage.estimate' is undefined)"
    33
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/estimate-usage-details.https.tentative.any-expected.txt

    r282088 r282130  
    11
    2 FAIL estimate() resolves to dictionary with members, including usageDetails promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.estimate')"
     2FAIL estimate() resolves to dictionary with members, including usageDetails promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.estimate is not a function. (In 'navigator.storage.estimate()', 'navigator.storage.estimate' is undefined)"
    33
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/idlharness.https.any-expected.txt

    r282088 r282130  
    1616PASS WorkerNavigator includes NavigatorOnLine: member names are unique
    1717PASS WorkerNavigator includes NavigatorConcurrentHardware: member names are unique
    18 FAIL StorageManager interface: existence and properties of interface object assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    19 FAIL StorageManager interface object length assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    20 FAIL StorageManager interface object name assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    21 FAIL StorageManager interface: existence and properties of interface prototype object assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    22 FAIL StorageManager interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    23 FAIL StorageManager interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    24 FAIL StorageManager interface: operation persisted() assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    25 FAIL StorageManager interface: operation persist() assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    26 FAIL StorageManager interface: operation estimate() assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    27 FAIL StorageManager must be primary interface of navigator.storage assert_equals: wrong typeof object expected "object" but got "undefined"
    28 FAIL Stringification of navigator.storage assert_equals: wrong typeof object expected "object" but got "undefined"
    29 FAIL StorageManager interface: navigator.storage must inherit property "persisted()" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
    30 FAIL StorageManager interface: navigator.storage must inherit property "persist()" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
    31 FAIL StorageManager interface: navigator.storage must inherit property "estimate()" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
    32 FAIL Navigator interface: attribute storage assert_true: The prototype object must have a property "storage" expected true got false
    33 FAIL Navigator interface: navigator must inherit property "storage" with the proper type assert_inherits: property "storage" not found in prototype chain
     18PASS StorageManager interface: existence and properties of interface object
     19PASS StorageManager interface object length
     20PASS StorageManager interface object name
     21PASS StorageManager interface: existence and properties of interface prototype object
     22PASS StorageManager interface: existence and properties of interface prototype object's "constructor" property
     23PASS StorageManager interface: existence and properties of interface prototype object's @@unscopables property
     24PASS StorageManager interface: operation persisted()
     25PASS StorageManager interface: operation persist()
     26FAIL StorageManager interface: operation estimate() assert_own_property: interface prototype object missing non-static operation expected property "estimate" missing
     27PASS StorageManager must be primary interface of navigator.storage
     28PASS Stringification of navigator.storage
     29PASS StorageManager interface: navigator.storage must inherit property "persisted()" with the proper type
     30PASS StorageManager interface: navigator.storage must inherit property "persist()" with the proper type
     31FAIL StorageManager interface: navigator.storage must inherit property "estimate()" with the proper type assert_inherits: property "estimate" not found in prototype chain
     32PASS Navigator interface: attribute storage
     33PASS Navigator interface: navigator must inherit property "storage" with the proper type
    3434
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/idlharness.https.any.worker-expected.txt

    r282088 r282130  
    1616PASS WorkerNavigator includes NavigatorOnLine: member names are unique
    1717PASS WorkerNavigator includes NavigatorConcurrentHardware: member names are unique
    18 FAIL StorageManager interface: existence and properties of interface object assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    19 FAIL StorageManager interface object length assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    20 FAIL StorageManager interface object name assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    21 FAIL StorageManager interface: existence and properties of interface prototype object assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    22 FAIL StorageManager interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    23 FAIL StorageManager interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    24 FAIL StorageManager interface: operation persisted() assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
    25 FAIL StorageManager interface: member persist undefined is not an Object. (evaluating 'member.name in this.get_interface_object()')
    26 FAIL StorageManager interface: operation estimate() assert_own_property: self does not have own property "StorageManager" expected property "StorageManager" missing
     18PASS StorageManager interface: existence and properties of interface object
     19PASS StorageManager interface object length
     20PASS StorageManager interface object name
     21PASS StorageManager interface: existence and properties of interface prototype object
     22PASS StorageManager interface: existence and properties of interface prototype object's "constructor" property
     23PASS StorageManager interface: existence and properties of interface prototype object's @@unscopables property
     24PASS StorageManager interface: operation persisted()
     25PASS StorageManager interface: member persist
     26FAIL StorageManager interface: operation estimate() assert_own_property: interface prototype object missing non-static operation expected property "estimate" missing
    2727FAIL StorageManager must be primary interface of navigator.storage assert_equals: wrong typeof object expected "object" but got "undefined"
    2828FAIL Stringification of navigator.storage assert_equals: wrong typeof object expected "object" but got "undefined"
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/opaque-origin.https.window-expected.txt

    r282088 r282130  
    11
    2 FAIL navigator.storage.persisted() in non-sandboxed iframe should not reject assert_equals: navigator.storage.persisted() should not reject expected "no rejection" but got "API access threw"
    3 FAIL navigator.storage.persisted() in sandboxed iframe should reject with TypeError assert_equals: navigator.storage.persisted() should reject with TypeError expected "correct rejection" but got "API access threw"
     2PASS navigator.storage.persisted() in non-sandboxed iframe should not reject
     3FAIL navigator.storage.persisted() in sandboxed iframe should reject with TypeError assert_equals: navigator.storage.persisted() should reject with TypeError expected "correct rejection" but got "no rejection"
    44FAIL navigator.storage.estimate() in non-sandboxed iframe should not reject assert_equals: navigator.storage.estimate() should not reject expected "no rejection" but got "API access threw"
    55FAIL navigator.storage.estimate() in sandboxed iframe should reject with TypeError assert_equals: navigator.storage.estimate() should reject with TypeError expected "correct rejection" but got "API access threw"
    6 FAIL navigator.storage.persist() in non-sandboxed iframe should not reject assert_equals: navigator.storage.persist() should not reject expected "no rejection" but got "API access threw"
    7 FAIL navigator.storage.persist() in sandboxed iframe should reject with TypeError assert_equals: navigator.storage.persist() should reject with TypeError expected "correct rejection" but got "API access threw"
     6PASS navigator.storage.persist() in non-sandboxed iframe should not reject
     7FAIL navigator.storage.persist() in sandboxed iframe should reject with TypeError assert_equals: navigator.storage.persist() should reject with TypeError expected "correct rejection" but got "no rejection"
    88
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/persisted.https.any-expected.txt

    r282088 r282130  
    11
    2 FAIL persisted() method exists and returns a Promise navigator.storage is not an Object. (evaluating ''persisted' in navigator.storage')
    3 FAIL persisted() returns a promise and resolves as boolean with false undefined is not an object (evaluating 'navigator.storage.persisted')
     2PASS persisted() method exists and returns a Promise
     3PASS persisted() returns a promise and resolves as boolean with false
    44
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/quotachange-in-detached-iframe.tentative.https-expected.txt

    r282088 r282130  
    11
    2 FAIL Add quotachange listener on detached iframe. undefined is not an object (evaluating 'storageManager.addEventListener')
     2FAIL Add quotachange listener on detached iframe. storageManager.addEventListener is not a function. (In 'storageManager.addEventListener('quotachange', emptyListener)', 'storageManager.addEventListener' is undefined)
    33
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/storagemanager-estimate.https.any-expected.txt

    r282088 r282130  
    11
    2 FAIL estimate() method returns a Promise undefined is not an object (evaluating 'navigator.storage.estimate')
    3 FAIL estimate() resolves to dictionary with members undefined is not an object (evaluating 'navigator.storage.estimate')
    4 FAIL estimate() shows usage increase after 1MB IndexedDB record is stored promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'navigator.storage.estimate')"
     2FAIL estimate() method returns a Promise navigator.storage.estimate is not a function. (In 'navigator.storage.estimate()', 'navigator.storage.estimate' is undefined)
     3FAIL estimate() resolves to dictionary with members navigator.storage.estimate is not a function. (In 'navigator.storage.estimate()', 'navigator.storage.estimate' is undefined)
     4FAIL estimate() shows usage increase after 1MB IndexedDB record is stored promise_test: Unhandled rejection with value: object "TypeError: navigator.storage.estimate is not a function. (In 'navigator.storage.estimate()', 'navigator.storage.estimate' is undefined)"
    55
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/storagemanager-persist.https.window-expected.txt

    r282088 r282130  
    11
    2 FAIL navigator.storage.persist() returns a promise that resolves. undefined is not an object (evaluating 'navigator.storage.persist')
     2PASS navigator.storage.persist() returns a promise that resolves.
    33
  • trunk/LayoutTests/imported/w3c/web-platform-tests/storage/storagemanager-persisted.https.any-expected.txt

    r282088 r282130  
    11
    2 FAIL navigator.storage.persisted() returns a promise that resolves. undefined is not an object (evaluating 'navigator.storage.persisted')
     2PASS navigator.storage.persisted() returns a promise that resolves.
    33
  • trunk/LayoutTests/platform/mac-wk1/fast/dom/navigator-detached-no-crash-expected.txt

    r281771 r282130  
    2020navigator.productSub is OK
    2121navigator.requestMediaKeySystemAccess() is OK
     22navigator.storage is OK
    2223navigator.userAgent is OK
    2324navigator.vendor is OK
     
    4445navigator.productSub is OK
    4546navigator.requestMediaKeySystemAccess() is OK
     47navigator.storage is OK
    4648navigator.userAgent is OK
    4749navigator.vendor is OK
  • trunk/LayoutTests/platform/mac-wk2/fast/dom/navigator-detached-no-crash-expected.txt

    r281771 r282130  
    3030navigator.setLoggedOut() is OK
    3131navigator.share() is OK
     32navigator.storage is OK
    3233navigator.userAgent is OK
    3334navigator.vendor is OK
     
    6465navigator.setLoggedOut() is OK
    6566navigator.share() is OK
     67navigator.storage is OK
    6668navigator.userAgent is OK
    6769navigator.vendor is OK
  • trunk/Source/WTF/ChangeLog

    r282125 r282130  
     12021-09-07  Sihui Liu  <sihui_liu@apple.com>
     2
     3        Add basic support for Storage API
     4        https://bugs.webkit.org/show_bug.cgi?id=229925
     5
     6        Reviewed by Darin Adler.
     7
     8        * Scripts/Preferences/WebPreferencesExperimental.yaml:
     9
    1102021-09-07  Yusuke Suzuki  <ysuzuki@apple.com>
    211
  • trunk/Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml

    r282105 r282130  
    11031103      default: false
    11041104
     1105StorageAPIEnabled:
     1106  type: bool
     1107  humanReadableName: "Storage API"
     1108  humanReadableDescription: "Enable Storage API"
     1109  defaultValue:
     1110    WebKitLegacy:
     1111      default: false
     1112    WebKit:
     1113      default: false
     1114    WebCore:
     1115      default: false
     1116
    11051117SyntheticEditingCommandsEnabled:
    11061118  type: bool
  • trunk/Source/WebCore/CMakeLists.txt

    r282067 r282130  
    5454    "${WEBCORE_DIR}/Modules/remoteplayback"
    5555    "${WEBCORE_DIR}/Modules/speech"
     56    "${WEBCORE_DIR}/Modules/storage"
    5657    "${WEBCORE_DIR}/Modules/streams"
    5758    "${WEBCORE_DIR}/Modules/webaudio"
     
    205206    Modules/permissions
    206207    Modules/speech
     208    Modules/storage
    207209    Modules/streams
    208210    Modules/webaudio
     
    492494    Modules/speech/SpeechSynthesisUtterance.idl
    493495    Modules/speech/SpeechSynthesisVoice.idl
     496
     497    Modules/storage/StorageManager.idl
    494498
    495499    Modules/streams/ByteLengthQueuingStrategy.idl
     
    10731077    page/NavigatorServiceWorker.idl
    10741078    page/NavigatorShare.idl
     1079    page/NavigatorStorage.idl
    10751080    page/Performance+NavigationTiming.idl
    10761081    page/Performance+PerformanceTimeline.idl
  • trunk/Source/WebCore/ChangeLog

    r282129 r282130  
     12021-09-07  Sihui Liu  <sihui_liu@apple.com>
     2
     3        Add basic support for Storage API
     4        https://bugs.webkit.org/show_bug.cgi?id=229925
     5
     6        Reviewed by Darin Adler.
     7
     8        Add bindings code and a feature flag for Storage API.
     9        Spec: https://storage.spec.whatwg.org
     10
     11        Rebaselined existing tests.
     12
     13        * CMakeLists.txt:
     14        * DerivedSources-input.xcfilelist:
     15        * DerivedSources-output.xcfilelist:
     16        * DerivedSources.make:
     17        * Headers.cmake:
     18        * Modules/storage/DummyStorageProvider.h: Added.
     19        * Modules/storage/StorageConnection.h: Added.
     20        * Modules/storage/StorageManager.cpp: Added.
     21        (WebCore::StorageManager::create):
     22        (WebCore::StorageManager::StorageManager):
     23        (WebCore::clientOrigin):
     24        (WebCore::StorageManager::persisted):
     25        (WebCore::StorageManager::persist):
     26        * Modules/storage/StorageManager.h: Added.
     27        * Modules/storage/StorageManager.idl: Added.
     28        * Modules/storage/StorageProvider.h: Added.
     29        * Sources.txt:
     30        * WebCore.xcodeproj/project.pbxproj:
     31        * bindings/js/WebCoreBuiltinNames.h:
     32        * dom/Document.cpp:
     33        (WebCore::Document::storageConnection):
     34        * dom/Document.h:
     35        * dom/ScriptExecutionContext.h:
     36        (WebCore::ScriptExecutionContext::storageConnection):
     37        * loader/EmptyClients.cpp:
     38        (WebCore::pageConfigurationWithEmptyClients):
     39        * page/Navigator.idl:
     40        * page/NavigatorBase.cpp:
     41        * page/NavigatorBase.h:
     42        * page/NavigatorStorage.idl: Added.
     43        * page/Page.cpp:
     44        (WebCore::m_storageProvider):
     45        (WebCore::Page::storageConnection):
     46        (WebCore::m_permissionController): Deleted.
     47        * page/Page.h:
     48        * page/PageConfiguration.cpp:
     49        (WebCore::PageConfiguration::PageConfiguration):
     50        * page/PageConfiguration.h:
     51
    1522021-09-07  Antti Koivisto  <antti@apple.com>
    253
  • trunk/Source/WebCore/DerivedSources-input.xcfilelist

    r282067 r282130  
    418418$(PROJECT_DIR)/Modules/speech/SpeechSynthesisUtterance.idl
    419419$(PROJECT_DIR)/Modules/speech/SpeechSynthesisVoice.idl
     420$(PROJECT_DIR)/Modules/storage/StorageManager.idl
    420421$(PROJECT_DIR)/Modules/streams/ByteLengthQueuingStrategy.idl
    421422$(PROJECT_DIR)/Modules/streams/ByteLengthQueuingStrategy.js
     
    11481149$(PROJECT_DIR)/page/NavigatorServiceWorker.idl
    11491150$(PROJECT_DIR)/page/NavigatorShare.idl
     1151$(PROJECT_DIR)/page/NavigatorStorage.idl
     1152$(PROJECT_DIR)/page/NavigatorStorageManager.idl
    11501153$(PROJECT_DIR)/page/Performance+NavigationTiming.idl
    11511154$(PROJECT_DIR)/page/Performance+PerformanceTimeline.idl
  • trunk/Source/WebCore/DerivedSources-output.xcfilelist

    r282067 r282130  
    14281428$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSNavigatorShare.cpp
    14291429$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSNavigatorShare.h
     1430$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSNavigatorStorage.cpp
     1431$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSNavigatorStorage.h
    14301432$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSNavigatorWebDriver.cpp
    14311433$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSNavigatorWebDriver.h
     
    22062208$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSStorageEvent.cpp
    22072209$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSStorageEvent.h
     2210$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSStorageManager.cpp
     2211$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSStorageManager.h
    22082212$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSStringCallback.cpp
    22092213$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSStringCallback.h
  • trunk/Source/WebCore/DerivedSources.make

    r282067 r282130  
    368368    $(WebCore)/Modules/streams/WritableStreamDefaultWriter.idl \
    369369    $(WebCore)/Modules/streams/WritableStreamSink.idl \
     370    $(WebCore)/Modules/storage/StorageManager.idl \
    370371    $(WebCore)/Modules/webaudio/AnalyserNode.idl \
    371372    $(WebCore)/Modules/webaudio/AnalyserOptions.idl \
     
    996997    $(WebCore)/page/NavigatorServiceWorker.idl \
    997998    $(WebCore)/page/NavigatorShare.idl \
     999    $(WebCore)/page/NavigatorStorage.idl \
    9981000    $(WebCore)/page/Performance+NavigationTiming.idl \
    9991001    $(WebCore)/page/Performance+PerformanceTimeline.idl \
  • trunk/Source/WebCore/Headers.cmake

    r282054 r282130  
    153153    Modules/speech/SpeechRecognitionUpdate.h
    154154    Modules/speech/SpeechRecognizer.h
     155
     156    Modules/storage/DummyStorageProvider.h
     157    Modules/storage/StorageConnection.h
     158    Modules/storage/StorageManager.h
     159    Modules/storage/StorageProvider.h
    155160
    156161    Modules/streams/ReadableStreamSink.h
  • trunk/Source/WebCore/Sources.txt

    r282067 r282130  
    229229Modules/speech/SpeechSynthesisUtterance.cpp
    230230Modules/speech/SpeechSynthesisVoice.cpp
     231Modules/storage/StorageManager.cpp
    231232Modules/streams/ReadableStreamSink.cpp
    232233Modules/streams/ReadableStreamSource.cpp
     
    35753576JSStaticRange.cpp
    35763577JSStorage.cpp
     3578JSStorageManager.cpp
    35773579JSStorageEvent.cpp
    35783580JSStringCallback.cpp
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r282067 r282130  
    27762776                9307F1D80AF2D59000DBA31A /* HitTestResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 9307F1D60AF2D59000DBA31A /* HitTestResult.h */; settings = {ATTRIBUTES = (Private, ); }; };
    27772777                930841341CDDB15500B0958C /* JSDOMConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = 930841331CDDB15500B0958C /* JSDOMConvert.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2778                93085DB726E02AFE000EC6A7 /* StorageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 93085DB526E006D0000EC6A7 /* StorageManager.h */; };
     2779                93085DBD26E18ED9000EC6A7 /* StorageConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 93085DB926E14FBA000EC6A7 /* StorageConnection.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2780                93085DBE26E18EE4000EC6A7 /* StorageProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 93085DB826E14FBA000EC6A7 /* StorageProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2781                93085DF826E822C7000EC6A7 /* DummyStorageProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 93085DF626E822C6000EC6A7 /* DummyStorageProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
    27782782                930908910AF7EDE40081DF01 /* HitTestRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 930908900AF7EDE40081DF01 /* HitTestRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
    27792783                930AAC9A250EB8490013DA9F /* CSSConditionRule.h in Headers */ = {isa = PBXBuildFile; fileRef = 930AAC98250EB8170013DA9F /* CSSConditionRule.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    1151711521                9307F1D60AF2D59000DBA31A /* HitTestResult.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HitTestResult.h; sourceTree = "<group>"; };
    1151811522                930841331CDDB15500B0958C /* JSDOMConvert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDOMConvert.h; sourceTree = "<group>"; };
     11523                93085DB126E000BD000EC6A7 /* NavigatorStorage.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = NavigatorStorage.idl; sourceTree = "<group>"; };
     11524                93085DB426E006CF000EC6A7 /* StorageManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageManager.cpp; sourceTree = "<group>"; };
     11525                93085DB526E006D0000EC6A7 /* StorageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageManager.h; sourceTree = "<group>"; };
     11526                93085DB626E006D0000EC6A7 /* StorageManager.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = StorageManager.idl; sourceTree = "<group>"; };
     11527                93085DB826E14FBA000EC6A7 /* StorageProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageProvider.h; sourceTree = "<group>"; };
     11528                93085DB926E14FBA000EC6A7 /* StorageConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageConnection.h; sourceTree = "<group>"; };
     11529                93085DF626E822C6000EC6A7 /* DummyStorageProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DummyStorageProvider.h; sourceTree = "<group>"; };
    1151911530                930908900AF7EDE40081DF01 /* HitTestRequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HitTestRequest.h; sourceTree = "<group>"; };
    1152011531                930AAC96250EB8170013DA9F /* CSSConditionRule.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CSSConditionRule.cpp; sourceTree = "<group>"; };
     
    2209722108                                5182C24B1F313AE00059BA7C /* NavigatorServiceWorker.idl */,
    2209822109                                1DC553FD211BA12A004B780E /* NavigatorShare.idl */,
     22110                                93085DB126E000BD000EC6A7 /* NavigatorStorage.idl */,
    2209922111                                00146288103CD1DE000B20DB /* OriginAccessEntry.cpp */,
    2210022112                                00146289103CD1DE000B20DB /* OriginAccessEntry.h */,
     
    2305723069                        );
    2305823070                        path = mac;
     23071                        sourceTree = "<group>";
     23072                };
     23073                93085DB326E0068E000EC6A7 /* storage */ = {
     23074                        isa = PBXGroup;
     23075                        children = (
     23076                                93085DF626E822C6000EC6A7 /* DummyStorageProvider.h */,
     23077                                93085DB926E14FBA000EC6A7 /* StorageConnection.h */,
     23078                                93085DB426E006CF000EC6A7 /* StorageManager.cpp */,
     23079                                93085DB526E006D0000EC6A7 /* StorageManager.h */,
     23080                                93085DB626E006D0000EC6A7 /* StorageManager.idl */,
     23081                                93085DB826E14FBA000EC6A7 /* StorageProvider.h */,
     23082                        );
     23083                        path = storage;
    2305923084                        sourceTree = "<group>";
    2306023085                };
     
    2389623921                                CDC312E022FCD0B0001204EC /* remoteplayback */,
    2389723922                                AA2A5AB716A485A400975A25 /* speech */,
     23923                                93085DB326E0068E000EC6A7 /* storage */,
    2389823924                                41A023EA1A39DB7900F722CF /* streams */,
    2389923925                                FD315FA212B025B100C1A359 /* webaudio */,
     
    3194631972                                510A91F624D32DDC00BFD89C /* Dualshock3HIDGamepad.h in Headers */,
    3194731973                                93D6B7A82551D41F0058DD3A /* DummySpeechRecognitionProvider.h in Headers */,
     31974                                93085DF826E822C7000EC6A7 /* DummyStorageProvider.h in Headers */,
    3194831975                                E1BA66F11742BD8600C20251 /* DynamicLinkerInterposing.h in Headers */,
    3194931976                                FD6ED2C8136B8E66003CF072 /* DynamicsCompressor.h in Headers */,
     
    3479034817                                51BE37E00DAEE00E001085FC /* StorageArea.h in Headers */,
    3479134818                                BC4A533725605AE10028C592 /* StorageBlockingPolicy.h in Headers */,
     34819                                93085DBD26E18ED9000EC6A7 /* StorageConnection.h in Headers */,
    3479234820                                51E0BABB0DA5547100A9E417 /* StorageEvent.h in Headers */,
    3479334821                                C5EBDD84105EDDEC0056816F /* StorageEventDispatcher.h in Headers */,
     34822                                93085DB726E02AFE000EC6A7 /* StorageManager.h in Headers */,
    3479434823                                51E0BB380DA5ACB600A9E417 /* StorageMap.h in Headers */,
    3479534824                                C50D0E830FF4272900AC2644 /* StorageNamespace.h in Headers */,
    3479634825                                1A37636C1A2E68BB009A7EE2 /* StorageNamespaceProvider.h in Headers */,
     34826                                93085DBE26E18EE4000EC6A7 /* StorageProvider.h in Headers */,
    3479734827                                41DE7C7C222DA14300532B65 /* StorageQuotaManager.h in Headers */,
    3479834828                                5C9EF2F321F06190003BDC56 /* StorageSessionProvider.h in Headers */,
  • trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h

    r282067 r282130  
    246246    macro(StylePropertyMapReadOnly) \
    247247    macro(StylePropertyMap) \
     248    macro(StorageManager) \
    248249    macro(SubtleCrypto) \
    249250    macro(TextDecoderStream) \
  • trunk/Source/WebCore/dom/Document.cpp

    r282054 r282130  
    35603560}
    35613561
     3562RefPtr<StorageConnection> Document::storageConnection()
     3563{
     3564    return page() ? &page()->storageConnection() : nullptr;
     3565}
     3566
    35623567SocketProvider* Document::socketProvider()
    35633568{
  • trunk/Source/WebCore/dom/Document.h

    r282054 r282130  
    707707    IDBClient::IDBConnectionProxy* idbConnectionProxy() final;
    708708    RefPtr<PermissionController> permissionController() final;
     709    RefPtr<StorageConnection> storageConnection() final;
    709710    SocketProvider* socketProvider() final;
    710711    RefPtr<RTCDataChannelRemoteHandlerConnection> createRTCDataChannelRemoteHandlerConnection() final;
  • trunk/Source/WebCore/dom/ScriptExecutionContext.h

    r281832 r282130  
    3838#include "ServiceWorkerTypes.h"
    3939#include "Settings.h"
     40#include "StorageConnection.h"
    4041#include <JavaScriptCore/ConsoleTypes.h>
    4142#include <JavaScriptCore/HandleTypes.h>
     
    7677class RejectedPromiseTracker;
    7778class ResourceRequest;
    78 class SecurityOrigin;
    7979class SocketProvider;
    8080enum class ReferrerPolicy : uint8_t;
     
    119119    virtual IDBClient::IDBConnectionProxy* idbConnectionProxy() = 0;
    120120    virtual RefPtr<PermissionController> permissionController() { return nullptr; }
     121    virtual RefPtr<StorageConnection> storageConnection() { return nullptr; }
    121122
    122123    virtual SocketProvider* socketProvider() = 0;
  • trunk/Source/WebCore/loader/EmptyClients.cpp

    r282105 r282130  
    4646#include "DragClient.h"
    4747#include "DummySpeechRecognitionProvider.h"
     48#include "DummyStorageProvider.h"
    4849#include "EditorClient.h"
    4950#include "EmptyFrameLoaderClient.h"
     
    11961197        makeUniqueRef<EmptyMediaRecorderProvider>(),
    11971198        EmptyBroadcastChannelRegistry::create(),
    1198         DummyPermissionController::create()
     1199        DummyPermissionController::create(),
     1200        makeUniqueRef<DummyStorageProvider>()
    11991201    };
    12001202
  • trunk/Source/WebCore/page/Navigator.idl

    r267813 r282130  
    3939Navigator includes NavigatorServiceWorker;
    4040Navigator includes NavigatorShare;
     41Navigator includes NavigatorStorage;
  • trunk/Source/WebCore/page/NavigatorBase.cpp

    r251477 r282130  
    3131#include "RuntimeEnabledFeatures.h"
    3232#include "ServiceWorkerContainer.h"
     33#include "StorageManager.h"
    3334#include <mutex>
    3435#include <wtf/Language.h>
     
    140141}
    141142
     143ExceptionOr<StorageManager&> NavigatorBase::storage()
     144{
     145    if (!m_storageManager)
     146        m_storageManager = StorageManager::create(*this);
     147
     148    return *m_storageManager;
     149}
     150
    142151#if ENABLE(SERVICE_WORKER)
    143152ServiceWorkerContainer& NavigatorBase::serviceWorker()
  • trunk/Source/WebCore/page/NavigatorBase.h

    r251477 r282130  
    3838class ScriptExecutionContext;
    3939class ServiceWorkerContainer;
     40class StorageManager;
    4041
    4142class NavigatorBase : public RefCounted<NavigatorBase>, public ContextDestructionObserver, public CanMakeWeakPtr<NavigatorBase> {
     
    5960    static Vector<String> languages();
    6061
     62    ExceptionOr<StorageManager&> storage();
     63
    6164protected:
    6265    explicit NavigatorBase(ScriptExecutionContext*);
     66
     67private:
     68    RefPtr<StorageManager> m_storageManager;
    6369
    6470#if ENABLE(SERVICE_WORKER)
  • trunk/Source/WebCore/page/Page.cpp

    r281777 r282130  
    136136#include "StorageNamespace.h"
    137137#include "StorageNamespaceProvider.h"
     138#include "StorageProvider.h"
    138139#include "StyleAdjuster.h"
    139140#include "StyleResolver.h"
     
    328329    , m_httpsUpgradeEnabled(pageConfiguration.httpsUpgradeEnabled)
    329330    , m_permissionController(WTFMove(pageConfiguration.permissionController))
     331    , m_storageProvider(WTFMove(pageConfiguration.storageProvider))
    330332{
    331333    updateTimerThrottlingState();
     
    37033705}
    37043706
     3707StorageConnection& Page::storageConnection()
     3708{
     3709    return m_storageProvider->storageConnection();
     3710}
     3711
    37053712} // namespace WebCore
  • trunk/Source/WebCore/page/Page.h

    r281818 r282130  
    147147class Settings;
    148148class SocketProvider;
     149class SpeechRecognitionProvider;
    149150class SpeechSynthesisClient;
    150151class StorageNamespace;
    151152class StorageNamespaceProvider;
    152 class SpeechRecognitionProvider;
     153class StorageProvider;
    153154class UserContentProvider;
    154155class UserContentURLPattern;
     
    875876
    876877    WEBCORE_EXPORT PermissionController& permissionController();
     878    WEBCORE_EXPORT StorageConnection& storageConnection();
    877879
    878880private:
     
    11991201
    12001202    Ref<PermissionController> m_permissionController;
     1203    UniqueRef<StorageProvider> m_storageProvider;
    12011204
    12021205#if ENABLE(IMAGE_ANALYSIS)
  • trunk/Source/WebCore/page/PageConfiguration.cpp

    r281837 r282130  
    4848#include "SpeechSynthesisClient.h"
    4949#include "StorageNamespaceProvider.h"
     50#include "StorageProvider.h"
    5051#include "UserContentController.h"
    5152#include "UserContentURLPattern.h"
     
    6162namespace WebCore {
    6263
    63 PageConfiguration::PageConfiguration(PAL::SessionID sessionID, UniqueRef<EditorClient>&& editorClient, Ref<SocketProvider>&& socketProvider, UniqueRef<LibWebRTCProvider>&& libWebRTCProvider, Ref<CacheStorageProvider>&& cacheStorageProvider, Ref<UserContentProvider>&& userContentProvider, Ref<BackForwardClient>&& backForwardClient, Ref<CookieJar>&& cookieJar, UniqueRef<ProgressTrackerClient>&& progressTrackerClient, UniqueRef<FrameLoaderClient>&& loaderClientForMainFrame, UniqueRef<SpeechRecognitionProvider>&& speechRecognitionProvider, UniqueRef<MediaRecorderProvider>&& mediaRecorderProvider, Ref<BroadcastChannelRegistry>&& broadcastChannelRegistry, Ref<PermissionController>&& permissionController)
     64PageConfiguration::PageConfiguration(PAL::SessionID sessionID, UniqueRef<EditorClient>&& editorClient, Ref<SocketProvider>&& socketProvider, UniqueRef<LibWebRTCProvider>&& libWebRTCProvider, Ref<CacheStorageProvider>&& cacheStorageProvider, Ref<UserContentProvider>&& userContentProvider, Ref<BackForwardClient>&& backForwardClient, Ref<CookieJar>&& cookieJar, UniqueRef<ProgressTrackerClient>&& progressTrackerClient, UniqueRef<FrameLoaderClient>&& loaderClientForMainFrame, UniqueRef<SpeechRecognitionProvider>&& speechRecognitionProvider, UniqueRef<MediaRecorderProvider>&& mediaRecorderProvider, Ref<BroadcastChannelRegistry>&& broadcastChannelRegistry, Ref<PermissionController>&& permissionController, UniqueRef<StorageProvider>&& storageProvider)
    6465    : sessionID(sessionID)
    6566    , editorClient(WTFMove(editorClient))
     
    7677    , mediaRecorderProvider(WTFMove(mediaRecorderProvider))
    7778    , permissionController(WTFMove(permissionController))
     79    , storageProvider(WTFMove(storageProvider))
    7880{
    7981}
  • trunk/Source/WebCore/page/PageConfiguration.h

    r281818 r282130  
    6666class SpeechRecognitionProvider;
    6767class StorageNamespaceProvider;
     68class StorageProvider;
    6869class UserContentProvider;
    6970class UserContentURLPattern;
     
    7677    WTF_MAKE_NONCOPYABLE(PageConfiguration); WTF_MAKE_FAST_ALLOCATED;
    7778public:
    78     WEBCORE_EXPORT PageConfiguration(PAL::SessionID, UniqueRef<EditorClient>&&, Ref<SocketProvider>&&, UniqueRef<LibWebRTCProvider>&&, Ref<CacheStorageProvider>&&, Ref<UserContentProvider>&&, Ref<BackForwardClient>&&, Ref<CookieJar>&&, UniqueRef<ProgressTrackerClient>&&, UniqueRef<FrameLoaderClient>&&, UniqueRef<SpeechRecognitionProvider>&&, UniqueRef<MediaRecorderProvider>&&, Ref<BroadcastChannelRegistry>&&, Ref<PermissionController>&&);
     79    WEBCORE_EXPORT PageConfiguration(PAL::SessionID, UniqueRef<EditorClient>&&, Ref<SocketProvider>&&, UniqueRef<LibWebRTCProvider>&&, Ref<CacheStorageProvider>&&, Ref<UserContentProvider>&&, Ref<BackForwardClient>&&, Ref<CookieJar>&&, UniqueRef<ProgressTrackerClient>&&, UniqueRef<FrameLoaderClient>&&, UniqueRef<SpeechRecognitionProvider>&&, UniqueRef<MediaRecorderProvider>&&, Ref<BroadcastChannelRegistry>&&, Ref<PermissionController>&&, UniqueRef<StorageProvider>&&);
    7980    WEBCORE_EXPORT ~PageConfiguration();
    8081    PageConfiguration(PageConfiguration&&);
     
    142143
    143144    Ref<PermissionController> permissionController;
     145    UniqueRef<StorageProvider> storageProvider;
    144146};
    145147
  • trunk/Source/WebKit/CMakeLists.txt

    r281721 r282130  
    2828    "${WEBKIT_DIR}/NetworkProcess/WebStorage"
    2929    "${WEBKIT_DIR}/NetworkProcess/cache"
     30    "${WEBKIT_DIR}/NetworkProcess/storage"
    3031    "${WEBKIT_DIR}/NetworkProcess/watchos"
    3132    "${WEBKIT_DIR}/NetworkProcess/webrtc"
     
    174175    NetworkProcess/cache/CacheStorageEngineConnection
    175176
     177    NetworkProcess/storage/NetworkStorageManager
     178
    176179    NetworkProcess/webrtc/NetworkMDNSRegister
    177180    NetworkProcess/webrtc/NetworkRTCMonitor
  • trunk/Source/WebKit/ChangeLog

    r282121 r282130  
     12021-09-07  Sihui Liu  <sihui_liu@apple.com>
     2
     3        Add basic support for Storage API
     4        https://bugs.webkit.org/show_bug.cgi?id=229925
     5
     6        Reviewed by Darin Adler.
     7
     8        Set up basic infrastructure for StorageManager.
     9        UI process sets the directory for StorageMananager with datastore configuration.
     10        Network process manages storage with NetworkStorageManager (per Session). It has multiple OriginStorageManagers
     11        for managing storage of different origins, and each OriginStorageManager has a default StorageBucket.
     12        Web process can get and set persist property of each bucket by sending messages to network process.
     13
     14        * CMakeLists.txt:
     15        * DerivedSources-input.xcfilelist:
     16        * DerivedSources-output.xcfilelist:
     17        * DerivedSources.make:
     18        * NetworkProcess/NetworkProcess.cpp:
     19        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
     20        (WebKit::NetworkProcess::addWebsiteDataStore):
     21        (WebKit::NetworkProcess::addStorageManagerForSession):
     22        (WebKit::NetworkProcess::removeStorageManagerForSession):
     23        (WebKit::NetworkProcess::destroySession):
     24        (WebKit::NetworkProcess::connectionToWebProcessClosed):
     25        * NetworkProcess/NetworkProcess.h:
     26        * NetworkProcess/storage/NetworkStorageManager.cpp: Added.
     27        (WebKit::NetworkStorageManager::create):
     28        (WebKit::NetworkStorageManager::NetworkStorageManager):
     29        (WebKit::NetworkStorageManager::startReceivingMessageFromConnection):
     30        (WebKit::NetworkStorageManager::stopReceivingMessageFromConnection):
     31        (WebKit::encode):
     32        (WebKit::originPath):
     33        (WebKit::NetworkStorageManager::localOriginStorageManager):
     34        (WebKit::NetworkStorageManager::persisted):
     35        (WebKit::NetworkStorageManager::persist):
     36        * NetworkProcess/storage/NetworkStorageManager.h: Added.
     37        (WebKit::NetworkStorageManager::sessionID const):
     38        * NetworkProcess/storage/NetworkStorageManager.messages.in: Added.
     39        * NetworkProcess/storage/OriginStorageManager.cpp: Added.
     40        (WebKit::OriginStorageManager::StorageBucket::StorageBucket):
     41        (WebKit::OriginStorageManager::StorageBucket::mode const):
     42        (WebKit::OriginStorageManager::StorageBucket::setMode):
     43        (WebKit::OriginStorageManager::OriginStorageManager):
     44        (WebKit::OriginStorageManager::persist):
     45        * NetworkProcess/storage/OriginStorageManager.h: Added.
     46        (WebKit::OriginStorageManager::persisted const):
     47        * Shared/WebsiteDataStoreParameters.cpp:
     48        (WebKit::WebsiteDataStoreParameters::encode const):
     49        (WebKit::WebsiteDataStoreParameters::decode):
     50        * Shared/WebsiteDataStoreParameters.h:
     51        * Sources.txt:
     52        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:
     53        (WKWebsiteDataStoreConfigurationCopyGeneralStorageDirectory):
     54        (WKWebsiteDataStoreConfigurationSetGeneralStorageDirectory):
     55        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h:
     56        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
     57        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
     58        (-[_WKWebsiteDataStoreConfiguration generalStorageDirectory]):
     59        (-[_WKWebsiteDataStoreConfiguration setGeneralStorageDirectory:]):
     60        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
     61        (WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):
     62        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
     63        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
     64        (WebKit::WebsiteDataStore::parameters):
     65        * UIProcess/WebsiteData/WebsiteDataStore.h:
     66        (WebKit::WebsiteDataStore::generalStorageDirectory const):
     67        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
     68        (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
     69        (WebKit::WebsiteDataStoreConfiguration::copy const):
     70        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
     71        (WebKit::WebsiteDataStoreConfiguration::generalStorageDirectory const):
     72        (WebKit::WebsiteDataStoreConfiguration::setGeneralStorageDirectory):
     73        * UIProcess/WebsiteData/playstation/WebsiteDataStorePlayStation.cpp:
     74        (WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):
     75        * UIProcess/WebsiteData/win/WebsiteDataStoreWin.cpp:
     76        (WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):
     77        * UIProcess/glib/WebsiteDataStoreGLib.cpp:
     78        (WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):
     79        * WebKit.xcodeproj/project.pbxproj:
     80        * WebProcess/WebCoreSupport/WebStorageConnection.cpp: Added.
     81        (WebKit::WebStorageConnection::create):
     82        (WebKit::WebStorageConnection::persisted):
     83        (WebKit::WebStorageConnection::persist):
     84        (WebKit::WebStorageConnection::connection):
     85        * WebProcess/WebCoreSupport/WebStorageConnection.h: Added.
     86        * WebProcess/WebCoreSupport/WebStorageProvider.h: Added.
     87        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteModelHosting.h:
     88        * WebProcess/WebPage/WebPage.cpp:
     89        (WebKit::m_appHighlightsVisible):
     90
    1912021-09-07  Alex Christensen  <achristensen@webkit.org>
    292
  • trunk/Source/WebKit/DerivedSources-input.xcfilelist

    r279971 r282130  
    7070$(PROJECT_DIR)/NetworkProcess/cache/CacheStorageEngineConnection.messages.in
    7171$(PROJECT_DIR)/NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in
     72$(PROJECT_DIR)/NetworkProcess/storage/NetworkStorageManager.messages.in
    7273$(PROJECT_DIR)/NetworkProcess/webrtc/NetworkMDNSRegister.messages.in
    7374$(PROJECT_DIR)/NetworkProcess/webrtc/NetworkRTCMonitor.messages.in
  • trunk/Source/WebKit/DerivedSources-output.xcfilelist

    r279971 r282130  
    113113$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/NetworkSocketStreamMessages.h
    114114$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/NetworkSocketStreamMessagesReplies.h
     115$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/NetworkStorageManagerMessageReceiver.cpp
     116$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/NetworkStorageManagerMessages.h
     117$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/NetworkStorageManagerMessagesReplies.h
    115118$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/PlatformXRSystemMessageReceiver.cpp
    116119$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/PlatformXRSystemMessages.h
  • trunk/Source/WebKit/DerivedSources.make

    r279971 r282130  
    3838    $(WebKit2)/NetworkProcess/ServiceWorker \
    3939    $(WebKit2)/NetworkProcess/WebStorage \
     40    $(WebKit2)/NetworkProcess/storage \
    4041    $(WebKit2)/PluginProcess \
    4142    $(WebKit2)/PluginProcess/mac \
     
    138139        NetworkProcess/webrtc/RTCDataChannelRemoteManagerProxy \
    139140        NetworkProcess/Cookies/WebCookieManager \
     141        NetworkProcess/storage/NetworkStorageManager \
    140142        Shared/Plugins/NPObjectMessageReceiver \
    141143        Shared/AuxiliaryProcess \
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp

    r282006 r282130  
    4848#include "NetworkSession.h"
    4949#include "NetworkSessionCreationParameters.h"
     50#include "NetworkStorageManager.h"
    5051#include "PreconnectTask.h"
    5152#include "PrivateClickMeasurementStore.h"
     
    401402    m_storageManagerSet->addConnection(connection.connection());
    402403    webIDBServer(sessionID).addConnection(connection.connection(), identifier);
     404    if (auto manager = m_storageManagers.get(sessionID))
     405        manager->startReceivingMessageFromConnection(connection.connection());
    403406}
    404407
     
    416419    auto sessionID = parameters.networkSessionParameters.sessionID;
    417420
     421    addStorageManagerForSession(sessionID, parameters.generalStorageDirectory, parameters.generalStorageDirectoryHandle);
    418422    addSessionStorageQuotaManager(sessionID, parameters.perOriginStorageQuota, parameters.perThirdPartyOriginStorageQuota, parameters.cacheStorageDirectory, parameters.cacheStorageDirectoryExtensionHandle);
    419423
     
    446450    ASSERT(m_sessionStorageQuotaManagers.contains(sessionID));
    447451    m_sessionStorageQuotaManagers.remove(sessionID);
     452}
     453
     454void NetworkProcess::addStorageManagerForSession(PAL::SessionID sessionID, const String& generalStoragePath, SandboxExtension::Handle& generalStoragePathHandle)
     455{
     456    m_storageManagers.ensure(sessionID, [&] {
     457        SandboxExtension::consumePermanently(generalStoragePathHandle);
     458        return NetworkStorageManager::create(sessionID, generalStoragePath);
     459    });
     460}
     461
     462void NetworkProcess::removeStorageManagerForSession(PAL::SessionID sessionID)
     463{
     464    m_storageManagers.remove(sessionID);
    448465}
    449466
     
    558575    if (auto server = m_webIDBServers.take(sessionID))
    559576        server->close();
     577    removeStorageManagerForSession(sessionID);
    560578}
    561579
     
    26742692    if (auto* server = m_webIDBServers.get(sessionID))
    26752693        server->removeConnection(connection);
     2694
     2695    if (auto manager = m_storageManagers.get(sessionID))
     2696        manager->stopReceivingMessageFromConnection(connection);
    26762697}
    26772698
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.h

    r282006 r282130  
    107107class NetworkProximityManager;
    108108class NetworkResourceLoader;
     109class NetworkStorageManager;
    109110class ProcessAssertion;
    110111class StorageManagerSet;
     
    538539    void removeSessionStorageQuotaManager(PAL::SessionID);
    539540
     541    void addStorageManagerForSession(PAL::SessionID, const String& path, SandboxExtension::Handle&);
     542    void removeStorageManagerForSession(PAL::SessionID);
     543
    540544    // Connections to WebProcesses.
    541545    HashMap<WebCore::ProcessIdentifier, Ref<NetworkConnectionToWebProcess>> m_webProcessConnections;
     
    610614    bool m_privateClickMeasurementEnabled { true };
    611615    bool m_privateClickMeasurementDebugModeEnabled { false };
     616
     617    HashMap<PAL::SessionID, Ref<NetworkStorageManager>> m_storageManagers;
    612618};
    613619
  • trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.cpp

    r278253 r282130  
    4848
    4949    encoder << localStorageDirectory << localStorageDirectoryExtensionHandle;
    50 
    5150    encoder << cacheStorageDirectory << cacheStorageDirectoryExtensionHandle;
     51    encoder << generalStorageDirectory << generalStorageDirectoryHandle;
    5252
    5353    encoder << perOriginStorageQuota;
     
    133133    parameters.cacheStorageDirectoryExtensionHandle = WTFMove(*cacheStorageDirectoryExtensionHandle);
    134134
     135    std::optional<String> generalStorageDirectory;
     136    decoder >> generalStorageDirectory;
     137    if (!generalStorageDirectory)
     138        return std::nullopt;
     139    parameters.generalStorageDirectory = WTFMove(*generalStorageDirectory);
     140
     141    std::optional<SandboxExtension::Handle> generalStorageDirectoryHandle;
     142    decoder >> generalStorageDirectoryHandle;
     143    if (!generalStorageDirectoryHandle)
     144        return std::nullopt;
     145    parameters.generalStorageDirectoryHandle = WTFMove(*generalStorageDirectoryHandle);
     146
    135147    std::optional<uint64_t> perOriginStorageQuota;
    136148    decoder >> perOriginStorageQuota;
  • trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.h

    r278253 r282130  
    6969    SandboxExtension::Handle cacheStorageDirectoryExtensionHandle;
    7070
     71    String generalStorageDirectory;
     72    SandboxExtension::Handle generalStorageDirectoryHandle;
     73
    7174    uint64_t perOriginStorageQuota { WebCore::StorageQuotaManager::defaultQuota() };
    7275    uint64_t perThirdPartyOriginStorageQuota { WebCore::StorageQuotaManager::defaultThirdPartyQuota() };
  • trunk/Source/WebKit/Sources.txt

    r282054 r282130  
    110110NetworkProcess/ServiceWorker/WebSWServerConnection.cpp @no-unify
    111111NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp @no-unify
     112
     113NetworkProcess/storage/NetworkStorageManager.cpp
     114NetworkProcess/storage/OriginStorageManager.cpp
    112115
    113116NetworkProcess/WebStorage/LocalStorageDatabase.cpp
     
    711714WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.cpp
    712715WebProcess/WebCoreSupport/WebSpeechSynthesisClient.cpp
     716WebProcess/WebCoreSupport/WebStorageConnection.cpp
    713717
    714718WebProcess/WebPage/DrawingArea.cpp
  • trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp

    r254342 r282130  
    101101}
    102102
     103WKStringRef WKWebsiteDataStoreConfigurationCopyGeneralStorageDirectory(WKWebsiteDataStoreConfigurationRef configuration)
     104{
     105    return WebKit::toCopiedAPI(WebKit::toImpl(configuration)->generalStorageDirectory());
     106}
     107
     108void WKWebsiteDataStoreConfigurationSetGeneralStorageDirectory(WKWebsiteDataStoreConfigurationRef configuration, WKStringRef directory)
     109{
     110    WebKit::toImpl(configuration)->setGeneralStorageDirectory(WebKit::toImpl(directory)->string());
     111}
     112
    103113WKStringRef WKWebsiteDataStoreConfigurationCopyMediaKeysStorageDirectory(WKWebsiteDataStoreConfigurationRef configuration)
    104114{
  • trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h

    r254342 r282130  
    5555WK_EXPORT void WKWebsiteDataStoreConfigurationSetCacheStorageDirectory(WKWebsiteDataStoreConfigurationRef configuration, WKStringRef directory);
    5656
     57WK_EXPORT WKStringRef WKWebsiteDataStoreConfigurationCopyGeneralStorageDirectory(WKWebsiteDataStoreConfigurationRef configuration);
     58WK_EXPORT void WKWebsiteDataStoreConfigurationSetGeneralStorageDirectory(WKWebsiteDataStoreConfigurationRef configuration, WKStringRef directory);
     59
    5760WK_EXPORT WKStringRef WKWebsiteDataStoreConfigurationCopyMediaKeysStorageDirectory(WKWebsiteDataStoreConfigurationRef configuration);
    5861WK_EXPORT void WKWebsiteDataStoreConfigurationSetMediaKeysStorageDirectory(WKWebsiteDataStoreConfigurationRef configuration, WKStringRef directory);
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h

    r281721 r282130  
    7979
    8080@property (nonatomic, nullable, copy) NSURL *alternativeServicesStorageDirectory WK_API_AVAILABLE(macos(11.0), ios(14.0));
    81 
    8281@property (nonatomic, nullable, copy) NSURL *standaloneApplicationURL WK_API_AVAILABLE(macos(11.0), ios(14.0));
     82@property (nonatomic, nullable, copy) NSURL *storageDirectory WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    8383
    8484// Testing only.
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm

    r281721 r282130  
    336336}
    337337
     338- (NSURL *)generalStorageDirectory
     339{
     340    auto& directory = _configuration->generalStorageDirectory();
     341    if (directory.isNull())
     342        return nil;
     343    return [NSURL fileURLWithPath:directory isDirectory:YES];
     344}
     345
     346- (void)setGeneralStorageDirectory:(NSURL *)url
     347{
     348    if (!_configuration->isPersistent())
     349        [NSException raise:NSInvalidArgumentException format:@"Cannot set storageDirectory on a non-persistent _WKWebsiteDataStoreConfiguration."];
     350    checkURLArgument(url);
     351    _configuration->setGeneralStorageDirectory(url.path);
     352}
     353
    338354- (BOOL)deviceManagementRestrictionsEnabled
    339355{
  • trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm

    r281032 r282130  
    272272}
    273273
     274String WebsiteDataStore::defaultGeneralStorageDirectory()
     275{
     276    return cacheDirectoryFileSystemRepresentation("Storage");
     277}
     278
    274279WTF::String WebsiteDataStore::defaultNetworkCacheDirectory()
    275280{
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp

    r282034 r282130  
    272272    if (!m_configuration->hstsStorageDirectory().isEmpty() && m_resolvedConfiguration->hstsStorageDirectory().isEmpty())
    273273        m_resolvedConfiguration->setHSTSStorageDirectory(resolvePathForSandboxExtension(m_configuration->hstsStorageDirectory()));
     274    if (!m_configuration->generalStorageDirectory().isEmpty())
     275        m_resolvedConfiguration->setGeneralStorageDirectory(resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration->generalStorageDirectory()));
    274276#if HAVE(ARKIT_INLINE_PREVIEW)
    275277    if (!m_configuration->modelElementCacheDirectory().isEmpty())
     
    20882090    }
    20892091
     2092    if (auto directory = generalStorageDirectory(); !directory.isEmpty()) {
     2093        parameters.generalStorageDirectory = directory;
     2094        if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(directory))
     2095            parameters.generalStorageDirectoryHandle = WTFMove(*handle);
     2096    }
     2097
    20902098    parameters.perOriginStorageQuota = perOriginStorageQuota();
    20912099    parameters.perThirdPartyOriginStorageQuota = perThirdPartyOriginStorageQuota();
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h

    r282034 r282130  
    159159    uint64_t perThirdPartyOriginStorageQuota() const;
    160160    const String& cacheStorageDirectory() const { return m_resolvedConfiguration->cacheStorageDirectory(); }
     161    const String& generalStorageDirectory() const { return m_resolvedConfiguration->generalStorageDirectory(); }
    161162
    162163#if ENABLE(RESOURCE_LOAD_STATISTICS)
     
    344345    static WTF::String defaultIndexedDBDatabaseDirectory();
    345346    static WTF::String defaultCacheStorageDirectory();
     347    static WTF::String defaultGeneralStorageDirectory();
    346348    static WTF::String defaultMediaCacheDirectory();
    347349    static WTF::String defaultMediaKeysStorageDirectory();
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp

    r281721 r282130  
    3737        setApplicationCacheDirectory(WebsiteDataStore::defaultApplicationCacheDirectory());
    3838        setCacheStorageDirectory(WebsiteDataStore::defaultCacheStorageDirectory());
     39        setGeneralStorageDirectory(WebsiteDataStore::defaultGeneralStorageDirectory());
    3940        setNetworkCacheDirectory(WebsiteDataStore::defaultNetworkCacheDirectory());
    4041        setAlternativeServicesDirectory(WebsiteDataStore::defaultAlternativeServicesDirectory());
     
    6364    copy->m_staleWhileRevalidateEnabled = this->m_staleWhileRevalidateEnabled;
    6465    copy->m_cacheStorageDirectory = this->m_cacheStorageDirectory;
     66    copy->m_generalStorageDirectory = this->m_generalStorageDirectory;
    6567    copy->m_perOriginStorageQuota = this->m_perOriginStorageQuota;
    6668    copy->m_networkCacheDirectory = this->m_networkCacheDirectory;
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h

    r281721 r282130  
    126126    const String& cacheStorageDirectory() const { return m_cacheStorageDirectory; }
    127127    void setCacheStorageDirectory(String&& directory) { m_cacheStorageDirectory = WTFMove(directory); }
    128    
     128
     129    const String& generalStorageDirectory() const { return m_generalStorageDirectory; }
     130    void setGeneralStorageDirectory(String&& directory) { m_generalStorageDirectory = WTFMove(directory); }
     131
    129132    const String& applicationCacheFlatFileSubdirectoryName() const { return m_applicationCacheFlatFileSubdirectoryName; }
    130133    void setApplicationCacheFlatFileSubdirectoryName(String&& directory) { m_applicationCacheFlatFileSubdirectoryName = WTFMove(directory); }
     
    182185
    183186    String m_cacheStorageDirectory;
     187    String m_generalStorageDirectory;
    184188    uint64_t m_perOriginStorageQuota { WebCore::StorageQuotaManager::defaultQuota() };
    185189    String m_networkCacheDirectory;
  • trunk/Source/WebKit/UIProcess/WebsiteData/playstation/WebsiteDataStorePlayStation.cpp

    r263441 r282130  
    5757}
    5858
     59String WebsiteDataStore::defaultGeneralStorageDirectory()
     60{
     61    return { };
     62}
     63
    5964String WebsiteDataStore::defaultNetworkCacheDirectory()
    6065{
  • trunk/Source/WebKit/UIProcess/WebsiteData/win/WebsiteDataStoreWin.cpp

    r263441 r282130  
    5757}
    5858
     59String WebsiteDataStore::defaultGeneralStorageDirectory()
     60{
     61    return FileSystem::pathByAppendingComponent(FileSystem::localUserSpecificStorageDirectory(), "Storage");
     62}
     63
    5964String WebsiteDataStore::defaultNetworkCacheDirectory()
    6065{
  • trunk/Source/WebKit/UIProcess/glib/WebsiteDataStoreGLib.cpp

    r273131 r282130  
    5353{
    5454    return cacheDirectoryFileSystemRepresentation(FileSystem::pathByAppendingComponent(FileSystem::stringFromFileSystemRepresentation(g_get_prgname()), "CacheStorage"));
     55}
     56
     57WTF::String WebsiteDataStore::defaultGeneralStorageDirectory()
     58{
     59    return websiteDataDirectoryFileSystemRepresentation(BASE_DIRECTORY G_DIR_SEPARATOR_S "storage");
    5560}
    5661
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r282110 r282130  
    14621462                9197940A23DBC4E000257892 /* APIInspectorClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 9197940923DBC4E000257892 /* APIInspectorClient.h */; };
    14631463                9197940C23DBC50300257892 /* _WKInspectorDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9197940B23DBC50300257892 /* _WKInspectorDelegate.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1464                93085DBF26E192F9000EC6A7 /* WebStorageProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 93085DBA26E152C2000EC6A7 /* WebStorageProvider.h */; };
     1465                93085DC026E19313000EC6A7 /* WebStorageConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 93085DBB26E172F9000EC6A7 /* WebStorageConnection.h */; };
     1466                93085DCA26E29775000EC6A7 /* OriginStorageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 93085DC626E1C6CF000EC6A7 /* OriginStorageManager.h */; };
     1467                93085DD026E2F100000EC6A7 /* WebSpeechRecognitionConnectionMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D6B77E254CCABB0058DD3A /* WebSpeechRecognitionConnectionMessagesReplies.h */; };
     1468                93085DD226E2F58D000EC6A7 /* NetworkStorageManagerMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93085DCC26E2E902000EC6A7 /* NetworkStorageManagerMessageReceiver.cpp */; };
     1469                93085DDF26E5BCF1000EC6A7 /* NetworkStorageManagerMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 93085DCE26E2E902000EC6A7 /* NetworkStorageManagerMessagesReplies.h */; };
     1470                93085DE026E5BCFD000EC6A7 /* NetworkStorageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 93085DC426E1BBBD000EC6A7 /* NetworkStorageManager.h */; };
     1471                93085DE126E5BD13000EC6A7 /* NetworkStorageManagerMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 93085DCD26E2E902000EC6A7 /* NetworkStorageManagerMessages.h */; };
    14641472                9321D5861A38EE3C008052BE /* WKImmediateActionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9321D5851A38EE3C008052BE /* WKImmediateActionController.h */; };
    14651473                9321D58A1A38F196008052BE /* WKImmediateActionTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 9321D5891A38F196008052BE /* WKImmediateActionTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    15091517                93D6B785254CCD430058DD3A /* SpeechRecognitionServerMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D6B77F254CCABB0058DD3A /* SpeechRecognitionServerMessagesReplies.h */; };
    15101518                93D6B787254CCD8C0058DD3A /* WebSpeechRecognitionConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D6B786254CCD8B0058DD3A /* WebSpeechRecognitionConnectionMessages.h */; };
    1511                 93D6B788254CCD940058DD3A /* WebSpeechRecognitionConnectionMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D6B77E254CCABB0058DD3A /* WebSpeechRecognitionConnectionMessagesReplies.h */; };
    15121519                93D6B78A254CD43E0058DD3A /* WebSpeechRecognitionConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93D6B77D254CCABB0058DD3A /* WebSpeechRecognitionConnectionMessageReceiver.cpp */; };
    15131520                93D6B7B4255268D50058DD3A /* SpeechRecognitionPermissionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D6B7AF255268A10058DD3A /* SpeechRecognitionPermissionRequest.h */; };
     
    48714878                9197940923DBC4E000257892 /* APIInspectorClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIInspectorClient.h; sourceTree = "<group>"; };
    48724879                9197940B23DBC50300257892 /* _WKInspectorDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKInspectorDelegate.h; sourceTree = "<group>"; };
     4880                93085DBA26E152C2000EC6A7 /* WebStorageProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebStorageProvider.h; sourceTree = "<group>"; };
     4881                93085DBB26E172F9000EC6A7 /* WebStorageConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebStorageConnection.h; sourceTree = "<group>"; };
     4882                93085DBC26E174ED000EC6A7 /* WebStorageConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebStorageConnection.cpp; sourceTree = "<group>"; };
     4883                93085DC326E1BBBD000EC6A7 /* NetworkStorageManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkStorageManager.cpp; sourceTree = "<group>"; };
     4884                93085DC426E1BBBD000EC6A7 /* NetworkStorageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkStorageManager.h; sourceTree = "<group>"; };
     4885                93085DC526E1C6CF000EC6A7 /* OriginStorageManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OriginStorageManager.cpp; sourceTree = "<group>"; };
     4886                93085DC626E1C6CF000EC6A7 /* OriginStorageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OriginStorageManager.h; sourceTree = "<group>"; };
     4887                93085DC726E1C6EE000EC6A7 /* NetworkStorageManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NetworkStorageManager.messages.in; sourceTree = "<group>"; };
     4888                93085DCC26E2E902000EC6A7 /* NetworkStorageManagerMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkStorageManagerMessageReceiver.cpp; sourceTree = "<group>"; };
     4889                93085DCD26E2E902000EC6A7 /* NetworkStorageManagerMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkStorageManagerMessages.h; sourceTree = "<group>"; };
     4890                93085DCE26E2E902000EC6A7 /* NetworkStorageManagerMessagesReplies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkStorageManagerMessagesReplies.h; sourceTree = "<group>"; };
    48734891                9321D5851A38EE3C008052BE /* WKImmediateActionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKImmediateActionController.h; sourceTree = "<group>"; };
    48744892                9321D5871A38EE74008052BE /* WKImmediateActionController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKImmediateActionController.mm; sourceTree = "<group>"; };
     
    49294947                93AB9B53257589120098B10E /* SpeechRecognitionRemoteRealtimeMediaSourceManagerMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpeechRecognitionRemoteRealtimeMediaSourceManagerMessages.h; sourceTree = "<group>"; };
    49304948                93AB9B54257589120098B10E /* SpeechRecognitionRealtimeMediaSourceManagerMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpeechRecognitionRealtimeMediaSourceManagerMessages.h; sourceTree = "<group>"; };
    4931                 93B0A66D26D4515000AA21E4 /* PermissionManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PermissionManager.cpp; sourceTree = "<group>"; };
    4932                 93B0A66E26D4515000AA21E4 /* PermissionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PermissionManager.h; sourceTree = "<group>"; };
    49334949                93B0A67326D5A72E00AA21E4 /* WebPermissionController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebPermissionController.cpp; sourceTree = "<group>"; };
    49344950                93B0A67426D5A72E00AA21E4 /* WebPermissionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebPermissionController.h; sourceTree = "<group>"; };
     
    86958711                                5C01BC3526D46AD400FEB42F /* PrivateClickMeasurement */,
    86968712                                93BA04D92151ADCD007F455F /* ServiceWorker */,
     8713                                93085DC226E1BB65000EC6A7 /* storage */,
    86978714                                413075971DE84ED70039EC69 /* webrtc */,
    86988715                                93B26143227D143100B97A76 /* WebStorage */,
     
    96339650                        sourceTree = "<group>";
    96349651                };
     9652                93085DC226E1BB65000EC6A7 /* storage */ = {
     9653                        isa = PBXGroup;
     9654                        children = (
     9655                                93085DC326E1BBBD000EC6A7 /* NetworkStorageManager.cpp */,
     9656                                93085DC426E1BBBD000EC6A7 /* NetworkStorageManager.h */,
     9657                                93085DC726E1C6EE000EC6A7 /* NetworkStorageManager.messages.in */,
     9658                                93085DC526E1C6CF000EC6A7 /* OriginStorageManager.cpp */,
     9659                                93085DC626E1C6CF000EC6A7 /* OriginStorageManager.h */,
     9660                        );
     9661                        path = storage;
     9662                        sourceTree = "<group>";
     9663                };
    96359664                939288E021404DF000EBBA33 /* IndexedDB */ = {
    96369665                        isa = PBXGroup;
     
    96669695                        );
    96679696                        path = Speech;
    9668                         sourceTree = "<group>";
    9669                 };
    9670                 93B0A66C26D4511F00AA21E4 /* Permission */ = {
    9671                         isa = PBXGroup;
    9672                         children = (
    9673                                 93B0A66D26D4515000AA21E4 /* PermissionManager.cpp */,
    9674                                 93B0A66E26D4515000AA21E4 /* PermissionManager.h */,
    9675                         );
    9676                         path = Permission;
    96779697                        sourceTree = "<group>";
    96789698                };
     
    99179937                                5105B0D2162F7A5E00E27709 /* Network */,
    99189938                                31099974146C8AA80029DEB9 /* Notifications (User) */,
    9919                                 93B0A66C26D4511F00AA21E4 /* Permission */,
    99209939                                1A6FB7AA11E64B4900DB1371 /* Plugins */,
    99219940                                93AB9B482574C5CE0098B10E /* Speech */,
     
    1000710026                                C149380222341C60000CD707 /* WebSpeechSynthesisClient.h */,
    1000810027                                C149380A223853BE000CD707 /* WebSpeechSynthesisVoice.h */,
     10028                                93085DBC26E174ED000EC6A7 /* WebStorageConnection.cpp */,
     10029                                93085DBB26E172F9000EC6A7 /* WebStorageConnection.h */,
     10030                                93085DBA26E152C2000EC6A7 /* WebStorageProvider.h */,
    1000910031                                4A410F4819AF7B80002EBAB5 /* WebUserMediaClient.cpp */,
    1001010032                                4A410F4919AF7B80002EBAB5 /* WebUserMediaClient.h */,
     
    1122211244                                5C0B17741E7C879C00E9123C /* NetworkSocketStreamMessageReceiver.cpp */,
    1122311245                                5C0B17751E7C879C00E9123C /* NetworkSocketStreamMessages.h */,
     11246                                93085DCC26E2E902000EC6A7 /* NetworkStorageManagerMessageReceiver.cpp */,
     11247                                93085DCD26E2E902000EC6A7 /* NetworkStorageManagerMessages.h */,
     11248                                93085DCE26E2E902000EC6A7 /* NetworkStorageManagerMessagesReplies.h */,
    1122411249                                1A2D8437127F65D5001EB962 /* NPObjectMessageReceiverMessageReceiver.cpp */,
    1122511250                                1A2D8438127F65D5001EB962 /* NPObjectMessageReceiverMessages.h */,
     
    1228512310                                532159551DBAE7290054AA3C /* NetworkSessionCocoa.h in Headers */,
    1228612311                                417915B92257046F00D6F97E /* NetworkSocketChannel.h in Headers */,
     12312                                93085DE026E5BCFD000EC6A7 /* NetworkStorageManager.h in Headers */,
     12313                                93085DE126E5BD13000EC6A7 /* NetworkStorageManagerMessages.h in Headers */,
     12314                                93085DDF26E5BCF1000EC6A7 /* NetworkStorageManagerMessagesReplies.h in Headers */,
    1228712315                                570DAAC22303730300E8FC04 /* NfcConnection.h in Headers */,
    1228812316                                570DAAAE23026F5C00E8FC04 /* NfcService.h in Headers */,
     
    1230312331                                41DD72AB2682167300A90C71 /* NWParametersSPI.h in Headers */,
    1230412332                                BC8ACA1316670D89004C1941 /* ObjCObjectGraph.h in Headers */,
     12333                                93085DCA26E29775000EC6A7 /* OriginStorageManager.h in Headers */,
    1230512334                                F4EB4AFD269CD7F300D297AE /* OSStateSPI.h in Headers */,
    1230612335                                7CF47FFB17275C57008ACB91 /* PageBanner.h in Headers */,
     
    1276812797                                93D6B773254BB8C70058DD3A /* WebSpeechRecognitionConnection.h in Headers */,
    1276912798                                93D6B787254CCD8C0058DD3A /* WebSpeechRecognitionConnectionMessages.h in Headers */,
    12770                                 93D6B788254CCD940058DD3A /* WebSpeechRecognitionConnectionMessagesReplies.h in Headers */,
     12799                                93085DD026E2F100000EC6A7 /* WebSpeechRecognitionConnectionMessagesReplies.h in Headers */,
    1277112800                                C149380922347104000CD707 /* WebSpeechSynthesisClient.h in Headers */,
    1277212801                                836034A01ACB34D600626549 /* WebSQLiteDatabaseTracker.h in Headers */,
     12802                                93085DC026E19313000EC6A7 /* WebStorageConnection.h in Headers */,
    1277312803                                1A52C0F81A38CDC70016160A /* WebStorageNamespaceProvider.h in Headers */,
     12804                                93085DBF26E192F9000EC6A7 /* WebStorageProvider.h in Headers */,
    1277412805                                9356F2DC2152B6B500E6D5DF /* WebSWClientConnection.h in Headers */,
    1277512806                                517A53101F47A86200DCDC0A /* WebSWClientConnectionMessages.h in Headers */,
     
    1431414345                                31F060E11654318500F3281C /* NetworkSocketChannelMessageReceiver.cpp in Sources */,
    1431514346                                5C0B17781E7C880E00E9123C /* NetworkSocketStreamMessageReceiver.cpp in Sources */,
     14347                                93085DD226E2F58D000EC6A7 /* NetworkStorageManagerMessageReceiver.cpp in Sources */,
    1431614348                                2D92A790212B6AD400F493FD /* NPIdentifierData.cpp in Sources */,
    1431714349                                2D913446212CF9F000128AFD /* NPJSObject.cpp in Sources */,
  • trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteModelHosting.h

    r276562 r282130  
    4444    void populateCreationProperties(RemoteLayerTreeTransaction::LayerCreationProperties&, const RemoteLayerTreeContext&, WebCore::PlatformCALayer::LayerType) override;
    4545   
    46     void dumpAdditionalProperties(TextStream&, OptionSet<PlatformLayerTreeAsTextFlags>) final;
     46    void dumpAdditionalProperties(TextStream&, OptionSet<WebCore::PlatformLayerTreeAsTextFlags>) final;
    4747
    48     Ref<Model> m_model;
     48    Ref<WebCore::Model> m_model;
    4949};
    5050
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r282090 r282130  
    137137#include "WebSpeechSynthesisClient.h"
    138138#include "WebStorageNamespaceProvider.h"
     139#include "WebStorageProvider.h"
    139140#include "WebTouchEvent.h"
    140141#include "WebURLSchemeHandlerProxy.h"
     
    567568        makeUniqueRef<MediaRecorderProvider>(*this),
    568569        WebProcess::singleton().broadcastChannelRegistry(),
    569         WebPermissionController::create(*this)
     570        WebPermissionController::create(*this),
     571        makeUniqueRef<WebStorageProvider>()
    570572    );
    571573    pageConfiguration.chromeClient = new WebChromeClient(*this);
  • trunk/Source/WebKitLegacy/mac/ChangeLog

    r281832 r282130  
     12021-09-07  Sihui Liu  <sihui_liu@apple.com>
     2
     3        Add basic support for Storage API
     4        https://bugs.webkit.org/show_bug.cgi?id=229925
     5
     6        Reviewed by Darin Adler.
     7
     8        * WebView/WebView.mm:
     9        (-[WebView _commonInitializationWithFrameName:groupName:]):
     10        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
     11
    1122021-08-31  Chris Dumez  <cdumez@apple.com>
    213
  • trunk/Source/WebKitLegacy/mac/WebView/WebView.mm

    r281818 r282130  
    152152#import <WebCore/DragItem.h>
    153153#import <WebCore/DummySpeechRecognitionProvider.h>
     154#import <WebCore/DummyStorageProvider.h>
    154155#import <WebCore/Editing.h>
    155156#import <WebCore/Editor.h>
     
    15391540        makeUniqueRef<WebCore::MediaRecorderProvider>(),
    15401541        WebBroadcastChannelRegistry::getOrCreate([[self preferences] privateBrowsingEnabled]),
    1541         WebCore::DummyPermissionController::create()
     1542        WebCore::DummyPermissionController::create(),
     1543        makeUniqueRef<WebCore::DummyStorageProvider>()
    15421544    );
    15431545#if !PLATFORM(IOS_FAMILY)
     
    18181820        makeUniqueRef<WebCore::MediaRecorderProvider>(),
    18191821        WebBroadcastChannelRegistry::getOrCreate([[self preferences] privateBrowsingEnabled]),
    1820         WebCore::DummyPermissionController::create()
     1822        WebCore::DummyPermissionController::create(),
     1823        makeUniqueRef<WebCore::DummyStorageProvider>()
    18211824    );
    18221825    pageConfiguration.chromeClient = new WebChromeClientIOS(self);
  • trunk/Source/WebKitLegacy/win/ChangeLog

    r281832 r282130  
     12021-09-07  Sihui Liu  <sihui_liu@apple.com>
     2
     3        Add basic support for Storage API
     4        https://bugs.webkit.org/show_bug.cgi?id=229925
     5
     6        Reviewed by Darin Adler.
     7
     8        * WebView.cpp:
     9        (WebView::initWithFrame):
     10
    1112021-08-31  Chris Dumez  <cdumez@apple.com>
    212
  • trunk/Source/WebKitLegacy/win/WebView.cpp

    r281818 r282130  
    9797#include <WebCore/DragData.h>
    9898#include <WebCore/DummySpeechRecognitionProvider.h>
     99#include <WebCore/DummyStorageProvider.h>
    99100#include <WebCore/Editor.h>
    100101#include <WebCore/EventHandler.h>
     
    31363137        makeUniqueRef<MediaRecorderProvider>(),
    31373138        WebBroadcastChannelRegistry::getOrCreate(false),
    3138         WebCore::DummyPermissionController::create()
     3139        WebCore::DummyPermissionController::create(),
     3140        makeUniqueRef<WebCore::DummyStorageProvider>()
    31393141    );
    31403142    configuration.chromeClient = new WebChromeClient(this);
Note: See TracChangeset for help on using the changeset viewer.