| Index: storage/browser/blob/blob_data_handle.h | 
| diff --git a/storage/browser/blob/blob_data_handle.h b/storage/browser/blob/blob_data_handle.h | 
| index 3f4529346b103cc0149d0a507494011e867153dc..38053b357f9b7b5e2d8c2d1527ecdfb20a3893c7 100644 | 
| --- a/storage/browser/blob/blob_data_handle.h | 
| +++ b/storage/browser/blob/blob_data_handle.h | 
| @@ -5,6 +5,7 @@ | 
| #ifndef STORAGE_BROWSER_BLOB_BLOB_DATA_HANDLE_H_ | 
| #define STORAGE_BROWSER_BLOB_BLOB_DATA_HANDLE_H_ | 
|  | 
| +#include <limits> | 
| #include <memory> | 
| #include <string> | 
|  | 
| @@ -39,6 +40,8 @@ class FileSystemContext; | 
| class STORAGE_EXPORT BlobDataHandle | 
| : public base::SupportsUserData::Data { | 
| public: | 
| +  static constexpr uint64_t kUnknownSize = std::numeric_limits<uint64_t>::max(); | 
| + | 
| // True means the blob was constructed successfully, and false means that | 
| // there was an error, which is reported in the second argument. | 
| using BlobConstructedCallback = | 
| @@ -56,6 +59,10 @@ class STORAGE_EXPORT BlobDataHandle | 
| // Must be called on IO thread. | 
| bool IsBroken() const; | 
|  | 
| +  // Returns the broken reason if this blob is broken. | 
| +  // Must be called on IO thread. | 
| +  IPCBlobCreationCancelCode GetBrokenReason() const; | 
| + | 
| // The callback will be run on the IO thread when construction of the blob | 
| // is complete. If construction is already complete, then the task is run | 
| // immediately on the current message loop (i.e. IO thread). | 
| @@ -77,6 +84,9 @@ class STORAGE_EXPORT BlobDataHandle | 
| const std::string& content_type() const; | 
| // May be accessed on any thread. | 
| const std::string& content_disposition() const; | 
| +  // May be accessed on any thread. In rare cases where the blob is created | 
| +  // as a file from javascript, this will be kUnknownSize. | 
| +  uint64_t size() const; | 
|  | 
| // This call and the destruction of the returned snapshot must be called | 
| // on the IO thread. If the blob is broken, then we return a nullptr here. | 
| @@ -94,6 +104,7 @@ class STORAGE_EXPORT BlobDataHandle | 
| BlobDataHandleShared(const std::string& uuid, | 
| const std::string& content_type, | 
| const std::string& content_disposition, | 
| +                         uint64_t size, | 
| BlobStorageContext* context); | 
|  | 
| private: | 
| @@ -106,6 +117,7 @@ class STORAGE_EXPORT BlobDataHandle | 
| const std::string uuid_; | 
| const std::string content_type_; | 
| const std::string content_disposition_; | 
| +    const uint64_t size_; | 
| base::WeakPtr<BlobStorageContext> context_; | 
|  | 
| DISALLOW_COPY_AND_ASSIGN(BlobDataHandleShared); | 
| @@ -115,6 +127,7 @@ class STORAGE_EXPORT BlobDataHandle | 
| BlobDataHandle(const std::string& uuid, | 
| const std::string& content_type, | 
| const std::string& content_disposition, | 
| +                 uint64_t size, | 
| BlobStorageContext* context, | 
| base::SequencedTaskRunner* io_task_runner); | 
|  | 
|  |