Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
121 lines
4 KiB
JavaScript
Executable file
121 lines
4 KiB
JavaScript
Executable file
'use strict';
|
|
|
|
/**
|
|
* Define a basic mozbrowser iframe class.
|
|
* It creates a mozbrowser iframe,
|
|
* and finally returns the DOM element it just created.
|
|
*
|
|
* The BrowserFrame instance has a 'element' field,
|
|
* which is the mozbrowser iframe it generated or converted to.
|
|
*
|
|
* @param {Object} config
|
|
* The configuration object generated by BrowserConfig.
|
|
* @param {DOMIFRAMEElement} [frame]
|
|
* The existing frame to be converted to mozbrowsr iframe.
|
|
* @class BrowserFrame
|
|
*/
|
|
|
|
(function(exports) {
|
|
var nextId = 0;
|
|
var BrowserFrame = function BrowserFrame() {
|
|
this.element = null;
|
|
this._id = nextId++;
|
|
// All arguments are values to createFrame
|
|
createFrame.apply(this, arguments);
|
|
return this;
|
|
};
|
|
|
|
BrowserFrame.prototype.CLASS_NAME = 'browser';
|
|
|
|
// These are helper functions and variables used by the methods above
|
|
// They're not part of the public API of the module, but they're hidden
|
|
// within this function scope so we don't have to define them as a
|
|
// property of Browser or prefix them with underscores.
|
|
function createFrame(config, frame) {
|
|
var browser = frame || document.createElement('iframe');
|
|
|
|
// Most apps currently need to be hosted in a special 'mozbrowser' iframe.
|
|
// They also need to be marked as 'mozapp' to be recognized as apps by the
|
|
// platform.
|
|
browser.setAttribute('mozbrowser', 'true');
|
|
|
|
// Give a name to the frame for differentiating between main frame and
|
|
// inline frame. With the name we can get frames of the same app using the
|
|
// window.open method.
|
|
browser.name = config.window_name || 'main';
|
|
|
|
if (config.oop) {
|
|
browser.setAttribute('remote', 'true');
|
|
}
|
|
|
|
if (config.isPrivate && !config.isMockPrivate) {
|
|
browser.setAttribute('mozprivatebrowsing', 'true');
|
|
}
|
|
|
|
if (config.manifestURL) {
|
|
browser.setAttribute('mozapp', config.manifestURL);
|
|
|
|
// Only app with manifest could get system message.
|
|
if (config.isSystemMessage) {
|
|
browser.setAttribute('expecting-system-message',
|
|
'expecting-system-message');
|
|
}
|
|
}
|
|
|
|
if (config.parentApp) {
|
|
browser.setAttribute('parentapp', config.parentApp);
|
|
}
|
|
|
|
if (config.isInputMethod) {
|
|
browser.setAttribute('mozpasspointerevents', 'true');
|
|
browser.setAttribute('ignoreuserfocus', 'true');
|
|
} else {
|
|
browser.setAttribute('mozallowfullscreen', 'true');
|
|
}
|
|
|
|
setMozAppType(browser, config);
|
|
|
|
if (config.url) {
|
|
browser.src = config.url;
|
|
// XXX: This one is for some failing python tests using
|
|
// iframe[data-url*=XXX] to locate. But we shall change it later.
|
|
browser.dataset.url = config.url;
|
|
}
|
|
|
|
/*jshint validthis: true */
|
|
browser.id = this.CLASS_NAME + this._id;
|
|
|
|
browser.classList.add(this.CLASS_NAME);
|
|
|
|
this.config = config;
|
|
|
|
this.element = browser;
|
|
}
|
|
|
|
function setMozAppType(iframe, config) {
|
|
// XXX: Those urls needs to be built dynamically.
|
|
if (config.url.startsWith(window.location.protocol +
|
|
'//callscreen.gaiamobile.org') ||
|
|
config.url.startsWith(window.location.protocol +
|
|
'//clock.gaiamobile.org')) {
|
|
iframe.setAttribute('mozapptype', 'critical');
|
|
} else if (config.isHomescreen) {
|
|
/* If this frame corresponds to the homescreen, set mozapptype=homescreen
|
|
* so we're less likely to kill this frame's process when we're running
|
|
* low on memory.
|
|
*
|
|
* We must do this before we the appendChild() call below. Once
|
|
* we add this frame to the document, we can't change its app type.
|
|
*/
|
|
iframe.setAttribute('mozapptype', 'homescreen');
|
|
} else if (config.isSearch) {
|
|
/* If this frame corresponds to search, set mozapptype=search
|
|
*/
|
|
iframe.setAttribute('mozapptype', 'search');
|
|
} else if (config.isInputMethod) {
|
|
iframe.setAttribute('mozapptype', 'inputmethod');
|
|
}
|
|
}
|
|
|
|
exports.BrowserFrame = BrowserFrame;
|
|
}(window));
|