Skip to content

Commit 7258f38

Browse files
committed
Store very large HTML as a blob #3434
1 parent dc3b45b commit 7258f38

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

webextensions/common/constants.js

+2
Original file line numberDiff line numberDiff line change
@@ -240,12 +240,14 @@ export const kWINDOW_STATE_SUBPANEL_HEIGHT = 'subpanel-height';
240240
export const kWINDOW_STATE_SUBPANEL_EFFECTIVE_HEIGHT = 'subpanel-effective-height';
241241
export const kWINDOW_STATE_CACHED_TABS = 'cached-tabs';
242242
export const kWINDOW_STATE_CACHED_SIDEBAR = 'cached-sidebar-contents';
243+
export const kWINDOW_STATE_CACHED_SIDEBAR_CONTENTS = 'cached-sidebar-contents:contents';
243244
export const kWINDOW_STATE_CACHED_SIDEBAR_TABS_DIRTY = 'cached-sidebar-contents:tabs-dirty';
244245
export const kWINDOW_STATE_CACHED_SIDEBAR_COLLAPSED_DIRTY = 'cached-sidebar-contents:collapsed-dirty';
245246

246247
export const kCACHE_KEYS = [
247248
kWINDOW_STATE_CACHED_TABS,
248249
kWINDOW_STATE_CACHED_SIDEBAR,
250+
kWINDOW_STATE_CACHED_SIDEBAR_CONTENTS,
249251
kWINDOW_STATE_CACHED_SIDEBAR_TABS_DIRTY,
250252
kWINDOW_STATE_CACHED_SIDEBAR_COLLAPSED_DIRTY,
251253
];

webextensions/sidebar/sidebar-cache.js

+15-2
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ async function preload(tab) {
8686
mTargetWindow = tab.windowId;
8787
const cache = await MetricsData.addAsync('preload: reading window cache', Promise.all([
8888
getWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR),
89+
getWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR_CONTENTS),
8990
getWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR_TABS_DIRTY),
9091
getWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR_COLLAPSED_DIRTY),
9192
]).catch(ApiTabs.createErrorSuppressor()));
@@ -97,6 +98,7 @@ export async function getEffectiveWindowCache(options = {}) {
9798
log('getEffectiveWindowCache: start');
9899
cancelReservedUpdateCachedTabbar(); // prevent to break cache before loading
99100
let cache;
101+
let cachedContents;
100102
let cachedSignature;
101103
let actualSignature;
102104
await Promise.all([
@@ -109,12 +111,19 @@ export async function getEffectiveWindowCache(options = {}) {
109111
// [cache, const tabsDirty, const collapsedDirty] = await Promise.all([
110112
let tabsDirty, collapsedDirty;
111113
const preloadedCache = mPreloadedCaches.get(`window${mLastWindowCacheOwner.windowId}`);
112-
[cache, tabsDirty, collapsedDirty] = preloadedCache || await MetricsData.addAsync('getEffectiveWindowCache: reading window cache', Promise.all([
114+
[cache, cachedContents, tabsDirty, collapsedDirty] = preloadedCache || await MetricsData.addAsync('getEffectiveWindowCache: reading window cache', Promise.all([
113115
getWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR),
116+
getWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR_CONTENTS),
114117
getWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR_TABS_DIRTY),
115118
getWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR_COLLAPSED_DIRTY)
116119
]));
117120
mPreloadedCaches.clear();
121+
if (cache && cache.tabbar && cachedContents) {
122+
const contents = await cachedContents.text();
123+
const versionPart = contents.match(/^version=(\d+)\n/);
124+
if (versionPart && versionPart[1] == cache.version)
125+
cache.tabbar.contents = contents.replace(/^version=(\d+)\n/, '');
126+
}
118127
cachedSignature = cache && cache.signature;
119128
log(`getEffectiveWindowCache: got from the owner `, mLastWindowCacheOwner, {
120129
cachedSignature, cache, tabsDirty, collapsedDirty
@@ -467,6 +476,7 @@ function clearWindowCache() {
467476
if (!configs.persistCachedTree)
468477
clearPersistentWindowCache();
469478
updateWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR);
479+
updateWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR_CONTENTS);
470480
updateWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR_TABS_DIRTY);
471481
updateWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR_COLLAPSED_DIRTY);
472482
}
@@ -557,13 +567,16 @@ async function updateCachedTabbar() {
557567
updateWindowCache(Constants.kWINDOW_STATE_CACHED_SIDEBAR, {
558568
version: kCONTENTS_VERSION,
559569
tabbar: {
560-
contents: SidebarTabs.wholeContainer.innerHTML,
561570
style: mTabBar.getAttribute('style'),
562571
pinnedTabsCount: Tab.getPinnedTabs(mTargetWindow).length
563572
},
564573
indent: Indent.getCacheInfo(),
565574
signature
566575
});
576+
updateWindowCache(
577+
Constants.kWINDOW_STATE_CACHED_SIDEBAR_CONTENTS,
578+
new Blob([`version=${kCONTENTS_VERSION}\n${SidebarTabs.wholeContainer.innerHTML}`])
579+
);
567580
}
568581

569582

0 commit comments

Comments
 (0)