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

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: 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..897040eb948e1f20115a5f0bcc7e5ec69e20831b
--- /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 worker thread.
+ 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(const net::HttpByteRange& byte_range);
+
+ // 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