summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/browser/BrowserWebView.java32
-rw-r--r--src/com/android/browser/BrowserWebViewFactory.java1
-rw-r--r--src/com/android/browser/Tab.java21
3 files changed, 51 insertions, 3 deletions
diff --git a/src/com/android/browser/BrowserWebView.java b/src/com/android/browser/BrowserWebView.java
index 3e3672c..eabb0e0 100644
--- a/src/com/android/browser/BrowserWebView.java
+++ b/src/com/android/browser/BrowserWebView.java
@@ -21,6 +21,7 @@ import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
import android.webkit.WebChromeClient;
+import android.webkit.WebSettings;
import android.webkit.WebStorage;
import android.webkit.WebView;
import android.webkit.WebViewClient;
@@ -41,6 +42,7 @@ public class BrowserWebView extends WebView {
private OnScrollChangedListener mOnScrollChangedListener;
private WebChromeClient mWebChromeClient;
private WebViewClient mWebViewClient;
+ private boolean mPrivateBrowsing = false;
/**
* @param context
@@ -50,7 +52,9 @@ public class BrowserWebView extends WebView {
*/
public BrowserWebView(Context context, AttributeSet attrs, int defStyle,
Map<String, Object> javascriptInterfaces, boolean privateBrowsing) {
- super(context, attrs, defStyle, javascriptInterfaces, privateBrowsing);
+ super(context, attrs, defStyle, javascriptInterfaces, false);
+ // WebView doesn't support it, but save it here for internal use
+ mPrivateBrowsing = privateBrowsing;
}
/**
@@ -60,7 +64,9 @@ public class BrowserWebView extends WebView {
*/
public BrowserWebView(
Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
- super(context, attrs, defStyle, privateBrowsing);
+ super(context, attrs, defStyle, false);
+ // WebView doesn't support it, but save it here for internal use
+ mPrivateBrowsing = privateBrowsing;
}
/**
@@ -153,4 +159,26 @@ public class BrowserWebView extends WebView {
super.destroy();
}
+ @Override
+ public boolean isPrivateBrowsingEnabled() {
+ return mPrivateBrowsing;
+ }
+
+ /* Make sure the local webview remains in sync, since the engine won't retain that data */
+ public void setPrivateBrowsing(boolean state) {
+ mPrivateBrowsing = state;
+ if (state) {
+ // Disable ALL the things
+ this.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
+ this.getSettings().setAppCacheEnabled(false);
+ this.getSettings().setDomStorageEnabled(false);
+ this.getSettings().setDatabaseEnabled(false);
+ this.getSettings().setGeolocationEnabled(false);
+ this.getSettings().setSaveFormData(false);
+ this.getSettings().setSavePassword(false);
+ this.getSettings().setSupportMultipleWindows(false);
+ this.getSettings().setAppCacheMaxSize(0);
+ this.clearHistory();
+ }
+ }
}
diff --git a/src/com/android/browser/BrowserWebViewFactory.java b/src/com/android/browser/BrowserWebViewFactory.java
index 2349c28..64e4da7 100644
--- a/src/com/android/browser/BrowserWebViewFactory.java
+++ b/src/com/android/browser/BrowserWebViewFactory.java
@@ -47,6 +47,7 @@ public class BrowserWebViewFactory implements WebViewFactory {
public WebView createWebView(boolean privateBrowsing) {
WebView w = instantiateWebView(null, android.R.attr.webViewStyle, privateBrowsing);
initWebViewSettings(w);
+ ((BrowserWebView)w).setPrivateBrowsing(privateBrowsing);
return w;
}
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index a4d2ce0..907f7a1 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -347,6 +347,11 @@ class Tab implements PictureListener {
view.isPrivateBrowsingEnabled(), url, favicon);
mLoadStartTime = SystemClock.uptimeMillis();
+ if (isPrivateBrowsingEnabled()) {
+ // Ignore all the cookies while an incognito tab has activity
+ CookieManager.getInstance().setAcceptCookie(false);
+ }
+
// If we start a touch icon load and then load a new page, we don't
// want to cancel the current touch icon loader. But, we do want to
// create a new one when the touch icon url is known.
@@ -382,6 +387,10 @@ class Tab implements PictureListener {
if (!isPrivateBrowsingEnabled()) {
LogTag.logPageFinishedLoading(
url, SystemClock.uptimeMillis() - mLoadStartTime);
+ } else {
+ // Ignored all the cookies while an incognito tab had activity,
+ // restore default after completion
+ CookieManager.getInstance().setAcceptCookie(mSettings.acceptCookies());
}
syncCurrentState(view, url);
mWebViewController.onPageFinished(Tab.this);
@@ -1016,7 +1025,11 @@ class Tab implements PictureListener {
*/
@Override
public void getVisitedHistory(final ValueCallback<String[]> callback) {
- mWebViewController.getVisitedHistory(callback);
+ if (isPrivateBrowsingEnabled()) {
+ callback.onReceiveValue(new String[0]);
+ } else {
+ mWebViewController.getVisitedHistory(callback);
+ }
}
};
@@ -1507,6 +1520,12 @@ class Tab implements PictureListener {
* @return The main WebView of this tab.
*/
WebView getWebView() {
+ /* Ensure the root webview object is in sync with our internal incognito status */
+ if (mMainView instanceof BrowserWebView) {
+ if (isPrivateBrowsingEnabled() && !mMainView.isPrivateBrowsingEnabled()) {
+ ((BrowserWebView)mMainView).setPrivateBrowsing(isPrivateBrowsingEnabled());
+ }
+ }
return mMainView;
}