Backed out 4 changesets (bug 1501108) for browser chrome failures on browser_principalSerialization_version1.js. CLOSED TREE
authorCosmin Sabou <csabou@mozilla.com>
Tue, 16 Apr 2019 01:10:26 +0300
changeset 469577 095d253f97be7112a6f0ffa0b9d892964f5264d7
parent 469576 252732b54408cbf9de761baf469a03e55066a280
child 469578 eb866ced3ffa9dadcc1cda5970f164e7e050368a
push id35874
push userccoroiu@mozilla.com
push dateTue, 16 Apr 2019 04:04:58 +0000
treeherdermozilla-central@be3f40425b52 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1501108
milestone68.0a1
backs outda28ce3af312c7d0541be9c8cb96fbf427ebb61b
1936dde5f34c98c7eaca6d53d9826e3b40f1134c
de36c9fb8c65a6b78e7a98a3b3a06b60ffd3102b
cad2b29b79d2a086c96feb0326cf61e53bb105da
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out 4 changesets (bug 1501108) for browser chrome failures on browser_principalSerialization_version1.js. CLOSED TREE Backed out changeset da28ce3af312 (bug 1501108) Backed out changeset 1936dde5f34c (bug 1501108) Backed out changeset de36c9fb8c65 (bug 1501108) Backed out changeset cad2b29b79d2 (bug 1501108)
caps/OriginAttributes.cpp
caps/OriginAttributes.h
dom/chrome-webidl/ChromeUtils.webidl
mobile/android/components/geckoview/GeckoViewStartup.js
mobile/android/geckoview/api.txt
mobile/android/geckoview/src/androidTest/assets/www/reflect_local_storage_into_title.html
mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/BaseSessionTest.kt
mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/NavigationDelegateTest.kt
mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java
mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoSessionSettings.java
mobile/android/geckoview/src/main/java/org/mozilla/geckoview/StorageController.java
mobile/android/geckoview/src/main/java/org/mozilla/geckoview/doc-files/CHANGELOG.md
mobile/android/modules/geckoview/GeckoViewNavigation.jsm
mobile/android/modules/geckoview/GeckoViewSettings.jsm
netwerk/protocol/http/HttpBaseChannel.cpp
--- a/caps/OriginAttributes.cpp
+++ b/caps/OriginAttributes.cpp
@@ -158,25 +158,16 @@ void OriginAttributes::CreateSuffix(nsAC
     nsAutoString sanitizedFirstPartyDomain(mFirstPartyDomain);
     sanitizedFirstPartyDomain.ReplaceChar(
         dom::quota::QuotaManager::kReplaceChars, '+');
 
     params.Set(NS_LITERAL_STRING("firstPartyDomain"),
                sanitizedFirstPartyDomain);
   }
 
-  if (!mGeckoViewSessionContextId.IsEmpty()) {
-    nsAutoString sanitizedGeckoViewUserContextId(mGeckoViewSessionContextId);
-    sanitizedGeckoViewUserContextId.ReplaceChar(
-        dom::quota::QuotaManager::kReplaceChars, '+');
-
-    params.Set(NS_LITERAL_STRING("geckoViewUserContextId"),
-               sanitizedGeckoViewUserContextId);
-  }
-
   aStr.Truncate();
 
   params.Serialize(value);
   if (!value.IsEmpty()) {
     aStr.AppendLiteral("^");
     aStr.Append(NS_ConvertUTF16toUTF8(value));
   }
 
@@ -262,22 +253,16 @@ class MOZ_STACK_CLASS PopulateFromSuffix
     }
 
     if (aName.EqualsLiteral("firstPartyDomain")) {
       MOZ_RELEASE_ASSERT(mOriginAttributes->mFirstPartyDomain.IsEmpty());
       mOriginAttributes->mFirstPartyDomain.Assign(aValue);
       return true;
     }
 
-    if (aName.EqualsLiteral("geckoViewUserContextId")) {
-      MOZ_RELEASE_ASSERT(mOriginAttributes->mGeckoViewSessionContextId.IsEmpty());
-      mOriginAttributes->mGeckoViewSessionContextId.Assign(aValue);
-      return true;
-    }
-
     // No other attributes are supported.
     return false;
   }
 
  private:
   OriginAttributes* mOriginAttributes;
 };
 
