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_
 |