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

Unified Diff: android_webview/browser/net/input_stream_reader.h

Issue 11363123: [android_webview] Don't block the IO thread when reading from an InputStream. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix double-free Created 8 years, 1 month 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: android_webview/browser/net/input_stream_reader.h
diff --git a/android_webview/browser/net/input_stream_reader.h b/android_webview/browser/net/input_stream_reader.h
new file mode 100644
index 0000000000000000000000000000000000000000..4ce8d4ab9d39f0142e9f26fe4976f4ca7829efa8
--- /dev/null
+++ b/android_webview/browser/net/input_stream_reader.h
@@ -0,0 +1,66 @@
+// Copyright (c) 2012 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 ANDROID_WEBVIEW_NATIVE_INPUT_STREAM_READER_H_
+#define ANDROID_WEBVIEW_NATIVE_INPUT_STREAM_READER_H_
+
+#include "base/memory/ref_counted.h"
+
+namespace net {
+class HttpByteRange;
+class IOBuffer;
+}
+
+namespace android_webview {
+
+class InputStream;
+
+// Class responsible for reading the InputStream.
+class InputStreamReader
+ : public base::RefCountedThreadSafe<InputStreamReader> {
+ public:
+ // The constructor is called on the IO thread, not on the WorkerThread.
joth 2012/11/20 20:46:35 nit: worker thread. (WorkerThread is a proper clas
mkosiba (inactive) 2012/11/21 15:19:47 Done.
+ InputStreamReader(android_webview::InputStream* stream);
+
+ // Perform a seek operation on the InputStream associated with this job.
+ // On successful completion the InputStream would have skipped reading the
+ // number of bytes equal to the lower range of |byte_range|.
+ // This method should be called on the |g_worker_thread| thread.
+ //
+ // |byte_range| is the range of bytes to be read from |stream|
+ //
+ // A negative return value will indicate an error code, a positive value
+ // will indicate the expected size of the content.
+ virtual int Seek(net::HttpByteRange byte_range);
joth 2012/11/20 20:46:35 nit: pass by const&
mkosiba (inactive) 2012/11/21 15:19:47 Done.
+
+ // Read data from |stream_|. This method should be called on the
+ // |g_worker_thread| thread.
+ //
+ // A negative return value will indicate an error code, a positive value
+ // will indicate the expected size of the content.
+ virtual int ReadRawData(net::IOBuffer* buffer, int buffer_size);
+
+ protected:
+ virtual ~InputStreamReader();
+
+ private:
+ friend class base::RefCountedThreadSafe<InputStreamReader>;
+
+ // Verify the requested range against the stream size.
+ // net::OK is returned on success, the error code otherwise.
+ int VerifyRequestedRange(net::HttpByteRange* byte_range,
+ int* content_size);
+
+ // Skip to the first byte of the requested read range.
+ // net::OK is returned on success, the error code otherwise.
+ int SkipToRequestedRange(const net::HttpByteRange& byte_range);
+
+ android_webview::InputStream* stream_;
+
+ DISALLOW_COPY_AND_ASSIGN(InputStreamReader);
+};
+
+} // namespace android_webview
+
+#endif // ANDROID_WEBVIEW_NATIVE_INPUT_STREAM_READER_H_

Powered by Google App Engine
This is Rietveld 408576698