| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CACHE_WRITER_H_ | 5 #ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CACHE_WRITER_H_ |
| 6 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CACHE_WRITER_H_ | 6 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CACHE_WRITER_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 // Note that writes done by this class cannot be "short" - ie, if they succeed, | 34 // Note that writes done by this class cannot be "short" - ie, if they succeed, |
| 35 // they always write all the supplied data back. Therefore completions are | 35 // they always write all the supplied data back. Therefore completions are |
| 36 // signalled with net::Error without a count of bytes written. | 36 // signalled with net::Error without a count of bytes written. |
| 37 // | 37 // |
| 38 // This class's behavior is modelled as a state machine; see the DoLoop function | 38 // This class's behavior is modelled as a state machine; see the DoLoop function |
| 39 // for comments about this. | 39 // for comments about this. |
| 40 class CONTENT_EXPORT ServiceWorkerCacheWriter { | 40 class CONTENT_EXPORT ServiceWorkerCacheWriter { |
| 41 public: | 41 public: |
| 42 using OnWriteCompleteCallback = base::Callback<void(net::Error)>; | 42 using OnWriteCompleteCallback = base::Callback<void(net::Error)>; |
| 43 | 43 |
| 44 // The types for the factory functions passed into the constructor. These are | 44 // The |compare_reader| may be null, in which case this instance will |
| 45 // responsible for creating readers from the existing cache entry and writers | |
| 46 // to the new cache entry when called. These are passed in as factories | |
| 47 // instead of passing readers and writers in directly to avoid creating | |
| 48 // writers to entries that won't be updated, and because this class may need | |
| 49 // multiple readers internally. | |
| 50 using ResponseReaderCreator = | |
| 51 base::Callback<scoped_ptr<ServiceWorkerResponseReader>(void)>; | |
| 52 using ResponseWriterCreator = | |
| 53 base::Callback<scoped_ptr<ServiceWorkerResponseWriter>(void)>; | |
| 54 | |
| 55 // The existing reader may be null, in which case this instance will | |
| 56 // unconditionally write back data supplied to |MaybeWriteHeaders| and | 45 // unconditionally write back data supplied to |MaybeWriteHeaders| and |
| 57 // |MaybeWriteData|. | 46 // |MaybeWriteData|. |
| 58 ServiceWorkerCacheWriter(const ResponseReaderCreator& reader_creator, | 47 ServiceWorkerCacheWriter( |
| 59 const ResponseWriterCreator& writer_creator); | 48 scoped_ptr<ServiceWorkerResponseReader> compare_reader, |
| 49 scoped_ptr<ServiceWorkerResponseReader> copy_reader, |
| 50 scoped_ptr<ServiceWorkerResponseWriter> writer); |
| 60 | 51 |
| 61 ~ServiceWorkerCacheWriter(); | 52 ~ServiceWorkerCacheWriter(); |
| 62 | 53 |
| 63 // Writes the supplied |headers| back to the cache. Returns ERR_IO_PENDING if | 54 // Writes the supplied |headers| back to the cache. Returns ERR_IO_PENDING if |
| 64 // the write will complete asynchronously, in which case |callback| will be | 55 // the write will complete asynchronously, in which case |callback| will be |
| 65 // called when it completes. Otherwise, returns a code other than | 56 // called when it completes. Otherwise, returns a code other than |
| 66 // ERR_IO_PENDING and does not invoke |callback|. Note that this method will | 57 // ERR_IO_PENDING and does not invoke |callback|. Note that this method will |
| 67 // not necessarily write data back to the cache if the incoming data is | 58 // not necessarily write data back to the cache if the incoming data is |
| 68 // equivalent to the existing cached data. See the source of this function for | 59 // equivalent to the existing cached data. See the source of this function for |
| 69 // details about how this function drives the state machine. | 60 // details about how this function drives the state machine. |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 size_t cached_length_; | 203 size_t cached_length_; |
| 213 | 204 |
| 214 size_t bytes_compared_; | 205 size_t bytes_compared_; |
| 215 size_t bytes_copied_; | 206 size_t bytes_copied_; |
| 216 size_t bytes_written_; | 207 size_t bytes_written_; |
| 217 | 208 |
| 218 bool did_replace_; | 209 bool did_replace_; |
| 219 | 210 |
| 220 size_t compare_offset_; | 211 size_t compare_offset_; |
| 221 | 212 |
| 222 ResponseReaderCreator reader_creator_; | |
| 223 ResponseWriterCreator writer_creator_; | |
| 224 scoped_ptr<ServiceWorkerResponseReader> compare_reader_; | 213 scoped_ptr<ServiceWorkerResponseReader> compare_reader_; |
| 225 scoped_ptr<ServiceWorkerResponseReader> copy_reader_; | 214 scoped_ptr<ServiceWorkerResponseReader> copy_reader_; |
| 226 scoped_ptr<ServiceWorkerResponseWriter> writer_; | 215 scoped_ptr<ServiceWorkerResponseWriter> writer_; |
| 227 base::WeakPtrFactory<ServiceWorkerCacheWriter> weak_factory_; | 216 base::WeakPtrFactory<ServiceWorkerCacheWriter> weak_factory_; |
| 228 }; | 217 }; |
| 229 | 218 |
| 230 } // namespace content | 219 } // namespace content |
| 231 | 220 |
| 232 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CACHE_WRITER_H_ | 221 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CACHE_WRITER_H_ |
| OLD | NEW |