Commit dfe6447c authored by dgrogan@chromium.org's avatar dgrogan@chromium.org

Expose durable storage method to workers.

And add a layout test.

BUG=520717

Review URL: https://codereview.chromium.org/1301393002

git-svn-id: svn://svn.chromium.org/blink/trunk@201015 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent f99d08da
...@@ -594,7 +594,6 @@ interface ServiceWorkerRegistration ...@@ -594,7 +594,6 @@ interface ServiceWorkerRegistration
interface StorageManager interface StorageManager
method constructor method constructor
method persistentPermission method persistentPermission
method requestPersistent
interface SubtleCrypto interface SubtleCrypto
method constructor method constructor
method decrypt method decrypt
...@@ -743,6 +742,7 @@ interface WorkerNavigator ...@@ -743,6 +742,7 @@ interface WorkerNavigator
getter platform getter platform
getter product getter product
getter services getter services
getter storage
getter userAgent getter userAgent
getter webkitPersistentStorage getter webkitPersistentStorage
getter webkitTemporaryStorage getter webkitTemporaryStorage
......
<!DOCTYPE html>
<title>navigator.storage methods work from workers</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var worker = new Worker('resources/durability-worker.js');
fetch_tests_from_worker(worker);
</script>
importScripts("/resources/testharness.js");
test(function() { assert_true("storage" in navigator); },
"These worker tests require navigator.storage");
test(function() { assert_false("requestPersistent" in navigator.storage); },
"navigator.storage.requestPersistent should not exist in workers");
promise_test(function() {
var promise = navigator.storage.persistentPermission();
assert_true(promise instanceof Promise,
"navigator.storage.persistentPermission() returned a Promise.")
return promise.then(function (result) {
// Layout tests get canned results, not the value per spec. So testing
// their values here would only be testing our test plumbing. But we can
// test that the type of the returned value is correct.
assert_equals(typeof result, "string", result + " should be a string");
assert_greater_than(result.length, 0, "result should have length >0");
});
}, "navigator.storage.persistentPermission returns a promise that resolves.");
done();
...@@ -507,7 +507,6 @@ Starting worker: resources/global-interface-listing.js ...@@ -507,7 +507,6 @@ Starting worker: resources/global-interface-listing.js
[Worker] interface StorageManager [Worker] interface StorageManager
[Worker] method constructor [Worker] method constructor
[Worker] method persistentPermission [Worker] method persistentPermission
[Worker] method requestPersistent
[Worker] interface SubtleCrypto [Worker] interface SubtleCrypto
[Worker] method constructor [Worker] method constructor
[Worker] method decrypt [Worker] method decrypt
...@@ -636,6 +635,7 @@ Starting worker: resources/global-interface-listing.js ...@@ -636,6 +635,7 @@ Starting worker: resources/global-interface-listing.js
[Worker] getter platform [Worker] getter platform
[Worker] getter product [Worker] getter product
[Worker] getter services [Worker] getter services
[Worker] getter storage
[Worker] getter userAgent [Worker] getter userAgent
[Worker] getter webkitPersistentStorage [Worker] getter webkitPersistentStorage
[Worker] getter webkitTemporaryStorage [Worker] getter webkitTemporaryStorage
......
...@@ -499,7 +499,6 @@ Starting worker: resources/global-interface-listing.js ...@@ -499,7 +499,6 @@ Starting worker: resources/global-interface-listing.js
[Worker] interface StorageManager [Worker] interface StorageManager
[Worker] method constructor [Worker] method constructor
[Worker] method persistentPermission [Worker] method persistentPermission
[Worker] method requestPersistent
[Worker] interface SubtleCrypto [Worker] interface SubtleCrypto
[Worker] method constructor [Worker] method constructor
[Worker] method decrypt [Worker] method decrypt
...@@ -628,6 +627,7 @@ Starting worker: resources/global-interface-listing.js ...@@ -628,6 +627,7 @@ Starting worker: resources/global-interface-listing.js
[Worker] getter platform [Worker] getter platform
[Worker] getter product [Worker] getter product
[Worker] getter services [Worker] getter services
[Worker] getter storage
[Worker] getter userAgent [Worker] getter userAgent
[Worker] getter webkitPersistentStorage [Worker] getter webkitPersistentStorage
[Worker] getter webkitTemporaryStorage [Worker] getter webkitTemporaryStorage
......
...@@ -12,7 +12,7 @@ enum PersistentStoragePermission { "default", "denied", "granted" }; ...@@ -12,7 +12,7 @@ enum PersistentStoragePermission { "default", "denied", "granted" };
GarbageCollected, GarbageCollected,
RuntimeEnabled=DurableStorage, RuntimeEnabled=DurableStorage,
] interface StorageManager { ] interface StorageManager {
[CallWith=ScriptState] Promise<boolean> requestPersistent(); [Exposed=Window, CallWith=ScriptState] Promise<boolean> requestPersistent();
[CallWith=ScriptState] Promise<PersistentStoragePermission> persistentPermission(); [CallWith=ScriptState] Promise<PersistentStoragePermission> persistentPermission();
// TODO(dgrogan): Implement estimate() and persistentEstimate(). // TODO(dgrogan): Implement estimate() and persistentEstimate().
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "modules/quota/WorkerNavigatorStorageQuota.h" #include "modules/quota/WorkerNavigatorStorageQuota.h"
#include "modules/quota/DeprecatedStorageQuota.h" #include "modules/quota/DeprecatedStorageQuota.h"
#include "modules/quota/StorageManager.h"
namespace blink { namespace blink {
...@@ -64,6 +65,11 @@ DeprecatedStorageQuota* WorkerNavigatorStorageQuota::webkitPersistentStorage(Wor ...@@ -64,6 +65,11 @@ DeprecatedStorageQuota* WorkerNavigatorStorageQuota::webkitPersistentStorage(Wor
return WorkerNavigatorStorageQuota::from(navigator).webkitPersistentStorage(); return WorkerNavigatorStorageQuota::from(navigator).webkitPersistentStorage();
} }
StorageManager* WorkerNavigatorStorageQuota::storage(WorkerNavigator& navigator)
{
return WorkerNavigatorStorageQuota::from(navigator).storage();
}
DeprecatedStorageQuota* WorkerNavigatorStorageQuota::webkitTemporaryStorage() const DeprecatedStorageQuota* WorkerNavigatorStorageQuota::webkitTemporaryStorage() const
{ {
if (!m_temporaryStorage) if (!m_temporaryStorage)
...@@ -78,10 +84,18 @@ DeprecatedStorageQuota* WorkerNavigatorStorageQuota::webkitPersistentStorage() c ...@@ -78,10 +84,18 @@ DeprecatedStorageQuota* WorkerNavigatorStorageQuota::webkitPersistentStorage() c
return m_persistentStorage.get(); return m_persistentStorage.get();
} }
StorageManager* WorkerNavigatorStorageQuota::storage() const
{
if (!m_storageManager)
m_storageManager = new StorageManager();
return m_storageManager.get();
}
DEFINE_TRACE(WorkerNavigatorStorageQuota) DEFINE_TRACE(WorkerNavigatorStorageQuota)
{ {
visitor->trace(m_temporaryStorage); visitor->trace(m_temporaryStorage);
visitor->trace(m_persistentStorage); visitor->trace(m_persistentStorage);
visitor->trace(m_storageManager);
HeapSupplement<WorkerNavigator>::trace(visitor); HeapSupplement<WorkerNavigator>::trace(visitor);
} }
......
...@@ -39,6 +39,8 @@ ...@@ -39,6 +39,8 @@
namespace blink { namespace blink {
class StorageManager;
class WorkerNavigatorStorageQuota final : public GarbageCollected<WorkerNavigatorStorageQuota>, public HeapSupplement<WorkerNavigator> { class WorkerNavigatorStorageQuota final : public GarbageCollected<WorkerNavigatorStorageQuota>, public HeapSupplement<WorkerNavigator> {
USING_GARBAGE_COLLECTED_MIXIN(WorkerNavigatorStorageQuota); USING_GARBAGE_COLLECTED_MIXIN(WorkerNavigatorStorageQuota);
public: public:
...@@ -46,8 +48,11 @@ public: ...@@ -46,8 +48,11 @@ public:
static DeprecatedStorageQuota* webkitTemporaryStorage(WorkerNavigator&); static DeprecatedStorageQuota* webkitTemporaryStorage(WorkerNavigator&);
static DeprecatedStorageQuota* webkitPersistentStorage(WorkerNavigator&); static DeprecatedStorageQuota* webkitPersistentStorage(WorkerNavigator&);
static StorageManager* storage(WorkerNavigator&);
DeprecatedStorageQuota* webkitTemporaryStorage() const; DeprecatedStorageQuota* webkitTemporaryStorage() const;
DeprecatedStorageQuota* webkitPersistentStorage() const; DeprecatedStorageQuota* webkitPersistentStorage() const;
StorageManager* storage() const;
DECLARE_VIRTUAL_TRACE(); DECLARE_VIRTUAL_TRACE();
...@@ -57,6 +62,7 @@ private: ...@@ -57,6 +62,7 @@ private:
mutable Member<DeprecatedStorageQuota> m_temporaryStorage; mutable Member<DeprecatedStorageQuota> m_temporaryStorage;
mutable Member<DeprecatedStorageQuota> m_persistentStorage; mutable Member<DeprecatedStorageQuota> m_persistentStorage;
mutable Member<StorageManager> m_storageManager;
}; };
} // namespace blink } // namespace blink
......
...@@ -17,7 +17,13 @@ ...@@ -17,7 +17,13 @@
* Boston, MA 02110-1301, USA. * Boston, MA 02110-1301, USA.
*/ */
// This partial interface is a merge of two different partial interfaces
// related to storage.
partial interface WorkerNavigator { partial interface WorkerNavigator {
// http://www.w3.org/TR/2012/WD-quota-api-20120703/#idl-def-StorageQuotaEnvironment
[MeasureAs=PrefixedStorageQuota] readonly attribute DeprecatedStorageQuota webkitTemporaryStorage; [MeasureAs=PrefixedStorageQuota] readonly attribute DeprecatedStorageQuota webkitTemporaryStorage;
[MeasureAs=PrefixedStorageQuota] readonly attribute DeprecatedStorageQuota webkitPersistentStorage; [MeasureAs=PrefixedStorageQuota] readonly attribute DeprecatedStorageQuota webkitPersistentStorage;
// https://storage.spec.whatwg.org/#api
[RuntimeEnabled=DurableStorage] readonly attribute StorageManager storage;
}; };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment