summaryrefslogtreecommitdiffstats
path: root/chromium/content/browser/dom_storage/dom_storage_namespace.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-11-20 15:06:40 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-11-22 11:48:58 +0000
commitdaa093eea7c773db06799a13bd7e4e2e2a9f8f14 (patch)
tree96cc5e7b9194c1b29eab927730bfa419e7111c25 /chromium/content/browser/dom_storage/dom_storage_namespace.cc
parentbe59a35641616a4cf23c4a13fa0632624b021c1b (diff)
BASELINE: Update Chromium to 63.0.3239.58
Change-Id: Ia93b322a00ba4dd4004f3bcf1254063ba90e1605 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/content/browser/dom_storage/dom_storage_namespace.cc')
-rw-r--r--chromium/content/browser/dom_storage/dom_storage_namespace.cc51
1 files changed, 36 insertions, 15 deletions
diff --git a/chromium/content/browser/dom_storage/dom_storage_namespace.cc b/chromium/content/browser/dom_storage/dom_storage_namespace.cc
index a448665f97f..5a44fb6bf15 100644
--- a/chromium/content/browser/dom_storage/dom_storage_namespace.cc
+++ b/chromium/content/browser/dom_storage/dom_storage_namespace.cc
@@ -7,6 +7,7 @@
#include "base/bind.h"
#include "base/location.h"
#include "base/logging.h"
+#include "build/build_config.h"
#include "content/browser/dom_storage/dom_storage_area.h"
#include "content/browser/dom_storage/dom_storage_task_runner.h"
#include "content/browser/dom_storage/session_storage_database.h"
@@ -40,15 +41,19 @@ DOMStorageNamespace::~DOMStorageNamespace() {
DOMStorageArea* DOMStorageNamespace::OpenStorageArea(const GURL& origin) {
if (AreaHolder* holder = GetAreaHolder(origin)) {
++(holder->open_count_);
+#if defined(OS_ANDROID)
+ if (holder->open_count_ > 1)
+ holder->area_->SetCacheOnlyKeys(false);
+#endif
return holder->area_.get();
}
DOMStorageArea* area;
if (namespace_id_ == kLocalStorageNamespaceId) {
area = new DOMStorageArea(origin, directory_, task_runner_.get());
} else {
- area = new DOMStorageArea(
- namespace_id_, persistent_namespace_id_, origin,
- session_storage_database_.get(), task_runner_.get());
+ area = new DOMStorageArea(namespace_id_, persistent_namespace_id_, nullptr,
+ origin, session_storage_database_.get(),
+ task_runner_.get());
}
areas_[origin] = AreaHolder(area, 1);
return area;
@@ -59,8 +64,8 @@ void DOMStorageNamespace::CloseStorageArea(DOMStorageArea* area) {
DCHECK(holder);
DCHECK_EQ(holder->area_.get(), area);
--(holder->open_count_);
- // TODO(michaeln): Clean up areas that aren't needed in memory anymore.
- // The in-process-webkit based impl didn't do this either, but would be nice.
+ // TODO(ssid): disable caching when the open count goes to 0 and it's safe,
+ // crbug.com/743187.
}
DOMStorageArea* DOMStorageNamespace::GetOpenStorageArea(const GURL& origin) {
@@ -86,13 +91,16 @@ DOMStorageNamespace* DOMStorageNamespace::Clone(
clone->areas_[it->first] = AreaHolder(area, 0);
}
// And clone the on-disk structures, too.
- if (session_storage_database_.get()) {
- task_runner_->PostShutdownBlockingTask(
- FROM_HERE, DOMStorageTaskRunner::COMMIT_SEQUENCE,
- base::BindOnce(
- base::IgnoreResult(&SessionStorageDatabase::CloneNamespace),
- session_storage_database_.get(), persistent_namespace_id_,
- clone_persistent_namespace_id));
+ if (session_storage_database_) {
+ auto clone_task = base::BindOnce(
+ base::IgnoreResult(&SessionStorageDatabase::CloneNamespace),
+ session_storage_database_, persistent_namespace_id_,
+ clone_persistent_namespace_id);
+ auto callback =
+ base::BindOnce(&DOMStorageNamespace::OnCloneStorageDone, clone);
+ task_runner_->GetSequencedTaskRunner(DOMStorageTaskRunner::COMMIT_SEQUENCE)
+ ->PostTaskAndReply(FROM_HERE, std::move(clone_task),
+ std::move(callback));
}
return clone;
}
@@ -172,8 +180,8 @@ DOMStorageNamespace::UsageStatistics DOMStorageNamespace::GetUsageStatistics()
const {
UsageStatistics stats = {0};
for (AreaMap::const_iterator it = areas_.begin(); it != areas_.end(); ++it) {
- if (it->second.area_->IsLoadedInMemory()) {
- stats.total_cache_size += it->second.area_->map_usage_in_bytes();
+ if (it->second.area_->map_memory_used()) {
+ stats.total_cache_size += it->second.area_->map_memory_used();
++stats.total_area_count;
if (it->second.open_count_ == 0)
++stats.inactive_area_count;
@@ -211,6 +219,14 @@ DOMStorageNamespace::GetAreaHolder(const GURL& origin) {
return &(found->second);
}
+void DOMStorageNamespace::OnCloneStorageDone() {
+ task_runner_->AssertIsRunningOnPrimarySequence();
+ // Shallow copy of commit batches are no longer needed since the database is
+ // cloned.
+ for (AreaMap::const_iterator it = areas_.begin(); it != areas_.end(); ++it)
+ it->second.area_->ClearShallowCopiedCommitBatches();
+}
+
// AreaHolder
DOMStorageNamespace::AreaHolder::AreaHolder()
@@ -222,7 +238,12 @@ DOMStorageNamespace::AreaHolder::AreaHolder(
: area_(area), open_count_(count) {
}
-DOMStorageNamespace::AreaHolder::AreaHolder(const AreaHolder& other) = default;
+DOMStorageNamespace::AreaHolder& DOMStorageNamespace::AreaHolder::operator=(
+ AreaHolder&& other) {
+ area_ = std::move(other.area_);
+ open_count_ = other.open_count_;
+ return *this;
+}
DOMStorageNamespace::AreaHolder::~AreaHolder() {
}