Index: content/browser/service_worker/service_worker_cache_writer.h |
diff --git a/content/browser/service_worker/service_worker_cache_writer.h b/content/browser/service_worker/service_worker_cache_writer.h |
deleted file mode 100644 |
index 42aab00a1952acf696d36142232a887fe050d2e1..0000000000000000000000000000000000000000 |
--- a/content/browser/service_worker/service_worker_cache_writer.h |
+++ /dev/null |
@@ -1,230 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CACHE_WRITER_H_ |
-#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CACHE_WRITER_H_ |
- |
-#include <map> |
-#include <set> |
- |
-#include "base/callback.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/memory/weak_ptr.h" |
-#include "content/common/content_export.h" |
-#include "net/base/io_buffer.h" |
-#include "net/base/net_errors.h" |
- |
-namespace content { |
- |
-struct HttpResponseInfoIOBuffer; |
-class ServiceWorkerCacheWriterCore; |
-class ServiceWorkerResponseReader; |
-class ServiceWorkerResponseWriter; |
-class ServiceWorkerStorage; |
- |
-// This class is responsible for possibly updating the ServiceWorker script |
-// cache for an installed ServiceWorker main script. If there is no existing |
-// cache entry, this class always writes supplied data back to the cache; if |
-// there is an existing cache entry, this class only writes supplied data back |
-// if there is a cache mismatch. |
-// |
-// Note that writes done by this class cannot be "short" - ie, if they succeed, |
-// they always write all the supplied data back. Therefore completions are |
-// signalled with net::Error without a count of bytes written. |
-// |
-// This class's behavior is modelled as a state machine; see the DoLoop function |
-// for comments about this. |
-class CONTENT_EXPORT ServiceWorkerCacheWriter { |
- public: |
- using OnWriteCompleteCallback = base::Callback<void(net::Error)>; |
- |
- // The types for the factory functions passed into the constructor. These are |
- // responsible for creating readers from the existing cache entry and writers |
- // to the new cache entry when called. These are passed in as factories |
- // instead of passing readers and writers in directly to avoid creating |
- // writers to entries that won't be updated, and because this class may need |
- // multiple readers internally. |
- using ResponseReaderCreator = |
- base::Callback<scoped_ptr<ServiceWorkerResponseReader>(void)>; |
- using ResponseWriterCreator = |
- base::Callback<scoped_ptr<ServiceWorkerResponseWriter>(void)>; |
- |
- // The existing reader may be null, in which case this instance will |
- // unconditionally write back data supplied to |MaybeWriteHeaders| and |
- // |MaybeWriteData|. |
- ServiceWorkerCacheWriter(const ResponseReaderCreator& reader_creator, |
- const ResponseWriterCreator& writer_creator); |
- |
- virtual ~ServiceWorkerCacheWriter(); |
- |
- // Writes the supplied |headers| back to the cache. Returns ERR_IO_PENDING if |
- // the write will complete asynchronously, in which case |callback| will be |
- // called when it completes. Otherwise, returns a code other than |
- // ERR_IO_PENDING and does not invoke |callback|. Note that this method will |
- // not necessarily write data back to the cache if the incoming data is |
- // equivalent to the existing cached data. See the source of this function for |
- // details about how this function drives the state machine. |
- net::Error MaybeWriteHeaders(HttpResponseInfoIOBuffer* headers, |
- const OnWriteCompleteCallback& callback); |
- |
- // Writes the supplied body data |data| back to the cache. Returns |
- // ERR_IO_PENDING if the write will complete asynchronously, in which case |
- // |callback| will be called when it completes. Otherwise, returns a code |
- // other than ERR_IO_PENDING and does not invoke |callback|. Note that this |
- // method will not necessarily write data back to the cache if the incoming |
- // data is equivalent to the existing cached data. See the source of this |
- // function for details about how this function drives the state machine. |
- net::Error MaybeWriteData(net::IOBuffer* buf, |
- size_t buf_size, |
- const OnWriteCompleteCallback& callback); |
- |
- // Returns a count of bytes written back to the cache. |
- size_t bytes_written() const { return bytes_written_; } |
- bool did_replace() const { return did_replace_; } |
- |
- private: |
- // States for the state machine. |
- // |
- // The state machine flows roughly like this: if there is no existing cache |
- // entry, incoming headers and data are written directly back to the cache |
- // ("passthrough mode", the PASSTHROUGH states). If there is an existing cache |
- // entry, incoming headers and data are compared to the existing cache entry |
- // ("compare mode", the COMPARE states); if at any point the incoming |
- // headers/data are not equal to the cached headers/data, this class copies |
- // the cached data up to the point where the incoming data and the cached data |
- // diverged ("copy mode", the COPY states), then switches to "passthrough |
- // mode" to write the remainder of the incoming data. The overall effect is to |
- // avoid rewriting the cache entry if the incoming data is identical to the |
- // cached data. |
- // |
- // Note that after a call to MaybeWriteHeaders or MaybeWriteData completes, |
- // the machine is always in STATE_DONE, indicating that the call is finished; |
- // those methods are responsible for setting a new initial state. |
- enum State { |
- STATE_START, |
- // Control flows linearly through these four states, then loops from |
- // READ_DATA_FOR_COMPARE_DONE to READ_DATA_FOR_COMPARE, or exits to |
- // READ_HEADERS_FOR_COPY. |
- STATE_READ_HEADERS_FOR_COMPARE, |
- STATE_READ_HEADERS_FOR_COMPARE_DONE, |
- STATE_READ_DATA_FOR_COMPARE, |
- STATE_READ_DATA_FOR_COMPARE_DONE, |
- |
- // Control flows linearly through these states, with each pass from |
- // READ_DATA_FOR_COPY to WRITE_DATA_FOR_COPY_DONE copying one block of data |
- // at a time. Control loops from WRITE_DATA_FOR_COPY_DONE back to |
- // READ_DATA_FOR_COPY if there is more data to copy, or exits to |
- // WRITE_DATA_FOR_PASSTHROUGH. |
- STATE_READ_HEADERS_FOR_COPY, |
- STATE_READ_HEADERS_FOR_COPY_DONE, |
- STATE_WRITE_HEADERS_FOR_COPY, |
- STATE_WRITE_HEADERS_FOR_COPY_DONE, |
- STATE_READ_DATA_FOR_COPY, |
- STATE_READ_DATA_FOR_COPY_DONE, |
- STATE_WRITE_DATA_FOR_COPY, |
- STATE_WRITE_DATA_FOR_COPY_DONE, |
- |
- // Control flows linearly through these states, with a loop between |
- // WRITE_DATA_FOR_PASSTHROUGH and WRITE_DATA_FOR_PASSTHROUGH_DONE. |
- STATE_WRITE_HEADERS_FOR_PASSTHROUGH, |
- STATE_WRITE_HEADERS_FOR_PASSTHROUGH_DONE, |
- STATE_WRITE_DATA_FOR_PASSTHROUGH, |
- STATE_WRITE_DATA_FOR_PASSTHROUGH_DONE, |
- |
- // This state means "done with the current call; ready for another one." |
- STATE_DONE, |
- }; |
- |
- // Drives this class's state machine. This function steps the state machine |
- // until one of: |
- // a) One of the state functions returns an error |
- // b) The state machine reaches STATE_DONE |
- // A successful value (net::OK or greater) indicates that the requested |
- // operation completed synchronously. A return value of ERR_IO_PENDING |
- // indicates that some step had to submit asynchronous IO for later |
- // completion, and the state machine will resume running (via AsyncDoLoop) |
- // when that asynchronous IO completes. Any other return value indicates that |
- // the requested operation failed synchronously. |
- int DoLoop(int result); |
- |
- // State handlers. See function comments in the corresponding source file for |
- // details on these. |
- int DoStart(int result); |
- int DoReadHeadersForCompare(int result); |
- int DoReadHeadersForCompareDone(int result); |
- int DoReadDataForCompare(int result); |
- int DoReadDataForCompareDone(int result); |
- int DoReadHeadersForCopy(int result); |
- int DoReadHeadersForCopyDone(int result); |
- int DoWriteHeadersForCopy(int result); |
- int DoWriteHeadersForCopyDone(int result); |
- int DoReadDataForCopy(int result); |
- int DoReadDataForCopyDone(int result); |
- int DoWriteDataForCopy(int result); |
- int DoWriteDataForCopyDone(int result); |
- int DoWriteHeadersForPassthrough(int result); |
- int DoWriteHeadersForPassthroughDone(int result); |
- int DoWriteDataForPassthrough(int result); |
- int DoWriteDataForPassthroughDone(int result); |
- int DoDone(int result); |
- |
- // Wrappers for asynchronous calls. These are responsible for scheduling a |
- // callback to drive the state machine if needed. These either: |
- // a) Return ERR_IO_PENDING, and schedule a callback to run the state |
- // machine's Run() later, or |
- // b) Return some other value and do not schedule a callback. |
- int ReadInfoHelper(const scoped_ptr<ServiceWorkerResponseReader>& reader, |
- HttpResponseInfoIOBuffer* buf); |
- int ReadDataHelper(const scoped_ptr<ServiceWorkerResponseReader>& reader, |
- net::IOBuffer* buf, |
- int buf_len); |
- int WriteInfoHelper(const scoped_ptr<ServiceWorkerResponseWriter>& writer, |
- HttpResponseInfoIOBuffer* buf); |
- int WriteDataHelper(const scoped_ptr<ServiceWorkerResponseWriter>& writer, |
- net::IOBuffer* buf, |
- int buf_len); |
- |
- // Callback used by the above helpers for their IO operations. This is only |
- // run when those IO operations complete asynchronously, in which case it |
- // invokes the synchronous DoLoop function and runs the client callback (the |
- // one passed into MaybeWriteData/MaybeWriteHeaders) if that invocation |
- // of DoLoop completes synchronously. |
- void AsyncDoLoop(int result); |
- |
- State state_; |
- // Note that this variable is only used for assertions; it reflects "state != |
- // DONE && not in synchronous DoLoop". |
- bool io_pending_; |
- bool comparing_; |
- |
- scoped_refptr<HttpResponseInfoIOBuffer> headers_to_read_; |
- scoped_refptr<HttpResponseInfoIOBuffer> headers_to_write_; |
- scoped_refptr<net::IOBuffer> data_to_read_; |
- int len_to_read_; |
- scoped_refptr<net::IOBuffer> data_to_copy_; |
- scoped_refptr<net::IOBuffer> data_to_write_; |
- int len_to_write_; |
- OnWriteCompleteCallback pending_callback_; |
- |
- size_t cached_length_; |
- |
- size_t bytes_compared_; |
- size_t bytes_copied_; |
- size_t bytes_written_; |
- |
- bool did_replace_; |
- |
- size_t compare_offset_; |
- |
- ResponseReaderCreator reader_creator_; |
- ResponseWriterCreator writer_creator_; |
- scoped_ptr<ServiceWorkerResponseReader> compare_reader_; |
- scoped_ptr<ServiceWorkerResponseReader> copy_reader_; |
- scoped_ptr<ServiceWorkerResponseWriter> writer_; |
- base::WeakPtrFactory<ServiceWorkerCacheWriter> weak_factory_; |
-}; |
- |
-} // namespace content |
- |
-#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CACHE_WRITER_H_ |