forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			72 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* 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/. */
 | 
						|
 | 
						|
// We never want to directly read or write these attributes.
 | 
						|
// 'image' should not be accessed directly but handled by using the
 | 
						|
//         gBrowser.getIcon()/setIcon() methods.
 | 
						|
// 'muted' should not be accessed directly but handled by using the
 | 
						|
//         tab.linkedBrowser.audioMuted/toggleMuteAudio methods.
 | 
						|
// 'pending' is used internal by sessionstore and managed accordingly.
 | 
						|
const ATTRIBUTES_TO_SKIP = new Set([
 | 
						|
  "image",
 | 
						|
  "muted",
 | 
						|
  "pending",
 | 
						|
  "skipbackgroundnotify",
 | 
						|
]);
 | 
						|
 | 
						|
// A set of tab attributes to persist. We will read a given list of tab
 | 
						|
// attributes when collecting tab data and will re-set those attributes when
 | 
						|
// the given tab data is restored to a new tab.
 | 
						|
export var TabAttributes = Object.freeze({
 | 
						|
  persist(name) {
 | 
						|
    return TabAttributesInternal.persist(name);
 | 
						|
  },
 | 
						|
 | 
						|
  get(tab) {
 | 
						|
    return TabAttributesInternal.get(tab);
 | 
						|
  },
 | 
						|
 | 
						|
  set(tab, data = {}) {
 | 
						|
    TabAttributesInternal.set(tab, data);
 | 
						|
  },
 | 
						|
});
 | 
						|
 | 
						|
var TabAttributesInternal = {
 | 
						|
  _attrs: new Set(),
 | 
						|
 | 
						|
  persist(name) {
 | 
						|
    if (this._attrs.has(name) || ATTRIBUTES_TO_SKIP.has(name)) {
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
 | 
						|
    this._attrs.add(name);
 | 
						|
    return true;
 | 
						|
  },
 | 
						|
 | 
						|
  get(tab) {
 | 
						|
    let data = {};
 | 
						|
 | 
						|
    for (let name of this._attrs) {
 | 
						|
      if (tab.hasAttribute(name)) {
 | 
						|
        data[name] = tab.getAttribute(name);
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    return data;
 | 
						|
  },
 | 
						|
 | 
						|
  set(tab, data = {}) {
 | 
						|
    // Clear attributes.
 | 
						|
    for (let name of this._attrs) {
 | 
						|
      tab.removeAttribute(name);
 | 
						|
    }
 | 
						|
 | 
						|
    // Set attributes.
 | 
						|
    for (let [name, value] of Object.entries(data)) {
 | 
						|
      if (!ATTRIBUTES_TO_SKIP.has(name)) {
 | 
						|
        tab.setAttribute(name, value);
 | 
						|
      }
 | 
						|
    }
 | 
						|
  },
 | 
						|
};
 |