atom_blob_reader.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // Copyright (c) 2016 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ATOM_BROWSER_ATOM_BLOB_READER_H_
  5. #define ATOM_BROWSER_ATOM_BLOB_READER_H_
  6. #include <memory>
  7. #include <string>
  8. #include "atom/common/promise_util.h"
  9. #include "base/callback.h"
  10. namespace content {
  11. class ChromeBlobStorageContext;
  12. }
  13. namespace net {
  14. class IOBuffer;
  15. }
  16. namespace storage {
  17. class BlobDataHandle;
  18. class BlobReader;
  19. } // namespace storage
  20. namespace v8 {
  21. template <class T>
  22. class Local;
  23. class Value;
  24. } // namespace v8
  25. namespace atom {
  26. // A class to keep track of the blob context. All methods,
  27. // except Ctor are expected to be called on IO thread.
  28. class AtomBlobReader {
  29. public:
  30. explicit AtomBlobReader(content::ChromeBlobStorageContext* blob_context);
  31. ~AtomBlobReader();
  32. void StartReading(const std::string& uuid, atom::util::Promise promise);
  33. private:
  34. // A self-destroyed helper class to read the blob data.
  35. // Must be accessed on IO thread.
  36. class BlobReadHelper {
  37. public:
  38. using CompletionCallback = base::OnceCallback<void(char*, int)>;
  39. BlobReadHelper(std::unique_ptr<storage::BlobReader> blob_reader,
  40. BlobReadHelper::CompletionCallback callback);
  41. ~BlobReadHelper();
  42. void Read();
  43. private:
  44. void DidCalculateSize(int result);
  45. void DidReadBlobData(const scoped_refptr<net::IOBuffer>& blob_data,
  46. int bytes_read);
  47. std::unique_ptr<storage::BlobReader> blob_reader_;
  48. BlobReadHelper::CompletionCallback completion_callback_;
  49. DISALLOW_COPY_AND_ASSIGN(BlobReadHelper);
  50. };
  51. scoped_refptr<content::ChromeBlobStorageContext> blob_context_;
  52. DISALLOW_COPY_AND_ASSIGN(AtomBlobReader);
  53. };
  54. } // namespace atom
  55. #endif // ATOM_BROWSER_ATOM_BLOB_READER_H_