From 47e6c36d527ff2e6855e7bb84c3ef185b023f453 Mon Sep 17 00:00:00 2001 From: Aleksey Khoroshilov Date: Mon, 21 Jun 2021 20:39:57 +0700 Subject: [PATCH] Don't reuse cached storages for another Page. --- .../storage/brave_dom_window_storage.h | 2 ++ .../modules/storage/dom_window_storage.cc | 20 +++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/chromium_src/third_party/blink/renderer/modules/storage/brave_dom_window_storage.h b/chromium_src/third_party/blink/renderer/modules/storage/brave_dom_window_storage.h index 8dd246028b7a..3e0b3294f2d3 100644 --- a/chromium_src/third_party/blink/renderer/modules/storage/brave_dom_window_storage.h +++ b/chromium_src/third_party/blink/renderer/modules/storage/brave_dom_window_storage.h @@ -10,6 +10,7 @@ namespace blink { +class EphemeralStorageNamespaces; class ExceptionState; class LocalDOMWindow; class StorageArea; @@ -35,6 +36,7 @@ class BraveDOMWindowStorage final StorageArea* ephemeralSessionStorage(); StorageArea* ephemeralLocalStorage(); + mutable Member ephemeral_storage_namespaces_; mutable Member ephemeral_session_storage_; mutable Member ephemeral_local_storage_; }; diff --git a/chromium_src/third_party/blink/renderer/modules/storage/dom_window_storage.cc b/chromium_src/third_party/blink/renderer/modules/storage/dom_window_storage.cc index 5a04b8bfc00a..4d03ef7527cc 100644 --- a/chromium_src/third_party/blink/renderer/modules/storage/dom_window_storage.cc +++ b/chromium_src/third_party/blink/renderer/modules/storage/dom_window_storage.cc @@ -181,9 +181,6 @@ StorageArea* BraveDOMWindowStorage::sessionStorage( } StorageArea* BraveDOMWindowStorage::ephemeralSessionStorage() { - if (ephemeral_session_storage_) - return ephemeral_session_storage_; - LocalDOMWindow* window = GetSupplementable(); Page* page = window->GetFrame()->GetDocument()->GetPage(); EphemeralStorageNamespaces* namespaces = @@ -191,6 +188,13 @@ StorageArea* BraveDOMWindowStorage::ephemeralSessionStorage() { if (!namespaces) return nullptr; + if (ephemeral_session_storage_ && + ephemeral_storage_namespaces_ == namespaces) { + return ephemeral_session_storage_; + } + + ephemeral_storage_namespaces_ = namespaces; + auto storage_area = namespaces->session_storage()->GetCachedArea(window->GetSecurityOrigin()); @@ -213,9 +217,6 @@ StorageArea* BraveDOMWindowStorage::localStorage( } StorageArea* BraveDOMWindowStorage::ephemeralLocalStorage() { - if (ephemeral_local_storage_) - return ephemeral_local_storage_; - LocalDOMWindow* window = GetSupplementable(); Page* page = window->GetFrame()->GetDocument()->GetPage(); EphemeralStorageNamespaces* namespaces = @@ -223,6 +224,12 @@ StorageArea* BraveDOMWindowStorage::ephemeralLocalStorage() { if (!namespaces) return nullptr; + if (ephemeral_local_storage_ && ephemeral_storage_namespaces_ == namespaces) { + return ephemeral_local_storage_; + } + + ephemeral_storage_namespaces_ = namespaces; + auto storage_area = namespaces->local_storage()->GetCachedArea(window->GetSecurityOrigin()); @@ -237,6 +244,7 @@ StorageArea* BraveDOMWindowStorage::ephemeralLocalStorage() { } void BraveDOMWindowStorage::Trace(Visitor* visitor) const { + visitor->Trace(ephemeral_storage_namespaces_); visitor->Trace(ephemeral_session_storage_); visitor->Trace(ephemeral_local_storage_); Supplement::Trace(visitor);