mirror of
https://github.com/servo/servo.git
synced 2025-09-27 23:30:08 +01:00
Switch indexeddb backend to sqlite and improve IPC messaging (#38187)
- Use sqlite instead of heed. (one indexed database = one sqlite database) - Implement the backend for indexes - Use keyranges where needed (as specified by the spec) - Implement `getKey` - Fix channel error messaging (led to a bunch of changes to how async requests are handled) Note: `components/net/indexeddb/engines/sqlite/serialize.rs` is unused; I can delete it if needed. Testing: Switching to sqlite eliminated many panics (exposing some new failures). Fixes: #38040 --------- Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
This commit is contained in:
parent
f4bbdf8010
commit
fc3feceee5
59 changed files with 2002 additions and 818 deletions
|
@ -5,6 +5,7 @@
|
|||
use std::iter::repeat;
|
||||
use std::ptr;
|
||||
|
||||
use ipc_channel::ipc::IpcSender;
|
||||
use js::conversions::jsstr_to_string;
|
||||
use js::gc::MutableHandle;
|
||||
use js::jsapi::{
|
||||
|
@ -14,17 +15,31 @@ use js::jsapi::{
|
|||
};
|
||||
use js::jsval::{DoubleValue, UndefinedValue};
|
||||
use js::rust::{HandleValue, MutableHandleValue};
|
||||
use net_traits::indexeddb_thread::{IndexedDBKeyRange, IndexedDBKeyType};
|
||||
use net_traits::indexeddb_thread::{BackendResult, IndexedDBKeyRange, IndexedDBKeyType};
|
||||
use profile_traits::ipc;
|
||||
use profile_traits::ipc::IpcReceiver;
|
||||
use script_bindings::conversions::{SafeToJSValConvertible, root_from_object};
|
||||
use script_bindings::root::DomRoot;
|
||||
use script_bindings::str::DOMString;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::dom::bindings::codegen::UnionTypes::StringOrStringSequence as StrOrStringSequence;
|
||||
use crate::dom::bindings::error::Error;
|
||||
use crate::dom::bindings::import::module::SafeJSContext;
|
||||
use crate::dom::bindings::structuredclone;
|
||||
use crate::dom::globalscope::GlobalScope;
|
||||
use crate::dom::idbkeyrange::IDBKeyRange;
|
||||
use crate::dom::idbobjectstore::KeyPath;
|
||||
|
||||
pub fn create_channel<T>(
|
||||
global: DomRoot<GlobalScope>,
|
||||
) -> (IpcSender<BackendResult<T>>, IpcReceiver<BackendResult<T>>)
|
||||
where
|
||||
T: for<'a> Deserialize<'a> + Serialize,
|
||||
{
|
||||
ipc::channel::<BackendResult<T>>(global.time_profiler_chan().clone()).unwrap()
|
||||
}
|
||||
|
||||
// https://www.w3.org/TR/IndexedDB-2/#convert-key-to-value
|
||||
#[allow(unsafe_code)]
|
||||
pub fn key_type_to_jsval(
|
||||
|
@ -147,7 +162,6 @@ pub fn convert_value_to_key(
|
|||
|
||||
// https://www.w3.org/TR/IndexedDB-2/#convert-a-value-to-a-key-range
|
||||
#[allow(unsafe_code)]
|
||||
#[expect(unused)]
|
||||
pub fn convert_value_to_key_range(
|
||||
cx: SafeJSContext,
|
||||
input: HandleValue,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue