Files
tubestation/addon-sdk/source/lib/sdk/tabs/tab-fennec.js

151 lines
4.2 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/. */
'use strict';
const { Cc, Ci } = require('chrome');
const { Class } = require('../core/heritage');
const { tabNS } = require('./namespace');
const { EventTarget } = require('../event/target');
const { activateTab, getTabTitle, setTabTitle, closeTab, getTabURL, getContentWindowForTab,
setTabURL, getOwnerWindow, getTabContentType, getTabId } = require('./utils');
const { emit } = require('../event/core');
const { getOwnerWindow: getPBOwnerWindow } = require('../private-browsing/window/utils');
const { when: unload } = require('../system/unload');
const { EVENTS } = require('./events');
const ERR_FENNEC_MSG = 'This method is not yet supported by Fennec';
const Tab = Class({
extends: EventTarget,
initialize: function initialize(options) {
options = options.tab ? options : { tab: options };
EventTarget.prototype.initialize.call(this, options);
let tabInternals = tabNS(this);
tabInternals.window = options.window || getOwnerWindow(options.tab);
tabInternals.tab = options.tab;
},
/**
* The title of the page currently loaded in the tab.
* Changing this property changes an actual title.
* @type {String}
*/
get title() getTabTitle(tabNS(this).tab),
set title(title) setTabTitle(tabNS(this).tab, title),
/**
* Location of the page currently loaded in this tab.
* Changing this property will loads page under under the specified location.
* @type {String}
*/
get url() getTabURL(tabNS(this).tab),
set url(url) setTabURL(tabNS(this).tab, url),
/**
* URI of the favicon for the page currently loaded in this tab.
* @type {String}
*/
get favicon() {
// TODO: provide the real favicon when it is available
console.error(ERR_FENNEC_MSG);
// return 16x16 blank default
return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAEklEQVQ4jWNgGAWjYBSMAggAAAQQAAF/TXiOAAAAAElFTkSuQmCC';
},
getThumbnail: function() {
// TODO: implement!
console.error(ERR_FENNEC_MSG);
// return 80x45 blank default
return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAtCAYAAAA5reyyAAAAJElEQVRoge3BAQEAAACCIP+vbkhAAQAAAAAAAAAAAAAAAADXBjhtAAGQ0AF/AAAAAElFTkSuQmCC';
},
get id() {
return getTabId(tabNS(this).tab);
},
/**
* The index of the tab relative to other tabs in the application window.
* Changing this property will change order of the actual position of the tab.
* @type {Number}
*/
get index() {
let tabs = tabNS(this).window.BrowserApp.tabs;
let tab = tabNS(this).tab;
for (var i = tabs.length; i >= 0; i--) {
if (tabs[i] === tab)
return i;
}
return null;
},
set index(value) {
console.error(ERR_FENNEC_MSG); // TODO
},
/**
* Whether or not tab is pinned (Is an app-tab).
* @type {Boolean}
*/
get isPinned() {
console.error(ERR_FENNEC_MSG); // TODO
return false; // TODO
},
pin: function pin() {
console.error(ERR_FENNEC_MSG); // TODO
},
unpin: function unpin() {
console.error(ERR_FENNEC_MSG); // TODO
},
/**
* Returns the MIME type that the document loaded in the tab is being
* rendered as.
* @type {String}
*/
get contentType() getTabContentType(tabNS(this).tab),
/**
* Create a worker for this tab, first argument is options given to Worker.
* @type {Worker}
*/
attach: function attach(options) {
// BUG 792946 https://bugzilla.mozilla.org/show_bug.cgi?id=792946
// TODO: fix this circular dependency
let { Worker } = require('./worker');
return Worker(options, tabNS(this).tab.browser.contentWindow);
},
/**
* Make this tab active.
*/
activate: function activate() {
activateTab(tabNS(this).tab, tabNS(this).window);
},
/**
* Close the tab
*/
close: function close(callback) {
if (callback)
this.once(EVENTS.close.name, callback);
closeTab(tabNS(this).tab);
},
/**
* Reload the tab
*/
reload: function reload() {
tabNS(this).tab.browser.reload();
}
});
exports.Tab = Tab;
getPBOwnerWindow.define(Tab, function(tab) {
return getContentWindowForTab(tabNS(tab).tab);
});