Commit 6fc31bcf authored by Daniel Murphy's avatar Daniel Murphy Committed by Commit Bot

[SessionStorage] Resolve OpenSessionStorage at bind site

R=mek@chromium.org

Bug: 927534
Change-Id: Ic50cb227f34127ed69cbd9e8edf13ca5824238d6
Reviewed-on: https://chromium-review.googlesource.com/c/1479274Reviewed-by: default avatarMarijn Kruisselbrink <mek@chromium.org>
Commit-Queue: Daniel Murphy <dmurph@chromium.org>
Cr-Commit-Position: refs/heads/master@{#633881}
parent 43c87dfd
...@@ -152,8 +152,7 @@ void SessionStorageContextMojo::OpenSessionStorage( ...@@ -152,8 +152,7 @@ void SessionStorageContextMojo::OpenSessionStorage(
} }
PurgeUnusedAreasIfNeeded(); PurgeUnusedAreasIfNeeded();
found->second->Bind(std::move(request), process_id); found->second->Bind(std::move(request), process_id, std::move(bind_done));
std::move(bind_done).Run();
size_t total_cache_size, unused_area_count; size_t total_cache_size, unused_area_count;
GetStatistics(&total_cache_size, &unused_area_count); GetStatistics(&total_cache_size, &unused_area_count);
......
...@@ -96,17 +96,19 @@ void SessionStorageNamespaceImplMojo::Reset() { ...@@ -96,17 +96,19 @@ void SessionStorageNamespaceImplMojo::Reset() {
void SessionStorageNamespaceImplMojo::Bind( void SessionStorageNamespaceImplMojo::Bind(
blink::mojom::SessionStorageNamespaceRequest request, blink::mojom::SessionStorageNamespaceRequest request,
int process_id) { int process_id,
base::OnceClosure bind_done) {
if (waiting_on_clone_population_) { if (waiting_on_clone_population_) {
bind_waiting_on_clone_population_ = true; bind_waiting_on_clone_population_ = true;
run_after_clone_population_.push_back( run_after_clone_population_.push_back(base::BindOnce(
base::BindOnce(&SessionStorageNamespaceImplMojo::Bind, &SessionStorageNamespaceImplMojo::Bind, base::Unretained(this),
base::Unretained(this), std::move(request), process_id)); std::move(request), process_id, std::move(bind_done)));
return; return;
} }
DCHECK(IsPopulated()); DCHECK(IsPopulated());
bindings_.AddBinding(this, std::move(request), process_id); bindings_.AddBinding(this, std::move(request), process_id);
bind_waiting_on_clone_population_ = false; bind_waiting_on_clone_population_ = false;
std::move(bind_done).Run();
} }
void SessionStorageNamespaceImplMojo::PurgeUnboundAreas() { void SessionStorageNamespaceImplMojo::PurgeUnboundAreas() {
......
...@@ -122,7 +122,8 @@ class CONTENT_EXPORT SessionStorageNamespaceImplMojo final ...@@ -122,7 +122,8 @@ class CONTENT_EXPORT SessionStorageNamespaceImplMojo final
// eventually be called before the SessionStorageNamespaceRequest can be // eventually be called before the SessionStorageNamespaceRequest can be
// bound. // bound.
void Bind(blink::mojom::SessionStorageNamespaceRequest request, void Bind(blink::mojom::SessionStorageNamespaceRequest request,
int process_id); int process_id,
base::OnceClosure bind_done);
bool IsBound() const { bool IsBound() const {
return !bindings_.empty() || bind_waiting_on_clone_population_; return !bindings_.empty() || bind_waiting_on_clone_population_;
......
...@@ -192,7 +192,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, MetadataLoad) { ...@@ -192,7 +192,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, MetadataLoad) {
&database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_)); &database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_));
blink::mojom::SessionStorageNamespacePtr ss_namespace; blink::mojom::SessionStorageNamespacePtr ss_namespace;
namespace_impl->Bind(mojo::MakeRequest(&ss_namespace), kTestProcessIdOrigin1); namespace_impl->Bind(mojo::MakeRequest(&ss_namespace), kTestProcessIdOrigin1,
base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_1; blink::mojom::StorageAreaAssociatedPtr leveldb_1;
ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1)); ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1));
...@@ -223,7 +224,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, MetadataLoadWithMapOperations) { ...@@ -223,7 +224,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, MetadataLoadWithMapOperations) {
&database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_)); &database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_));
blink::mojom::SessionStorageNamespacePtr ss_namespace; blink::mojom::SessionStorageNamespacePtr ss_namespace;
namespace_impl->Bind(mojo::MakeRequest(&ss_namespace), kTestProcessIdOrigin1); namespace_impl->Bind(mojo::MakeRequest(&ss_namespace), kTestProcessIdOrigin1,
base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_1; blink::mojom::StorageAreaAssociatedPtr leveldb_1;
ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1)); ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1));
...@@ -263,7 +265,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, CloneBeforeBind) { ...@@ -263,7 +265,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, CloneBeforeBind) {
blink::mojom::SessionStorageNamespacePtr ss_namespace1; blink::mojom::SessionStorageNamespacePtr ss_namespace1;
namespace_impl1->Bind(mojo::MakeRequest(&ss_namespace1), namespace_impl1->Bind(mojo::MakeRequest(&ss_namespace1),
kTestProcessIdOrigin1); kTestProcessIdOrigin1, base::DoNothing());
ss_namespace1->Clone(test_namespace_id2_); ss_namespace1->Clone(test_namespace_id2_);
ss_namespace1.FlushForTesting(); ss_namespace1.FlushForTesting();
...@@ -271,7 +273,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, CloneBeforeBind) { ...@@ -271,7 +273,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, CloneBeforeBind) {
blink::mojom::SessionStorageNamespacePtr ss_namespace2; blink::mojom::SessionStorageNamespacePtr ss_namespace2;
namespace_impl2->Bind(mojo::MakeRequest(&ss_namespace2), namespace_impl2->Bind(mojo::MakeRequest(&ss_namespace2),
kTestProcessIdOrigin1); kTestProcessIdOrigin1, base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_2; blink::mojom::StorageAreaAssociatedPtr leveldb_2;
ss_namespace2->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_2)); ss_namespace2->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_2));
...@@ -318,7 +320,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, CloneAfterBind) { ...@@ -318,7 +320,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, CloneAfterBind) {
blink::mojom::SessionStorageNamespacePtr ss_namespace1; blink::mojom::SessionStorageNamespacePtr ss_namespace1;
namespace_impl1->Bind(mojo::MakeRequest(&ss_namespace1), namespace_impl1->Bind(mojo::MakeRequest(&ss_namespace1),
kTestProcessIdOrigin1); kTestProcessIdOrigin1, base::DoNothing());
// Set that we are waiting for clone, so binding is possible. // Set that we are waiting for clone, so binding is possible.
namespace_impl2->SetWaitingForClonePopulation(); namespace_impl2->SetWaitingForClonePopulation();
...@@ -329,7 +331,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, CloneAfterBind) { ...@@ -329,7 +331,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, CloneAfterBind) {
// Get a new area. // Get a new area.
blink::mojom::SessionStorageNamespacePtr ss_namespace2; blink::mojom::SessionStorageNamespacePtr ss_namespace2;
namespace_impl2->Bind(mojo::MakeRequest(&ss_namespace2), namespace_impl2->Bind(mojo::MakeRequest(&ss_namespace2),
kTestProcessIdAllOrigins); kTestProcessIdAllOrigins, base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_n2_o1; blink::mojom::StorageAreaAssociatedPtr leveldb_n2_o1;
blink::mojom::StorageAreaAssociatedPtr leveldb_n2_o2; blink::mojom::StorageAreaAssociatedPtr leveldb_n2_o2;
ss_namespace2->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_n2_o1)); ss_namespace2->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_n2_o1));
...@@ -379,7 +381,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, RemoveOriginData) { ...@@ -379,7 +381,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, RemoveOriginData) {
&database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_)); &database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_));
blink::mojom::SessionStorageNamespacePtr ss_namespace; blink::mojom::SessionStorageNamespacePtr ss_namespace;
namespace_impl->Bind(mojo::MakeRequest(&ss_namespace), kTestProcessIdOrigin1); namespace_impl->Bind(mojo::MakeRequest(&ss_namespace), kTestProcessIdOrigin1,
base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_1; blink::mojom::StorageAreaAssociatedPtr leveldb_1;
ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1)); ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1));
...@@ -449,7 +452,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, ProcessLockedToOtherOrigin) { ...@@ -449,7 +452,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, ProcessLockedToOtherOrigin) {
&database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_)); &database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_));
blink::mojom::SessionStorageNamespacePtr ss_namespace; blink::mojom::SessionStorageNamespacePtr ss_namespace;
namespace_impl->Bind(mojo::MakeRequest(&ss_namespace), kTestProcessIdOrigin1); namespace_impl->Bind(mojo::MakeRequest(&ss_namespace), kTestProcessIdOrigin1,
base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_1; blink::mojom::StorageAreaAssociatedPtr leveldb_1;
ss_namespace->OpenArea(test_origin3_, mojo::MakeRequest(&leveldb_1)); ss_namespace->OpenArea(test_origin3_, mojo::MakeRequest(&leveldb_1));
ss_namespace.FlushForTesting(); ss_namespace.FlushForTesting();
...@@ -474,7 +478,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, PurgeUnused) { ...@@ -474,7 +478,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, PurgeUnused) {
&database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_)); &database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_));
blink::mojom::SessionStorageNamespacePtr ss_namespace; blink::mojom::SessionStorageNamespacePtr ss_namespace;
namespace_impl->Bind(mojo::MakeRequest(&ss_namespace), kTestProcessIdOrigin1); namespace_impl->Bind(mojo::MakeRequest(&ss_namespace), kTestProcessIdOrigin1,
base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_1; blink::mojom::StorageAreaAssociatedPtr leveldb_1;
ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1)); ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1));
...@@ -506,7 +511,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, NamespaceBindingPerOrigin) { ...@@ -506,7 +511,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, NamespaceBindingPerOrigin) {
blink::mojom::SessionStorageNamespacePtr ss_namespace_o1; blink::mojom::SessionStorageNamespacePtr ss_namespace_o1;
namespace_impl->Bind(mojo::MakeRequest(&ss_namespace_o1), namespace_impl->Bind(mojo::MakeRequest(&ss_namespace_o1),
kTestProcessIdOrigin1); kTestProcessIdOrigin1, base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_1; blink::mojom::StorageAreaAssociatedPtr leveldb_1;
ss_namespace_o1->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1)); ss_namespace_o1->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1));
ss_namespace_o1.FlushForTesting(); ss_namespace_o1.FlushForTesting();
...@@ -518,7 +523,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, NamespaceBindingPerOrigin) { ...@@ -518,7 +523,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, NamespaceBindingPerOrigin) {
blink::mojom::SessionStorageNamespacePtr ss_namespace_o2; blink::mojom::SessionStorageNamespacePtr ss_namespace_o2;
namespace_impl->Bind(mojo::MakeRequest(&ss_namespace_o2), namespace_impl->Bind(mojo::MakeRequest(&ss_namespace_o2),
kTestProcessIdOrigin3); kTestProcessIdOrigin3, base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_2; blink::mojom::StorageAreaAssociatedPtr leveldb_2;
ss_namespace_o2->OpenArea(test_origin3_, mojo::MakeRequest(&leveldb_2)); ss_namespace_o2->OpenArea(test_origin3_, mojo::MakeRequest(&leveldb_2));
ss_namespace_o2.FlushForTesting(); ss_namespace_o2.FlushForTesting();
...@@ -547,7 +552,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, ReopenClonedAreaAfterPurge) { ...@@ -547,7 +552,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, ReopenClonedAreaAfterPurge) {
&database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_)); &database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_));
blink::mojom::SessionStorageNamespacePtr ss_namespace; blink::mojom::SessionStorageNamespacePtr ss_namespace;
namespace_impl->Bind(mojo::MakeRequest(&ss_namespace), kTestProcessIdOrigin1); namespace_impl->Bind(mojo::MakeRequest(&ss_namespace), kTestProcessIdOrigin1,
base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_1; blink::mojom::StorageAreaAssociatedPtr leveldb_1;
ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1)); ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment