summaryrefslogtreecommitdiffstats
path: root/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/PrivateModeTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/PrivateModeTest.kt')
-rw-r--r--mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/PrivateModeTest.kt105
1 files changed, 105 insertions, 0 deletions
diff --git a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/PrivateModeTest.kt b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/PrivateModeTest.kt
new file mode 100644
index 0000000000..7df55b1ccb
--- /dev/null
+++ b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/PrivateModeTest.kt
@@ -0,0 +1,105 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+package org.mozilla.geckoview.test
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import org.hamcrest.Matchers
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mozilla.geckoview.GeckoSessionSettings
+
+@RunWith(AndroidJUnit4::class)
+@MediumTest
+class PrivateModeTest : BaseSessionTest() {
+ @Test
+ fun privateDataNotShared() {
+ mainSession.loadUri("https://example.com")
+ mainSession.waitForPageStop()
+
+ mainSession.evaluateJS(
+ """
+ localStorage.setItem('ctx', 'regular');
+ """,
+ )
+
+ val privateSession = sessionRule.createOpenSession(
+ GeckoSessionSettings.Builder(mainSession.settings)
+ .usePrivateMode(true)
+ .build(),
+ )
+ privateSession.loadUri("https://example.com")
+ privateSession.waitForPageStop()
+ var localStorage = privateSession.evaluateJS(
+ """
+ localStorage.getItem('ctx') || 'null'
+ """,
+ ) as String
+
+ // Ensure that the regular session's data hasn't leaked into the private session.
+ assertThat(
+ "Private mode local storage value should be empty",
+ localStorage,
+ Matchers.equalTo("null"),
+ )
+
+ privateSession.evaluateJS(
+ """
+ localStorage.setItem('ctx', 'private');
+ """,
+ )
+
+ localStorage = mainSession.evaluateJS(
+ """
+ localStorage.getItem('ctx') || 'null'
+ """,
+ ) as String
+
+ // Conversely, ensure private data hasn't leaked into the regular session.
+ assertThat(
+ "Regular mode storage value should be unchanged",
+ localStorage,
+ Matchers.equalTo("regular"),
+ )
+ }
+
+ @Test
+ fun privateModeStorageShared() {
+ // Two private mode sessions should share the same storage (bug 1533406).
+ val privateSession1 = sessionRule.createOpenSession(
+ GeckoSessionSettings.Builder(mainSession.settings)
+ .usePrivateMode(true)
+ .build(),
+ )
+ privateSession1.loadUri("https://example.com")
+ privateSession1.waitForPageStop()
+
+ privateSession1.evaluateJS(
+ """
+ localStorage.setItem('ctx', 'private');
+ """,
+ )
+
+ val privateSession2 = sessionRule.createOpenSession(
+ GeckoSessionSettings.Builder(mainSession.settings)
+ .usePrivateMode(true)
+ .build(),
+ )
+ privateSession2.loadUri("https://example.com")
+ privateSession2.waitForPageStop()
+
+ val localStorage = privateSession2.evaluateJS(
+ """
+ localStorage.getItem('ctx') || 'null'
+ """,
+ ) as String
+
+ assertThat(
+ "Private mode storage value still set",
+ localStorage,
+ Matchers.equalTo("private"),
+ )
+ }
+}