summaryrefslogtreecommitdiffstats
path: root/dom/quota/StorageOriginAttributes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/quota/StorageOriginAttributes.cpp')
-rw-r--r--dom/quota/StorageOriginAttributes.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/dom/quota/StorageOriginAttributes.cpp b/dom/quota/StorageOriginAttributes.cpp
new file mode 100644
index 0000000000..7d8fd9c802
--- /dev/null
+++ b/dom/quota/StorageOriginAttributes.cpp
@@ -0,0 +1,60 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/. */
+
+#include "StorageOriginAttributes.h"
+
+#include "nsURLHelper.h"
+
+namespace mozilla {
+
+bool StorageOriginAttributes::PopulateFromSuffix(const nsACString& aStr) {
+ if (aStr.IsEmpty()) {
+ return true;
+ }
+
+ if (aStr[0] != '^') {
+ return false;
+ }
+
+ bool ok =
+ URLParams::Parse(Substring(aStr, 1, aStr.Length() - 1),
+ [this](const nsAString& aName, const nsAString& aValue) {
+ if (aName.EqualsLiteral("inBrowser")) {
+ if (!aValue.EqualsLiteral("1")) {
+ return false;
+ }
+
+ mInIsolatedMozBrowser = true;
+ return true;
+ }
+
+ // Let OriginAttributes::PopulateFromSuffix parse other
+ // origin attributes.
+ return true;
+ });
+ if (!ok) {
+ return false;
+ }
+
+ return mOriginAttributes.PopulateFromSuffix(aStr);
+}
+
+bool StorageOriginAttributes::PopulateFromOrigin(const nsACString& aOrigin,
+ nsACString& aOriginNoSuffix) {
+ // RFindChar is only available on nsCString.
+ nsCString origin(aOrigin);
+ int32_t pos = origin.RFindChar('^');
+
+ if (pos == kNotFound) {
+ aOriginNoSuffix = origin;
+ return true;
+ }
+
+ aOriginNoSuffix = Substring(origin, 0, pos);
+ return PopulateFromSuffix(Substring(origin, pos));
+}
+
+} // namespace mozilla