From ea0febb097eee61cbbb74304818664507a33c983 Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Sat, 28 Nov 2020 15:33:41 +0100 Subject: [PATCH 01/14] (android): Implement WebViewAssetLoader with hook --- framework/build.gradle | 4 ++ .../org/apache/cordova/ConfigXmlParser.java | 4 +- .../src/org/apache/cordova/CordovaPlugin.java | 10 ++++ .../cordova/CordovaPluginPathHandler.java | 25 +++++++++ .../src/org/apache/cordova/PluginManager.java | 18 ++++++ .../cordova/engine/SystemWebViewClient.java | 55 ++++++++++++++++++- 6 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 framework/src/org/apache/cordova/CordovaPluginPathHandler.java diff --git a/framework/build.gradle b/framework/build.gradle index 5970f62179..33cdf9411a 100644 --- a/framework/build.gradle +++ b/framework/build.gradle @@ -152,3 +152,7 @@ bintray { } } } + +dependencies { + implementation 'androidx.webkit:webkit:1.3.0' +} \ No newline at end of file diff --git a/framework/src/org/apache/cordova/ConfigXmlParser.java b/framework/src/org/apache/cordova/ConfigXmlParser.java index 01a97f2d0b..1b5f083827 100644 --- a/framework/src/org/apache/cordova/ConfigXmlParser.java +++ b/framework/src/org/apache/cordova/ConfigXmlParser.java @@ -33,7 +33,7 @@ Licensed to the Apache Software Foundation (ASF) under one public class ConfigXmlParser { private static String TAG = "ConfigXmlParser"; - private String launchUrl = "file:///android_asset/www/index.html"; + private String launchUrl = "https://localhost/"; private CordovaPreferences prefs = new CordovaPreferences(); private ArrayList pluginEntries = new ArrayList(20); @@ -139,7 +139,7 @@ private void setStartUrl(String src) { if (src.charAt(0) == '/') { src = src.substring(1); } - launchUrl = "file:///android_asset/www/" + src; + launchUrl = "https://localhost/" + src; } } } diff --git a/framework/src/org/apache/cordova/CordovaPlugin.java b/framework/src/org/apache/cordova/CordovaPlugin.java index 46fd2fa499..7bbdc355ef 100644 --- a/framework/src/org/apache/cordova/CordovaPlugin.java +++ b/framework/src/org/apache/cordova/CordovaPlugin.java @@ -35,6 +35,8 @@ Licensed to the Apache Software Foundation (ASF) under one import java.io.FileNotFoundException; import java.io.IOException; +import androidx.webkit.WebViewAssetLoader; + /** * Plugins must extend this class and override one of the execute methods. */ @@ -434,4 +436,12 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) throws JSONException { } + + /** + * Allow plugins to supply a PathHandler for the WebViewAssetHandler + * @return a CordovaPluginPathHandler which listen for paths and returns a response + */ + public CordovaPluginPathHandler getPathHandler() { + return null; + } } diff --git a/framework/src/org/apache/cordova/CordovaPluginPathHandler.java b/framework/src/org/apache/cordova/CordovaPluginPathHandler.java new file mode 100644 index 0000000000..0bdf4a8ee3 --- /dev/null +++ b/framework/src/org/apache/cordova/CordovaPluginPathHandler.java @@ -0,0 +1,25 @@ +package org.apache.cordova; + +import androidx.webkit.WebViewAssetLoader; + +/** + * Wrapper class for path and handler + */ +public class CordovaPluginPathHandler { + + private final String path; + private final WebViewAssetLoader.PathHandler handler; + + public CordovaPluginPathHandler(String path, WebViewAssetLoader.PathHandler handler) { + this.path = path; + this.handler = handler; + } + + public String getPath() { + return path; + } + + public WebViewAssetLoader.PathHandler getPathHandler() { + return handler; + } +} diff --git a/framework/src/org/apache/cordova/PluginManager.java b/framework/src/org/apache/cordova/PluginManager.java index 21aec73efc..a5237615fb 100755 --- a/framework/src/org/apache/cordova/PluginManager.java +++ b/framework/src/org/apache/cordova/PluginManager.java @@ -18,6 +18,7 @@ Licensed to the Apache Software Foundation (ASF) under one */ package org.apache.cordova; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; @@ -32,6 +33,8 @@ Licensed to the Apache Software Foundation (ASF) under one import android.os.Debug; import android.os.Build; +import androidx.webkit.WebViewAssetLoader; + /** * PluginManager is exposed to JavaScript in the Cordova WebView. * @@ -577,4 +580,19 @@ public Bundle onSaveInstanceState() { } return state; } + + /** + * Collect all plugins PathHandlers + * @return list of PathHandlers in no particular order + * + */ + public ArrayList getPluginPathHandlers() { + ArrayList handlers = new ArrayList(); + for (CordovaPlugin plugin : this.pluginMap.values()) { + if (plugin != null && plugin.getPathHandler() != null) { + handlers.add(plugin.getPathHandler()); + } + } + return handlers; + } } diff --git a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java index af9e51f118..018cf1cfc9 100755 --- a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java +++ b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java @@ -18,17 +18,19 @@ Licensed to the Apache Software Foundation (ASF) under one */ package org.apache.cordova.engine; -import android.annotation.TargetApi; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.AssetManager; import android.graphics.Bitmap; import android.net.Uri; import android.net.http.SslError; -import android.os.Build; +import android.util.Log; import android.webkit.ClientCertRequest; import android.webkit.HttpAuthHandler; +import android.webkit.MimeTypeMap; import android.webkit.SslErrorHandler; +import android.webkit.WebResourceRequest; import android.webkit.WebResourceResponse; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -36,14 +38,18 @@ Licensed to the Apache Software Foundation (ASF) under one import org.apache.cordova.AuthenticationToken; import org.apache.cordova.CordovaClientCertRequest; import org.apache.cordova.CordovaHttpAuthHandler; +import org.apache.cordova.CordovaPluginPathHandler; import org.apache.cordova.CordovaResourceApi; import org.apache.cordova.LOG; import org.apache.cordova.PluginManager; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; import java.util.Hashtable; +import androidx.webkit.WebViewAssetLoader; + /** * This class is the WebViewClient that implements callbacks for our web view. @@ -56,6 +62,7 @@ public class SystemWebViewClient extends WebViewClient { private static final String TAG = "SystemWebViewClient"; protected final SystemWebViewEngine parentEngine; + private final WebViewAssetLoader assetLoader; private boolean doClearHistory = false; boolean isCurrentlyLoading; @@ -64,6 +71,45 @@ public class SystemWebViewClient extends WebViewClient { public SystemWebViewClient(SystemWebViewEngine parentEngine) { this.parentEngine = parentEngine; + + WebViewAssetLoader.Builder assetLoaderBuilder = new WebViewAssetLoader.Builder() + .setDomain("localhost") + .setHttpAllowed(true) + .addPathHandler("/", path -> { + try { + if (path.isEmpty()) + path = "index.html"; + InputStream is = parentEngine.webView.getContext().getAssets().open("www/" + path, AssetManager.ACCESS_STREAMING); + String mimeType = "text/html"; + String extension = MimeTypeMap.getFileExtensionFromUrl(path); + if (extension != null) { + if (path.endsWith(".js") || path.endsWith(".mjs")) { + // Make sure JS files get the proper mimetype to support ES modules + mimeType = "application/javascript"; + } else if (path.endsWith(".wasm")) { + mimeType = "application/wasm"; + } else { + mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); + } + } + + return new WebResourceResponse(mimeType, null, is); + } catch (Exception e) { + e.printStackTrace(); + Log.e("WebViewAssetLoader", e.getMessage()); + } + return null; + }); + + // Check if there a plugins with pathHandlers + PluginManager pluginManager = this.parentEngine.pluginManager; + if (pluginManager != null) { + for (CordovaPluginPathHandler handler : pluginManager.getPluginPathHandlers()) { + assetLoaderBuilder.addPathHandler(handler.getPath(), handler.getPathHandler()); + } + } + + this.assetLoader = assetLoaderBuilder.build(); } /** @@ -366,4 +412,9 @@ private static boolean needsSpecialsInAssetUrlFix(Uri uri) { return false; } + + @Override + public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { + return this.assetLoader.shouldInterceptRequest(request.getUrl()); + } } From 89ed67b475d068ba4f15da473b96bfe26c8b1738 Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Mon, 30 Nov 2020 20:18:43 +0100 Subject: [PATCH 02/14] Fix path handler order --- .../cordova/engine/SystemWebViewClient.java | 53 ++++++++++--------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java index 018cf1cfc9..db7bfb29be 100755 --- a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java +++ b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java @@ -74,32 +74,7 @@ public SystemWebViewClient(SystemWebViewEngine parentEngine) { WebViewAssetLoader.Builder assetLoaderBuilder = new WebViewAssetLoader.Builder() .setDomain("localhost") - .setHttpAllowed(true) - .addPathHandler("/", path -> { - try { - if (path.isEmpty()) - path = "index.html"; - InputStream is = parentEngine.webView.getContext().getAssets().open("www/" + path, AssetManager.ACCESS_STREAMING); - String mimeType = "text/html"; - String extension = MimeTypeMap.getFileExtensionFromUrl(path); - if (extension != null) { - if (path.endsWith(".js") || path.endsWith(".mjs")) { - // Make sure JS files get the proper mimetype to support ES modules - mimeType = "application/javascript"; - } else if (path.endsWith(".wasm")) { - mimeType = "application/wasm"; - } else { - mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); - } - } - - return new WebResourceResponse(mimeType, null, is); - } catch (Exception e) { - e.printStackTrace(); - Log.e("WebViewAssetLoader", e.getMessage()); - } - return null; - }); + .setHttpAllowed(true); // Check if there a plugins with pathHandlers PluginManager pluginManager = this.parentEngine.pluginManager; @@ -109,6 +84,32 @@ public SystemWebViewClient(SystemWebViewEngine parentEngine) { } } + assetLoaderBuilder.addPathHandler("/", path -> { + try { + if (path.isEmpty()) + path = "index.html"; + InputStream is = parentEngine.webView.getContext().getAssets().open("www/" + path, AssetManager.ACCESS_STREAMING); + String mimeType = "text/html"; + String extension = MimeTypeMap.getFileExtensionFromUrl(path); + if (extension != null) { + if (path.endsWith(".js") || path.endsWith(".mjs")) { + // Make sure JS files get the proper mimetype to support ES modules + mimeType = "application/javascript"; + } else if (path.endsWith(".wasm")) { + mimeType = "application/wasm"; + } else { + mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); + } + } + + return new WebResourceResponse(mimeType, null, is); + } catch (Exception e) { + e.printStackTrace(); + Log.e("WebViewAssetLoader", e.getMessage()); + } + return null; + }); + this.assetLoader = assetLoaderBuilder.build(); } From 24af992fd2727dfbcedb9d9addbe19eda131468c Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Mon, 30 Nov 2020 20:18:59 +0100 Subject: [PATCH 03/14] Load plugins before initalizing webview --- framework/src/org/apache/cordova/CordovaWebViewImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/org/apache/cordova/CordovaWebViewImpl.java b/framework/src/org/apache/cordova/CordovaWebViewImpl.java index b0ddcf4396..7464ce687b 100644 --- a/framework/src/org/apache/cordova/CordovaWebViewImpl.java +++ b/framework/src/org/apache/cordova/CordovaWebViewImpl.java @@ -108,6 +108,9 @@ public void init(CordovaInterface cordova, List pluginEntries, Cord nativeToJsMessageQueue.addBridgeMode(new NativeToJsMessageQueue.NoOpBridgeMode()); nativeToJsMessageQueue.addBridgeMode(new NativeToJsMessageQueue.LoadUrlBridgeMode(engine, cordova)); + pluginManager.addService(CoreAndroid.PLUGIN_NAME, "org.apache.cordova.CoreAndroid"); + pluginManager.init(); + if (preferences.getBoolean("DisallowOverscroll", false)) { engine.getView().setOverScrollMode(View.OVER_SCROLL_NEVER); } @@ -115,9 +118,6 @@ public void init(CordovaInterface cordova, List pluginEntries, Cord // This isn't enforced by the compiler, so assert here. assert engine.getView() instanceof CordovaWebViewEngine.EngineView; - pluginManager.addService(CoreAndroid.PLUGIN_NAME, "org.apache.cordova.CoreAndroid"); - pluginManager.init(); - } @Override From b56403ca01b6459de34f903188ad1564d121a110 Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Tue, 1 Dec 2020 20:08:15 +0100 Subject: [PATCH 04/14] Revert plugin loading change and implement plugin handler differently --- .../cordova/CordovaPluginPathHandler.java | 8 +------ .../apache/cordova/CordovaWebViewImpl.java | 6 +++--- .../cordova/engine/SystemWebViewClient.java | 21 ++++++++++++------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/framework/src/org/apache/cordova/CordovaPluginPathHandler.java b/framework/src/org/apache/cordova/CordovaPluginPathHandler.java index 0bdf4a8ee3..b56c2b64a3 100644 --- a/framework/src/org/apache/cordova/CordovaPluginPathHandler.java +++ b/framework/src/org/apache/cordova/CordovaPluginPathHandler.java @@ -7,18 +7,12 @@ */ public class CordovaPluginPathHandler { - private final String path; private final WebViewAssetLoader.PathHandler handler; - public CordovaPluginPathHandler(String path, WebViewAssetLoader.PathHandler handler) { - this.path = path; + public CordovaPluginPathHandler(WebViewAssetLoader.PathHandler handler) { this.handler = handler; } - public String getPath() { - return path; - } - public WebViewAssetLoader.PathHandler getPathHandler() { return handler; } diff --git a/framework/src/org/apache/cordova/CordovaWebViewImpl.java b/framework/src/org/apache/cordova/CordovaWebViewImpl.java index 7464ce687b..95d28047b2 100644 --- a/framework/src/org/apache/cordova/CordovaWebViewImpl.java +++ b/framework/src/org/apache/cordova/CordovaWebViewImpl.java @@ -108,9 +108,6 @@ public void init(CordovaInterface cordova, List pluginEntries, Cord nativeToJsMessageQueue.addBridgeMode(new NativeToJsMessageQueue.NoOpBridgeMode()); nativeToJsMessageQueue.addBridgeMode(new NativeToJsMessageQueue.LoadUrlBridgeMode(engine, cordova)); - pluginManager.addService(CoreAndroid.PLUGIN_NAME, "org.apache.cordova.CoreAndroid"); - pluginManager.init(); - if (preferences.getBoolean("DisallowOverscroll", false)) { engine.getView().setOverScrollMode(View.OVER_SCROLL_NEVER); } @@ -118,6 +115,9 @@ public void init(CordovaInterface cordova, List pluginEntries, Cord // This isn't enforced by the compiler, so assert here. assert engine.getView() instanceof CordovaWebViewEngine.EngineView; + pluginManager.addService(CoreAndroid.PLUGIN_NAME, "org.apache.cordova.CoreAndroid"); + pluginManager.init(); + } @Override diff --git a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java index db7bfb29be..09a47d6cae 100755 --- a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java +++ b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java @@ -76,16 +76,23 @@ public SystemWebViewClient(SystemWebViewEngine parentEngine) { .setDomain("localhost") .setHttpAllowed(true); - // Check if there a plugins with pathHandlers - PluginManager pluginManager = this.parentEngine.pluginManager; - if (pluginManager != null) { - for (CordovaPluginPathHandler handler : pluginManager.getPluginPathHandlers()) { - assetLoaderBuilder.addPathHandler(handler.getPath(), handler.getPathHandler()); - } - } + assetLoaderBuilder.addPathHandler("/", path -> { try { + // Check if there a plugins with pathHandlers + PluginManager pluginManager = this.parentEngine.pluginManager; + if (pluginManager != null) { + for (CordovaPluginPathHandler handler : pluginManager.getPluginPathHandlers()) { + if (handler.getPathHandler() != null) { + WebResourceResponse response = handler.getPathHandler().handle(path); + if (response != null) { + return response; + } + }; + } + } + if (path.isEmpty()) path = "index.html"; InputStream is = parentEngine.webView.getContext().getAssets().open("www/" + path, AssetManager.ACCESS_STREAMING); From d744bfb853d84e078b4137ac7354ce3a8996a25d Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Tue, 1 Dec 2020 20:22:02 +0100 Subject: [PATCH 05/14] remove deprecated file access settings See: https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccess(boolean) --- .../apache/cordova/engine/SystemWebViewEngine.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/framework/src/org/apache/cordova/engine/SystemWebViewEngine.java b/framework/src/org/apache/cordova/engine/SystemWebViewEngine.java index 26e56ba170..2921d3d091 100755 --- a/framework/src/org/apache/cordova/engine/SystemWebViewEngine.java +++ b/framework/src/org/apache/cordova/engine/SystemWebViewEngine.java @@ -152,15 +152,6 @@ private void initWebViewSettings() { settings.setJavaScriptCanOpenWindowsAutomatically(true); settings.setLayoutAlgorithm(LayoutAlgorithm.NORMAL); - /** - * https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccess(boolean) - * - * SDK >= 30 has recently set this value to false by default. - * It is recommended to turn off this settings To prevent possible security issues targeting Build.VERSION_CODES.Q and earlier. - * For existing functionality, this setting is set to true. In a future release, this should be defaulted to false. - */ - settings.setAllowFileAccess(true); - String manufacturer = android.os.Build.MANUFACTURER; LOG.d(TAG, "CordovaWebView is running on device made by: " + manufacturer); @@ -168,9 +159,6 @@ private void initWebViewSettings() { settings.setSaveFormData(false); settings.setSavePassword(false); - // Jellybean rightfully tried to lock this down. Too bad they didn't give us a whitelist - // while we do this - settings.setAllowUniversalAccessFromFileURLs(true); settings.setMediaPlaybackRequiresUserGesture(false); // Enable database From 6985b159c54b50ba1de17b6330993729420783e0 Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Tue, 1 Dec 2020 20:33:18 +0100 Subject: [PATCH 06/14] add license header --- .../cordova/CordovaPluginPathHandler.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/framework/src/org/apache/cordova/CordovaPluginPathHandler.java b/framework/src/org/apache/cordova/CordovaPluginPathHandler.java index b56c2b64a3..0acaacb2c8 100644 --- a/framework/src/org/apache/cordova/CordovaPluginPathHandler.java +++ b/framework/src/org/apache/cordova/CordovaPluginPathHandler.java @@ -1,3 +1,22 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you 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. +*/ + package org.apache.cordova; import androidx.webkit.WebViewAssetLoader; From ea2c672f37aefd22997fed20c225f2e7eb42b61b Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Tue, 1 Dec 2020 20:48:14 +0100 Subject: [PATCH 07/14] small changes --- .../src/org/apache/cordova/engine/SystemWebViewClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java index 09a47d6cae..fe6c17718d 100755 --- a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java +++ b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java @@ -112,7 +112,7 @@ public SystemWebViewClient(SystemWebViewEngine parentEngine) { return new WebResourceResponse(mimeType, null, is); } catch (Exception e) { e.printStackTrace(); - Log.e("WebViewAssetLoader", e.getMessage()); + Log.e(TAG, e.getMessage()); } return null; }); From 9eeafe64237b7e4c4d6da594d1e8ec8e8bb6faa4 Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Thu, 3 Dec 2020 20:59:25 +0100 Subject: [PATCH 08/14] remove android tests without android x --- .gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitignore b/.gitignore index 8bfdf85182..e374ee77cb 100644 --- a/.gitignore +++ b/.gitignore @@ -27,9 +27,6 @@ example /framework/javadoc-private /test/.externalNativeBuild -/test/android/gradle -/test/android/gradlew -/test/android/gradlew.bat /test/androidx/gradle /test/androidx/gradlew /test/androidx/gradlew.bat From b5c6edf66a5f559cdd6f5ba158a88690ee2a1895 Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Thu, 3 Dec 2020 21:13:25 +0100 Subject: [PATCH 09/14] set webview domain with hostname preference like ios --- .../src/org/apache/cordova/engine/SystemWebViewClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java index fe6c17718d..cd46459698 100755 --- a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java +++ b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java @@ -73,7 +73,7 @@ public SystemWebViewClient(SystemWebViewEngine parentEngine) { this.parentEngine = parentEngine; WebViewAssetLoader.Builder assetLoaderBuilder = new WebViewAssetLoader.Builder() - .setDomain("localhost") + .setDomain(parentEngine.preferences.getString("hostname", "localhost")) .setHttpAllowed(true); From 10ba677d529368fa718f98868203ea772ba4226b Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Fri, 16 Apr 2021 08:19:43 +0200 Subject: [PATCH 10/14] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: エリス --- framework/build.gradle | 2 +- framework/src/org/apache/cordova/CordovaWebViewImpl.java | 1 - framework/src/org/apache/cordova/PluginManager.java | 2 +- .../src/org/apache/cordova/engine/SystemWebViewClient.java | 2 -- 4 files changed, 2 insertions(+), 5 deletions(-) diff --git a/framework/build.gradle b/framework/build.gradle index 33cdf9411a..b56d65106b 100644 --- a/framework/build.gradle +++ b/framework/build.gradle @@ -155,4 +155,4 @@ bintray { dependencies { implementation 'androidx.webkit:webkit:1.3.0' -} \ No newline at end of file +} diff --git a/framework/src/org/apache/cordova/CordovaWebViewImpl.java b/framework/src/org/apache/cordova/CordovaWebViewImpl.java index 95d28047b2..55b8d3b101 100644 --- a/framework/src/org/apache/cordova/CordovaWebViewImpl.java +++ b/framework/src/org/apache/cordova/CordovaWebViewImpl.java @@ -117,7 +117,6 @@ public void init(CordovaInterface cordova, List pluginEntries, Cord pluginManager.addService(CoreAndroid.PLUGIN_NAME, "org.apache.cordova.CoreAndroid"); pluginManager.init(); - } @Override diff --git a/framework/src/org/apache/cordova/PluginManager.java b/framework/src/org/apache/cordova/PluginManager.java index a5237615fb..44b1385594 100755 --- a/framework/src/org/apache/cordova/PluginManager.java +++ b/framework/src/org/apache/cordova/PluginManager.java @@ -583,8 +583,8 @@ public Bundle onSaveInstanceState() { /** * Collect all plugins PathHandlers - * @return list of PathHandlers in no particular order * + * @return list of PathHandlers in no particular order */ public ArrayList getPluginPathHandlers() { ArrayList handlers = new ArrayList(); diff --git a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java index cd46459698..1551bc46d1 100755 --- a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java +++ b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java @@ -75,8 +75,6 @@ public SystemWebViewClient(SystemWebViewEngine parentEngine) { WebViewAssetLoader.Builder assetLoaderBuilder = new WebViewAssetLoader.Builder() .setDomain(parentEngine.preferences.getString("hostname", "localhost")) .setHttpAllowed(true); - - assetLoaderBuilder.addPathHandler("/", path -> { try { From dfdaee6d5e7058a4a0bd0a19aee1cb3b2c6a8736 Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Mon, 19 Apr 2021 09:13:35 +0200 Subject: [PATCH 11/14] use hostname from preferences --- framework/src/org/apache/cordova/ConfigXmlParser.java | 1 + framework/src/org/apache/cordova/CordovaPlugin.java | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/framework/src/org/apache/cordova/ConfigXmlParser.java b/framework/src/org/apache/cordova/ConfigXmlParser.java index 1b5f083827..ee156f71e6 100644 --- a/framework/src/org/apache/cordova/ConfigXmlParser.java +++ b/framework/src/org/apache/cordova/ConfigXmlParser.java @@ -46,6 +46,7 @@ public ArrayList getPluginEntries() { } public String getLaunchUrl() { + launchUrl = "https://" + this.prefs.getString("hostname", "localhost"); return launchUrl; } diff --git a/framework/src/org/apache/cordova/CordovaPlugin.java b/framework/src/org/apache/cordova/CordovaPlugin.java index 7bbdc355ef..38e2e4afa3 100644 --- a/framework/src/org/apache/cordova/CordovaPlugin.java +++ b/framework/src/org/apache/cordova/CordovaPlugin.java @@ -35,8 +35,6 @@ Licensed to the Apache Software Foundation (ASF) under one import java.io.FileNotFoundException; import java.io.IOException; -import androidx.webkit.WebViewAssetLoader; - /** * Plugins must extend this class and override one of the execute methods. */ From 3a487fdc27d66beff80e292a2c72cb97a4ba57db Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Mon, 19 Apr 2021 09:28:41 +0200 Subject: [PATCH 12/14] remove another unnecesary input --- framework/src/org/apache/cordova/PluginManager.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/framework/src/org/apache/cordova/PluginManager.java b/framework/src/org/apache/cordova/PluginManager.java index 44b1385594..3728879c9b 100755 --- a/framework/src/org/apache/cordova/PluginManager.java +++ b/framework/src/org/apache/cordova/PluginManager.java @@ -33,8 +33,6 @@ Licensed to the Apache Software Foundation (ASF) under one import android.os.Debug; import android.os.Build; -import androidx.webkit.WebViewAssetLoader; - /** * PluginManager is exposed to JavaScript in the Cordova WebView. * From 69da7ab00da1e6f14629ba7c7c950ddde0a889f0 Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Thu, 22 Apr 2021 10:36:59 +0200 Subject: [PATCH 13/14] Apply suggestions from review --- framework/src/org/apache/cordova/ConfigXmlParser.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/framework/src/org/apache/cordova/ConfigXmlParser.java b/framework/src/org/apache/cordova/ConfigXmlParser.java index ee156f71e6..ae9b57fd1b 100644 --- a/framework/src/org/apache/cordova/ConfigXmlParser.java +++ b/framework/src/org/apache/cordova/ConfigXmlParser.java @@ -33,7 +33,7 @@ Licensed to the Apache Software Foundation (ASF) under one public class ConfigXmlParser { private static String TAG = "ConfigXmlParser"; - private String launchUrl = "https://localhost/"; + private String launchUrl = null; private CordovaPreferences prefs = new CordovaPreferences(); private ArrayList pluginEntries = new ArrayList(20); @@ -46,7 +46,9 @@ public ArrayList getPluginEntries() { } public String getLaunchUrl() { - launchUrl = "https://" + this.prefs.getString("hostname", "localhost"); + if (launchUrl == null) { + launchUrl = "https://" + this.prefs.getString("hostname", "localhost"); + } return launchUrl; } @@ -140,7 +142,7 @@ private void setStartUrl(String src) { if (src.charAt(0) == '/') { src = src.substring(1); } - launchUrl = "https://localhost/" + src; + launchUrl = "https://" + this.prefs.getString("hostname", "localhost") + "/" + src; } } } From 5b8af797d19637b561303cebd84f1ca53d5d5771 Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Thu, 22 Apr 2021 14:06:53 +0200 Subject: [PATCH 14/14] Fix syntax and util.Log import --- .../src/org/apache/cordova/engine/SystemWebViewClient.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java index 1551bc46d1..2af0668505 100755 --- a/framework/src/org/apache/cordova/engine/SystemWebViewClient.java +++ b/framework/src/org/apache/cordova/engine/SystemWebViewClient.java @@ -25,7 +25,6 @@ Licensed to the Apache Software Foundation (ASF) under one import android.graphics.Bitmap; import android.net.Uri; import android.net.http.SslError; -import android.util.Log; import android.webkit.ClientCertRequest; import android.webkit.HttpAuthHandler; import android.webkit.MimeTypeMap; @@ -50,7 +49,6 @@ Licensed to the Apache Software Foundation (ASF) under one import androidx.webkit.WebViewAssetLoader; - /** * This class is the WebViewClient that implements callbacks for our web view. * The kind of callbacks that happen here are regarding the rendering of the @@ -91,8 +89,9 @@ public SystemWebViewClient(SystemWebViewEngine parentEngine) { } } - if (path.isEmpty()) + if (path.isEmpty()) { path = "index.html"; + } InputStream is = parentEngine.webView.getContext().getAssets().open("www/" + path, AssetManager.ACCESS_STREAMING); String mimeType = "text/html"; String extension = MimeTypeMap.getFileExtensionFromUrl(path); @@ -110,7 +109,7 @@ public SystemWebViewClient(SystemWebViewEngine parentEngine) { return new WebResourceResponse(mimeType, null, is); } catch (Exception e) { e.printStackTrace(); - Log.e(TAG, e.getMessage()); + LOG.e(TAG, e.getMessage()); } return null; });