80 lines
		
	
	
	
		
			1.9 KiB
			
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			1.9 KiB
			
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright (c) 2016 GitHub, Inc.
 | 
						|
// Use of this source code is governed by the MIT license that can be
 | 
						|
// found in the LICENSE file.
 | 
						|
 | 
						|
#ifndef ATOM_BROWSER_ATOM_BLOB_READER_H_
 | 
						|
#define ATOM_BROWSER_ATOM_BLOB_READER_H_
 | 
						|
 | 
						|
#include <string>
 | 
						|
 | 
						|
#include "base/callback.h"
 | 
						|
 | 
						|
namespace content {
 | 
						|
class ChromeBlobStorageContext;
 | 
						|
}
 | 
						|
 | 
						|
namespace net {
 | 
						|
class IOBuffer;
 | 
						|
}
 | 
						|
 | 
						|
namespace storage {
 | 
						|
class BlobDataHandle;
 | 
						|
class BlobReader;
 | 
						|
class FileSystemContext;
 | 
						|
}
 | 
						|
 | 
						|
namespace v8 {
 | 
						|
template <class T>
 | 
						|
class Local;
 | 
						|
class Value;
 | 
						|
}
 | 
						|
 | 
						|
namespace atom {
 | 
						|
 | 
						|
// A class to keep track of the blob context. All methods,
 | 
						|
// except Ctor are expected to be called on IO thread.
 | 
						|
class AtomBlobReader {
 | 
						|
 public:
 | 
						|
  using CompletionCallback = base::Callback<void(v8::Local<v8::Value>)>;
 | 
						|
 | 
						|
  AtomBlobReader(content::ChromeBlobStorageContext* blob_context,
 | 
						|
                 storage::FileSystemContext* file_system_context);
 | 
						|
  ~AtomBlobReader();
 | 
						|
 | 
						|
  void StartReading(
 | 
						|
      const std::string& uuid,
 | 
						|
      const AtomBlobReader::CompletionCallback& callback);
 | 
						|
 | 
						|
 private:
 | 
						|
  // A self-destroyed helper class to read the blob data.
 | 
						|
  // Must be accessed on IO thread.
 | 
						|
  class BlobReadHelper {
 | 
						|
   public:
 | 
						|
    using CompletionCallback = base::Callback<void(char*, int)>;
 | 
						|
 | 
						|
    BlobReadHelper(std::unique_ptr<storage::BlobReader> blob_reader,
 | 
						|
                   const BlobReadHelper::CompletionCallback& callback);
 | 
						|
    ~BlobReadHelper();
 | 
						|
 | 
						|
    void Read();
 | 
						|
 | 
						|
   private:
 | 
						|
    void DidCalculateSize(int result);
 | 
						|
    void DidReadBlobData(const scoped_refptr<net::IOBuffer>& blob_data,
 | 
						|
                         int bytes_read);
 | 
						|
 | 
						|
    std::unique_ptr<storage::BlobReader> blob_reader_;
 | 
						|
    BlobReadHelper::CompletionCallback completion_callback_;
 | 
						|
 | 
						|
    DISALLOW_COPY_AND_ASSIGN(BlobReadHelper);
 | 
						|
  };
 | 
						|
 | 
						|
  scoped_refptr<content::ChromeBlobStorageContext> blob_context_;
 | 
						|
  scoped_refptr<storage::FileSystemContext> file_system_context_;
 | 
						|
 | 
						|
  DISALLOW_COPY_AND_ASSIGN(AtomBlobReader);
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace atom
 | 
						|
 | 
						|
#endif  // ATOM_BROWSER_ATOM_BLOB_READER_H_
 |