| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/predictors/resource_prefetch_predictor_tables.h" | 5 #include "chrome/browser/predictors/resource_prefetch_predictor_tables.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 origin_data_map->clear(); | 158 origin_data_map->clear(); |
| 159 | 159 |
| 160 GetAllResourceDataHelper(PREFETCH_KEY_TYPE_URL, url_data_map); | 160 GetAllResourceDataHelper(PREFETCH_KEY_TYPE_URL, url_data_map); |
| 161 GetAllResourceDataHelper(PREFETCH_KEY_TYPE_HOST, host_data_map); | 161 GetAllResourceDataHelper(PREFETCH_KEY_TYPE_HOST, host_data_map); |
| 162 GetAllRedirectDataHelper(PREFETCH_KEY_TYPE_URL, url_redirect_data_map); | 162 GetAllRedirectDataHelper(PREFETCH_KEY_TYPE_URL, url_redirect_data_map); |
| 163 GetAllRedirectDataHelper(PREFETCH_KEY_TYPE_HOST, host_redirect_data_map); | 163 GetAllRedirectDataHelper(PREFETCH_KEY_TYPE_HOST, host_redirect_data_map); |
| 164 GetAllManifestDataHelper(manifest_map); | 164 GetAllManifestDataHelper(manifest_map); |
| 165 GetAllOriginDataHelper(origin_data_map); | 165 GetAllOriginDataHelper(origin_data_map); |
| 166 } | 166 } |
| 167 | 167 |
| 168 void ResourcePrefetchPredictorTables::UpdateData( | 168 void ResourcePrefetchPredictorTables::UpdateResourceData( |
| 169 const PrefetchData& url_data, | 169 const PrefetchData& data, |
| 170 const PrefetchData& host_data, | 170 PrefetchKeyType key_type) { |
| 171 const RedirectData& url_redirect_data, | 171 TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateResourceData"); |
| 172 const RedirectData& host_redirect_data) { | |
| 173 TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateData"); | |
| 174 DCHECK_CURRENTLY_ON(BrowserThread::DB); | 172 DCHECK_CURRENTLY_ON(BrowserThread::DB); |
| 175 if (CantAccessDatabase()) | 173 if (CantAccessDatabase()) |
| 176 return; | 174 return; |
| 177 | 175 |
| 178 DCHECK(url_data.has_primary_key() || host_data.has_primary_key() || | 176 UpdateDataHelper(key_type, PrefetchDataType::RESOURCE, data.primary_key(), |
| 179 url_redirect_data.has_primary_key() || | 177 data); |
| 180 host_redirect_data.has_primary_key()); | 178 } |
| 181 | 179 |
| 182 DB()->BeginTransaction(); | 180 void ResourcePrefetchPredictorTables::UpdateRedirectData( |
| 181 const RedirectData& data, |
| 182 PrefetchKeyType key_type) { |
| 183 TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateRedirectData"); |
| 184 DCHECK_CURRENTLY_ON(BrowserThread::DB); |
| 185 if (CantAccessDatabase()) |
| 186 return; |
| 183 | 187 |
| 184 bool success = | 188 UpdateDataHelper(key_type, PrefetchDataType::REDIRECT, data.primary_key(), |
| 185 (!url_data.has_primary_key() || | 189 data); |
| 186 UpdateDataHelper(PREFETCH_KEY_TYPE_URL, PrefetchDataType::RESOURCE, | |
| 187 url_data.primary_key(), url_data)) && | |
| 188 (!host_data.has_primary_key() || | |
| 189 UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::RESOURCE, | |
| 190 host_data.primary_key(), host_data)) && | |
| 191 (!url_redirect_data.has_primary_key() || | |
| 192 UpdateDataHelper(PREFETCH_KEY_TYPE_URL, PrefetchDataType::REDIRECT, | |
| 193 url_redirect_data.primary_key(), url_redirect_data)) && | |
| 194 (!host_redirect_data.has_primary_key() || | |
| 195 UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::REDIRECT, | |
| 196 host_redirect_data.primary_key(), host_redirect_data)); | |
| 197 if (!success) | |
| 198 DB()->RollbackTransaction(); | |
| 199 else | |
| 200 DB()->CommitTransaction(); | |
| 201 } | 190 } |
| 202 | 191 |
| 203 void ResourcePrefetchPredictorTables::UpdateManifestData( | 192 void ResourcePrefetchPredictorTables::UpdateManifestData( |
| 204 const std::string& host, | 193 const std::string& host, |
| 205 const precache::PrecacheManifest& manifest_data) { | 194 const precache::PrecacheManifest& manifest_data) { |
| 195 TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateManifestData"); |
| 206 DCHECK_CURRENTLY_ON(BrowserThread::DB); | 196 DCHECK_CURRENTLY_ON(BrowserThread::DB); |
| 207 if (CantAccessDatabase()) | 197 if (CantAccessDatabase()) |
| 208 return; | 198 return; |
| 209 | 199 |
| 210 DB()->BeginTransaction(); | 200 UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::MANIFEST, host, |
| 211 bool success = UpdateDataHelper( | 201 manifest_data); |
| 212 PREFETCH_KEY_TYPE_HOST, PrefetchDataType::MANIFEST, host, manifest_data); | |
| 213 | |
| 214 if (!success) | |
| 215 DB()->RollbackTransaction(); | |
| 216 else | |
| 217 DB()->CommitTransaction(); | |
| 218 } | 202 } |
| 219 | 203 |
| 220 void ResourcePrefetchPredictorTables::UpdateOriginData( | 204 void ResourcePrefetchPredictorTables::UpdateOriginData( |
| 221 const OriginData& origin_data) { | 205 const OriginData& origin_data) { |
| 206 TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateOriginData"); |
| 222 DCHECK_CURRENTLY_ON(BrowserThread::DB); | 207 DCHECK_CURRENTLY_ON(BrowserThread::DB); |
| 223 if (CantAccessDatabase()) | 208 if (CantAccessDatabase()) |
| 224 return; | 209 return; |
| 225 | 210 |
| 226 std::string host = origin_data.host(); | 211 UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::ORIGIN, |
| 227 DB()->BeginTransaction(); | 212 origin_data.host(), origin_data); |
| 228 bool success = UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, | |
| 229 PrefetchDataType::ORIGIN, host, origin_data); | |
| 230 | |
| 231 if (!success) | |
| 232 DB()->RollbackTransaction(); | |
| 233 else | |
| 234 DB()->CommitTransaction(); | |
| 235 } | 213 } |
| 236 | 214 |
| 237 void ResourcePrefetchPredictorTables::DeleteResourceData( | 215 void ResourcePrefetchPredictorTables::DeleteResourceData( |
| 238 const std::vector<std::string>& urls, | 216 const std::vector<std::string>& urls, |
| 239 const std::vector<std::string>& hosts) { | 217 const std::vector<std::string>& hosts) { |
| 240 DCHECK_CURRENTLY_ON(BrowserThread::DB); | 218 DCHECK_CURRENTLY_ON(BrowserThread::DB); |
| 241 if (CantAccessDatabase()) | 219 if (CantAccessDatabase()) |
| 242 return; | 220 return; |
| 243 | 221 |
| 244 DCHECK(!urls.empty() || !hosts.empty()); | 222 DCHECK(!urls.empty() || !hosts.empty()); |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 .c_str())); | 356 .c_str())); |
| 379 | 357 |
| 380 OriginData data; | 358 OriginData data; |
| 381 std::string key; | 359 std::string key; |
| 382 while (StepAndInitializeProtoData(&reader, &key, &data)) { | 360 while (StepAndInitializeProtoData(&reader, &key, &data)) { |
| 383 origin_map->insert({key, data}); | 361 origin_map->insert({key, data}); |
| 384 DCHECK_EQ(data.host(), key); | 362 DCHECK_EQ(data.host(), key); |
| 385 } | 363 } |
| 386 } | 364 } |
| 387 | 365 |
| 388 bool ResourcePrefetchPredictorTables::UpdateDataHelper( | 366 void ResourcePrefetchPredictorTables::UpdateDataHelper( |
| 389 PrefetchKeyType key_type, | 367 PrefetchKeyType key_type, |
| 390 PrefetchDataType data_type, | 368 PrefetchDataType data_type, |
| 391 const std::string& key, | 369 const std::string& key, |
| 392 const MessageLite& data) { | 370 const MessageLite& data) { |
| 371 DB()->BeginTransaction(); |
| 372 |
| 393 // Delete the older data from the table. | 373 // Delete the older data from the table. |
| 394 std::unique_ptr<sql::Statement> deleter( | 374 std::unique_ptr<sql::Statement> deleter( |
| 395 GetTableUpdateStatement(key_type, data_type, TableOperationType::REMOVE)); | 375 GetTableUpdateStatement(key_type, data_type, TableOperationType::REMOVE)); |
| 396 deleter->BindString(0, key); | 376 deleter->BindString(0, key); |
| 397 if (!deleter->Run()) | 377 bool success = deleter->Run(); |
| 398 return false; | |
| 399 | 378 |
| 400 // Add the new data to the table. | 379 if (success) { |
| 401 std::unique_ptr<sql::Statement> inserter( | 380 // Add the new data to the table. |
| 402 GetTableUpdateStatement(key_type, data_type, TableOperationType::INSERT)); | 381 std::unique_ptr<sql::Statement> inserter(GetTableUpdateStatement( |
| 403 BindProtoDataToStatement(key, data, inserter.get()); | 382 key_type, data_type, TableOperationType::INSERT)); |
| 404 return inserter->Run(); | 383 BindProtoDataToStatement(key, data, inserter.get()); |
| 384 success = inserter->Run(); |
| 385 } |
| 386 |
| 387 if (!success) |
| 388 DB()->RollbackTransaction(); |
| 389 else |
| 390 DB()->CommitTransaction(); |
| 405 } | 391 } |
| 406 | 392 |
| 407 void ResourcePrefetchPredictorTables::DeleteDataHelper( | 393 void ResourcePrefetchPredictorTables::DeleteDataHelper( |
| 408 PrefetchKeyType key_type, | 394 PrefetchKeyType key_type, |
| 409 PrefetchDataType data_type, | 395 PrefetchDataType data_type, |
| 410 const std::vector<std::string>& keys) { | 396 const std::vector<std::string>& keys) { |
| 411 for (const std::string& key : keys) { | 397 for (const std::string& key : keys) { |
| 412 std::unique_ptr<sql::Statement> deleter(GetTableUpdateStatement( | 398 std::unique_ptr<sql::Statement> deleter(GetTableUpdateStatement( |
| 413 key_type, data_type, TableOperationType::REMOVE)); | 399 key_type, data_type, TableOperationType::REMOVE)); |
| 414 deleter->BindString(0, key); | 400 deleter->BindString(0, key); |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 623 return kManifestTableName; | 609 return kManifestTableName; |
| 624 case PrefetchDataType::ORIGIN: | 610 case PrefetchDataType::ORIGIN: |
| 625 return kOriginTableName; | 611 return kOriginTableName; |
| 626 } | 612 } |
| 627 | 613 |
| 628 NOTREACHED(); | 614 NOTREACHED(); |
| 629 return nullptr; | 615 return nullptr; |
| 630 } | 616 } |
| 631 | 617 |
| 632 } // namespace predictors | 618 } // namespace predictors |
| OLD | NEW |