12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef ANDROID_WEBVIEW_BROWSER_INPUT_STREAM_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ANDROID_WEBVIEW_BROWSER_INPUT_STREAM_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net { 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class IOBuffer; 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android_webview { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Abstract wrapper used to access the InputStream Java class. 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class is safe to pass around between threads (the destructor, 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// constructor and methods can be called on different threads) but calling 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// methods concurrently might have undefined results. 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class InputStream { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~InputStream() {} 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets |bytes_available| to the number of bytes that can be read (or skipped 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // over) from this input stream without blocking by the next caller of a 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // method for this input stream. 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if completed successfully or false if an exception was 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // thrown. 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool BytesAvailable(int* bytes_available) const = 0; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Skips over and discards |n| bytes of data from this input stream. Sets 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |bytes_skipped| to the number of of bytes skipped. 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if completed successfully or false if an exception was 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // thrown. 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool Skip(int64_t n, int64_t* bytes_skipped) = 0; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Reads at most |length| bytes into |dest|. Sets |bytes_read| to the total 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // number of bytes read into |dest| or 0 if there is no more data because the 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // end of the stream was reached. 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |dest| must be at least |length| in size. 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if completed successfully or false if an exception was 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // thrown. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool Read(net::IOBuffer* dest, int length, int* bytes_read) = 0; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InputStream() {} 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace android_webview 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // ANDROID_WEBVIEW_BROWSER_INPUT_STREAM_H_ 52