From 30ad91b59562ffece809b3ae3b786be29f923f0d Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Fri, 20 Jun 2025 06:06:56 -0400 Subject: [PATCH] net: Avoid all-encompassing synchronous IPC return type for IndexedDB operations (#37576) This is finishing some incomplete cleanup from #33044. Kitchen sink enum types like IndexedDBThreadReturnType make code harder to read and require ignoring variants that will never be sent in many cases. Testing: No behaviour change; existing WPT tests suffice. Fixes: part of #6963 Signed-off-by: Josh Matthews --- components/net/indexeddb/idb_thread.rs | 12 ++++-------- components/script/dom/idbtransaction.rs | 7 ++++--- components/shared/net/indexeddb_thread.rs | 19 +++---------------- 3 files changed, 11 insertions(+), 27 deletions(-) diff --git a/components/net/indexeddb/idb_thread.rs b/components/net/indexeddb/idb_thread.rs index b47e03330ae..fcf8f875f88 100644 --- a/components/net/indexeddb/idb_thread.rs +++ b/components/net/indexeddb/idb_thread.rs @@ -11,7 +11,7 @@ use std::thread; use ipc_channel::ipc::{self, IpcError, IpcReceiver, IpcSender}; use log::{debug, warn}; use net_traits::indexeddb_thread::{ - AsyncOperation, IndexedDBThreadMsg, IndexedDBThreadReturnType, IndexedDBTxnMode, SyncOperation, + AsyncOperation, IndexedDBThreadMsg, IndexedDBTxnMode, SyncOperation, }; use servo_config::pref; use servo_url::origin::ImmutableOrigin; @@ -315,9 +315,7 @@ impl IndexedDBManager { }, SyncOperation::Commit(sender, _origin, _db_name, _txn) => { // FIXME:(arihant2math) This does nothing at the moment - sender - .send(IndexedDBThreadReturnType::Commit(Err(()))) - .expect("Could not send commit status"); + sender.send(Err(())).expect("Could not send commit status"); }, SyncOperation::UpgradeVersion(sender, origin, db_name, _txn, version) => { if let Some(db) = self.get_database_mut(origin, db_name) { @@ -327,9 +325,7 @@ impl IndexedDBManager { // FIXME:(arihant2math) Get the version from the database instead // We never fail as of now, so we can just return it like this // for now... - sender - .send(IndexedDBThreadReturnType::UpgradeVersion(Ok(version))) - .expect("Could not upgrade version"); + sender.send(Ok(version)).expect("Could not upgrade version"); }, SyncOperation::CreateObjectStore( sender, @@ -367,7 +363,7 @@ impl IndexedDBManager { }, SyncOperation::Exit(sender) => { // FIXME:(rasviitanen) Nothing to do? - let _ = sender.send(IndexedDBThreadReturnType::Exit); + let _ = sender.send(()); }, } } diff --git a/components/script/dom/idbtransaction.rs b/components/script/dom/idbtransaction.rs index 46d72701234..deea1e5a5e0 100644 --- a/components/script/dom/idbtransaction.rs +++ b/components/script/dom/idbtransaction.rs @@ -8,7 +8,7 @@ use std::collections::HashMap; use dom_struct::dom_struct; use ipc_channel::ipc::IpcSender; use net_traits::IpcSend; -use net_traits::indexeddb_thread::{IndexedDBThreadMsg, IndexedDBThreadReturnType, SyncOperation}; +use net_traits::indexeddb_thread::{IndexedDBThreadMsg, SyncOperation}; use profile_traits::ipc; use stylo_atoms::Atom; @@ -178,7 +178,8 @@ impl IDBTransaction { .send(IndexedDBThreadMsg::Sync(upgrade_version_operation)) .unwrap(); // Wait for the version to be updated - receiver.recv().unwrap(); + // TODO(jdm): This returns a Result; what do we do with an error? + let _ = receiver.recv().unwrap(); } fn dispatch_complete(&self) { @@ -260,7 +261,7 @@ impl IDBTransactionMethods for IDBTransaction { let result = receiver.recv().unwrap(); // Step 2 - if let IndexedDBThreadReturnType::Commit(Err(_result)) = result { + if let Err(_result) = result { // FIXME:(rasviitanen) also support Unknown error return Err(Error::QuotaExceeded); } diff --git a/components/shared/net/indexeddb_thread.rs b/components/shared/net/indexeddb_thread.rs index 4c5243c237b..8d946651eff 100644 --- a/components/shared/net/indexeddb_thread.rs +++ b/components/shared/net/indexeddb_thread.rs @@ -6,19 +6,6 @@ use ipc_channel::ipc::IpcSender; use serde::{Deserialize, Serialize}; use servo_url::origin::ImmutableOrigin; -#[derive(Debug, Deserialize, Serialize)] -pub enum IndexedDBThreadReturnType { - Open(Option), - NextSerialNumber(u64), - StartTransaction(Result<(), ()>), - Commit(Result<(), ()>), - Version(u64), - CreateObjectStore(Option), - UpgradeVersion(Result), - KVResult(Option>), - Exit, -} - // https://www.w3.org/TR/IndexedDB-2/#enumdef-idbtransactionmode #[derive(Debug, Deserialize, Serialize)] pub enum IndexedDBTxnMode { @@ -72,7 +59,7 @@ pub enum AsyncOperation { pub enum SyncOperation { // Upgrades the version of the database UpgradeVersion( - IpcSender, + IpcSender>, ImmutableOrigin, String, // Database u64, // Serial number for the transaction @@ -88,7 +75,7 @@ pub enum SyncOperation { // Commits changes of a transaction to the database Commit( - IpcSender, + IpcSender>, ImmutableOrigin, String, // Database u64, // Transaction serial number @@ -155,7 +142,7 @@ pub enum SyncOperation { ), /// Send a reply when done cleaning up thread resources and then shut it down - Exit(IpcSender), + Exit(IpcSender<()>), } #[derive(Debug, Deserialize, Serialize)]