Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(190)

Unified Diff: content/browser/service_worker/service_worker_cache_writer.h

Issue 1351423002: Revert of ServiceWorkerWriteToCacheJob: refactor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_
« no previous file with comments | « content/browser/appcache/appcache_response.h ('k') | content/browser/service_worker/service_worker_cache_writer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698