summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/TabStateCache.jsm
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@gmail.com>2018-06-04 13:17:38 +0200
committerwolfbeast <mcwerewolf@gmail.com>2018-06-04 13:17:38 +0200
commita1be17c1cea81ebb1e8b131a662c698d78f3f7f2 (patch)
treea92f7de513be600cc07bac458183e9af40e00c06 /browser/components/sessionstore/TabStateCache.jsm
parentbf11fdd304898ac675e39b01b280d39550e419d0 (diff)
downloadUXP-a1be17c1cea81ebb1e8b131a662c698d78f3f7f2.tar
UXP-a1be17c1cea81ebb1e8b131a662c698d78f3f7f2.tar.gz
UXP-a1be17c1cea81ebb1e8b131a662c698d78f3f7f2.tar.lz
UXP-a1be17c1cea81ebb1e8b131a662c698d78f3f7f2.tar.xz
UXP-a1be17c1cea81ebb1e8b131a662c698d78f3f7f2.zip
Issue #303 Part 1: Move basilisk files from /browser to /application/basilisk
Diffstat (limited to 'browser/components/sessionstore/TabStateCache.jsm')
-rw-r--r--browser/components/sessionstore/TabStateCache.jsm163
1 files changed, 0 insertions, 163 deletions
diff --git a/browser/components/sessionstore/TabStateCache.jsm b/browser/components/sessionstore/TabStateCache.jsm
deleted file mode 100644
index 9bed315a0..000000000
--- a/browser/components/sessionstore/TabStateCache.jsm
+++ /dev/null
@@ -1,163 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-this.EXPORTED_SYMBOLS = ["TabStateCache"];
-
-/**
- * A cache for tabs data.
- *
- * This cache implements a weak map from tabs (as XUL elements)
- * to tab data (as objects).
- *
- * Note that we should never cache private data, as:
- * - that data is used very seldom by SessionStore;
- * - caching private data in addition to public data is memory consuming.
- */
-this.TabStateCache = Object.freeze({
- /**
- * Retrieves cached data for a given |tab| or associated |browser|.
- *
- * @param browserOrTab (xul:tab or xul:browser)
- * The tab or browser to retrieve cached data for.
- * @return (object)
- * The cached data stored for the given |tab|
- * or associated |browser|.
- */
- get: function (browserOrTab) {
- return TabStateCacheInternal.get(browserOrTab);
- },
-
- /**
- * Updates cached data for a given |tab| or associated |browser|.
- *
- * @param browserOrTab (xul:tab or xul:browser)
- * The tab or browser belonging to the given tab data.
- * @param newData (object)
- * The new data to be stored for the given |tab|
- * or associated |browser|.
- */
- update: function (browserOrTab, newData) {
- TabStateCacheInternal.update(browserOrTab, newData);
- }
-});
-
-var TabStateCacheInternal = {
- _data: new WeakMap(),
-
- /**
- * Retrieves cached data for a given |tab| or associated |browser|.
- *
- * @param browserOrTab (xul:tab or xul:browser)
- * The tab or browser to retrieve cached data for.
- * @return (object)
- * The cached data stored for the given |tab|
- * or associated |browser|.
- */
- get: function (browserOrTab) {
- return this._data.get(browserOrTab.permanentKey);
- },
-
- /**
- * Helper function used by update (see below). For message size
- * optimization sometimes we don't update the whole session storage
- * only the values that have been changed.
- *
- * @param data (object)
- * The cached data where we want to update the changes.
- * @param change (object)
- * The actual changed values per domain.
- */
- updatePartialStorageChange: function (data, change) {
- if (!data.storage) {
- data.storage = {};
- }
-
- let storage = data.storage;
- for (let domain of Object.keys(change)) {
- for (let key of Object.keys(change[domain])) {
- let value = change[domain][key];
- if (value === null) {
- if (storage[domain] && storage[domain][key]) {
- delete storage[domain][key];
- }
- } else {
- if (!storage[domain]) {
- storage[domain] = {};
- }
- storage[domain][key] = value;
- }
- }
- }
- },
-
- /**
- * Helper function used by update (see below). For message size
- * optimization sometimes we don't update the whole browser history
- * only the current index and the tail of the history from a certain
- * index (specified by change.fromIdx)
- *
- * @param data (object)
- * The cached data where we want to update the changes.
- * @param change (object)
- * Object containing the tail of the history array, and
- * some additional metadata.
- */
- updatePartialHistoryChange: function (data, change) {
- const kLastIndex = Number.MAX_SAFE_INTEGER - 1;
-
- if (!data.history) {
- data.history = { entries: [] };
- }
-
- let history = data.history;
- for (let key of Object.keys(change)) {
- if (key == "entries") {
- if (change.fromIdx != kLastIndex) {
- history.entries.splice(change.fromIdx + 1);
- while (change.entries.length) {
- history.entries.push(change.entries.shift());
- }
- }
- } else if (key != "fromIndex") {
- history[key] = change[key];
- }
- }
- },
-
- /**
- * Updates cached data for a given |tab| or associated |browser|.
- *
- * @param browserOrTab (xul:tab or xul:browser)
- * The tab or browser belonging to the given tab data.
- * @param newData (object)
- * The new data to be stored for the given |tab|
- * or associated |browser|.
- */
- update: function (browserOrTab, newData) {
- let data = this._data.get(browserOrTab.permanentKey) || {};
-
- for (let key of Object.keys(newData)) {
- if (key == "storagechange") {
- this.updatePartialStorageChange(data, newData.storagechange);
- continue;
- }
-
- if (key == "historychange") {
- this.updatePartialHistoryChange(data, newData.historychange);
- continue;
- }
-
- let value = newData[key];
- if (value === null) {
- delete data[key];
- } else {
- data[key] = value;
- }
- }
-
- this._data.set(browserOrTab.permanentKey, data);
- }
-};