summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser/IntentHandler.java
diff options
context:
space:
mode:
authorMichael Kolb <kolby@google.com>2011-06-24 13:06:29 -0700
committerMichael Kolb <kolby@google.com>2011-06-30 12:00:49 -0700
commit1461244018a225006a8d4c203f9dfe294ffe94fa (patch)
tree3dd496c312755b5f0560c36fc3be4dffa639197a /src/com/android/browser/IntentHandler.java
parent4399b13ca463824bbab1ba422f4004cff100b483 (diff)
downloadpackages_apps_Browser-1461244018a225006a8d4c203f9dfe294ffe94fa.tar.gz
packages_apps_Browser-1461244018a225006a8d4c203f9dfe294ffe94fa.tar.bz2
packages_apps_Browser-1461244018a225006a8d4c203f9dfe294ffe94fa.zip
Preloading support in browser
Apps like the QSB can request the browser to preload a web page. - preloaded pages are not added to the browser history if they'r not seen by the user - when a request is received, a new tab is created for the preloaded page, but not added to the tab list - upon receiving the view intent for the preloaded page the tab is added to the tab list, and shown - if several pages are preloaded consecutively in the same tab, the back stack is cleared before it is displayed - preloaded pages use the main browser cookie jar, so pages that have never been viewed by the user can drop cookies Change-Id: I9ed21f2c9560fda0ed042b460b73bb33988a2e8a
Diffstat (limited to 'src/com/android/browser/IntentHandler.java')
-rw-r--r--src/com/android/browser/IntentHandler.java34
1 files changed, 30 insertions, 4 deletions
diff --git a/src/com/android/browser/IntentHandler.java b/src/com/android/browser/IntentHandler.java
index 088a788d2..a99164a48 100644
--- a/src/com/android/browser/IntentHandler.java
+++ b/src/com/android/browser/IntentHandler.java
@@ -135,8 +135,14 @@ public class IntentHandler {
urlData = new UrlData(mSettings.getHomePage());
}
- if (intent.getBooleanExtra(Browser.EXTRA_CREATE_NEW_TAB, false)) {
- mController.openTab(urlData);
+ if (intent.getBooleanExtra(Browser.EXTRA_CREATE_NEW_TAB, false)
+ || urlData.isPreloaded()) {
+ Tab t = mController.openTab(urlData);
+ if (t == null && urlData.isPreloaded()) {
+ Tab pre = urlData.getPreloadedTab();
+ // TODO: check if we need to stop loading
+ pre.destroy();
+ }
return;
}
/*
@@ -220,9 +226,10 @@ public class IntentHandler {
}
}
- protected UrlData getUrlDataFromIntent(Intent intent) {
+ protected static UrlData getUrlDataFromIntent(Intent intent) {
String url = "";
Map<String, String> headers = null;
+ Tab preloaded = null;
if (intent != null
&& (intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
final String action = intent.getAction();
@@ -241,6 +248,10 @@ public class IntentHandler {
}
}
}
+ if (intent.hasExtra(PreloadRequestReceiver.EXTRA_PRELOAD_ID)) {
+ String id = intent.getStringExtra(PreloadRequestReceiver.EXTRA_PRELOAD_ID);
+ preloaded = Preloader.getInstance().getPreloadedTab(id);
+ }
} else if (Intent.ACTION_SEARCH.equals(action)
|| MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)
|| Intent.ACTION_WEB_SEARCH.equals(action)) {
@@ -265,7 +276,7 @@ public class IntentHandler {
}
}
}
- return new UrlData(url, headers, intent);
+ return new UrlData(url, headers, intent, preloaded);
}
/**
@@ -348,14 +359,20 @@ public class IntentHandler {
final String mUrl;
final Map<String, String> mHeaders;
final Intent mVoiceIntent;
+ final Tab mPreloadedTab;
UrlData(String url) {
this.mUrl = url;
this.mHeaders = null;
this.mVoiceIntent = null;
+ this.mPreloadedTab = null;
}
UrlData(String url, Map<String, String> headers, Intent intent) {
+ this(url, headers, intent, null);
+ }
+
+ UrlData(String url, Map<String, String> headers, Intent intent, Tab preloaded) {
this.mUrl = url;
this.mHeaders = headers;
if (RecognizerResultsIntent.ACTION_VOICE_SEARCH_RESULTS
@@ -364,11 +381,20 @@ public class IntentHandler {
} else {
this.mVoiceIntent = null;
}
+ mPreloadedTab = preloaded;
}
boolean isEmpty() {
return mVoiceIntent == null && (mUrl == null || mUrl.length() == 0);
}
+
+ boolean isPreloaded() {
+ return mPreloadedTab != null;
+ }
+
+ Tab getPreloadedTab() {
+ return mPreloadedTab;
+ }
}
}