diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-11-20 15:06:40 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-11-22 11:48:58 +0000 |
commit | daa093eea7c773db06799a13bd7e4e2e2a9f8f14 (patch) | |
tree | 96cc5e7b9194c1b29eab927730bfa419e7111c25 /chromium/content/browser/dom_storage/dom_storage_namespace.cc | |
parent | be59a35641616a4cf23c4a13fa0632624b021c1b (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.cc | 51 |
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() { } |