Index: chrome/android/java/src/org/chromium/chrome/browser/ChromiumApplication.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromiumApplication.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromiumApplication.java |
index 6379eb965c8f76b3567e73b366bac32767a53da2..053c041a7ed82f2a09972d8ca2267707f98fcc86 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromiumApplication.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromiumApplication.java |
@@ -7,8 +7,11 @@ package org.chromium.chrome.browser; |
import android.app.Activity; |
import android.content.Context; |
import android.content.Intent; |
+import android.content.SharedPreferences; |
import android.os.Build; |
import android.os.Bundle; |
+import android.os.SystemClock; |
+import android.preference.PreferenceManager; |
import android.util.Log; |
import org.chromium.base.ActivityState; |
@@ -46,6 +49,9 @@ import java.util.concurrent.Callable; |
public abstract class ChromiumApplication extends ContentApplication { |
private static final String TAG = "ChromiumApplication"; |
+ private static final String PREF_BOOT_TIMESTAMP = |
+ "com.google.android.apps.chrome.ChromeMobileApplication.BOOT_TIMESTAMP"; |
+ private static final long BOOT_TIMESTAMP_MARGIN_MS = 1000; |
/** |
* Returns whether the Activity is being shown in multi-window mode. |
@@ -282,6 +288,36 @@ public abstract class ChromiumApplication extends ContentApplication { |
} |
} |
+ /** |
+ * Removes all session cookies (cookies with no expiration date) after device reboots. |
+ * This function will incorrectly clear cookies when Daylight Savings Time changes the clock. |
+ * Without a way to get a monotonically increasing system clock, the boot timestamp will be off |
+ * by one hour. However, this should only happen at most once when the clock changes since the |
+ * updated timestamp is immediately saved. |
+ */ |
+ protected void removeSessionCookies() { |
+ long lastKnownBootTimestamp = |
+ PreferenceManager.getDefaultSharedPreferences(this).getLong(PREF_BOOT_TIMESTAMP, 0); |
+ long bootTimestamp = System.currentTimeMillis() - SystemClock.uptimeMillis(); |
+ long difference = bootTimestamp - lastKnownBootTimestamp; |
+ |
+ // Allow some leeway to account for fractions of milliseconds. |
+ if (Math.abs(difference) > BOOT_TIMESTAMP_MARGIN_MS) { |
+ nativeRemoveSessionCookies(); |
+ |
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); |
+ SharedPreferences.Editor editor = prefs.edit(); |
+ editor.putLong(PREF_BOOT_TIMESTAMP, bootTimestamp); |
+ editor.apply(); |
+ } |
+ } |
+ |
+ protected void changeAppStatus(boolean inForeground) { |
+ nativeChangeAppStatus(inForeground); |
+ } |
+ |
+ private static native void nativeRemoveSessionCookies(); |
+ private static native void nativeChangeAppStatus(boolean inForeground); |
private static native String nativeGetBrowserUserAgent(); |
private static native void nativeFlushPersistentData(); |
} |