ソースを参照

split onTabReplaced

Gildas 3 年 前
コミット
ed5900f3cf

+ 0 - 6
src/extension/core/bg/autosave.js

@@ -103,12 +103,6 @@ async function onTabReplaced(addedTabId, removedTabId) {
 		delete pendingMessages[removedTabId];
 		replacedTabIds[removedTabId] = addedTabId;
 	}
-	const allTabsData = await tabsData.get();
-	if (allTabsData[removedTabId] && !allTabsData[addedTabId]) {
-		allTabsData[addedTabId] = allTabsData[removedTabId];
-		delete allTabsData[removedTabId];
-		await tabsData.set(allTabsData);
-	}
 }
 
 async function onMessageExternal(message, currentTab) {

+ 17 - 2
src/extension/core/bg/business.js

@@ -58,6 +58,7 @@ export {
 	setCancelCallback,
 	onSaveEnd,
 	onInit,
+	onTabReplaced,
 	cancelTab as onTabRemoved
 };
 
@@ -117,11 +118,17 @@ async function saveTabs(tabs, options = {}) {
 		if (tabOptions.passReferrerOnError) {
 			await requests.enableReferrerOnError();
 		}
+		const tabData = {
+			id: tab.id,
+			index: tab.index,
+			url: tab.url,
+			title: tab.title
+		};
 		if (options.autoSave) {
 			if (autoSaveIsEnabled(tab)) {
 				const taskInfo = addTask({
 					status: TASK_PROCESSING_STATE,
-					tab,
+					tab: tabData,
 					options: tabOptions,
 					method: "content.autosave"
 				});
@@ -134,7 +141,7 @@ async function saveTabs(tabs, options = {}) {
 				ui.onStart(tabId, EXECUTE_SCRIPTS_STEP);
 				addTask({
 					status: TASK_PENDING_STATE,
-					tab,
+					tab: tabData,
 					options: tabOptions,
 					method: "content.save"
 				});
@@ -231,6 +238,14 @@ function onInit(tab) {
 	cancelTab(tab.id);
 }
 
+function onTabReplaced(addedTabId, removedTabId) {
+	tasks.forEach(taskInfo => {
+		if (taskInfo.tab.id == removedTabId) {
+			taskInfo.tab.id = addedTabId;
+		}
+	});
+}
+
 function onSaveEnd(taskId) {
 	const taskInfo = tasks.find(taskInfo => taskInfo.id == taskId);
 	if (taskInfo) {

+ 15 - 0
src/extension/core/bg/tabs-data.js

@@ -30,6 +30,7 @@ export {
 	getTemporary,
 	getPersistent as get,
 	setPersistent as set,
+	onTabReplaced,
 	remove
 };
 
@@ -42,6 +43,20 @@ function onMessage(message) {
 	}
 }
 
+async function onTabReplaced(addedTabId, removedTabId) {
+	let tabsData = await getPersistent();
+	await updateTabsData(tabsData, addedTabId, removedTabId);
+	setPersistent(tabsData);
+	await updateTabsData(temporaryData, addedTabId, removedTabId);
+}
+
+async function updateTabsData(tabsData, addedTabId, removedTabId) {
+	if (tabsData[removedTabId] && !tabsData[addedTabId]) {
+		tabsData[addedTabId] = tabsData[removedTabId];
+		delete tabsData[removedTabId];
+	}
+}
+
 async function remove(tabId) {
 	if (temporaryData) {
 		delete temporaryData[tabId];

+ 2 - 0
src/extension/core/bg/tabs.js

@@ -88,7 +88,9 @@ async function onTabUpdated(tabId, changeInfo) {
 }
 
 function onTabReplaced(addedTabId, removedTabId) {
+	tabsData.onTabReplaced(addedTabId, removedTabId);
 	autosave.onTabReplaced(addedTabId, removedTabId);
+	business.onTabReplaced(addedTabId, removedTabId);
 }
 
 function onTabCreated(tab) {