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(
}
PurgeUnusedAreasIfNeeded();
found->second->Bind(std::move(request), process_id);
std::move(bind_done).Run();
found->second->Bind(std::move(request), process_id, std::move(bind_done));
size_t total_cache_size, unused_area_count;
GetStatistics(&total_cache_size, &unused_area_count);
......
......@@ -96,17 +96,19 @@ void SessionStorageNamespaceImplMojo::Reset() {
void SessionStorageNamespaceImplMojo::Bind(
blink::mojom::SessionStorageNamespaceRequest request,
int process_id) {
int process_id,
base::OnceClosure bind_done) {
if (waiting_on_clone_population_) {
bind_waiting_on_clone_population_ = true;
run_after_clone_population_.push_back(
base::BindOnce(&SessionStorageNamespaceImplMojo::Bind,
base::Unretained(this), std::move(request), process_id));
run_after_clone_population_.push_back(base::BindOnce(
&SessionStorageNamespaceImplMojo::Bind, base::Unretained(this),
std::move(request), process_id, std::move(bind_done)));
return;
}
DCHECK(IsPopulated());
bindings_.AddBinding(this, std::move(request), process_id);
bind_waiting_on_clone_population_ = false;
std::move(bind_done).Run();
}
void SessionStorageNamespaceImplMojo::PurgeUnboundAreas() {
......
......@@ -122,7 +122,8 @@ class CONTENT_EXPORT SessionStorageNamespaceImplMojo final
// eventually be called before the SessionStorageNamespaceRequest can be
// bound.
void Bind(blink::mojom::SessionStorageNamespaceRequest request,
int process_id);
int process_id,
base::OnceClosure bind_done);
bool IsBound() const {
return !bindings_.empty() || bind_waiting_on_clone_population_;
......
......@@ -192,7 +192,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, MetadataLoad) {
&database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_));
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;
ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1));
......@@ -223,7 +224,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, MetadataLoadWithMapOperations) {
&database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_));
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;
ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1));
......@@ -263,7 +265,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, CloneBeforeBind) {
blink::mojom::SessionStorageNamespacePtr ss_namespace1;
namespace_impl1->Bind(mojo::MakeRequest(&ss_namespace1),
kTestProcessIdOrigin1);
kTestProcessIdOrigin1, base::DoNothing());
ss_namespace1->Clone(test_namespace_id2_);
ss_namespace1.FlushForTesting();
......@@ -271,7 +273,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, CloneBeforeBind) {
blink::mojom::SessionStorageNamespacePtr ss_namespace2;
namespace_impl2->Bind(mojo::MakeRequest(&ss_namespace2),
kTestProcessIdOrigin1);
kTestProcessIdOrigin1, base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_2;
ss_namespace2->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_2));
......@@ -318,7 +320,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, CloneAfterBind) {
blink::mojom::SessionStorageNamespacePtr ss_namespace1;
namespace_impl1->Bind(mojo::MakeRequest(&ss_namespace1),
kTestProcessIdOrigin1);
kTestProcessIdOrigin1, base::DoNothing());
// Set that we are waiting for clone, so binding is possible.
namespace_impl2->SetWaitingForClonePopulation();
......@@ -329,7 +331,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, CloneAfterBind) {
// Get a new area.
blink::mojom::SessionStorageNamespacePtr ss_namespace2;
namespace_impl2->Bind(mojo::MakeRequest(&ss_namespace2),
kTestProcessIdAllOrigins);
kTestProcessIdAllOrigins, base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_n2_o1;
blink::mojom::StorageAreaAssociatedPtr leveldb_n2_o2;
ss_namespace2->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_n2_o1));
......@@ -379,7 +381,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, RemoveOriginData) {
&database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_));
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;
ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1));
......@@ -449,7 +452,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, ProcessLockedToOtherOrigin) {
&database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_));
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;
ss_namespace->OpenArea(test_origin3_, mojo::MakeRequest(&leveldb_1));
ss_namespace.FlushForTesting();
......@@ -474,7 +478,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, PurgeUnused) {
&database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_));
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;
ss_namespace->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1));
......@@ -506,7 +511,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, NamespaceBindingPerOrigin) {
blink::mojom::SessionStorageNamespacePtr ss_namespace_o1;
namespace_impl->Bind(mojo::MakeRequest(&ss_namespace_o1),
kTestProcessIdOrigin1);
kTestProcessIdOrigin1, base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_1;
ss_namespace_o1->OpenArea(test_origin1_, mojo::MakeRequest(&leveldb_1));
ss_namespace_o1.FlushForTesting();
......@@ -518,7 +523,7 @@ TEST_F(SessionStorageNamespaceImplMojoTest, NamespaceBindingPerOrigin) {
blink::mojom::SessionStorageNamespacePtr ss_namespace_o2;
namespace_impl->Bind(mojo::MakeRequest(&ss_namespace_o2),
kTestProcessIdOrigin3);
kTestProcessIdOrigin3, base::DoNothing());
blink::mojom::StorageAreaAssociatedPtr leveldb_2;
ss_namespace_o2->OpenArea(test_origin3_, mojo::MakeRequest(&leveldb_2));
ss_namespace_o2.FlushForTesting();
......@@ -547,7 +552,8 @@ TEST_F(SessionStorageNamespaceImplMojoTest, ReopenClonedAreaAfterPurge) {
&database_, metadata_.GetOrCreateNamespaceEntry(test_namespace_id1_));
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;
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