diff --git a/ext/webstorage/01_webstorage.js b/ext/webstorage/01_webstorage.js
index 19aca532a08c11..12abea8387ca3b 100644
--- a/ext/webstorage/01_webstorage.js
+++ b/ext/webstorage/01_webstorage.js
@@ -3,7 +3,7 @@
///
import { primordials } from "ext:core/mod.js";
-import { Storage } from "ext:core/ops";
+import { op_webstorage_iterate_keys, Storage } from "ext:core/ops";
const {
SymbolFor,
ObjectFromEntries,
@@ -69,7 +69,7 @@ function createStorage(persistent) {
},
ownKeys() {
- return storage.iterateKeys();
+ return op_webstorage_iterate_keys(storage);
},
getOwnPropertyDescriptor(target, key) {
diff --git a/ext/webstorage/lib.rs b/ext/webstorage/lib.rs
index 149e1f83ea20f1..c3e4c465969ed3 100644
--- a/ext/webstorage/lib.rs
+++ b/ext/webstorage/lib.rs
@@ -32,6 +32,9 @@ const MAX_STORAGE_BYTES: usize = 10 * 1024 * 1024;
deno_core::extension!(deno_webstorage,
deps = [ deno_webidl ],
+ ops = [
+ op_webstorage_iterate_keys,
+ ],
objects = [
Storage
],
@@ -224,21 +227,21 @@ impl Storage {
Ok(())
}
+}
- #[method]
- #[serde]
- fn iterate_keys(
- &self,
- state: &mut OpState,
- ) -> Result, WebStorageError> {
- let conn = get_webstorage(state, self.persistent)?;
+#[op2]
+#[serde]
+fn op_webstorage_iterate_keys(
+ #[cppgc] storage: &Storage,
+ state: &mut OpState,
+) -> Result, WebStorageError> {
+ let conn = get_webstorage(state, storage.persistent)?;
- let mut stmt = conn.prepare_cached("SELECT key FROM data")?;
- let keys = stmt
- .query_map(params![], |row| row.get::<_, String>(0))?
- .map(|r| r.unwrap())
- .collect();
+ let mut stmt = conn.prepare_cached("SELECT key FROM data")?;
+ let keys = stmt
+ .query_map(params![], |row| row.get::<_, String>(0))?
+ .map(|r| r.unwrap())
+ .collect();
- Ok(keys)
- }
+ Ok(keys)
}