OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/dom_storage/dom_storage_database.h" | 5 #include "content/browser/dom_storage/dom_storage_database.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "sql/statement.h" | 10 #include "sql/statement.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 "SELECT * from ItemTable")); | 61 "SELECT * from ItemTable")); |
62 DCHECK(statement.is_valid()); | 62 DCHECK(statement.is_valid()); |
63 | 63 |
64 while (statement.Step()) { | 64 while (statement.Step()) { |
65 base::string16 key = statement.ColumnString16(0); | 65 base::string16 key = statement.ColumnString16(0); |
66 base::string16 value; | 66 base::string16 value; |
67 statement.ColumnBlobAsString16(1, &value); | 67 statement.ColumnBlobAsString16(1, &value); |
68 (*result)[key] = base::NullableString16(value, false); | 68 (*result)[key] = base::NullableString16(value, false); |
69 } | 69 } |
70 known_to_be_empty_ = result->empty(); | 70 known_to_be_empty_ = result->empty(); |
| 71 |
| 72 // Reduce the size of sqlite caches. |
| 73 db_->TrimMemory(false /* aggressively */); |
71 } | 74 } |
72 | 75 |
73 bool DOMStorageDatabase::CommitChanges(bool clear_all_first, | 76 bool DOMStorageDatabase::CommitChanges(bool clear_all_first, |
74 const DOMStorageValuesMap& changes) { | 77 const DOMStorageValuesMap& changes) { |
75 if (!LazyOpen(!changes.empty())) { | 78 if (!LazyOpen(!changes.empty())) { |
76 // If we're being asked to commit changes that will result in an | 79 // If we're being asked to commit changes that will result in an |
77 // empty database, we return true if the database file doesn't exist. | 80 // empty database, we return true if the database file doesn't exist. |
78 return clear_all_first && changes.empty() && | 81 return clear_all_first && changes.empty() && |
79 !base::PathExists(file_path_); | 82 !base::PathExists(file_path_); |
80 } | 83 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 if (!known_to_be_empty_ && did_delete && !did_insert) { | 121 if (!known_to_be_empty_ && did_delete && !did_insert) { |
119 sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, | 122 sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, |
120 "SELECT count(key) from ItemTable")); | 123 "SELECT count(key) from ItemTable")); |
121 if (statement.Step()) | 124 if (statement.Step()) |
122 known_to_be_empty_ = statement.ColumnInt(0) == 0; | 125 known_to_be_empty_ = statement.ColumnInt(0) == 0; |
123 } | 126 } |
124 | 127 |
125 bool success = transaction.Commit(); | 128 bool success = transaction.Commit(); |
126 if (!success) | 129 if (!success) |
127 known_to_be_empty_ = old_known_to_be_empty; | 130 known_to_be_empty_ = old_known_to_be_empty; |
| 131 |
| 132 // Reduce the size of sqlite caches. |
| 133 db_->TrimMemory(false /* aggressively */); |
| 134 |
128 return success; | 135 return success; |
129 } | 136 } |
130 | 137 |
131 bool DOMStorageDatabase::LazyOpen(bool create_if_needed) { | 138 bool DOMStorageDatabase::LazyOpen(bool create_if_needed) { |
132 if (failed_to_open_) { | 139 if (failed_to_open_) { |
133 // Don't try to open a database that we know has failed | 140 // Don't try to open a database that we know has failed |
134 // already. | 141 // already. |
135 return false; | 142 return false; |
136 } | 143 } |
137 | 144 |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 CreateTableV2() && | 295 CreateTableV2() && |
289 CommitChanges(false, values) && | 296 CommitChanges(false, values) && |
290 migration.Commit(); | 297 migration.Commit(); |
291 } | 298 } |
292 | 299 |
293 void DOMStorageDatabase::Close() { | 300 void DOMStorageDatabase::Close() { |
294 db_.reset(NULL); | 301 db_.reset(NULL); |
295 } | 302 } |
296 | 303 |
297 } // namespace content | 304 } // namespace content |
OLD | NEW |