blob: 495dfbece23b4c27844bbfda6e813427e5584f58 [file] [log] [blame]
/*
* Copyright 2012 Research In Motion Limited.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var networkResourceRequested = require('./webkitHandlers/networkResourceRequested'),
utils = require('./utils'),
config = require('./config'),
webkitOriginAccess = require("./policy/webkitOriginAccess"),
CHROME_HEIGHT = 0,
OUT_OF_PROCESS = 1,
webview,
_webviewObj;
webview =
{
create: function (ready) {
_webviewObj = window.qnx.webplatform.createWebView({processId: OUT_OF_PROCESS, defaultSendEventHandlers: ['onChooseFile', 'onOpenWindow'], defaultWebEventHandlers: ['InvokeRequestEvent']}, function () {
//Create webkit event handlers
var requestObj = networkResourceRequested.createHandler(_webviewObj);
//Bind networkResourceRequested event so that everything works
_webviewObj.onNetworkResourceRequested = requestObj.networkResourceRequestedHandler;
webkitOriginAccess.addWebView(_webviewObj);
_webviewObj.visible = true;
_webviewObj.active = true;
_webviewObj.zOrder = 0;
_webviewObj.setGeometry(0, CHROME_HEIGHT, screen.width, screen.height - CHROME_HEIGHT);
if (typeof config.backgroundColor !== 'undefined') {
_webviewObj.backgroundColor = config.backgroundColor;
}
if (typeof config.customHeaders !== 'undefined') {
_webviewObj.extraHttpHeaders = config.customHeaders;
}
if (typeof config.userAgent !== 'undefined') {
_webviewObj.userAgent = config.userAgent;
}
_webviewObj.autoDeferNetworkingAndJavaScript = config.autoDeferNetworkingAndJavaScript;
/* Catch and trigger our custom HTML dialog */
_webviewObj.allowWebEvent("DialogRequested");
_webviewObj.addEventListener("DocumentLoadFinished", function () {
// show app window if auto hide splash screen is true, OR splash screen is not specified
// if auto hide is set to false explicitly but no splash screen is specified, should still show app window
// otherwise the app cannot be launched
if (config.autoHideSplashScreen || !config["rim:splash"]) {
window.qnx.webplatform.getApplication().windowVisible = true;
}
});
if (ready && typeof ready === 'function') {
ready();
}
window.qnx.webplatform.getController().dispatchEvent("webview.initialized", [_webviewObj]);
// If content is not loaded, too bad open the visibility up.
setTimeout(function () {
if (config.autoHideSplashScreen || !config["rim:splash"]) {
window.qnx.webplatform.getApplication().windowVisible = true;
}
}, 2500);
});
},
destroy: function () {
_webviewObj.destroy();
},
setURL: function (url) {
_webviewObj.url = url;
},
reload: function () {
_webviewObj.reload();
},
executeJavascript: function (js) {
_webviewObj.executeJavaScript(js);
},
addEventListener: function (eventName, callback) {
_webviewObj.addEventListener(eventName, callback);
},
removeEventListener: function (eventName, callback) {
_webviewObj.removeEventListener(eventName, callback);
},
windowGroup: function () {
return _webviewObj.windowGroup;
},
getGeometry: function () {
return this.geometry;
},
setGeometry: function (x, y, width, height) {
this.geometry = {x: x, y: y, w: width, h: height};
_webviewObj.setGeometry(x, y, width, height);
},
setApplicationOrientation: function (angle) {
_webviewObj.setApplicationOrientation(angle);
},
setExtraPluginDirectory: function (directory) {
_webviewObj.setExtraPluginDirectory(directory);
},
setEnablePlugins: function (enablePlugins) {
_webviewObj.pluginsEnabled = enablePlugins;
},
getEnablePlugins: function () {
return _webviewObj.pluginsEnabled;
},
notifyApplicationOrientationDone: function () {
_webviewObj.notifyApplicationOrientationDone();
},
setSandbox: function (sandbox) {
_webviewObj.setFileSystemSandbox = sandbox;
},
getSandbox: function () {
return _webviewObj.setFileSystemSandbox;
},
downloadURL: function (url) {
_webviewObj.downloadURL(url);
},
handleContextMenuResponse: function (action) {
_webviewObj.handleContextMenuResponse(action);
},
allowGeolocation : function (url) {
_webviewObj.allowGeolocation(url);
},
disallowGeolocation : function (url) {
_webviewObj.disallowGeolocation(url);
},
addKnownSSLCertificate: function (url, certificateInfo) {
_webviewObj.addKnownSSLCertificate(url, certificateInfo);
},
continueSSLHandshaking: function (streamId, SSLAction) {
_webviewObj.continueSSLHandshaking(streamId, SSLAction);
},
getSensitivity: function () {
return _webviewObj.getSensitivity();
},
setSensitivity: function (sensitivity) {
return _webviewObj.setSensitivity(sensitivity);
},
getBackgroundColor: function () {
return _webviewObj.getBackgroundColor();
},
setBackgroundColor: function (backgroundColor) {
return _webviewObj.setBackgroundColor(backgroundColor);
},
getWebViewObj: function (webview) {
return _webviewObj;
},
setUIWebViewObj: function (webviewObj) {
_webviewObj.uiWebView = webviewObj;
},
allowUserMedia: function (evtId, cameraName) {
_webviewObj.allowUserMedia(evtId, cameraName);
},
disallowUserMedia: function (evtId) {
_webviewObj.disallowUserMedia(evtId);
}
};
webview.__defineGetter__('id', function () {
if (_webviewObj) {
return _webviewObj.id;
}
});
webview.__defineGetter__('enableCrossSiteXHR', function () {
return _webviewObj.enableCrossSiteXHR;
});
webview.__defineSetter__('enableCrossSiteXHR', function (shouldEnable) {
_webviewObj.enableCrossSiteXHR = !!shouldEnable;
});
webview.__defineGetter__('processId', function () {
return _webviewObj.processId;
});
webview.__defineSetter__('onOpenWindow', function (input) {
_webviewObj.onOpenWindow = input;
});
webview.__defineSetter__('onCloseWindow', function (input) {
_webviewObj.onCloseWindow = input;
});
webview.__defineSetter__('onDestroyWindow', function (input) {
_webviewObj.onDestroyWindow = input;
});
webview.__defineSetter__('onDialogRequested', function (input) {
_webviewObj.onDialogRequested = input;
});
webview.__defineSetter__('onGeolocationPermissionRequest', function (input) {
_webviewObj.onGeolocationPermissionRequest = input;
});
webview.__defineSetter__('onSSLHandshakingFailed', function (input) {
_webviewObj.onSSLHandshakingFailed = input;
});
webview.__defineSetter__('onPropertyCurrentContextEvent', function (input) {
_webviewObj.onPropertyCurrentContextEvent = input;
});
webview.__defineSetter__('onContextMenuRequestEvent', function (input) {
_webviewObj.onContextMenuRequestEvent = input;
});
webview.__defineSetter__('onContextMenuCancelEvent', function (input) {
_webviewObj.onContextMenuCancelEvent = input;
});
webview.__defineSetter__('onUserMediaRequest', function (input) {
_webviewObj.onUserMediaRequest = input;
});
webview.__defineSetter__('onChildWindowOpen', function (input) {
_webviewObj.onChildWindowOpen = input;
});
module.exports = webview;