--- a/caps/OriginAttributes.h
+++ b/caps/OriginAttributes.h
@@ -45,30 +45,28 @@ class OriginAttributes : public dom::Ori
     }
   }
 
   bool operator==(const OriginAttributes& aOther) const {
     return mAppId == aOther.mAppId &&
            mInIsolatedMozBrowser == aOther.mInIsolatedMozBrowser &&
            mUserContextId == aOther.mUserContextId &&
            mPrivateBrowsingId == aOther.mPrivateBrowsingId &&
-           mFirstPartyDomain == aOther.mFirstPartyDomain &&
-           mGeckoViewSessionContextId == aOther.mGeckoViewSessionContextId;
+           mFirstPartyDomain == aOther.mFirstPartyDomain;
   }
 
   bool operator!=(const OriginAttributes& aOther) const {
     return !(*this == aOther);
   }
 
   MOZ_MUST_USE bool EqualsIgnoringFPD(const OriginAttributes& aOther) const {
     return mAppId == aOther.mAppId &&
            mInIsolatedMozBrowser == aOther.mInIsolatedMozBrowser &&
            mUserContextId == aOther.mUserContextId &&
-           mPrivateBrowsingId == aOther.mPrivateBrowsingId &&
-           mGeckoViewSessionContextId == aOther.mGeckoViewSessionContextId;
+           mPrivateBrowsingId == aOther.mPrivateBrowsingId;
   }
 
   // Serializes/Deserializes non-default values into the suffix format, i.e.
   // |!key1=value1&key2=value2|. If there are no non-default attributes, this
   // returns an empty string.
   void CreateSuffix(nsACString& aStr) const;
 
   // Don't use this method for anything else than debugging!
@@ -150,21 +148,16 @@ class OriginAttributesPattern : public d
       return false;
     }
 
     if (mFirstPartyDomain.WasPassed() &&
         mFirstPartyDomain.Value() != aAttrs.mFirstPartyDomain) {
       return false;
     }
 
-    if (mGeckoViewSessionContextId.WasPassed() &&
-        mGeckoViewSessionContextId.Value() != aAttrs.mGeckoViewSessionContextId) {
-      return false;
-    }
-
     return true;
   }
 
   bool Overlaps(const OriginAttributesPattern& aOther) const {
     if (mAppId.WasPassed() && aOther.mAppId.WasPassed() &&
         mAppId.Value() != aOther.mAppId.Value()) {
       return false;
     }
@@ -186,20 +179,15 @@ class OriginAttributesPattern : public d
       return false;
     }
 
     if (mFirstPartyDomain.WasPassed() && aOther.mFirstPartyDomain.WasPassed() &&
         mFirstPartyDomain.Value() != aOther.mFirstPartyDomain.Value()) {
       return false;
     }
 
-    if (mGeckoViewSessionContextId.WasPassed() && aOther.mGeckoViewSessionContextId.WasPassed() &&
-        mGeckoViewSessionContextId.Value() != aOther.mGeckoViewSessionContextId.Value()) {
-      return false;
-    }
-
     return true;
   }
 };
 
 }  // namespace mozilla
 
 #endif /* mozilla_OriginAttributes_h */
