You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by za...@apache.org on 2014/12/15 14:32:58 UTC
[09/37] cordova-ubuntu git commit: port to oxide
port to oxide
Project: http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/commit/ed47b556
Tree: http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/tree/ed47b556
Diff: http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/diff/ed47b556
Branch: refs/heads/master
Commit: ed47b556cb34de78fb8e0c1fc25bceec925c25ed
Parents: 9669f2c
Author: Maxim Ermilov <ma...@canonical.com>
Authored: Fri Oct 17 05:25:15 2014 +0400
Committer: Maxim Ermilov <ma...@canonical.com>
Committed: Fri Oct 17 05:25:15 2014 +0400
----------------------------------------------------------------------
Cordovaqt/CordovaViewInternal.qml | 105 ++++++++++++++++++---------------
Cordovaqt/cordova_wrapper.js | 4 +-
Cordovaqt/escape.js | 1 +
src/qmlplugin.h | 4 ++
www/cordova.js | 14 ++++-
5 files changed, 75 insertions(+), 53 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ed47b556/Cordovaqt/CordovaViewInternal.qml
----------------------------------------------------------------------
diff --git a/Cordovaqt/CordovaViewInternal.qml b/Cordovaqt/CordovaViewInternal.qml
index b0b986d..4c7009a 100644
--- a/Cordovaqt/CordovaViewInternal.qml
+++ b/Cordovaqt/CordovaViewInternal.qml
@@ -17,8 +17,7 @@
*
*/
import QtQuick 2.0
-import QtWebKit 3.0
-import QtWebKit.experimental 1.0
+import com.canonical.Oxide 1.0
import "cordova_wrapper.js" as CordovaWrapper
import Ubuntu.Components 0.1
import Ubuntu.Components.Popups 0.1
@@ -41,20 +40,7 @@ Item {
function plugin(plugin) {
return CordovaWrapper.pluginObjects[plugin];
}
-
- function overrideScheme(schemeName, pluginName) {
- var handler = Qt.createQmlObject("import QtWebKit.experimental 1.0;"
- + "UrlSchemeDelegate { scheme: '" + schemeName + "';"
- + "onReceivedRequest: { var data = plugin('" + pluginName + "').handleUri(request.url); reply.data = data; reply.contentType = 'application/octet-stream'; reply.send(); } } ", webView);
-
- var handlers = [];
- // QQmlListProperty (qt 5.2) does not support appending items from qml
- for (var i in webView.experimental.urlSchemeDelegates)
- handlers.push(webView.experimental.urlSchemeDelegates[i])
-
- handlers.push(handler);
- webView.experimental.urlSchemeDelegates = handlers;
- }
+ property string usContext: "oxide://main-world"
Rectangle {
id: webViewContainer
@@ -66,44 +52,69 @@ Item {
onNavigationRequested: {
if (cordova.isUrlWhiteListed(request.url))
- request.action = WebView.AcceptRequest;
+ request.action = NavigationRequest.ActionAccept;
else
- request.action = WebView.IgnoreRequest;
+ request.action = NavigationRequest.ActionReject;
}
- boundsBehavior: disallowOverscroll ? Flickable.StopAtBounds : Flickable.DragAndOvershootBounds
+ preferences.remoteFontsEnabled: true
+ preferences.javascriptCanAccessClipboard: true
+ preferences.canDisplayInsecureContent: true
+ preferences.canRunInsecureContent: true
+
+ preferences.allowUniversalAccessFromFileUrls: true
+ preferences.allowFileAccessFromFileUrls: true
+
+ preferences.localStorageEnabled: true
+ preferences.appCacheEnabled: true
+
+// boundsBehavior: disallowOverscroll ? Flickable.StopAtBounds : Flickable.DragAndOvershootBounds
property string scheme: "file"
- experimental.preferences.navigatorQtObjectEnabled: true
- experimental.preferences.localStorageEnabled: true
- experimental.preferences.offlineWebApplicationCacheEnabled: true
- experimental.preferences.universalAccessFromFileURLsAllowed: true
- experimental.preferences.webGLEnabled: true
- experimental.databaseQuotaDialog: Item {
- Timer {
- interval: 1
- running: true
- onTriggered: {
- model.accept(model.expectedUsage)
- }
- }
- }
- // port in QTWEBKIT_INSPECTOR_SERVER enviroment variable
- experimental.preferences.developerExtrasEnabled: true
- function evalInPageUnsafe(expr) {
- experimental.evaluateJavaScript('(function() { ' + expr + ' })();');
+ property var currentDialog: null
+
+ // FIXME: remove code from geolocation plugin
+ onGeolocationPermissionRequested: {
+ request.accept();
}
- experimental.onMessageReceived: {
- if (message.data.length > 1000) {
- console.debug("WebView received Message: " + message.data.substr(0, 900) + "...");
- } else {
- console.debug("WebView received Message: " + message.data);
- }
+ context: WebContext {
+ id: webcontext
+
+ devtoolsEnabled: true
+ devtoolsPort: 9222
- CordovaWrapper.messageHandler(message)
+ userScripts: [
+ UserScript {
+ context: usContext
+ emulateGreasemonkey: true
+ url: "escape.js"
+ }
+ ]
+ sessionCookieMode: {
+ if (typeof webContextSessionCookieMode !== 'undefined') {
+ if (webContextSessionCookieMode === "persistent") {
+ return WebContext.SessionCookieModePersistent
+ } else if (webContextSessionCookieMode === "restored") {
+ return WebContext.SessionCookieModeRestored
+ }
+ }
+ return WebContext.SessionCookieModeEphemeral
+ }
+ dataPath: cordova.getDataLocation()
}
+ messageHandlers: [
+ ScriptMessageHandler {
+ msgId: "from-cordova"
+ contexts: [usContext]
+ callback: function(msg, frame) {
+ CordovaWrapper.messageHandler(msg.args)
+ console.log(JSON.stringify(msg.args))
+ }
+ }
+ ]
+
Component.onCompleted: {
root.mainWebview = webView;
cordova.appLoaded();
@@ -115,17 +126,15 @@ Item {
}
onLoadingChanged: {
- if (loadRequest.status) {
+ if (!webView.loading) {
root.completed()
cordova.loadFinished(true)
}
- //TODO: check here for errors
}
-
Connections {
target: cordova
onJavaScriptExecNeeded: {
- webView.experimental.evaluateJavaScript(js);
+ webView.rootFrame.sendMessage(usContext, "EXECUTE", {code: js});
}
onQmlExecNeeded: {
eval(src);
http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ed47b556/Cordovaqt/cordova_wrapper.js
----------------------------------------------------------------------
diff --git a/Cordovaqt/cordova_wrapper.js b/Cordovaqt/cordova_wrapper.js
index 3a4cddc..006614c 100644
--- a/Cordovaqt/cordova_wrapper.js
+++ b/Cordovaqt/cordova_wrapper.js
@@ -29,8 +29,7 @@ function addPlugin(pluginName, pluginObject) {
pluginObjects[pluginName] = pluginObject
}
-function messageHandler(message) {
- var received = eval(message.data); // TODO: qt 5.2 have buggy JSON.parse. JSON.parse fails on FileApi tests
+function messageHandler(received) {
if (typeof received === 'undefined')
return false;
if (typeof received.messageType === 'undefined')
@@ -46,6 +45,7 @@ function messageHandler(message) {
function execMethod(pluginName, functionName, params) {
if (typeof pluginObjects[pluginName][functionName] != "function")
return false;
+
pluginObjects[pluginName][functionName].apply(this, params);
return true;
}
http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ed47b556/Cordovaqt/escape.js
----------------------------------------------------------------------
diff --git a/Cordovaqt/escape.js b/Cordovaqt/escape.js
new file mode 100644
index 0000000..48243ad
--- /dev/null
+++ b/Cordovaqt/escape.js
@@ -0,0 +1 @@
+window.oxide = oxide;
http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ed47b556/src/qmlplugin.h
----------------------------------------------------------------------
diff --git a/src/qmlplugin.h b/src/qmlplugin.h
index ebe9adc..4492bb2 100644
--- a/src/qmlplugin.h
+++ b/src/qmlplugin.h
@@ -63,6 +63,10 @@ public:
return QSharedPointer<Cordova>(new Cordova(QDir(www), "index.html", parent))->getSplashscreenPath();
}
+ Q_INVOKABLE static QString getDataLocation() {
+ return QStandardPaths::writableLocation(QStandardPaths::DataLocation);
+ }
+
QString mainUrl() {
if (!_cordova.data()) {
return "";
http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ed47b556/www/cordova.js
----------------------------------------------------------------------
diff --git a/www/cordova.js b/www/cordova.js
index e40cd9a..18e9d6a 100644
--- a/www/cordova.js
+++ b/www/cordova.js
@@ -278,7 +278,7 @@ var cordova = {
try {
cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback);
} catch (e) {
- console.log("Error in error callback: " + callbackId + " = "+e);
+ console.log("Error in success callback: " + callbackId + " = "+e);
}
},
@@ -846,6 +846,7 @@ cordova.callbackWithoutRemove = function() {
if (typeof(callbackRef) == "function") callbackRef.apply(this, parameters);
};
+var _initialized = false;
function ubuntuExec(success, fail, service, action, args) {
if (callbackId % 2) {
callbackId++;
@@ -859,7 +860,14 @@ function ubuntuExec(success, fail, service, action, args) {
args.unshift(ecId);
args.unshift(scId);
- navigator.qt.postMessage(JSON.stringify({messageType: "callPluginFunction", plugin: service, func: action, params: args}));
+ if (!_initialized) {
+ _initialized = true;
+ window.oxide.addMessageHandler("EXECUTE", function (msg) {
+ eval(msg.args.code);
+ });
+ }
+
+ oxide.sendMessage("from-cordova", {messageType: "callPluginFunction", plugin: service, func: action, params: args});
}
module.exports = ubuntuExec;
@@ -1541,4 +1549,4 @@ window.cordova = require('cordova');
require('cordova/init');
-})();
\ No newline at end of file
+})();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org