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 <string> | 7 #include <string> |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "content/browser/service_worker/service_worker_info.h" | 10 #include "content/browser/service_worker/service_worker_info.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 const base::FilePath& path, | 29 const base::FilePath& path, |
30 quota::QuotaManagerProxy* quota_manager_proxy) | 30 quota::QuotaManagerProxy* quota_manager_proxy) |
31 : last_registration_id_(0), // TODO(kinuko): this should be read from disk. | 31 : last_registration_id_(0), // TODO(kinuko): this should be read from disk. |
32 last_version_id_(0), // TODO(kinuko): this should be read from disk. | 32 last_version_id_(0), // TODO(kinuko): this should be read from disk. |
33 quota_manager_proxy_(quota_manager_proxy) { | 33 quota_manager_proxy_(quota_manager_proxy) { |
34 if (!path.empty()) | 34 if (!path.empty()) |
35 path_ = path.Append(kServiceWorkerDirectory); | 35 path_ = path.Append(kServiceWorkerDirectory); |
36 } | 36 } |
37 | 37 |
38 ServiceWorkerStorage::~ServiceWorkerStorage() { | 38 ServiceWorkerStorage::~ServiceWorkerStorage() { |
39 // TODO(michaeln): fix the onwership model such that workers can get shutdown | |
40 // prior to browser close time. | |
41 for (PatternToRegistrationMap::const_iterator iter = | |
42 registration_by_pattern_.begin(); | |
43 iter != registration_by_pattern_.end(); | |
44 ++iter) { | |
45 iter->second->Shutdown(); | |
46 } | |
47 registration_by_pattern_.clear(); | 39 registration_by_pattern_.clear(); |
48 } | 40 } |
49 | 41 |
50 void ServiceWorkerStorage::FindRegistrationForPattern( | 42 void ServiceWorkerStorage::FindRegistrationForPattern( |
51 const GURL& pattern, | 43 const GURL& pattern, |
52 const FindRegistrationCallback& callback) { | 44 const FindRegistrationCallback& callback) { |
53 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NOT_FOUND; | 45 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NOT_FOUND; |
54 scoped_refptr<ServiceWorkerRegistration> found; | 46 scoped_refptr<ServiceWorkerRegistration> found; |
55 PatternToRegistrationMap::const_iterator match = | 47 PatternToRegistrationMap::const_iterator match = |
56 registration_by_pattern_.find(pattern); | 48 registration_by_pattern_.find(pattern); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 // Temporarily borrowed directly from appcache::Namespace::IsMatch(). | 156 // Temporarily borrowed directly from appcache::Namespace::IsMatch(). |
165 // We have to escape '?' characters since MatchPattern also treats those | 157 // We have to escape '?' characters since MatchPattern also treats those |
166 // as wildcards which we don't want here, we only do '*'s. | 158 // as wildcards which we don't want here, we only do '*'s. |
167 std::string pattern_spec(pattern.spec()); | 159 std::string pattern_spec(pattern.spec()); |
168 if (pattern.has_query()) | 160 if (pattern.has_query()) |
169 ReplaceSubstringsAfterOffset(&pattern_spec, 0, "?", "\\?"); | 161 ReplaceSubstringsAfterOffset(&pattern_spec, 0, "?", "\\?"); |
170 return MatchPattern(url.spec(), pattern_spec); | 162 return MatchPattern(url.spec(), pattern_spec); |
171 } | 163 } |
172 | 164 |
173 } // namespace content | 165 } // namespace content |
OLD | NEW |