Home | History | Annotate | Download | only in net
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef ANDROID_WEBVIEW_NATIVE_INPUT_STREAM_READER_H_
      6 #define ANDROID_WEBVIEW_NATIVE_INPUT_STREAM_READER_H_
      7 
      8 #include "base/memory/ref_counted.h"
      9 
     10 namespace net {
     11 class HttpByteRange;
     12 class IOBuffer;
     13 }
     14 
     15 namespace android_webview {
     16 
     17 class InputStream;
     18 
     19 // Class responsible for reading the InputStream.
     20 class InputStreamReader {
     21  public:
     22   // The constructor is called on the IO thread, not on the worker thread.
     23   InputStreamReader(android_webview::InputStream* stream);
     24   virtual ~InputStreamReader();
     25 
     26   // Perform a seek operation on the InputStream associated with this job.
     27   // On successful completion the InputStream would have skipped reading the
     28   // number of bytes equal to the lower range of |byte_range|.
     29   // This method should be called on the |g_worker_thread| thread.
     30   //
     31   // |byte_range| is the range of bytes to be read from |stream|
     32   //
     33   // A negative return value will indicate an error code, a positive value
     34   // will indicate the expected size of the content.
     35   virtual int Seek(const net::HttpByteRange& byte_range);
     36 
     37   // Read data from |stream_|.  This method should be called on the
     38   // |g_worker_thread| thread.
     39   //
     40   // A negative return value will indicate an error code, a positive value
     41   // will indicate the expected size of the content.
     42   virtual int ReadRawData(net::IOBuffer* buffer, int buffer_size);
     43 
     44  private:
     45   // Verify the requested range against the stream size.
     46   // net::OK is returned on success, the error code otherwise.
     47   int VerifyRequestedRange(net::HttpByteRange* byte_range,
     48                            int* content_size);
     49 
     50   // Skip to the first byte of the requested read range.
     51   // net::OK is returned on success, the error code otherwise.
     52   int SkipToRequestedRange(const net::HttpByteRange& byte_range);
     53 
     54   android_webview::InputStream* stream_;
     55 
     56   DISALLOW_COPY_AND_ASSIGN(InputStreamReader);
     57 };
     58 
     59 } // namespace android_webview
     60 
     61 #endif //  ANDROID_WEBVIEW_NATIVE_INPUT_STREAM_READER_H_
     62