Commit 7fdba3d3 authored by Victor Costan's avatar Victor Costan Committed by Commit Bot

websql: Make storage::DatabaseConnections::connections_ non-mutable.

DatabaseConnections::connections_ is only mutable so that
DatabaseConnections::GetOpenDatabaseSize() can use std::map::operator[]
while being const.

This CL removes the mutable qualifier and replaces operator[] use in
GetOpenDatabaseSize() with find() and const_iterator, to make it easier
to reason about thread safety and invariants.

Change-Id: Ifb9df3733c099d9b686096f71156d0a4b2c6271a
Reviewed-on: https://chromium-review.googlesource.com/1137929Reviewed-by: default avatarDaniel Murphy <dmurph@chromium.org>
Commit-Queue: Victor Costan <pwnall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#575454}
parent 9f3cbe1f
......@@ -71,8 +71,12 @@ DatabaseConnections::RemoveConnections(const DatabaseConnections& connections) {
int64_t DatabaseConnections::GetOpenDatabaseSize(
const std::string& origin_identifier,
const base::string16& database_name) const {
DCHECK(IsDatabaseOpened(origin_identifier, database_name));
return connections_[origin_identifier][database_name].second;
OriginConnections::const_iterator origin_it =
connections_.find(origin_identifier);
DCHECK(origin_it != connections_.end()) << "Database not opened";
DBConnections::const_iterator it = origin_it->second.find(database_name);
DCHECK(it != origin_it->second.end()) << "Database not opened";
return it->second.second;
}
void DatabaseConnections::SetOpenDatabaseSize(
......
......@@ -38,7 +38,7 @@ class STORAGE_COMMON_EXPORT DatabaseConnections {
std::vector<std::pair<std::string, base::string16>> RemoveConnections(
const DatabaseConnections& connections);
// Database sizes can be kept only if IsDatabaseOpened returns true.
// Can be called only if IsDatabaseOpened would have returned true.
int64_t GetOpenDatabaseSize(const std::string& origin_identifier,
const base::string16& database_name) const;
void SetOpenDatabaseSize(const std::string& origin_identifier,
......@@ -49,10 +49,12 @@ class STORAGE_COMMON_EXPORT DatabaseConnections {
std::vector<std::pair<std::string, base::string16>> ListConnections() const;
private:
// Mapping from name to <openCount, size>
typedef std::map<base::string16, std::pair<int, int64_t>> DBConnections;
typedef std::map<std::string, DBConnections> OriginConnections;
mutable OriginConnections connections_; // mutable for GetOpenDatabaseSize
// Maps database names to (open count, database size).
using DBConnections = std::map<base::string16, std::pair<int, int64_t>>;
// Maps origin identifiers to DBConnections.
using OriginConnections = std::map<std::string, DBConnections>;
OriginConnections connections_;
// Returns true if the last connection was removed.
bool RemoveConnectionsHelper(const std::string& origin_identifier,
......
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