You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ag...@apache.org on 2015/05/13 04:42:50 UTC
[5/9] cordova-app-harness git commit: Hook up the whitelist plugin
for loaded apps
Hook up the whitelist plugin for loaded apps
Project: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/commit/c183c956
Tree: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/tree/c183c956
Diff: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/diff/c183c956
Branch: refs/heads/master
Commit: c183c956889bbb0073861d35367d002c8867a447
Parents: ab7d4b1
Author: Andrew Grieve <ag...@chromium.org>
Authored: Tue Mar 17 10:22:55 2015 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Tue May 12 22:17:49 2015 -0400
----------------------------------------------------------------------
AppHarnessUI/android/AppHarnessUI.java | 71 ++++++++++-----------
AppHarnessUI/android/CustomAndroidWebView.java | 6 ++
AppHarnessUI/android/CustomCordovaWebView.java | 3 +
AppHarnessUI/appharnessui.js | 8 +--
www/cdvah/js/AppHarnessUI.js | 8 +--
www/cdvah/js/AppsService.js | 16 ++++-
6 files changed, 63 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-app-harness/blob/c183c956/AppHarnessUI/android/AppHarnessUI.java
----------------------------------------------------------------------
diff --git a/AppHarnessUI/android/AppHarnessUI.java b/AppHarnessUI/android/AppHarnessUI.java
index 661599a..b19ecf2 100644
--- a/AppHarnessUI/android/AppHarnessUI.java
+++ b/AppHarnessUI/android/AppHarnessUI.java
@@ -18,6 +18,7 @@
*/
package org.apache.appharness;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
@@ -76,20 +77,22 @@ public class AppHarnessUI extends CordovaPlugin {
@Override
public boolean execute(String action, CordovaArgs args, final CallbackContext callbackContext) throws JSONException {
if ("create".equals(action)) {
- final String url = args.getString(0);
- final Set<String> pluginIdWhitelistAsSet = jsonArrayToSet(args.getJSONArray(1));
+ final Uri startUri = Uri.parse(args.getString(0));
+ final Uri configXmlUri = Uri.parse(args.getString(1));
+ final Set<String> pluginIdWhitelistAsSet = jsonArrayToSet(args.getJSONArray(2));
+ final String webViewType = args.getString(3);
this.cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
- create(url, pluginIdWhitelistAsSet, callbackContext);
+ create(startUri, configXmlUri, pluginIdWhitelistAsSet, webViewType, callbackContext);
}
});
} else if ("reload".equals(action)) {
- final String url = args.getString(0);
- final Set<String> pluginIdWhitelistAsSet = jsonArrayToSet(args.getJSONArray(1));
- final String webViewType = args.getString(2);
+ final Uri startUri = Uri.parse(args.getString(0));
+ final Uri configXmlUri = Uri.parse(args.getString(1));
+ final Set<String> pluginIdWhitelistAsSet = jsonArrayToSet(args.getJSONArray(2));
this.cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
- reload(url, pluginIdWhitelistAsSet, webViewType, callbackContext);
+ reload(startUri, configXmlUri, pluginIdWhitelistAsSet, callbackContext);
}
});
} else if ("destroy".equals(action)) {
@@ -145,7 +148,7 @@ public class AppHarnessUI extends CordovaPlugin {
callbackContext.success();
}
- private void create(String url, Set<String> pluginIdWhitelist, CallbackContext callbackContext) {
+ private void create(Uri startUri, Uri configXmlUri, Set<String> pluginIdWhitelist, String webViewType, CallbackContext callbackContext) {
CordovaActivity activity = (CordovaActivity)cordova.getActivity();
if (slaveWebView != null) {
@@ -158,29 +161,28 @@ public class AppHarnessUI extends CordovaPlugin {
// We'll set the plugin entries in initWebView.
slaveWebView.init(cordova, new ArrayList<PluginEntry>(), preferences);
}
- {
- initWebView((CordovaWebViewEngine)slaveWebViewEngine, pluginIdWhitelist);
+ setPluginEntries(pluginIdWhitelist, configXmlUri);
- slaveWebView.clearCache(true);
- slaveWebView.clearHistory();
- slaveWebView.loadUrl(url);
- contentView.addView(slaveWebView.getView());
- slaveVisible = true;
- // Back button capturing breaks without these:
- webView.getView().setEnabled(false);
- slaveWebView.getView().requestFocus();
- }
+ slaveWebView.clearCache(true);
+ slaveWebView.clearHistory();
+ slaveWebView.loadUrl(startUri.toString());
+ contentView.addView(slaveWebView.getView());
+ slaveVisible = true;
+ // Back button capturing breaks without these:
+ webView.getView().setEnabled(false);
+ slaveWebView.getView().requestFocus();
callbackContext.success();
}
- private void reload(String url, Set<String> pluginIdWhitelist, String webViewType, CallbackContext callbackContext) {
+ private void reload(Uri startUri, Uri configXmlUri, Set<String> pluginIdWhitelist, CallbackContext callbackContext) {
if (slaveWebView == null) {
Log.w(LOG_TAG, "reload: no webview exists");
} else {
// TODO(maxw): If the webview type has changed, create a new webview.
- setPluginEntries(pluginIdWhitelist);
+ setPluginEntries(pluginIdWhitelist, configXmlUri);
slaveWebView.clearCache(true);
- slaveWebView.loadUrl(url);
+ slaveWebView.clearHistory();
+ slaveWebView.loadUrl(startUri.toString());
}
callbackContext.success();
}
@@ -237,19 +239,21 @@ public class AppHarnessUI extends CordovaPlugin {
}
}
- private void setPluginEntries(Set<String> pluginIdWhitelist) {
+ private void setPluginEntries(Set<String> pluginIdWhitelist, Uri configXmlUri) {
CordovaActivity activity = (CordovaActivity)cordova.getActivity();
+ // Extract the <feature> from CADT's config.xml, and filter out unwanted plugins.
ConfigXmlParser parser = new ConfigXmlParser();
- // TODO: Parse the app's config.xml rather than our own config.xml.
parser.parse(activity);
ArrayList<PluginEntry> pluginEntries = new ArrayList<PluginEntry>(parser.getPluginEntries());
- for (PluginEntry p : parser.getPluginEntries()) {
+ for (int i = 0; i < pluginEntries.size();) {
+ PluginEntry p = pluginEntries.get(i);
if (!pluginIdWhitelist.contains(p.service)) {
pluginEntries.remove(p);
+ continue;
} else if (WhitelistPlugin.class.getCanonicalName().equals(p.pluginClass)) {
- // TODO: pass through path to launching config.xml.
- //p.plugin = createWhitelistPlugin();
+ pluginEntries.set(i, new PluginEntry(p.service, createWhitelistPlugin(configXmlUri)));
}
+ ++i;
}
slaveWebView.getPluginManager().setPluginEntries(pluginEntries);
// This is added by cordova-android in code, so we need to re-add it likewise.
@@ -257,10 +261,10 @@ public class AppHarnessUI extends CordovaPlugin {
slaveWebView.getPluginManager().addService("CoreAndroid", "org.apache.cordova.CoreAndroid");
}
- private CordovaPlugin createWhitelistPlugin(Uri configXml) {
+ private CordovaPlugin createWhitelistPlugin(Uri configXmlUri) {
InputStream istr = null;
try {
- istr = webView.getResourceApi().openForRead(configXml).inputStream;
+ istr = new FileInputStream(configXmlUri.getPath());
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false);
XmlPullParser parser = factory.newPullParser();
@@ -280,13 +284,4 @@ public class AppHarnessUI extends CordovaPlugin {
}
return null;
}
-
- private void initWebView(final CordovaWebViewEngine newWebView, Set<String> pluginIdWhitelist) {
- setPluginEntries(pluginIdWhitelist);
-
- newWebView.getView().setLayoutParams(new ViewGroup.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT));
- newWebView.getView().setVisibility(View.VISIBLE);
- }
}
http://git-wip-us.apache.org/repos/asf/cordova-app-harness/blob/c183c956/AppHarnessUI/android/CustomAndroidWebView.java
----------------------------------------------------------------------
diff --git a/AppHarnessUI/android/CustomAndroidWebView.java b/AppHarnessUI/android/CustomAndroidWebView.java
index 174d372..1f34eb3 100644
--- a/AppHarnessUI/android/CustomAndroidWebView.java
+++ b/AppHarnessUI/android/CustomAndroidWebView.java
@@ -18,6 +18,7 @@
*/
package org.apache.appharness;
+import org.apache.cordova.CordovaWebViewEngine;
import org.apache.cordova.engine.SystemWebView;
import org.apache.cordova.engine.SystemWebViewEngine;
@@ -57,6 +58,11 @@ class CustomAndroidWebView extends SystemWebViewEngine implements CustomCordovaW
}
@Override
+ public CordovaWebViewEngine asEngine() {
+ return this;
+ }
+
+ @Override
public boolean goBack() {
if (canGoBack()) {
return super.goBack();
http://git-wip-us.apache.org/repos/asf/cordova-app-harness/blob/c183c956/AppHarnessUI/android/CustomCordovaWebView.java
----------------------------------------------------------------------
diff --git a/AppHarnessUI/android/CustomCordovaWebView.java b/AppHarnessUI/android/CustomCordovaWebView.java
index 93906e4..1f0fbe1 100644
--- a/AppHarnessUI/android/CustomCordovaWebView.java
+++ b/AppHarnessUI/android/CustomCordovaWebView.java
@@ -18,7 +18,10 @@
*/
package org.apache.appharness;
+import org.apache.cordova.CordovaWebViewEngine;
+
interface CustomCordovaWebView {
void setStealTapEvents(boolean value);
void evaluateJavascript(String script);
+ CordovaWebViewEngine asEngine();
}
http://git-wip-us.apache.org/repos/asf/cordova-app-harness/blob/c183c956/AppHarnessUI/appharnessui.js
----------------------------------------------------------------------
diff --git a/AppHarnessUI/appharnessui.js b/AppHarnessUI/appharnessui.js
index 7d26496..a5c147d 100644
--- a/AppHarnessUI/appharnessui.js
+++ b/AppHarnessUI/appharnessui.js
@@ -25,13 +25,13 @@ function eventHandler(type) {
exports.onEvent = null;
-exports.create = function(url, serviceNameWhitelist, win) {
+exports.create = function(startUrl, configXmlUrl, serviceNameWhitelist, webViewType, win) {
exec(eventHandler, null, 'AppHarnessUI', 'events', []);
- exec(win, null, 'AppHarnessUI', 'create', [url, serviceNameWhitelist]);
+ exec(win, null, 'AppHarnessUI', 'create', [startUrl, configXmlUrl, serviceNameWhitelist, webViewType]);
};
-exports.reload = function(url, serviceNameWhitelist, webViewType, win) {
- exec(win, null, 'AppHarnessUI', 'reload', [url, serviceNameWhitelist, webViewType]);
+exports.reload = function(startUrl, configXmlUrl, serviceNameWhitelist, win) {
+ exec(win, null, 'AppHarnessUI', 'reload', [startUrl, configXmlUrl, serviceNameWhitelist]);
};
exports.destroy = function(win) {
http://git-wip-us.apache.org/repos/asf/cordova-app-harness/blob/c183c956/www/cdvah/js/AppHarnessUI.js
----------------------------------------------------------------------
diff --git a/www/cdvah/js/AppHarnessUI.js b/www/cdvah/js/AppHarnessUI.js
index 8df095f..d107a37 100644
--- a/www/cdvah/js/AppHarnessUI.js
+++ b/www/cdvah/js/AppHarnessUI.js
@@ -38,10 +38,10 @@
}
return {
- create: function(url, pluginMetadata) {
+ create: function(startUrl, configXmlUrl, pluginMetadata, webViewType) {
var deferred = $q.defer();
var serviceNames = createServiceNameWhitelist(pluginMetadata);
- cordova.plugins.appharnessui.create(url, serviceNames, deferred.resolve);
+ cordova.plugins.appharnessui.create(startUrl, configXmlUrl, serviceNames, webViewType, deferred.resolve);
return deferred.promise;
},
destroy: function() {
@@ -49,10 +49,10 @@
cordova.plugins.appharnessui.destroy(deferred.resolve);
return deferred.promise;
},
- reload: function(url, pluginMetadata, webViewType) {
+ reload: function(startUrl, configXmlUrl, pluginMetadata) {
var deferred = $q.defer();
var serviceNames = createServiceNameWhitelist(pluginMetadata);
- cordova.plugins.appharnessui.reload(url, serviceNames, webViewType, deferred.resolve);
+ cordova.plugins.appharnessui.reload(startUrl, configXmlUrl, serviceNames, deferred.resolve);
return deferred.promise;
},
setVisible: function(value) {
http://git-wip-us.apache.org/repos/asf/cordova-app-harness/blob/c183c956/www/cdvah/js/AppsService.js
----------------------------------------------------------------------
diff --git a/www/cdvah/js/AppsService.js b/www/cdvah/js/AppsService.js
index e10a940..6d1292d 100644
--- a/www/cdvah/js/AppsService.js
+++ b/www/cdvah/js/AppsService.js
@@ -163,11 +163,21 @@
$location.path('/inappmenu');
// If we're relaunching the active app, just reload the existing webview.
// Otherwise, create a new one.
- // TODO(maxw): Use the existing webview all the time.
+ var configXmlUrl = installer.directoryManager.rootURL + 'config.xml';
+ var webViewType = 'system';
if (relaunch) {
- return AppHarnessUI.reload(launchUrl, pluginMetadata, 'system');
+ if (webViewType != curWebViewType) {
+ curWebViewType = webViewType;
+ return AppHarnessUI.destroy()
+ .then(function() {
+ return AppHarnessUI.create(launchUrl, configXmlUrl, pluginMetadata, webViewType);
+ });
+ } else {
+ return AppHarnessUI.reload(launchUrl, configXmlUrl, pluginMetadata);
+ }
} else {
- return AppHarnessUI.create(launchUrl, pluginMetadata);
+ curWebViewType = webViewType;
+ return AppHarnessUI.create(launchUrl, configXmlUrl, pluginMetadata, webViewType);
}
}).then(function() {
if (AppsService.onAppListChange) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org