Chromium Code Reviews| 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/service_worker/service_worker_storage.h" | 5 #include "content/browser/service_worker/service_worker_storage.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
| 10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 32 namespace content { | 32 namespace content { |
| 33 | 33 |
| 34 namespace { | 34 namespace { |
| 35 | 35 |
| 36 void RunSoon(const tracked_objects::Location& from_here, | 36 void RunSoon(const tracked_objects::Location& from_here, |
| 37 const base::Closure& closure) { | 37 const base::Closure& closure) { |
| 38 base::ThreadTaskRunnerHandle::Get()->PostTask(from_here, closure); | 38 base::ThreadTaskRunnerHandle::Get()->PostTask(from_here, closure); |
| 39 } | 39 } |
| 40 | 40 |
| 41 void CompleteFindNow( | 41 void CompleteFindNow( |
| 42 const scoped_refptr<ServiceWorkerRegistration>& registration, | 42 scoped_refptr<ServiceWorkerRegistration> registration, |
| 43 ServiceWorkerStatusCode status, | 43 ServiceWorkerStatusCode status, |
| 44 const ServiceWorkerStorage::FindRegistrationCallback& callback) { | 44 const ServiceWorkerStorage::FindRegistrationCallback& callback) { |
| 45 if (registration && registration->is_deleted()) { | 45 if (registration && registration->is_deleted()) { |
| 46 // It's past the point of no return and no longer findable. | 46 // It's past the point of no return and no longer findable. |
| 47 callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND, nullptr); | 47 callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND, nullptr); |
| 48 return; | 48 return; |
| 49 } | 49 } |
| 50 callback.Run(status, registration); | 50 callback.Run(status, std::move(registration)); |
| 51 } | 51 } |
| 52 | 52 |
| 53 void CompleteFindSoon( | 53 void CompleteFindSoon( |
| 54 const tracked_objects::Location& from_here, | 54 const tracked_objects::Location& from_here, |
| 55 const scoped_refptr<ServiceWorkerRegistration>& registration, | 55 scoped_refptr<ServiceWorkerRegistration> registration, |
| 56 ServiceWorkerStatusCode status, | 56 ServiceWorkerStatusCode status, |
| 57 const ServiceWorkerStorage::FindRegistrationCallback& callback) { | 57 const ServiceWorkerStorage::FindRegistrationCallback& callback) { |
| 58 RunSoon(from_here, | 58 RunSoon(from_here, base::Bind(&CompleteFindNow, std::move(registration), |
| 59 base::Bind(&CompleteFindNow, registration, status, callback)); | 59 status, callback)); |
| 60 } | 60 } |
| 61 | 61 |
| 62 const base::FilePath::CharType kDatabaseName[] = | 62 const base::FilePath::CharType kDatabaseName[] = |
| 63 FILE_PATH_LITERAL("Database"); | 63 FILE_PATH_LITERAL("Database"); |
| 64 const base::FilePath::CharType kDiskCacheName[] = | 64 const base::FilePath::CharType kDiskCacheName[] = |
| 65 FILE_PATH_LITERAL("ScriptCache"); | 65 FILE_PATH_LITERAL("ScriptCache"); |
| 66 | 66 |
| 67 const int kMaxMemDiskCacheSize = 10 * 1024 * 1024; | 67 const int kMaxMemDiskCacheSize = 10 * 1024 * 1024; |
| 68 const int kMaxDiskCacheSize = 250 * 1024 * 1024; | 68 const int kMaxDiskCacheSize = 250 * 1024 * 1024; |
| 69 | 69 |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 FindInstallingRegistrationForDocument(document_url); | 160 FindInstallingRegistrationForDocument(document_url); |
| 161 ServiceWorkerStatusCode status = installing_registration | 161 ServiceWorkerStatusCode status = installing_registration |
| 162 ? SERVICE_WORKER_OK | 162 ? SERVICE_WORKER_OK |
| 163 : SERVICE_WORKER_ERROR_NOT_FOUND; | 163 : SERVICE_WORKER_ERROR_NOT_FOUND; |
| 164 TRACE_EVENT_INSTANT2( | 164 TRACE_EVENT_INSTANT2( |
| 165 "ServiceWorker", | 165 "ServiceWorker", |
| 166 "ServiceWorkerStorage::FindRegistrationForDocument:CheckInstalling", | 166 "ServiceWorkerStorage::FindRegistrationForDocument:CheckInstalling", |
| 167 TRACE_EVENT_SCOPE_THREAD, | 167 TRACE_EVENT_SCOPE_THREAD, |
| 168 "URL", document_url.spec(), | 168 "URL", document_url.spec(), |
| 169 "Status", ServiceWorkerStatusToString(status)); | 169 "Status", ServiceWorkerStatusToString(status)); |
| 170 CompleteFindNow(installing_registration, | 170 CompleteFindNow(std::move(installing_registration), status, callback); |
| 171 status, | |
| 172 callback); | |
| 173 return; | 171 return; |
| 174 } | 172 } |
| 175 | 173 |
| 176 // To connect this TRACE_EVENT with the callback, TimeTicks is used for | 174 // To connect this TRACE_EVENT with the callback, TimeTicks is used for |
| 177 // callback id. | 175 // callback id. |
| 178 int64_t callback_id = base::TimeTicks::Now().ToInternalValue(); | 176 int64_t callback_id = base::TimeTicks::Now().ToInternalValue(); |
| 179 TRACE_EVENT_ASYNC_BEGIN1( | 177 TRACE_EVENT_ASYNC_BEGIN1( |
| 180 "ServiceWorker", | 178 "ServiceWorker", |
| 181 "ServiceWorkerStorage::FindRegistrationForDocument", | 179 "ServiceWorkerStorage::FindRegistrationForDocument", |
| 182 callback_id, | 180 callback_id, |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 207 } | 205 } |
| 208 return; | 206 return; |
| 209 } | 207 } |
| 210 DCHECK_EQ(INITIALIZED, state_); | 208 DCHECK_EQ(INITIALIZED, state_); |
| 211 | 209 |
| 212 // See if there are any stored registrations for the origin. | 210 // See if there are any stored registrations for the origin. |
| 213 if (!ContainsKey(registered_origins_, scope.GetOrigin())) { | 211 if (!ContainsKey(registered_origins_, scope.GetOrigin())) { |
| 214 // Look for something currently being installed. | 212 // Look for something currently being installed. |
| 215 scoped_refptr<ServiceWorkerRegistration> installing_registration = | 213 scoped_refptr<ServiceWorkerRegistration> installing_registration = |
| 216 FindInstallingRegistrationForPattern(scope); | 214 FindInstallingRegistrationForPattern(scope); |
| 217 CompleteFindSoon(FROM_HERE, installing_registration, | 215 CompleteFindSoon(FROM_HERE, std::move(installing_registration), |
| 218 installing_registration ? SERVICE_WORKER_OK | 216 installing_registration ? SERVICE_WORKER_OK |
|
nhiroki
2016/07/25 09:15:40
This ternary operation may be evaluated after the
horo
2016/07/25 09:32:01
Done.
| |
| 219 : SERVICE_WORKER_ERROR_NOT_FOUND, | 217 : SERVICE_WORKER_ERROR_NOT_FOUND, |
| 220 callback); | 218 callback); |
| 221 return; | 219 return; |
| 222 } | 220 } |
| 223 | 221 |
| 224 database_task_manager_->GetTaskRunner()->PostTask( | 222 database_task_manager_->GetTaskRunner()->PostTask( |
| 225 FROM_HERE, | 223 FROM_HERE, |
| 226 base::Bind( | 224 base::Bind( |
| 227 &FindForPatternInDB, | 225 &FindForPatternInDB, |
| 228 database_.get(), | 226 database_.get(), |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 270 CompleteFindNow(installing_registration, | 268 CompleteFindNow(installing_registration, |
| 271 installing_registration ? SERVICE_WORKER_OK | 269 installing_registration ? SERVICE_WORKER_OK |
| 272 : SERVICE_WORKER_ERROR_NOT_FOUND, | 270 : SERVICE_WORKER_ERROR_NOT_FOUND, |
| 273 callback); | 271 callback); |
| 274 return; | 272 return; |
| 275 } | 273 } |
| 276 | 274 |
| 277 scoped_refptr<ServiceWorkerRegistration> registration = | 275 scoped_refptr<ServiceWorkerRegistration> registration = |
| 278 context_->GetLiveRegistration(registration_id); | 276 context_->GetLiveRegistration(registration_id); |
| 279 if (registration) { | 277 if (registration) { |
| 280 CompleteFindNow(registration, SERVICE_WORKER_OK, callback); | 278 CompleteFindNow(std::move(registration), SERVICE_WORKER_OK, callback); |
| 281 return; | 279 return; |
| 282 } | 280 } |
| 283 | 281 |
| 284 database_task_manager_->GetTaskRunner()->PostTask( | 282 database_task_manager_->GetTaskRunner()->PostTask( |
| 285 FROM_HERE, | 283 FROM_HERE, |
| 286 base::Bind(&FindForIdInDB, | 284 base::Bind(&FindForIdInDB, |
| 287 database_.get(), | 285 database_.get(), |
| 288 base::ThreadTaskRunnerHandle::Get(), | 286 base::ThreadTaskRunnerHandle::Get(), |
| 289 registration_id, | 287 registration_id, |
| 290 origin, | 288 origin, |
| (...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 889 return; | 887 return; |
| 890 } | 888 } |
| 891 | 889 |
| 892 if (status == ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { | 890 if (status == ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { |
| 893 // Look for something currently being installed. | 891 // Look for something currently being installed. |
| 894 scoped_refptr<ServiceWorkerRegistration> installing_registration = | 892 scoped_refptr<ServiceWorkerRegistration> installing_registration = |
| 895 FindInstallingRegistrationForDocument(document_url); | 893 FindInstallingRegistrationForDocument(document_url); |
| 896 ServiceWorkerStatusCode installing_status = | 894 ServiceWorkerStatusCode installing_status = |
| 897 installing_registration ? SERVICE_WORKER_OK | 895 installing_registration ? SERVICE_WORKER_OK |
| 898 : SERVICE_WORKER_ERROR_NOT_FOUND; | 896 : SERVICE_WORKER_ERROR_NOT_FOUND; |
| 899 callback.Run(installing_status, installing_registration); | 897 callback.Run(installing_status, std::move(installing_registration)); |
| 900 TRACE_EVENT_ASYNC_END2( | 898 TRACE_EVENT_ASYNC_END2( |
| 901 "ServiceWorker", | 899 "ServiceWorker", |
| 902 "ServiceWorkerStorage::FindRegistrationForDocument", | 900 "ServiceWorkerStorage::FindRegistrationForDocument", |
| 903 callback_id, | 901 callback_id, |
| 904 "Status", ServiceWorkerDatabase::StatusToString(status), | 902 "Status", ServiceWorkerDatabase::StatusToString(status), |
| 905 "Info", | 903 "Info", |
| 906 (installing_status == SERVICE_WORKER_OK) ? | 904 (installing_status == SERVICE_WORKER_OK) ? |
| 907 "Installing registration is found" : | 905 "Installing registration is found" : |
| 908 "Any registrations are not found"); | 906 "Any registrations are not found"); |
| 909 return; | 907 return; |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 926 const ResourceList& resources, | 924 const ResourceList& resources, |
| 927 ServiceWorkerDatabase::Status status) { | 925 ServiceWorkerDatabase::Status status) { |
| 928 if (status == ServiceWorkerDatabase::STATUS_OK) { | 926 if (status == ServiceWorkerDatabase::STATUS_OK) { |
| 929 ReturnFoundRegistration(callback, data, resources); | 927 ReturnFoundRegistration(callback, data, resources); |
| 930 return; | 928 return; |
| 931 } | 929 } |
| 932 | 930 |
| 933 if (status == ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { | 931 if (status == ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { |
| 934 scoped_refptr<ServiceWorkerRegistration> installing_registration = | 932 scoped_refptr<ServiceWorkerRegistration> installing_registration = |
| 935 FindInstallingRegistrationForPattern(scope); | 933 FindInstallingRegistrationForPattern(scope); |
| 936 callback.Run(installing_registration ? SERVICE_WORKER_OK | 934 ServiceWorkerStatusCode installing_status = |
| 937 : SERVICE_WORKER_ERROR_NOT_FOUND, | 935 installing_registration ? SERVICE_WORKER_OK |
| 938 installing_registration); | 936 : SERVICE_WORKER_ERROR_NOT_FOUND; |
| 937 callback.Run(installing_status, std::move(installing_registration)); | |
| 939 return; | 938 return; |
| 940 } | 939 } |
| 941 | 940 |
| 942 ScheduleDeleteAndStartOver(); | 941 ScheduleDeleteAndStartOver(); |
| 943 callback.Run(DatabaseStatusToStatusCode(status), | 942 callback.Run(DatabaseStatusToStatusCode(status), |
| 944 scoped_refptr<ServiceWorkerRegistration>()); | 943 scoped_refptr<ServiceWorkerRegistration>()); |
| 945 } | 944 } |
| 946 | 945 |
| 947 void ServiceWorkerStorage::DidFindRegistrationForId( | 946 void ServiceWorkerStorage::DidFindRegistrationForId( |
| 948 const FindRegistrationCallback& callback, | 947 const FindRegistrationCallback& callback, |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 966 scoped_refptr<ServiceWorkerRegistration>()); | 965 scoped_refptr<ServiceWorkerRegistration>()); |
| 967 } | 966 } |
| 968 | 967 |
| 969 void ServiceWorkerStorage::ReturnFoundRegistration( | 968 void ServiceWorkerStorage::ReturnFoundRegistration( |
| 970 const FindRegistrationCallback& callback, | 969 const FindRegistrationCallback& callback, |
| 971 const ServiceWorkerDatabase::RegistrationData& data, | 970 const ServiceWorkerDatabase::RegistrationData& data, |
| 972 const ResourceList& resources) { | 971 const ResourceList& resources) { |
| 973 DCHECK(!resources.empty()); | 972 DCHECK(!resources.empty()); |
| 974 scoped_refptr<ServiceWorkerRegistration> registration = | 973 scoped_refptr<ServiceWorkerRegistration> registration = |
| 975 GetOrCreateRegistration(data, resources); | 974 GetOrCreateRegistration(data, resources); |
| 976 CompleteFindNow(registration, SERVICE_WORKER_OK, callback); | 975 CompleteFindNow(std::move(registration), SERVICE_WORKER_OK, callback); |
| 977 } | 976 } |
| 978 | 977 |
| 979 void ServiceWorkerStorage::DidGetRegistrations( | 978 void ServiceWorkerStorage::DidGetRegistrations( |
| 980 const GetRegistrationsCallback& callback, | 979 const GetRegistrationsCallback& callback, |
| 981 RegistrationList* registration_data_list, | 980 RegistrationList* registration_data_list, |
| 982 std::vector<ResourceList>* resources_list, | 981 std::vector<ResourceList>* resources_list, |
| 983 const GURL& origin_filter, | 982 const GURL& origin_filter, |
| 984 ServiceWorkerDatabase::Status status) { | 983 ServiceWorkerDatabase::Status status) { |
| 985 DCHECK(registration_data_list); | 984 DCHECK(registration_data_list); |
| 986 DCHECK(resources_list); | 985 DCHECK(resources_list); |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 1005 | 1004 |
| 1006 // Add unstored registrations that are being installed. | 1005 // Add unstored registrations that are being installed. |
| 1007 for (const auto& registration : installing_registrations_) { | 1006 for (const auto& registration : installing_registrations_) { |
| 1008 if ((!origin_filter.is_valid() || | 1007 if ((!origin_filter.is_valid() || |
| 1009 registration.second->pattern().GetOrigin() == origin_filter) && | 1008 registration.second->pattern().GetOrigin() == origin_filter) && |
| 1010 registration_ids.insert(registration.first).second) { | 1009 registration_ids.insert(registration.first).second) { |
| 1011 registrations.push_back(registration.second); | 1010 registrations.push_back(registration.second); |
| 1012 } | 1011 } |
| 1013 } | 1012 } |
| 1014 | 1013 |
| 1015 callback.Run(SERVICE_WORKER_OK, registrations); | 1014 callback.Run(SERVICE_WORKER_OK, std::move(registrations)); |
| 1016 } | 1015 } |
| 1017 | 1016 |
| 1018 void ServiceWorkerStorage::DidGetRegistrationsInfos( | 1017 void ServiceWorkerStorage::DidGetRegistrationsInfos( |
| 1019 const GetRegistrationsInfosCallback& callback, | 1018 const GetRegistrationsInfosCallback& callback, |
| 1020 RegistrationList* registration_data_list, | 1019 RegistrationList* registration_data_list, |
| 1021 const GURL& origin_filter, | 1020 const GURL& origin_filter, |
| 1022 ServiceWorkerDatabase::Status status) { | 1021 ServiceWorkerDatabase::Status status) { |
| 1023 DCHECK(registration_data_list); | 1022 DCHECK(registration_data_list); |
| 1024 if (status != ServiceWorkerDatabase::STATUS_OK && | 1023 if (status != ServiceWorkerDatabase::STATUS_OK && |
| 1025 status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { | 1024 status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { |
| (...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1770 callback.Run(SERVICE_WORKER_ERROR_FAILED); | 1769 callback.Run(SERVICE_WORKER_ERROR_FAILED); |
| 1771 return; | 1770 return; |
| 1772 } | 1771 } |
| 1773 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; | 1772 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; |
| 1774 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( | 1773 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( |
| 1775 ServiceWorkerMetrics::DELETE_OK); | 1774 ServiceWorkerMetrics::DELETE_OK); |
| 1776 callback.Run(SERVICE_WORKER_OK); | 1775 callback.Run(SERVICE_WORKER_OK); |
| 1777 } | 1776 } |
| 1778 | 1777 |
| 1779 } // namespace content | 1778 } // namespace content |
| OLD | NEW |