mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			160 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (c) 2012 The Chromium Embedded Framework 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 CEF_LIBCEF_BROWSER_STREAM_IMPL_H_
 | |
| #define CEF_LIBCEF_BROWSER_STREAM_IMPL_H_
 | |
| #pragma once
 | |
| 
 | |
| #include "include/cef_stream.h"
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <string>
 | |
| 
 | |
| #include "base/synchronization/lock.h"
 | |
| 
 | |
| // Implementation of CefStreamReader for files.
 | |
| class CefFileReader : public CefStreamReader {
 | |
|  public:
 | |
|   CefFileReader(FILE* file, bool close);
 | |
|   ~CefFileReader() override;
 | |
| 
 | |
|   size_t Read(void* ptr, size_t size, size_t n) override;
 | |
|   int Seek(int64 offset, int whence) override;
 | |
|   int64 Tell() override;
 | |
|   int Eof() override;
 | |
|   bool MayBlock() override { return true; }
 | |
| 
 | |
|  protected:
 | |
|   bool close_;
 | |
|   FILE* file_;
 | |
| 
 | |
|   base::Lock lock_;
 | |
| 
 | |
|   IMPLEMENT_REFCOUNTING(CefFileReader);
 | |
| };
 | |
| 
 | |
| // Implementation of CefStreamWriter for files.
 | |
| class CefFileWriter : public CefStreamWriter {
 | |
|  public:
 | |
|   CefFileWriter(FILE* file, bool close);
 | |
|   ~CefFileWriter() override;
 | |
| 
 | |
|   size_t Write(const void* ptr, size_t size, size_t n) override;
 | |
|   int Seek(int64 offset, int whence) override;
 | |
|   int64 Tell() override;
 | |
|   int Flush() override;
 | |
|   bool MayBlock() override { return true; }
 | |
| 
 | |
|  protected:
 | |
|   FILE* file_;
 | |
|   bool close_;
 | |
| 
 | |
|   base::Lock lock_;
 | |
| 
 | |
|   IMPLEMENT_REFCOUNTING(CefFileWriter);
 | |
| };
 | |
| 
 | |
| // Implementation of CefStreamReader for byte buffers.
 | |
| class CefBytesReader : public CefStreamReader {
 | |
|  public:
 | |
|   CefBytesReader(void* data, int64 datasize, bool copy);
 | |
|   ~CefBytesReader() override;
 | |
| 
 | |
|   size_t Read(void* ptr, size_t size, size_t n) override;
 | |
|   int Seek(int64 offset, int whence) override;
 | |
|   int64 Tell() override;
 | |
|   int Eof() override;
 | |
|   bool MayBlock() override { return false; }
 | |
| 
 | |
|   void SetData(void* data, int64 datasize, bool copy);
 | |
| 
 | |
|   void* GetData() { return data_; }
 | |
|   size_t GetDataSize() { return offset_; }
 | |
| 
 | |
|  protected:
 | |
|   void* data_;
 | |
|   int64 datasize_;
 | |
|   bool copy_;
 | |
|   int64 offset_;
 | |
| 
 | |
|   base::Lock lock_;
 | |
| 
 | |
|   IMPLEMENT_REFCOUNTING(CefBytesReader);
 | |
| };
 | |
| 
 | |
| // Implementation of CefStreamWriter for byte buffers.
 | |
| class CefBytesWriter : public CefStreamWriter {
 | |
|  public:
 | |
|   explicit CefBytesWriter(size_t grow);
 | |
|   ~CefBytesWriter() override;
 | |
| 
 | |
|   size_t Write(const void* ptr, size_t size, size_t n) override;
 | |
|   int Seek(int64 offset, int whence) override;
 | |
|   int64 Tell() override;
 | |
|   int Flush() override;
 | |
|   bool MayBlock() override { return false; }
 | |
| 
 | |
|   void* GetData() { return data_; }
 | |
|   int64 GetDataSize() { return offset_; }
 | |
|   std::string GetDataString();
 | |
| 
 | |
|  protected:
 | |
|   size_t Grow(size_t size);
 | |
| 
 | |
|   size_t grow_;
 | |
|   void* data_;
 | |
|   int64 datasize_;
 | |
|   int64 offset_;
 | |
| 
 | |
|   base::Lock lock_;
 | |
| 
 | |
|   IMPLEMENT_REFCOUNTING(CefBytesWriter);
 | |
| };
 | |
| 
 | |
| // Implementation of CefStreamReader for handlers.
 | |
| class CefHandlerReader : public CefStreamReader {
 | |
|  public:
 | |
|   explicit CefHandlerReader(CefRefPtr<CefReadHandler> handler)
 | |
|       : handler_(handler) {}
 | |
| 
 | |
|   size_t Read(void* ptr, size_t size, size_t n) override {
 | |
|     return handler_->Read(ptr, size, n);
 | |
|   }
 | |
|   int Seek(int64 offset, int whence) override {
 | |
|     return handler_->Seek(offset, whence);
 | |
|   }
 | |
|   int64 Tell() override { return handler_->Tell(); }
 | |
|   int Eof() override { return handler_->Eof(); }
 | |
|   bool MayBlock() override { return handler_->MayBlock(); }
 | |
| 
 | |
|  protected:
 | |
|   CefRefPtr<CefReadHandler> handler_;
 | |
| 
 | |
|   IMPLEMENT_REFCOUNTING(CefHandlerReader);
 | |
| };
 | |
| 
 | |
| // Implementation of CefStreamWriter for handlers.
 | |
| class CefHandlerWriter : public CefStreamWriter {
 | |
|  public:
 | |
|   explicit CefHandlerWriter(CefRefPtr<CefWriteHandler> handler)
 | |
|       : handler_(handler) {}
 | |
| 
 | |
|   size_t Write(const void* ptr, size_t size, size_t n) override {
 | |
|     return handler_->Write(ptr, size, n);
 | |
|   }
 | |
|   int Seek(int64 offset, int whence) override {
 | |
|     return handler_->Seek(offset, whence);
 | |
|   }
 | |
|   int64 Tell() override { return handler_->Tell(); }
 | |
|   int Flush() override { return handler_->Flush(); }
 | |
|   bool MayBlock() override { return handler_->MayBlock(); }
 | |
| 
 | |
|  protected:
 | |
|   CefRefPtr<CefWriteHandler> handler_;
 | |
| 
 | |
|   IMPLEMENT_REFCOUNTING(CefHandlerWriter);
 | |
| };
 | |
| 
 | |
| #endif  // CEF_LIBCEF_BROWSER_STREAM_IMPL_H_
 |