Skip to content

Commit

Permalink
fix(android): allow WebView to correctly handle query parameters (#11762
Browse files Browse the repository at this point in the history
)

* fix(android): allow WebView to correctly handle query parameters
* fix(android): fix url construction

Fixes TIMOB-27795
  • Loading branch information
ewanharris committed Jun 8, 2020
1 parent c8ddecd commit 5038295
Showing 1 changed file with 32 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,22 @@
*/
package ti.modules.titanium.ui.widget.webview;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.FeatureInfo;
import android.graphics.Color;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Build;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewParent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.annotation.StringRes;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
Expand All @@ -16,12 +32,7 @@
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import androidx.annotation.StringRes;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.ViewParent;
import javax.crypto.CipherInputStream;
import org.appcelerator.kroll.KrollDict;
import org.appcelerator.kroll.KrollProxy;
import org.appcelerator.kroll.common.Log;
Expand All @@ -37,22 +48,8 @@
import org.appcelerator.titanium.view.TiBackgroundDrawable;
import org.appcelerator.titanium.view.TiCompositeLayout;
import org.appcelerator.titanium.view.TiUIView;

import ti.modules.titanium.ui.WebViewProxy;
import ti.modules.titanium.ui.android.AndroidModule;
import android.content.Context;
import android.content.pm.FeatureInfo;
import android.content.pm.ApplicationInfo;
import android.graphics.Color;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Build;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;

import javax.crypto.CipherInputStream;

@SuppressWarnings("deprecation")
public class TiUIWebView extends TiUIView
Expand Down Expand Up @@ -599,13 +596,18 @@ public void setUrl(String url)
{
reloadMethod = reloadTypes.URL;
reloadData = url;
String finalUrl = url;
Uri uri = Uri.parse(finalUrl);
boolean originalUrlHasScheme = (uri.getScheme() != null);
final Uri uri = Uri.parse(url);

if (!originalUrlHasScheme) {
finalUrl = getProxy().resolveUrl(null, finalUrl);
}
// Extract URL query parameters.
final String query = uri.getQuery() != null ? "?" + uri.getQuery() : "";
final String fragment = uri.getFragment();

// Resolve URL path.
// The scheme is processed by `resolveUrl()`.
final Uri finalUri = Uri.parse(getProxy().resolveUrl(null, url));

// Reconstruct URL, ommiting any query parameters.
final String finalUrl = finalUri.toString().replace(query, "");

if (TiFileFactory.isLocalScheme(finalUrl) && mightBeHtml(finalUrl)) {
TiBaseFile tiFile = TiFileFactory.createTitaniumFile(finalUrl, false);
Expand Down Expand Up @@ -641,9 +643,9 @@ public void setUrl(String url)
}
String baseUrl = tiFile.nativePath();
if (baseUrl == null) {
baseUrl = originalUrlHasScheme ? url : finalUrl;
baseUrl = finalUrl;
}
setHtmlInternal(out.toString(), baseUrl, "text/html");
setHtmlInternal(out.toString(), baseUrl + query, "text/html");
return;
} catch (IOException ioe) {
Log.e(TAG,
Expand Down Expand Up @@ -671,9 +673,9 @@ public void setUrl(String url)
}
isLocalHTML = false;
if (extraHeaders.size() > 0) {
getWebView().loadUrl(finalUrl, extraHeaders);
getWebView().loadUrl(finalUrl + query, extraHeaders);
} else {
getWebView().loadUrl(finalUrl);
getWebView().loadUrl(finalUrl + query);
}
}

Expand Down

0 comments on commit 5038295

Please sign in to comment.