summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJorge Ruesga <jorge@ruesga.com>2014-04-03 05:07:12 +0200
committerLorDClockaN <davor@losinj.com>2014-04-11 15:20:36 +0200
commit797bf2fe9826e921e907821868fa488980587536 (patch)
tree48dcfc99e388fce38013acc8ab156488e7f5c51f
parent1e8222d98093b85258f5f13e9bb54c9e05582ddb (diff)
browser: allow to load browser internal assets
The new webview classes avoid to load urls from local file schemes. Just replace the load of internal browser assets (most_visited) from loadUrl to loadData. Change-Id: Iee633a1a3599a7e752e15452fa04e15baac2e256 JIRA: CYAN-3564 Issue: https://jira.cyanogenmod.org/browse/CYAN-3564 Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
-rw-r--r--src/com/android/browser/Tab.java53
-rw-r--r--src/com/android/browser/homepages/HomeProvider.java24
-rw-r--r--src/com/android/browser/homepages/RequestHandler.java2
3 files changed, 61 insertions, 18 deletions
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 8367f841..8657355f 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -68,11 +68,14 @@ import android.widget.Toast;
import com.android.browser.TabControl.OnThumbnailUpdatedListener;
import com.android.browser.homepages.HomeProvider;
+import com.android.browser.preferences.GeneralPreferencesFragment;
import com.android.browser.provider.SnapshotProvider.Snapshots;
+import com.google.common.io.ByteStreams;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.util.LinkedList;
@@ -155,6 +158,8 @@ class Tab implements PictureListener {
// before onPageFinsihed)
private boolean mInPageLoad;
private boolean mDisableOverrideUrlLoading;
+ // If true, the current page is the most visited page
+ private boolean mInMostVisitedPage;
// The last reported progress of the current page
private int mPageLoadProgress;
// The time the load started, used to find load page time
@@ -388,6 +393,16 @@ class Tab implements PictureListener {
}
syncCurrentState(view, url);
mWebViewController.onPageFinished(Tab.this);
+
+ if (view.getUrl().equals(HomeProvider.MOST_VISITED_URL)) {
+ if (!mInMostVisitedPage) {
+ loadUrl(HomeProvider.MOST_VISITED, null);
+ mInMostVisitedPage = true;
+ }
+ view.clearHistory();
+ } else {
+ mInMostVisitedPage = false;
+ }
}
// return true if want to hijack the url to let another app to handle it
@@ -582,14 +597,6 @@ class Tab implements PictureListener {
}
@Override
- public WebResourceResponse shouldInterceptRequest(WebView view,
- String url) {
- WebResourceResponse res = HomeProvider.shouldInterceptRequest(
- mContext, url);
- return res;
- }
-
- @Override
public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
if (!mInForeground) {
return false;
@@ -1764,7 +1771,20 @@ class Tab implements PictureListener {
mInPageLoad = true;
mCurrentState = new PageState(mContext, false, url, null);
mWebViewController.onPageStarted(this, mMainView, null);
- mMainView.loadUrl(url, headers);
+ WebResourceResponse res = HomeProvider.shouldInterceptRequest(mContext, url);
+ if (res != null) {
+ try {
+ String data = readWebResource(res).toString();
+ mInMostVisitedPage = true;
+ mMainView.loadDataWithBaseURL(url, data, res.getMimeType(), res.getEncoding(),
+ HomeProvider.MOST_VISITED_URL);
+ } catch (IOException io) {
+ // Fallback to default load handling
+ mMainView.loadUrl(url, headers);
+ }
+ } else {
+ mMainView.loadUrl(url, headers);
+ }
}
}
@@ -1911,4 +1931,19 @@ class Tab implements PictureListener {
setSecurityState(SecurityState.SECURITY_STATE_MIXED);
}
}
+
+ private StringBuilder readWebResource(WebResourceResponse response) throws IOException {
+ StringBuilder sb = new StringBuilder();
+ InputStream is = response.getData();
+ try {
+ byte[] data = new byte[512];
+ int read = 0;
+ while ((read = is.read(data, 0, 512)) != -1) {
+ sb.append(new String(data, 0, read));
+ }
+ } finally {
+ is.close();
+ }
+ return sb;
+ }
}
diff --git a/src/com/android/browser/homepages/HomeProvider.java b/src/com/android/browser/homepages/HomeProvider.java
index dc559441..a1c1d859 100644
--- a/src/com/android/browser/homepages/HomeProvider.java
+++ b/src/com/android/browser/homepages/HomeProvider.java
@@ -41,6 +41,7 @@ public class HomeProvider extends ContentProvider {
private static final String TAG = "HomeProvider";
public static final String AUTHORITY = "com.android.browser.home";
public static final String MOST_VISITED = "content://" + AUTHORITY + "/";
+ public static final String MOST_VISITED_URL = "about:most_visited";
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
@@ -88,17 +89,24 @@ public class HomeProvider extends ContentProvider {
}
}
+ public static boolean isMostVisitedPage(String url) {
+ boolean useMostVisited = BrowserSettings.getInstance().useMostVisitedHomepage();
+ if (useMostVisited && url.startsWith("content://")) {
+ Uri uri = Uri.parse(url);
+ if (AUTHORITY.equals(uri.getAuthority())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public static WebResourceResponse shouldInterceptRequest(Context context,
String url) {
try {
- boolean useMostVisited = BrowserSettings.getInstance().useMostVisitedHomepage();
- if (useMostVisited && url.startsWith("content://")) {
- Uri uri = Uri.parse(url);
- if (AUTHORITY.equals(uri.getAuthority())) {
- InputStream ins = context.getContentResolver()
- .openInputStream(uri);
- return new WebResourceResponse("text/html", "utf-8", ins);
- }
+ if (isMostVisitedPage(url)) {
+ InputStream ins = context.getContentResolver()
+ .openInputStream(Uri.parse(url + "/home"));
+ return new WebResourceResponse("text/html", "utf-8", ins);
}
boolean listFiles = BrowserSettings.getInstance().isDebugEnabled();
if (listFiles && interceptFile(url)) {
diff --git a/src/com/android/browser/homepages/RequestHandler.java b/src/com/android/browser/homepages/RequestHandler.java
index 823935ef..c73ec9a7 100644
--- a/src/com/android/browser/homepages/RequestHandler.java
+++ b/src/com/android/browser/homepages/RequestHandler.java
@@ -54,7 +54,7 @@ public class RequestHandler extends Thread {
OutputStream mOutput;
static {
- sUriMatcher.addURI(HomeProvider.AUTHORITY, "/", INDEX);
+ sUriMatcher.addURI(HomeProvider.AUTHORITY, "home", INDEX);
sUriMatcher.addURI(HomeProvider.AUTHORITY, "res/*/*", RESOURCE);
}