--- a/dom/chrome-webidl/ChromeUtils.webidl
+++ b/dom/chrome-webidl/ChromeUtils.webidl
@@ -520,25 +520,23 @@ dictionary IOActivityDataDictionary {
  * (3) Update the methods on mozilla::OriginAttributesPattern, including matching.
  */
 dictionary OriginAttributesDictionary {
   unsigned long appId = 0;
   unsigned long userContextId = 0;
   boolean inIsolatedMozBrowser = false;
   unsigned long privateBrowsingId = 0;
   DOMString firstPartyDomain = "";
-  DOMString geckoViewSessionContextId = "";
 };
 dictionary OriginAttributesPatternDictionary {
   unsigned long appId;
   unsigned long userContextId;
   boolean inIsolatedMozBrowser;
   unsigned long privateBrowsingId;
   DOMString firstPartyDomain;
-  DOMString geckoViewSessionContextId;
 };
 
 dictionary CompileScriptOptionsDictionary {
   /**
    * The character set from which to decode the script.
    */
   DOMString charset = "utf-8";
 
--- a/mobile/android/components/geckoview/GeckoViewStartup.js
+++ b/mobile/android/components/geckoview/GeckoViewStartup.js
@@ -126,41 +126,29 @@ GeckoViewStartup.prototype = {
 
         ChromeUtils.import("resource://gre/modules/NotificationDB.jsm");
 
         // Initialize safe browsing module. This is required for content
         // blocking features and manages blocklist downloads and updates.
         SafeBrowsing.init();
 
         // Listen for global EventDispatcher messages
-        EventDispatcher.instance.registerListener(this, [
-          "GeckoView:ClearSessionContextData",
-          "GeckoView:ResetUserPrefs",
-          "GeckoView:SetDefaultPrefs",
-          "GeckoView:SetLocale",
-        ]);
+        EventDispatcher.instance.registerListener(this,
+          ["GeckoView:ResetUserPrefs",
+           "GeckoView:SetDefaultPrefs",
+           "GeckoView:SetLocale"]);
         break;
       }
     }
   },
 
   onEvent(aEvent, aData, aCallback) {
     debug `onEvent ${aEvent}`;
 
     switch (aEvent) {
-      case "GeckoView:ClearSessionContextData": {
-        let pattern = {};
-        if (aData.contextId !== null) {
-          pattern = { geckoViewSessionContextId: aData.contextId };
-        }
-        Services.clearData.deleteDataFromOriginAttributesPattern(pattern);
-        Services.qms.clearStoragesForOriginAttributesPattern(
-          JSON.stringify(pattern));
-        break;
-      }
       case "GeckoView:ResetUserPrefs": {
         const prefs = new Preferences();
         prefs.reset(aData.names);
         break;
       }
       case "GeckoView:SetDefaultPrefs": {
         const prefs = new Preferences({ defaultBranch: true });
         for (const name of Object.keys(aData)) {
--- a/mobile/android/geckoview/api.txt
+++ b/mobile/android/geckoview/api.txt
@@ -73,17 +73,16 @@ import org.mozilla.geckoview.MediaElemen
 import org.mozilla.geckoview.OverscrollEdgeEffect;
 import org.mozilla.geckoview.PanZoomController;
 import org.mozilla.geckoview.RuntimeSettings;
 import org.mozilla.geckoview.RuntimeTelemetry;
 import org.mozilla.geckoview.ScreenLength;
 import org.mozilla.geckoview.SessionAccessibility;
 import org.mozilla.geckoview.SessionFinder;
 import org.mozilla.geckoview.SessionTextInput;
-import org.mozilla.geckoview.StorageController;
 import org.mozilla.geckoview.WebExtension;
 import org.mozilla.geckoview.WebMessage;
 import org.mozilla.geckoview.WebRequest;
 import org.mozilla.geckoview.WebRequestError;
 import org.mozilla.geckoview.WebResponse;
 
 package org.mozilla.geckoview {
 
@@ -262,25 +261,25 @@ package org.mozilla.geckoview {
     method @AnyThread @Nullable public GeckoResult<U> onValue(@Nullable T);
   }
 
   public static final class GeckoResult.UncaughtException extends RuntimeException {
     ctor public UncaughtException(Throwable);
   }
 
   public final class GeckoRuntime implements Parcelable {
+    ctor public GeckoRuntime();
     method @UiThread public void attachTo(@NonNull Context);
     method @UiThread public void configurationChanged(@NonNull Configuration);
     method @UiThread @NonNull public static GeckoRuntime create(@NonNull Context);
     method @UiThread @NonNull public static GeckoRuntime create(@NonNull Context, @NonNull GeckoRuntimeSettings);
     method @UiThread @NonNull public static synchronized GeckoRuntime getDefault(@NonNull Context);
     method @UiThread @Nullable public GeckoRuntime.Delegate getDelegate();
     method @UiThread @Nullable public File getProfileDir();
     method @AnyThread @NonNull public GeckoRuntimeSettings getSettings();
-    method @AnyThread @NonNull public StorageController getStorageController();
     method @UiThread @NonNull public RuntimeTelemetry getTelemetry();
     method @UiThread public void orientationChanged();
     method @UiThread public void orientationChanged(int);
     method @AnyThread public void readFromParcel(@NonNull Parcel);
     method @UiThread @NonNull public GeckoResult<Void> registerWebExtension(@NonNull WebExtension);
     method @UiThread public void setDelegate(@Nullable GeckoRuntime.Delegate);
     method @AnyThread public void shutdown();
     field public static final String ACTION_CRASHED = "org.mozilla.gecko.ACTION_CRASHED";
@@ -778,17 +777,16 @@ package org.mozilla.geckoview {
     field @NonNull public final String uri;
   }
 
   @AnyThread public final class GeckoSessionSettings implements Parcelable {
     ctor public GeckoSessionSettings();
     ctor public GeckoSessionSettings(@NonNull GeckoSessionSettings);
     method public boolean getAllowJavascript();
     method @Nullable public String getChromeUri();
-    method @Nullable public String getContextId();
     method public int getDisplayMode();
     method public boolean getFullAccessibilityTree();
     method public int getScreenId();
     method public boolean getSuspendMediaWhenInactive();
     method public boolean getUseMultiprocess();
     method public boolean getUsePrivateMode();
     method public boolean getUseTrackingProtection();
     method public int getUserAgentMode();
@@ -816,17 +814,16 @@ package org.mozilla.geckoview {
   }
 
   @AnyThread public static final class GeckoSessionSettings.Builder {
     ctor public Builder();
     ctor public Builder(GeckoSessionSettings);
     method @NonNull public GeckoSessionSettings.Builder allowJavascript(boolean);
     method @NonNull public GeckoSessionSettings build();
     method @NonNull public GeckoSessionSettings.Builder chromeUri(@NonNull String);
-    method @NonNull public GeckoSessionSettings.Builder contextId(@Nullable String);
     method @NonNull public GeckoSessionSettings.Builder displayMode(int);
     method @NonNull public GeckoSessionSettings.Builder fullAccessibilityTree(boolean);
     method @NonNull public GeckoSessionSettings.Builder screenId(int);
     method @NonNull public GeckoSessionSettings.Builder suspendMediaWhenInactive(boolean);
     method @NonNull public GeckoSessionSettings.Builder useMultiprocess(boolean);
     method @NonNull public GeckoSessionSettings.Builder usePrivateMode(boolean);
     method @NonNull public GeckoSessionSettings.Builder useTrackingProtection(boolean);
     method @NonNull public GeckoSessionSettings.Builder userAgentMode(int);
@@ -1027,22 +1024,16 @@ package org.mozilla.geckoview {
     method @UiThread public boolean onKeyMultiple(int, int, @NonNull KeyEvent);
     method @UiThread public boolean onKeyPreIme(int, @NonNull KeyEvent);
     method @UiThread public boolean onKeyUp(int, @NonNull KeyEvent);
     method @UiThread public void onProvideAutofillVirtualStructure(@NonNull ViewStructure, int);
     method @UiThread public void setDelegate(@Nullable GeckoSession.TextInputDelegate);
     method @UiThread public synchronized void setView(@Nullable View);
   }
 
-  public final class StorageController {
-    ctor public StorageController();
-    method @AnyThread public void clearAllSessionContextData();
-    method @AnyThread public void clearSessionContextData(@NonNull String);
-  }
-
   public class WebExtension {
     ctor public WebExtension(@NonNull String, @NonNull String);
     ctor public WebExtension(@NonNull String);
     field @NonNull public final String id;
     field @NonNull public final String location;
   }
 
   @AnyThread public abstract class WebMessage {
deleted file mode 100644
--- a/mobile/android/geckoview/src/androidTest/assets/www/reflect_local_storage_into_title.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<html>
-  <head>
-    <meta charset="UTF-8">
-    <title>no title</title>
-    <script>
-      // If we have a query string, save it to the local storage.
-      if (window.location.search.length > 0) {
-        const value = window.location.search.substr(1);
-        localStorage.setItem("ctx", value);
-      }
-
-      // Set the title to reflect the local storage value.
-      document.title = "storage=" + localStorage.getItem("ctx");
-    </script>
-  </head>
-  <body></body>
-</html>
--- a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/BaseSessionTest.kt
+++ b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/BaseSessionTest.kt
@@ -49,17 +49,16 @@ open class BaseSessionTest(noErrorCollec
         const val UNKNOWN_HOST_URI = "http://www.test.invalid/"
         const val FULLSCREEN_PATH = "/assets/www/fullscreen.html"
         const val VIEWPORT_PATH = "/assets/www/viewport.html"
         const val IFRAME_REDIRECT_LOCAL = "/assets/www/iframe_redirect_local.html"
         const val IFRAME_REDIRECT_AUTOMATION = "/assets/www/iframe_redirect_automation.html"
         const val AUTOPLAY_PATH = "/assets/www/autoplay.html"
         const val SCROLL_TEST_PATH = "/assets/www/scroll.html"
         const val COLORS_HTML_PATH = "/assets/www/colors.html"
-        const val STORAGE_TITLE_HTML_PATH = "/assets/www/reflect_local_storage_into_title.html"
     }
 
     @get:Rule val sessionRule = GeckoSessionTestRule()
 
     @get:Rule val errors = ErrorCollector()
 
     val mainSession get() = sessionRule.session
 
--- a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/NavigationDelegateTest.kt
+++ b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/NavigationDelegateTest.kt
@@ -1166,149 +1166,9 @@ class NavigationDelegateTest : BaseSessi
         // This loads in the parent process
         mainSession.loadUri("about:config")
         sessionRule.waitForPageStop()
 
         // This will load a page in the child
         mainSession.loadTestPath(HELLO_HTML_PATH)
         sessionRule.waitForPageStop()
     }
-
-    @WithDevToolsAPI
-    @Test fun sessionContextId() {
-        val session1 = sessionRule.createOpenSession(
-                GeckoSessionSettings.Builder(mainSession.settings)
-                .contextId("1")
-                .build())
-        session1.loadTestPath(STORAGE_TITLE_HTML_PATH + "?ctx1")
-        session1.waitForPageStop()
-
-        session1.forCallbacksDuringWait(object: Callbacks.ContentDelegate {
-            @AssertCalled(count = 1)
-            override fun onTitleChange(session: GeckoSession, title: String?) {
-                assertThat("Title should not be empty", title, not(isEmptyOrNullString()))
-                assertThat("Title should match", title,
-                           equalTo("storage=ctx1"))
-            }
-        })
-
-        session1.loadTestPath(STORAGE_TITLE_HTML_PATH)
-        session1.waitForPageStop()
-
-        session1.forCallbacksDuringWait(object: Callbacks.ContentDelegate {
-            @AssertCalled(count = 1)
-            override fun onTitleChange(session: GeckoSession, title: String?) {
-                assertThat("Title should not be empty", title, not(isEmptyOrNullString()))
-                assertThat("Title should match", title,
-                           equalTo("storage=ctx1"))
-            }
-        })
-
-        val session2 = sessionRule.createOpenSession(
-                GeckoSessionSettings.Builder(mainSession.settings)
-                .contextId("2")
-                .build())
-        session2.loadTestPath(STORAGE_TITLE_HTML_PATH)
-        session2.waitForPageStop()
-
-        session2.forCallbacksDuringWait(object: Callbacks.ContentDelegate {
-            @AssertCalled(count = 1)
-            override fun onTitleChange(session: GeckoSession, title: String?) {
-                assertThat("Title should not be empty", title, not(isEmptyOrNullString()))
-                assertThat("Title should match", title,
-                           equalTo("storage=null"))
-            }
-        })
-
-        session2.loadTestPath(STORAGE_TITLE_HTML_PATH + "?ctx2")
-        session2.waitForPageStop()
-
-        session2.forCallbacksDuringWait(object: Callbacks.ContentDelegate {
-            @AssertCalled(count = 1)
-            override fun onTitleChange(session: GeckoSession, title: String?) {
-                assertThat("Title should not be empty", title, not(isEmptyOrNullString()))
-                assertThat("Title should match", title,
-                           equalTo("storage=ctx2"))
-            }
-        })
-
-        session1.loadTestPath(STORAGE_TITLE_HTML_PATH)
-        session1.waitForPageStop()
-
-        session1.forCallbacksDuringWait(object: Callbacks.ContentDelegate {
-            @AssertCalled(count = 1)
-            override fun onTitleChange(session: GeckoSession, title: String?) {
-                assertThat("Title should not be empty", title, not(isEmptyOrNullString()))
-                assertThat("Title should match", title,
-                           equalTo("storage=ctx1"))
-            }
-        })
-    }
-
-    @WithDevToolsAPI
-    @Test fun clearSessionContextData() {
-        val session1 = sessionRule.createOpenSession(
-                GeckoSessionSettings.Builder(mainSession.settings)
-                .contextId("1")
-                .build())
-        session1.loadTestPath(STORAGE_TITLE_HTML_PATH + "?ctx1")
-        session1.waitForPageStop()
-
-        session1.forCallbacksDuringWait(object: Callbacks.ContentDelegate {
-            @AssertCalled(count = 1)
-            override fun onTitleChange(session: GeckoSession, title: String?) {
-                assertThat("Title should not be empty", title, not(isEmptyOrNullString()))
-                assertThat("Title should match", title,
-                           equalTo("storage=ctx1"))
-            }
-        })
-
-        session1.loadTestPath(STORAGE_TITLE_HTML_PATH)
-        session1.waitForPageStop()
-
-        session1.forCallbacksDuringWait(object: Callbacks.ContentDelegate {
-            @AssertCalled(count = 1)
-            override fun onTitleChange(session: GeckoSession, title: String?) {
-                assertThat("Title should not be empty", title, not(isEmptyOrNullString()))
-                assertThat("Title should match", title,
-                           equalTo("storage=ctx1"))
-            }
-        })
-
-        session1.close()
-
-        val session2 = sessionRule.createOpenSession(
-                GeckoSessionSettings.Builder(mainSession.settings)
-                .contextId("1")
-                .build())
-        session2.loadTestPath(STORAGE_TITLE_HTML_PATH)
-        session2.waitForPageStop()
-
-        session2.forCallbacksDuringWait(object: Callbacks.ContentDelegate {
-            @AssertCalled(count = 1)
-            override fun onTitleChange(session: GeckoSession, title: String?) {
-                assertThat("Title should not be empty", title, not(isEmptyOrNullString()))
-                assertThat("Title should match", title,
-                           equalTo("storage=ctx1"))
-            }
-        })
-
-        session2.close()
-
-        sessionRule.runtime.storageController.clearSessionContextData("1")
-
-        val session3 = sessionRule.createOpenSession(
-                GeckoSessionSettings.Builder(mainSession.settings)
-                .contextId("1")
-                .build())
-        session3.loadTestPath(STORAGE_TITLE_HTML_PATH)
-        session3.waitForPageStop()
-
-        session3.forCallbacksDuringWait(object: Callbacks.ContentDelegate {
-            @AssertCalled(count = 1)
-            override fun onTitleChange(session: GeckoSession, title: String?) {
-                assertThat("Title should not be empty", title, not(isEmptyOrNullString()))
-                assertThat("Title should match", title,
-                           equalTo("storage=null"))
-            }
-        })
-    }
 }
--- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java
@@ -82,22 +82,16 @@ public final class GeckoRuntime implemen
      * This is a key for extra data sent with {@link #ACTION_CRASHED}. The value is
      * a boolean indicating whether or not the crash was fatal or not. If true, the
      * main application process was affected by the crash. If false, only an internal
      * process used by Gecko has crashed and the application may be able to recover.
      * @see GeckoSession.ContentDelegate#onCrash(GeckoSession)
      */
     public static final String EXTRA_CRASH_FATAL = "fatal";
 
-    private final StorageController mStorageController;
-
-    private GeckoRuntime() {
-        mStorageController = new StorageController();
-    }
-
     private static GeckoRuntime sDefaultRuntime;
 
     /**
      * Get the default runtime for the given context.
      * This will create and initialize the runtime with the default settings.
      *
      * Note: Only use this for session-less apps.
      *       For regular apps, use create() instead.
@@ -453,27 +447,16 @@ public final class GeckoRuntime implemen
      *                       {@link android.content.res.Configuration}.
      */
     @UiThread
     public void orientationChanged(final int newOrientation) {
         ThreadUtils.assertOnUiThread();
         GeckoScreenOrientation.getInstance().update(newOrientation);
     }
 
-
-    /**
-     * Get the storage controller for this runtime.
-     *
-     * @return The {@link StorageController} for this instance.
-     */
-    @AnyThread
-    public @NonNull StorageController getStorageController() {
-        return mStorageController;
-    }
-
     @Override // Parcelable
     @AnyThread
     public int describeContents() {
         return 0;
     }
 
     @Override // Parcelable
     @AnyThread
--- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoSessionSettings.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoSessionSettings.java
@@ -75,36 +75,16 @@ public final class GeckoSessionSettings 
          * @return This Builder instance.
          */
         public @NonNull Builder usePrivateMode(final boolean flag) {
             mSettings.setUsePrivateMode(flag);
             return this;
         }
 
         /**
-         * Set the session context ID for this instance.
-         * Setting a context ID partitions the cookie jars based on the provided
-         * IDs. This isolates the browser storage like cookies and localStorage
-         * between sessions, only sessions that share the same ID share storage
-         * data.
-         *
-         * Warning: Storage data is collected persistently for each context,
-         * to delete context data, call {@link StorageController#clearSessionContextData}
-         * for the given context.
-         *
-         * @param value The custom context ID.
-         *              The default ID is null, which removes isolation for this
-         *              instance.
-         */
-        public @NonNull Builder contextId(final @Nullable String value) {
-            mSettings.setContextId(value);
-            return this;
-        }
-
-        /**
          * Set whether multi-process support should be enabled.
          *
          * @param flag A flag determining whether multi-process should be enabled.
          *             Default is false.
          * @return This Builder instance.
          */
         public @NonNull Builder useMultiprocess(final boolean flag) {
             mSettings.setUseMultiprocess(flag);
@@ -228,17 +208,16 @@ public final class GeckoSessionSettings 
 
     // This needs to match GeckoViewSettingsChild.js
     /**
      * Mobile-friendly pages will be rendered using a viewport based on their &lt;meta&gt; viewport
      * tag. All other pages will be rendered using a special desktop mode viewport, which has a
      * width of 980 CSS px.
      */
     public static final int VIEWPORT_MODE_MOBILE = 0;
-
     /**
      * All pages will be rendered using the special desktop mode viewport, which has a width of
      * 980 CSS px, regardless of whether the page has a &lt;meta&gt; viewport tag specified or not.
      */
     public static final int VIEWPORT_MODE_DESKTOP = 1;
 
     public static class Key<T> {
         /* package */ final String name;
@@ -330,22 +309,16 @@ public final class GeckoSessionSettings 
     private static final Key<Boolean> ALLOW_JAVASCRIPT =
             new Key<Boolean>("allowJavascript", /* initOnly */ false, /* values */ null);
     /**
      * Key to specify if entire accessible tree should be exposed with no caching.
      */
     private static final Key<Boolean> FULL_ACCESSIBILITY_TREE =
             new Key<Boolean>("fullAccessibilityTree", /* initOnly */ false, /* values */ null);
 
-    /**
-     * Key to specify the session context ID.
-     */
-    private static final Key<String> CONTEXT_ID =
-        new Key<String>("sessionContextId", /* initOnly */ true, /* values */ null);
-
     private final GeckoSession mSession;
     private final GeckoBundle mBundle;
 
     public GeckoSessionSettings() {
         this(null, null);
     }
 
     public GeckoSessionSettings(final @NonNull GeckoSessionSettings settings) {
@@ -369,17 +342,16 @@ public final class GeckoSessionSettings 
         mBundle.putBoolean(USE_MULTIPROCESS.name, true);
         mBundle.putBoolean(SUSPEND_MEDIA_WHEN_INACTIVE.name, false);
         mBundle.putBoolean(ALLOW_JAVASCRIPT.name, true);
         mBundle.putBoolean(FULL_ACCESSIBILITY_TREE.name, false);
         mBundle.putInt(USER_AGENT_MODE.name, USER_AGENT_MODE_MOBILE);
         mBundle.putString(USER_AGENT_OVERRIDE.name, null);
         mBundle.putInt(VIEWPORT_MODE.name, VIEWPORT_MODE_MOBILE);
         mBundle.putInt(DISPLAY_MODE.name, DISPLAY_MODE_BROWSER);
-        mBundle.putString(CONTEXT_ID.name, null);
     }
 
     /**
      * Set whether tracking protection should be enabled.
      *
      * @param value A flag determining whether tracking protection should be enabled.
      *             Default is false.
      */
@@ -463,25 +435,16 @@ public final class GeckoSessionSettings 
      *
      * @return true if private mode is enabled, false if not.
      */
     public boolean getUsePrivateMode() {
         return getBoolean(USE_PRIVATE_MODE);
     }
 
     /**
-     * The context ID for this session.
-     *
-     * @return The context ID for this session.
-     */
-    public @Nullable String getContextId() {
-        return getString(CONTEXT_ID);
-    }
-
-    /**
      * Whether multiprocess is enabled.
      *
      * @return true if multiprocess is enabled, false if not.
      */
     public boolean getUseMultiprocess() {
         return getBoolean(USE_MULTIPROCESS);
     }
 
@@ -629,20 +592,16 @@ public final class GeckoSessionSettings 
      * Specify the user agent override string.
      * Set value to null to use the user agent specified by USER_AGENT_MODE.
      * @param value The string to override the user agent with.
      */
     public void setUserAgentOverride(final @Nullable String value) {
         setString(USER_AGENT_OVERRIDE, value);
     }
 
-    private void setContextId(final @Nullable String value) {
-        setString(CONTEXT_ID, value);
-    }
-
     private void setString(final Key<String> key, final String value) {
         synchronized (mBundle) {
             if (valueChangedLocked(key, value)) {
                 mBundle.putString(key.name, value);
                 dispatchUpdate();
             }
         }
     }
deleted file mode 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/StorageController.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
- * vim: ts=4 sw=4 expandtab:
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-package org.mozilla.geckoview;
-
-import android.support.annotation.AnyThread;
-import android.support.annotation.NonNull;
-
-import org.mozilla.gecko.EventDispatcher;
-import org.mozilla.gecko.util.GeckoBundle;
-
-/**
- * Manage and control runtime storage data.
- *
- * Retrieve an instance via {@link GeckoRuntime#getStorageController}.
- */
-public final class StorageController {
-    /**
-     * Clear all browser storage data like cookies and localStorage for the
-     * given context.
-     *
-     * Note: Any open session may re-accumulate previously cleared data. To
-     * ensure that no persistent data is left behind, you need to close all
-     * sessions for the given context prior to clearing data.
-     *
-     * @param contextId The context ID for the storage data to be deleted.
-     *                  For null, all storage data will be cleared.
-     */
-    @AnyThread
-    public void clearSessionContextData(final @NonNull String contextId) {
-        final GeckoBundle bundle = new GeckoBundle(1);
-        bundle.putString("contextId", contextId);
-
-        EventDispatcher.getInstance().dispatch(
-            "GeckoView:ClearSessionContextData", bundle);
-    }
-
-    /**
-     * Clear all browser storage data like cookies and localStorage.
-     *
-     * Note: Any open session may re-accumulate previously cleared data. To
-     * ensure that no persistent data is left behind, you need to close all
-     * sessions prior to clearing data.
-     */
-    @AnyThread
-    public void clearAllSessionContextData() {
-        final GeckoBundle bundle = new GeckoBundle(1);
-        bundle.putString("contextId", null);
-
-        EventDispatcher.getInstance().dispatch(
-            "GeckoView:ClearSessionContextData", bundle);
-    }
-}
--- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/doc-files/CHANGELOG.md
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/doc-files/CHANGELOG.md
@@ -58,24 +58,16 @@ exclude: true
   [`HistoryDelegate`][68.12] and added `gotoHistoryIndex` to [`GeckoSession`][68.13].
 
 [68.12]: ../GeckoSession.HistoryDelegate.html
 [68.13]: ../GeckoSession.html
 
 - [`GeckoView`][65.5] will not create a [`GeckoSession`][65.9] anymore when
   attached to a window without a session.
 
-- Added API for session context assignment
-  [`GeckoSessionSettings.Builder.contextId`][68.14] and deletion of data
-  related to a session context
-  [`StorageController.clearSessionContextData`][68.15].
-
-[68.14]: ../GeckoSessionSettings.Builder.html#contextId-
-[68.15]: ../StorageController.html#clearSessionContextData-java.lang.String-
-
 ## v67
 - Added [`setAutomaticFontSizeAdjustment`][67.2] to
   [`GeckoRuntimeSettings`][67.3] for automatically adjusting font size settings
   depending on the OS-level font size setting.
 
 [67.2]: ../GeckoRuntimeSettings.html#setAutomaticFontSizeAdjustment-boolean-
 [67.3]: ../GeckoRuntimeSettings.html
 
@@ -272,9 +264,9 @@ exclude: true
 [65.23]: ../GeckoSession.FinderResult.html
 
 - Update [`CrashReporter#sendCrashReport`][65.24] to return the crash ID as a
   [`GeckoResult<String>`][65.25].
 
 [65.24]: ../CrashReporter.html#sendCrashReport-android.content.Context-android.os.Bundle-java.lang.String-
 [65.25]: ../GeckoResult.html
 
-[api-version]: fa2863734daac0ec5cb0671b030139de3aac5029
+[api-version]: 7cba6fdca8edb1858d73704a06dad936f78c9f64
--- a/mobile/android/modules/geckoview/GeckoViewNavigation.jsm
+++ b/mobile/android/modules/geckoview/GeckoViewNavigation.jsm
@@ -8,17 +8,16 @@ var EXPORTED_SYMBOLS = ["GeckoViewNaviga
 
 const {GeckoViewModule} = ChromeUtils.import("resource://gre/modules/GeckoViewModule.jsm");
 const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
 
 XPCOMUtils.defineLazyModuleGetters(this, {
   E10SUtils: "resource://gre/modules/sessionstore/Utils.jsm",
   LoadURIDelegate: "resource://gre/modules/LoadURIDelegate.jsm",
   Services: "resource://gre/modules/Services.jsm",
-  PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.jsm",
 });
 
 // Handles navigation requests between Gecko and a GeckoView.
 // Handles GeckoView:GoBack and :GoForward requests dispatched by
 // GeckoView.goBack and .goForward.
 // Dispatches GeckoView:LocationChange to the GeckoView on location change when
 // active.
 // Implements nsIBrowserDOMWindow.
@@ -28,38 +27,26 @@ class GeckoViewNavigation extends GeckoV
 
     // There may be a GeckoViewNavigation module in another window waiting for
     // us to create a browser so it can call presetOpenerWindow(), so allow them
     // to do that now.
     Services.obs.notifyObservers(this.window, "geckoview-window-created");
   }
 
   onInit() {
-    debug `onInit`;
-
     this.registerListener([
       "GeckoView:GoBack",
       "GeckoView:GoForward",
       "GeckoView:GotoHistoryIndex",
       "GeckoView:LoadUri",
       "GeckoView:Reload",
       "GeckoView:Stop",
     ]);
 
     this.messageManager.addMessageListener("Browser:LoadURI", this);
-
-    debug `sessionContextId=${this.settings.sessionContextId}`;
-
-    if (this.settings.sessionContextId !== null) {
-      this.browser.webNavigation.setOriginAttributesBeforeLoading({
-        geckoViewSessionContextId: this.settings.sessionContextId,
-        privateBrowsingId: PrivateBrowsingUtils.isBrowserPrivate(this.browser)
-          ? 1 : 0,
-      });
-    }
   }
 
   // Bundle event handler.
   onEvent(aEvent, aData, aCallback) {
     debug `onEvent: event=${aEvent}, data=${aData}`;
 
     switch (aEvent) {
       case "GeckoView:GoBack":
--- a/mobile/android/modules/geckoview/GeckoViewSettings.jsm
+++ b/mobile/android/modules/geckoview/GeckoViewSettings.jsm
@@ -38,17 +38,16 @@ const USER_AGENT_MODE_VR = 2;
 // Handles GeckoView settings including:
 // * multiprocess
 // * user agent override
 class GeckoViewSettings extends GeckoViewModule {
   onInit() {
     debug `onInit`;
     this._userAgentMode = USER_AGENT_MODE_MOBILE;
     this._userAgentOverride = null;
-    this._sessionContextId = null;
     // Required for safe browsing and tracking protection.
 
     this.registerListener([
       "GeckoView:GetUserAgent",
     ]);
   }
 
   onEvent(aEvent, aData, aCallback) {
@@ -63,17 +62,16 @@ class GeckoViewSettings extends GeckoVie
 
   onSettingsUpdate() {
     const settings = this.settings;
     debug `onSettingsUpdate: ${settings}`;
 
     this.displayMode = settings.displayMode;
     this.userAgentMode = settings.userAgentMode;
     this.userAgentOverride = settings.userAgentOverride;
-    this.sessionContextId = settings.sessionContextId;
   }
 
   get useMultiprocess() {
     return this.browser.isRemoteBrowser;
   }
 
   get userAgent() {
     if (this.userAgentOverride !== null) {
@@ -109,19 +107,11 @@ class GeckoViewSettings extends GeckoVie
 
   get displayMode() {
     return this.window.docShell.displayMode;
   }
 
   set displayMode(aMode) {
     this.window.docShell.displayMode = aMode;
   }
-
-  set sessionContextId(aAttribute) {
-    this._sessionContextId = aAttribute;
-  }
-
-  get sessionContextId() {
-    return this._sessionContextId;
-  }
 }
 
 const {debug, warn} = GeckoViewSettings.initLogging("GeckoViewSettings"); // eslint-disable-line no-unused-vars
--- a/netwerk/protocol/http/HttpBaseChannel.cpp
+++ b/netwerk/protocol/http/HttpBaseChannel.cpp
@@ -3200,19 +3200,16 @@ already_AddRefed<nsILoadInfo> HttpBaseCh
         "docshell and necko should have the same userContextId attribute.");
     MOZ_ASSERT(
         docShellAttrs.mInIsolatedMozBrowser == attrs.mInIsolatedMozBrowser,
         "docshell and necko should have the same inIsolatedMozBrowser "
         "attribute.");
     MOZ_ASSERT(
         docShellAttrs.mPrivateBrowsingId == attrs.mPrivateBrowsingId,
         "docshell and necko should have the same privateBrowsingId attribute.");
-    MOZ_ASSERT(
-        docShellAttrs.mGeckoViewSessionContextId == attrs.mGeckoViewSessionContextId,
-        "docshell and necko should have the same geckoViewSessionContextId attribute");
 
     attrs = docShellAttrs;
     attrs.SetFirstPartyDomain(true, newURI);
     newLoadInfo->SetOriginAttributes(attrs);
   }
 
   // Leave empty, we want a 'clean ground' when creating the new channel.
   // This will be ensured to be either set by the protocol handler or set